Changeset 81279 in spip-zone


Ignore:
Timestamp:
Mar 9, 2014, 3:50:21 PM (5 years ago)
Author:
eric@…
Message:

Première mise au point du contournement au formulaire instituer commentaire en utilisant le formulaire d'édition d'un commentaire.
Reste à afficher le statut quand le select est vide.
Correction de certaines autorisations.
Correction de la liste des commentaires.

Location:
_plugins_/relecture
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/relecture/formulaires/editer_commentaire.html

    r81145 r81279  
    33        [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV**{message_ok})</p>]
    44        [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    5         [(#ENV{editable})
     5        <BOUCLE_editable(CONDITION) {si #ENV{editable}}>
    66        <form method='post' action='#ENV{action}' enctype='multipart/form-data'><div>
    77                [(#REM) declarer les hidden qui declencheront le service du formulaire parametre : url d'action ]
     
    2929                                <textarea name="texte" id="texte"[(#GET{ecrire_texte}|non) readonly="readonly" class="no_barre"][ lang="(#LANG)"] rows="10" cols="40">[(#ENV**{texte})]</textarea>
    3030                    </li>
    31                         [(#AUTORISER{modifier, commentaire, #ENV{id_commentaire}, '', #ARRAY{champ, reponse}})
    32                         <li class="editer editer_texte obligatoire[ (#ENV**{erreurs}|table_valeur{statut}|oui) erreur]">
     31                        [<li class="editer editer_texte obligatoire[ (#ENV**{erreurs}|table_valeur{statut}|oui) erreur]">
    3332                                <label for="statut"><:relecture:label_commentaire_statut:></label>
    3433                                [<span class="erreur_message">(#ENV**{erreurs}|table_valeur{statut})</span>]
    35                                 <select name="statut" id="statut">
    36                                         <option value="accepte"><:relecture:texte_commentaire_accepte:></option>
    37                                         <option value="refuse"><:relecture:texte_commentaire_refuse:></option>
    38                                         <option value="poubelle"><:relecture:texte_commentaire_poubelle:></option>
    39                                 </select>
    40                     </li>
     34                                (#ENV**{_statuts})
     35                    </li>]
     36                        [(#AUTORISER{modifier, commentaire, #ENV{id_commentaire}, '', #ARRAY{champ, reponse}})
    4137                        <li class="editer editer_texte[ (#ENV**{erreurs}|table_valeur{reponse}|oui) erreur]">
    4238                                <label for="reponse"><:relecture:label_commentaire_reponse:></label>
     
    5046                <p class='boutons'><input type='submit' name="save" class='submit' value='<:bouton_enregistrer:>' /></p>
    5147        </div></form>
    52         ]
     48        </BOUCLE_editable>
    5349</div>
  • _plugins_/relecture/formulaires/editer_commentaire.php

    r81145 r81279  
    1616                $infos['repere_debut'] = _request('repere_debut');
    1717                $infos['repere_fin'] = _request('repere_fin');
     18                $infos['statut'] = 'ouvert';
    1819                // On supprime les index 'id_relecture', 'element' du tableau des valeurs afin qu'ils soient transmis dans
    1920                // la fonction traiter() (car ce sont des champs de l'objet relecture)
    2021                unset($valeurs['id_relecture']);
    2122                unset($valeurs['element']);
     23                // On initialise la liste des statuts à vide car il sera positionné automatiquement à ouvert
     24                $valeurs['_statuts'] = '';
    2225        }
    23         // Modification d'un commentaire
     26        // Modification d'un commentaire : pour l'instant on utilsie ce formulaire pour instituer le commentaire
    2427        else if ($id_commentaire = intval($id_commentaire)) {
    2528                // - si le commentaire est ouvert l'auteur de l'article peut le moderer.
    2629                //   On lui renvoie le texte du commentaire et de la reponse
    27                 $select = array('texte', 'reponse', 'id_emetteur', 'element', 'repere_debut', 'repere_fin, id_relecture');
     30                $select = array('texte', 'reponse', 'id_emetteur', 'element', 'repere_debut', 'repere_fin, id_relecture, statut');
    2831                $infos = sql_fetsel($select, 'spip_commentaires', "id_commentaire=$id_commentaire");
    2932                $valeurs = array_merge($valeurs, $infos);
    3033                // On conserve l'id de la relecture pour le calcul de la sélection
    3134                $id_relecture = intval($infos['id_relecture']);
     35
     36                // On construit, en fonction du contexte de la relecture et du statut courant du commentaire la liste des
     37                // statuts possibles.
     38                include_spip('inc/session');
     39                $auteur_connecte = session_get('id_auteur');
     40                $statuts = array();
     41                if ($infos['statut'] == 'poubelle') {
     42                        // le formulaire, via l'autorisation modifier commentaire, n'affichera le select de changement de statut
     43                        // que pour l'auteur du commentaire qui pourra réouvrir son commentaire avant de modifier son texte.
     44                        // De fait, on limite le choix à ouvert
     45                        if ($auteur_connecte == $infos['id_emetteur'])
     46                                $statuts[] = 'ouvert';
     47                }
     48                elseif ($infos['statut'] == 'ouvert') {
     49                        // Si l'auteur connecté a l'autorisation de modifier la relecture il a aussi l'autorisation de positionner le
     50                        // statut dans un état final autre que supprimé. Ceci est moins restrictif que si on autorisait uniquement
     51                        // les auteurs pouvant modifier la réponse (la période peut être échue)
     52                        if (autoriser('modifier', 'relecture', $id_relecture)) {
     53                                $statuts[] = 'accepte';
     54                                $statuts[] = 'refuse';
     55                        }
     56                        // Si l'auteur connecté a l'autorisation de modifier le texte alors il peut aussi passer
     57                        // le statut à supprimé
     58                        if (autoriser('modifier', 'commentaire', $id_commentaire, '', array('champ' => 'texte')))
     59                                $statuts[] = 'ouvert';
     60                }
     61
     62                // On construit le select des statuts
     63                $valeurs['_statuts'] = '';
     64                if ($statuts) {
     65                        $valeurs['_statuts'] = '<select name="statut" id="statut">';
     66                        $valeurs['_statuts'] .= '<option value="' . $infos['statut'] . '" selected="selected">' . _T("relecture:texte_commentaire_{$infos['statut']}") . '</option>';
     67                        foreach($statuts as $_statut) {
     68                                $valeurs['_statuts'] .= '<option value="' . $_statut . '">' . _T("relecture:texte_commentaire_${_statut}") . '</option>';
     69                        }
     70                        $valeurs['_statuts'] .= '</select>';
     71                }
    3272        }
    3373
     
    4787        // On ajoute des verifications specifiques :
    4888        // - le texte du commentaire doit avoir plus de n caracteres.
     89        $texte = _request('texte');
     90        if (strlen($texte) < 3)
     91                $erreurs['texte'] = _T('relecture:erreur_saisie_commentaire_texte');
     92
     93        // - si le commentaire est refusé, une réponse est obligatoire. Elle doit contenir plus de n caractères
     94        $statut = _request('statut');
     95        $reponse = _request('reponse');
     96        if ($statut == 'refuse') {
     97                if (!$reponse)
     98                        $erreurs['texte'] = _T('relecture:erreur_commentaire_refuse_sans_reponse');
     99                elseif (strlen($reponse) < 3)
     100                        $erreurs['texte'] = _T('relecture:erreur_saisie_commentaire_reponse');
     101        }
    49102
    50103        return $erreurs;
  • _plugins_/relecture/lang/relecture_fr.php

    r81145 r81279  
    2525
    2626// E
     27        'erreur_saisie_commentaire_texte' => 'Saisissez un commentaire de plus de 3 caractères',
     28        'erreur_saisie_commentaire_reponse' => 'Saisissez une réponse de plus de 3 caractères',
     29        'erreur_commentaire_refuse_sans_reponse' => 'Saisissez toujours une réponse pour expliquer votre refus',
    2730        'explication_ajout_commentaire' => 'Pour ajouter des commentaires à cet élément cliquez sur le bouton de la barre d\'outils. Au préalable, si vous souhaitez associer ce commentaire à un emplacement ou à une portion du texte veillez à positionner correctement votre curseur dans le texte.',
    2831
     
    122125        'titre_liste_participations_relectures' => 'Relectures auxquelles vous participez',
    123126        'titre_liste_relecteurs' => 'Relecteurs',
    124         'titre_menu_commentaires' => 'Commentaires déjà émis',
     127        'titre_menu_commentaires' => 'Commentaires émis',
    125128        'titre_page_configurer' => 'Configuration du plugin Relecture',
    126129        'titre_relecture_fermee' => 'Relecture fermée',
  • _plugins_/relecture/paquet.xml

    r81272 r81279  
    22        prefix="relecture"
    33        categorie="edition"
    4         version="0.1.19"
     4        version="0.1.20"
    55        etat="dev"
    66        compatibilite="[3.0.0;3.0.*]"
  • _plugins_/relecture/prive/objets/liste/commentaires.html

    r81272 r81279  
    3737                        [(#ENV{affichage}|=={menu_navigation}|oui)
    3838                                <th class="date-statut"><:relecture:label_date_statut:></th>
    39                                 <th><:relecture:label_action:></th>
    4039                        ]
    4140                                <th class="id" scope="col">[(#TRI{numero, <:info_numero_abbreviation:>, ajax})]</th>
     
    6968                                        [(#STATUT|=={ouvert}|non)[(#DATE_CLOTURE|affdate_court)]]
    7069                                </td>
    71                                 <td>
    72                                 #SET{url_edit, #URL_ECRIRE{commentaire_edit, id_commentaire=#ID_COMMENTAIRE}
    73                                                                 |parametre_url{id_relecture, #ID_RELECTURE}
    74                                                                 |parametre_url{element, #ELEMENT}
    75                                                                 |parametre_url{repere_debut, #REPERE_DEBUT}
    76                                                                 |parametre_url{repere_fin, #REPERE_FIN}}
    77                                 [(#AUTORISER{moderer, commentaire, #ID_COMMENTAIRE}|non)
    78                                         [(#AUTORISER{modifier, commentaire, #ID_COMMENTAIRE})
    79                                                 [(#BOUTON_ACTION{<:relecture:bouton_modifier:>, #GET{url_edit}, '', '', ''})]
    80                                         ]
    81                                 ]
    82                                 </td>
    8370                        ]
    8471                                <td class="id">
  • _plugins_/relecture/prive/squelettes/hierarchie/relecture_comment.html

    r60838 r81279  
    1 [(#REM) <!-- hierarchie specifique pour les commentaires de relecture :
    2         - Lien parent vers la page de l'article associe
    3         - Lien parent vers la page de la relecture
    4         - Un texte designant les commentaires
    5 --> ]
    6 
    7 <BOUCLE_relecture(RELECTURES) {id_relecture}>
    8         <a href="[(#URL_ECRIRE{article, id_article=#ID_ARTICLE})]">
    9                 #INFO_TITRE{article, #ID_ARTICLE}
    10         </a>
    11         &gt;
    12         <a href="[(#URL_ECRIRE{relecture, id_relecture=#ID_RELECTURE})]">
    13                 #INFO_TITRE{relecture, #ID_RELECTURE}
    14         </a>
    15         &gt;
    16         <strong class="on"> <:relecture:titre_commentaires:></strong>
    17 </BOUCLE_relecture>
     1<INCLURE{fond=prive/squelettes/hierarchie/relecture, env} />
  • _plugins_/relecture/relecture_autorisations.php

    r81272 r81279  
    322322        // - l'auteur concerné est l'auteur du commentaire (-> il peut donc modifier le texte)
    323323        // - la modification concerne le "texte" du commentaire ou n'est pas précisée
    324         // - le commentaire est ouvert
     324        // - le commentaire est ouvert ou supprimé
    325325        // - aucun message de forum n'a encore été déposé sur le commentaire
    326326        // soit,
     
    334334
    335335                $commentaire_ouvert = ($infos['statut'] == 'ouvert');
     336                $commentaire_supprime = ($infos['statut'] == 'poubelle');
    336337
    337338                $nb_messages_forum = sql_countsel('spip_forum', array('objet=' . sql_quote('commentaire'), "id_objet=$id_commentaire"));
     
    341342                $autoriser =
    342343                        ((($qui['id_auteur'] == $infos['id_emetteur'])
    343                                 AND $commentaire_ouvert
     344                                AND ($commentaire_ouvert OR $commentaire_supprime)
    344345                                AND ($nb_messages_forum == 0)
    345346                                AND (!$opt OR ($opt['champ'] == 'texte')))
     
    369370        // Conditions :
    370371        // - le commentaire est encore ouvert
    371         // - l'auteur connecté est autorisé à commenter la relecture
     372        // - l'auteur connecté est autorisé à modifier la relecture ce qui permet de répondre à des messages
     373        //   au moment où on prend en compte des commentaires.
    372374        if ($id_commentaire = intval($id)) {
    373375                $from = 'spip_commentaires';
     
    377379                $commentaire_ouvert = ($infos['statut'] == 'ouvert');
    378380
    379                 $autorise_commenter = autoriser('commenter', 'relecture', intval($infos['id_relecture']), $qui, $opt);
     381                $autorise_commenter = autoriser('modifier', 'relecture', intval($infos['id_relecture']), $qui, $opt);
    380382
    381383                $autoriser =
     
    387389}
    388390
     391
    389392/**
    390393 * Autorisation de modifier le statut d'un commentaire
     
    400403
    401404        $autoriser = false;
    402         $autoriser = true;
    403 
     405
     406        // Pour l'instant la complexité du workflow des statuts ne permet pas de l'implémenter avec le
     407        // formulaire instituer actuel. De fait, on bloque le formulaire instituer (dans le pipeline charger)
     408        // en renvoyant toujours false à cette autorisation.
     409        // Tout le workflow ests géré dans la fonction charger du formulaire d'édition du commentaire.
    404410        return $autoriser;
    405411}
  • _plugins_/relecture/relecture_pipelines.php

    r81145 r81279  
    129129
    130130        if ($objet == 'relecture') {
    131 
    132131                if ($form == 'dater') {
    133132                        // Identifier le label comme la date de fin des commentaires
    134133                        $flux['data']['_label_date'] = _T('relecture:label_date_fin_commentaire');
    135134                        // Le formulaire n'est editable que si l'autorisation modifier est accordee.
    136                         $flux['data']['editable'] = autoriser('modifier', 'relecture', $id_objet);
     135                        $flux['data']['editable'] = autoriser('modifier', $objet, $id_objet);
    137136                }
    138137                else if ($form == 'editer_liens') {
     
    140139                        $flux['data']['titre'] = _T('relecture:titre_liste_relecteurs');
    141140                        // Le formulaire n'est editable que si l'autorisation modifier est accordee.
    142                         $flux['data']['editable'] = autoriser('modifier', 'relecture', $id_objet);
     141                        $flux['data']['editable'] = autoriser('modifier', $objet, $id_objet);
    143142                }
    144143                else if ($form == 'instituer_objet') {
    145144                        // Le formulaire n'est editable que si l'autorisation instituer est accordee.
    146                         $flux['data']['editable'] = autoriser('instituer', 'relecture', $id_objet);
     145                        $flux['data']['editable'] = autoriser('instituer', $objet, $id_objet);
    147146                }
    148147        }
     
    154153                        $where = array("id_article=$id_objet", "statut=" . sql_quote('ouverte'));
    155154                        $flux['data']['editable'] = (sql_countsel($from, $where) == 0);
     155                }
     156        }
     157        else if ($objet == 'commentaire') {
     158                if ($form == 'instituer_objet') {
     159                        // Etant donné la complexité du workflow, tout est géré dans le formulaire édition
     160                        // du commentaire. De fait, on désactive le formulaire instituer
     161                        $flux['data']['editable'] = autoriser('instituer', $objet, $id_objet);
    156162                }
    157163        }
Note: See TracChangeset for help on using the changeset viewer.