ced13 Posted January 27, 2023 Share Posted January 27, 2023 Bonjour, comme décrit dans le titre je cherche un code overdrive afin d' éviter des erreur lors de synchronisation fournisseur/produit car 1 module en synchro permanente et un module en synchro tache cron de 00h00 a 8h00 du matin, un petit peu d'aide serait la bien venu Svp en vous remerciant d'avance du temps que vous allez m'accorder Link to comment Share on other sites More sharing options...
ced13 Posted January 27, 2023 Author Share Posted January 27, 2023 J'ai fait un test php avec ce code mais j"obtiens une erreur 500 <?php require_once(dirname(__FILE__).'/config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); $module_name = 'spmgsnipreview'; $start_time = strtotime('08:00:00'); // heure de début $end_time = strtotime('14:25:00'); // heure de fin if (Module::isEnabled($module_name)) { $current_time = strtotime(date('H:i:s')); if ($current_time < $start_time || $current_time > $end_time) { Module::disable($module_name); } } else { $current_time = strtotime(date('H:i:s')); if ($current_time >= $start_time && $current_time <= $end_time) { Module::enable($module_name); } } Auriez vous une piste de travail Link to comment Share on other sites More sharing options...
Mediacom87 Posted January 27, 2023 Share Posted January 27, 2023 Il y a 2 heures, ced13 a dit : Auriez vous une piste de travail Erreur 500 = activer mode debug pour identifier et corriger l'erreur. Link to comment Share on other sites More sharing options...
ced13 Posted January 28, 2023 Author Share Posted January 28, 2023 (edited) 18 hours ago, Mediacom87 said: Erreur 500 = activer mode debug pour identifier et corriger l'erreur. Voici les erreur que j'obtiens en debug, J'ai essayé avec un autre module spmgsnipreview/ps_categoryproducts pour voir mais même résultat (1/1) FatalThrowableError Using $this when not in object context in Module.php line 955 at ModuleCore::disable('ps_categoryproducts')in activedesactivemodule.php line 12 Merci Edited January 28, 2023 by ced13 (see edit history) Link to comment Share on other sites More sharing options...
Mediacom87 Posted January 28, 2023 Share Posted January 28, 2023 Normal, vous n'utilisez pas les méthodes static. Il faut utiliser les bonnes méthodes et pour ce faire, il suffit de lire la classe à laquelle vous faites référence. Par exemple, vous cherchez à utiliser public function disable($force_all = false) $force_all est booléen et vous lui attribuez le nom du module, donc encore plus incohérent. Certainement que vous vouliez utiliser cette méthode public static function disableByName($name) Qui est annoncé comme déprécié depuis la 1.7 Mais comme vous ne semblez pas passer par un controller propre, on ne va pas s'offusquer plus que cela. Link to comment Share on other sites More sharing options...
ced13 Posted January 28, 2023 Author Share Posted January 28, 2023 27 minutes ago, Mediacom87 said: Certainement que vous vouliez utiliser cette méthode public static function disableByName($name) Qui est annoncé comme déprécié depuis la 1.7 Mais comme vous ne semblez pas passer par un controller propre, on ne va pas s'offusquer plus que cela. J' ai trouver une méthode simple avec un fichier simple qui fonctionne pour l'activation : <?php require_once(dirname(__FILE__).'/config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); // on récupère l'instance de la classe "Module" $module = Module::getInstanceByName('Nomdevotremodule'); // on vérifie si le module est installé if ($module->active) { // on désactive le module $module->disable(); echo "Module désactivé."; } else { echo "Le module est déjà désactivé."; } ?> et un fichier qui fonctionne pour la désactivation <?php require_once(dirname(__FILE__).'/config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); // on récupère l'instance de la classe "Module" $module = Module::getInstanceByName('nomdevotremodule'); // on vérifie si le module est installé if (!$module->active) { // on active le module $module->enable(); echo "Module activé."; } else { echo "Le module est déjà activé."; } ?> et je fait ensuite 2 appel via tache cron une pour l'activation et une pour la désactivation, Ps: si vous avez des observations je suis preneur (sécurité - optimisation ou autres ) Merci Mediacom87 Link to comment Share on other sites More sharing options...
Mediacom87 Posted January 28, 2023 Share Posted January 28, 2023 Vos fichiers sont accessibles à tous et donc n'importe qui peut désactiver ou activer le module en question. Link to comment Share on other sites More sharing options...
ced13 Posted January 28, 2023 Author Share Posted January 28, 2023 6 minutes ago, Mediacom87 said: Vos fichiers sont accessibles à tous et donc n'importe qui peut désactiver ou activer le module en question. C'est se que je pensé essayé de rajoutez un token Link to comment Share on other sites More sharing options...
Mediacom87 Posted January 28, 2023 Share Posted January 28, 2023 à l’instant, ced13 a dit : C'est se que je pensé essayé de rajoutez un token Le token ne sécurise pas réellement, juste, il identifie l'appel. Vous auriez dû faire un module avec un controller. Link to comment Share on other sites More sharing options...
ced13 Posted January 28, 2023 Author Share Posted January 28, 2023 51 minutes ago, Mediacom87 said: Le token ne sécurise pas réellement, juste, il identifie l'appel. Vous auriez dû faire un module avec un controller. je vais essayé si j'y arrive je mettrais le lien du module Link to comment Share on other sites More sharing options...
doekia Posted January 28, 2023 Share Posted January 28, 2023 Le plus simple et surement le plus efficace est d'injecter dans le constructeur du module la plage horaire et de changer le status actif/inactif dans l'instance Link to comment Share on other sites More sharing options...
ced13 Posted January 30, 2023 Author Share Posted January 30, 2023 On 1/28/2023 at 8:07 PM, doekia said: Le plus simple et surement le plus efficace est d'injecter dans le constructeur du module la plage horaire et de changer le status actif/inactif dans l'instance auriez vous une piste de travail car pour l'instant je galère un peu, voila ce que j 'ai fait comme code : <?php class ps_disablemodule extends Module { public function __construct() { $this->name = 'ps_disablemodule'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'Vous-même'; $this->need_instance = 0; $this->ps_versions_compliancy = array('min' => '1.7.0.0', 'max' => _PS_VERSION_); $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Désactiver le module'); $this->description = $this->l('Permet de désactiver le module ps_mmoconnector'); $this->confirmUninstall = $this->l('Êtes-vous sûr de vouloir désinstaller ce module?'); if (!Configuration::get('PS_DISABLEMODULE_NAME')) { $this->warning = $this->l('Aucun nom de module n\'a été configuré'); } } public function install() { return parent::install() && $this->registerHook('displayBackOfficeHeader'); } public function uninstall() { return parent::uninstall(); } public function getContent() { $output = null; if (Tools::isSubmit('submit'.$this->name)) { $module_name = strval(Tools::getValue('PS_DISABLEMODULE_NAME')); if (!$module_name || empty($module_name) || !Validate::isModuleName($module_name)) { $output .= $this->displayError($this->l('Invalid module name')); } else { Configuration::updateValue('PS_DISABLEMODULE_NAME', $module_name); $output .= $this->displayConfirmation($this->l('Settings updated')); } } return $output.$this->displayForm(); } public function displayForm() { // Get default language $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); // Init Fields form array $fields_form[0]['form'] = [ 'legend' => [ 'title' => $this->l('Settings'), ], 'input' => [ [ 'type' => 'text', 'label' => $this->l('Module name'), 'name' => 'PS_DISABLEMODULE_NAME', 'size' => 20, 'required' => true ] ], $fields_form[0]['form']['input'][] = array( 'type' => 'select', 'label' => $this->l('Select hour'), 'name' => 'PS_DISABLEMODULE_HOUR', 'options' => array( 'query' => array( array('id_option' => '0', 'name' => '12 AM'), array('id_option' => '1', 'name' => '1 AM'), array('id_option' => '2', 'name' => '2 AM'), // ... array('id_option' => '22', 'name' => '10 PM'), array('id_option' => '23', 'name' => '11 PM'), ), 'id' => 'id_option', 'name' => 'name' ) ); 'submit' =>[ 'title' => $this->l('Save'), 'class' => 'btn btn-default pull-right' ] ]; $helper = new HelperForm(); // Module, token and currentIndex $helper->module = $this; $helper->name_controller = $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; // Language $helper->default_form_language = $default_lang; $helper->allow_employee_form_lang = $default_lang; // Title and toolbar $helper->title = $this->displayName; $helper->show_toolbar = true; // false -> remove toolbar $helper->toolbar_scroll = true; // yes - > Toolbar is always visible on the top of the screen. $helper->submit_action = 'submit'.$this->name; $helper->toolbar_btn = [ 'save' => [ 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name. '&token='.Tools::getAdminTokenLite('AdminModules'), ], 'back' => [ 'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Back to list') ] ]; // Load current value $helper->fields_value['PS_DISABLEMODULE_NAME'] = Configuration::get('PS_DISABLEMODULE_NAME'); return $helper->generateForm($fields_form); } public function hookDisplayBackOfficeHeader() { $module_name = Configuration::get('PS_DISABLEMODULE_NAME'); if ($module_name) { $module = Module::getInstanceByName($module_name); if ($module) { $module->disable(); } } } } Link to comment Share on other sites More sharing options...
doekia Posted January 31, 2023 Share Posted January 31, 2023 Dans le constructeur, vous testez les plages horaire et vous changez $this->enable_device et/ou $this->active en fonction de votre besoin. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now