Jump to content

Ajout d'onglet impossible (si profils modifiés)


Recommended Posts

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 !

 

;)

  • Like 1
Link to comment
Share on other sites

  • 4 weeks later...

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

  • 1 month later...

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

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