Changeset 101836 in spip-zone


Ignore:
Timestamp:
Jan 19, 2017, 4:17:14 PM (3 years ago)
Author:
marcimat@…
Message:

Permettre d'annuler l'ordre enregistré pour les liens sur les documents.

  • une action "desordonner_liens_documents" est ajoutée (un peu sur le même fonctionnement que dissocier_document)
  • une action "Réinitialiser l’ordre" est ajouté en fin de liste (visible si un rang_lien au moins est défini)
  • les actions affectant l'ensemble des documents en fin de liste sont placées dans une div ".actions-liste"
  • les documents déplaçables sont encadrés aussi d'une div (.sortable) essentiellement pour éviter de pouvoir les déplacer au dessus ou au dessous de la pagination ou des actions globales.
Location:
_core_/plugins/medias
Files:
6 edited
1 copied

Legend:

Unmodified
Added
Removed
  • _core_/plugins/medias/action/desordonner_liens_documents.php

    r101800 r101836  
    1212
    1313/**
    14  * Gestion de l'action dissocier_document
     14 * Gestion de l'action desordonner_document
    1515 *
    1616 * @package SPIP\Medias\Action
     
    2323
    2424/**
    25  * Dissocier un document
     25 * Désordonner des documents
    2626 *
    2727 * @param string $arg
     
    3434 * @return void
    3535 */
    36 function action_dissocier_document_dist($arg = null) {
     36function action_desordonner_liens_documents_dist($arg = null) {
    3737        if (is_null($arg)) {
    3838                $securiser_action = charger_fonction('securiser_action', 'inc');
     
    4040        }
    4141
    42         // attention au cas ou id_objet est negatif !
    43         if (strncmp($arg, '-', 1) == 0) {
    44                 $arg = explode('-', substr($arg, 1));
    45                 list($id_objet, $objet, $document) = $arg;
    46                 $id_objet = -$id_objet;
     42        $arg = explode('-', $arg);
     43        list($id_objet, $objet, $document) = $arg;
     44
     45        if (
     46                $id_objet = intval($id_objet)
     47                and autoriser('desordonnerdocuments', $objet, $id_objet)
     48        ) {
     49                desordonner_liens_documents($document, $objet, $id_objet);
    4750        } else {
    48                 $arg = explode('-', $arg);
    49                 list($id_objet, $objet, $document) = $arg;
    50         }
    51 
    52         $suppr = $check = false;
    53         if (count($arg) > 3 and $arg[3] == 'suppr') {
    54                 $suppr = true;
    55         }
    56         if (count($arg) > 4 and $arg[4] == 'safe') {
    57                 $check = true;
    58         }
    59         if ($id_objet = intval($id_objet)
    60                 and (
    61                         ($id_objet < 0 and $id_objet == -$GLOBALS['visiteur_session']['id_auteur'])
    62                         or autoriser('dissocierdocuments', $objet, $id_objet)
    63                 )
    64         ) {
    65                 dissocier_document($document, $objet, $id_objet, $suppr, $check);
    66         } else {
    67                 spip_log("Interdit de modifier $objet $id_objet", 'spip');
     51                spip_log("Interdit de désordonner les documents sur : $objet $id_objet", 'spip');
    6852        }
    6953}
    7054
    7155/**
    72  * Supprimer un lien entre un document et un objet
    73  *
    74  * @param int $id_document
    75  * @param string $objet
    76  * @param int $id_objet
    77  * @param bool $supprime
    78  *   si true, le document est supprime si plus lie a aucun objet
    79  * @param bool $check
    80  *   si true, on verifie les documents references dans le texte de l'objet
    81  *   et on les associe si pas deja fait
    82  * @return bool
    83  */
    84 function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = false, $check = false) {
    85         if (!$id_document = intval($id_document)) {
    86                 return false;
    87         }
    88 
    89         // [TODO] le mettre en paramètre de la fonction ?
    90         $serveur = '';
    91 
    92         // D'abord on ne supprime pas, on dissocie
    93         include_spip('action/editer_liens');
    94         objet_dissocier(array('document' => $id_document), array($objet => $id_objet), array('role' => '*'));
    95 
    96         // Si c'est une vignette, l'eliminer du document auquel elle appartient
    97         // cas tordu peu probable
    98         sql_updateq('spip_documents', array('id_vignette' => 0), 'id_vignette=' . $id_document);
    99 
    100         // verifier son statut apres une suppression de lien
    101         include_spip('action/editer_document');
    102         document_instituer($id_document);
    103 
    104         // Invalider les caches
    105         include_spip('inc/invalideur');
    106         suivre_invalideur("id='id_document/$id_document'");
    107 
    108         pipeline(
    109                 'post_edition',
    110                 array(
    111                         'args' => array(
    112                                 'operation' => 'delier_document', // compat v<=2
    113                                 'action' => 'delier_document',
    114                                 'table' => 'spip_documents',
    115                                 'id_objet' => $id_document,
    116                                 'objet' => $objet,
    117                                 'id' => $id_objet
    118                         ),
    119                         'data' => null
    120                 )
    121         );
    122 
    123         if ($check) {
    124                 // si demande, on verifie que ses documents vus sont bien lies !
    125                 $spip_table_objet = table_objet_sql($objet);
    126                 $table_objet = table_objet($objet);
    127                 $id_table_objet = id_table_objet($objet, $serveur);
    128                 $champs = sql_fetsel('*', $spip_table_objet, addslashes($id_table_objet) . '=' . intval($id_objet));
    129 
    130                 $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
    131                 $marquer_doublons_doc($champs, $id_objet, $objet, $id_table_objet, $table_objet, $spip_table_objet, '', $serveur);
    132         }
    133 
    134         // On supprime ensuite s'il est orphelin
    135         // et si demande
    136         // ici on ne bloque pas la suppression d'un document rattache a un autre
    137         if ($supprime and !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=" . $id_document)) {
    138                 $supprimer_document = charger_fonction('supprimer_document', 'action');
    139 
    140                 return $supprimer_document($id_document);
    141         }
    142 }
    143 
    144 /**
    145  * Dissocier un ou des documents
     56 * Désordonner des documents
    14657 *
    14758 * @param int|string $document
    148  *   id_document a dissocier
     59 *   id_document a désordonner
    14960 *   I/image pour dissocier les images en mode Image
    15061 *   I/document pour dissocier les images en mode document
    15162 *   D/document pour dissocier les documents non image en mode document
    152  * @param $objet
     63 * @param string $objet
    15364 *   objet duquel dissocier
    15465 * @param  $id_objet
    15566 *   id_objet duquel dissocier
    156  * @param bool $supprime
    157  *   supprimer les documents orphelins apres dissociation
    158  * @param bool $check
    159  *   verifier le texte des documents et relier les documents references dans l'objet
    16067 * @return void
    16168 */
    162 function dissocier_document($document, $objet, $id_objet, $supprime = false, $check = false) {
     69function desordonner_liens_documents($document, $objet, $id_objet) {
     70        include_spip('action/editer_liens');
    16371        if ($id_document = intval($document)) {
    164                 supprimer_lien_document($id_document, $objet, $id_objet, $supprime, $check);
     72                desordonner_liens_document($id_document, $objet, $id_objet);
    16573        } else {
    16674                list($image, $mode) = explode('/', $document);
     
    17684                );
    17785                while ($t = sql_fetch($s)) {
    178                         supprimer_lien_document($t['id_document'], $objet, $id_objet, $supprime, $check);
     86                        desordonner_liens_document($t['id_document'], $objet, $id_objet);
    17987                }
    18088        }
     89}
    18190
    182         // pas tres generique ca ...
    183         if ($objet == 'rubrique') {
    184                 include_spip('inc/rubriques');
    185                 depublier_branche_rubrique_if($id_objet);
    186         }
     91/**
     92 * Désordonner un document
     93 *
     94 * @param int $id_document
     95 *   id_document a désordonner
     96 * @param string $objet
     97 *   objet duquel dissocier
     98 * @param  $id_objet
     99 *   id_objet duquel dissocier
     100 * @return void
     101 */
     102function desordonner_liens_document($id_document, $objet, $id_objet) {
     103        objet_qualifier_liens(
     104                array('document' => $id_document),
     105                array($objet => $id_objet),
     106                array('rang_lien' => 0)
     107        );
    187108}
  • _core_/plugins/medias/action/dissocier_document.php

    r100320 r101836  
    150150 *   I/document pour dissocier les images en mode document
    151151 *   D/document pour dissocier les documents non image en mode document
    152  * @param $objet
     152 * @param string $objet
    153153 *   objet duquel dissocier
    154154 * @param  $id_objet
  • _core_/plugins/medias/lang/medias_fr.php

    r101716 r101836  
    142142        'label_parents' => 'Ce document est lié à',
    143143        'label_refdoc_joindre' => 'Document numéro',
     144        'lien_tout_desordonner' => 'Réinitialiser l’ordre',
     145        'lien_tout_desordonner_verif' => 'L’ordre définit pour cette liste de documents sera réinitialisé. Êtes-vous sûr ?',
    144146        'lien_tout_enlever' => 'Tout enlever',
    145147        'logo' => 'Logo',
  • _core_/plugins/medias/modeles/document_desc.html

    r101716 r101836  
    7878                [(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})[(#BOUTON_ACTION{<:medias:bouton_enlever_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT--safe,#SELF},ajax,'','',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]]
    7979                [(#AUTORISER{modifier,document,#ID_DOCUMENT}|oui)
    80                         <span class="deplacer-document"><img src='#CHEMIN_IMAGE{deplacer-16.png}' width='16' height='16' alt='<:medias:ordonner_ce_document|attribut_html:>' /></span>
     80                        <span class="deplacer-document" data-rang="#RANG_LIEN"><img src='#CHEMIN_IMAGE{deplacer-16.png}' width='16' height='16' alt='<:medias:ordonner_ce_document|attribut_html:>' title='<:medias:ordonner_ce_document|attribut_html:>' /></span>
    8181                        <a href="#URL_ECRIRE{document_edit,id_document=#ID_DOCUMENT}" target="_blank" class="editbox" tabindex="0" role="button"><:medias:bouton_modifier_document:></a>
    8282                ]<//B_compte>
  • _core_/plugins/medias/paquet.xml

    r101806 r101836  
    22        prefix="medias"
    33        categorie="multimedia"
    4         version="2.17.1"
     4        version="2.17.2"
    55        etat="stable"
    66        compatibilite="[3.2.0-dev;]"
  • _core_/plugins/medias/prive/squelettes/inclure/portfolio-documents.html

    r101807 r101836  
    1515<div class="liste_items documents" id="illustrations#ENV{id_unique}">
    1616[<p class="pagination">(#PAGINATION{prive})</p>]
     17<div class="sortable">
    1718<BOUCLE_illustrations(DOCUMENTS documents_liens types_documents){inclus=image}{mode=image}{id_objet}{objet}{par rang_lien, num titre, date,id_document}{pagination 50}{statut?}>
    1819        #MODELE{document_desc,id_document,id_objet,objet}
    1920</BOUCLE_illustrations>
    20 [<p class="pagination">(#PAGINATION{prive})</p>]
    21 [(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})[(#BOUTON_ACTION{<:medias:lien_tout_enlever:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-I/image,#SELF|ancre_url{illustrations}},'ajax tout_supprimer',<:ecrire:lien_tout_supprimer:> ?})]]
     21</div>
     22[<p class="pagination">(#PAGINATION{prive})</p>]
     23[(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})
     24        <div class="actions-liste">
     25        [(#BOUTON_ACTION{<:medias:lien_tout_enlever:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-I/image,#SELF|ancre_url{illustrations}},'ajax tout_supprimer',<:ecrire:lien_tout_supprimer:> ?})]
     26        [(#BOUTON_ACTION{<:medias:lien_tout_desordonner:>,#URL_ACTION_AUTEUR{desordonner_liens_documents,#ID_OBJET-#OBJET-I/image,#SELF|ancre_url{illustrations}},'ajax tout_desordonner',<:medias:lien_tout_desordonner_verif:>})]
     27        </div>
     28]
    2229</div>
    2330#SET{nbdocs,#GET{nbdocs}|plus{#GRAND_TOTAL}}
     
    2936<div class="liste_items documents" id="portfolio#ENV{id_unique}">
    3037[<p class="pagination">(#PAGINATION{prive})</p>]
     38<div class="sortable">
    3139<BOUCLE_portfolio(DOCUMENTS documents_liens types_documents){inclus=image}{mode=document}{id_objet}{objet}{par rang_lien, num titre, date,id_document}{pagination 50}{statut?}>
    3240        #MODELE{document_desc,id_document,id_objet,objet}
    3341</BOUCLE_portfolio>
    34 [<p class="pagination">(#PAGINATION{prive})</p>]
    35 [(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})[(#BOUTON_ACTION{<:medias:lien_tout_enlever:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-I/document,#SELF|ancre_url{portfolio}},'ajax tout_supprimer',<:ecrire:lien_tout_supprimer:> ?})]]
     42</div>
     43[<p class="pagination">(#PAGINATION{prive})</p>]
     44[(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})
     45        <div class="actions-liste">
     46                [(#BOUTON_ACTION{<:medias:lien_tout_enlever:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-I/document,#SELF|ancre_url{portfolio}},'ajax tout_supprimer',<:ecrire:lien_tout_supprimer:> ?})]
     47                [(#BOUTON_ACTION{<:medias:lien_tout_desordonner:>,#URL_ACTION_AUTEUR{desordonner_liens_documents,#ID_OBJET-#OBJET-I/document,#SELF|ancre_url{illustrations}},'ajax tout_desordonner',<:medias:lien_tout_desordonner_verif:>})]
     48        </div>
     49]
    3650</div>
    3751#SET{nbdocs,#GET{nbdocs}|plus{#GRAND_TOTAL}}
     
    4357<div class="liste_items documents" id="documents#ENV{id_unique}">
    4458[<p class="pagination">(#PAGINATION{prive})</p>]
     59<div class="sortable">
    4560<BOUCLE_documents(DOCUMENTS documents_liens types_documents){inclus!=image}{mode!=vignette}{id_objet}{objet}{par rang_lien, num titre, date,id_document}{pagination 50}{statut?}>
    4661        #MODELE{document_desc,id_document,id_objet,objet}
    4762</BOUCLE_documents>
    48 [<p class="pagination">(#PAGINATION{prive})</p>]
    49 [(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})[(#BOUTON_ACTION{<:medias:lien_tout_enlever:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-D/document,#SELF|ancre_url{documents}},'ajax tout_supprimer',<:ecrire:lien_tout_supprimer:> ?})]]
     63</div>
     64[<p class="pagination">(#PAGINATION{prive})</p>]
     65[(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})
     66        <div class="actions-liste">
     67                [(#BOUTON_ACTION{<:medias:lien_tout_enlever:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-D/document,#SELF|ancre_url{documents}},'ajax tout_supprimer',<:ecrire:lien_tout_supprimer:> ?})]
     68                [(#BOUTON_ACTION{<:medias:lien_tout_desordonner:>,#URL_ACTION_AUTEUR{desordonner_liens_documents,#ID_OBJET-#OBJET-D/document,#SELF|ancre_url{documents}},'ajax tout_desordonner',<:medias:lien_tout_desordonner_verif:>})]
     69        </div>
     70]
    5071</div>
    5172#SET{nbdocs,#GET{nbdocs}|plus{#GRAND_TOTAL}}
     
    138159function ordonner_listes_documents() {
    139160        if ($.fn.sortable) {
    140                 $("#illustrations#ENV{id_unique}, #portfolio#ENV{id_unique}, #documents#ENV{id_unique}").each(function () {
     161                $("#illustrations#ENV{id_unique}, #portfolio#ENV{id_unique}, #documents#ENV{id_unique}").find('> .sortable').each(function () {
    141162                        // détruire / recréer le sortable à chaque appel ajax
    142163                        if ($(this).has('.ui-sortable').length) {
     
    204225                                                                item.css({backgroundColor: ''});
    205226                                                        });
     227                                                        items.parent().find('.tout_desordonner').show();
    206228                                                }
    207229                                        });
    208230                                }
    209231                        });
     232                        // bouton "désordonner"
     233                        if ($(this).parent().find('.deplacer-document[data-rang!=0]').length) {
     234                                $(this).parent().find('.tout_desordonner').show();
     235                        } else {
     236                                $(this).parent().find('.tout_desordonner').hide();
     237                        }
    210238                });
    211239        }
  • _core_/plugins/medias/prive/style_prive_plugin_medias.html

    r101806 r101836  
    195195.portfolios .item .titre > .sanstitre + .fichier {opacity:0.4;}
    196196
    197 .portfolios .tout_supprimer { clear:both; margin-top:.6925em; display:block; }
     197.portfolios .actions-liste { clear:both; margin-top:.6925em; display:block; }
     198.portfolios .actions-liste > * {display:inline; }
    198199.portfolios .tout_supprimer span {display:block; text-align:#GET{right};}
    199200
     
    299300
    300301/* Grille en cases des documents. */
    301 .portfolios .documents_cases {
     302.portfolios .documents_cases .sortable {
    302303        display:flex;
    303304        flex-wrap: wrap;
Note: See TracChangeset for help on using the changeset viewer.