Changeset 88145 in spip-zone for _plugins_/albums


Ignore:
Timestamp:
Mar 22, 2015, 4:44:30 PM (4 years ago)
Author:
tcharlss@…
Message:

Ajout d'un pipeline album_boutons_actions pour gérer les boutons d'actions des albums, comme le fait le plugin Média avec document_desc_actions.
Sauf que $flux['data'] n'est pas le code HTML brut, mais un tableau associatif :
array (

'dissocier' => 'code HTML'
'vider' => 'code HTML'

)

Ça permet aux plugins d'ajouter des boutons, mais éventuellement aussi de modifier les autres.

Location:
_plugins_/albums/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/albums/trunk/albums_pipelines.php

    r87050 r88145  
    560560
    561561
     562/**
     563 * Utilisation du pipeline album_boutons_actions
     564 *
     565 * Renvoie une liste des boutons d'actions des albums.
     566 * Ils sont affichés dans les listes d'albums (footer), ou sur la fiche d'un album (boîte infos latérale).
     567 * Cette liste est un tableau associatif, donc les plugins peuvent ajouter les leurs mais également modifier certaines entrées (voir note).
     568 *
     569 * @note
     570 * `$flux['data']` est un tableau associatif de la forme `identifiant de l'action => code HTML du bouton`.
     571 * Les identifiants sont à priori des verbes : «vider», «supprimer», «giboliner», etc.
     572 * Ça permet, en plus de compléter la liste, d'avoir la main sur des entrées précises.
     573 * ````
     574 * array(
     575 *     'dissocier' => 'code HTML'
     576 *     'vider'     => 'code HTML'
     577 * )
     578 * ````
     579 *
     580 * @pipeline album_boutons_actions
     581 * @param array $flux
     582 *     Données du pipeline
     583 *     $flux['data']                array     tableau associatif des boutons
     584 *     $flux['args']['id_album']    int       identifiant de l'album
     585 *                  ['position']    string    endroit où sont affichés les boutons : footer | boite_infos
     586 *                  ['objet']       string    type d'objet pour un album associé
     587 *                  ['id_objet']    int       identifiant de l'objet
     588 * @return array
     589 *     Données du pipeline
     590**/
     591function albums_album_boutons_actions($flux){
     592
     593        if (!function_exists('bouton_action')) include_spip('inc/filtres');
     594        if (!function_exists('generer_action_auteur')) include_spip('inc/actions');
     595        if (!function_exists('autoriser')) include_spip('inc/autoriser');
     596
     597        $data = (is_array($flux['data']) AND count($flux['data'])) ? $flux['data'] : array();
     598        $id_album = intval($flux['args']['id_album']);
     599        $position = (isset($flux['args']['position']) AND in_array($flux['args']['position'],array('footer','boite_infos'))) ? $flux['args']['position'] : null;
     600        $objet    = (isset($flux['args']['objet'])) ? $flux['args']['objet'] : '';
     601        $id_objet = (isset($flux['args']['id_objet']) AND intval($flux['args']['id_objet'])) ? $flux['args']['id_objet'] : '';
     602        $liaison  = ($objet AND $id_objet) ? true : false;
     603
     604        // liste de tous les boutons possibles
     605        // `positions` indique les positions où ils peuvent apparaître (footer ou boite_infos)
     606        // `liaison`   indique qu'il faut afficher le bouton uniquement en cas de liaison (on a $objet et $id_objet)
     607        // `html`      code html du bouton
     608        $boutons = array(
     609                'dissocier' => array(
     610                        'positions' => array('footer'),
     611                        'liaison'   => true,
     612                        'autoriser' => autoriser('dissocier','album',$id_album,'',array('objet'=>$objet,'id_objet'=>$id_objet)),
     613                        'html'      => bouton_action(
     614                                _T('album:bouton_dissocier'),
     615                                generer_action_auteur('dissocier_album',$id_album.'/'.$objet.'/'.$id_objet,self()),
     616                                'ajax dissocier',
     617                                '',
     618                                _T('album:bouton_dissocier_explication'),
     619                                '(function(){jQuery("#album$id_album").animateRemove();return true;})()'
     620                        )
     621                ),
     622                'supprimer' => array(
     623                        'positions' => array('footer','boite_infos'),
     624                        'liaison'   => false,
     625                        'autoriser' => autoriser('supprimer','album',$id_album),
     626                        'html'      => bouton_action(
     627                                _T('album:bouton_supprimer'),
     628                                generer_action_auteur('supprimer_album',$id_album,self()),
     629                                'ajax supprimer',
     630                                _T('album:message_supprimer'),
     631                                _T('album:bouton_supprimer_explication'),
     632                                '(function(){jQuery("#album$id_album").animateRemove();return true;})()'
     633                        )
     634                ),
     635                'vider' => array(
     636                        'positions' => array('footer','boite_infos'),
     637                        'liaison'   => false,
     638                        'autoriser' => autoriser('vider','album',$id_album),
     639                        'html'      => bouton_action(
     640                                _T('album:bouton_vider'),
     641                                generer_action_auteur('dissocier_album',"$id_album/$objet/$id_objet",self()),
     642                                'ajax vider',
     643                                '',
     644                                _T('album:bouton_vider_explication')
     645                        )
     646                ),
     647                /*'transvaser' => array(
     648                        'positions' => array('footer'),
     649                        'liaison'   => true,
     650                        'autoriser' => (autoriser('transvaser','album',$id_album,'',array('objet'=>$objet,'id_objet'=>$id_objet))) ? true : false,
     651                        'html'      => bouton_action(
     652                                _T('album:bouton_transvaser'),
     653                                generer_action_auteur('transvaser_album',"$id_album/$objet/$id_objet/false/true",self()),
     654                                'ajax transvaser',
     655                                '',
     656                                _T('album:bouton_transvaser_explication'),
     657                                '(function(){ajaxReload("documents");return true;})()'
     658                        )
     659                ),*/
     660                'remplir' => array(
     661                        'positions' => array('footer'),
     662                        'liaison' => '',
     663                        'autoriser' => autoriser('modifier','album',$id_album),
     664                        'html' => '<a href="#" class="bouton remplir" role="button" tabindex="0">'._T('medias:bouton_ajouter_document').'</a>'
     665                ),
     666        );
     667
     668        // liste des boutons affichés en fonction des autorisations et du contexte
     669        $boutons_affiches = array();
     670        foreach (array_keys($boutons) as $k) {
     671                if (
     672                        is_null($position) ? !$position : in_array($position,$boutons[$k]['positions'])
     673                        AND $boutons[$k]['liaison'] ? $boutons[$k]['liaison'] === $liaison : !$boutons[$k]['liaison']
     674                        AND $boutons[$k]['autoriser'] === true
     675                )
     676                        $boutons_affiches[$k] = $boutons[$k]['html'];
     677        }
     678
     679        $data = array_merge($data,$boutons_affiches);
     680        $flux['data'] = $data;
     681
     682        return $flux;
     683}
     684
    562685?>
  • _plugins_/albums/trunk/lang/album_fr.php

    r86637 r88145  
    1313        'bouton_valider_deplacer_documents' => 'Enregistrer les changements',
    1414        'bouton_vider' => 'Vider',
     15        'bouton_transvaser' => 'Transvaser',
     16        'bouton_dissocier_explication' => 'Détacher l’album de l’objet',
     17        'bouton_supprimer_explication' => 'Supprimer définitivement l’album',
     18        'bouton_vider_explication' => 'Vider l’album de ses documents',
     19        'bouton_transvaser_explication' => 'Sortir les documents de l’album et les attacher à l’objet',
    1520
    1621        // C
     
    8186        'label_modele_meta_extension' => 'Extension',
    8287        'label_modele_meta_taille' => 'Taille',
    83         'label_modele_metas' => 'Informations sur le document :',
     88        'label_modele_metas' => 'Informations sur le document',
    8489        'label_modele_nom_liste' => 'un album (liste)',
    8590        'label_modele_nom_vignettes' => 'un album (vignettes)',
     91        'label_modele_pagination' => 'Pagination',
    8692        'label_modele_parcourir_albums' => 'Parcourir les albums',
    8793        'label_modele_placeholder_dimension' => 'Taille en px, sans l’unité',
    8894        'label_modele_recadrer_images' => 'Recadrer les images',
     95        'label_modele_titre' => 'Afficher le titre',
    8996        'label_modele_titre_perso' => 'Titre personnalisé',
    9097        'label_modele_tri_date' => 'Date',
     
    106113        'message_id_album_ajoute' => 'L’album N° @id_album@ a été ajouté.',
    107114        'message_nb_albums_ajoutes' => '@nb@ albums ont été ajoutés.',
    108         'message_supprimer' => 'Supprimer définitivement ?',
     115        'message_supprimer' => 'Supprimer définitivement ? cette action est irréversible.',
    109116        'message_vider' => 'Retirer tous les documents ?',
    110117
  • _plugins_/albums/trunk/paquet.xml

    r86876 r88145  
    3434        <pipeline nom="formulaire_traiter" inclure="albums_pipelines.php" />
    3535        <pipeline nom="compagnon_messages" inclure="albums_pipelines.php" />
     36        <pipeline nom="album_boutons_actions" inclure="albums_pipelines.php" />
    3637
    3738        <necessite nom="medias" compatibilite="[2.7.27;]" />
  • _plugins_/albums/trunk/prive/objets/infos/album.html

    r85496 r88145  
    1515[(#REM)
    1616
    17         Boutons vider | supprimer
     17        Boutons d'actions
    1818
    1919]
    20 [(#AUTORISER{vider,album,#ID_ALBUM}|oui)
    21         [(#BOUTON_ACTION{
    22                 [(#CHEMIN_IMAGE{album-vider-16.png}|balise_img) ]<:album:bouton_vider:>,
    23                 #URL_ACTION_AUTEUR{vider_album,#ID_ALBUM,#SELF},
    24                 'ajax link',
    25                 <:album:message_vider:>,'',
    26                 [(function(){jQuery("#documents-album(#ID_ALBUM)").animateRemove(ajaxReload("documents-album[(#ID_ALBUM)]"));return true;})()]})]
    27 ]
    28 [(#AUTORISER{supprimer,album,#ID_ALBUM}|oui)
    29         [(#BOUTON_ACTION{
    30                 [(#CHEMIN_IMAGE{album-del-16.png}|balise_img) ]<:album:bouton_supprimer:>,
    31                 #URL_ACTION_AUTEUR{supprimer_album,#ID_ALBUM,#URL_ECRIRE{albums}},
    32                 'link',
    33                 <:album:message_supprimer:>})]
    34 ]
     20<BOUCLE_album_boutons_actions(DATA){source table, #PIPELINE{album_boutons_actions,#ARRAY{args,#ARRAY{id_album,#ID_ALBUM,position,boite_infos},data,''}}}>
     21        [<div>(#VALEUR)</div>]
     22</BOUCLE_album_boutons_actions>
    3523
    3624
  • _plugins_/albums/trunk/prive/squelettes/inclure/album.html

    r86823 r88145  
    7373
    7474        [(#REM) FOOTER ]
    75         [(#GET{actionner}|oui)
     75        <B_album_boutons_actions>
    7676        #BOITE_PIED{footer-album act}
    7777
    7878        [(#REM) Boutons d'actions ]
    7979        <div class="boutons-edition">
    80                 [(#GET{contexte}|=={objet}|oui)
    81                         [(#REM) Dissocier ]
    82                         [(#AUTORISER{dissocier,album,#ID_ALBUM,'',#ARRAY{objet,#OBJET,id_objet,#ID_OBJET}}|oui)
    83                         [(#BOUTON_ACTION{
    84                                 <:album:bouton_dissocier:>,
    85                                 #URL_ACTION_AUTEUR{dissocier_album,#ID_ALBUM/#OBJET/#ID_OBJET,#SELF},
    86                                 'ajax dissocier reveal','','',
    87                                 [(function(){jQuery("#album(#ID_ALBUM)").animateRemove();return true;})()]})]
    88                         ]
    89                 ]
    90                 [(#GET{contexte}|=={albumotheque}|oui)
    91                         [(#REM) Supprimer ]
    92                         [(#AUTORISER{supprimer,album,#ID_ALBUM}|oui)
    93                         [(#BOUTON_ACTION{
    94                                 <:album:bouton_supprimer:>,
    95                                 #URL_ACTION_AUTEUR{supprimer_album,#ID_ALBUM,#SELF},
    96                                 'ajax supprimer reveal',
    97                                 <:album:message_supprimer:>,'',
    98                                 [(function(){jQuery("#album(#ID_ALBUM)").animateRemove();return true;})()]})]
    99                         ]
    100                         [(#REM) Vider ]
    101                         [(#AUTORISER{vider,album,#ID_ALBUM}|oui)
    102                         [(#BOUTON_ACTION{
    103                                 <:album:bouton_vider:>,
    104                                 #URL_ACTION_AUTEUR{vider_album,#ID_ALBUM,#SELF},
    105                                 'ajax vider reveal',
    106                                 <:album:message_vider:>})]
    107                         ]
    108                 ]
    109                 [(#AUTORISER{modifier,album,#ID_ALBUM}|oui)
    110                 <a href="#" class="bouton remplir" role="button" tabindex="0"><:medias:bouton_ajouter_document:></a>
    111                 ]
     80                <BOUCLE_album_boutons_actions(DATA){source table, #PIPELINE{album_boutons_actions,#ARRAY{args,#ARRAY{id_album,#ID_ALBUM,objet,#OBJET,id_objet,#ID_OBJET,position,footer},data,''}}}>
     81                        [(#VALEUR)]
     82                </BOUCLE_album_boutons_actions>
    11283        </div><!-- .boutons -->
    11384
     
    11788                [<div class='ajax'>(#FORMULAIRE_JOINDRE_DOCUMENT{new,#ID_ALBUM,album,document})</div>]
    11889        </div><!-- .remplir-album -->
    119         ]
     90        </B_album_boutons_actions>
    12091
    12192#BOITE_FERMER
Note: See TracChangeset for help on using the changeset viewer.