Jump to content

No access reference in table module_access for id_module 36. at line 2538 in file classes/module/Module.php


Recommended Posts

Bonjour à tous,

Après quelques grosses frustrations de personalisation du frontend sous Prestashop 8.1.2, j'ai décidé de tenter le coup de "downgrader" vers Prestashop 1.6 qui est la dernière version utilisant du code PHP "legacy" et non le framework Symphony.
Je suis conscient que la 1.6 date, mais nombre d'astuces d'édition de code trouvées sur Internet n'ont pas encore été adaptées aux version 1.7 et 8.

J'ai pu installer la version 1.6.1.24 avec succès (sur site distant), puis j'ai importé mon site en construction qui tournait jusqu'à présent avec la version 8.1.2. J'ai également réalisé une installation de la 1.6.1.24 en local (localhost) afin de pouvoir générer un dump.

Le frontend reste accessible, mais impossible d'accéder à l'admin (Erreur 500).

Après activation du mode débogage, ceci vient à la place d'erreur 500 :

[PrestaShopException]
No access reference in table module_access for id_module 36.
at line 2538 in file classes/module/Module.php

2533.                 self::$cache_permissions[$employee->id_profile][$row['id_module']]['uninstall'] = $row['uninstall'];
2534.             }
2535.         }
2536. 
2537.         if (!isset(self::$cache_permissions[$employee->id_profile][$id_module])) {
2538.             throw new PrestaShopException('No access reference in table module_access for id_module '.$id_module.'.');
2539.         }
2540. 
2541.         return (bool)self::$cache_permissions[$employee->id_profile][$id_module][$variable];
2542.     }
2543. 
ModuleCore::getPermissionStatic - [line 3283 - classes/controller/AdminController.php] - [2 Arguments]
AdminControllerCore->getModulesList - [line 2329 - classes/controller/AdminController.php] - [1 Arguments]
AdminControllerCore->renderModulesList - [line 2063 - classes/controller/AdminController.php]
AdminControllerCore->initContent - [line 136 - controllers/admin/AdminLoginController.php]
AdminLoginControllerCore->initContent - [line 189 - classes/controller/Controller.php]
ControllerCore->run - [line 367 - classes/Dispatcher.php]
DispatcherCore->dispatch - [line 58 - admin/index.php]

L'erreur serait donc liée au module 36 qui est "gridhtml", dont le dossier existe bien.

Comment j'ai réalisé la migration des données

Les tables ont été importées en détruisant les enregistrements créés par l'installateur (TRUNCATE nom_de_la_table), puis en injectant les enregistrements provenant de la version 8.1.2 avec "INSERT INTO nom_de_la_table", moyennant quelques retouches mineures.
Certaines tables, notamment celles concernant les (hook_...) et (module_...) ont été laissées dans la version 1.6.1.24.

Les clés n'ont pas pu été restaurées avec les "ALTER TABLE ..." qui se trouvaient en fin de dump car la requête SQL échoue lorsque des clés primaires sont définies sur deux champs.

L'installateur de Prestashop avait créé divers profils d'utilisateurs ; je n'ai conservé que celui avec id_profile : 1.
Il est décrit comme "SuperAdmin" par la table id_profile_lang.

De même je n'ai qu'un seul employé (table employee) avec id_employee : 1 et id_profile : 1.

Curieusement, dans la table module_access, le id_profile était systématiquement sur 2.
J'ai réinjecté des enregistrements avec id_profile mis sur 1 et il y a bien un id_profile 1 pour le id_module 36.

Je ne comprends pas d'où le problème peut venir, d'autant plus que l'affichage de la page d'accès l'admin ne devrai en soi pas requiérir de droits particuliers.

Merci d'avance pour votre aide.

N.B. Au niveau du frontend, un autre souci que je rencontre est celui de la redirection du /index.php vers /fr/index.php qui ne se fait pas.
Mon site est multilingue, mais l'installateur de Prestashop 1.6 crée par défraut un site monolingue. Mais ceci est une autre histoire.

Link to comment
Share on other sites

