Jump to content

hookActionProductUpdate pas lancé


Recommended Posts

Bonjour !

J'ai un problème étrange avec un module. Il met à jour la disponibilité produit via un champ dans l'admin.

Le hook est bien installé :

public function install() {
		if (parent::install() == false ||
			!$this->registerHook('header') ||
			!$this->registerHook('backOfficeHeader') ||
			!$this->registerHook('displayAdminProductsExtra') ||
			!$this->registerHook('ActionProductUpdate')
			)
			return false;
			
		if (file_exists(dirname(__FILE__).'/sql/install.php'))
			require_once(dirname(__FILE__).'/sql/install.php');

		if(!$this->adminInstall()) return false;

		return true;
	}

Dans la base, j'ai bien la ligne correspondant au hook et au plugin (13 pour le hool si j'ai bien suivi ? ).

Sauf que, la fonction hookActionProductUpdate n'est visiblement pas utilisée :

public function hookActionProductUpdate($params) {
		error_log("TEST LANCEMENT");
		require_once(_PS_MODULE_DIR_."/productsavailability/classes/ProductsAvailabilityModel.php");
		require_once(_PS_MODULE_DIR_."/productsavailability/controllers/admin/AdminProductsAvailabilityController.php");
		$ModuleController = new AdminProductsAvailabilityController();
		$ModuleController->update_availability_text();
		return true;
	}

Rien dans les logs. 

J'ai tenté dans mon modèle d'afficher des infos : 

<?php

if (!defined('_PS_VERSION_'))
	exit;

class ProductsAvailabilityModel extends ObjectModel {
	public $id;
	public $context;

	public static $definition = array(
		'table' => 'product_availability',
		'primary' => 'id_availability',
		'fields' => array(
			'id_availability' =>		array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
			'id_lang' =>				array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
			'name' => 					array('type' => self::TYPE_STRING, 'validate' => 'isString', 'required' => true, 'size' => 255),
			'niveau' =>					array('type' => self::TYPE_INT, 'validate' => 'isString'),
			'replacement' =>			array('type' => self::TYPE_BOOL, 'validate' => 'isBool')
		)
	);

	public function __construct() {
		$product = new Product((int)Tools::getValue('id_product'));
		$this->context = Context::getContext();
		
	}

	public function getAvailabilityTexts() {
		error_log('test2');
		return Db::getInstance()->ExecuteS('SELECT * FROM `'._DB_PREFIX_.'product_availability`');
		
	}

	public static function getAvailabilityName($id_availability) {
		error_log("RN1");
		if (!(int)$id_availability)
			return false;
		else {
			$resultat = Db::getInstance()->getRow('SELECT name FROM `'._DB_PREFIX_.'product_availability` WHERE id_availability='.$id_availability);
			return $resultat['name'];
		}
	}

	public function updateAvailabilityText() {
		error_log("TESTTEST");
		$product = new Product((int)Tools::getValue('id_product'));
		$values = explode('-',Tools::getValue('text_in_stock'));
		
		$product->id_availability = $values[0];
		$product->available_now = $this->getAvailabilityName($product->id_availability);
		
		$product->available_later = $this->getAvailabilityName($product->id_availability);
		
		$product->update();
		
		return $this->getAvailabilityName(Tools::getValue('text_in_stock'));
	}

	protected function l($string, $class = 'AdminTab', $addslashes = false, $htmlentities = true) {
		// if the class is extended by a module, use modules/[module_name]/xx.php lang file
		$currentClass = get_class($this);
		if (Module::getModuleNameFromClass($currentClass))
			return Translate::getModuleTranslation(Module::$classInModule[$currentClass], $string, $currentClass);

		return Translate::getAdminTranslation($string, get_class($this), $addslashes, $htmlentities);
	}
};

Il n'y a que getAvailabilityTexts qui me donne un résultat. Le reste non.

Je tourne en rond, j'ai beau tester des choses impossible de trouver. 

Si vous avez une piste je suis preneur !!

Merci d'avance :)

Link to comment
Share on other sites

1- tu mets !$this->registerHook('ActionProductUpdate')
as essayé avec 
!$this->registerHook('actionProductUpdate')

2- le module s'est bien installé ? aucun message d'erreur ? essaye peut être de le réinitialiser
3- as tu essayé de greffer le module dans la configuration du module ?
4- je viens de tester sur 1731 et le hook actionProductUpdate est bien lancé avec comme arguments : 

Array
(
    [id_product] => 19
)

5- si tu fais un simple
public function hookActionProductUpdate($params) {
Configuration::updateValue('xxx', 1);
}

tu ne retrouves pas xxx dans la table ps_configuration ?

6- pour finir en beauté, tu appelles la fonction update_availability_text alors que son nom est updateAvailabilityText

Link to comment
Share on other sites

Merci pour ta réponse @coeos.pro !

Alors :

1/ J'ai modifié ça dans le code mais pas de changement
2/ C'est un site qu'un autre dev a essayé de passer de 1.5 à 1.6. Quelques problèmes donc je prends la suite. Je peux essayer de desinstaller/reinstaller mais j'ai peur de perdre les données non ?
3/ Même chose que plus haut, les produits sont déjà associés à des dispos (ça fonctionnait en 1.5 visiblement)
4/ Je ne sais pas quoi répondre :)
5/ La fonction hookActionProductUpdate n'est pas lancée du tout, quoi que je mette dedans.
6/ Cette fonction vient de mon AdminProductsAvailabilityController :

class AdminProductsAvailabilityController extends ModuleAdminController {
	
	protected $model;
	
	public function __construct() {
		$this->model = new ProductsAvailabilityModel();
		
		if (!Tools::getValue('id_product'))
			$this->multishop_context_group = false;		
	}

	public function load_availability_text() {
		error_log('demo2');
		return($this->model->getAvailabilityTexts());
	}
		
	public function update_availability_text() {
		error_log('demo');
		return($this->model->updateAvailabilityText());
		
	}
}

Je rame :)

Link to comment
Share on other sites

Pour info ça a bien l'air greffé. J'ai supprimé l'accroche et je l'ai remise mais aucun résultat. 

Je deviens fou ! 

 

5afd7fd276b28_Capturedecran2018-05-17a14_58_19.png.f5e591fdf5ac6763b4d174506c0f42e6.png

 

Et quand j'essaye de réinitialiser le module (ou desinstaller), j'ai cette erreur :

[PrestaShop] Fatal error in module file :/home/www/migration.point2vente.com/htdocs/classes/module/Module.php(2943) : eval()'d code:
require_once(): Failed opening required 'kses.php' (include_path='/home/www/migration.point2vente.com/htdocs/tools/htmlpurifier/standalone:.:/usr/share/php:/usr/share/pear')

 

Edited by Mathieu (see edit history)
Link to comment
Share on other sites

Du coup, le problème venait bien du hook.

Il n'existait tout simplement pas dans le controller par défaut ... Du coup j'ai fait un override en rajoutant le hook à la fonction d'update. 

Merci pour ton aide en tout cas !

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...