Ignore:
Timestamp:
11/02/12 16:32:12 (7 years ago)
Author:
kent1
Message:

On s'insère dans post_edition() pour vérifier si on doit dépublier ou republier l'objet lié lors des institutions de signalement

On essaie d'utiliser l'API de action/editer_objet au maximum

On ajoute donc deux options de conf au formulaire pour :
-* Activer la dépublication de contenu lors de signalement;
-* Configurer le seuil de dépublication, par défaut 5;

Passage en version 1.1.0

Location:
plugins_spip/signalement/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • plugins_spip/signalement/trunk/action/instituer_signalement.php

    r7042 r7048  
    3939        // changer le statut de toute l'arborescence dependant de ce message
    4040        $id_signalements = array($id_signalement);
    41         while ($id_signalements) {
    42                 sql_updateq("spip_signalements", array("statut" => $statut), sql_in("id_signalement", $id_signalements) ." AND statut = '$old'");
    43         }
     41        include_spip('action/editer_objet');
     42
     43        objet_instituer('signalement',$id_signalement,array('statut'=>$statut));
    4444
    4545        // invalider les pages comportant ce signalement
     
    4747        suivre_invalideur("id='signalement/$id_signalement'");
    4848        suivre_invalideur("id='".$row['objet']."/".$row['id_objet']."'");
    49 
    50         // Reindexation du thread (par exemple)
    51         pipeline('post_edition',
    52                 array(
    53                         'args' => array(
    54                                 'table' => 'spip_signalements',
    55                                 'table_objet' => 'signalements',
    56                                 'spip_table_objet' => 'spip_signalements',
    57                                 'type' => 'signalement',
    58                                 'id_objet' => $id_signalement,
    59                                 'action' => 'instituer',
    60                         ),
    61                         'data' => null
    62                 )
    63         );
    6449}
    6550
  • plugins_spip/signalement/trunk/balise/formulaire_signalement.php

    r7015 r7048  
    4545        $objet = $args[0];
    4646        $id_objet = $args[1];
     47
    4748        // pas dans une boucle ? on generera une erreur ?
    4849        if ($objet == "'balise_hors_boucle'") {
  • plugins_spip/signalement/trunk/formulaires/configurer_signalement.html

    r7016 r7048  
    1010                                <p class="explication"><:signalement:explication_select_motifs:></p>
    1111                                <B_signalements>
    12                                 <select id="motifs" name="motifs[]" multiple="multiple" size="10">
     12                                <select id="motifs" name="motifs[]" multiple="multiple" size="[(#GRAND_TOTAL|plus{1})]">
    1313                                        <BOUCLE_signalements(DATA){source table,#REM|lister_signalements}>
    1414                                        <option value="#CLE"[(#CLE|in_array{#ENV{motifs,#ARRAY}}|oui)selected="selected"]>#VALEUR</option>
     
    1616                                </select>
    1717                                </B_signalements>
     18                </li>
     19                <li class="editer editer_depublier[(#ENV**{erreurs}|table_valeur{depublier}|oui)erreur]">
     20                        <label for="depublier"><:signalement:label_depublier:></label>[
     21                        <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{depublier})</span>]
     22                        <div class="choix">
     23                                <input type="checkbox"[(#ENV{depublier}|=={on}|oui)checked="checked"] name="depublier" id="depublier" />
     24                                <label for="depublier"><:signalement:label_depublier_long:></label>
     25                        </div>
     26                </li>
     27                <li class="editer editer_depublier_seuil[(#ENV**{erreurs}|table_valeur{depublier_seuil}|oui)erreur]">
     28                        <label for="depublier_seuil"><:signalement:label_depublier_seuil:></label>
     29                        <p class='explication'><:signalement:explication_depublier_seuil:></p>[
     30                        <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{depublier_seuil})</span>]
     31                        <input type="text" class="texte text" name="depublier_seuil" maxlength="3" id="depublier_seuil" value="#ENV{depublier_seuil,5}" />
    1832                </li>
    1933                [(#PLUGIN{mediabox}|oui)
  • plugins_spip/signalement/trunk/inc/signalement.php

    r7043 r7048  
    1919                AND $id_objet = intval($id_objet)
    2020                AND preg_match(",^\w+$,",$objet)){
    21                 $row = sql_fetsel("*","spip_signalements","id_auteur=".intval($id_auteur)." AND id_objet=".intval($id_objet)." AND objet=".sql_quote($objet)." AND statut ='publie'");
     21                $row = sql_fetsel("*","spip_signalements","id_auteur=".intval($id_auteur)." AND id_objet=".intval($id_objet)." AND objet=".sql_quote($objet)." AND statut IN ('publie','refuse')");
    2222        }
    2323        return $row;
  • plugins_spip/signalement/trunk/lang/signalement_fr.php

    r7037 r7048  
    1010       
    1111        // E
     12        'explication_depublier_seuil' => 'À partir de combien d\'alertes un élément est automatiquement dépublié.',
    1213        'explication_select_motifs' => 'Les motifs ci-dessous seront affichés dans un sélecteur afin de préciser la nature du signalement.',
    1314       
     
    2627       
    2728        // L
     29        'label_depublier' => 'Dépublication',
     30        'label_depublier_long' => 'Dépublier automatiquement un contenu dont le nombre d\'alerte dépasse un certain seuil',
     31        'label_depublier_seuil' => 'Seuil de dépublication',
    2832        'label_mediabox' => 'MediaBox',
    2933        'label_mediabox_long' => 'Ne pas utiliser la MediaBox pour afficher le formulaire',
  • plugins_spip/signalement/trunk/paquet.xml

    r7047 r7048  
    22        prefix="signalement"
    33        categorie="edition"
    4         version="1.0.3"
     4        version="1.1.0"
    55        etat="test"
    66        compatibilite="[3.0.0;3.0.*]"
     
    2323        <pipeline nom="autoriser" inclure="signalement_autoriser.php" />
    2424        <pipeline nom="afficher_config_objet" inclure="signalement_pipelines.php" />
     25        <pipeline nom="post_edition" inclure="signalement_pipelines.php" />
    2526       
    2627        <menu nom="signalements_reactions" titre="signalement:icone_suivi_signalements" parent="menu_activite" icone="images/signalement-16.png" action="controler_signalement" />
  • plugins_spip/signalement/trunk/signalement_pipelines.php

    r7047 r7048  
    1515 
    1616/**
    17  * Boite de configuration des objets articles
     17 * Insertion dans le pipeline afficher_config_objet (SPIP)
     18 *
     19 * Boite de configuration des objets
     20 * Ajout du nombre de signalement sur les objets
    1821 *
    19  * @param array $flux
    20  * @return array
     22 * @param array $flux Le contexte du pipeline
     23 * @return array $flux Le contexte du pipeline
    2124 */
    2225function signalement_afficher_config_objet($flux){
     
    3134}
    3235
     36/**
     37 * Insertion dans le pipeline post_edition (SPIP)
     38 *
     39 * Lors de l'institution d'un signalement, on vérifie si les options de dépublication et de seuil
     40 * sont présentes.
     41 * Lors de la publication d'un signalement, si on dépasse le seuil de signalements publiés pour un objet,
     42 * on le dépublie s'il est publié
     43 * Lors du refus d'un signalement, si on descend en dessous du seuil de signalements publiés pour un objet et
     44 * que le statut de cet objet est refusé, on le remet en publié.
     45 *
     46 * @param array $flux Le contexte du pipeline
     47 * @return array $flux Le contexte du pipeline 
     48 */
     49function signalement_post_edition($flux){
     50        if(($flux['args']['table'] == 'spip_signalements')
     51                AND ($flux['args']['action'] == 'instituer')
     52        ){
     53                include_spip('inc/config');
     54                /**
     55                 * On ne continue que si les options de dépublication et de seuil sont présentes
     56                 */
     57                if(lire_config('signalement/depublier','') == 'on'){
     58                        $seuil = intval(lire_config('signalement/depublier_seuil','5'));
     59                        if($seuil > 0){
     60                                $signalement = sql_fetsel('*','spip_signalements','id_signalement='.intval($flux['args']['id_objet']));
     61                                $objet_signale = $signalement['objet'];
     62                                $id_objet_signale = $signalement['id_objet'];
     63                                $compte_signalement_objet = sql_countsel('spip_signalements','id_objet='.intval($id_objet_signale).' AND objet='.sql_quote($objet_signale).' AND statut="publie"');
     64                                /**
     65                                 * Cas où l'objet est publié et que le compte de signalement est supérieur au seuil,
     66                                 * on dépublie
     67                                 */
     68                                if($compte_signalement_objet >= $seuil){
     69                                        $table_objet_signale = table_objet_sql($objet_signale);
     70                                        $id_table_objet_signale = id_table_objet($objet_signale);
     71                                        $id_objet_signale = sql_getfetsel("$id_table_objet_signale","$table_objet_signale","$id_table_objet_signale=".intval($id_objet_signale));
     72                                        if($id_objet_signale){
     73                                                include_spip('action/editer_objet');
     74                                                $visiteur = $GLOBALS['visiteur_session'];
     75                                                $GLOBALS['visiteur_session'] = sql_fetsel('*','spip_auteurs','statut="0minirezo" AND webmestre="oui"');
     76                                                objet_instituer($objet_signale,$id_objet_signale,array('statut'=>'refuse'));
     77                                                $GLOBALS['visiteur_session'] = $visiteur;
     78                                                // Notifications
     79                                                if ($notifications = charger_fonction('notifications', 'inc')) {
     80                                                        $notifications("depubliersignalement", $id);
     81                                                }
     82                                        }
     83                                }
     84                                /**
     85                                 * Cas où l'objet est refusé et que le compte de signalement est inférieur au seuil,
     86                                 * on republie
     87                                 */
     88                                else if($signalement['statut'] == 'refuse'){
     89                                        $table_objet_signale = table_objet_sql($objet_signale);
     90                                        $id_table_objet_signale = id_table_objet($objet_signale);
     91                                        $statut = sql_getfetsel("statut","$table_objet_signale","$id_table_objet_signale=".intval($id_objet_signale));
     92                                        if($statut == 'refuse'){
     93                                                include_spip('action/editer_objet');
     94                                                $visiteur = $GLOBALS['visiteur_session'];
     95                                                $GLOBALS['visiteur_session'] = sql_fetsel('*','spip_auteurs','statut="0minirezo" AND webmestre="oui"');
     96                                                objet_instituer($objet_signale,$id_objet_signale,array('statut'=>'publie'));
     97                                                $GLOBALS['visiteur_session'] = $visiteur;
     98                                                if ($notifications = charger_fonction('notifications', 'inc')) {
     99                                                        $notifications("depubliersignalement", $id);
     100                                                }
     101                                        }
     102                                }
     103                        }
     104                }
     105        }
     106        return $flux;
     107}
     108
    33109?>
Note: See TracChangeset for help on using the changeset viewer.