Jump to content

[PS 1.7.7] Module Admin Controller retourne page not found


 Share

Recommended Posts

Bonjour à tous,

J'ai développé un module maison qui contient une page AdminController et qui fonctionne très bien sur mon poste en local, cependant lorsque j'installe le module sur un serveur Linux en préprod, dans la page AdminController, le site me renvoi une erreur "page not found".

La vue n'est pas chargée (ni même partiellement) et l'url semble pourtant correcte.

//Le code permettant d'accéder à la page via une "tab" dans le menu du BO 

public function install()
    {

        include(dirname(__FILE__).'/sql/install.php');

        $this->loadLegacyForms();

        return parent::install() &&
            $this->_installTab() &&
            $this->registerHook('header') &&
            $this->registerHook('backOfficeHeader') &&
            $this->registerHook('ActionFrontControllerSetVariables') &&
            $this->registerHook('displayHeader');
    }

    /**
     * Installation du controller dans la backoffice
     * @return boolean
     */
    protected function _installTab()
    {
        $tab = new Tab();
        $tab->class_name = 'AdminCfm';
        $tab->module = $this->name;
        $tab->id_parent = (int)Tab::getIdFromClassName('IMPROVE');
        $tab->icon = 'tune';
        $languages = Language::getLanguages();
        foreach ($languages as $lang) {
            $tab->name[$lang['id_lang']] = $this->l('Custom Fields Manager');
        }
        try {
            $tab->save();
        } catch (Exception $e) {
            echo $e->getMessage();
            return false;
        }

        return true;
    }

Et le code de ma class qui étends AdminController

<?php

if (!class_exists('ModelCFM')) {
    require_once _PS_MODULE_DIR_.'CustomFieldsManager/classes/ModelCFM.php';
}

class AdminCfmController extends ModuleAdminController
{

    /**
     * Instanciation de la classe
     * Définition des paramètres basiques obligatoires
     */
    public function __construct()
    {
        $this->bootstrap = true; //Gestion de l'affichage en mode bootstrap
        $this->table = ModelCFM::$definition['table']; //Table de l'objet
        $this->identifier = ModelCFM::$definition['primary']; //Clé primaire de l'objet
        $this->className = ModelCFM::class; //Classe de l'objet
        $this->lang = false; //Flag pour dire si utilisation de langues ou non

        //Appel de la fonction parente pour pouvoir utiliser la traduction ensuite
        parent::__construct();

        //Liste des champs de l'objet à afficher dans la liste
        $this->fields_list = [
            'id_CustomFieldsManager' => [ //nom du champ sql
                'title' => $this->module->l('ID'),
                'align' => 'center',
            ],
            'form_name' => [
                'title' => $this->module->l('Nom du formulaire'),
                'align' => 'left',
            ],
            'position' => [
                'title' => $this->module->l('Position'),
                'align' => 'left',
            ],
            'range' => [
                'title' => $this->module->l('Champs d\'action'),
                'align' => 'left',
            ],
            'date_add' => [
                'title' => $this->module->l('Date d\'ajout'),
                'align' => 'center',
            ],
        ];

        //Ajout d'action sur chaque ligne
        $this->addRowAction('edit');
        $this->addRowAction('delete');
    }

    /**
     * Assign smarty variables for all default views, list and form, then call other init functions.
     */
    public function initContent(){

        $link = new Link();
        $urladmin = $link->getAdminLink( 'AdminCfm' );

        // Condition pour n'afficher que sur page ajout/edit
        if ($this->display == 'edit' || $this->display == 'add') {

            // Récupération de l'objet si existe
            $obj = $this->loadObject(true);
            $inputs = unserialize($obj->inputs);

            // Contenu ultra basique du formulaire pour permettre l'affichage d'un champs par defaut
            if(empty($inputs)){
                $inputs = array(array(
                    'type' => '',
                    'title' => '',
                    'name' => '',
                    'value' => '',
                ));
            }

            $this->context->smarty->assign(array(
                'form_id' => (int) Tools::getValue($this->identifier),
                'token' => $this->token,
                'form_name' => $obj->form_name,
                'inputs' => $inputs
            ));

            // Ajout du template du custom form pour affichage
            $this->content .= $this->context->smarty->fetch(_PS_MODULE_DIR_.'CustomFieldsManager/views/templates/admin/form.tpl');


            // Retourne le contenu du formulaire dans smarty
            $this->context->smarty->assign(
                array(
                    'content' => $this->content
                )
            );

        }else{
            parent::initContent();
        }
        
    }

