delete Posted February 29, 2012 Share Posted February 29, 2012 Bonjour, Il n'est pas rare que les propriétaires de boutiques paramètrent Prestashop à leur convenance, souvent j'ai retrouvé sur la page profil des profils supprimés : 1 Administrateur 2 Logisticien 3 Traducteur 4 Commercial Dans ce cas, il devient impossible pour tout module d'ajouter des onglets ( Tab::add() ) Apparemment ce n'est pas arrivé qu'à moi : http://www.prestasho...le-back-office/ C'est génant car ça prends des heures à comprendre d'où vient le bug, pour ma part j'ai dû rembourser plusieurs modules à cause de ce bug... La cause, par exemple sur un Prestashop 1.4.5.1 est ici : Fichier classes/Tab.php Ligne 100 - function initAccess : $profiles = Db::getInstance()->ExecuteS('SELECT `id_profile` FROM '._DB_PREFIX_.'profile where `id_profile` != 1'); if (!$profiles OR empty($profiles)) return false; Il ne reste qu'un seul profil, le 1 (Administrateur) par conséquent la fonction retourne false et la création de l'onglet devient impossible. Pour résoudre le problème sans toucher au code du core, il suffit d'ajouter un profil. Je suis remonté jusqu'à la version 1.4.6.2 le bug y est toujours. Apparemment sur la 1.5 la fonction a changé mais je n'ai pas testé. Je remonte le bug pour ceux qui auraient subi le même désespoir que moi ! 1 Link to comment Share on other sites More sharing options...
Eolia Posted March 28, 2012 Share Posted March 28, 2012 Bonjour, Il n'est pas rare que les propriétaires de boutiques paramètrent Prestashop à leur convenance, souvent j'ai retrouvé sur la page profil des profils supprimés : 1 Administrateur 2 Logisticien 3 Traducteur 4 Commercial Dans ce cas, il devient impossible pour tout module d'ajouter des onglets ( Tab::add() ) Apparemment ce n'est pas arrivé qu'à moi : http://www.prestasho...le-back-office/ C'est génant car ça prends des heures à comprendre d'où vient le bug, pour ma part j'ai dû rembourser plusieurs modules à cause de ce bug... La cause, par exemple sur un Prestashop 1.4.5.1 est ici : Fichier classes/Tab.php Ligne 100 - function initAccess : $profiles = Db::getInstance()->ExecuteS('SELECT `id_profile` FROM '._DB_PREFIX_.'profile where `id_profile` != 1'); if (!$profiles OR empty($profiles)) return false; Il ne reste qu'un seul profil, le 1 (Administrateur) par conséquent la fonction retourne false et la création de l'onglet devient impossible. Pour résoudre le problème sans toucher au code du core, il suffit d'ajouter un profil. Je suis remonté jusqu'à la version 1.4.6.2 le bug y est toujours. Apparemment sur la 1.5 la fonction a changé mais je n'ai pas testé. Je remonte le bug pour ceux qui auraient subi le même désespoir que moi ! Merci pour ce post, je viens de chercher pendant une heure car l'erreur affichée en premier n'est pas explicite : The following module(s) were not installed successfully: Le plus surprenant c'est que l'onglet était créé dans "Clients"->"Onglets. en créant dans ps_access une ligne supplémentaire avec l'id du module cela fonctionnait mais restait bancal. L'equipe de Presta devrait mettre une restriction pour empêcher de supprimer ces profils (ou d'en conserver un minimum de 2, administrateur compris). Encore merci! Eolia Link to comment Share on other sites More sharing options...
doekia Posted May 16, 2012 Share Posted May 16, 2012 Ce problème n'est pas nouveau et disparait réapparait au grès des différentes version depuis la version 1.3.4, version à partir de laquelle le profil administrateur n'est plus visible depuis le BO. Je passe outre ce problème en nourrissant la table "access" lors de l'insertion d'un onglet si besoin. $cookie->id_lang = $id_lang; // Register the admin tab @copy(_PS_MODULE_DIR_.$this->name.'/logo.gif', _PS_IMG_DIR_.'t/'.self::$tabClass.'.gif'); @copy(_PS_MODULE_DIR_.$this->name.'/logo.gif', _PS_MODULE_DIR_.$this->name.'/'.self::$tabClass.'.gif'); $tab = new Tab(); $tab->name = $nm; $tab->class_name = self::$tabClass; $tab->module = $this->name; $tab->id_parent = Tab::getIdFromClassName('AdminShipping'); if (!$tab->save()) return false; // Ensure we populate admin permission // for post 1.3.3 version $qr = Db::getInstance()->Execute('SELECT * FROM `'._DB_PREFIX_.'access`'. ' WHERE id_tab = '.intval($tab->id). ' AND id_profile = 1' ); if (!Db::getInstance()->NumRows()) Tab::initAccess($tab->id); else Db::getInstance()->Execute('UPDATE `'._DB_PREFIX_.'access`'. ' SET `view` = 1, `add` = 1, `edit` = 1, `delete` = 1'. ' WHERE id_tab = '.intval($tab->id). ' AND id_profile = 1' ); return true; 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