Changeset 46818 in spip-zone


Ignore:
Timestamp:
Apr 15, 2011, 11:40:29 PM (7 years ago)
Author:
marcimat@…
Message:

Modifications pour prendre en compte des champs sur des tables de liaisons :

  • on autorise des classes ayant plusieurs series de '-texte' tel que 'numeros_liens-type-4-2-article'
  • on fait en sorte que ces informations soient comprises ensuite par le controleur, l'enregistrement et la vue
  • pour une classe que ne pourrait pas gerer crayons, mettre un log (clé primaire qui a des - ou des espaces dans ses valeurs)

Exemple simple :

<ul>
<BOUCLE_orga(organisations_contacts){0,10}>
<li>

<ul>

<li >#ID_ORGANISATION</li>
<li>#ID_CONTACT</li>
<li class="#EDIT{type_liaison}">[(#TYPE_LIAISON|sinon{-----})]</li>

</ul>

</li>
</BOUCLE_orga>
</ul>

Location:
_plugins_/crayons
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/crayons/action/crayons_html.php

    r43906 r46818  
    1111
    1212                // A-t-on le droit de crayonner ?
    13                 spip_log("autoriser('crayonner', $type, $id, NULL, array('modele'=>$modele)","crayons_distant");
     13                spip_log("autoriser('crayonner', $type, $id, NULL, array('modele'=>$champ)","crayons_distant");
    1414                if (!autoriser('crayonner',$type, $id, NULL, array('modele'=>$champ))) {
    1515                        $return['$erreur'] = "$type $id: " . _U('crayons:non_autorise');
     
    3838        );
    3939        list($distant,$table) = distant_table($type);
     40
    4041        // Si le controleur est un squelette html, on va chercher
    4142        // les champs qu'il lui faut dans la table demandee
  • _plugins_/crayons/action/crayons_store.php

    r45389 r46818  
    9999                                        $get_valeur = $options['f_get_valeur'];
    100100                                        $data = $get_valeur($content, $regs);
     101
    101102                                        $md5 = md5(serialize($data));
    102103
     
    307308                // ce qu'on vient d'envoyer, il y a nettoyage des caracteres et
    308309                // eventuellement d'autres filtres de saisie...)
    309                 $valeur = array_pop(valeur_colonne_table($type, $modele, $id));
     310                $bdd = valeur_colonne_table($type, $modele, $id);
     311                if (count($bdd)) {
     312                        $valeur = array_pop($bdd);
     313                } else {
     314                        // les champs n'ont pas ete retrouves dans la base
     315                        // ce qui signifie a priori que nous sommes en face d'une cle primaire compose
     316                        // et qu'un crayon a modifie un element de cette cle (c'est pas malin !)
     317                        // dans ce cas, on reaffiche a minima ce qu'on vient de publier
     318                        // mais il sera impossible de le reediter dans la foulee avec le meme crayon
     319                        // (car l'identifiant du crayon se base sur l'id).
     320                        // Il faudra donc recharger la page pour pouvoir reediter.
     321                        if (is_scalar($id)) {
     322                                $valeur = $content[$modele];
     323                        }
     324                }
    310325
    311326                // seul spip core sait rendre les donnees
     
    347362        }
    348363        else {
    349                 include_spip('inc/modifier');
    350                 $a = modifier_contenu($type, $id, array(), $colval);
     364                // cle primaire composee : 3-4-rubrique
     365                // calculer un where approprie
     366                // et modifier sans passer par la fonction destinee aux tables principales
     367                // on limite a SPIP 2 mini car sql_updateq n'est pas mappe dans les crayons_compat
     368                if (is_scalar($id) and ($GLOBALS['spip_version_code'] >= '1.93')) {
     369                        list($nom_table, $where) = table_where($type, $id, true); // where sous forme de tableau
     370                        $a = sql_updateq($nom_table, $colval, $where);
     371                } else {
     372                        // modification d'une table principale
     373                        include_spip('inc/modifier');
     374                        $a = modifier_contenu($type, $id, array(), $colval);
     375                }
    351376        }
    352377
  • _plugins_/crayons/inc/crayons.php

    r40650 r46818  
    33if (!defined("_ECRIRE_INC_VERSION")) return;
    44
    5 define('_PREG_CRAYON', ',crayon\b[^<>\'"]+?\b((\w+)-(\w+)-(\w+(?:-\w+)?))\b,');
     5define('_PREG_CRAYON', ',crayon\b[^<>\'"]+?\b((\w+)-(\w+)-(\w+(?:-\w+)*))\b,');
    66
    77// Compatibilite pour 1.92 : on a besoin de sql_fetch et table_objet_sql
     
    384384//      var_dump(colonne_table('forum', 'id_syndic')); die();
    385385
    386 function table_where($type, $id)
     386function table_where($type, $id, $where_en_tableau = false)
    387387{
    388388        list($distant,$table) = distant_table($type);
     
    396396                $id = explode('-', $id);
    397397        }
    398         $where = $and = '';
    399         foreach ($id as $idcol => $idval) {
    400                 $where .= $and . '`' . (is_int($idcol) ? trim($tabid[$idcol]) : $idcol) . '`=' . _q($idval);
    401                 $and = ' AND ';
     398        // sortie tableau pour sql_updateq
     399        if ($where_en_tableau) {
     400                $where = array();
     401                foreach ($id as $idcol => $idval) {
     402                        $where[] = '`' . (is_int($idcol) ? trim($tabid[$idcol]) : $idcol) . '`=' . sql_quote($idval);
     403                }
     404        // sinon sortie texte pour sql_query
     405        } else {
     406                $where = $and = '';
     407                foreach ($id as $idcol => $idval) {
     408                        $where .= $and . '`' . (is_int($idcol) ? trim($tabid[$idcol]) : $idcol) . '`=' . _q($idval);
     409                        $and = ' AND ';
     410                }
    402411        }
    403412        return array($nom_table, $where);
     
    408417        list($distant,$table) = distant_table($type);
    409418        list($nom_table, $where) = table_where($type, $id);
     419
    410420        if (!$nom_table)
    411421                return false;
  • _plugins_/crayons/js/crayons.js

    r45745 r46818  
    3535        // comme article-texte-10 pour le texte de l'article 10
    3636        // ou meta-valeur-meta
    37         var cray = c.match(/\b\w+-(\w+)-\d+\b/) || c.match(/\b\meta-valeur-(\w+)\b/);
     37        var cray =
     38                           c.match(/\b\w+-(\w+)-\d(?:-\w+)+\b/)   // numeros_lien-type-2-3-article (table-champ-cles)
     39                        || c.match(/\b\w+-(\w+)-\d+\b/)           // article-texte-10 (inclu dans le precedent, mais bon)
     40                || c.match(/\b\meta-valeur-(\w+)\b/)      // meta-valeur-xx
     41                ;
    3842
    3943        var boite = !cray ? '' : this.mkimg(type, ' (' + cray[1] + ')');
     
    430434$.fn.iconecrayon = function(){
    431435        return this.each(function() {
    432                 var ctype = this.className.match(/\btype_(\w+)\b/);
     436                var ctype = this.className.match(/\b[^-]type_(\w+)\b/);
    433437                type = (ctype) ? ctype[1] : 'crayon';
    434438                if (ctype) this.type = type; // Affecte son type a l'objet crayon
  • _plugins_/crayons/plugin.xml

    r45745 r46818  
    1717        </licence>
    1818        <version>
    19         1.9.8
     19        1.10.0
    2020        </version>
    2121        <etat>
  • _plugins_/crayons/tetecrayons.php

    r45074 r46818  
    227227        $primary = explode(',',$primary);
    228228        $id = array();
    229         foreach($primary as $key)
     229        foreach($primary as $key) {
    230230                $id[] = champ_sql(trim($key),$p);
     231        }
    231232        $primary = implode(".'-'.",$id);
    232233
     
    273274                ? " $type--$id"
    274275                : '';
    275 
     276       
     277        // test rapide pour verifier que l'id est valide (a-zA-Z0-9)
     278        if (false !== strpos($id, ' ')) {
     279                spip_log("L'identifiant ($id) ne pourra être géré ($type | $champ)", 'crayons');
     280                return 'crayon_id_ingerable';
     281        }
     282       
    276283        return 'crayon ' . $type . '-' . $champ . '-' . $id . $plus;
    277284}
Note: See TracChangeset for help on using the changeset viewer.