• [^] # Re: Merci pour vos critiques

    Posté par . En réponse à la dépêche doorGets CMS, très jeune CMS Open Source français. Évalué à 10.

    Les critiques permettent d'avoir des avis objectifs et constructifs surtout sur ton produit. C'est comme ça qu'on avance.

    Après avoir regardé le code de plus près, il est dommage d'utiliser du français avec de l'anglais.
    Par exemple:
    /class/admin/class.candidaturemodels.php
    @line 63: public function get(){
    @line 71: public function voir($id)
    @line 103: public function listing($par=20){
    @line 160: public function formSupprimer($id)

    Il faut choisir une langue. Je te conseillerais quand même l'anglais.

    Pour les requêtes SQL pour te faire gagner du temps et en lisibilité, tu peux utiliser des alias.
    Ex:
    /class/admin/class.gensitemapxml.php

    $sqlT = "
     SELECT _categories_traduction.uri, _categories_traduction.id,_categories.uri_module , _categories.id, _categories_traduction.nom
     FROM _categories, _categories_traduction
     WHERE _categories_traduction.langue = '$lgActu'
     AND _categories.id = _categories_traduction.id_cat
     AND _categories.uri_module = '$name'
     ORDER BY _categories.ordre ASC 
     LIMIT 0 , 30";
    
    

    devient:

    $sqlT = "
     SELECT c.uri, t.id, c.uri_module , c.id, t.nom
     FROM _categories AS c, _categories_traduction AS t
     WHERE t.langue = '$lgActu'
     AND c.id = t.id_cat
     AND c.uri_module = '$name'
     ORDER BY c.ordre ASC 
     LIMIT 0 , 30";
    
    

    Attention sur ton site est vulnérable aux injections SQL, il n'y a aucun contrôle sur les données injectées.
    /class/core/CRUD.php
    @line 196

     public function dbQI($data,$table){
     $d = "INSERT INTO ".$table." (";
     foreach($data as $k=>$v){
     $d .= $k.',';
     }
     $d = substr($d,0,-1);
     $d .= ") VALUES (";
     foreach($data as $k=>$v){
     $d .= '\''.$v.'\',';
     }
     $d = substr($d,0,-1);
     $d .= ")";
     $this->dbpdo->query($d);
     $id = $this->dbpdo->lastInsertId();
     return $id;
     }
    
    

    à remplacer par:

     public function dbQI($data,$table){
     $safe_quote = array($this->dbpdo, 'quote');
     $columns = array_map($safe_quote, array_keys($data));
     $values = array_map($safe_quote, $data);
     $columns_sql = implode(',', $columns);
     $values_sql = implode("','", $values);
     $sql = 'INSERT INTO'.$table.' ('.$columns_sql.") VALUES ('".$values_sql."')";
     $this->dbpdo->query($sql);
     return $this->dbpdo->lastInsertId();
     }
    
    

    Il y en a sûrement d'autres, je n'ai pas tout lu.

    Pour les langues, au lieu de créer plein de répertoires et fichiers /lang/index.php utilises plutôt ceci:
    1- un fichier /.htaccess avec ceci:

    RewriteEngine on
    RewriteRule ^t/([a-z]{2})/$ t/index.php?lang=1ドル [QSA]
    
    

    2- un fichier /t/index.php avec le contenu de /t/fr/index.php modifié comme ceci:
    @line 34 $isLgForce = 'fr';
    à remplacer par:
    @line 34 $isLgForce = $_GET['lang'];

    Pour la détection automatique de la langue voici un petit coup de pouce, il faut utiliser dans l'ordre si disponible:
    1. $_GET['lang']
    2. $_SESSION['lang']
    3. $_COOKIE['lang']
    4. $_SERVER['HTTP_ACCEPT_LANGUAGE']
    5. langue par défaut.

    Voici une implémentation (libre de droit ;)):

    $default_language = 'en';
    $languages = array('fr','en','de','ru','nl');
    function get_array_true_lang($array){
     global $languages;
     if (!array_key_exists('lang', $array)) return false;
     $lang = strtolower($array['lang']);
     if (in_array($lang, $languages)) return $lang;
     return false;
    }
    function get_lang(){
     global $default_language;
     foreach (array($_GET, $_SESSION, $_COOKIE) as $array){
     $lang = get_array_true_lang($_GET);
     if ($lang) return $lang;
     }
     //il faut créer une fonction pour analyser $_SERVER['HTTP_ACCEPT_LANGUAGE']
     return $default_language;
    }
    
    

    Pas oublier de sauver la valeur après avoir identifié la langue.

    $lang = get_lang();
    $_SESSION['lang'] = $lang;
    set_cookie('lang', $lang);
    
    

    PS: c'est inutilisable la syntaxe Wiki de LinuxFR. Ils auraient dû prendre la syntaxe Wiki de wikimedia (ça bug non stop).