Valeur d'un article dans un plugin pour l'afficher côté admin

Bonjour à tous,

Je modifie le plugin lockArticle en ajoutant une liste déroulante lors de l'édition d'un article. L'idée est de mixer le verrouillage par mot de passe pour accéder à une page et lister un dossier spécifique comme le fait kzDownload.

J'arrive à ajouter la liste, lister le contenue du répertoire medias/, enregistré la valeur souhaité dans le xml mais je n'arrive pas à récupérer cette dernière pour alimenter la variable selected pour l'input du select.

    private function myGetAllDirs($dir, $level=0) {
        # Initialisation
        $folders = array();

        $alldirs = scandir($dir);
        natsort($alldirs);

        foreach($alldirs as $folder) {
            if($folder[0] != '.') {
                if(is_dir(($dir!=''?$dir.'/':$dir).$folder)) {
                    $dir = (substr($dir, -1)!='/' AND $dir!='') ? $dir.'/' : $dir;
                    $path = str_replace($this->path, '',$dir.$folder);
                    $folders[] = array(
                            'level' => $level,
                            'name' => $folder,
                            'path' => $path
                        );

                    $folders = array_merge($folders, $this->myGetAllDirs($dir.$folder, $level+1) );
                }
            }
        }

        return $folders;
    }

    public function contentFolder() {
        $plxMotor = plxMotor::getInstance();
        $plxAdmin = plxAdmin::getInstance();

        $this->path = PLX_ROOT.$plxAdmin->aConf['medias'].'/';
        $this->aDirs = (is_dir($this->path)?$this->myGetAllDirs($this->path):"");
        $str  = "\n".'<select class="no-margin" id="id_lockdir" size="1" name="lockdir">'."\n";
        $selected = (empty($lockdir)?'selected="selected" ':'');
        $str .= '<option '.$selected.'value="">|. ('.L_PLXMEDIAS_ROOT.') &nbsp; </option>'."\n";
        # Dir non vide
        if(!empty($this->aDirs)) {
            foreach($this->aDirs as $k => $v) {
                $prefixe = '|&nbsp;';
                $i = 0;
                while($i < $v['level']) {
                    $prefixe .= '_&nbsp;';
                    $i++;
                }
                $selected = ($v['path']==$lockdir?'selected="selected" ':'');
                $str .= '<option '.$selected.'value="'.$v['path'].'">'.$prefixe.$v['name'].'</option>'."\n";
            }
        }
        $str  .= '</select>'."\n";

        # On retourne la chaine
        return $str;
    }

    /**
     * Méthode qui ajoute le champs 'mot de passe' dans l'edition de l'article
     *
     * @return  stdio
     * @author  Rockyhorror
     **/
    public function AdminArticleSidebar(){
        $plxAdmin = plxAdmin::getInstance();

        echo '<div class="grid">
                <div class="col sml-12">
                    <label for="id_password">'.$this->getlang('L_PASSWORD_FIELD_LABEL').'&nbsp;:</label>
                    <?php $image = "<img src=\"".PLX_PLUGINS."lockArticles/locker.png\" alt=\"\" />";
                    if(!empty($password)) { echo $image; } plxUtils::printInput("password","","text","27-72"); ?>
                    <label for="id_resetpassword">'.$this->getlang('L_RESETPASSWORD_FIELD').'&nbsp;<input type="checkbox" name="resetpassword" />
                    <input type="hidden" name="passwordhash" value="<?php echo $password; ?>" />
                </div>
                <div class="col sml-12">
                    <label for="dir_crypt">'.$this->getlang('L_DIR_CRYPT').'&nbsp;:</label>
                    '.$this->contentFolder().'
                </div>
            </div>';
  }

Je parie que c'est tout bête, est-ce que vous auriez une piste ?

J'ai un string de l'array

