Browse Source

Médiathèque : on remplace l'onglet « logos » par un select qui permet de filtrer par rôle. Ça fait un squelette de moins de surchargé.

master
tcharlss@bravecassine.com 4 years ago
parent
commit
1e15005813
  1. 5
      .gitattributes
  2. 48
      formulaires/filtrer_roles_documents.html
  3. 41
      formulaires/filtrer_roles_documents.php
  4. 2
      paquet.xml
  5. 8
      prive/squelettes/inclure/mediatheque-navigation-roles.html
  6. 85
      prive/squelettes/inclure/mediatheque-navigation.html
  7. 9
      prive/squelettes/inclure/mediatheque-navigation_fonctions.php
  8. 35
      prive/style_prive_plugin_roles_documents.html
  9. 25
      roles_documents_fonctions.php
  10. 16
      roles_documents_pipelines.php

5
.gitattributes vendored

@ -8,6 +8,8 @@ formulaires/editer_logo.html -text
formulaires/editer_logo.php -text
formulaires/editer_roles_document.html -text
formulaires/editer_roles_document.php -text
formulaires/filtrer_roles_documents.html -text
formulaires/filtrer_roles_documents.php -text
formulaires/inc-apercu-logo.html -text
formulaires/inc-editer_liens_actions_roles_documents.html -text
formulaires/inc-selecteur_role.html -text
@ -19,8 +21,7 @@ modeles/document_desc.html -text
prive/squelettes/inclure/editer_roles_document.html -text
prive/squelettes/inclure/mediatheque-choisir.html -text
prive/squelettes/inclure/mediatheque-galerie.html -text
prive/squelettes/inclure/mediatheque-navigation.html -text
prive/squelettes/inclure/mediatheque-navigation_fonctions.php -text
prive/squelettes/inclure/mediatheque-navigation-roles.html -text
prive/style_prive_plugin_roles_documents.html -text
prive/themes/spip/images/media-logo-12.png -text
prive/themes/spip/images/media-logo-16.png -text

48
formulaires/filtrer_roles_documents.html