    /**
     * @TODO uses redirectAdmin only if !$this->ajax
     *
     * @return ObjectModel|bool
     */
    public function postProcess(){

        if (((bool)Tools::isSubmit('submitAddcustomfieldsmanager')) == true) {

            $input = array();

            if($_POST["customFieldID"]){
                $CFM = new ModelCFM((int) $_POST["customFieldID"]);
            }else{
                $CFM = new ModelCFM();
            }
            $CFM->form_name = $_POST["cfmname_form"];
            $CFM->form_name = $_POST["cfmname_form"];

            unset($_POST["cfmname_form"]);
            unset($_POST["submitAddcustomfieldsmanager"]);
            unset($_POST["customFieldID"]);

            foreach ($_POST as $key => $value) {
                $type = substr($key, strrpos($key, '|') + 1);
                $paths = explode("_", substr($key, 0, strrpos($key, '|')));
                
                $input = $this->addBranch($input, $paths, $type, $value, substr($key, 0, strrpos($key, '|')));

            }

            $CFM->inputs = serialize($input);
            $CFM->position = 0;
            $CFM->range = "global";
            $CFM->date_add = date("Y-m-d");

            if($CFM->id_CustomFieldsManager){
                $CFM->update();
            }else{
                $CFM->add();
            }
            
        }else{
            parent::postProcess();
        }
    }

    /**
     * Création de l'arborescence de l'input à un niveau multidimensionnel
     *
     * @param array $tree
     * @param array $paths
     * @param string $type
     * @param string $value
     * @return array
     */
    public function addBranch($tree, $paths, $type, $value, $position){

        if(count($paths) > 1){
            if($tree[$paths[0]]["type"] == "repeater"){
                if(!isset($tree[$paths[0]]["value"][0][0]["value"])){
                    array_push($tree[$paths[0]]["value"], $this->addBranch($tree[$paths[0]]["value"], $this->removeFirstArray($paths), $type, $value, $position));
                }else{
                    $tree[$paths[0]]["value"][0] = $this->addBranch($tree[$paths[0]]["value"][0], $this->removeFirstArray($paths), $type, $value, $position);
                }
            }else{
                $tree[$paths[0]]["value"] = $this->addBranch($tree[$paths[0]]["value"], $this->removeFirstArray($paths), $type, $value, $position);
            }

        }else{

            // Crée le champs si n'existe pas encore (évite également les écrasements via vérif de la présence de "title")
            if(!isset($tree[$paths[0]]["title"])){
                $tree[$paths[0]] = array(
                    'type' => '',
                    'title' => '',
                    'name' => '',
                    'count' => 1,
                    'value' => array(),
                );
            }

            if($type == "name"){
                $tree[$paths[0]]["title"] = $value;
                $tree[$paths[0]]["name"] = str_replace(" ", "_", strtolower($value.$position));
            }elseif($type == "type"){
                $tree[$paths[0]]["type"] = $value;
                if($tree[$paths[0]]["type"] == "repeater"){
                    if(!is_array($tree[$paths[0]]["value"])){
                        $tree[$paths[0]]["value"] = array();
                    }
                }
            }
        }

        return $tree;

    }

    /**
     * Renvoi un tableau avec le 1er element retiré
     *
     * @param array $array
     * @return void
     */
    private function removeFirstArray($array){
        array_shift($array);

        return $array;
    }


    /**
     * Gestion de la toolbar
     */
    public function initPageHeaderToolbar()
    {

        //Ajout d'un bouton pour aller sur la page de configuration
        $this->page_header_toolbar_btn['config_button'] = array(
            'href' => $this->context->link->getAdminLink('AdminModules') . '&configure=' . Tools::safeOutput($this->module->name),
            'desc' => $this->module->l('Gestion des contenus'),
            'icon' => 'process-icon-configure'
        );

        //Bouton d'ajout
        $this->page_header_toolbar_btn['new'] = array(
            'href' => self::$currentIndex . '&add' . $this->table . '&token=' . $this->token,
            'desc' => $this->module->l('Ajout d\'un nouveau Formulaire'),
            'icon' => 'process-icon-new'
        );

        parent::initPageHeaderToolbar();
    }

    /**
     * Fonction ajax basique
     *
     * @return void
     */
    public function ajaxProcessLoadField()
    {
		echo "HELLO WORLD !";

        exit; // Nécessaire pour éviter le contenu inutile en fin de script
    }

}

 

J'ai déjà vérifié si il y avait conflit avec un module mais rien ne change lorsque je désactive tous les modules du BO.

Je suis à court d'idées, toute aide est la bienvenue ^^

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More