Merci. Dans la table module_access, j'avais bien un module 36.
Cela reste donc un mystère pour moi. Je repars sur une installation à neuf et importerai les données de manière plus progressive.

J'ai également téléchargé la PhenixSuite 1.6.2.19 depuis cette page mentionnant les change logs :  https://bb.enter-solutions.net/topic/1117/informations-générales
( Lien direct de téléchargement de la dernière version: https://devcustom.net/public/scripts/dl.php?f=core&v=latest )

Après comparaison (avec FreeFileSync) de PrestaShop 1.6.1.24 et PhenixSuite 1.6.2.19, je vois que cette dernière ajoute plusieurs modules dont je n'ai pas forcément besoin.
Un sytème allégé plutôt que boursouflé a ma préférence.
Je vais donc rester sur Prestashop 1.6.1.24, mais n'hésiterai pas jeter un oeil aux fichiers édités de la PhenixSuite, spécialement si je rencontre des bugs.

Link to comment
Share on other sites

il y a 4 minutes, JoliBazar a dit :

Un sytème allégé plutôt que boursouflé a ma préférence.

Plus de modules dans le zip ne veut rien dire sur ce point.

Car justement cette version épure grandement la 1.6 de toutes les attaches à Addons de PrestaShop, elle permet aussi une compatibilité PHP8.

Les modules ajoutés sont pour la plupart des adaptations de module pour conserver une compatibilité avec PS 16 qui fut abandonné par leurs développeurs et dont les utilisateurs ont besoin, mais rien ne vous empêche, et je vous le conseille fortement, de supprimer tous les modules qui ne vous servent à rien.

Link to comment
Share on other sites

On 11/1/2023 at 8:13 PM, Mediacom87 said:

Plus de modules dans le zip ne veut rien dire sur ce point.

Car justement cette version épure grandement la 1.6 de toutes les attaches à Addons de PrestaShop, elle permet aussi une compatibilité PHP8.

Les modules ajoutés sont pour la plupart des adaptations de module pour conserver une compatibilité avec PS 16 qui fut abandonné par leurs développeurs et dont les utilisateurs ont besoin, mais rien ne vous empêche, et je vous le conseille fortement, de supprimer tous les modules qui ne vous servent à rien.

Merci, c'est bon à savoir.
Ayant aperçu un module Colissimo, et n'étant pas en France, je craignais que la PhenixSuite pré-configure l'installation avec des réglages pour la France.

Non sans mal, j'ai réinstallé Prestashop 1.6.1.24.
Me trouvant dans un pays où diverses langues sont installées par défaut, les packs de langue ne se téléchargeaient pas ; peut-être en raison d'un proxy chez l'hébergeur ?
M'insipirant d'une vidéo pour le même problème sous Prestashop 1.7, j'ai alors procédé à l'édition des lignes 342 à 352 du fichier /install/models/install.php, en mettant en commentaire certaines lignes:

            //if (InstallSession::getInstance()->safe_mode) {
                Language::checkAndAddLanguage($iso, false, true, $params_lang);
            //} else {
                Language::downloadAndInstallLanguagePack($iso, _PS_INSTALL_VERSION_, $params_lang);
            //}

            Language::loadLanguages();
            Tools::clearCache();
            /* if (!$id_lang = Language::getIdByIso($iso, true)) {
                throw new PrestashopInstallerException($this->language->l('Cannot install language "%s"', ($xml->name) ? $xml->name : $iso));
            } */

Puis redébuté toute l'installation.
Cela a permis d'installer Prestashop 1.6, mais le menu de langue était alors dupliqué, et la langue principale y aparaissait plusieurs fois.

Las de commencer par des problèmes avec Prestashop 1.6, j'ai décidé de retourner vers la version 8.1.2, où mon projet tourne même s'il est imparfait.
Il y quand même eu des améliorations significatives avec les versions récentes, dont la qualité de l'installateur, qui permet dès le départ de choisir ce que l'on souhaite et permet ainsi d'éviter certains ajouts superflus.

 

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...