Changeset 93676 in spip-zone for _plugins_/grappes


Ignore:
Timestamp:
Dec 14, 2015, 9:06:50 AM (3 years ago)
Author:
arnaud.berard@…
Message:
  • ajout d'un identifiant textuel unique (Obligatoire) pour les grappes, comme pour les menus du plugin menu, plus simple pour l'utilisation dans les squelettes
  • le titre devient segondaire , il sert a un niveau de titre spécifique dans les squelettes ou titrage de la noisette incluse
  • ajout de la gestion des rangs
  • ajout du drag & drop pour le classement des objets au sein d'une grappe

l'update du shema est normalement gérée, si la version précédente de grappes est déjà installée, mais les grappes déjà créées se retouve sans identifiant_textuel, l'opération reste a faire manuellement et à reporter dans les squelettes.

Location:
_plugins_/grappes/trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/grappes/trunk/action/lier_objets.php

    r77004 r93676  
    3737
    3838function lier_objets($source,$id_source,$cible,$id_cible){
    39         // si la source n'est pas une grappe un inverse le sens de la liaison pour matcher l'autorisation grappe_associer
    40         if ($source != 'grappe')
    41                 objet_associer(array($cible=>$id_cible),array($source=>$id_source));
    42         else
    43                 objet_associer(array($source=>$id_source),array($cible=>$id_cible));
     39        //if ($liens = sql_allfetsel('objet, id_objet', 'spip_grappes_liens', 'id_grappe=' . intval($id_source)." AND objet = '$cible'"))
     40        //    $rang=count($liens)+1;
     41        //else
     42        //    $rang =1;
     43
     44        // si la source n'est pas une grappe on inverse le sens de la liaison pour matcher l'autorisation grappe_associer
     45        if ($source != 'grappe'){
     46                $rang = definir_rang($id_cible,$source);
     47                objet_associer(array($cible=>$id_cible), array($source=>$id_source), array('rang'=>$rang) );
     48        }else{
     49                $rang = definir_rang($id_source,$cible);
     50                objet_associer(array($source=>$id_source), array($cible=>$id_cible), array('rang'=>$rang) );     
     51        }
    4452}
    4553
     
    4856}
    4957
     58function definir_rang($id_source, $cible){
     59        if ($liens = sql_allfetsel('objet, id_objet', 'spip_grappes_liens', 'id_grappe=' . intval($id_source)." AND objet = '$cible'"))
     60            $rang=count($liens)+1;
     61        else
     62            $rang =1;
     63           
     64        return $rang;
     65}
     66
     67
    5068?>
  • _plugins_/grappes/trunk/base/grappes.php

    r91007 r93676  
    5555                        "id_grappe" => "bigint(21) NOT NULL",
    5656                        "id_admin" => "bigint(21) NOT NULL DEFAULT '0'",
     57                        "identifiant" => "varchar(255) default '' not null",
    5758                        "titre" => "varchar(255) NOT NULL DEFAULT ''",
    5859                        "descriptif" => "text NOT NULL DEFAULT ''",
     
    7374                'url_edit' => 'grappe_edit',
    7475                'editable' => 'oui',
    75                 'champs_editables' => array('titre','descriptif','liaisons','acces','type'),
    76                 'champs_versionnes' => array('titre','descriptif','liaisons','acces','type','id_admin','jointure_auteurs','jointure_articles','jointure_rubriques'),
     76                'champs_editables' => array('identifiant','titre','descriptif','liaisons','acces','type'),
     77                'champs_versionnes' => array('titre','descriptif'),
    7778                'rechercher_champs' => array(
    7879                        'titre' => 8,
  • _plugins_/grappes/trunk/formulaires/editer_grappe.html

    r91278 r93676  
    77                parametre : url d'action ]
    88                #ACTION_FORMULAIRE{#ENV{action}}
    9           <input type='hidden' name='id_grappe' value='#ENV{id_grappe}' />
    10           <ul class='editer-groupe'>
     9                <input type='hidden' name='id_grappe' value='#ENV{id_grappe}' />
     10                <ul class='editer-groupe'>
     11            <li class='editer_identifiant obligatoire[ (#ENV**{erreurs}|table_valeur{identifiant}|oui)erreur] editer_type_input'>
     12                                <label for='identifiant'>[(#ENV{id_grappe}|intval|?{<:grappes:info_changer_identifiant_grappe:>,<:grappes:info_identifiant_grappe:>})]</label>[
     13                                <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{identifiant})</span>
     14                                ]<input type='text' class='text' name='identifiant' id='identifiant' value='[(#ENV**{identifiant,#VAL{grappes:identifiant_nouvelle_grappe}|_T|filtrer_entites})]'
     15                                [(#ENV{identifiant,''}|?{'',' '})onfocus="if(!antifocus){this.value='';antifocus=true;}"]/>
     16            </li>
    1117            <li class='editer editer_titre obligatoire[ (#ENV**{erreurs}|table_valeur{titre}|oui)erreur] editer_type_input'>
    1218                                <label for='titre'>[(#ENV{id_grappe}|intval|?{<:grappes:info_changer_nom_grappe:>,<:grappes:info_nom_grappe:>})]</label>[
  • _plugins_/grappes/trunk/formulaires/editer_grappe.php

    r92336 r93676  
    4040function formulaires_editer_grappe_verifier_dist($id_grappe='new',$retour='', $config_fonc='grappes_edit_config', $row=array(), $hidden=''){
    4141        // le id 0 est voulu, on ne souhaite pas controler le contenu des champs qui postent un array !
    42         return formulaires_editer_objet_verifier('grappe',0,array('titre'));
     42        return formulaires_editer_objet_verifier('grappe',0,array('identifiant'));
    4343}
    4444
  • _plugins_/grappes/trunk/grappes_administrations.php

    r91008 r93676  
    3232        $maj['0.2.3']  = array(array('sql_updateq',"spip_grappes_liens",array('objet'=>'site'),"objet='syndic'"));
    3333        $maj['0.2.4']  = array(array('sql_alter',"TABLE spip_grappes ADD date datetime NOT NULL DEFAULT '0000-00-00 00:00:00'"));
    34 
     34    $maj['0.2.5']  = array(array('maj_tables', 'spip_grappes'));
     35       
    3536        include_spip('base/upgrade');
    3637        maj_plugin($nom_meta_base_version, $version_cible, $maj);
     
    4445 * - spip_grappes_liens
    4546 *
    46  * On supprime les révisions de grappes si besoin
     47 * On supprime les revisions de grappes si besoin
    4748 *
    4849 * Supprime la meta d'installation
  • _plugins_/grappes/trunk/grappes_pipelines.php

    r77026 r93676  
    3131        return $flux;
    3232}
     33
     34
     35/**
     36 * Pipeline jqueryui_forcer pour demander au plugin l'insertion des scripts pour .sortable()
     37 *
     38 * @param array $plugins
     39 * @return array
     40 */
     41function grappes_jqueryui_forcer($plugins){
     42    if(test_espace_prive()){ // On envoie que si on est dans l'espace prive
     43                $plugins[] = "jquery.ui.core";
     44                $plugins[] = "jquery.ui.widget";
     45                $plugins[] = "jquery.ui.mouse";
     46                $plugins[] = "jquery.ui.sortable";
     47                $plugins[] = "jquery.ui.droppable";
     48                $plugins[] = "jquery.ui.draggable";
     49    }
     50        return $plugins;
     51}
     52
    3353
    3454/**
  • _plugins_/grappes/trunk/lang/grappes_fr.php

    r84618 r93676  
    2727        'icone_supprimer_grappe' => 'Supprimer cette grappe',
    2828        'icone_voir_toutes_grappes' => 'Voir toutes les grappes',
     29        'identifiant_nouvelle_grappe'=>'Identifiant textuel unique pour la grappe',
    2930        'info_1_grappe' => '1 grappe',
    3031        'info_aucune_grappe' => 'Aucune grappe',
    31         'info_changer_nom_grappe' => 'Changer le nom de la grappe',
     32        'info_changer_identifiant_grappe'=>'Changer l\'identifiant de la grappe',
     33        'info_changer_nom_grappe' => 'Changer le titre de la grappe',
    3234        'info_creation_grappes' => 'Créer ou modifier des grappes d’éléments',
    3335        'info_grappes_association' => 'Quels objets peut on lier à la grappe ?',
    3436        'info_grappes_miennes' => 'Mes grappes',
    3537        'info_grappes_toutes' => 'Toutes les grappes',
     38        'info_identifiant_grappe'=>'Identifiant textuel',
    3639        'info_nb_grappes' => '@nb@ grappes',
    37         'info_nom_grappe' => 'Nom de la grappe',
     40        'info_nom_grappe' => 'Titre de la grappe',
    3841        'info_qui_peut_lier' => 'Qui peut lier les objets à la grappe ?',
    3942        'info_rechercher' => 'Chercher',
  • _plugins_/grappes/trunk/paquet.xml

    r93557 r93676  
    66        compatibilite="[3.0.0;3.1.*]"
    77        logo="prive/themes/spip/images/grappe-32.png"
    8         schema="0.2.4"
     8        schema="0.2.5"
    99        documentation="http://contrib.spip.net/4282"
    1010>
     
    1515        <auteur>Matthieu Marcillaud</auteur>
    1616        <auteur>b_b</auteur>
     17        <auteur>Arnaud B. (Mist. GraphX)</auteur>
    1718
    1819        <pipeline nom="declarer_tables_interfaces" inclure="base/grappes.php" />
     
    2526        <pipeline nom="grappes_objets_lies" inclure="grappes_pipelines.php" />
    2627
     28        <pipeline nom="jqueryui_plugins" inclure="grappes_pipelines.php" action="jqueryui_forcer" />
     29       
    2730        <necessite nom="SelecteurGenerique" compatibilite="[0.8.3;[" />
    2831
  • _plugins_/grappes/trunk/prive/objets/infos/grappe.html

    r77001 r93676  
    22<div class='infos'>
    33<div class='numero'><:grappes:titre_grappe:> <:numero:><p>#ID_GRAPPE</p></div>
    4 
     4<p><b><:grappes:info_identifiant_grappe:> :</b> #IDENTIFIANT</p>
    55[(#AUTORISER{modifier,grappe,#ID_GRAPPE}|oui)
    66        [(#URL_ACTION_AUTEUR{supprimer_grappe,-#ID_GRAPPE,#URL_ECRIRE{grappes}}|icone_horizontale{<:grappes:icone_supprimer_grappe:>,grappe,del})]
  • _plugins_/grappes/trunk/prive/objets/liste/grappes-articles_lies.html

    r78040 r93676  
    33#ANCRE_PAGINATION
    44<div class="liste-objets liste-objets-lies articles">
    5 <table class='spip liste'>
    6         [<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{info_1_article,info_nb_articles}})</strong></caption>]
    7         <tbody>
    8         <BOUCLE_liste(ARTICLES){id_article IN #GET{selection}}{pagination 10}{recherche ?}{statut?}{tout}>
    9                 <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
     5<table class="spip liste" id="sort-articles">
     6        [<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{info_1_article,info_nb_articles}})</strong></caption>]
     7        <tbody>
     8        <BOUCLE_liste(ARTICLES spip_grappes_liens){par rang}{id_grappe ?}{pagination 10}{recherche ?}{statut?}{tout}>
     9                <tr id="#ID_ARTICLE" class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
    1010                        <td class='statut'>[(#STATUT|puce_statut{article,#ID_ARTICLE,#ID_RUBRIQUE})]</td>
     11                        <td><BOUCLE_affRang(spip_grappes_liens){objet=article}{id_objet=#ID_ARTICLE}{id_grappe}>#RANG</BOUCLE_affRang></td>
    1112                        <td class='titre principale'>#TITRE</td>
    1213                        <td class='id'><a href="[(#ID_ARTICLE|generer_url_entite{article})]"><:grappes:voir:></a></td>
     
    2223<div class="liste-objets liste-objets-lies articles caption-wrap"><strong class="caption"><:info_aucun_article:></strong></div>
    2324<//B_liste>
     25<script>
     26$(function(){
     27    $("#sort-articles").sortable({
     28        items:"tr",
     29        cursor:"move"
     30    });
     31    $("#sort-articles").disableSelection();
     32    $("#sort-articles").bind("sortupdate", function(event, ui){
     33        var ordre = $(this).sortable('toArray').toString();
     34        var request = $.ajax({
     35            type: "POST",
     36            url: "?action=trier_objets&id_grappe=#ENV{id_grappe}&objet=article&sort="+ordre
     37        });
     38        request.done(function() {
     39            $('.formulaire_lier_objets').ajaxReload();
     40        });       
     41    });
     42});
     43</script>
  • _plugins_/grappes/trunk/prive/objets/liste/grappes-auteurs_lies.html

    r78040 r93676  
    33#ANCRE_PAGINATION
    44<div class="liste-objets liste-objets-lies auteurs">
    5 <table class='spip liste'>
     5<table class='spip liste' id="sort-auteurs">
    66        [<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{info_1_auteur,info_nb_auteurs}})</strong></caption>]
    77        <tbody>
    8         <BOUCLE_liste(AUTEURS){id_auteur IN #GET{selection}}{pagination 10}{recherche ?}{statut?}{tout}>
    9                 <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
     8        <BOUCLE_liste(AUTEURS spip_grappes_liens){par spip_grappes_liens.rang}{id_auteur IN #GET{selection}}{pagination 10}{recherche ?}{statut ?}{tout}>
     9                <tr id="#ID_AUTEUR" class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
    1010                        <td class='statut'>[(#STATUT|puce_statut{auteur})]</td>
     11                        <td><BOUCLE_affRang(spip_grappes_liens){objet=auteur}{id_objet=#ID_AUTEUR}{id_grappe}>#RANG</BOUCLE_affRang></td>
    1112                        <td class='nom'>#NOM[ <small>((#LOGIN))</small>]</td>
    1213                        <td class='id'><a href="[(#ID_AUTEUR|generer_url_entite{auteur})]"><:grappes:voir:></a></td>
     
    2223<div class="liste-objets liste-objets-lies auteurs caption-wrap"><strong class="caption"><:info_aucun_auteur:></strong></div>
    2324<//B_liste>
     25<script>
     26$(function(){
     27    $("#sort-auteurs").sortable({
     28        items:"tr",
     29        cursor:"move"
     30    });
     31    $("#sort-auteurs").disableSelection();
     32    $("#sort-auteurs").bind("sortupdate", function(event, ui){
     33        var ordre = $(this).sortable('toArray').toString();
     34        var request = $.ajax({
     35            type: "POST",
     36            url: "?action=trier_objets&id_grappe=#ENV{id_grappe}&objet=auteur&sort="+ordre
     37        });
     38        request.done(function() {
     39            $('.formulaire_lier_objets').ajaxReload();
     40        });       
     41    });
     42});
     43</script>
  • _plugins_/grappes/trunk/prive/objets/liste/grappes-documents_lies.html

    r78040 r93676  
    33#ANCRE_PAGINATION
    44<div class="liste-objets liste-objets-lies documents">
    5 <table class='spip liste'>
    6         [<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{medias:un_document,medias:des_documents}})</strong></caption>]
    7         <tbody>
    8         <BOUCLE_liste(DOCUMENTS){id_document IN #GET{selection}}{pagination 10}{recherche ?}{statut?}{tout}>
    9                 <tr class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
    10                         <td class='picto'>[(#CHEMIN_IMAGE{document-16.png}|balise_img)]</td>
    11                         <td class='titre principale'>[(#LOGO_DOCUMENT|image_reduire{20,26})][(#TITRE|sinon{[(#FICHIER|basename)]})]</td>
    12                         <td class='id'><a href="[(#ID_DOCUMENT|generer_url_entite{document})]"><:grappes:voir:></a></td>
    13                         [(#ENV{editable})
    14                         <td class='action'>[(#BOUTON_ACTION{<:grappes:delier:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})],#URL_ACTION_AUTEUR{lier_objets,delier/grappe/#ID_GRAPPE/document/#ID_DOCUMENT,#SELF},ajax})]</td>
    15                 ]</tr>
    16         </BOUCLE_liste>
    17         </tbody>
     5<table class='spip liste' id="sort-documents">
     6    [<caption><strong class="caption">(#ENV*{titre,#GRAND_TOTAL|singulier_ou_pluriel{medias:un_document,medias:des_documents}})</strong></caption>]
     7    <tbody>
     8    <BOUCLE_liste(DOCUMENTS spip_grappes_liens){par spip_grappes_liens.rang}{id_document IN #GET{selection}}{pagination 10}{recherche ?}{statut?}{tout}>
     9            <tr id="#ID_DOCUMENT" class="[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]">
     10                    <td class='picto'>[(#CHEMIN_IMAGE{document-16.png}|balise_img)]</td>
     11                    <td><BOUCLE_affRang(spip_grappes_liens){objet=document}{id_objet=#ID_DOCUMENT}{id_grappe}>#RANG</BOUCLE_affRang></td>
     12                    <td class='titre principale'>[(#LOGO_DOCUMENT|image_reduire{20,26})][(#TITRE|sinon{[(#FICHIER|basename)]})]</td>
     13                    <td class='id'><a href="[(#ID_DOCUMENT|generer_url_entite{document})]"><:grappes:voir:></a></td>
     14            [(#ENV{editable})
     15                    <td class='action'>[(#BOUTON_ACTION{<:grappes:delier:> [(#CHEMIN_IMAGE{supprimer-12.png}|balise_img{'X'})],#URL_ACTION_AUTEUR{lier_objets,delier/grappe/#ID_GRAPPE/document/#ID_DOCUMENT,#SELF},ajax})]</td>
     16            ]</tr>
     17    </BOUCLE_liste>
     18    </tbody>
    1819</table>
    1920[<p class="pagination">(#PAGINATION{prive})</p>]
     
    2223<div class="liste-objets liste-objets-lies documents caption-wrap"><strong class="caption"><:medias:aucun_document:></strong></div>
    2324<//B_liste>
     25   
     26 
     27<script>
     28$(function() {
     29    $("#sort-documents").sortable({
     30        items:"tr",
     31        cursor:"move"
     32    });
     33    $("#sort-documents").disableSelection();
     34    $("#sort-documents").bind("sortupdate", function(event, ui){
     35        var ordre = $(this).sortable('toArray').toString();
     36        var request = $.ajax({
     37            type: "POST",
     38            url: "?action=trier_objets&id_grappe=#ENV{id_grappe}&objet=document&sort="+ordre
     39        });
     40        request.done(function() {
     41            $('.formulaire_lier_objets').ajaxReload();
     42        });       
     43    });
     44});
     45</script>
  • _plugins_/grappes/trunk/prive/objets/liste/grappes.html

    r66878 r93676  
    11[(#SET{defaut_tri,#ARRAY{
    2         titre,1,
     2        titre,1,
     3        identifiant,1,
    34        date,-1,
    45        id_grappe,1,
     
    1213                <tr class='first_row'>
    1314                        <th class='picto' scope='col'></th>
     15                        <th class="identifiant" scope="col">[(#TRI{identifiant,<:grappes:info_identifiant_grappe:>,ajax})]</th>
    1416                        <th class='titre' scope='col'>[(#TRI{titre,<:grappes:info_nom_grappe:>,ajax})]</th>
    1517                        <th class='date' scope='col'>[(#TRI{date,<:date:>,ajax})]</th>
     
    2123                <tr class='[(#COMPTEUR_BOUCLE|alterner{row_odd,row_even})]'>
    2224                        <td class='picto'>[(#CHEMIN_IMAGE{grappe-16.png}|balise_img)]</td>
    23                         <td class='titre principale'>[(#LOGO_GRAPPE|image_reduire{20,26})]<a href="[(#ID_GRAPPE|generer_url_entite{grappe})]" title="<:info_numero_abbreviation|attribut_html:> #ID_GRAPPE">[(#RANG). ]#TITRE</a></td>
     25                        <td class="identifiant principale"><a href="[(#ID_GRAPPE|generer_url_entite{grappe})]">#IDENTIFIANT</a></td>
     26                        <td class='titre principale'>[(#LOGO_GRAPPE|image_reduire{20,26})]<a href="[(#ID_GRAPPE|generer_url_entite{grappe})]">[(#RANG). ]#TITRE</a></td>
    2427                        <td class='date secondaire'>[(#DATE|affdate_jourcourt)]</td>
    2528                        <td class='id'>[(#AUTORISER{modifier,grappe,#ID_GRAPPE}|?{
Note: See TracChangeset for help on using the changeset viewer.