@ -0,0 +1,48 @@
[(#REM)
Formulaire de filtrage des rôles de documents
]
<div class="formulaire_spip formulaire_#FORM">
[<div class="reponse_formulaire reponse_formulaire_ok none">(#ENV**{message_ok})</div>]
[<div class="reponse_formulaire reponse_formulaire_erreur">(#ENV**{message_erreur})</div>]
<BOUCLE_editable(CONDITION) {si #ENV{editable}}>
<form action="#ENV{action}" method="post"><div>
#ACTION_FORMULAIRE{#ENV{action}}
<div class="editer-groupe">
<div class="editer editer_role">
<label for="roles_documents"><:roles:role_titre:></label>
<select id="roles_documents" name="role" class="">
<option value=""[ (#ENV{role}|non)selected="selected"]>Tous</option>
<BOUCLE_roles_documents(DATA) {source table, #ENV{roles}}>
<option value="#VALEUR"[ (#VALEUR|=={#ENV{role}}|oui)selected="selected"]>[(#VALEUR|role{document})]</option>
</BOUCLE_roles_documents>
</select>
</div>
</div>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class="boutons"><input type='submit' class='btn submit' value='<:bouton_valider:>' /></p>
</div></form>
<script type="text/javascript">
;jQuery(function($) {
$('.formulaire_filtrer_roles_documents .boutons').hide();
$('#roles_documents').on('change', function() {
var role = $(this).val();
options = {
args: {
role: role
}
}
//$('.formulaire_filtrer_roles_documents form').submit();
$(this).ajaxReload(options); // recharge le bloc ajax conteneur
});
});
</script>
</BOUCLE_editable>
</div>

41
formulaires/filtrer_roles_documents.php

@ -0,0 +1,41 @@
<?php
/**
* Gestion du formulaire de filtrage des rôles de documents
*
* @package SPIP\Formulaires
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Chargement du formulaire de filtrage des rôles de documents
*
* @return array
*/
function formulaires_filtrer_roles_documents_charger_dist($redirect='') {
$roles = roles_documents_presents();
$valeurs['roles'] = $roles;
$valeurs['role'] = _request('role');
return $valeurs;
}
/**
* Traiter le post des informations de filtrage des rôles de documents
*
* @return array
*/
function formulaires_filtrer_roles_documents_traiter_dist($redirect='') {
$retours = array();
if (!$redirect) {
$redirect = self();
}
$redirect = parametre_url($redirect, 'role', _request('role'));
$retours['redirect'] = $redirect;
return $retours;
}

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
prefix="roles_documents"
categorie="edition"
version="1.2.25"
version="1.2.26"
etat="dev"
compatibilite="[3.2.0;3.2.*]"
logo="prive/themes/spip/images/roles_documents-48.png"

8
prive/squelettes/inclure/mediatheque-navigation-roles.html

@ -0,0 +1,8 @@
[(#REM)
Galerie de documents : filtrage supplémentaire par rôle.
Squelette inséré via le pipeline récupérer_fond.
]
#FORMULAIRE_FILTRER_ROLES_DOCUMENTS

85
prive/squelettes/inclure/mediatheque-navigation.html

@ -1,85 +0,0 @@
[(#REM)
Surcharge du plugin médias
Différences :
- ajout d'un onglet pour filter les logos
]
#SET{self,#SELF|parametre_url{debut_galerie,''}}
#SET{self,#GET{self}|parametre_url{extension,''}}
#SET{editable,#ENV{editable,oui}|=={non}|non}
<div class='onglets_simple'>
<ul class='medias'>
[<li>(#GET{self}|parametre_url{media|role,''}|lien_ou_expose{<:medias:tous_les_medias:>,#ENV{media,#ENV{role}}|=={''},ajax})</li>]
<BOUCLE_medias(DATA){liste image,audio,video,file}>
<BOUCLE_comptem(DOCUMENTS){id_rubrique ?}{id_article ?}{id_breve ?}{id_document ?}{recherche ?}{statut==.*}{media=#VALEUR} />
[<li class='#VALEUR'>(#GET{self}|parametre_url{media,#VALEUR}|parametre_url{role,''}|lien_ou_expose{#VAL{medias:media_}|concat{#VALEUR}|_T|concat{' (',#TOTAL_BOUCLE,')'},#ENV{media}|=={#VALEUR},ajax})</li>]
<//B_comptem>
</BOUCLE_medias>
<BOUCLE_comptelogos(documents_liens){role=logo} />
[<li class='logo'>(#GET{self}|parametre_url{role,logo}|parametre_url{media,''}|lien_ou_expose{#VAL{roles_documents:media_logos}|_T|concat{' (',#TOTAL_BOUCLE,')'},#ENV{role}|=={logo},ajax})</li>]
<//B_comptelogos>
</ul>
<div class="nettoyeur"></div>
</div>
[(#ENV{id_document}|oui)
<a class='annule_filtre' href='[(#GET{self}|parametre_url{id_document,''})]' title="<:medias:tout_voir|attribut_html:>">[(#CHEMIN_IMAGE{fermer-16.png}|balise_img|inserer_attribut{alt,<:medias:tout_voir:>})]</a>
]
<div class='onglets_simple second clearfix'>
<ul class='statut'>
[<li class='first'>(#GET{self}|parametre_url{statut,''}|lien_ou_expose{<:medias:documents_tous:>,#ENV{statut,.*}|=={.*},ajax})</li>]
[<li>(#GET{self}|parametre_url{statut,publie}|lien_ou_expose{<:medias:documents_publies:>,#ENV{statut}|=={publie},ajax})</li>]
[<li>(#GET{self}|parametre_url{statut,prop|prepa|poubelle}|lien_ou_expose{<:medias:documents_non_publies:>,#ENV{statut}|=={prop|prepa|poubelle},ajax})</li>]
</ul>
<ul class='distant'>
[<li class='first'>(#GET{self}|parametre_url{distant,''}|lien_ou_expose{<:medias:documents_tous:>,#ENV{distant,''}|=={''},ajax})</li>]
[<li>(#GET{self}|parametre_url{distant,'oui'}|lien_ou_expose{<:medias:documents_distants:>,#ENV{distant,''}|=={'oui'},ajax})</li>]
[<li>(#GET{self}|parametre_url{distant,'non'}|lien_ou_expose{<:medias:documents_locaux:>,#ENV{distant,''}|=={'non'},ajax})</li>]
</ul>
<ul class='brises'>
[<li class='first'>(#GET{self}|parametre_url{brise|orphelins,''}|lien_ou_expose{<:medias:documents_tous:>,#ENV{brise,0}|non|et{#ENV{orphelins,0}|non},ajax})</li>]
[<li>(#GET{self}|parametre_url{brise,''}|parametre_url{orphelins,1}|lien_ou_expose{<:medias:documents_orphelins:>,#ENV{orphelins,0}|=={1},ajax})</li>]
[<li>(#GET{self}|parametre_url{brise,1}|parametre_url{orphelins,''}|lien_ou_expose{<:medias:documents_brises:>,#ENV{brise,0}|=={1},ajax})</li>]
</ul>
<ul class='sanstitre'>
[<li class='first'>(#GET{self}|parametre_url{sanstitre,''}|parametre_url{sansvignette,''}|lien_ou_expose{<:medias:documents_tous:>,#ENV{sanstitre,#ENV{sansvignette}}|=={''},ajax})</li>]
[<li>(#GET{self}|parametre_url{sanstitre,'1'}|parametre_url{sansvignette,''}|lien_ou_expose{<:info_sans_titre:>,#ENV{sanstitre,''}|=={'1'},ajax})</li>]
[<li>(#GET{self}|parametre_url{sansvignette,'1'}|parametre_url{sanstitre,''}|lien_ou_expose{<:medias:info_sans_vignette:>,#ENV{sansvignette,''}|=={'1'},ajax})</li>]
</ul>
</div>
<B_types>
<ul class='choix-type'>
<BOUCLE_types(TYPES_DOCUMENTS){par titre}{extension IN #ENV{media,''}|liste_extensions_utilisees}>
<BOUCLE_compte(DOCUMENTS){id_rubrique ?}{id_article ?}{id_breve ?}{id_document ?}{recherche ?}{statut==.*}{extension}{media=#ENV{media}} />
[(#_compte:TOTAL_BOUCLE|oui)[<li>(#GET{self}|parametre_url{extension,#EXTENSION}|lien_ou_expose{#TITRE|concat{' (',#_compte:TOTAL_BOUCLE,')'},#ENV{extension}|=={#EXTENSION},ajax})<span> | </span></li>]]
<//B_compte>
</BOUCLE_types>
</ul>
</B_types>
<div class='nettoyeur'></div>
#FORMULAIRE_RECHERCHE_ECRIRE{#GET{self},ajax}
<INCLURE{fond=#ENV{galerie,prive/squelettes/inclure/mediatheque-galerie},ajax=documents,env} />
<div class='nettoyeur'></div>
[(#GET{editable})
<div class='actions'>
[(#ENV{brise,0}|oui)
[(#URL_ACTION_AUTEUR{verifier_documents_brises,'1',#GET{self}}|lien_ou_expose{<:medias:verifier_documents_brises:>,0,ajax})]
]
[(#ENV{orphelins,0}|oui)
[(#URL_ACTION_AUTEUR{verifier_documents_liens,'*',#GET{self}}|lien_ou_expose{<:medias:verifier_documents_inutilises:>,0,ajax})]
]
[
(#INCLURE{fond=prive/squelettes/inclure/ajouter-documents, env, ajax})
]
</div>]

9
prive/squelettes/inclure/mediatheque-navigation_fonctions.php

@ -1,9 +0,0 @@
<?php
/**
* Fonctions utiles à ce squelette
*
* Plugin Rôles de documents
* (c) 2015-2018
* Licence GNU/GPL
*/
include_spip(_DIR_PLUGIN_MEDIAS . 'prive/squelettes/inclure/mediatheque-navigation_fonctions');

35
prive/style_prive_plugin_roles_documents.html

@ -51,11 +51,36 @@ small[class*=role-logo]:before {
/**
* Mediathèque
*/
/* Onglet logos */
.onglets_simple .medias .logo a,
.onglets_simple .medias .logo strong {
padding-left: 27px;
background: url(#CHEMIN_IMAGE{media-logo-16}) no-repeat 5px center;
.onglets_simple .formulaire_filtrer_roles_documents {
display: inline-block;
margin: 0 0 0 30px;
padding: 0;
border: 0;
}
.onglets_simple .formulaire_filtrer_roles_documents .editer-groupe {
display: inline-block;
padding: 0;
margin: 0;
}
.onglets_simple .formulaire_filtrer_roles_documents .editer {
padding: 0;
}
.onglets_simple .formulaire_filtrer_roles_documents .editer label {
margin: 0 1em 0 0;
float: none;
width: auto;
}
.onglets_simple .formulaire_filtrer_roles_documents .editer select {
width: auto;
}
.onglets_simple .formulaire_filtrer_roles_documents .boutons {
display: inline-block;
margin: 0;
padding: 0;
background: transparent;
}
.onglets_simple .formulaire_filtrer_roles_documents .chosen-container li {
float: none;
}
/**

25
roles_documents_fonctions.php

@ -114,6 +114,31 @@ function roles_documents_presents_sur_objet($objet, $id_objet, $id_document = 0,
return $done[$hash] = $roles;
}
/**
* Lister tous les rôles de documents déclarés, tous objets confondus
*
* @return array
*/
function roles_documents_presents() {
static $roles_documents = null;
if (is_array($roles_documents)) {
return $roles_documents;
}
$roles_documents = array();
if (
$roles_presents = roles_presents('document')
) {
foreach($roles_presents['roles'] as $objet) {
$roles_documents = array_merge($roles_documents, $objet['choix']);
}
$roles_documents = array_unique($roles_documents);
}
return $roles_documents;
}
/**
* Surcharge du critère `logo`
*

16
roles_documents_pipelines.php

@ -313,8 +313,9 @@ function roles_documents_formulaire_traiter($flux) {
/**
* Modifier le résultat du calcul d’un squelette donné.
*
* Formulaire d'ajout de document : ajout du sélecteur de rôle, et rendre les identifiants uniques pour éviter un pb de JS quand le form est présent plusieurs fois sur la page.
*
* - Formulaire d'ajout de document : ajout du sélecteur de rôle, et rendre les identifiants uniques pour éviter un pb de JS quand le form est présent plusieurs fois sur la page.
* - Mediathèque : ajout du filtrage par rôle
*
* @pipeline recuperer_fond
*
* @param array $flux Données du pipeline
@ -365,6 +366,17 @@ function roles_documents_recuperer_fond($flux) {
}
// Médiathèque
if ($flux['args']['fond'] == 'prive/squelettes/inclure/mediatheque-navigation') {
$fond_roles = recuperer_fond('prive/squelettes/inclure/mediatheque-navigation-roles', $flux['args']['contexte']);
// On s'insère après le dernier <ul> de la barre d'onglets secondaires
// Sans parseur, c'est la galère
$cherche = "#<ul\s+class=[\"']sanstitre[\"']>\s*(?:<li[^>]*>(?!.*<li>).*?</li>\s*)+\s*</ul>#i";
$remplace = "$0$fond_roles";
$flux['data']['texte'] = preg_replace($cherche, $remplace, $flux['data']['texte']);
}
return $flux;
}

Loading…
Cancel
Save