Changeset 31324 in spip-zone


Ignore:
Timestamp:
Sep 3, 2009, 8:47:55 PM (10 years ago)
Author:
kent1@…
Message:

Une page ticket ressemble plus à une page d'autre objet SPIP

Location:
_plugins_/tickets
Files:
5 added
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/tickets/exec/ticket_afficher.php

    r28807 r31324  
    11<?php
     2
     3if (!defined("_ECRIRE_INC_VERSION")) return;
     4
     5include_spip('inc/presentation');
     6include_spip('inc/actions');
     7
     8function exec_ticket_afficher_dist()
     9{
     10        exec_ticket_args(intval(_request('id_ticket')));
     11}
     12
    213// Traitement de la page d'affichage et de modification d'un ticket
    3 function exec_ticket_afficher () {
    4         global $connect_id_auteur;
    5        
    6         $id_ticket = _request('id_ticket');
    7        
    8         include_spip('inc/presentation');
    9        
     14function exec_ticket_args ($id_ticket) {
     15
     16        pipeline('exec_init',array('args'=>array('exec'=>'tickets_afficher','id_ticket'=>$id_ticket),'data'=>''));
     17
     18        $row = sql_fetsel("*", "spip_tickets", "id_ticket=$id_ticket");
     19
     20        if (!$row
     21        OR !autoriser('voir', 'ticket', $id_ticket)) {
     22                include_spip('inc/minipres');
     23                echo minipres(_T('ticket:acces_interdit'));
     24        } else {
     25                $row['titre'] = sinon($row["titre"],_T('info_sans_titre'));
     26
     27                $res = debut_gauche('accueil',true)
     28                  .  tickets_affiche($id_ticket, $row)
     29                  . "<br /><br /><div class='centered'>"
     30                . "</div>"
     31                . fin_gauche();
     32
     33                $commencer_page = charger_fonction('commencer_page', 'inc');
     34                echo $commencer_page("&laquo; ". $row['titre'] ." &raquo;", "naviguer", "tickets");
     35
     36                echo debut_grand_cadre(true),
     37                        fin_grand_cadre(true),
     38                        $res,
     39                        fin_page();
     40        }
     41}
     42
     43function tickets_affiche($id_ticket, $row){
     44        global $spip_lang_right, $dir_lang;
     45
     46        $statut_ticket = $row['statut'];
     47        $titre = $row["titre"];
     48        $texte = $row["texte"];
     49        $date = $row["date"];
     50
    1051        $titre_page = _T('tickets:page_titre');
    11        
     52
    1253        // Permet entre autres d'ajouter les classes à la page : <body class='$rubrique $sous_rubrique'>
    1354        $rubrique = "forum";
    1455        $sous_rubrique = "tickets";
    15        
    16         $commencer_page = charger_fonction('commencer_page', 'inc');
    17         echo $commencer_page($titre_page, $rubrique, $sous_rubrique);
    18        
    19         echo "<br /><br />";
    20        
    21         echo debut_gauche("",true);
    22         echo pipeline('affiche_gauche',array('args'=>array('exec'=>'ticket_afficher'),'data'=>''));
    23        
    24         echo debut_droite("",true);
    25        
    26         $contexte = array("id_ticket"=>$id_ticket);
    27         $page = recuperer_fond("prive/contenu/ticket_afficher", $contexte);
    28        
     56
     57        $flag_editable = autoriser('ecrire', 'ticket', $id_ticket);
     58
     59        $boite = pipeline ('boite_infos', array('data' => '',
     60                'args' => array(
     61                        'type'=>'ticket',
     62                        'id' => $id_ticket,
     63                        'row' => $row
     64                )
     65        ));
     66
     67        $navigation =
     68          debut_boite_info(true). $boite . fin_boite_info(true)
     69          . pipeline('affiche_gauche',array('args'=>array('exec'=>'ticket_afficher','id_ticket'=>$id_ticket),'data'=>''));
     70
     71        $extra = creer_colonne_droite('', true)
     72          . pipeline('affiche_droite',array('args'=>array('exec'=>'ticket_afficher','id_ticket'=>$id_ticket),'data'=>''))
     73          . debut_droite('',true);;
     74
     75        $actions =
     76          ($flag_editable ? bouton_modifier_tickets($id_ticket, $modif, _T('ticket:avis_projet_modifie', $modif), chemin('prive/images/projet-24.gif'), "edit.gif",$spip_lang_right) : "");
     77
     78        $haut =
     79                "<div class='bandeau_actions'>$actions</div>"
     80                . gros_titre($titre, '' , false);
     81
     82        $onglet_contenu =
     83          afficher_corps_tickets($id_ticket,$row);
     84
     85        $onglet_proprietes = ((!_INTERFACE_ONGLETS) ? "" :"")
     86                .recuperer_fond('prive/proprietes/ticket',array('id_ticket'=>$id_ticket))
     87                .pipeline('affiche_milieu',array('args'=>array('exec'=>'ticket_afficher','id_ticket'=>$id_ticket),'data'=>''));
     88
     89        $onglet_discuter = recuperer_fond('prive/contenu/ticket_commenter',array('id_ticket'=>$id_ticket));
     90
     91        return
     92                  $navigation
     93                  . $extra
     94                  . "<div class='fiche_objet'>"
     95                  . $haut
     96                  . afficher_onglets_pages(
     97                        array(
     98                                'voir' => _T('onglet_contenu'),
     99                                'props' => _T('onglet_proprietes'),
     100                                'discuter' => _T('onglet_discuter')
     101                                ),
     102                        array(
     103                        'props'=>$onglet_proprietes,
     104                        'voir'=>$onglet_contenu,
     105                                'discuter' => _INTERFACE_ONGLETS?$onglet_discuter:""
     106                        ))
     107                  . "</div>"
     108                  . (_INTERFACE_ONGLETS?"":$onglet_discuter);
     109
     110
    29111        echo $page;
    30        
     112
    31113        echo fin_gauche(), fin_page();
    32114}
     115
     116// http://doc.spip.org/@bouton_modifier_articles
     117function bouton_modifier_tickets($id_ticket, $flag_modif, $mode, $ip, $im, $align='')
     118{
     119        if ($flag_modif) {
     120                return icone_inline(_T('tickets:icone_modifier_ticket'), generer_url_ecrire("ticket_editer","id_ticket=$id_ticket"), $ip, $im, $align, false)
     121                . "<span class='arial1 spip_small'>$mode</span>";
     122        }
     123        else return icone_inline(_T('tickets:icone_modifier_ticket'), generer_url_ecrire("ticket_editer","id_ticket=$id_ticket"), chemin("imgs/bugs.png"), "edit.gif", $align);
     124}
     125
     126// http://doc.spip.org/@afficher_corps_articles
     127function afficher_corps_tickets($id_ticket, $row)
     128{
     129        $res = '';
     130
     131        $type = 'ticket';
     132        $contexte = array("id_ticket"=>$id_ticket);
     133        $fond = recuperer_fond("prive/contenu/ticket_afficher", $contexte);
     134
     135        // permettre aux plugin de faire des modifs ou des ajouts
     136        $fond = pipeline('afficher_contenu_objet',
     137                array(
     138                'args'=>array(
     139                        'type'=>$type,
     140                        'id_objet'=>$id_ticket,
     141                        'contexte'=>$contexte),
     142                'data'=> ($fond)));
     143
     144        $res .= "<div id='wysiwyg'>$fond</div>";
     145
     146        return $res;
     147}
    33148?>
  • _plugins_/tickets/lang/tickets_fr.php

    r30692 r31324  
    1414        'assignation_non_modifiee' => 'Assignation non mise &agrave; jour',
    1515        'assignation_supprimee' => 'L\'assignation de ce ticket a &eacute;t&eacute; supprim&eacute;e.',
    16        
    17         // C 
     16
     17        // C
    1818        'champ_assigner' => 'Assigner &agrave;',
    1919        'champ_composant' => 'Composant',
     
    3939        'commenter_ticket' => 'Commenter ce ticket',
    4040        'creer_ticket' => 'Cr&eacute;er un ticket',
    41        
     41
    4242        // D
    4343        'date_creation_auteur' => 'Ticket cr&eacute;&eacute; le <strong>@date@</strong> par <strong>@nom@</strong>',
    44        
     44
    4545        // E
    4646        'erreur_texte_longueur_mini' => 'La longueur minimale du texte est de @nb@ caract&egrave;res.',
    4747        'erreur_verifier_formulaire' => 'V&eacute;rifiez votre formulaire',
    48         'explication_description_ticket' => 'D&eacute;crivez aussi pr&eacute;cis&eacute;ment que possible le besoin ou le probl&egrave;me rencontr&eacute;. 
    49         Indiquez en particulier s&rsquo;il se produit syst&eacute;matiquement ou occasionnellement. 
     48        'explication_description_ticket' => 'D&eacute;crivez aussi pr&eacute;cis&eacute;ment que possible le besoin ou le probl&egrave;me rencontr&eacute;.
     49        Indiquez en particulier s&rsquo;il se produit syst&eacute;matiquement ou occasionnellement.
    5050        S&rsquo;il s&rsquo;agit d&rsquo;un probl&egrave;me d\'affichage, pr&eacute;cisez avec quel navigateur vous le rencontrez.',
    5151        'explication_url_exemple' => 'Indiquez ici l&rsquo;URL d&rsquo;une page concern&eacute;e par ce ticket.',
    5252        'explication_redaction' => 'Quand vous avez termin&eacute; la r&eacute;daction de votre ticket, s&eacute;lectionnez le statut &laquo;ouvert et discut&eacute;&raquo;.',
    53        
     53
    5454        // F
    5555        'forum_message' => 'Votre message',
    5656        'forum_sans_previsu' => 'Attention&nbsp;: pas de pr&eacute;visualisation&nbsp;; votre message est publi&eacute; imm&eacute;diatement.',
    57        
     57
     58        // I
     59        'info_numero_ticket' => 'TICKET NUM&Eacute;RO&nbsp;:',
     60        'icone_modifier_ticket' => 'Modifier ce ticket',
     61
    5862        // M
     63        'mail_texte_message_auto' => 'Ceci est un message automatique : n\'y repondez pas.',
    5964        'message_automatique' => 'Ceci est un message automatique : n\'y repondez pas.',
    6065        'message_poste_par' => 'Message post&eacute; par',
    6166        'message_le' => 'le @date@',
    6267        'message_publie' => 'Votre message est publi&eacute;',
    63         'mail_texte_message_auto' => 'Ceci est un message automatique : n\'y repondez pas.',
    64        
     68
    6569        // N
    6670        'no_assignation' => 'Personne',
    6771        'non_assignes' => 'Non assign&eacute;s',
    6872        'nouveau_ticket' => 'Nouveau ticket',
    69        
     73
    7074        // P
    7175        'page_titre' => 'Tickets, syst&egrave;me de suivi de bugs',
    72        
     76
    7377        // R
    7478        'revenir_gestion' => 'Revenir &agrave; la gestion des tickets',
    75        
     79
    7680        // S
    7781        'statut_mis_a_jour' => 'Statut mis &agrave; jour',
     
    8387        'statut_resolu' => 'R&eacute;solu',
    8488        'statut_resolu_long' => 'Tous les tickets r&eacute;solus',
    85        
     89
    8690        // T
    8791        'ticket' => 'Ticket',
     
    96100        'type_tache' => 'Probl&egrave;me',
    97101        'type_tache_long' => 'Les t&acirc;ches &agrave; accomplir',
    98        
     102
    99103        // V
    100104        'vos_tickets_assignes' => 'Les tickets qui vous sont assign&eacute;s',
    101105        'vos_tickets_en_cours' => 'Vos tickets en cours de r&eacute;daction',
    102        
     106
    103107        // Z
    104108        'z' => 'zzz'
  • _plugins_/tickets/prive/contenu/ticket_afficher.html

    r30722 r31324  
    66]
    77[(#HTTP_HEADER{Content-type: text/html[; charset=(#CHARSET)]})]
    8 #CACHE{0}
    9 
    10 <BOUCLE_principale(TICKETS){id_ticket}>
    11 [(#REM) Bloc 1: d'information sur le ticket]
    12 <div class="cadre cadre-r">
    13         [(#REM) logo du plugin]
    14         [<img src="(#CHEMIN{imgs/bugs.png})" class="cadre-icone" alt="" style="width: 24px; height: 24px;" />]
    15 
    16         <div class="cadre_padding">
    17                 [(#REM) Bloc d'informations de base du ticket (titre, texte, date, type...)]
    18                 [(#REM) - Bouton de modification]
    19                 [(#AUTORISER{ecrire, ticket, #ID_TICKET}|oui)
    20                         [(#ID_TICKET|tickets_bouton_modifier{#CHEMIN{imgs/bugs.png}, #LANG_RIGHT})]
    21                 ]
    22                
    23                 [(#REM) - Titre du ticket]
    24                 <span class="arial1 spip_small"><strong><:tickets:ticket:> ##ID_TICKET</strong></span>
    25                 <h1>[(#TITRE|typo)]</h1>
    26                 [(#REM) Statut, severite, assignement]
     8<BOUCLE_afficher_contenu(TICKETS){id_ticket=#ENV{id_ticket}}{statut?}>
     9<div class="champ contenu_titre[ (#TITRE*|strlen|?{'',vide})]">
     10<div class='label'><:info_titre:></div>
     11<div dir='#LANG_DIR' class='#EDIT{titre} titre'>#TITRE</div>
     12</div>
     13<div>
     14                <div style="float: #LANG_RIGHT; padding-#LANG_RIGHT: 20px;">
     15                        [<div class="champ">
     16                                <:tickets:champ_statut:> : <strong>(#STATUT|tickets_texte_statut)</strong>
     17                        </div>]
     18                        <BOUCLE_assigne(AUTEURS){id_auteur=#ID_ASSIGNE}{tous}>
     19                                <div style="color: red;"><:tickets:assigne_a:> <strong>#NOM</strong></div>
     20                        </BOUCLE_assigne>
     21                </div>
    2722                <div>
    28                         <div style="float: #LANG_RIGHT; padding-#LANG_RIGHT: 20px;">
    29                                 [<div><:tickets:champ_statut:> : <strong>(#STATUT|tickets_texte_statut)</strong></div>]
    30                                 <BOUCLE_assigne(AUTEURS){id_auteur=#ID_ASSIGNE}{tous}>
    31                                 <div style="color: red;"><:tickets:assigne_a:> <strong>#NOM</strong></div>
    32                                 </BOUCLE_assigne>
    33                         </div>
    34                         [<div><:tickets:champ_severite:> : <strong>(#SEVERITE|tickets_texte_severite)</strong></div>]
     23                        [<div class="champ">
     24                                <:tickets:champ_severite:> : <strong>(#SEVERITE|tickets_texte_severite)</strong>
     25                        </div>]
    3526                        [<:tickets:champ_type:> : <strong>(#TYPE|tickets_texte_type)</strong>]
    3627                </div>
    37                
     28
    3829                [(#REM) - Date de creation et auteur du ticket]
    39                 <div>
     30                <div class="champ">
    4031                        <BOUCLE_auteur(AUTEURS){id_auteur=#ID_AUTEUR}{tous}>
    4132                        [(#SET{date,[(#_principale:DATE|affdate_court)]})]
     
    5142                        [<div><:tickets:champ_jalon:> : <strong>(#JALON)</strong></div>]
    5243                </div>
    53                 <div class="nettoyeur"></div>
    54                
    55                 [(#REM) - Texte du ticket et url d'exemple]
    56                 [<div class="texte" style="font-size: 125%; line-height: 1.4em;">(#TEXTE|propre)</div>]
    57                 [<div><:tickets:champ_exemple:> : <strong><a href="[(#EXEMPLE*|calculer_url{"",url})]">(#EXEMPLE*|calculer_url{"",titre}|replace{"</?html>",""})</a></strong></div>]
    58 
    59                 [(#REM) - Extensions, Extras 2 entre autre]
    60                 [(#PIPELINE{afficher_contenu_objet,[(#ARRAY{args,[(#ARRAY{type,ticket,id_objet,#ID_TICKET,contexte,[(#ENV**|unserialize)]})],data,''})]})]
    61                
    62                 [(#REM) Bloc de choix du statut et de l'assignation]
    63                 [(#AUTORISER{ecrire, ticket, #ID_TICKET}|oui)
    64                         #FORMULAIRE_STATUT_TICKET{#ID_TICKET}
    65                         <br />
    66                         #FORMULAIRE_ASSIGNER_TICKET{#ID_TICKET}
    67                 ]
    68         </div> <!-- cadre_padding -->
    69 </div> <!-- cadre cadre-r -->
    70 
    71 [(#REM) Bloc 2: liste des commentaires sur le ticket]
    72 <B_messages>
    73 <div class="cadre cadre-r">
    74 <BOUCLE_messages(TICKETS_FORUM){id_ticket}{par date}{"<hr style='height: 1px; background-color: #666666; color: #666666; border: 0px;' />"}>
    75         <div class="cadre_padding">
    76                 <div style="text-align: #LANG_RIGHT;">
    77                         <BOUCLE_auteur_message(AUTEURS){id_auteur}{tout}>
    78                         post&eacute; par <strong><a href="#URL_ECRIRE{'auteur_infos','id_auteur='#ID_AUTEUR}">#NOM</a></strong>
    79                         </BOUCLE_auteur_message>
    80                         le [(#DATE|affdate_court)]
    81                 </div>
    82         [<div>(#TEXTE|propre)</div>]
    83         </div>
    84 </BOUCLE_messages>
    8544</div>
    86 </B_messages>
    87 
    88 [(#REM) Bloc 3: formulaire d'ajout d'un commentaire sur le ticket]
    89 [(#AUTORISER{commenter, ticket, #ID_TICKET}|oui)
    90         #FORMULAIRE_FORUM_TICKET{#ID_TICKET}
    91 ]       
    92 </BOUCLE_principale>
     45<div class="champ contenu_texte[ (#TEXTE*|strlen|?{'',vide})]">
     46<div class='label'><:info_texte:></div>
     47<div dir='#LANG_DIR' class='#EDIT{texte} texte'>[(#TEXTE|image_reduire{500,0})]</div>
     48</div>
     49[<div class="champ contenu_notes">
     50<div class='label'><:info_notes:></div>
     51<div dir='#LANG_DIR' class='#EDIT{notes} notes'>(#NOTES)</div>
     52</div>]
     53[<div><:tickets:champ_exemple:> : <strong><a href="[(#EXEMPLE*|calculer_url{"",url})]">(#EXEMPLE*|calculer_url{"",titre}|replace{"</?html>",""})</a></strong></div>]
     54</BOUCLE_afficher_contenu>
Note: See TracChangeset for help on using the changeset viewer.