Ignore:
Timestamp:
Mar 21, 2011, 1:41:12 PM (9 years ago)
Author:
cedric@…
Message:

support des revisions sur les jointure : il suffit de definir 'jointure_{table}' comme champ a versionner (avec table = version abregee 'mots', 'auteurs'...)
Il faut que les liens soient gérés par l'api editer_lien pour que les pipelines pre_edition_lien et post_edition_lien soient appelés er declenchent la gestion de revision.
Pour l'affichage des diff, une fonction afficher_diff_jointure generique est utilisee pour les jointures, mais il est possible de definir sa propre fonction d'affichage afficher_diff_jointure_xxx comme pour les champs standards.

File:
1 copied

Legend:

Unmodified
Added
Removed
  • _core_/plugins/revisions/afficher_diff/jointure.php

    r45576 r45623  
    2424 * @return string
    2525 */
    26 function afficher_diff_champ_dist($champ,$old,$new,$format='diff'){
    27         // ne pas se compliquer la vie !
    28         if ($old==$new)
    29                 $out = ($format!='complet'?'':$new);
    30         else {
     26function afficher_diff_jointure_dist($champ,$old,$new,$format='diff'){
     27        $join = substr($champ,9);
     28        $objet = objet_type($join);
    3129
    32                 $diff = new Diff(new DiffTexte);
    33                 $n = preparer_diff($new);
    34                 $o = preparer_diff($old);
     30        $old = explode(',',$old);
     31        $new = explode(',',$new);
    3532
    36                 $out = afficher_diff($diff->comparer($n,$o));
    37                 if ($format == 'diff' OR $format == 'apercu')
    38                         $out = afficher_para_modifies($out, ($format == 'apercu'));
    39         }
    40         return $out;
     33        $liste = array();
     34
     35        // les communs
     36        $intersection = array_intersect($new,$old);
     37        foreach($intersection as $id)
     38                if ($id=intval($id))
     39                        $liste[$id] = generer_info_entite(intval(trim($id)),$objet,'titre');
     40
     41        // les supprimes
     42        $old = array_diff($old,$intersection);
     43        foreach($old as $id)
     44                if ($id=intval($id))
     45                        $liste[$id] = "<span class='diff-supprime'>".generer_info_entite(intval(trim($id)),$objet,'titre')."</span>";
     46
     47        // les ajoutes
     48        $new = array_diff($new,$intersection);
     49        foreach($new as $id)
     50                if ($id=intval($id))
     51                        $liste[$id] = "<span class='diff-ajoute'>".generer_info_entite(intval(trim($id)),$objet,'titre')."</span>";
     52
     53        ksort($liste);
     54        $liste = implode(', ',$liste);
     55        return $liste;
    4156}
    42 
    43 
    44 /**
    45  * http://doc.spip.org/@afficher_para_modifies
    46  *
    47  * @param string $texte
    48  * @param bool $court
    49  * @return string
    50  */
    51 function afficher_para_modifies ($texte, $court = false) {
    52         // Limiter la taille de l'affichage
    53         if ($court) $max = 200;
    54         else $max = 2000;
    55 
    56         $paras = explode ("\n",$texte);
    57         for ($i = 0; $i < count($paras) AND strlen($texte_ret) < $max; $i++) {
    58                 if (strpos($paras[$i], '"diff-')) $texte_ret .= $paras[$i]."\n\n";
    59 #               if (strlen($texte_ret) > $max) $texte_ret .= '(...)';
    60         }
    61         $texte = $texte_ret;
    62         return $texte;
    63 }
Note: See TracChangeset for help on using the changeset viewer.