Changeset 56968 in spip-zone


Ignore:
Timestamp:
Jan 12, 2012, 12:44:18 PM (8 years ago)
Author:
kent1@…
Message:

Report de :

-* http://zone.spip.org/trac/spip-zone/changeset/51699/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/52694/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/52869/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/53237/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/53831/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/54420/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/54421/_plugins_/tickets#file4
-* http://zone.spip.org/trac/spip-zone/changeset/54422/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/54423/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/54424/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/54427/_plugins_/tickets#file2
-* http://zone.spip.org/trac/spip-zone/changeset/54432/_plugins_/tickets#file2
-* http://zone.spip.org/trac/spip-zone/changeset/54440/_plugins_/tickets
-* http://zone.spip.org/trac/spip-zone/changeset/54449/_plugins_/tickets

…et d'autres…

On aurait dû finalement repartir d'une branche propre grml (marcimat)...

Location:
_plugins_/tickets/trunk
Files:
5 added
3 deleted
39 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/tickets/trunk/action/editer_ticket.php

    r50534 r56968  
    22
    33/**
    4  * Plugin Tickets pour Spip 2.0
    5  * Licence GPL (c) 2008-2009
     4 * Plugin Tickets pour Spip 2.x
     5 * Licence GPL (c) 2008-2011
    66 *
    77 */
     
    4848        $c = array();
    4949        foreach (array(
    50                 'titre', 'texte', 'severite', 'type', 'id_assigne', 'exemple', 'composant','jalon','version','projet','navigateur'
     50                'titre', 'texte', 'severite', 'tracker', 'id_assigne', 'exemple', 'composant','jalon','version','projet','navigateur','sticked'
    5151        ) as $champ)
    52                 $c[$champ] = _request($champ);
     52                $c[$champ] = trim(_request($champ));
    5353
    5454        include_spip('inc/modifier');
    5555        revision_ticket($id_ticket, $c);
    5656
     57        // Ajouter un document
     58        if (isset($_FILES['ajouter_document'])
     59        AND $_FILES['ajouter_document']['tmp_name']) {
     60                $ajouter_documents = charger_fonction('ajouter_documents', 'inc');
     61                $ajouter_documents(
     62                        $_FILES['ajouter_document']['tmp_name'],
     63                        $_FILES['ajouter_document']['name'], 'ticket', $id_ticket,
     64                        'document', 0, $documents_actifs);
     65                // supprimer le temporaire et ses meta donnees
     66                spip_unlink($_FILES['ajouter_document']['tmp_name']);
     67                spip_unlink(preg_replace(',\.bin$,',
     68                        '.txt', $_FILES['ajouter_document']['tmp_name']));
     69        }
     70       
     71        // Invalider les caches
     72        include_spip('inc/invalideur');
     73        suivre_invalideur("id='id_ticket/$id_ticket'");
     74       
    5775        // Modification de statut. On ne peut passer par inc/modifier
    5876        $c = array();
     
    6179                $c['date'] = date('Y-m-d H:i:s');
    6280        $err .= instituer_ticket($id_ticket, $c);
    63 
     81       
    6482        return $err;
    6583}
     
    126144                // En cas de publication, fixer la date a "maintenant"
    127145                // sauf si $c commande autre chose
    128                 if ($champs['statut'] == 'ouvert' AND !in_array($statut_ancien, array('ouvert'))) {
     146                if ($champs['statut'] == 'ouvert' AND in_array($statut_ancien, array('redac'))) {
    129147                        if (!is_null($date))
    130148                                $champs['date'] = $date;
    131149                        else
    132150                                $champs['date'] = date('Y-m-d H:i:s');
     151                       
     152                        // On publie les documents du ticket
     153                        $documents = sql_select('id_document','spip_documents_liens','objet="ticket" AND id_objet='.intval($id_ticket));
     154                        while($document = sql_fetch($documents)){
     155                                spip_log("On update le doc ".$document['id_document'],'tickets');
     156                                $champs = array(
     157                                        'statut'=>'publie',
     158                                        'date_publication'=>date('Y-m-d H:i:s'));
     159                                $id_document=$document['id_document'];
     160                                sql_updateq('spip_documents',$champs,"id_document=$id_document AND statut='prepa'");
     161                        }
    133162                }
    134163                // On met à jour la date_modif à chaque mise à jour de statut
     
    178207        return ''; // pas d'erreur
    179208}
     209
     210/**
     211 * Enregistre une revision de ticket
     212 *
     213 * @param int $id_ticket : l'identifiant numérique du ticket
     214 * @param array $c[optional] : un array des champs à modifier en base
     215 * @return
     216 */
     217function revision_ticket($id_ticket, $c=false) {
     218
     219        // invalider le cache quelque soit la circonstance.
     220        // une modification de base = effacer les caches.
     221        $invalideur = "id='id_ticket/$id_ticket'";
     222        $indexation = true;
     223
     224        modifier_contenu('ticket', $id_ticket,
     225                array(
     226                        'nonvide' => array('titre' => _T('info_sans_titre')),
     227                        'invalideur' => $invalideur,
     228                        'indexation' => $indexation,
     229                        'date_modif' => 'date_modif' // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
     230                ),
     231                $c);
     232
     233        return ''; // pas d'erreur
     234}
    180235?>
  • _plugins_/tickets/trunk/backend-tickets.html

    r50431 r56968  
    1313        xmlns:atom="http://www.w3.org/2005/Atom"
    1414>
    15 
     15#SET{tout_assignes,#ARRAY}
     16<BOUCLE_tout_assignes(TICKETS){fusion id_assigne}>#SET{tout_assignes,#GET{tout_assignes}|push{#ID_ASSIGNE}}</BOUCLE_tout_assignes>
     17#SET{tout_auteurs,#ARRAY}
     18<BOUCLE_tout_auteurs(TICKETS){fusion id_auteur}>#SET{tout_auteurs,#GET{tout_auteurs}|push{#ID_AUTEUR}}</BOUCLE_tout_auteurs>
     19#SET{tout_statuts,#ARRAY}
     20<BOUCLE_statuts(TICKETS){fusion statut}>#SET{tout_statuts,#GET{tout_statuts}|push{#STATUT}}</BOUCLE_statuts>
     21#SET{tout_trackers,#ARRAY}
     22<BOUCLE_trackers(TICKETS){fusion tracker}>#SET{tout_trackers,#GET{tout_trackers}|push{#TRACKER}}</BOUCLE_trackers>
     23#SET{tout_severites,#ARRAY}
     24<BOUCLE_severites(TICKETS){fusion severite}>#SET{tout_severites,#GET{tout_severites}|push{#SEVERITE}}</BOUCLE_severites>
     25[[(#SET{nom,[(#INFO_NOM{auteur,#ENV{id_auteur}})]})](#ENV{id_auteur}|oui)]
     26[[(#SET{nom,[(#INFO_NOM{auteur,#ENV{id_assigne}})]})](#ENV{id_assigne}|oui)]
     27[[(#SET{titre,[(#INFO_TITRE{ticket,#ENV{id_ticket}})]})](#ENV{id_ticket}|oui)]
    1628<channel[ xml:lang="(#LANG)"]>
    17         <title>&#91;[(#NOM_SITE_SPIP|textebrut|texte_backend)]&#93; <:tickets:tickets:></title>
    18         <link>[(#URL_PAGE{tickets}|url_absolue)]</link>
    19         [<description>(#DESCRIPTIF_SITE_SPIP|supprimer_tags|texte_backend)</description>]
     29        <title>&#91;[(#NOM_SITE_SPIP|textebrut|texte_backend)]&#93;&#32;[
     30        <:tickets:suivre_tickets_de{nom=#GET{nom}}:>(#ENV{id_auteur}|oui)][
     31        <:tickets:suivre_tickets_assignes_a{nom=#GET{nom}}:>(#ENV{id_assigne}|oui)][
     32        <:tickets:suivre_tickets_statut:> [(#ENV{statut}|is_array|?{[(#ENV{statut}|implode{', '})],#ENV{statut}})](#ENV{statut}|oui)][
     33        <:tickets:suivre_tickets_id{id=#ENV{id_ticket},titre=#GET{titre}}:>(#ENV{id_ticket}|oui)][
     34        <:tickets:suivre_tickets_tous:>(#ENV{id_auteur,#ENV{id_assigne,#ENV{statut,#ENV{id_ticket}}}}|non)]
     35        </title>
     36        <link>[(#ENV{id_ticket}|?{[(#URL_TICKET{#ENV{id_ticket}}|url_absolue)],[(#URL_PAGE{tickets}|parametre_url{id_auteur,#ENV{id_auteur}}|parametre_url{id_assigne,#ENV{id_assigne}}|url_absolue)]})]</link>
     37        [<description>(#ENV{id_ticket}|?{[(#INFO_TEXTE{ticket,#ENV{id_ticket}}|supprimer_tags|texte_backend)],[(#DESCRIPTIF_SITE_SPIP|supprimer_tags|texte_backend)]})</description>]
    2038        <language>#LANG</language>
    21         <generator>SPIP - www.spip.net</generator>
     39        <generator>SPIP #SPIP_VERSION (http://www.spip.net)</generator>
    2240        <atom:link href="[(#SELF|url_absolue)]" rel="self" type="application/rss+xml" />
    2341
     
    3048        </image>
    3149]
    32 <BOUCLE_10recents(TICKETS){id_ticket?}{severite?}{statut?}{id_auteur?}{id_assigne?}{projet?}{composant?}{version?}{jalon?}{navigateur?}{par date}{inverse}{0,10}{unique}>
    33 <INCLURE{fond=inclure/rss-item-ticket,id_ticket}>
    34 </BOUCLE_10recents>
    35 
     50<BOUCLE_recents(TICKETS){id_auteur?}{id_auteur IN #ENV{auteurs,#GET{tout_auteurs}}}{id_auteur !IN #ENV{id_auteur_non,#ARRAY{0,999999999999}}}{id_assigne?}{id_assigne IN #ENV{assignes,#GET{tout_assignes}}}{id_assigne !IN #ENV{id_assigne_non,#ARRAY{0,999999999999}}}{severite?}{severite IN #ENV{severites,#GET{tout_severites}}}{statut?}{statut IN #ENV{statuts,#GET{tout_statuts}}}{tracker?}{tracker IN #ENV{trackers,#GET{tout_trackers}}}{projet?}{composant?}{version?}{jalon?}{navigateur?}{sticked?}{date > #ENV{date_debut,2000-01-01}}{date < #ENV{date_fin,2100-01-01}}{par date}{inverse}{0,#ENV{limit,10}}{unique}>
     51[(#REM) on ne met que les forums si un ticket dans l'environnement]
     52[(#ENV{id_ticket}|non)
     53<INCLURE{fond=inclure/rss-item-ticket,id_ticket}>]
     54</BOUCLE_recents>
     55<BOUCLE_recents_forums_tickets(FORUMS){id_ticket}{par date}{inverse}{0,#ENV{limit,10}}{unique}>
     56<INCLURE{fond=inclure/rss-item-ticket_forum,id_forum,id_ticket}>
     57</BOUCLE_recents_forums_tickets>
    3658</channel>
    37 
    3859</rss>
  • _plugins_/tickets/trunk/base/tickets_install.php

    r50414 r56968  
    1313                        "date_modif"    => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
    1414                        "severite"      => "integer DEFAULT '0' NOT NULL",
    15                         "type"  => "integer DEFAULT '0' NOT NULL",
     15                        "tracker"       => "integer DEFAULT '0' NOT NULL",
    1616                        "statut"        => "varchar(10) DEFAULT '0' NOT NULL",
    1717                        "id_auteur"     => "bigint(21) NOT NULL",
     
    2424                        "jalon" => "varchar(30) DEFAULT '' NOT NULL",
    2525                        "navigateur" => "varchar(60) DEFAULT '' NOT NULL",
     26                        "sticked"       => "varchar(3) DEFAULT '' NOT NULL",
    2627                        "maj"   => "TIMESTAMP"
    2728                        );
     
    4041                'key' => &$spip_tickets_key);
    4142
    42         /**
    43          * En dessous de SPIP 2.1 on garde la table spip_tickets_forum
    44          */
    45         if(version_compare($GLOBALS['spip_version_branche'],'2.1','<')){
    46                 $spip_tickets_forum = array(
    47                                 "id_ticket_forum"       => "bigint(21) NOT NULL",
    48                                 "id_ticket"     => "bigint(21) NOT NULL",
    49                                 "texte" => "longtext DEFAULT '' NOT NULL",
    50                                 "date"  => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
    51                                 "id_auteur"     => "bigint(21) NOT NULL",
    52                                 "ip"    => "varchar(16) DEFAULT '' NOT NULL",
    53                                 "maj"   => "TIMESTAMP"
    54                 );
    55                 $spip_tickets_forum_key = array(
    56                                 "PRIMARY KEY"   => "id_ticket_forum",
    57                                 "KEY id_ticket" => "id_ticket"
    58                                 );
    59 
    60                 $tables_principales['spip_tickets_forum'] = array(
    61                         'field' => &$spip_tickets_forum,
    62                         'key' => &$spip_tickets_forum_key);
    63         }
    64 
    6543        return $tables_principales;
    6644}
     
    7048        // 'spip_' dans l'index de $tables_principales
    7149        $interface['table_des_tables']['tickets']='tickets';
    72 
    73         if(version_compare($GLOBALS['spip_version_branche'],'2.1','<')){
    74                 $interface['table_des_tables']['tickets_forum']='tickets_forum';
    75                 $interface['tables_jointures']['spip_tickets_forum'][] = 'tickets';
    76         }else{
    77                 $interface['tables_jointures']['spip_tickets'][] = 'forums';
    78         }
     50        $interfaces['tables_jointures']['spip_tickets'][]= 'documents_liens';
     51       
     52        $interface['tables_jointures']['spip_tickets'][] = 'forums';
    7953
    8054        return $interface;
  • _plugins_/tickets/trunk/base/tickets_upgrade.php

    r50414 r56968  
    11<?php
     2
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
    25include_spip('inc/meta');
    36include_spip('base/create');
     
    58function tickets_upgrade($nom_meta_base_version,$version_cible){
    69        $current_version = "0.0";
     10        include_spip('base/tickets_install');
     11       
    712        // On traite le cas de la premiere version de Tickets sans version_base
    813        if ((!isset($GLOBALS['meta'][$nom_meta_base_version])) && tickets_existe())
     
    1318               
    1419        if ($current_version=="0.0") {
    15                 include_spip('base/tickets_install');
    1620                creer_base();
    1721                ecrire_meta($nom_meta_base_version,$current_version=$version_cible);
     
    3539                ecrire_meta($nom_meta_base_version,$current_version="0.7");
    3640        }
    37 
    3841        // au dessus de 1.0, c'est specifique SPIP >= 2.1
    3942        if (version_compare($current_version,"1.0","<")) {
     
    4851                maj_tables('spip_tickets');
    4952                ecrire_meta($nom_meta_base_version,$current_version="1.1");
     53        }
     54        if (version_compare($current_version,"1.2","<")){
     55                // modifications de la table spip_tickets,
     56                // ajout du champ navigateur
     57                maj_tables('spip_tickets');
     58                ecrire_meta($nom_meta_base_version,$current_version="1.2");
     59        }
     60        if (version_compare($current_version,"1.3","<")){
     61                // modifications de la table spip_tickets,
     62                // ajout du champ navigateur
     63                sql_alter("TABLE spip_tickets DROP tracker");
     64                sql_alter("TABLE spip_tickets CHANGE type tracker integer DEFAULT '0' NOT NULL");
     65                ecrire_meta($nom_meta_base_version,$current_version="1.3");
     66        }
     67        if (version_compare($current_version,"1.4","<")){
     68                // modifications de la table spip_tickets,
     69                // ajout du champ sticked
     70                maj_tables('spip_tickets');
     71                ecrire_meta($nom_meta_base_version,$current_version="1.4");
    5072        }
    5173}
  • _plugins_/tickets/trunk/content/editer_ticket.html

    r56965 r56968  
     1<BOUCLE_si_afficher_public(CONDITION){si #CONFIG{tickets/general/desactiver_public,off}|!={on}|oui}>
    12[(#SET{texte,[(#ENV{id_ticket}|intval|?{<:tickets:icone_modifier_ticket:>, <:tickets:nouveau_ticket:>})]})]
    23<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="sep"> &gt; </span><a href="#URL_PAGE{tickets}"><:tickets:tickets:></a><span class="sep"> &gt; </span><strong class="on">#GET{texte}</strong></div>
     
    1213        ]
    1314        [(#AUTORISER{ecrire,ticket,#ENV{id_ticket,oui}}|non)
    14                 <p><:tickets:tickets_sur_inscription:>
    15                         [(#CONFIG{accepter_inscriptions}|=={oui}|oui) <a href="#URL_PAGE{inscription}"><:tickets:sinscrire:></a> ]
    16                 </p>
    17 
    18                 <h2 class='titre'><:tickets:titre_identification:></h2>
    19                 [(#FORMULAIRE_LOGIN{#SELF})]
     15                [(#SESSION{id_auteur}|non)
     16                        <p><:tickets:tickets_sur_inscription:>
     17                                [(#CONFIG{accepter_inscriptions}|=={oui}|oui) <a href="#URL_PAGE{inscription}"><:tickets:sinscrire:></a> ]
     18                        </p>
     19       
     20                        <h2 class='titre'><:tickets:titre_identification:></h2>
     21                        [(#FORMULAIRE_LOGIN{#SELF})]
     22                ]
     23                [(#SESSION{id_auteur}|oui)
     24                        <p>
     25                                <:tickets:tickets_sur_inscription:>
     26                        </p>
     27                        <p>
     28                                <:tickets:tickets_sur_inscription_droits:>
     29                        </p>
     30                ]
    2031        ]
    2132</div>
     33</BOUCLE_si_afficher_public>
     34#FILTRE{trim}
  • _plugins_/tickets/trunk/content/ticket.html

    r56965 r56968  
    11<BOUCLE_ticket_contenu(TICKETS){id_ticket}>
    22<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="sep"> &gt; </span><a href="#URL_PAGE{tickets}"><:tickets:tickets:></a>[<span class="sep"> &gt; </span><strong class="on">(#TITRE|couper{80})</strong>]</div>
    3 
     3[(#AUTORISER{commenter, ticket, #ID_TICKET}|oui)
     4[(#SET{autoriser_commenter,oui})]]
    45<div class="ticket contenu-principal">
    56
     
    910        ]
    1011                <h1 class="h1 titre #EDIT{titre}"><:tickets:ticket:> <small>##ID_TICKET</small> : #TITRE</h1>
     12                <div class="actions rss">
     13                        <a href="[(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}}|parametre_url{id_ticket,#ID_TICKET})]"><:tickets:suivre_tickets_rss_unique:></a>
     14                </div>
    1115        </div>
    1216
     
    1418        <div class="infos">
    1519                <dl>
    16                         [<dt><:tickets:champ_statut:></dt><dd>(#STATUT|tickets_texte_statut)</dd>]
     20                        [<dt><:tickets:champ_statut:></dt><dd>[(#STATUT|tickets_icone_statut{true}) ](#STATUT|tickets_texte_statut)</dd>]
    1721                        <BOUCLE_assigne(AUTEURS){id_auteur=#ID_ASSIGNE}{tous}>
    1822                        <dt><:tickets:assigne_a:></dt><dd><a href="#URL_AUTEUR" class="spip_in">#NOM</a></dd>
    1923                        </BOUCLE_assigne>
    20                         [<dt><:tickets:champ_severite:></dt><dd>(#SEVERITE|tickets_texte_severite)</dd>]
    21                         [<dt><:tickets:champ_type:></dt><dd>(#TYPE|tickets_texte_type)</dd>]
     24                        [<dt><:tickets:champ_severite:></dt><dd>[(#SEVERITE|tickets_icone_severite{true}) ](#SEVERITE|tickets_texte_severite)</dd>]
     25                        [<dt><:tickets:champ_type:></dt><dd>(#TRACKER|tickets_texte_tracker)</dd>]
    2226                        [<dt><:tickets:champ_date:></dt><dd>(#DATE|affdate)</dd>]
    2327                        <B_auteur><dt><:tickets:champ_createur:></dt><BOUCLE_auteur(AUTEURS){id_auteur=#ID_AUTEUR}{tous}><dd><a href="#URL_AUTEUR" class="spip_in">#NOM</a></dd></BOUCLE_auteur>
     
    4044        [<div class="#EDIT{texte} texte">(#TEXTE|propre)</div>]
    4145        [<div><:tickets:champ_exemple:> <strong><a href="[(#EXEMPLE*|calculer_url{"",url})]">(#EXEMPLE*|calculer_url{"",titre}|replace{"</?html>",""})</a></strong></div>]
    42 
    4346        [(#REM) - Extensions, Extras 2 entre autre]
    4447        [(#PIPELINE{afficher_contenu_objet,[(#ARRAY{args,[(#ARRAY{type,ticket,id_objet,#ID_TICKET,contexte,[(#ENV**|unserialize)]})],data,''})]})]
    45 
     48        <INCLURE{fond=inclure/documents_tickets,id_ticket=#ID_TICKET}>
    4649</div>
    4750
     
    7376                        [(#MODELE{comment}{id_forum}{compteur=#COMPTEUR_BOUCLE}{thread=oui})]
    7477                        [(#BOUTONS_ADMIN_FORUM)]
     78                        [(#GET{autoriser_commenter}|=={oui}|oui)
    7579                        [<p class="repondre"><a
    7680                                href="(#PARAMETRES_FORUM|url_reponse_forum)"
    7781                                onclick="jQuery(this).add_reply_to([(#ID_FORUM)]);return false;"
    78                                 rel="noindex nofollow"><:repondre_message:></a></p>]
     82                                rel="noindex nofollow"><:repondre_message:></a></p>]]
    7983                        <B_comments-fils>
    8084                        <ul class="comments-ul comments-fils">
     
    8387                                        [(#MODELE{comment}{id_forum}{thread=oui})]
    8488                                        [(#BOUTONS_ADMIN_FORUM)]
     89                                        [(#GET{autoriser_commenter}|=={oui}|oui)
    8590                                        [<p class="repondre"><a
    8691                                                href="(#PARAMETRES_FORUM|url_reponse_forum)"
    8792                                                onclick="jQuery(this).add_reply_to([(#ID_FORUM)]);return false;"
    88                                                 rel="noindex nofollow"><:repondre_message:></a></p>]
     93                                                rel="noindex nofollow"><:repondre_message:></a></p>]]
    8994                                        <BOUCLE_comments-fils-etc(boucle_comments-fils)></BOUCLE_comments-fils-etc>
    9095                                </li>
     
    110115                                        <INCLURE{fond=modeles/comment}{id_forum}{thread=oui}>
    111116                                        [(#BOUTONS_ADMIN_FORUM)]
     117                                        [(#GET{autoriser_commenter}|=={oui}|oui)
    112118                                        [<p class="repondre"><a
    113119                                                href="(#PARAMETRES_FORUM|url_reponse_forum)"
    114120                                                onclick="jQuery(this).add_reply_to([(#ID_THREAD)]);return false;"
    115                                                 rel="noindex nofollow"><:repondre_message:></a></p>]
     121                                                rel="noindex nofollow"><:repondre_message:></a></p>]]
    116122                                </li>
    117123                                </BOUCLE_comments-fils-1>
    118124                        </ul>
    119125                        </B_comments-fils-1>
     126                        [(#GET{autoriser_commenter}|=={oui}|oui)
    120127                        [<p class="repondre"><a
    121128                                        href="(#PARAMETRES_FORUM|url_reponse_forum)"
    122129                                        onclick="jQuery(this).add_reply_to([(#ID_THREAD)]);return false;"
    123                                         rel="noindex nofollow"><:repondre_message:></a></p>]
     130                                        rel="noindex nofollow"><:repondre_message:></a></p>]]
    124131                </li>
    125132                </BOUCLE_comments-list-1>
     
    152159        </B_messages>
    153160        [(#REM) Bloc 3: formulaire d'ajout d'un commentaire sur le ticket]
    154         [(#AUTORISER{commenter, ticket, #ID_TICKET}|oui)
     161        [(#GET{autoriser_commenter}|=={oui}|oui)
    155162                #FORMULAIRE_FORUM{#SELF}
    156163        ]
    157         [(#AUTORISER{commenter, ticket, #ID_TICKET}|non)
    158                 <p><:tickets:tickets_sur_inscription:>
    159                         [(#CONFIG{accepter_inscriptions}|=={oui}|oui) <a href="#URL_PAGE{inscription}"><:tickets:sinscrire:></a> ]
    160                 </p>
    161 
    162                 <h2 class='titre'><:tickets:titre_identification:></h2>
    163                 [(#FORMULAIRE_LOGIN{#SELF})]
     164        [(#GET{autoriser_commenter}|=={oui}|non)
     165                [(#SESSION{id_auteur}|non)
     166                        <p><:tickets:tickets_sur_inscription:>
     167                                [(#CONFIG{accepter_inscriptions}|=={oui}|oui) <a href="#URL_PAGE{inscription}"><:tickets:sinscrire:></a> ]
     168                        </p>
     169       
     170                        <h2 class='titre'><:tickets:titre_identification:></h2>
     171                        [(#FORMULAIRE_LOGIN{#SELF})]
     172                ]
     173                [(#SESSION{id_auteur}|oui)
     174                        <p>
     175                                <:tickets:tickets_sur_inscription:>
     176                        </p>
     177                        <p>
     178                                <:tickets:tickets_sur_inscription_droits:>
     179                        </p>
     180                ]
    164181        ]
    165182</div>
  • _plugins_/tickets/trunk/content/tickets.html

    r56965 r56968  
     1<BOUCLE_si_afficher_public(CONDITION){si #CONFIG{tickets/general/desactiver_public,off}|!={on}|oui}>
    12<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="sep"> &gt; </span><:tickets:tickets:></div>
    23
     
    910        </div>
    1011
    11         [(#SESSION{id_auteur}|oui)
     12        #FORMULAIRE_TRIER_TICKETS
     13       
     14        [(#ENV{id_auteur}|oui)
     15                [(#SET{nom,[(#INFO_NOM{auteur,[(#ENV{id_auteur})]})]})]
     16        ]
     17       
     18        [(#ENV{id_auteur}
     19                |ou{#ENV{auteurs}}
     20                |ou{#ENV{id_assigne}}
     21                |ou{#ENV{assignes}}
     22                |ou{#ENV{statut}}
     23                |ou{#ENV{statuts}}
     24                |ou{#ENV{date_debut}}
     25                |ou{#ENV{date_fin}}
     26                |ou{#ENV{tracker}}
     27                |ou{#ENV{trackers}}
     28                |ou{#ENV{recherche}}
     29                |ou{#ENV{jalon}}
     30                |ou{#ENV{composant}}
     31                |ou{#ENV{version}}
     32                |ou{#ENV{navigateur}}
     33                |oui)
     34                [(#SET{tickets_tries,oui})]     
     35        ]
     36       
     37        [(#GET{tickets_tries}|!={oui}|oui)
    1238                [<div class="ajax">
    13                 (#INCLURE{fond=inclure/liste_tickets,env,ajax,type="",statut=ouvert,id_assigne=#SESSION{id_auteur},
    14                         titre=<:tickets:vos_tickets_assignes:>}|trim)
     39                        (#INCLURE{fond=inclure/liste_tickets,env,ajax,tracker="",statuts=#ARRAY{0,ouvert,1,redac,2,resolu,3,ferme},sticked=on,
     40                                recherche,jalon,composant,version,navigateur,projet,id_auteur,
     41                                titre=<:tickets:tickets_sticked:>}|trim)
     42                        <div class="actions rss">
     43                                <a href="[(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}}|parametre_url{sticked,on})]"><:tickets:suivre_tickets_rss:></a>
     44                        </div>
     45                </div>[(#SET{affiche,oui})]]
     46       
     47                [(#SESSION{id_auteur}|oui)
     48                        [<div class="ajax">
     49                                (#INCLURE{fond=inclure/liste_tickets,env,ajax,tracker="",statuts=#ARRAY{0,ouvert},id_assigne=#SESSION{id_auteur},
     50                                        recherche,jalon,composant,version,navigateur,projet,id_auteur,
     51                                        titre=<:tickets:vos_tickets_assignes:>}|trim)
     52                                <div class="actions rss">
     53                                        <a href="[(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}}|parametre_url{id_assigne,#SESSION{id_auteur}})]"><:tickets:suivre_tickets_rss:></a>
     54                                </div>
     55                        </div>[(#SET{affiche,oui})]]
     56                ]
     57                [(#SESSION{id_auteur}|oui)
     58                        [<div class="ajax">
     59                        (#INCLURE{fond=inclure/liste_tickets,env,ajax,tracker="",tri=statut,statuts=#ARRAY{0,ouvert,1,redac},id_assigne_non=#SESSION{id_auteur},id_auteur=#SESSION{id_auteur},
     60                                recherche,jalon,composant,version,navigateur,projet,
     61                                titre=<:tickets:vos_tickets_en_cours:>}|trim)
     62                        <div class="actions rss">
     63                                <a href="[(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}}|parametre_url{id_auteur,#SESSION{id_auteur}})]"><:tickets:suivre_tickets_rss:></a>
     64                        </div>
     65                        </div>[(#SET{affiche,oui})]]
     66                ]
     67
     68                [<div class="ajax">
     69                [(#GET{affiche}|=={oui}|?{[(#SET{titre,<:tickets:autres_tickets_ouverts:>})],[(#SET{titre,<:tickets:tous_tickets_ouverts:>})]})]
     70                (#INCLURE{fond=inclure/liste_tickets,env,ajax,tracker="",statuts=#ARRAY{0,ouvert},id_auteur_non=#SESSION{id_auteur},id_assigne_non=#SESSION{id_auteur},
     71                        titre=#GET{titre}}|trim)
     72                        <div class="actions rss">
     73                                <a href="[(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}}|parametre_url{id_auteur_non,#SESSION{id_auteur}}|parametre_url{id_assigne_non,#SESSION{id_auteur}})]"><:tickets:suivre_tickets_rss:></a>
     74                        </div>
     75                </div>]
     76               
     77                [<div class="ajax">
     78                (#INCLURE{fond=inclure/liste_tickets,env,ajax,tracker="",statuts=#ARRAY{0,resolu,1,ferme},
     79                        titre=<:tickets:tickets_traites:>}|trim)
     80                        <div class="actions rss">
     81                                <a href="[(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}}|parametre_url{statut,#ARRAY{0,resolu,1,ferme}})]"><:tickets:suivre_tickets_rss:></a>
     82                        </div>
     83                </div>]
     84               
     85                [<div class="ajax">
     86                        (#INCLURE{fond=inclure/liste_commentaires_tickets,env,ajax,tracker="",
     87                                recherche,jalon,composant,version,navigateur,projet,
     88                                titre=<:tickets:tickets_derniers_commentaires:>}|trim)
     89                        </div>
     90                        <div class="actions rss">
     91                                <a href="[(#URL_PAGE{backend-tickets_comments}|parametre_url{lang,#ENV{lang}})]"><:tickets:suivre_tickets_comments_rss:></a>
    1592                </div>]
    1693        ]
    17        
    18         [(#SESSION{id_auteur}|oui)
    19                 <div class="ajax">
    20                 [(#INCLURE{fond=inclure/liste_tickets,env,ajax,type="",statut=redac,id_auteur=#SESSION{id_auteur},
    21                         titre=<:tickets:vos_tickets_en_cours:>})]
    22                 </div>
     94
     95        [(#GET{tickets_tries}|=={oui}|oui)
     96                [(#SET{statut,[(#ENV{statut}|is_array|?{#ENV{statut},#ARRAY{0,ouvert,1,redac,2,resolu,3,ferme}})]})]
     97                [<div class="ajax">
     98                (#INCLURE{fond=inclure/liste_tickets,env,ajax,afficher_filtres=oui,url_defiltrer=oui,tri=statut,statut=#GET{statut},titre=<:tickets:tickets_tries:>}|sinon{<h3><:tickets:tickets_tries:> (0)</h3><p><:tickets:message_aucun_ticket_recherche:></p>}|trim)
     99                        <div class="actions rss">
     100                                <a href="[(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}}|parametre_url{statuts,#ENV{statuts}}|parametre_url{auteurs,#ENV{auteurs}}|parametre_url{assignes,#ENV{assignes}}|parametre_url{trackers,#ENV{trackers}}|parametre_url{composant,#ENV{composant}}|parametre_url{projet,#ENV{projet}}|parametre_url{severite,#ENV{severite}}|parametre_url{version,#ENV{version}}|parametre_url{jalon,#ENV{jalon}}|parametre_url{navigateur,#ENV{navigateur}}|parametre_url{date_debut,#ENV{date_debut}}|parametre_url{date_fin,#ENV{date_fin}})]"><:tickets:suivre_tickets_rss:></a>
     101                        </div>
     102                </div>]
    23103        ]
    24        
    25         [<div class="ajax">
    26         (#INCLURE{fond=inclure/liste_tickets,env,ajax,type="",statut=ouvert,
    27                 titre=<:tickets:tous_tickets_ouverts:>}|trim)
    28         </div>]
    29        
    30         <div class="ajax">
    31         [(#INCLURE{fond=inclure/liste_tickets,env,ajax,type="",statut=#ARRAY{0,resolu,1,ferme},
    32                 titre=<:tickets:tickets_traites:>}|trim)]
    33         </div>
    34 
    35         [<div class="ajax">
    36         (#INCLURE{fond=inclure/liste_commentaires_tickets,env,ajax,type="",
    37                 titre=<:tickets:tickets_derniers_commentaires:>}|trim)
    38         </div>]
    39104</div>
     105</BOUCLE_si_afficher_public>
     106#FILTRE{trim}
  • _plugins_/tickets/trunk/exec/ticket_afficher.php

    r37489 r56968  
    3232
    3333                $commencer_page = charger_fonction('commencer_page', 'inc');
    34                 echo $commencer_page("&laquo; ". $row['titre'] ." &raquo;", "naviguer", "tickets");
     34                echo $commencer_page("&laquo; ". $row['titre'] ." &raquo;", "naviguer", "ticket_afficher");
    3535
    3636                echo debut_grand_cadre(true),
  • _plugins_/tickets/trunk/exec/ticket_editer.php

    r34440 r56968  
    2929        // Permet entre autres d'ajouter les classes à la page : <body class='$rubrique $sous_rubrique'>
    3030        $rubrique = "forum";
    31         $sous_rubrique = "tickets";
     31        $sous_rubrique = "ticket_afficher";
    3232
    3333        $commencer_page = charger_fonction('commencer_page', 'inc');
  • _plugins_/tickets/trunk/exec/tickets.php

    r28085 r56968  
    11<?php
     2if (!defined("_ECRIRE_INC_VERSION")) return;
     3
    24// Traitement de la page recapitulative des tickets
    35function exec_tickets () {
  • _plugins_/tickets/trunk/fonds/cfg_tickets_autorisations.html

    r35952 r56968  
    11<!-- titre=<:tickets:cfg_titre_tickets:> -->
    22<!-- descriptif=<:tickets:cfg_descr_tickets:> -->
     3<!-- onglet=tickets -->
    34<!-- icone=imgs/bugs.png -->
    45<!-- logo=imgs/logo-bugs.png -->
    56<!-- boite=<:tickets:cfg_titre_tickets:> - <:tickets:cfg_form_tickets_autorisations:>-->
     7<!-- liens*=tickets:tickets_general -->
    68<!-- liens*=tickets:tickets_autorisations -->
    7 <!-- liens*=tickets:tickets_general -->
    89#CACHE{0}
    910
  • _plugins_/tickets/trunk/fonds/cfg_tickets_general.html

    r36016 r56968  
    11<!-- titre=<:tickets:cfg_titre_tickets:> -->
    2 <!-- onglet=tickets -->
     2<!-- liens*=tickets:tickets_general -->
    33<!-- liens*=tickets:tickets_autorisations -->
    4 <!-- liens*=tickets:tickets_general -->
    54<!-- icone=imgs/bugs.png -->
    65<!-- logo=imgs/logo-bugs.png -->
  • _plugins_/tickets/trunk/formulaires/config_tickets_autorisations.html

    r36016 r56968  
    1616        </div></form>
    1717</div>
    18 <div id="bloc_debug">
    19         <h3> Debug - Etat des variables du fond:</h3>
    20         #CFG_ARBO{tickets/autorisations}
    21 </div>
  • _plugins_/tickets/trunk/formulaires/config_tickets_general.html

    r50448 r56968  
    5454                                                label=<:tickets:cfg_lbl_selecteur_navigateur:>,
    5555                                                label_case=<:tickets:cfg_lbl_case_selecteur_navigateur:>})]
     56                                        [(#SAISIE{case, joindre_fichiers,
     57                                                label=<:tickets:cfg_lbl_joindre_fichiers:>,
     58                                                label_case=<:tickets:cfg_lbl_case_joindre_fichiers:>})]
    5659                                </ul>
    5760                        </li>
    5861                       
    5962                        <li class="fieldset">
    60                                 <h3 class="legend"><:tickets:cfg_lgd_champs_optionnels:></h3>
     63                                <h3 class="legend"><:tickets:cfg_lgd_champs_options_autres:></h3>
    6164                                <ul>
     65                                [(#SAISIE{oui_non, desactiver_public,
     66                                        label=<:tickets:cfg_lbl_desactiver_public:>,
     67                                        defaut=''})]
     68                                [(#SAISIE{oui_non, cacher_moteurs,
     69                                        label=<:tickets:cfg_lbl_cacher_moteurs:>,
     70                                        defaut=on})]
    6271                                [(#SAISIE{case, notification_publique,
    6372                                        label=<:tickets:cfg_lbl_notification_publique:>,
     
    8493        </div></form>
    8594</div>
    86 <div id="bloc_debug">
    87         <h3> Debug - Etat des variables du fond:</h3>
    88         #CFG_ARBO{tickets/general}
    89 </div>
  • _plugins_/tickets/trunk/formulaires/editer_ticket.html

    r50423 r56968  
    33        [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    44        <BOUCLE_editable(CONDITION) {si #ENV{editable}}>
    5         <form method='post' action='#ENV{action}'><div>
     5        <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
    66                [(#REM) declarer les hidden qui declencheront le service du formulaire
    77                parametre : url d'action ]
     
    1313                                        label=<:tickets:champ_titre_ticket:>,
    1414                                        obligatoire=oui})]
     15                               
     16                                [(#SAISIE{oui_non,sticked,
     17                                        label=<:tickets:champ_sticked:>,
     18                                        explication=<:tickets:explication_champ_sticked:>})]
    1519
    1620                                [(#SAISIE{selection, statut,
     
    2529                                        datas=#GET{assignables}})]
    2630                                       
    27                                 [(#SAISIE{selection, type,
     31                                [(#SAISIE{selection, tracker,
    2832                                        label=<:tickets:champ_type:>,
    2933                                        cacher_option_intro=oui,
    30                                         datas=[(#ENV{id_ticket}|tickets_liste_type)]})]
     34                                        datas=[(#ENV{id_ticket}|tickets_liste_tracker)]})]
    3135
    3236                                [(#SAISIE{selection, severite,
     
    5963                                        class=inserer_barre_edition,
    6064                                        rows=20})]
    61 
     65                               
     66                                [(#CONFIG{tickets/general/joindre_fichiers}|=={on}|oui)
     67                                        [(#SAISIE{input, ajouter_document,
     68                                                type=file,
     69                                                label=<:tickets:champ_fichier:>,
     70                                                explication=<:tickets:explication_fichier:>})]
     71                                ]
    6272                                [(#SAISIE{input, exemple,
    6373                                        label=<:tickets:champ_url_exemple:>,
  • _plugins_/tickets/trunk/formulaires/editer_ticket.php

    r50423 r56968  
    33/**
    44 * Plugin Tickets pour Spip 2.0
    5  * Licence GPL (c) 2008-2009
     5 * Licence GPL (c) 2008-2011
    66 *
    77 * Formulaire d'édition de tickets
     
    5454
    5555        $erreurs = formulaires_editer_objet_verifier('ticket',$id_ticket,array('titre','texte'));
     56       
     57        /**
     58         * Utilisation des fonctions de nospam pour filtrer un peu
     59         */
     60        if (include_spip('inc/nospam')) {
     61                include_spip('inc/texte');
     62                $texte = _request('texte');
     63        $caracteres = compter_caracteres_utiles($texte);
     64        // moins de 10 caracteres sans les liens = spam !
     65        if ($caracteres < 10){
     66                $erreurs['texte'] = _T('forum_attention_dix_caracteres');
     67        }
     68        // on analyse le titre
     69        $infos_titre = analyser_spams(_request('titre'));
     70        // si un lien dans le titre = spam !
     71        if ($infos_titre['nombre_liens'] > 0)
     72                $erreurs['titre'] = _T('nospam:erreur_spam');
     73        // on analyse le texte
     74        $infos_texte = analyser_spams($texte);
     75        if ($infos_texte['nombre_liens'] > 0) {
     76                // si un lien a un titre de moins de 3 caracteres = spam !
     77                if ($infos_texte['caracteres_texte_lien_min'] < 3) {
     78                        $erreurs['texte'] = _T('nospam:erreur_spam');
     79                }
     80                // si le texte contient plus de trois lien = spam !
     81                if ($infos_texte['nombre_liens'] >= 3)
     82                        $erreurs['texte'] = _T('nospam:erreur_spam');
     83        }
     84        }
     85        if(count($erreurs) == 0){
     86                $doc = &$_FILES['ajouter_document'];
     87                if (isset($_FILES['ajouter_document'])
     88                AND $_FILES['ajouter_document']['tmp_name']) {
     89                        include_spip('inc/ajouter_documents');
     90                        list($extension,$doc['name']) = fixer_extension_document($doc);
     91                        $acceptes = ticket_documents_acceptes();
     92       
     93                        if (!in_array($extension, $acceptes)) {
     94                                # normalement on n'arrive pas ici : pas d'upload si aucun format
     95                                if (!$formats = join(', ',$acceptes))
     96                                        $formats = '-'; //_L('aucun');
     97                                $erreurs['ajouter_document'] = _T('public:formats_acceptes', array('formats' => $formats));
     98                        }
     99                        else {
     100                                include_spip('inc/getdocument');
     101                                if (!deplacer_fichier_upload($doc['tmp_name'], $tmp.'.bin'))
     102                                        $erreurs['ajouter_document'] = _T('copie_document_impossible');
     103       
     104                                #               else if (...)
     105                                #               verifier le type_document autorise
     106                                #               retailler eventuellement les photos
     107                                }
     108       
     109                        // si ok on stocke les meta donnees, sinon on efface
     110                        if (isset($erreurs['ajouter_document'])) {
     111                                spip_unlink($tmp.'.bin');
     112                                unset ($_FILES['ajouter_document']);
     113                        } else {
     114                                $doc['tmp_name'] = $tmp.'.bin';
     115                                ecrire_fichier($tmp.'.txt', serialize($doc));
     116                        }
     117                }
     118        }
    56119        return $erreurs;
    57120}
     
    88151        return $message;
    89152}
     153
     154function ticket_documents_acceptes()
     155{
     156        $formats = trim($GLOBALS['meta']['formats_documents_ticket']);
     157        if (!$formats) return array('jpg','txt','gif','png');
     158        if ($formats !== '*')
     159                $formats = array_filter(preg_split(',[^a-zA-Z0-9/+_],', $formats));
     160        else {
     161                include_spip('base/typedoc');
     162                $formats =  array_keys($GLOBALS['tables_mime']);
     163        }
     164        sort($formats);
     165        return $formats;
     166}
    90167?>
  • _plugins_/tickets/trunk/formulaires/statut_ticket.html

    r50193 r56968  
    1818                                        <option value="resolu"[(#ENV{statut}|=={resolu}|?{" selected='selected'",""})]>[(#VAL{resolu}|tickets_texte_statut)]</option>
    1919                                        <option value="ferme"[(#ENV{statut}|=={ferme}|?{" selected='selected'",""})]>[(#VAL{ferme}|tickets_texte_statut)]</option>
     20                                        <option value="poubelle"[(#ENV{statut}|=={poubelle}|?{" selected='selected'",""})]>[(#VAL{poubelle}|tickets_texte_statut)]</option>
    2021                                </select>
    2122                        </li>
  • _plugins_/tickets/trunk/head/editer_ticket.html

    r56965 r56968  
    11<BOUCLE_editer_ticket_head(TICKETS){id_ticket}>
    22<title><:tickets:icone_modifier_ticket:> - [(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
     3[(#CONFIG{tickets/general/cacher_moteurs,on}|=={on}|oui)<meta name="robots" content="noindex, nofollow">]
    34[<meta name="description" content="(#TEXTE|couper{150}|attribut_html)" />]
    4 [<link rel="alternate" type="application/rss+xml" title="<:tickets:syndiquer_ticket_simple:> [(#TITRE|backend-tickets)]" href="(#URL_PAGE{backend}|parametre_url{id_ticket,#ID_TICKET})" />]
     5
    56</BOUCLE_editer_ticket_head>
    67[<link rel="alternate" type="application/rss+xml" title="<:tickets:syndiquer_tickets:>" href="(#URL_PAGE{backend-tickets})" />]
  • _plugins_/tickets/trunk/head/ticket.html

    r50431 r56968  
    11<BOUCLE_ticket_head(TICKETS){id_ticket}>
    22<title><:tickets:ticket:> - [(#TITRE|textebrut) - ][(#NOM_SITE_SPIP|textebrut)]</title>
     3[(#CONFIG{tickets/general/cacher_moteurs,on}|=={on}|oui)<meta name="robots" content="noindex, nofollow">]
    34[<meta name="description" content="(#TEXTE|couper{150}|attribut_html)" />]
    4 [<link rel="alternate" type="application/rss+xml" title="<:tickets:syndiquer_ticket:> [(#TITRE|texte_backend)]" href="(#URL_PAGE{backend-tickets}|parametre_url{id_ticket,#ID_TICKET})" />]
    5 [<link rel="alternate" type="application/rss+xml" title="<:tickets:syndiquer_tickets:>" href="(#URL_PAGE{backend-tickets})" />]
    6 <meta name="robots" content="none" />
     5[<link rel="alternate" type="application/rss+xml" title="<:tickets:syndiquer_ticket:> [(#TITRE|texte_backend)]" href="(#URL_PAGE{backend-tickets}|parametre_url{id_ticket,#ID_TICKET}|parametre_url{lang,#ENV{lang}})" />]
     6[<link rel="alternate" type="application/rss+xml" title="<:tickets:syndiquer_tickets:>" href="(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}})" />]
    77<INCLURE{fond=inclure/head}>
    88[<link rel="stylesheet" href="(#CHEMIN{tickets.css})" type="text/css" media="projection, screen, tv" />]
  • _plugins_/tickets/trunk/head/tickets.html

    r56965 r56968  
    11<title><:tickets:tickets:> - [(#NOM_SITE_SPIP|textebrut)]</title>
    22<meta name="description" content="<:tickets:titre_liste|couper{150}|textebrut:>" />
    3 <meta name="robots" content="none" />
    4 [<link rel="alternate" type="application/rss+xml" title="<:tickets:syndiquer_tickets:>" href="(#URL_PAGE{backend-tickets})" />]
     3[(#CONFIG{tickets/general/cacher_moteurs,on}|=={on}|oui)<meta name="robots" content="noindex, nofollow">]
     4[<link rel="alternate" type="application/rss+xml" title="<:tickets:syndiquer_tickets:>" href="(#URL_PAGE{backend-tickets}|parametre_url{lang,#ENV{lang}})" />]
    55<INCLURE{fond=inclure/head}>
    66[<link rel="stylesheet" href="(#CHEMIN{tickets.css})" type="text/css" media="projection, screen, tv" />]
     7
     8<script type="text/javascript">
     9        jQuery(document).ready(function(){
     10                jQuery('.formulaire_trier_tickets').hide();
     11                jQuery('.formulaire_trier_tickets').before('<div class="actions filtrer_tickets"><a href="#" class="afficher_filtres"><:tickets:lien_filtrer:><\/div>');
     12                jQuery('.afficher_filtres').click(function(){
     13                        var form = jQuery(this).parent().next('.formulaire_trier_tickets');
     14                        if(form.is(':hidden')){
     15                                jQuery(this).removeClass('off').addClass('on');
     16                                form.slideDown('slow');
     17                        }
     18                        else{
     19                                form.slideUp('slow');
     20                                jQuery(this).removeClass('on').addClass('off');
     21                        }
     22                        return false;
     23                });
     24        });
     25</script>
  • _plugins_/tickets/trunk/inc/notifier_assignation_ticket.php

    r50534 r56968  
    11<?php
     2
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
    25function inc_notifier_assignation_ticket($id_ticket,$options){
    36
  • _plugins_/tickets/trunk/inc/notifier_publication_ticket.php

    r50534 r56968  
    11<?php
     2
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
    25function inc_notifier_publication_ticket($id_ticket,$statut_nouveau='',$statut_ancien=''){
    36
  • _plugins_/tickets/trunk/inc/tickets_autoriser.php

    r33509 r56968  
    11<?php
     2
     3if (!defined("_ECRIRE_INC_VERSION")) return;
    24
    35/**
     
    5860 * (défini qui peut créer un ticket)
    5961 *
    60  * @param object $faire
    61  * @param object $type
    62  * @param object $id
    63  * @param object $qui
    64  * @param object $opt
    65  * @return
     62 * @param string $faire : l'action à faire
     63 * @param string $type : le type d'objet sur lequel porte l'action
     64 * @param int $id : l'identifiant numérique de l'objet
     65 * @param array $qui : les éléments de session de l'utilisateur en cours
     66 * @param array $opt : les options
     67 * @return boolean true/false : true si autorisé, false sinon
    6668 */
    6769function autoriser_ticket_ecrire_dist($faire, $type, $id, $qui, $opt){
     
    6971        $utiliser_defaut = true;
    7072
    71         if(autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt)){
    72                 return autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt);
     73        if(autoriser('modifier', $type, $id, $qui, $opt)){
     74                return autoriser('modifier', $type, $id, $qui, $opt);
    7375        }
    7476        // Utilisation du CFG si possible
     
    7880                        case 'webmestre':
    7981                                // Webmestres uniquement
    80                                 $autorise = tickets_verifier_webmestre($qui);
     82                                $autorise = ($qui['webmestre'] == 'oui');
    8183                                break;
    8284                        case 'par_statut':
     
    116118 * (défini qui peu assigner les tickets)
    117119 *
    118  * @param object $faire
    119  * @param object $type
    120  * @param object $id
    121  * @param object $qui
    122  * @param object $opt
    123  * @return
     120 * @param string $faire : l'action à faire
     121 * @param string $type : le type d'objet sur lequel porte l'action
     122 * @param int $id : l'identifiant numérique de l'objet
     123 * @param array $qui : les éléments de session de l'utilisateur en cours
     124 * @param array $opt : les options
     125 * @return boolean true/false : true si autorisé, false sinon
    124126 */
    125127function autoriser_ticket_assigner_dist($faire, $type, $id, $qui, $opt){
     
    136138                        case 'webmestre':
    137139                                // Webmestres uniquement
    138                                 $autorise = tickets_verifier_webmestre($qui);
     140                                $autorise = ($qui['webmestre'] == 'oui');
    139141                                break;
    140142                        case 'par_statut':
     
    173175 * (défini qui doit être notifié)
    174176 *
    175  * @param object $faire
    176  * @param object $type
    177  * @param object $id
    178  * @param object $qui
    179  * @param object $opt
    180  * @return
     177 * @param string $faire : l'action à faire
     178 * @param string $type : le type d'objet sur lequel porte l'action
     179 * @param int $id : l'identifiant numérique de l'objet
     180 * @param array $qui : les éléments de session de l'utilisateur en cours
     181 * @param array $opt : les options
     182 * @return boolean true/false : true si autorisé, false sinon
    181183 */
    182184function autoriser_ticket_commenter_dist($faire, $type, $id, $qui, $opt){
     
    193195                        case 'webmestre':
    194196                                // Webmestres uniquement
    195                                 $autorise = tickets_verifier_webmestre($qui);
     197                                $autorise = ($qui['webmestre'] == 'oui');
    196198                                break;
    197199                        case 'par_statut':
     
    232234 * - Les personnes correspondant à la configuration
    233235 *
    234  * @param object $faire
    235  * @param object $type
    236  * @param object $id
    237  * @param object $qui
    238  * @param object $opt
    239  * @return
     236 * @param string $faire : l'action à faire
     237 * @param string $type : le type d'objet sur lequel porte l'action
     238 * @param int $id : l'identifiant numérique de l'objet
     239 * @param array $qui : les éléments de session de l'utilisateur en cours
     240 * @param array $opt : les options
     241 * @return boolean true/false : true si autorisé, false sinon
    240242 */
    241243function autoriser_ticket_modifier_dist($faire, $type, $id, $qui, $opt){
     
    243245        $utiliser_defaut = true;
    244246
    245         // Si l'auteur en question est l'auteur assigné au ticket,
    246         // il peut modifier le ticket
    247         if(intval($id)){
    248                 $id_assigne = sql_getfetsel('id_assigne','spip_tickets','id_ticket='.intval($id));
    249                 if($id_assigne && ($id_assigne == $qui['id_auteur'])){
    250                         return true;
    251                 }
    252         }
    253         // Utilisation du CFG si possible
    254         if(function_exists('lire_config')){
    255                 $type = lire_config('tickets/autorisations/modifier_type', 'par_statut');
    256                 switch($type) {
    257                         case 'webmestre':
    258                                 // Webmestres uniquement
    259                                 $autorise = tickets_verifier_webmestre($qui);
    260                                 break;
    261                         case 'par_statut':
    262                                 // Traitement spécifique pour la valeur 'tous'
    263                                 if(in_array('tous',lire_config('tickets/autorisations/modifier_statuts',array()))){
    264                                         return true;
    265                                 }
    266                                 // Autorisation par statut
    267                                 $autorise = in_array($qui['statut'], lire_config('tickets/autorisations/modifier_statuts',array('0minirezo')));
    268                                 break;
    269                         case 'par_auteur':
    270                                 // Autorisation par id d'auteurs
    271                                 $autorise = in_array($qui['id_auteur'], lire_config('tickets/autorisations/modifier_auteurs',array()));
    272                                 break;
    273                 }
    274                 if($autorise == true){
    275                         return $autorise;
    276                 }
    277         }
    278 
    279         // Si pas de configuration CFG, on utilise des valeurs par défaut
    280         if($type){
    281                 $utiliser_defaut = false;
    282         }
    283 
    284         // Si $utiliser_defaut = true, on utilisera les valeurs par défaut
    285         // Sinon on ajoute la possibilité de régler par define
    286         $liste = definir_autorisations_tickets('modifier',$utiliser_defaut);
    287         if ($liste['statut'])
    288                 $autorise = in_array($qui['statut'], $liste['statut']);
    289         else if ($liste['auteur'])
    290                 $autorise = in_array($qui['id_auteur'], $liste['auteur']);
     247        if(is_numeric($id)){
     248                // Si l'auteur en question est l'auteur assigné au ticket,
     249                // il peut modifier le ticket
     250                if(intval($id)){
     251                        $id_assigne = sql_getfetsel('id_assigne','spip_tickets','id_ticket='.intval($id));
     252                        if($id_assigne && ($id_assigne == $qui['id_auteur'])){
     253                                return true;
     254                        }
     255                }
     256                // Utilisation du CFG si possible
     257                if(function_exists('lire_config')){
     258                        $type = lire_config('tickets/autorisations/modifier_type', 'par_statut');
     259                        switch($type) {
     260                                case 'webmestre':
     261                                        // Webmestres uniquement
     262                                        $autorise = ($qui['webmestre'] == 'oui');
     263                                        break;
     264                                case 'par_statut':
     265                                        // Traitement spécifique pour la valeur 'tous'
     266                                        if(in_array('tous',lire_config('tickets/autorisations/modifier_statuts',array()))){
     267                                                return true;
     268                                        }
     269                                        // Autorisation par statut
     270                                        $autorise = in_array($qui['statut'], lire_config('tickets/autorisations/modifier_statuts',array('0minirezo')));
     271                                        break;
     272                                case 'par_auteur':
     273                                        // Autorisation par id d'auteurs
     274                                        $autorise = in_array($qui['id_auteur'], lire_config('tickets/autorisations/modifier_auteurs',array()));
     275                                        break;
     276                        }
     277                        if($autorise == true){
     278                                return $autorise;
     279                        }
     280                }
     281       
     282                // Si pas de configuration CFG, on utilise des valeurs par défaut
     283                if($type){
     284                        $utiliser_defaut = false;
     285                }
     286       
     287                // Si $utiliser_defaut = true, on utilisera les valeurs par défaut
     288                // Sinon on ajoute la possibilité de régler par define
     289                $liste = definir_autorisations_tickets('modifier',$utiliser_defaut);
     290                if ($liste['statut'])
     291                        $autorise = in_array($qui['statut'], $liste['statut']);
     292                else if ($liste['auteur'])
     293                        $autorise = in_array($qui['id_auteur'], $liste['auteur']);
     294                if(!$autorise){
     295                        $id_auteur = sql_getfetsel('id_auteur','spip_tickets','id_ticket='.intval($id));
     296                        if($id_auteur == $qui['id_auteur'])
     297                                $autorise = true;
     298                }
     299        }
    291300        return $autorise;
    292301}
    293 
    294 function tickets_verifier_webmestre($qui){
    295         $webmestre =  false;
    296         $webmestre = in_array($qui['id_auteur'],explode(':', _ID_WEBMESTRES));
    297         if(!$webmestre && ($qui['webmestre']=='oui')){
    298                 $webmestre =  true;
    299         }
    300         return $webmestre;
    301 }
    302302?>
  • _plugins_/tickets/trunk/inclure/liste_commentaires_tickets.html

    r56964 r56968  
    99[<h3>(#ENV{titre})[ ((#GRAND_TOTAL))]</h3>]
    1010<div class="ticket">
     11[(#ENV{recherche}|oui)
     12<p><:tickets:champ_recherche:> #ENV{recherche}</p>
     13]
    1114[(#ANCRE_PAGINATION)]
    1215[<p class="pagination">(#PAGINATION)</p>]
    1316[(#COMPTEUR_BOUCLE|>{10}|oui)
    14 <p class="actions">
     17<p class="changer_pagination">
    1518        <:tickets:label_paginer_par:>
    16         [(#ENV{pagination_[(#GET{hash_pagination})],#ENV{pagination,10}}|=={10}|?{10,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],10}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">10</a>})]
     19        [(#ENV{pagination_[(#GET{hash_pagination})],#ENV{pagination,10}}|=={10}|?{10,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],10}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">10</a>})]
    1720        <span class="sep">|</span>
    18         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={50}|?{50,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],50}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">50</a>})]
     21        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={50}|?{50,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],50}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">50</a>})]
    1922        [(#COMPTEUR_BOUCLE|>{50}|oui)<span class="sep">|</span>
    20         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={100}|?{100,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],100}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">100</a>})]]
     23        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={100}|?{100,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],100}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">100</a>})]]
    2124        [(#COMPTEUR_BOUCLE|>{100}|oui)<span class="sep">|</span>
    22         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={200}|?{200,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],200}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">200</a>})]]
     25        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={200}|?{200,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],200}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">200</a>})]]
    2326</p>]
    2427<table class="spip">
     
    4144        </thead>
    4245        <tbody>
    43         <BOUCLE_detaillee(FORUMS){objet=ticket}{tri #ENV{order,date},#GET{defaut_tri}}{pagination #ENV{pagination_#GET{hash_pagination},#ENV{pagination,10}} #GET{hash_pagination}}>
     46        <BOUCLE_detaillee(FORUMS){recherche?}{objet=ticket}{tri #ENV{order,date},#GET{defaut_tri}}{pagination #ENV{pagination_#GET{hash_pagination},#ENV{pagination,10}} #GET{hash_pagination}}>
    4447                <tr class="[(#COMPTEUR_BOUCLE|alterner{odd,even})]">
    4548                        <td><img[ src="(#CHEMIN{[prive/images/(#INFO_STATUT{ticket, #ID_OBJET}|tickets_icone_statut)]})"][ alt="(#INFO_STATUT{ticket, #ID_OBJET}|tickets_texte_statut)"][ title="(#INFO_STATUT{ticket, #ID_OBJET}|tickets_texte_statut)"] /></td>
     
    5255</table>
    5356[(#COMPTEUR_BOUCLE|>{10}|oui)
    54 <p class="actions">
     57<p class="changer_pagination">
    5558        <:tickets:label_paginer_par:>
    56         [(#ENV{pagination_[(#GET{hash_pagination})],#ENV{pagination,10}}|=={10}|?{10,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],10}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">10</a>})]
     59        [(#ENV{pagination_[(#GET{hash_pagination})],#ENV{pagination,10}}|=={10}|?{10,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],10}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">10</a>})]
    5760        <span class="sep">|</span>
    58         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={50}|?{50,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],50}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">50</a>})]
     61        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={50}|?{50,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],50}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">50</a>})]
    5962        [(#COMPTEUR_BOUCLE|>{50}|oui)<span class="sep">|</span>
    60         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={100}|?{100,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],100}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">100</a>})]]
     63        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={100}|?{100,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],100}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">100</a>})]]
    6164        [(#COMPTEUR_BOUCLE|>{100}|oui)<span class="sep">|</span>
    62         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={200}|?{200,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],200}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">200</a>})]]
     65        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={200}|?{200,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],200}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">200</a>})]]
    6366</p>]
    6467[<p class="pagination">(#PAGINATION)</p>]
  • _plugins_/tickets/trunk/inclure/liste_tickets.html

    r50430 r56968  
     1[(#REM)
     2
     3        Inclure créant une liste de tickets
     4       
     5        Les paramètres possibles sont :
     6       
     7        -* titre = string                               Le titre du bloc (sinon le bloc n'aura pas de titre)
     8        -* date_sens = -1|1                             Le sens de tri de la date
     9        -* id_auteur = int                              Un id_auteur numérique
     10        -* auteurs = array                              Un array d'id_auteur
     11        -* id_auteur_non = int/array    Un id numérique ou un array des id_auteur dont on ne souhaite pas afficher les tickets
     12        -* id_assigne = int                             Un id_auteur numérique à qui aurait été assigné les tickets
     13        -* assignes = array                             Un array d'id_assigne
     14        -* id_assigne_non = int/array   Un id numérique ou un array des id_assigne que l'on ne souhaite pas voir
     15        -* tracker = int                                L'id du tracker (1|2|3|4), anciennement type
     16        -* trackers = array                             Un array de trackers
     17        -* severite = int                               L'id de severite
     18        -* severites = array                    Un array de severites
     19        -* statut = string                              Le statut
     20        -* statuts = array                              Un array de statuts
     21        -* version = string                             La version
     22        -* jalon = string                               Le jalon
     23        -* composant = string                   Le composant
     24        -* projet = string                              Le projet
     25        -* sticked = oui|''                             N'afficher que les tickets épinglés ou pas
     26        -* order = string                               Le paramètre de tri (défaut date mais peut être maj|titre|tracker|jalon|version|composant|projet|severite|id_ticket)
     27        -* pagination = int                             Le nombre d'élément à afficher dans la pagination
     28        -* recherche = string                   Une chaine recherchée dans les tickets
     29        -* afficher_filtres                             Affiche les filtres passés en argument
     30        -* date_debut = date (sql)              La date des premiers à afficher
     31        -* date_fin = date (sql)                La date des derniers à afficher
     32        -* class = string                               Une classe spécifique appliquée au bloc parent
     33]
     34
    135#CACHE{0}
    236[(#SET{defaut_tri,#ARRAY{
     
    438        maj,#ENV{date_sens,-1},
    539        titre,1,
    6         type,1,
     40        tracker,1,
    741        jalon,1,
    842        version,1,
     
    2155]
    2256</BOUCLE_champs_optionnels>
     57#SET{tout_assignes,#ARRAY}
     58<BOUCLE_tout_assignes(TICKETS){fusion id_assigne}>#SET{tout_assignes,#GET{tout_assignes}|push{#ID_ASSIGNE}}</BOUCLE_tout_assignes>
     59#SET{tout_auteurs,#ARRAY}
     60<BOUCLE_tout_auteurs(TICKETS){fusion id_auteur}>#SET{tout_auteurs,#GET{tout_auteurs}|push{#ID_AUTEUR}}</BOUCLE_tout_auteurs>
     61#SET{tout_statuts,#ARRAY}
     62<BOUCLE_statuts(TICKETS){fusion statut}>#SET{tout_statuts,#GET{tout_statuts}|push{#STATUT}}</BOUCLE_statuts>
     63#SET{tout_trackers,#ARRAY}
     64<BOUCLE_trackers(TICKETS){fusion tracker}>#SET{tout_trackers,#GET{tout_trackers}|push{#TRACKER}}</BOUCLE_trackers>
     65#SET{tout_severites,#ARRAY}
     66<BOUCLE_severites(TICKETS){fusion severite}>#SET{tout_severites,#GET{tout_severites}|push{#SEVERITE}}</BOUCLE_severites>
     67
    2368<B_detaillee>
     69<div class="tickets[ (#ENV{class})]">
    2470[<h3>(#ENV{titre})[ ((#GRAND_TOTAL))]</h3>]
     71
     72<BOUCLE_si_afficher_filtres(CONDITION){si #ENV{afficher_filtres}|=={oui}|oui}>
     73        [(#SET{url_defiltrer,[(#SELF|parametre_url{recherche|date_debut|date_fin|statut|trackers|tracker|projet|composant|jalon|severite|severites|version|auteurs|id_auteur|assignes|id_assigne|navigateur,''})]})]
     74        [(#ENV{recherche}|oui)
     75                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{recherche,''})]})]
     76                <p><:tickets:champ_recherche:> #ENV{recherche}</p>
     77        ][(#ENV{date_debut}|oui)
     78                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{date_debut,''})]})]
     79                <p><:tickets:champ_date_debut:> [(#ENV{date_debut}|affdate)]</p>
     80        ][(#ENV{date_fin}|oui)
     81                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{date_fin,''})]})]
     82                <p><:tickets:champ_date_fin:> [(#ENV{date_fin}|affdate)]</p>
     83        ]
     84        <B_pour_statuts>
     85        [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{statuts,''})]})]
     86        <p><:tickets:champ_statut:>
     87        <BOUCLE_pour_statuts(POUR){tableau #ENV{statuts,#ARRAY}}{', '}>[(#VALEUR|tickets_texte_statut)]</BOUCLE_pour_statuts>
     88        </p>
     89        </B_pour_statuts>
     90        <B_pour_severites>
     91        [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{severites,''})]})]
     92        <p><:tickets:champ_type:>
     93        <BOUCLE_pour_severites(POUR){tableau #ENV{severites}}{', '}>[(#VALEUR|tickets_texte_severite)]</BOUCLE_pour_severites>
     94        </p>
     95        </B_pour_severites>
     96        [(#ENV{severite}|oui)
     97                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{severite,''})]})]
     98                <p><:tickets:champ_severite:> [(#ENV{severite}|tickets_texte_severite)]</p>
     99        ]
     100        <B_pour_trackers>
     101        [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{trackers,''})]})]
     102        <p><:tickets:champ_type:>
     103        <BOUCLE_pour_trackers(POUR){tableau #ENV{trackers}}{', '}>[(#VALEUR|tickets_texte_tracker)]</BOUCLE_pour_trackers>
     104        </p>
     105        </B_pour_trackers>
     106        [(#ENV{tracker}|oui)
     107                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{tracker,''})]})]
     108                <p><:tickets:champ_tracker:> [(#ENV{tracker}|tickets_texte_tracker)]</p>
     109        ]
     110        [(#ENV{projet}|oui)
     111                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{projet,''})]})]
     112                <p><:tickets:champ_projet:> #ENV{projet}</p>
     113        ][(#ENV{composant}|oui)
     114                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{composant,''})]})]
     115                <p><:tickets:champ_composant:> #ENV{composant}</p>
     116        ][(#ENV{jalon}|oui)
     117                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{jalon,''})]})]
     118                <p><:tickets:champ_jalon:> #ENV{jalon}</p>
     119        ][(#ENV{version}|oui)
     120                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{version,''})]})]
     121                <p><:tickets:champ_version:> #ENV{version}</p>
     122        ][(#ENV{navigateur}|oui)
     123                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{navigateur,''})]})]
     124                <p><:tickets:champ_navigateur:> #ENV{navigateur}</p>
     125        ]
     126        <B_auteurs>
     127                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{auteurs,''})]})]
     128                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{id_auteur,''})]})]
     129                <p><:tickets:champ_id_auteur:>
     130                <BOUCLE_auteurs(AUTEURS){id_auteur IN #ENV{auteurs,#ENV{id_auteur}}}{', '}>
     131                #NOM
     132                </BOUCLE_auteurs>
     133                </p>
     134        </B_auteurs>
     135        <B_assignes>
     136                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{assignes,''})]})]
     137                [(#SET{url_defiltrer,[(#GET{url_defiltrer}|parametre_url{id_assigne,''})]})]
     138                <p><:tickets:champ_id_assigne:>
     139                <BOUCLE_assignes(AUTEURS){id_auteur IN #ENV{assignes,#ENV{id_assigne}}}{', '}>
     140                #NOM
     141                </BOUCLE_assignes>
     142                </p>
     143        </B_assignes>
     144        [(#ENV{url_defiltrer}|=={oui}|oui)
     145        <div class="actions">
     146                <a href="#GET{url_defiltrer}"><:tickets:lien_supprimer_filtres:></a>
     147        </div>]
     148</BOUCLE_si_afficher_filtres>
    25149<div class="ticket">
    26150[(#ANCRE_PAGINATION)]
    27151[<p class="pagination">(#PAGINATION)</p>]
    28152[(#COMPTEUR_BOUCLE|>{10}|oui)
    29 <p class="actions">
     153<p class="changer_pagination">
    30154        <:tickets:label_paginer_par:>
    31         [(#ENV{pagination_[(#GET{hash_pagination})],#ENV{pagination,10}}|=={10}|?{10,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],10}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">10</a>})]
     155        [(#ENV{pagination_[(#GET{hash_pagination})],#ENV{pagination,10}}|=={10}|?{10,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],10}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">10</a>})]
    32156        <span class="sep">|</span>
    33         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={50}|?{50,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],50}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">50</a>})]
     157        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={50}|?{50,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],50}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">50</a>})]
    34158        [(#COMPTEUR_BOUCLE|>{50}|oui)<span class="sep">|</span>
    35         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={100}|?{100,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],100}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">100</a>})]]
     159        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={100}|?{100,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],100}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">100</a>})]]
    36160        [(#COMPTEUR_BOUCLE|>{100}|oui)<span class="sep">|</span>
    37         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={200}|?{200,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],200}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">200</a>})]]
     161        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={200}|?{200,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],200}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">200</a>})]]
    38162</p>]
    39163<table class="spip">
     
    53177                                        [(#ENV{sens_detaillee}|=={-1}|oui)[(#TRI{'<',<:tickets:champ_titre:>,ajax})]]]
    54178                        </th>
    55                         [(#ENV{type}|non)<th>
    56                                 [(#ENV{tri_detaillee}|=={type}|non)[(#TRI{type,<:tickets:champ_type:>,ajax})]]
    57                                 [(#ENV{tri_detaillee}|=={type}|oui)
     179                        [(#ENV{tracker}|non)<th>
     180                                [(#ENV{tri_detaillee}|=={tracker}|non)[(#TRI{tracker,<:tickets:champ_type:>,ajax})]]
     181                                [(#ENV{tri_detaillee}|=={tracker}|oui)
    58182                                        [(#ENV{sens_detaillee}|=={1}|ou{#ENV{sens_detaillee}|non}|oui)[(#TRI{'>',<:tickets:champ_type:>,ajax})]]
    59183                                        [(#ENV{sens_detaillee}|=={-1}|oui)[(#TRI{'<',<:tickets:champ_type:>,ajax})]]]
     
    111235                </tr>
    112236        </thead>
    113         <tbody>
    114         <BOUCLE_detaillee(TICKETS){id_auteur?}{id_assigne?}{statut IN #ENV{statut,.*}}{type?}{version?}{jalon?}{composant?}{projet?}{tri #ENV{order,date},#GET{defaut_tri}}{pagination #ENV{pagination_#GET{hash_pagination},#ENV{pagination,10}} #GET{hash_pagination}}>
     237        <tbody
     238        <BOUCLE_detaillee(TICKETS){recherche?}{id_auteur?}{id_auteur IN #ENV{auteurs,#GET{tout_auteurs}}}{id_auteur !IN #ENV{id_auteur_non,#ARRAY{0,999999999999}}}{id_assigne?}{id_assigne IN #ENV{assignes,#GET{tout_assignes}}}{id_assigne !IN #ENV{id_assigne_non,#ARRAY{0,999999999999}}}{statut IN #ENV{statuts,#GET{tout_statuts}}}{tracker?}{tracker IN #ENV{trackers,#GET{tout_trackers}}}{severite?}{severite IN #ENV{severites,#GET{tout_severites}}}{version?}{jalon?}{composant?}{projet?}{sticked?}{tri #ENV{order,date},#GET{defaut_tri}}{date > #ENV{date_debut,2000-01-01}}{date < #ENV{date_fin,2100-01-01}}{pagination #ENV{pagination_#GET{hash_pagination},#ENV{pagination,10}} #GET{hash_pagination}}>
    115239                <tr class="[(#COMPTEUR_BOUCLE|alterner{odd,even})]">
    116                         <td><img[ src="(#CHEMIN{[prive/images/(#STATUT|tickets_icone_statut)]})"][ alt="(#STATUT|tickets_texte_statut)"][ title="(#STATUT|tickets_texte_statut)"] /></td>
     240                        <td>[(#STATUT|tickets_icone_statut{true})]</td>
    117241                        <td><strong class="#EDIT{titre}"><a href="[(#URL_TICKET)]">##ID_TICKET</a></strong></td>
    118242                        <td>
     
    120244                                [(#TEXTE|couper{160})]
    121245                        </td>
    122                         [(#REM) Si le type est explicite, on ne l'affiche pas ]
    123                         [(#ENV{type}|non)<td>[(#TYPE|tickets_texte_type)]</td>]
     246                        [(#REM) Si le tracker est explicite, on ne l'affiche pas ]
     247                        [(#ENV{tracker}|non)<td>[(#TRACKER|tickets_texte_tracker)]</td>]
    124248                        <td>
    125                                 <img[ src="(#CHEMIN{[prive/images/(#SEVERITE|tickets_icone_severite)]})"][ alt="(#SEVERITE|tickets_texte_severite)"][ title="(#STATUT|tickets_texte_severite)"] />
     249                                [(#SEVERITE|tickets_icone_severite{true})]
    126250                                [&nbsp;(#SEVERITE|tickets_texte_severite)]
    127251                        </td>
     
    145269</table>
    146270[(#COMPTEUR_BOUCLE|>{10}|oui)
    147 <p class="actions">
     271<p class="changer_pagination">
    148272        <:tickets:label_paginer_par:>
    149         [(#ENV{pagination_[(#GET{hash_pagination})],#ENV{pagination,10}}|=={10}|?{10,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],10}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">10</a>})]
     273        [(#ENV{pagination_[(#GET{hash_pagination})],#ENV{pagination,10}}|=={10}|?{10,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],10}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">10</a>})]
    150274        <span class="sep">|</span>
    151         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={50}|?{50,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],50}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">50</a>})]
     275        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={50}|?{50,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],50}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">50</a>})]
    152276        [(#COMPTEUR_BOUCLE|>{50}|oui)<span class="sep">|</span>
    153         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={100}|?{100,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],100}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">100</a>})]]
     277        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={100}|?{100,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],100}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">100</a>})]]
    154278        [(#COMPTEUR_BOUCLE|>{100}|oui)<span class="sep">|</span>
    155         [(#ENV{pagination_[(#GET{hash_pagination})]}|=={200}|?{200,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],200}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax">200</a>})]]
     279        [(#ENV{pagination_[(#GET{hash_pagination})]}|=={200}|?{200,<a href="[(#SELF|parametre_url{pagination_[(#GET{hash_pagination})],200}|parametre_url{debut[(#GET{hash_pagination})],''})]" class="ajax bouton">200</a>})]]
    156280</p>]
    157281[<p class="pagination">(#PAGINATION)</p>]
    158282</div>
     283</div>
    159284</B_detaillee>
  • _plugins_/tickets/trunk/inclure/rss-item-ticket.html

    r50431 r56968  
    2727                </content:encoded>
    2828]
     29                <comments>[(#URL_TICKET|ancre_url{forum}|url_absolue)]</comments>
     30[(#REM)
     31        Le bloc qui suit diffuse l'adresse des documents associes aux tickets ;
     32        ajouter par ex. {extension=mp3} pour limiter a un certain type de document.
     33]               <BOUCLE_documents(DOCUMENTS){id_ticket}{mode=document}{doublons}>[
     34                <enclosure url="(#URL_DOCUMENT|url_absolue|unique)"[ length="(#TAILLE)"][ type="(#MIME_TYPE)"] />]
     35                </BOUCLE_documents>
    2936        </item>
    3037</BOUCLE_un_ticket>
  • _plugins_/tickets/trunk/lang/tickets_fr.php

    r56633 r56968  
    3333        'cfg_lbl_case_selecteur_navigateur' => 'Disposer d\'un sélecteur de navigateur dans le formulaire d\'édition de ticket',
    3434        'cfg_lbl_composants' => 'Composants',
     35        'cfg_lbl_desactiver_public' => 'Désactiver l\'accès public',
    3536        'cfg_lbl_forums_publics' => 'Commentaires sur les tickets',
    3637        'cfg_lbl_jalons' => 'Jalons',
     
    5051        'cfg_titre_tickets' => 'Tickets',
    5152        'champ_assigner' => 'Assigner à :',
    52         'champ_composant' => 'Composant:',
     53        'champ_composant' => 'Composant :',
    5354        'champ_createur' => 'Créé par :',
    5455        'champ_date' => 'Date :',
     
    148149        'statut_mis_a_jour' => 'Statut mis à jour',
    149150        'statut_ouvert' => 'Ouvert et discuté',
     151        'statut_poubelle' => 'À la poubelle',
    150152        'statut_redac' => 'En cours de rédaction',
    151153        'statut_resolu' => 'Résolu',
     
    161163        'tickets_derniers_commentaires' => 'Les derniers commentaires',
    162164        'tickets_general' => 'Général',
    163         'tickets_sur_inscription' => '
    164                 L\'écriture des tickets ou commentaires n\'est
    165                 possible qu\'aux personnes identifiées.
    166         ',
     165        'tickets_sur_inscription' => "L'écriture des tickets ou commentaires n'est possible qu'aux personnes identifiées.",
     166        'tickets_sur_inscription_droits' => 'Les droits dont vous disposez sont insuffisants.',
    167167        'tickets_traites' => 'Tous les tickets traités',
    168168        'titre' => 'Tickets, suivi de bugs',
  • _plugins_/tickets/trunk/plugin.xml

    r56965 r56968  
    11<plugin>
     2        <nom>
    23        <nom>
    34                <multi>
     
    1415                </multi>
    1516        </slogan>
    16         <auteur>ARNO*, Kent1, Eric Lupinacci</auteur>
     17        <auteur>ARNO*, [kent1->http://www.kent1.info], Eric Lupinacci</auteur>
    1718        <licence>GPL v3</licence>
    1819        <description>
     
    2425        </description>
    2526        <icon>imgs/logo-bugs.png</icon>
    26 
     27        <lien>http://www.spip-contrib.net/Tickets-suivi-de-bugs</lien>
     28       
    2729        <version>2.0.0</version>
    28         <version_base>1.1</version_base>
     30        <version_base>1.4</version_base>
    2931        <etat>dev</etat>
    3032
     
    4951        </pipeline>
    5052        <pipeline>
    51                 <nom>affiche_droite</nom>
    52                 <action>droite</action>
    53                 <inclure>tickets_pipelines.php</inclure>
    54         </pipeline>
    55         <pipeline>
    5653                <nom>affiche_gauche</nom>
    5754                <action>gauche</action>
     
    6966        <pipeline>
    7067                <nom>objets_extensibles</nom>
    71                 <inclure>tickets_pipelines.php</inclure>
    72         </pipeline>
    73         <pipeline>
    74                 <nom>revisions_liste_objets</nom>
    7568                <inclure>tickets_pipelines.php</inclure>
    7669        </pipeline>
     
    111104                <inclure>tickets_pipelines.php</inclure>
    112105        </pipeline>
    113 
     106        <pipeline>
     107                <nom>notifications_destinataires</nom>
     108                <inclure>tickets_pipelines.php</inclure>
     109        </pipeline>
     110       
    114111        <bouton id='tickets' parent='bando_publication'>
    115112                <icone>images/ticket-16.png</icone>
  • _plugins_/tickets/trunk/prive/contenu/inc_classement_tous.html

    r50618 r56968  
    2222                <th>[(#TRI{id_auteur,Par,ajax})]</th>
    2323                <th>[(#TRI{titre,Sujet,ajax})]</th>
    24                 <th>[(#TRI{type,Type,ajax})]</th>
     24                <th>[(#TRI{tracker,Tracker,ajax})]</th>
    2525                <th>[(#TRI{severite,Séverité,ajax})]</th>
    2626                <th>[(#TRI{statut,Statut,ajax})]</th>
     
    5656            <td class="arial2 #EDIT{titre}[(#STATUT|in_array{#ARRAY{0,ferme,1,resolu}}|oui) del]"[ title="(#GET{discussion}|texte_backend)"]><a href="?exec=ticket_afficher&amp;id_ticket=#ID_TICKET">#TITRE</a><br />[(#TEXTE|PtoBR|couper{100})]</td>
    5757            <td class="arial0">
    58                 [(#TYPE|tickets_texte_type)]
     58                [(#TRACKER|tickets_texte_tracker)]
    5959            </td>                       
    6060            <td class="arial0 #EDIT{severite}">
  • _plugins_/tickets/trunk/prive/contenu/inc_classement_type.html

    r28154 r56968  
    1 [(#REM) Affiche les listes des tickets ouverts classes par type:
     1[(#REM) Affiche les listes des tickets ouverts classes par tracker:
    22        - probleme
    33        - tache
     
    55]
    66#CACHE{0}
    7 <INCLURE{fond=prive/contenu/inc_liste_detaillee}{ajax}{env}{titre=<:tickets:type_probleme_long:>}{statut=ouvert}{type=1}{bloc=_bloc1}>
    8 <INCLURE{fond=prive/contenu/inc_liste_detaillee}{ajax}{env}{titre=<:tickets:type_tache_long:>}{statut=ouvert}{type=3}{bloc=_bloc2}>
    9 <INCLURE{fond=prive/contenu/inc_liste_detaillee}{ajax}{env}{titre=<:tickets:type_amelioration_long:>}{statut=ouvert}{type=2}{bloc=_bloc3}>
     7<INCLURE{fond=prive/contenu/inc_liste_detaillee}{ajax}{env}{titre=<:tickets:type_probleme_long:>}{statut=ouvert}{tracker=1}{bloc=_bloc1}>
     8<INCLURE{fond=prive/contenu/inc_liste_detaillee}{ajax}{env}{titre=<:tickets:type_tache_long:>}{statut=ouvert}{tracker=3}{bloc=_bloc2}>
     9<INCLURE{fond=prive/contenu/inc_liste_detaillee}{ajax}{env}{titre=<:tickets:type_amelioration_long:>}{statut=ouvert}{tracker=2}{bloc=_bloc3}>
  • _plugins_/tickets/trunk/prive/contenu/inc_liste_detaillee.html

    r50326 r56968  
    1313                <tr style="color:#999;">
    1414                        <th colspan="3" style="text-align:center;"><:tickets:champ_titre:></th>
    15                         [(#ENV{type}|non)
     15                        [(#ENV{tracker}|non)
    1616                        <th><:tickets:champ_type:></th>
    1717                        ]
     
    2121        </thead>
    2222        <tbody>
    23 <BOUCLE_detaillee(TICKETS){par severite}{par type}{!par date}{pagination 10 #ENV{bloc}}{id_auteur?}{id_assigne?}{statut?}{type?}{jalon?}>
     23<BOUCLE_detaillee(TICKETS){par severite}{par tracker}{!par date}{pagination 10 #ENV{bloc}}{id_auteur?}{id_assigne?}{statut?}{tracker?}{jalon?}>
    2424                <tr class="tr_liste">
    2525                        <td style="width: 10px;"><img[ src="(#CHEMIN{[prive/images/(#STATUT|tickets_icone_statut)]})"][ alt="(#STATUT|tickets_texte_statut)"] /></td>
    2626                        <td class="arial1"><b>##ID_TICKET</b></td>
    2727                        <td class="arial2"><a href="[(#ID_TICKET|generer_url_entite{ticket})]">#TITRE</a></td>
    28                         [(#REM) Si le type est explicite, on ne l'affiche pas ]
    29                         [(#ENV{type}|non)
    30                         <td class="arial0">[(#TYPE|tickets_texte_type)]</td>
     28                        [(#REM) Si le tracker est explicite, on ne l'affiche pas ]
     29                        [(#ENV{tracker}|non)
     30                        <td class="arial0">[(#TRACKER|tickets_texte_tracker)]</td>
    3131                        ]
    3232                        <td class="arial0">
  • _plugins_/tickets/trunk/prive/contenu/inc_liste_detaillee_non_assigne.html

    r50326 r56968  
    1313                <tr style="color:#999;">
    1414                        <th colspan="3" style="text-align:center;"><:tickets:champ_titre:></th>
    15                         [(#ENV{type}|non)
     15                        [(#ENV{tracker}|non)
    1616                        <th><:tickets:champ_type:></th>
    1717                        ]
     
    2121        </thead>
    2222        <tbody>
    23 <BOUCLE_detaillee(TICKETS){par severite}{par type}{!par date}{pagination 10 #ENV{bloc}}{id_auteur?}{id_assigne=0}{statut?}{type?}{jalon?}>
     23<BOUCLE_detaillee(TICKETS){par severite}{par tracker}{!par date}{pagination 10 #ENV{bloc}}{id_auteur?}{id_assigne=0}{statut?}{tracker?}{jalon?}>
    2424                <tr class="tr_liste">
    2525                        <td style="width: 10px;"><img[ src="(#CHEMIN{[prive/images/(#STATUT|tickets_icone_statut)]})"][ alt="(#STATUT|tickets_texte_statut)"] /></td>
    2626                        <td class="arial1"><b>##ID_TICKET</b></td>
    2727                        <td class="arial2"><a href="[(#ID_TICKET|generer_url_entite{ticket})]">#TITRE</a></td>
    28                         [(#REM) Si le type est explicite, on ne l'affiche pas ]
    29                         [(#ENV{type}|non)
    30                         <td class="arial0">[(#TYPE|tickets_texte_type)]</td>
     28                        [(#REM) Si le tracker est explicite, on ne l'affiche pas ]
     29                        [(#ENV{tracker}|non)
     30                        <td class="arial0">[(#TRACKER|tickets_texte_tracker)]</td>
    3131                        ]
    3232                        <td class="arial0">
  • _plugins_/tickets/trunk/prive/contenu/ticket_afficher.html

    r50414 r56968  
    2424                                <:tickets:champ_severite:> <strong>(#SEVERITE|tickets_texte_severite)</strong>
    2525                        </div>]
    26                         [<:tickets:champ_type:> <strong>(#TYPE|tickets_texte_type)</strong>]
     26                        [<:tickets:champ_type:> <strong>(#TRACKER|tickets_texte_tracker)</strong>]
    2727                </div>
    2828
  • _plugins_/tickets/trunk/prive/contenu/tickets.html

    r39918 r56968  
    1515                <a href="[(#SELF|parametre_url{classement,asuivre})]" class="cellule-h">[(#CHEMIN{imgs/bugs.png}|image_reduire{24}|vider_attribut{style}|inserer_attribut{style,vertical-align:middle;}|inserer_attribut{alt,<:tickets:classement_asuivre:>})] <:tickets:classement_asuivre:></a>
    1616        </li>
    17         <li class="[(#ENV{classement}|=={type}|?{fondgrison,fondgris})]">
    18                 <a href="[(#SELF|parametre_url{classement,type})]" class="cellule-h">[(#CHEMIN{imgs/bugs.png}|image_reduire{24}|vider_attribut{style}|inserer_attribut{style,vertical-align:middle;}|inserer_attribut{alt,<:tickets:classement_type:>})] <:tickets:classement_type:></a>
     17        <li class="[(#ENV{classement}|=={tracker}|?{fondgrison,fondgris})]">
     18                <a href="[(#SELF|parametre_url{classement,tracker})]" class="cellule-h">[(#CHEMIN{imgs/bugs.png}|image_reduire{24}|vider_attribut{style}|inserer_attribut{style,vertical-align:middle;}|inserer_attribut{alt,<:tickets:classement_type:>})] <:tickets:classement_type:></a>
    1919        </li>
    2020        <li class="[(#ENV{classement}|=={assigne}|?{fondgrison,fondgris})]">
  • _plugins_/tickets/trunk/prive/style_prive_plugin_tickets.html

    r50618 r56968  
    5959
    6060.tickets #navigation { display:none; }
    61 .tickets #conteneur { width:100%; }
    62 .tickets #contenu { width:100%; }
     61.tickets #conteneur { width:90%;overflow:auto; }
     62.tickets #contenu { width:100%;margin: 0; }
  • _plugins_/tickets/trunk/tickets_fonctions.php

    r50618 r56968  
    11<?php
    22
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
     5/**
     6 * <BOUCLE(TICKETS)>
     7 */
     8function boucle_TICKETS_dist($id_boucle, &$boucles) {
     9        $boucle = &$boucles[$id_boucle];
     10        $id_table = $boucle->id_table;
     11        $mstatut = $id_table .'.statut';
     12
     13        // Restreindre aux elements considérés comme publiés soit pas en :
     14        // -* poubelle (poubelle)
     15        // -* en cours de rédac (redac)
     16        if (!isset($boucle->modificateur['criteres']['statut']) OR !isset($boucle->modificateur['criteres']['tout'])) {
     17                array_unshift($boucle->where,array("'IN'", "'$mstatut'", "'(\\'ouvert\\',\\'resolu\\',\\'ferme\\',\\'redac\\')'"));
     18        }
     19        if(function_exists('lire_config')){
     20                $desactiver_public = lire_config('tickets/general/desactiver_public','off');
     21                if(($desactiver_public == 'on') && !test_espace_prive()){
     22                        array_unshift($boucle->where,array("'='", "'$mstatut'", "'(\\'none\\')'"));
     23                }
     24        }
     25
     26        return calculer_boucle($id_boucle, $boucles);
     27}
    328/**
    429 * Crée la liste des options du select des champs :
     
    102127// creation des fonction de selection de texte
    103128// encore en truc a reprendre !
    104 foreach (array('severite', 'type', 'statut', 'navigateur') as $nom){
     129foreach (array('severite', 'tracker', 'statut', 'navigateur') as $nom){
    105130        eval("function tickets_texte_$nom(\$valeur) {
    106131                \$type = tickets_liste_$nom();
     
    111136}
    112137
    113 function tickets_icone_statut ($niveau) {
     138function tickets_icone_statut ($niveau,$full=false) {
    114139        $img = array(
    115140                "redac" => "puce-blanche.gif",
    116141                "ouvert" => "puce-orange.gif",
    117142                "resolu" => "puce-verte.gif",
    118                 "ferme" => "puce-poubelle.gif"
     143                "ferme" => "puce-poubelle.gif",
     144                "poubelle" => "puce-poubelle.gif"
    119145                );
    120         return $img[$niveau];
    121 }
    122 
    123 function tickets_icone_severite ($niveau) {
     146        if($full)
     147                return '<img src="'.find_in_path('prive/images/'.$img[$niveau]).'" alt="'.tickets_texte_statut($niveau).'" />';
     148        else
     149                return $img[$niveau];
     150}
     151
     152function tickets_icone_severite ($niveau,$full=false) {
    124153        $img = array(
    125154                1 => "puce-rouge-breve.gif",
     
    128157                4 => "puce-poubelle-breve.gif"
    129158                );
    130         return $img[$niveau];
     159        if($full)
     160                return '<img src="'.find_in_path('prive/images/'.$img[$niveau]).'" alt="'.tickets_texte_severite($niveau).'" />';
     161        else
     162                return $img[$niveau];
    131163}
    132164
     
    137169                "resolu" => _T("tickets:statut_resolu"),
    138170                "ferme" => _T("tickets:statut_ferme"),
     171                "poubelle" => _T("tickets:statut_poubelle")
    139172        );
    140173        if (!$connecte) {
     
    145178
    146179
    147 function tickets_liste_type($id_ticket = null){
    148         $types = array(
     180function tickets_liste_tracker($id_ticket = null){
     181        $trackers = array(
    149182                1 => _T("tickets:type_probleme"),
    150183                2 => _T("tickets:type_amelioration"),
    151184                3 => _T("tickets:type_tache"),
    152185        );
    153         return $types;
     186        return $trackers;
    154187}
    155188
  • _plugins_/tickets/trunk/tickets_notifications.php

    r33489 r56968  
    11<?php
     2
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
    25// pour le pipeline
    36function tickets_notifications() {}
     
    58/**
    69 *
    7  * Fonction appelée lors du changement de statut d'un ticket
     10 * Fonction de nortification appelée lors du changement de statut d'un ticket
    811 *
    912 * @return
     
    1215 * @param object $options
    1316 */
    14  
    15 
    16 
    1717function notifications_instituerticket_dist($quoi, $id_ticket, $options) {
    1818       
     
    3232}
    3333
    34 function notifications_commenterticket_dist($quoi, $id_ticket, $options) {
    35        
    36         $notifier_commentaire_ticket = charger_fonction('notifier_commentaire_ticket','inc');
    37         $notifier_commentaire_ticket($id_ticket,$options);
    38 }
    39 
    4034?>
  • _plugins_/tickets/trunk/tickets_options.php

    r50335 r56968  
    11<?php
     2
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
    25/**
    36 * Activer le plugin no_spam sur les tickets
    47 */
    5 $GLOBALS['formulaires_no_spam'][] = 'forum_ticket';
    68$GLOBALS['formulaires_no_spam'][] = 'editer_ticket';
    79
    8 /**
    9  * Enregistre une revision de ticket
    10  *
    11  * @return
    12  * @param int $id_ticket
    13  * @param array $c[optional]
    14  */
    15 function revision_ticket($id_ticket, $c=false) {
    16 
    17         // invalider le cache quelque soit la circonstance.
    18         // une modification de base = effacer les caches.
    19         $invalideur = "id='id_ticket/$id_ticket'";
    20         $indexation = true;
    21 
    22         modifier_contenu('ticket', $id_ticket,
    23                 array(
    24                         'nonvide' => array('titre' => _T('info_sans_titre')),
    25                         'invalideur' => $invalideur,
    26                         'indexation' => $indexation,
    27                         'date_modif' => 'date_modif' // champ a mettre a date('Y-m-d H:i:s') s'il y a modif
    28                 ),
    29                 $c);
    30 
    31         return ''; // pas d'erreur
    32 }
    33 
    3410?>
  • _plugins_/tickets/trunk/tickets_pipelines.php

    r50534 r56968  
    11<?php
     2
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
    25// Ajout du bouton permettant de se rendre sur la page de gestion des tickets
    36function tickets_ajouterBoutons($boutons_admin) {
     
    4750}
    4851
    49 // Pipeline menu a droite
    50 function tickets_droite ($flux) {
    51         $exec = $flux["args"]["exec"];
    52 
    53 //      if ($exec == "accueil") {
    54 //              $data = $flux["data"];
    55 //
    56 //              $ret = menu_colonne();
    57 //
    58 //              $flux["data"] = $data.$ret;
    59 //      }
    60         return $flux;
    61 }
    62 
    6352/**
    6453 * Insertion dans le pipeline affiche_aguche
     
    8776function tickets_objets_extensibles($objets){
    8877        return array_merge($objets, array('ticket' => _T('tickets:tickets')));
    89 }
    90 
    91 /**
    92  * Insertion dans le pipeline gouverneur_infos_tables_versions
    93  * (utile pour le plugin revisions en 2.1)
    94  * Permet de gérer les révisions sur les tickets
    95  *
    96  * @param object $array
    97  * @return
    98  */
    99 function tickets_gouverneur_infos_tables($array){
    100         $array['spip_tickets'] = array(
    101                 'table_objet' => 'tickets',
    102                 'type' => 'ticket',
    103                 'url_voir' => 'ticket_afficher',
    104                 'texte_retour' => 'tickets:icone_retour_ticket',
    105                 'url_edit' => 'ticket_editer',
    106                 'texte_modifier' => 'tickets:icone_modifier_ticket',
    107                 'icone_objet' => 'ticket',
    108                 'texte_unique' => 'tickets:ticket',
    109                 'texte_multiple' => 'tickets:tickets',
    110                 'champs_versionnes' => array('titre','exemple', 'texte')
    111         );
    112         return $array;
    113 }
    114 
    115 /**
    116  * Insertion dans le pipeline revisions_liste_objets du plugin revisions (2.1)
    117  * Definir la liste des tables possibles
    118  * @param object $array
    119  * @return
    120  */
    121 function tickets_revisions_liste_objets($array){
    122         $array['tickets'] = 'tickets:tickets';
    123         return $array;
    12478}
    12579
     
    272226function tickets_recuperer_fond($flux){
    273227        $args = $flux['args'];
    274         $type = $args['fond'];
    275         if ($type == 'formulaires/forum'){
     228        $fond = $args['fond'];
     229        if ($fond == 'formulaires/forum'){
    276230                if(is_numeric($args['contexte']['id_ticket'])){
    277231                        $infos_ticket = sql_fetsel('statut,id_assigne','spip_tickets','id_ticket='.intval($args['contexte']['id_ticket']));
     
    309263                        }
    310264                        if(($new_assigne=_request('id_assigne')) && ($new_assigne != $infos_ticket['id_assigne'])){
     265                                include_spip('action/editer_ticket');
    311266                                revision_ticket($id_ticket, array('id_assigne'=>$new_assigne));
    312267                        }
    313268                }
    314                 if ($notifications = charger_fonction('notifications', 'inc')) {
    315                         $notifications('commenterticket', $flux['args']['args'][6],
    316                         array(
    317                                         'id_auteur' => id_assigne,
    318                                         'texte' => texte
    319                         )
    320                         );
     269        }
     270        return $flux;
     271}
     272
     273/**
     274 * Insertion dans le pipeline notifications_destinataires (Forum)
     275 * Ajoute des destinataires dans les notifications
     276 *
     277 * @param array $flux : le contexte du pipeline
     278 * @return array $flux : le contexte modifié
     279 */
     280function tickets_notifications_destinataires($flux){
     281        /**
     282         * Notification des auteurs de tickets et des assignés et des autres forumeurs lorsque le post est validé
     283         */
     284        if(($flux['args']['quoi'] == 'forumvalide')){
     285                if(($flux['args']['options']['forum']['objet'] == 'ticket') && ($id_ticket = intval($flux['args']['options']['forum']['id_objet']))){
     286                        /**
     287                         * On notifie l'id_auteur et l'id_assigné du ticket s'ils ne sont pas l'auteur du post en question
     288                         */
     289                        $auteurs = sql_fetsel('id_auteur,id_assigne','spip_tickets','id_ticket='.intval($id_ticket).' AND id_auteur !='.intval($flux['args']['options']['forum']['id_auteur']));
     290                        if(is_array($auteurs)){
     291                                foreach($auteurs as $auteur){
     292                                        $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($auteur));
     293                                        $flux['data'][] = $email;
     294                                }
     295                        }
     296                        /**
     297                         * On notifie les autres forumeurs du ticket
     298                         * GROUP BY id_auteur
     299                         */
     300                        $id_forums = sql_select('*','spip_forum','objet='.sql_quote('ticket').' AND id_objet='.intval($id_ticket).' AND id_forum != '.intval($flux['args']['options']['forum']['id_forum']),array('id_auteur'));
     301                        while($forum = sql_fetch($id_forums)){
     302                                $email = sql_getfetsel('email','spip_auteurs','id_auteur='.intval($forum['id_auteur']));
     303                                $flux['data'][] = $email;
     304                        }
    321305                }
    322306        }
Note: See TracChangeset for help on using the changeset viewer.