Changeset 25085 in spip-zone


Ignore:
Timestamp:
Dec 11, 2008, 4:57:20 AM (11 years ago)
Author:
patfr@…
Message:

[NEW] Boîtes privées : Les tris d’auteurs
-> un cadre dépliable pour les articles contenant plus d’un auteur et permettant simplement d’en ajuster l’ordre d’affichage.

+ simplifications de code

Location:
_plugins_/_stable_/couteau_suisse
Files:
1 added
14 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/couteau_suisse/action/action_rapide.php

    r24679 r25085  
    3131        switch ($arg) {
    3232
     33        // pour inserer un pack de config dans config/mes_options.php
     34        case 'sauve_pack':
     35                include_spip('outils/pack_action_rapide');
     36                action_rapide_sauve_pack();
     37                break;
     38        // boite privee : tri les auteurs d'un article
     39        case 'tri_auteurs':
     40                include_spip('outils/boites_privees');
     41                action_rapide_tri_auteurs(_request('bp_article'), abs(_request('bp_auteur')), _request('bp_auteur')>0);
     42                break;
     43
    3344        // purger la corbeille
    3445        case 'corbeille':
    3546                include_spip('outils/corbeille_action_rapide');
    3647                action_rapide_purge_corbeille();
    37                 break;
    38         // pour inserer un pack de config dans config/mes_options.php
    39         case 'sauve_pack':
    40                 include_spip('outils/pack_action_rapide');
    41                 action_rapide_sauve_pack();
    4248                break;
    4349        // pour purger le cache de SPIP...
  • _plugins_/_stable_/couteau_suisse/config_outils.php

    r24877 r25085  
    483483
    484484add_variable( array(
     485        'nom' => 'bp_tri_auteurs',
     486        'check' => 'couteauprive:bp_tri_auteurs',
     487        'defaut' => 1,
     488        'code:%s' => "define('boites_privees_TRI_AUTEURS', %s);\n",
     489));
     490add_variable( array(
    485491        'nom' => 'bp_urls_propres',
    486492        'check' => 'couteauprive:bp_urls_propres',
     
    510516        'auteur'=>'Pat, Joseph LARMARANGE (format SPIP)',
    511517        'contrib' => 2564,
    512         'code:options' => "%%cs_rss%%%%format_spip%%%%stat_auteurs%%%%bp_urls_propres%%",
     518        'code:options' => "%%cs_rss%%%%format_spip%%%%stat_auteurs%%%%bp_urls_propres%%%%bp_tri_auteurs%%",
    513519        'categorie' => 'interface',
    514520        'pipeline:affiche_milieu' => 'boites_privees_affiche_milieu',
     
    11011107        'radio' => array(1 => 'item_oui', 0 => 'item_non'),
    11021108        'defaut' => 0,
    1103         'code:%s' => "if(!function_exists('genie_optimiser')) {
     1109        'code:%s' => "define('_CORBEILLE_SANS_OPTIM', 1);
     1110if(!function_exists('genie_optimiser')) {
    11041111        // surcharge de la fonction d'optimisation de SPIP (inc/optimiser.php)
    11051112        function genie_optimiser(\$t='foo'){ include_spip('optimiser','genie'); optimiser_base_une_table(); return -(mktime(2,0,0) + rand(0, 3600*4)); }\n}",
  • _plugins_/_stable_/couteau_suisse/cout_options.php

    r24679 r25085  
    158158}
    159159
     160// message si non autorise
     161function cs_minipres($exit=-1) {
     162        if($exit===-1) $exit=!cout_autoriser();
     163        if($exit) {
     164                include_spip('inc/minipres');
     165                echo defined('_SPIP19100')?minipres( _T('avis_non_acces_page')):minipres();
     166                exit;
     167        }
     168}
     169
    160170// Dates
    161171function cs_date() {
  • _plugins_/_stable_/couteau_suisse/exec/action_rapide.php

    r24801 r25085  
    2121function exec_action_rapide_dist() {
    2222        global $type_urls;
    23         if (!cout_autoriser()) {
    24                 include_spip('inc/minipres');
    25                 echo defined('_SPIP19100')?minipres( _T('avis_non_acces_page')):minipres();
    26                 exit;
    27         }
     23        cs_minipres();
    2824        $arg = _request('arg');
    2925//      spip_log("exec 'action_rapide' du Couteau suisse : $arg / "._request('submit'));
     
    3127
    3228        switch ($arg) {
     29        // formulaires en partie privee
     30        case 'boites_privees':
     31cs_log("INIT : exec_action_rapide_dist() - Preparation du retour par Ajax (donnees transmises par GET)");
     32                $script = _request('script');
     33cs_log(" -- fonction = $fct - script = $script - arg = $arg");
     34                cs_minipres(!preg_match('/^\w+$/', $script));
     35                $fct = 'action_rapide_'._request('fct');
     36                include_spip('outils/boites_privees');
     37                $res = function_exists($fct)?$fct():'';
     38cs_log(" FIN : exec_description_outil_dist() - Appel maintenant de ajax_retour() pour afficher le formulaire de la boite privee");     
     39                ajax_retour($res);
     40                break;
    3341
    3442        // pour gerer les packs de configuration : mode non ajax, rien a faire.
     
    4250                $outil = _request('outil');
    4351cs_log(" -- outil = $outil - script = $script - arg = $arg");
    44                 if (!preg_match('/^\w+$/', $script)) { echo minipres(); exit; }
     52                cs_minipres(!preg_match('/^\w+$/', $script));
    4553                include_spip('inc/cs_outils');
    4654                $res = cs_action_rapide($outil);
  • _plugins_/_stable_/couteau_suisse/exec/admin_couteau_suisse.php

    r24811 r25085  
    394394        // cette valeur par defaut n'est pas definie sous SPIP 1.92
    395395        @define('_ID_WEBMESTRES', 1);
    396         if (!cout_autoriser()) {
    397                 include_spip('inc/minipres');
    398                 echo defined('_SPIP19100')?minipres( _T('avis_non_acces_page')):minipres();
    399                 exit;
    400         }
     396        cs_minipres();
    401397        $cmd = _request('cmd');
    402398        $exec = _request('exec');
  • _plugins_/_stable_/couteau_suisse/exec/charger_description_outil.php

    r24791 r25085  
    1616cs_log("INIT : exec_charger_description_outil_dist() - Preparation du retour par Ajax sur div#cs_infos");
    1717
    18         if (!cout_autoriser()) {
    19                 include_spip('inc/minipres');
    20                 echo minipres();
    21                 exit;
    22         }
     18        cs_minipres();
    2319        if ($outil_id=_request('outil')) {
    2420                include_spip('inc/headers');
  • _plugins_/_stable_/couteau_suisse/exec/cs_boite_rss.php

    r24680 r25085  
    2828
    2929function exec_cs_boite_rss_dist() {
    30         if (!cout_autoriser()) {
    31                 include_spip('inc/minipres');
    32                 echo defined('_SPIP19100')?minipres( _T('avis_non_acces_page')):minipres();
    33                 exit;
    34         }
     30        cs_minipres();
    3531        include_spip('cout_define');
    3632        cout_define('distant');
  • _plugins_/_stable_/couteau_suisse/exec/cs_version.php

    r24432 r25085  
    2323
    2424function exec_cs_version_dist() {
    25         if (!cout_autoriser()) {
    26                 include_spip('inc/minipres');
    27                 echo defined('_SPIP19100')?minipres( _T('avis_non_acces_page')):minipres();
    28                 exit;
    29         }
     25        cs_minipres();
    3026        $version = _request('version');
    3127        $force = _request('force')=='oui';
  • _plugins_/_stable_/couteau_suisse/exec/description_outil.php

    r24803 r25085  
    2323        $outil = _request('outil');
    2424cs_log(" -- outil = $outil - script = $script");
    25         if (!preg_match('/^\w+$/', $script)) { echo minipres(); exit;   }
     25        cs_minipres(!preg_match('/^\w+$/', $script));
    2626        // ici on commence l'initialisation de tous les outils
    2727        global $outils, $metas_vars, $metas_outils;
  • _plugins_/_stable_/couteau_suisse/exec/test_couteau_suisse.php

    r23849 r25085  
    2020        global $connect_statut, $connect_toutes_rubriques;
    2121
    22         if (!cout_autoriser()) {
    23                 include_spip('inc/minipres');
    24                 echo defined('_SPIP19100')?minipres( _T('avis_non_acces_page')):minipres();
    25                 exit;
    26         }
     22        cs_minipres();
    2723
    2824        // initialisation generale forcee : recuperation de $outils;
  • _plugins_/_stable_/couteau_suisse/lang/couteau_fr.php

    r24656 r25085  
    7272        'textes_formatspip' => 'TEXTES ORIGINAUX AU FORMAT SPIP',
    7373        'titre' => 'Le Couteau Suisse',
     74        'tri_auteurs' => 'ORDRE DES AUTEURS',
     75        'tri_descendre' => 'Descendre cet auteur',
     76        'tri_monter' => 'Monter cet auteur',
    7477
    7578        // U
  • _plugins_/_stable_/couteau_suisse/lang/couteauprive_fr.php

    r24999 r25085  
    5757@puce@ En cochant «oui» ci-dessous, l\'ouverture d\'un bloc provoquera la fermeture de tous les autres blocs de la page, afin d\'en avoir qu\'un seul ouvert à la fois.[[%bloc_unique%]]',
    5858        'blocs:nom' => 'Blocs Dépliables',
    59         'boites_privees:description' => 'Toutes les boîtes décrites ci-dessous apparaissent dans la partie privée.[[%cs_rss%]][[->%format_spip%]][[->%stat_auteurs%]][[->%bp_urls_propres%]]
     59        'boites_privees:description' => 'Toutes les boîtes décrites ci-dessous apparaissent ici ou là dans la partie privée.[[%cs_rss%]][[->%format_spip%]][[->%stat_auteurs%]][[->%bp_urls_propres%]][[->%bp_tri_auteurs%]]
    6060- {{Les révisions du Couteau Suisse}} : un cadre sur la présente page de configuration, indiquant les dernières modifications apportées au code du plugin ([Source->@_CS_RSS_SOURCE@]).
    6161- {{Les articles au format SPIP}} : un cadre repliable supplémentaire pour vos articles afin de connaître le code source utilisé par leurs auteurs.
    6262- {{Les auteurs en stat}} : un cadre supplémentaire sur [la page des auteurs->./?exec=auteurs] indiquant les 10 derniers connectés et les inscriptions non confirmées. Seuls les administrateurs voient ces informations.
    63 - {{Les URLs propres}} : un cadre dépliable pour chaque objet de contenu (article, rubrique, auteur, ...) indiquant l\'URL propre associée ainsi que leurs alias éventuels. L\'outil « [.->type_urls] » vous permet une configuration fine des URLs de votre site.',
     63- {{Les URLs propres}} : un cadre dépliable pour chaque objet de contenu (article, rubrique, auteur, ...) indiquant l\'URL propre associée ainsi que leurs alias éventuels. L\'outil « [.->type_urls] » vous permet une configuration fine des URLs de votre site.
     64- {{Les tris d\'auteurs}} : un cadre dépliable pour les articles contenant plus d\'un auteur et permettant simplement d\'en ajuster l\'ordre d\'affichage.',
    6465        'boites_privees:nom' => 'Boîtes privées',
    6566        'bp_urls_propres' => 'Les URLs propres',
     67        'bp_tri_auteurs' => 'Les tris d\'auteurs',
    6668
    6769        // C
  • _plugins_/_stable_/couteau_suisse/outils/boites_privees.php

    r24909 r25085  
    22
    33if (!defined("_ECRIRE_INC_VERSION")) return;
     4include_spip('inc/presentation');
     5include_spip('inc/layer');
    46
    57// compatibilite avec SPIP 1.91
    6 if(!defined('_SPIP19200')) {
     8if(!function_exists('block_parfois_visible')) {
    79        function block_parfois_visible($nom, $invite, $masque, $style='') {
    810                return "<div style='$style'>" . bouton_block_invisible($nom) . "$invite</div>"
     
    1012        }
    1113}
     14// compatibilite SPIP SQL < 2.0
     15if(!defined('_SPIP19300')) {
     16        if(!function_exists('sql_select')) { function sql_select($s,$f,$w='',$g='',$o='',$l='') {
     17                return spip_query("SELECT $s FROM $f".($w?" WHERE $w":'').($g?" GROUP BY $g":'').($o?" ORDER BY $o":'').($l?" LIMIT $l":''));
     18        } }
     19        if(!function_exists('sql_fetch')) { function sql_fetch($s) { return spip_fetch_array($s); } }
     20        if(!function_exists('sql_update')) { function sql_update($t, $e, $w='') {
     21                array_walk($e, create_function('&$elem','$elem = is_numeric($elem)?$elem:_q($elem);'));
     22                return spip_query("UPDATE $t SET ".join(',',$e).($w?" WHERE $w":''));
     23        } }
     24}
    1225
    1326function boites_privees_affiche_gauche($flux){
     27        if(defined('boites_privees_TRI_AUTEURS') && ($flux['args']['exec']=='articles'))
     28                $flux['data'] .= action_rapide_tri_auteurs($flux['args']['id_article']);
    1429        if(defined('boites_privees_URLS_PROPRES'))
    1530                switch($flux['args']['exec']) {
     
    4257                case 'auteurs':
    4358                case 'auteur_infos': if (defined('boites_privees_AUTEURS') && cout_autoriser()) {
    44                         // compatibilite SPIP 1.92
    45                         $fetch = function_exists('sql_fetch')?'sql_fetch':'spip_fetch_array';
    4659                        // pour cs_lien()
    4760                        include_spip('cout_fonctions');
    4861                        $flux['data'] .= debut_cadre_relief(find_in_path('img/couteau-24.gif'),true,'',_T('icone_statistiques_visites'))
    4962                                . "<p><b>"._T('couteau:derniers_connectes')."</b></p>"
    50                                 . cs_derniers_connectes($fetch)
     63                                . cs_derniers_connectes()
    5164                                . "<p><b>"._T('couteau:non_confirmes')."</b></p>"
    52                                 . cs_non_confirmes($fetch)
     65                                . cs_non_confirmes()
    5366                                . fin_cadre_relief(true);
    5467                        break;
     
    6174
    6275function cs_formatspip($id_article){
    63         include_spip('inc/presentation');
    64 
    65         $q = spip_query("SELECT descriptif,chapo,texte,ps FROM spip_articles WHERE id_article=$id_article");
    66         // compatibilite SPIP 1.92
    67         $row = function_exists('sql_fetch')?sql_fetch($q):spip_fetch_array($q);
     76        $q = sql_select('descriptif,chapo,texte,ps', 'spip_articles', "id_article=$id_article");
     77        $row = sql_fetch($q);
    6878        $txt = ''; $i = 0;
    69         if (strlen($row['descriptif'])>0) {
     79        if (strlen($row['descriptif'])>0)
    7080                $txt .= '===== '._T('texte_descriptif_rapide')." =====\n\n"
    7181                        . $row['descriptif']."\n\n"; $i++;
    72         }
    73         if (strlen($row['chapo'])>0) {
     82        if (strlen($row['chapo'])>0)
    7483                $txt .= '===== '._T('info_chapeau')." =====\n\n"
    7584                        . $row['chapo']."\n\n"; $i++;
    76         }
    77         if (strlen($row['texte'])>0) {
     85        if (strlen($row['texte'])>0)
    7886                $txt .= '===== '._T('info_texte')." =====\n\n"
    7987                        . $row['texte']."\n\n"; $i++;
    80         }
    81         if (strlen($row['ps'])>0) {
     88        if (strlen($row['ps'])>0)
    8289                $txt .= '===== '._T('info_post_scriptum')." =====\n\n"
    8390                        . $row['ps']."\n\n"; $i++;
    84         }
    8591        $titre =  _T('couteau:texte'.($i>1?'s':'').'_formatspip');
    8692        // compatibilite SPIP < 2.0
     
    103109}
    104110
    105 function cs_derniers_connectes($fetch){
    106         $query = spip_query("SELECT id_auteur,nom,statut,en_ligne FROM spip_auteurs ORDER BY en_ligne DESC LIMIT 10");
     111function cs_derniers_connectes(){
     112        $query = sql_select('id_auteur,nom,statut,en_ligne', 'spip_auteurs', '', '', 'en_ligne DESC', '10');
    107113        $res = array();
    108     while ($row = $fetch($query)) $res[]=_T('couteau:stats_auteur', array(
     114    while ($row = sql_fetch($query)) $res[]=_T('couteau:stats_auteur', array(
    109115                'icon' => '<a href="'.generer_url_ecrire("auteurs","statut=" . $row['statut']).'">' . bonhomme_statut($row) . '</a>',
    110116                'nom' => cs_lien(generer_url_ecrire("auteur_infos","id_auteur=$row[id_auteur]"), $row['nom']),
     
    114120}
    115121
    116 function cs_non_confirmes($fetch){
    117         $query = spip_query('SELECT id_auteur,nom,maj FROM spip_auteurs WHERE statut=\'nouveau\' ORDER BY maj DESC');
     122function cs_non_confirmes(){
     123        $query = sql_select('id_auteur,nom,maj', 'spip_auteurs', "statut='nouveau'", '', 'maj DESC');
    118124        $res = array();
    119     while ($row = $fetch($query)) $res[]=_T('couteau:stats_auteur', array(
     125    while ($row = sql_fetch($query)) $res[]=_T('couteau:stats_auteur', array(
    120126                'icon' => http_img_pack("aide.gif", '', '', _T('couteau:attente_confirmation')),
    121127                'nom' => cs_lien(generer_url_ecrire("auteur_infos","id_auteur=$row[id_auteur]"), $row['nom']),
     
    153159                $url = '';
    154160                $table = $type.($type=='syndic'?'':'s');
    155                 $r0 = "SELECT url_propre FROM spip_$table WHERE id_$type=$id";
    156                 $r = spip_query($r0);
     161                $r = spip_query("SELECT url_propre FROM spip_$table WHERE id_$type=$id");
    157162                if ($r AND $r = spip_fetch_array($r)) $res .= "&bull;&nbsp;$r[url_propre]\n";
    158163        }
     
    181186}
    182187
     188// fonction qui centralise :
     189//      - 1er affichage : action_rapide_tri_auteurs($id_article)
     190//      - appel exec : action_rapide_tri_auteurs()
     191//      - appel action : action_rapide_tri_auteurs($id_article, $id_auteur, $monter)
     192function action_rapide_tri_auteurs($id_article=0, $id_auteur=0, $monter=true) {
     193spip_log("action_rapide_tri_auteurs : $id_article, $id_auteur, $monter");
     194        // si appel action...
     195         if($id_auteur) {
     196                $s = sql_select('id_auteur', 'spip_auteurs_articles', "id_article=$id_article");
     197                $i=0; $j=0;
     198                while ($a = sql_fetch($s)) {
     199                        if($a['id_auteur']==$id_auteur) { $i = $a['id_auteur']; break; }
     200                        $j = $a['id_auteur'];
     201                }
     202                if(!$monter && $i && ($a = sql_fetch($s))) $j = $a['id_auteur'];
     203                spip_log("action_rapide_tri_auteurs, article $id_article : echange entre l'auteur $i et l'auteur $j");
     204                if($i && $j) {
     205                        sql_update("spip_auteurs_articles", array('id_auteur'=>-99), "id_article=$id_article AND id_auteur=$i");
     206                        sql_update("spip_auteurs_articles", array('id_auteur'=>$i), "id_article=$id_article AND id_auteur=$j");
     207                        sql_update("spip_auteurs_articles", array('id_auteur'=>$j), "id_article=$id_article AND id_auteur=-99");
     208                }
     209                return;
     210         }
     211        $id = $id_article?$id_article:_request('id_article');
     212        // syntaxe : ajax_action_auteur($action, $id, $script, $args='', $corps=false, $args_ajax='', $fct_ajax='')
     213        $texte = ajax_action_auteur('action_rapide', 'tri_auteurs', 'articles', "arg=boites_privees&fct=tri_auteurs&id_article=$id#bp_tri_auteurs_corps",
     214                        recuperer_fond('fonds/tri_auteurs', array('id_article'=>$id)));
     215        // si appel exec...
     216        if(!$id_article) return $texte;
     217        // ici, 1er affichage !
     218        // SPIP < 2.0
     219        if(!defined('_SPIP19300')) return debut_cadre_relief(find_in_path('img/couteau-24.gif'), true)
     220                . "<div class='verdana1' style='text-align: left;'>"
     221                . block_parfois_visible('bp', '<b>'._T('couteau:tri_auteurs').'</b>', cs_tri_auteurs_corps($id_article), 'text-align: center;')
     222                . "</div>"
     223                . fin_cadre_relief(true);
     224        // SPIP >= 2.0
     225        return cadre_depliable(find_in_path('img/couteau-24.gif'),
     226                '<b>'._T('couteau:tri_auteurs').'</b>',
     227                true,   // true = deplie
     228                "<div id='bp_tri_auteurs_corps'>$texte</div>",
     229                'bp_tri_auteurs');
     230}
     231
    183232?>
  • _plugins_/_stable_/couteau_suisse/plugin.xml

    r24930 r25085  
    22        <nom><multi>Swiss Knife[fr]Le Couteau Suisse[ca]El Ganivet Su&#237;s[ar]&#1587;&#1603;&#1610;&#1606; &#1575;&#1604;&#1580;&#1610;&#1576;[nl]Het Zwitserland Mes[gl]A navalla su&#237;za[es]La Navaja Suiza[de]Schweizer Taschenmesser[tr]&#304;svi&#231;re &#199;ak&#305;s&#305;[br]Ar Gontell Suis[pt_br]Canivete Su&#237;&#231;o[ast]La Navaya Suiza[gl]A navalla su&#237;za[ro]Cu&#355;itul Elve&#355;ian</multi></nom>
    33        <icon>img/couteau-50.gif</icon>
    4         <version>1.8.04.01</version>
     4        <version>1.8.05.00</version>
    55        <auteur>Patrice Vanneufville
    66_ &#169; 2007-2008 - Distribu&#233; sous licence GPL
Note: See TracChangeset for help on using the changeset viewer.