Skip to content
Extraits de code Groupes Projets
Valider abf13151 rédigé par marcimat@rezo.net's avatar marcimat@rezo.net
Parcourir les fichiers

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.

parent b9fb75f5
Aucune branche associée trouvée
Étiquettes v2.17.2
Aucune requête de fusion associée trouvée
......@@ -3,6 +3,7 @@ action/acceder_document.php -text
action/ajouter_documents.php -text
action/changer_mode_document.php -text
action/copier_local.php -text
action/desordonner_liens_documents.php -text
action/dissocier_document.php -text
action/editer_document.php -text
action/ordonner_liens_documents.php -text
......
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2016 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
/**
* Gestion de l'action desordonner_document
*
* @package SPIP\Medias\Action
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Désordonner des documents
*
* @param string $arg
* fournit les arguments de la fonction dissocier_document
* sous la forme `$id_objet-$objet-$document-suppr-safe`
*
* - 4eme arg : suppr = true, false sinon
* - 5eme arg : safe = true, false sinon
*
* @return void
*/
function action_desordonner_liens_documents_dist($arg = null) {
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
$arg = explode('-', $arg);
list($id_objet, $objet, $document) = $arg;
if (
$id_objet = intval($id_objet)
and autoriser('desordonnerdocuments', $objet, $id_objet)
) {
desordonner_liens_documents($document, $objet, $id_objet);
} else {
spip_log("Interdit de désordonner les documents sur : $objet $id_objet", 'spip');
}
}
/**
* Désordonner des documents
*
* @param int|string $document
* id_document a désordonner
* I/image pour dissocier les images en mode Image
* I/document pour dissocier les images en mode document
* D/document pour dissocier les documents non image en mode document
* @param string $objet
* objet duquel dissocier
* @param $id_objet
* id_objet duquel dissocier
* @return void
*/
function desordonner_liens_documents($document, $objet, $id_objet) {
include_spip('action/editer_liens');
if ($id_document = intval($document)) {
desordonner_liens_document($id_document, $objet, $id_objet);
} else {
list($image, $mode) = explode('/', $document);
$image = ($image == 'I');
$typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image ? '' : 'NOT');
$obj = 'id_objet=' . intval($id_objet) . ' AND objet=' . sql_quote($objet);
$s = sql_select(
'docs.id_document',
'spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document',
"$obj AND vu='non' AND docs.mode=" . sql_quote($mode) . " AND $typdoc"
);
while ($t = sql_fetch($s)) {
desordonner_liens_document($t['id_document'], $objet, $id_objet);
}
}
}
/**
* Désordonner un document
*
* @param int $id_document
* id_document a désordonner
* @param string $objet
* objet duquel dissocier
* @param $id_objet
* id_objet duquel dissocier
* @return void
*/
function desordonner_liens_document($id_document, $objet, $id_objet) {
objet_qualifier_liens(
array('document' => $id_document),
array($objet => $id_objet),
array('rang_lien' => 0)
);
}
\ No newline at end of file
......@@ -149,7 +149,7 @@ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = fa
* I/image pour dissocier les images en mode Image
* I/document pour dissocier les images en mode document
* D/document pour dissocier les documents non image en mode document
* @param $objet
* @param string $objet
* objet duquel dissocier
* @param $id_objet
* id_objet duquel dissocier
......
......@@ -141,6 +141,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'label_paginer_par' => 'Paginer par :',
'label_parents' => 'Ce document est lié à',
'label_refdoc_joindre' => 'Document numéro',
'lien_tout_desordonner' => 'Réinitialiser l’ordre',
'lien_tout_desordonner_verif' => 'L’ordre définit pour cette liste de documents sera réinitialisé. Êtes-vous sûr ?',
'lien_tout_enlever' => 'Tout enlever',
'logo' => 'Logo',
......
......@@ -77,7 +77,7 @@ Distribue sous licence GPL
[(#TOTAL_BOUCLE|=={1}|et{#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET}}|et{#VU|=={non}})[(#BOUTON_ACTION{<:medias:bouton_enlever_supprimer_document:>,#URL_ACTION_AUTEUR{dissocier_document,#ID_OBJET-#OBJET-#ID_DOCUMENT-suppr-safe,#SELF},ajax,<:medias:bouton_enlever_supprimer_document_confirmation:>,'',[(function(){jQuery("#doc(#ID_DOCUMENT)").animateRemove();return true;})()]})]]
[(#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;})()]})]]
[(#AUTORISER{modifier,document,#ID_DOCUMENT}|oui)
<span class="deplacer-document"><img src='#CHEMIN_IMAGE{deplacer-16.png}' width='16' height='16' alt='<:medias:ordonner_ce_document|attribut_html:>' /></span>
<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>
<a href="#URL_ECRIRE{document_edit,id_document=#ID_DOCUMENT}" target="_blank" class="editbox" tabindex="0" role="button"><:medias:bouton_modifier_document:></a>
]<//B_compte>
[(#PIPELINE{document_desc_actions,#ARRAY{args,#ARRAY{id_document,#ID_DOCUMENT,position,document_desc,objet,#OBJET,id_objet,#ID_OBJET},data,''}})]
......
<paquet
prefix="medias"
categorie="multimedia"
version="2.17.1"
version="2.17.2"
etat="stable"
compatibilite="[3.2.0-dev;]"
logo="prive/themes/spip/images/portfolio-32.png"
......
......@@ -14,11 +14,18 @@
<h3><span class="image_loading"></span><:medias:info_illustrations:></h3>
<div class="liste_items documents" id="illustrations#ENV{id_unique}">
[<p class="pagination">(#PAGINATION{prive})</p>]
<div class="sortable">
<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?}>
#MODELE{document_desc,id_document,id_objet,objet}
</BOUCLE_illustrations>
</div>
[<p class="pagination">(#PAGINATION{prive})</p>]
[(#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:> ?})]]
[(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})
<div class="actions-liste">
[(#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:> ?})]
[(#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:>})]
</div>
]
</div>
#SET{nbdocs,#GET{nbdocs}|plus{#GRAND_TOTAL}}
</B_illustrations>
......@@ -28,11 +35,18 @@
<h3><:medias:info_portfolio:></h3>
<div class="liste_items documents" id="portfolio#ENV{id_unique}">
[<p class="pagination">(#PAGINATION{prive})</p>]
<div class="sortable">
<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?}>
#MODELE{document_desc,id_document,id_objet,objet}
</BOUCLE_portfolio>
</div>
[<p class="pagination">(#PAGINATION{prive})</p>]
[(#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:> ?})]]
[(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})
<div class="actions-liste">
[(#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:> ?})]
[(#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:>})]
</div>
]
</div>
#SET{nbdocs,#GET{nbdocs}|plus{#GRAND_TOTAL}}
</B_portfolio>
......@@ -42,11 +56,18 @@
<h3><:medias:info_documents:></h3>
<div class="liste_items documents" id="documents#ENV{id_unique}">
[<p class="pagination">(#PAGINATION{prive})</p>]
<div class="sortable">
<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?}>
#MODELE{document_desc,id_document,id_objet,objet}
</BOUCLE_documents>
</div>
[<p class="pagination">(#PAGINATION{prive})</p>]
[(#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:> ?})]]
[(#AUTORISER{dissocierdocuments,#OBJET,#ID_OBJET})
<div class="actions-liste">
[(#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:> ?})]
[(#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:>})]
</div>
]
</div>
#SET{nbdocs,#GET{nbdocs}|plus{#GRAND_TOTAL}}
</B_documents>
......@@ -137,7 +158,7 @@ function choix_affichages_documents() {
/* Gestion du tri des listes de documents et de leur enregistrement */
function ordonner_listes_documents() {
if ($.fn.sortable) {
$("#illustrations#ENV{id_unique}, #portfolio#ENV{id_unique}, #documents#ENV{id_unique}").each(function () {
$("#illustrations#ENV{id_unique}, #portfolio#ENV{id_unique}, #documents#ENV{id_unique}").find('> .sortable').each(function () {
// détruire / recréer le sortable à chaque appel ajax
if ($(this).has('.ui-sortable').length) {
$(this).sortable('destroy');
......@@ -203,10 +224,17 @@ function ordonner_listes_documents() {
item.css({backgroundColor: couleur_succes}).animate({backgroundColor: couleur_origine}, 'normal', function(){
item.css({backgroundColor: ''});
});
items.parent().find('.tout_desordonner').show();
}
});
}
});
// bouton "désordonner"
if ($(this).parent().find('.deplacer-document[data-rang!=0]').length) {
$(this).parent().find('.tout_desordonner').show();
} else {
$(this).parent().find('.tout_desordonner').hide();
}
});
}
}
......
......@@ -194,7 +194,8 @@ p.actions {clear:both;}
.portfolios .item .titre > .sanstitre,
.portfolios .item .titre > .sanstitre + .fichier {opacity:0.4;}
.portfolios .tout_supprimer { clear:both; margin-top:.6925em; display:block; }
.portfolios .actions-liste { clear:both; margin-top:.6925em; display:block; }
.portfolios .actions-liste > * {display:inline; }
.portfolios .tout_supprimer span {display:block; text-align:#GET{right};}
.item.vu_oui {background:#f9f9f9;}
......@@ -298,7 +299,7 @@ h3 .affichages {
/* Grille en cases des documents. */
.portfolios .documents_cases {
.portfolios .documents_cases .sortable {
display:flex;
flex-wrap: wrap;
}
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter