Changeset 50708 in spip-zone


Ignore:
Timestamp:
Aug 25, 2011, 10:06:11 AM (8 years ago)
Author:
cedric@…
Message:

Résoud http://core.spip.org/issues/2238 :
pour etre sur de l'auteur de la premiere revision, il faut gerer mieux sa creation, en reperant le cas insertion en base et en retardant au post_edition son enregistrement dans ce cas.
Dans tous les cas, ne pas confondre un id_auteur IP avec un id_auteur numerique dans l'affichage.

Location:
_core_/plugins/revisions
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _core_/plugins/revisions/formulaires/reviser.html

    r48507 r50708  
    3030                                                                        <td class="diff">[(#COMPTEUR_BOUCLE|>{1}|oui)<input type="radio" class="radio" name="id_diff" id="id_diff_#ENV{_objet}_#ENV{_id_objet}_#ID_VERSION" value="#ID_VERSION" onchange="check_version();" [(#ENV{id_diff}|=={#ID_VERSION}|oui)checked="checked"] />]</td>
    3131                                                                        <td class="date">[(#DATE|date_relative)]</td>
    32                                                                         <td class="auteur"><BOUCLE_aut(AUTEURS){id_auteur}{tout}>#NOM</BOUCLE_aut>#ID_AUTEUR<//B_aut></td>
     32                                                                        <td class="auteur"><BOUCLE_aut(AUTEURS){id_auteur}{si #ID_AUTEUR|is_numeric}{tout}>#NOM</BOUCLE_aut>#ID_AUTEUR<//B_aut></td>
    3333                                                                </tr>
    3434                                                                </BOUCLE_v>
  • _core_/plugins/revisions/inc/revisions.php

    r47389 r50708  
    658658 * @param int $id_objet
    659659 * @param array $champs
     660 * @param int $id_auteur
    660661 * @return int
    661662 */
    662 function verifier_premiere_revision($table,$objet,$id_objet,$champs=null){
     663function verifier_premiere_revision($table,$objet,$id_objet,$champs=null, $id_auteur=0){
    663664
    664665        $id_table_objet = id_table_objet($objet);
     
    703704                                $date_modif = date("Y-m-d H:i:s", time()-7200);
    704705                       
    705                         if ($id_version = ajouter_version($id_objet, $objet, $champs_originaux, _T('revisions:version_initiale'), 0))
     706                        if ($id_version = ajouter_version($id_objet, $objet, $champs_originaux, _T('revisions:version_initiale'), $id_auteur))
    706707                                sql_updateq('spip_versions', array('date' => $date_modif), "id_objet=".intval($id_objet)." AND objet=".sql_quote($objet)." AND id_version=$id_version");
    707708                }
    708709        }
    709710        return $id_version;
     711}
     712
     713
     714/**
     715 * Sur une insertion en base, lever un flag pour ne pas creer une premiere revision vide
     716 * dans pre_edition mais attendre la post_edition pour cela
     717 * @param array $x
     718 * @return array $x
     719 */
     720function revisions_post_insertion($x){
     721        $table = $x['args']['table'];
     722        if  ($champs = liste_champs_versionnes($table)) {
     723                $GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']] = true;
     724        }
     725        return $x;
    710726}
    711727
     
    720736function revisions_pre_edition($x) {
    721737        $table = $x['args']['table'];
    722         if  ($champs = liste_champs_versionnes($table)) {
    723                 $objet = isset($x['args']['type']) ? $x['args']['type'] : table_objet($table);
    724                 verifier_premiere_revision($table, $objet, $x['args']['id_objet'], $champs);
     738        // si flag leve passer son chemin, post_edition le fera (mais baisser le flag en le gardant en memoire tout de meme)
     739        if (isset($GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']])){
     740                $GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']] = 0;
     741        }
     742        // sinon creer une premiere revision qui date et dont on ne connait pas l'auteur
     743        elseif  ($versionnes = liste_champs_versionnes($table)) {
     744                $objet = isset($x['args']['type']) ? $x['args']['type'] : objet_type($table);
     745                verifier_premiere_revision($table, $objet, $x['args']['id_objet'], $versionnes, -1);
    725746        }
    726747        return $x;
     
    737758        if (intval($x['args']['id_objet_source'])>0
    738759            AND intval($x['args']['id_objet'])>0) {
    739 
     760                $table = table_objet_sql($x['args']['objet']);
     761                $id_objet = $x['data'];
     762                if (isset($GLOBALS['premiere_revision']["$table:".$id_objet])){
     763                        $GLOBALS['premiere_revision']["$table:".$id_objet] = 0;
     764                }
    740765                // ex : si le champ jointure_mots est versionnable sur les articles
    741                 if ($versionnes = liste_champs_versionnes($table=table_objet_sql($x['args']['objet']))
     766                elseif ($versionnes = liste_champs_versionnes($table)
    742767                        AND in_array($j='jointure_'.table_objet($x['args']['objet_source']),$versionnes)){
    743                         verifier_premiere_revision($table,$x['args']['objet'],$x['data'],$versionnes);
    744                 }
    745 
     768                        verifier_premiere_revision($table,$x['args']['objet'],$id_objet,$versionnes,-1);
     769                }
     770
     771                $table = table_objet_sql($x['args']['objet_source']);
     772                $id_objet = $x['args']['id_objet_source'];
     773                if (isset($GLOBALS['premiere_revision']["$table:".$id_objet])){
     774                        $GLOBALS['premiere_revision']["$table:".$id_objet] = 0;
     775                }
    746776                // ex : si le champ jointure_articles est versionnable sur les mots
    747                 if ($versionnes = liste_champs_versionnes($table=table_objet_sql($x['args']['objet_source']))
     777                elseif ($versionnes = liste_champs_versionnes($table)
    748778                        AND in_array($j='jointure_'.table_objet($x['args']['objet']),$versionnes)){
    749                         verifier_premiere_revision($table,$x['args']['objet_source'],$x['args']['id_objet_source'],$versionnes);
     779                        verifier_premiere_revision($table,$x['args']['objet_source'],$id_objet,$versionnes,-1);
    750780                }
    751781        }
     
    764794                // Regarder si au moins une des modifs est versionnable
    765795                $champs = array();
    766                 foreach ($versionnes as $key)
    767                         if (isset($x['data'][$key]))
    768                                 $champs[$key] = $x['data'][$key];
    769 
    770                 if (count($champs))
    771                         ajouter_version($x['args']['id_objet'],$x['args']['type'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
     796                $table = $x['args']['table'];
     797                $objet = isset($x['args']['type']) ? $x['args']['type'] : objet_type($table);
     798                if (isset($GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']])){
     799                        unset($GLOBALS['premiere_revision']["$table:".$x['args']['id_objet']]);
     800                        // verifier la premiere version : sur une version initiale on attend ici pour la creer
     801                        // plutot que de creer une version vide+un diff
     802                        verifier_premiere_revision($table, $objet, $x['args']['id_objet'], $versionnes, $GLOBALS['visiteur_session']['id_auteur']);
     803                }
     804                else {
     805                        // on versionne les differences
     806                        foreach ($versionnes as $key)
     807                                if (isset($x['data'][$key]))
     808                                        $champs[$key] = $x['data'][$key];
     809
     810                        if (count($champs))
     811                                ajouter_version($x['args']['id_objet'],$objet, $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
     812                }
    772813        }
    773814
     
    799840            AND intval($x['args']['id_objet'])>0) {
    800841
     842                $table = table_objet_sql($x['args']['objet']);
     843                $id_objet = $x['data'];
     844                if (isset($GLOBALS['premiere_revision']["$table:".$id_objet])){
     845                        $GLOBALS['premiere_revision']["$table:".$id_objet] = 0;
     846                }
    801847                // ex : si le champ jointure_mots est versionnable sur les articles
    802                 if ($versionnes = liste_champs_versionnes(table_objet_sql($x['args']['objet']))
     848                elseif ($versionnes = liste_champs_versionnes($table)
    803849                        AND in_array($j='jointure_'.table_objet($x['args']['objet_source']),$versionnes)){
    804                         $champs = array($j=>recuperer_valeur_champ_jointure($x['args']['objet'],$x['data'],$x['args']['objet_source']));
    805                         ajouter_version($x['data'],$x['args']['objet'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
    806                 }
    807 
     850                        $champs = array($j=>recuperer_valeur_champ_jointure($x['args']['objet'],$id_objet,$x['args']['objet_source']));
     851                        ajouter_version($id_objet,$x['args']['objet'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
     852                }
     853
     854                $table = table_objet_sql($x['args']['objet_source']);
     855                $id_objet = $x['args']['id_objet_source'];
     856                if (isset($GLOBALS['premiere_revision']["$table:".$id_objet])){
     857                        $GLOBALS['premiere_revision']["$table:".$id_objet] = 0;
     858                }
    808859                // ex : si le champ jointure_articles est versionnable sur les mots
    809                 if ($versionnes = liste_champs_versionnes(table_objet_sql($x['args']['objet_source']))
     860                elseif ($versionnes = liste_champs_versionnes($table)
    810861                        AND in_array($j='jointure_'.table_objet($x['args']['objet']),$versionnes)){
    811                         $champs = array($j=>recuperer_valeur_champ_jointure($x['args']['objet_source'],$x['args']['id_objet_source'],$x['args']['objet']));
    812                         ajouter_version($x['args']['id_objet_source'],$x['args']['objet_source'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
     862                        $champs = array($j=>recuperer_valeur_champ_jointure($x['args']['objet_source'],$id_objet,$x['args']['objet']));
     863                        ajouter_version($id_objet,$x['args']['objet_source'], $champs, '', $GLOBALS['visiteur_session']['id_auteur']);
    813864                }
    814865        }
  • _core_/plugins/revisions/paquet.xml

    r50134 r50708  
    22        prefix="revisions"
    33        categorie="edition"
    4         version="1.6.0"
     4        version="1.6.1"
    55        etat="test"
    66        compatibilite="[3.0.0-alpha2;["
     
    1616        <traduire module="revisions" reference="fr" gestionnaire="salvatore" />
    1717
     18        <pipeline nom="post_insertion" inclure="inc/revisions.php" />
    1819        <pipeline nom="pre_edition" inclure="inc/revisions.php" />
    1920        <pipeline nom="pre_edition_lien" inclure="inc/revisions.php" />
Note: See TracChangeset for help on using the changeset viewer.