Changeset 82424 in spip-zone


Ignore:
Timestamp:
May 15, 2014, 6:18:51 PM (5 years ago)
Author:
cedric@…
Message:

Evolution du plugin qui permet maintenant de renumeroter tous les objets enfants des rubriques, ainsi que les mots cles et les groupes de mot
+ amelioration fonctionnelle qui rend la numerotation plus accessible : un formulaire permet de renumeroter un objet pour le deplacer apres un autre objet de meme parent par select+submit, ce qui est plus simple et rapide que de modifier le titre de l'objet en ayant memorise celui de son precedent (Armony)

Location:
_plugins_/numerotation/trunk
Files:
7 added
5 edited
1 copied
4 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/numerotation/trunk/action/denumeroter.php

    r17382 r82424  
    1313       
    1414        include_spip('inc/numeroter');
    15         numero_numeroter_rubrique(intval($arg[1]),$type,false);
     15        numero_numeroter_objets($type,intval($arg[1]),true);
    1616
    1717}
  • _plugins_/numerotation/trunk/action/renumeroter.php

    r17382 r82424  
    1313       
    1414        include_spip('inc/numeroter');
    15         numero_numeroter_rubrique(intval($arg[1]),$type);
     15        numero_numeroter_objets($type,intval($arg[1]));
    1616}
    1717
  • _plugins_/numerotation/trunk/inc/numeroter.php

    r67511 r82424  
    88}
    99
    10 function numero_numeroter_rubrique($id_rubrique,$type='rubrique',$numerote=true){
     10function numero_info_objet($objet,$id_objet=0){
     11        static $infos = array();
    1112        include_spip("base/abstract_sql");
    12         $table = table_objet($type);
    13         $table_sql = table_objet_sql($type);
    14         $key = id_table_objet($type);
    15         $parent = ($type=='rubrique')?'id_parent':'id_rubrique';
     13        if (!isset($infos[$objet])){
     14                $type = objet_type($objet);
     15                $table = table_objet($type);
     16                $table_sql = table_objet_sql($type);
     17                $key = id_table_objet($type);
     18                $trouver_table = charger_fonction("trouver_table","base");
     19                $desc = $trouver_table($table);
    1620
    17         $cond = "";
     21                // champ parent
     22                $parent = "";
     23                if (isset($desc['field']['id_rubrique']))
     24                        $parent = "id_rubrique";
     25                switch($type){
     26                        case 'rubrique': $parent = "id_parent";break;
     27                        case 'mot': $parent = "id_groupe";break;
     28                        case 'groupe_mots': $parent = "";break;
     29                        // type non prevu ici (et pas range dans une rubrique) : on ne fait rien
     30                        default :
     31                                if (!$parent) false;
     32                                break;
     33                }
     34
     35                $infos[$objet] = array(
     36                        'type' => $type,
     37                        'table' => $table,
     38                        'table_sql' => $table_sql,
     39                        'primary' => $key,
     40                        'desc' => $desc,
     41                        'parent' => $parent,
     42                        'titre' => 'titre',
     43                );
     44                // extraire le champ titre
     45                if (isset($desc['titre'])){
     46                        $infos[$objet]['titre'] = explode(',',$desc['titre']);
     47                        $infos[$objet]['titre'] = explode(' ',reset($infos[$objet]['titre']));
     48                        $infos[$objet]['titre'] = reset($infos[$objet]['titre']);
     49                }
     50        }
     51        $res = $infos[$objet];
     52
     53        if ($id_objet AND $res['parent']){
     54                $res['id_parent'] = sql_getfetsel($res['parent'],$res['table_sql'],$res['primary']."=".intval($id_objet));
     55        }
     56
     57        return $res;
     58}
     59
     60function numero_requeter_titre($type,$cond = array()){
     61        $d = numero_info_objet($type);
     62        $select = array(
     63                $d['primary']." AS id",
     64                $d['titre']." AS titre",
     65        );
     66        if ($d['parent'])
     67                $select[] = $d['parent']." AS id_parent";
     68        else
     69                $select[] = '0 AS id_parent';
     70        $res = sql_select($select,$d['table_sql'],$cond,'',"0+titre,titre,maj DESC");
     71        return $res;
     72}
     73
     74function numero_titrer_objet($type,$id,$titre){
     75        $d = numero_info_objet($type);
     76        sql_updateq($d['table_sql'],array($d['titre']=>$titre),$d['primary']."=".intval($id));
     77}
     78
     79function numero_numeroter_objets($type='rubrique',$id_parent,$remove=false){
     80        $d = numero_info_objet($type);
     81        if (!$d)
     82                return;
     83
     84        $type = $d['type'];
     85        $table = $d['table'];
     86        $table_sql = $d['table_sql'];
     87        $key = $d['primary'];
     88        $desc = $d['desc'];
     89        $parent = $d['parent'];
     90        $titre = $d['titre'];
     91
     92        $cond = array();
    1893        $zero = true;
    19         if ($numerote && ($type=='article')){
     94        if (!$remove AND
     95                $type=='article'){
    2096                $row = false;
    2197                if (defined('_NUMERO_MOT_ARTICLE_ACCUEIL')) {
     
    2399                        $row = sql_fetsel("a.id_article,a.titre",
    24100                                "spip_articles AS a INNER JOIN spip_mots_liens as J ON (J.id_objet=a.id_article AND J.objet='article')",
    25                                 "a.id_rubrique=".sql_quote($id_rubrique)."
     101                                "a.id_rubrique=".sql_quote($id_parent)."
    26102                         AND J.id_mot=".sql_quote(_NUMERO_MOT_ARTICLE_ACCUEIL),'',"0+a.titre, a.maj DESC","0,1");
    27103                }
     
    30106                        $row = sql_fetsel("a.id_article,a.titre",
    31107                                "spip_articles AS a INNER JOIN spip_rubriques as J ON J.id_article_accueil=a.id_article",
    32                                 "a.id_rubrique=".sql_quote($id_rubrique),'',"0+a.titre, a.maj DESC","0,1");
     108                                "a.id_rubrique=".sql_quote($id_parent),'',"0+a.titre, a.maj DESC","0,1");
    33109                }
    34110                if ($row){
     
    37113                                sql_updateq($table_sql,array('titre'=>$titre),"$key=".sql_quote($row[$key]));
    38114                        $zero = false;
    39                         $cond = " AND id_article<>".sql_quote($row[$key]);
     115                        $cond[] = "id_article<>".sql_quote($row[$key]);
    40116                }
    41117        }
    42118        if ($type=='article') {
    43                 $cond .= " AND statut!='poubelle'";
     119                $cond[] = "statut!=".sql_quote('poubelle');
    44120        }
    45        
    46         $res = sql_select("$key,titre",$table_sql,"$parent=".sql_quote($id_rubrique)."$cond ORDER BY 0+titre, maj DESC");
     121
     122        if ($parent){
     123                $cond[] = "$parent=".sql_quote($id_parent);
     124        }
     125
     126        $res = numero_requeter_titre($type,$cond);
    47127        $cpt = 1;
    48         while($row = spip_fetch_array($res)) {
     128        while($row = sql_fetch($res)) {
    49129                // conserver la numerotation depuis zero si deja presente
    50130                if ($zero && ($cpt==1) && preg_match(',^0+[.]\s,',$row['titre'])) {
     
    52132                        $cpt = 0;
    53133                }
    54                 $titre = ($numerote?($cpt*_NUMEROTE_STEP) . ". ":"") . numero_denumerote_titre($row['titre']);
    55                 if ($titre!==$row['titre'])
    56                         sql_updateq($table_sql,array('titre'=>$titre),"$key=".sql_quote($row[$key]));
     134                $t = (!$remove?($cpt*_NUMEROTE_STEP) . ". ":"") . numero_denumerote_titre($row['titre']);
     135                if ($t!==$row['titre']){
     136                        numero_titrer_objet($type,$row['id'],$t);
     137                }
    57138                $cpt++;
    58139        }
     
    60141}
    61142
    62 ?>
     143
     144function numero_lister_fratrie($objet,$id_objet){
     145        // recuperer le titre/parent de l'objet
     146        $d = numero_info_objet($objet,$id_objet);
     147        $cond = array($d['primary']."=".intval($id_objet));
     148        $res = numero_requeter_titre($objet,$cond);
     149        $row = sql_fetch($res);
     150        $cond = array();
     151        if ($d['parent'])
     152                $cond = array($d['parent']."=".$row['id_parent']);
     153        $res = numero_requeter_titre($objet,$cond);
     154        $fratrie = array();
     155        while($row = sql_fetch($res))
     156                $fratrie[$row['id']] = $row['titre'];
     157
     158        return $fratrie;
     159}
     160function numero_trouver_precedent($id_objet,$fratrie){
     161        $ids = array_keys($fratrie);
     162        $k = array_search($id_objet,$ids);
     163        if ($k==0)
     164                return 0;
     165        return $ids[$k-1];
     166}
  • _plugins_/numerotation/trunk/lang/numero_fr.php

    r80707 r82424  
    1414
    1515// N
    16         'numero_description' => 'Ce plugin permet d\'un clic de numéroter/re-numéroter/dé-numéroter tous les articles ou sous-rubriques d\'une rubrique.',
    17         'numero_slogan' => 'Gérer facilement la numérotation des articles et rubriques',
     16        'info_numeroter_objets' => 'Re-numéroter les @objets@',
     17        'info_denumeroter_objets' => 'Enlever la numerotation des @objets@',
     18        'info_numeroter_rubriques' => 'Re-numéroter les sous-rubriques',
     19        'info_denumeroter_rubriques' => 'Enlever la numerotation des sous-rubriques',
     20        'info_numeroter_secteurs' => 'Re-numéroter les rubriques',
     21        'info_denumeroter_secteurs' => 'Enlever la numerotation des rubriques',
     22
     23        'label_precedent' => 'Classer après',
     24        'label_precedent_0' => 'En premier',
     25
     26        'titre_formulaire_numeroter' => 'Numeroter',
    1827);
    1928?>
  • _plugins_/numerotation/trunk/numero_pipeline.php

    r67511 r82424  
    44
    55function numero_affiche_droite($flux){
    6         if (in_array($flux['args']['exec'], array('rubriques', 'rubrique')) and autoriser('numeroter', 'rubrique', $flux['args']['id_rubrique'])){
     6        $out2 = "";
     7        $class = 'boutons_numero';
     8        if ($e = trouver_objet_exec($flux['args']['exec'])
     9          AND $e['edition']===false
     10                AND include_spip("inc/numeroter")
     11                AND ($r = numero_info_objet($e['type']))!==false){
     12                $out2 = recuperer_fond("prive/squelettes/inclure/numeroter_objet",array('objet'=>$e['type'],'id_objet'=>$flux['args'][$e['id_table_objet']]));
     13                $class .= ' nomargin';
     14        }
     15
     16        if (in_array($flux['args']['exec'], array('rubriques', 'rubrique'))
     17                AND autoriser('numeroter', 'rubrique', $flux['args']['id_rubrique'])){
    718                $out = "";
    819                $id_rubrique = $flux['args']['id_rubrique'];
    9                 $out .= boite_ouvrir('', 'simple');
    1020
    11                 $out .= "<h4 style='overflow: hidden'>Rubriques<span style='float:right;'>";
    12                 $out .= bouton_action(
    13                         http_img_pack(find_in_theme("images/numerote-24.png"),"Re-numeroter"),
    14                         generer_action_auteur('renumeroter', "rubrique-$id_rubrique", self('&')),
    15                         "","","Re-numeroter"
    16                 );
    17                 $out .= bouton_action(
    18                         http_img_pack(find_in_theme("images/denumerote-24.png"),"Enlever la numerotation"),
    19                         generer_action_auteur('denumeroter', "rubrique-$id_rubrique", self('&')),
    20                         "","","Enlever la numerotation"
    21                 );
     21                if (numero_compte_objets_enfants('rubrique',"id_parent",$id_rubrique))
     22                        $out .= numero_affiche_boutons_objets_enfants($id_rubrique,"rubrique");
    2223
    23                 $out .= "</span></h4><h4>Articles<span style='float:right;'>";
    24                 $out .= bouton_action(
    25                         http_img_pack(find_in_theme("images/numerote-24.png"),"Re-numeroter"),
    26                         generer_action_auteur('renumeroter', "article-$id_rubrique", self('&')),
    27                         "","","Re-numeroter"
    28                 );
    29                 $out .= bouton_action(
    30                         http_img_pack(find_in_theme("images/denumerote-24.png"),"Enlever la numerotation"),
    31                         generer_action_auteur('denumeroter', "article-$id_rubrique", self('&')),
    32                         "","","Enlever la numerotation"
    33                 );
     24                // lister tous les types dispo, voir si ils ont un id_rubrique, et si il y en a dans cette rubrique
     25                $objets = lister_tables_objets_sql();
     26                foreach($objets as $table_sql => $desc){
     27                        if (isset($desc['field']['id_rubrique'])
     28                          AND numero_compte_objets_enfants($desc['type'],"id_rubrique",$id_rubrique)){
     29                                // verifier qu'il y en a bien dans la rubrique
     30                                $out .= numero_affiche_boutons_objets_enfants($id_rubrique,$desc['type']);
     31                        }
     32                }
    3433
    35                 $out .= "</span></h4>";
    36                 $out .= boite_fermer();
    37                 $flux['data'].= $out;
     34                if ($out){
     35                        $out = boite_ouvrir('', 'simple '.$class)
     36                          . $out
     37                          . boite_fermer();
     38                        $flux['data'].= $out;
     39                }
    3840        }
     41        if (in_array($flux['args']['exec'], array('groupe_mots'))
     42                AND autoriser('numeroter', 'groupe_mots', $flux['args']['id_groupe'])){
     43                $out = "";
     44                $id_groupe = $flux['args']['id_groupe'];
     45
     46                if (numero_compte_objets_enfants('mot',"id_groupe",$id_groupe)){
     47                        $out .= numero_affiche_boutons_objets_enfants($id_groupe,"mot");
     48                }
     49
     50                if ($out){
     51                        $out = boite_ouvrir('', 'simple '.$class)
     52                          . $out
     53                          . boite_fermer();
     54                        $flux['data'].= $out;
     55                }
     56        }
     57        if (in_array($flux['args']['exec'], array('mots'))
     58                AND autoriser('numeroter', 'groupe_mots', 0)){
     59                $out = "";
     60
     61                if (numero_compte_objets_enfants('groupemot',"",0)){
     62                        $out .= numero_affiche_boutons_objets_enfants(0,"groupemot");
     63                }
     64
     65                if ($out){
     66                        $out = boite_ouvrir('', 'simple '.$class)
     67                          . $out
     68                          . boite_fermer();
     69                        $flux['data'].= $out;
     70                }
     71        }
     72        $flux['data'].= $out2;
     73
    3974        return $flux;
    4075}
    4176
    42 ?>
     77function numero_compte_objets_enfants($type,$champ_parent,$id_parent){
     78        return sql_countsel(table_objet_sql($type),"$champ_parent=".intval($id_parent));
     79}
     80
     81function numero_affiche_boutons_objets_enfants($id_parent,$type){
     82
     83        $out = "";
     84        $out .= "<h4>";
     85        $texte_objets = _T(objet_info($type,"texte_objets"));
     86        $out .= "<span class='label'>".$texte_objets."</span>";
     87        $out .= "<span class='boutons'>";
     88        if ($type=="rubrique"){
     89                $alt = ($id_parent?_T("numero:info_denumeroter_rubriques"):_T("numero:info_denumeroter_secteurs"));
     90        }
     91        else {
     92                $alt = _T("numero:info_denumeroter_objets",array('objets'=>$texte_objets));
     93        }
     94        $out .= bouton_action(
     95                http_img_pack(find_in_theme("images/denumeroter-24.png"),$alt),
     96                generer_action_auteur('denumeroter', "$type-$id_parent", self('&')),
     97                "","",$alt
     98        );
     99        if ($type=="rubrique"){
     100                $alt = ($id_parent?_T("numero:info_numeroter_rubriques"):_T("numero:info_numeroter_secteurs"));
     101        }
     102        else {
     103                $alt = _T("numero:info_numeroter_objets",array('objets'=>$texte_objets));
     104        }
     105        $out .= bouton_action(
     106                http_img_pack(find_in_theme("images/numeroter-24.png"),$alt),
     107                generer_action_auteur('renumeroter', "$type-$id_parent", self('&')),
     108                "","",$alt
     109        );
     110        $out .= "</span>";
     111        $out .= "</h4>";
     112
     113        return $out;
     114}
  • _plugins_/numerotation/trunk/paquet.xml

    r67511 r82424  
    22        prefix="numero"
    33        categorie="navigation"
    4         version="1.1.0"
     4        version="2.0.0"
    55        etat="stable"
    66        compatibilite="[3.0.0;3.0.*]"
    7         logo="prive/themes/spip/images/numerote-32.png"
     7        logo="prive/themes/spip/images/numeroter-32.png"
    88        documentation="http://www.spip-contrib.net/Numerotation-Rapide"
    99>       
Note: See TracChangeset for help on using the changeset viewer.