Configurer un plugin non activé

bazooka07bazooka07 PluXml Lead Developer, Moderator
Bonjour,

J'ai installé un plugin sur mon serveur.
Mais avant de l'activer, je voudrais voir son panneau de config et éventuellement enregistrer son paramétrage.

Le problème est que le panneau de config a besoin d'une feuille de style sophistiquée car la mise en page est complexe et qu'il a besoin de quelques fonctions javascript propres à lui.

Quand le plugin est actif, pas de souci ! $plxAdmin l'a enregistré et un appel du hook AdminTopEndHead dans top.php fait le job.

Par contre, si le plugin est inactif, $plxAdmin ne le connait et donc le hook n'est jamais appelé.

Peut-on charger un plugin inactif dans $plxAdmin pour déclencher ce hook au moment adéquat ?

Sinon je ne vois qu'une solution complexe : en javascript attendre la fin de chargement de la page et charger alors la feuille de style et les fonctions javascript. Cela m'ennuie car je suis obligé d'ajouter du code qui ne sera utilisé que quand le plugin est inactif (pas trop productif et risque de bug en sus).

Dans l'idéal, il faudrait que top.php détecte la présence de $plxPlugin créé dans parametres_plugin.php et traite ses hooks.
Je n'ai encore terminé le plugin mais pour voir plus concrétement le problème je l'ai déjà mis sur le net ici :
Télécharger le plugin
Ce plugin est une extension du plugin tinyMCE qui doit permettre un réglage fin selon les profils utilisateurs.
A installer sur un site de test pour l'instant.

Réponses

  • tu sais quoi ? j'ai actuellement ce pb !
    C'est une ancienne version d'un plugin que j'installe sur un dernier PluXml et j'ai un beau "Activez le plugin et bénéficiez de toutes ces capacités !"
    J'avais prévu le coup auparavant mais alors pour savoir comment j'ai fait ça ... :D
  • je pense avoir trouvé un truc : s'il n'est pas actif du redirige en envoyant des données d'un formulaire caché ;)
  • danielsandanielsan Member
    avril 2014 modifié
    j'ai fait ça dans config.php :
    [== PHP ==]
    <?php
    	$plxPlugin->saveParams();
    	$loc = "parametres_plugin.php?p=mon_plugin";
    	header('Location: '.$loc);
    ?>
    
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @Danielsan,

    Moi, j'ai mieux :D
    [== PHP ==]
    <?php
       $plxPlugin->saveParams();
       header('Location: '.basename($_SERVER['REQUEST_URI']));
    ?>
    

    Mais ce n'est pas ça mon problème.
    C'est mon panneau de config qui ne s'affiche pas comme il devrait parce que la feuille d'un plugin inactif n'est pas chargée faute de ne pas avoir appelé ses hooks.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    avril 2014 modifié
    Bonjour,

    Voici au final la solution que j'ai trouvé. Elle est appliquée à mon plugin tinyMCE - version 1.2 :
    Dans config.php, faire après avoir testé $_POST pour sauvegarder les données du formulaire :
    [== PHP ==]
    <?php
    if (!defined('PLX_ROOT')) exit;
    
    # Control du token du formulaire
    plxToken::validateFormToken($_POST);
    
    if (!empty($_POST)) {
       // appel de $plxPlugin->setParam(...) pour tous les entrées de $_POST
      $plxPlugin->saveParams()
      header('Location: '.$_SERVER['REQUEST_URI']);
      exit;
    }
    
    $plxPlugin->init_aProfils();
    
    if (!array_key_exists($plugin, $plxAdmin->plxPlugins->aPlugins) and isset($plxPlugin)) {
      // $plugin is disabled but we needs to call some Hook in /core/admin/top.php ('AdminTopEndHead', ...)
      $plxPlugins = $plxAdmin->plxPlugins;
      $plxPlugins->aPlugins[$plugin] = $plxPlugin;
      $plxPlugins->aHooks = array_merge_recursive($plxPlugins->aHooks, $plxPlugin->getHooks());
    }
    
    ?>
    <form id="form_<?php echo $plugin; ?>" method="post">
       // corps du formulaire
      <?php echo plxToken::getTokenPostMethod()."\n"; ?>
      <input type="submit" />
    </form>
    

    init_aProfils est une fonction qui initialise certaines propriétés du plugin.
    Cas typique : le nom des profils d'utilisateurs :
    Lorsque le plugin est actif, loadlangs n'est pas encore appelé pour charger les traductions.
    Par contre, si le plugin est inactif, loadlangs est déjà appelé lorsque le plugin est instancié.

    $plugin contient le nom du plugin
    $plxPlugin contient l'instance du plugin dans tous les cas
    Ces 2 variables sont créées par parametres_plugin.php.
Connectez-vous ou Inscrivez-vous pour répondre.