Réponses

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    avril 2021 modifié

    Bonjour,

    Au vu du code que tu présentes, je ne suis pas convaincu que le nom du dossier soit enregistré dans le fichier article.

    Pour enregister ce nom, il faut utiliser le hook plxAdminEditArticleXml et concaténer le nouveau champ lockdir à la variable $xml.

    Pour récupérer cette valeur, il faudra modifier le hook plxMotorParseArticle.

    Vérifie que le champ lockdir est bien enregistré en éditant directement le fichier xml de l'article sans utiliser PluXml.

  • flipflipflipflip Member
    avril 2021 modifié

    Bonjour,

    La valeur est bien enregistré dans le fichier xml.

        public function AdminArticlePostData () {
            echo '<?php $password = $_POST["password"]; ?>';
            echo '<?php $lockdir = $_POST["lockdir"]; ?>';
        }
    
        public function AdminArticleParseData () {
            echo '<?php $password = $result["password"]; ?>';
            echo '<?php $lockdir = $result["lockdir"]; ?>';
        }
    
        public function AdminArticleInitData () {
            echo '<?php $password = ""; ?>';
            echo '<?php $lockdir = ""; ?>';
        }
    
        public function plxAdminEditArticleXml(){
    
            echo '<?php
            if(isset($content["resetpassword"])) {
                $xml .= "\t"."<password><![CDATA[]]></password>"."\n";
            }
            elseif(!empty($content["password"])) {
                $password = plxUtils::cdataCheck(trim($content["password"]));
                if(strlen($password) > 72) { return plxMsg::Error("'.$this->getlang('L_TOO_LONG').'"); }
                $hash = $this->plxPlugins->aPlugins["lockArticles"]->hasher->HashPassword($password);
                if(strlen($hash) >= 20){
                    $xml .= "\t"."<password><![CDATA[".$hash."]]></password>"."\n";
                }
                else {
                    return plxMsg::Error("'.$this->getlang('L_HASH_FAIL').'");
                }
            }
            elseif(!empty($content["lockdir"])) {
                $xml .= "\t"."<lockdir><![CDATA[".$content["lockdir"]."]]></lockdir>"."\n";
            }
            ?>';
        }
    

    plxMotorParseArticle est déjà utilisé

        public function plxMotorParseArticle(){
            echo "<?php    \$art['password'] = (isset(\$iTags['password']))?trim(\$values[ \$iTags['password'][0] ]['value']):''; ?>";
            echo "<?php    \$art['lockdir'] = (isset(\$iTags['lockdir']))?trim(\$values[ \$iTags['lockdir'][0] ]['value']):''; ?>";
        }
    

    J'ai un string de l'array

  • C'est bon j'ai trouvé

    class lockArticles extends plxPlugin {
    
        private $path = null; # chemin vers les médias
        public $activeLockdir = '';
    [...]
    
        public function AdminArticlePostData () {
            echo '<?php $password = $_POST["password"]; ?>';
            echo '<?php $lockdir = $_POST["lockdir"]; ?>';
        }
    
        public function AdminArticleParseData () {
            echo '<?php $password = $result["password"]; ?>';
            echo '<?php $lockdir = $result["lockdir"]; ?>';
        }
    
        public function AdminArticleInitData () {
            echo '<?php $password = ""; ?>';
            echo '<?php $lockdir = ""; ?>';
        }
    
        private function myGetAllDirs($dir, $level=0) {
            # Initialisation
            $folders = array();
    
            $alldirs = scandir($dir);
            natsort($alldirs);
    
            foreach($alldirs as $folder) {
                if($folder[0] != '.') {
                    if(is_dir(($dir!=''?$dir.'/':$dir).$folder)) {
                        $dir = (substr($dir, -1)!='/' AND $dir!='') ? $dir.'/' : $dir;
                        $path = str_replace($this->path, '',$dir.$folder);
                        $folders[] = array(
                                'level' => $level,
                                'name' => $folder,
                                'path' => $path
                            );
    
                        $folders = array_merge($folders, $this->myGetAllDirs($dir.$folder, $level+1) );
                    }
                }
            }
    
            return $folders;
        }
    
        public function contentFolder() {
            $plxAdmin = plxAdmin::getInstance();
    
            $this->path = PLX_ROOT.$plxAdmin->aConf['medias'].'/';
            $this->aDirs = (is_dir($this->path)?$this->myGetAllDirs($this->path):"");
    
            $str  = "\n".'<select class="no-margin" id="id_lockdir" size="1" name="lockdir">'."\n";
            $selected = (empty($this->$activeLockdir)?'selected="selected" ':'');
            $str .= '<option '.$selected.'value="">|. ('.L_PLXMEDIAS_ROOT.') &nbsp; </option>'."\n";
            # Dir non vide
            if(!empty($this->aDirs)) {
                foreach($this->aDirs as $k => $v) {
                    $prefixe = '|&nbsp;';
                    $i = 0;
                    while($i < $v['level']) {
                        $prefixe .= '_&nbsp;';
                        $i++;
                    }
                    $selected = ($v['path']==$this->$activeLockdir?'selected="selected" ':'');
                    $str .= '<option '.$selected.'value="'.$v['path'].'">'.$prefixe.$v['name'].'</option>'."\n";
                }
            }
            $str  .= '</select>'."\n";
    
            # On retourne la chaine
            return $str;
        }
    
        /**
         * Méthode qui ajoute le champs 'Répertoire à lister' dans l'edition de l'article
         *
         * @return  stdio
         * @author  Rockyhorror
         **/
        public function AdminArticleSidebar(){
                echo '<div class="grid">
                        <div class="col sml-12">
                            <label for="id_password">'.$this->getlang('L_PASSWORD_FIELD_LABEL').'&nbsp;:</label>
                            <?php $image = "<img src=\"".PLX_PLUGINS."lockArticles/locker.png\" alt=\"\" />";
                            if(!empty($password)) { echo $image; } plxUtils::printInput("password","","text","27-72"); ?>
                            <label for="id_resetpassword">'.$this->getlang('L_RESETPASSWORD_FIELD').'&nbsp;<input type="checkbox" name="resetpassword" />
                            <input type="hidden" name="passwordhash" value="<?php echo $password; ?>" />
                        </div>
                        <div class="col sml-12">
                            <?php $plxAdmin->plxPlugins->aPlugins["lockArticles"]->$activeLockdir = $lockdir; ?>
                            <label for="dir_crypt">'.$this->getlang('L_DIR_CRYPT').'&nbsp;:</label>
                            <?php echo $plxAdmin->plxPlugins->aPlugins["lockArticles"]->contentFolder(); ?>
                        </div>
                    </div>';
      }
    
        /*
         * Méthode qui enregistre le mot de passe dans le fichier XML de l'article
         *
         * @return null
         * @author Rockyhorror
         *
         */
        public function plxAdminEditArticleXml(){
            echo '<?php
            if(isset($content["resetpassword"])) {
                $xml .= "\t"."<password><![CDATA[]]></password>"."\n";
            }
            elseif(!empty($content["password"])) {
                $password = plxUtils::cdataCheck(trim($content["password"]));
                if(strlen($password) > 72) { return plxMsg::Error("'.$this->getlang('L_TOO_LONG').'"); }
                $hash = $this->plxPlugins->aPlugins["lockArticles"]->hasher->HashPassword($password);
                if(strlen($hash) >= 20){
                    $xml .= "\t"."<password><![CDATA[".$hash."]]></password>"."\n";
                }
                else {
                    return plxMsg::Error("'.$this->getlang('L_HASH_FAIL').'");
                }
            }
            elseif(!empty($content["lockdir"])) {
                $xml .= "\t"."<lockdir><![CDATA[".$content["lockdir"]."]]></lockdir>"."\n";
            }
            ?>';
        }
    [...]
        /*
         * Méthode qui récupère les informations de mot de passe dans le fichier XML de l'article
         *
         * @return null
         * @author Rockyhorror
         *
         */
        public function plxMotorParseArticle(){
            echo "<?php    \$art['password'] = (isset(\$iTags['password']))?trim(\$values[ \$iTags['password'][0] ]['value']):''; ?>";
            echo "<?php    \$art['lockdir'] = (isset(\$iTags['lockdir']))?trim(\$values[ \$iTags['lockdir'][0] ]['value']):''; ?>";
        }
    

    J'ai un string de l'array

Connectez-vous ou Inscrivez-vous pour répondre.