Changeset 101473 in spip-zone


Ignore:
Timestamp:
Jan 1, 2017, 10:44:22 PM (3 years ago)
Author:
teddy.spip@…
Message:

Début de refonte du plugin. On passe en v2.

  • On peut maintenant voir depuis le BO le nombre d'abonnement aux alertes ;
  • On peut s'abonner depuis l'espace privé sur les rubriques et secteurs enregistrés dans la config ;
  • On crée un fichier d'action pour ne pas modifier et casser supprimer_alerte.
Location:
_plugins_/alertes/trunk
Files:
17 added
9 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/alertes/trunk/alertes_fonctions.php

    r101339 r101473  
    1010}
    1111
    12 /*** Fonction transformant une liste de valeurs séparées par des virgules en array ***/
     12/**
     13 * Fonction transformant une liste de valeurs séparées par des virgules en array
     14 *
     15 * @param string $texte
     16 *
     17 * @return array
     18 */
    1319function to_array($texte) {
    1420        $texte = preg_replace('/\s/', '', trim($texte));
     
    1824}
    1925
     26/**
     27 * Retrouver le secteur d'une rubrique
     28 *
     29 * @param int $id_rubrique
     30 *
     31 * @return bool|mixed
     32 */
     33function trouver_secteur($id_rubrique) {
     34        include_spip('base/abstract_sql');
     35        $id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', "id_rubrique=" . sql_quote($id_rubrique));
     36
     37        if ($id_secteur > 0) {
     38                return $id_secteur;
     39        }
     40
     41        return false;
     42}
     43
     44/**
     45 * Savoir si l'alerte demandée est une alerte de l'auteur
     46 *
     47 * @param int $id_alerte
     48 *
     49 * @return bool
     50 */
     51function alerte_auteur($id_alerte, $id_auteur = null) {
     52        include_spip('base/abstract_sql');
     53        if ($id_auteur == null) {
     54                include_spip('inc/session');
     55                $id_auteur = session_get('id_auteur');
     56        }
     57
     58        $association = sql_getfetsel('id_alerte', 'spip_alertes',
     59                "id_alerte=" . sql_quote($id_alerte) . " AND id_auteur=" . sql_quote($id_auteur));
     60        if ($association == $id_alerte) {
     61                return true;
     62        }
     63
     64        return false;
     65}
  • _plugins_/alertes/trunk/alertes_pipelines.php

    r101351 r101473  
    366366}
    367367
     368function alertes_affiche_droite($flux) {
     369        if (in_array($flux['args']['exec'], array('rubrique', 'auteur'))) {
     370                $config = lire_config('config_alertes');
     371                $contexte = array();
     372                $contexte['objet'] = $flux['args']['exec'];
     373                $_id_objet = id_table_objet($flux['args']['exec']);
     374                $contexte['id_objet'] = $flux['args'][$_id_objet];
     375                if (in_array($contexte['id_objet'], to_array($config[table_objet($flux['args']['exec'])]))) {
     376                        $contexte['editable'] = true;
     377                }
     378                $flux['data'] = recuperer_fond('prive/squelettes/inclure/alertes', $contexte,
     379                                array('ajax' => false)) . $flux['data'];
     380        }
     381
     382        return $flux;
     383}
  • _plugins_/alertes/trunk/formulaires/alerte.html

    r101339 r101473  
    55
    66<BOUCLE_autorise(CONDITION){si #CONFIG{config_alertes/activer_alertes}|=={oui}|et{#ENV{objet_autoriser}|=={oui}}}>
    7 <div class="formulaire_alerte ajax">
     7<div class="formulaire_spip formulaire_#FORM ajax">
    88[(#ENV**{editable}|oui)
    99        <form action="#ENV{action}" method="post" enctype="multipart/form-data">
    1010                #ACTION_FORMULAIRE{#SELF}
    1111                <div>
     12                        <div class="boutons">
    1213                        [(#ENV{_deja_alerte}|non)
    1314                        <button type='submit' class="submit ajouter_alerte" name="ajouter" value="<:alertes:add_to|attribut_html:>" title="<:alertes:add_to|attribut_html:>">
    1415                                <span><:alertes:add_to|attribut_html:></span>
    15                                 <img height="32" width="32" src=" #CHEMIN{images/alerte-add-32.png}" alt="<:alertes:add_to|attribut_html:>" />
     16                                [(#CHEMIN{images/alerte-add-32.png}|balise_img{<:alertes:add_to|attribut_html:>})]
    1617                        </button>
    1718                        ][(#ENV{_deja_alerte}|oui)
    1819                        <button type='submit' class="submit retirer_alerte" name="retirer" value="<:alertes:remove_from|attribut_html:>" title="<:alertes:remove_from|attribut_html:>">
    1920                                <span><:alertes:remove_from|attribut_html:></span>
    20                                 <img height="32" width="32" src=" #CHEMIN{/alerte-remove-32.png}" alt="<:alertes:remove_from|attribut_html:>" />
     21                                [(#CHEMIN{images/alerte-remove-32.png}|balise_img{<:alertes:remove_from|attribut_html:>})]
    2122                        </button>
    2223                        ]
     24                        </div>
    2325                </div>
    2426        </form>
  • _plugins_/alertes/trunk/formulaires/alertes_email.html

    r101351 r101473  
    44]
    55
    6 [(#REM) Compatibilité Accès restreint : proposer les rubriques restreintes auxquelles l'auteur a accès]
    7 <BOUCLE_si_acces_restreint(CONDITION){si #PLUGIN{accesrestreint}}>
    8         #SET{rubriques_restreintes,#ENV{rubriques_restreintes}}
    9 </BOUCLE_si_acces_restreint>
    10 <//B_si_acces_restreint>
    11 
    12 <div class="formulaire_spip formulaire_alertes_email">
     6<BOUCLE_autorise (CONDITION){si #CONFIG{config_alertes/activer_alertes}|=={oui}}>
     7<div class="formulaire_spip formulaire_#FORM">
    138        [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    149        [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
     
    1813                <ul class="editer-groupe">
    1914                [(#REM) Abonnement aux secteurs]
     15                <BOUCLE_editable_secteurs (CONDITION) {si #ENV{editable_secteurs}}> </BOUCLE_editable_secteurs>
    2016                <B_alertes_secteurs>
    2117                <li class="fieldset secteurs">
     
    2521                                        #SET{erreurs,#ENV**{erreurs}|table_valeur{secteurs}}
    2622                                        <li class="editer editer_secteurs[ (#GET{erreurs}|oui)erreur]">
    27                                         <BOUCLE_alertes_secteurs(RUBRIQUES){tout}{racine}{id_secteur IN #CONFIG{config_alertes/secteurs}|to_array}>     
    28                                         [(#REM) Accès restreint, on propose la rubrique que si elle est dans celles auquelles a accès l'auteur]                                 
    29                                         <BOUCLE_si_acces_restreint_sec(CONDITION){si #PLUGIN{accesrestreint}}>
    30                                                         <BOUCLE_si_restreint2(CONDITION){si #GET{rubriques_restreintes}|find{#ID_RUBRIQUE}|oui}>       
    31                                                         <div class="choix">
    32                                                                 <input type="checkbox" class="checkbox" name="secteurs[]" id="secteur-#ID_RUBRIQUE" value="#ID_RUBRIQUE"[ (#ENV{secteurs}|find{#ID_RUBRIQUE}|oui)checked="checked"]/>
    33                                                                 <label for="secteur-#ID_RUBRIQUE">#TITRE</label>
    34                                                         </div>
    35                                                         </BOUCLE_si_restreint2>
    36                                         </BOUCLE_si_acces_restreint_sec>
    37                                         [(#REM) Pas d'accès restreint, on propose la rubrique]
     23                                        <BOUCLE_alertes_secteurs (RUBRIQUES) {racine} {id_rubrique IN #CONFIG{config_alertes/secteurs}|to_array}>
    3824                                        <div class="choix">
    3925                                                <input type="checkbox" class="checkbox" name="secteurs[]" id="secteur-#ID_RUBRIQUE" value="#ID_RUBRIQUE"[ (#ENV{secteurs}|find{#ID_RUBRIQUE}|oui)checked="checked"]/>
    4026                                                <label for="secteur-#ID_RUBRIQUE">#TITRE</label>
    4127                                        </div>
    42                                         <//B_si_acces_restreint_sec>
    4328                                        </BOUCLE_alertes_secteurs>
    4429                                        </li>
     
    4732                </li>
    4833                </B_alertes_secteurs>
    49                
     34                </B_editable_secteurs>
     35
    5036                [(#REM) Abonnements aux rubriques spécifiques]
     37                <BOUCLE_editable_rubriques (CONDITION) {si #ENV{editable_rubriques}}> </BOUCLE_editable_rubriques>
    5138                <B_alertes_rubriques>
    5239                <li class="fieldset rubriques">
     
    5643                                        #SET{erreurs,#ENV**{erreurs}|table_valeur{rubriques}}
    5744                                        <li class="editer editer_rubriques[ (#GET{erreurs}|oui)erreur]">
    58                                         <BOUCLE_alertes_rubriques(RUBRIQUES){tout}{id_rubrique IN #CONFIG{config_alertes/rubriques}|to_array}>
    59                                                 [(#REM) Accès restreint, on propose la rubrique que si elle est dans celles auquelles a accès l'auteur]
    60                                                 <BOUCLE_si_acces_restreint_rub(CONDITION){si #PLUGIN{accesrestreint}}>
    61                                                         <BOUCLE_si_restreint1(CONDITION){si #GET{rubriques_restreintes}|find{#ID_RUBRIQUE}|oui}>       
    62                                                         <div class="choix">
    63                                                                 <input type="checkbox" class="checkbox" name="rubriques[]" id="rubrique-#ID_RUBRIQUE" value="#ID_RUBRIQUE"[ (#ENV{rubriques}|find{#ID_RUBRIQUE}|oui)checked="checked"]/>
    64                                                                 <label for="rubrique-#ID_RUBRIQUE">#TITRE</label>
    65                                                         </div>
    66                                                         </BOUCLE_si_restreint1>
    67                                                 </BOUCLE_si_acces_restreint_rub>
    68                                                 [(#REM) Pas d'accès restreint, on propose la rubrique]
     45                                        <BOUCLE_alertes_rubriques (RUBRIQUES) {id_rubrique IN #CONFIG{config_alertes/rubriques}|to_array}>
    6946                                                <div class="choix">
    70                                                         <input type="checkbox" class="checkbox" name="rubriques[]" id="rubrique-#ID_RUBRIQUE" value="#ID_RUBRIQUE"[ (#ENV{rubriques}|find{#ID_RUBRIQUE}|oui)checked="checked"]/>
     47                                                        <input type="checkbox" class="checkbox" name="rubriques[]" id="rubrique-#ID_RUBRIQUE" value="#ID_RUBRIQUE"[(#ENV{rubriques}|find{#ID_RUBRIQUE}|oui)checked="checked"]/>
    7148                                                        <label for="rubrique-#ID_RUBRIQUE">#TITRE</label>
    7249                                                </div>
    73                                                 <//B_si_acces_restreint_rub>
    7450                                        </BOUCLE_alertes_rubriques>
    7551                                        </li>
     
    7854                </li>
    7955                </B_alertes_rubriques>
    80                
     56                </B_editable_rubriques>
     57
    8158                [(#REM) Abonnements aux mots-clès, par groupes de mots autorisés]
     59                <BOUCLE_editable_groupes (CONDITION) {si #ENV{editable_groupes}}> </BOUCLE_editable_groupes>
    8260                <B_groupes_mots>
    8361                        <li><h3 class="legend"><:alertes:abo_keywords:></h3></li>
     
    10381                        </BOUCLE_groupes_mots>
    10482                </B_groupes_mots>
    105                
     83                </B_editable_groupes>
     84
    10685                [(#REM) Abonnements aux auteurs]
     86                <BOUCLE_editable_auteurs (CONDITION) {si #ENV{editable_auteurs}}> </BOUCLE_editable_auteurs>
    10787                <B_alertes_auteurs>
    10888                <li class="fieldset auteurs">
     
    11292                                        #SET{erreurs,#ENV**{erreurs}|table_valeur{auteurs}}
    11393                                        <li class="editer editer_auteurs">
    114                                                 <BOUCLE_alertes_auteurs(AUTEURS){tout}{id_auteur IN #CONFIG{config_alertes/auteurs}|to_array}>
     94                                                <BOUCLE_alertes_auteurs (AUTEURS) {tout}{id_auteur IN #CONFIG{config_alertes/auteurs}|to_array}>
    11595                                                <div class="choix">
    11696                                                        <input type="checkbox" class="checkbox" name="auteurs[]" id="auteur-#ID_AUTEUR" value="#ID_AUTEUR"[ (#ENV{auteurs}|find{#ID_AUTEUR}|oui)checked="checked"]/>
     
    123103                </li>
    124104                </B_alertes_auteurs>
    125                
     105                </B_editable_auteurs>
     106
    126107                </ul>
    127                 <p class="boutons"><input type="submit" name="submit" class="submit" value="<:pass_ok:>" /></p>
     108                <p class="boutons"><input type="submit" name="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
    128109                </div>
    129110        </form>
    130111</div>
     112</BOUCLE_autorise>
  • _plugins_/alertes/trunk/formulaires/alertes_email.php

    r101351 r101473  
    4545                        $valeurs['mots'] = $mots ? $mots : '';
    4646                }
     47                $valeurs['editable_groupes'] = false;
     48                if (isset($a['groupes']) and $a['groupes'] = to_array($a['groupes']) and count($a['groupes'])) {
     49                        $valeurs['editable_groupes'] = true;
     50                }
    4751                //Récuperation des abonnements aux rubriques
    4852                if ($a['rubriques']) {
     
    5357                        }
    5458                        $valeurs['rubriques'] = $rubriques ? $rubriques : '';
     59                }
     60                $valeurs['editable_rubriques'] = false;
     61                if (isset($a['rubriques']) and $a['rubriques'] = to_array($a['rubriques']) and count($a['rubriques'])) {
     62                        $valeurs['editable_rubriques'] = true;
    5563                }
    5664                //Récuperation des abonnements aux secteurs
     
    6371                        $valeurs['secteurs'] = $secteurs ? $secteurs : '';
    6472                }
     73                $valeurs['editable_secteurs'] = false;
     74                if (isset($a['secteurs']) and $a['secteurs'] = to_array($a['secteurs']) and count($a['secteurs'])) {
     75                        $valeurs['editable_secteurs'] = true;
     76                }
    6577                //Récuperation des abonnements aux auteurs
    6678                if ($a['auteurs']) {
     
    7183                        }
    7284                        $valeurs['auteurs'] = $auteurs ? $auteurs : '';
     85                }
     86                $valeurs['editable_auteurs'] = false;
     87                if (isset($a['auteurs']) and $a['auteurs'] = to_array($a['auteurs']) and count($a['auteurs'])) {
     88                        $valeurs['editable_auteurs'] = true;
    7389                }
    7490        }
  • _plugins_/alertes/trunk/formulaires/configurer_alertes.html

    r101351 r101473  
    22        Formulaire de configuration du système d'alertes. Permet de choisir ce qui est "abonnable".
    33]
    4 <div class="formulaire_spip formulaire_configurer_alertes">
     4<div class="formulaire_spip formulaire_#FORM">
    55        [<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>]
    66        [<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>]
     
    7979                                </ul>
    8080                        </fieldset>
    81                         <p class="boutons"><input type="submit" class="submit" value="<:pass_ok:>" /></p>
     81                        <p class="boutons"><input type="submit" class="submit" value="<:bouton_enregistrer:>" /></p>
    8282                </div>
    8383        </form>
  • _plugins_/alertes/trunk/inc/alertes.php

    r101339 r101473  
    77 */
    88
    9 
     9/**
     10 * Cette fonction permet de supprimer une alerte.
     11 * Il faut lui passer en argument un tableau contenant le `WHERE` de la requête SQL.
     12 *
     13 * @example
     14 *      alertes_supprimer(array('id_alerte' => 2));
     15 *
     16 * @param array $paires
     17 */
    1018function alertes_supprimer($paires) {
    11         if (count($paires)) {
     19        if (is_array($paires) and count($paires)) {
    1220                $cond = array();
    1321                foreach ($paires as $k => $v) {
     
    2533}
    2634
     35/**
     36 * Ajouter une nouvelle alerte pour un auteur donné.
     37 *
     38 * @param int $id_objet
     39 * @param string $objet
     40 * @param int $id_auteur
     41 *
     42 * @return bool
     43 *      true : Si l'alerte a bien été ajouté
     44 *      false : Si l'alerte existe déjà en base ou si les arguments passés en paramètre ne sont pas conforme.
     45 */
    2746function alertes_ajouter($id_objet, $objet, $id_auteur) {
     47        include_spip('inc/utils');
    2848        if ($id_auteur
    2949                AND $id_objet = intval($id_objet)
     
    3656                        suivre_invalideur("alerte/$objet/$id_objet");
    3757                        suivre_invalideur("alerte/auteur/$id_auteur");
     58                        spip_log("L'alerte $id_objet-$objet-$id_auteur a été ajouté.", "alertes");
     59
     60                        return true;
    3861                }
     62                spip_log("Erreur ajouter alerte $id_objet-$objet-$id_auteur, l'alerte existe déjà.", "alertes");
     63
     64                return false;
    3965        } else {
    40                 spip_log("erreur ajouter alerte $id_objet-$objet-$id_auteur");
     66                spip_log("Erreur ajouter alerte $id_objet-$objet-$id_auteur", "alertes");
     67
     68                return false;
    4169        }
    4270}
    4371
     72/**
     73 * Recherche l'alerte lié à l'auteur et l'objet en court.
     74 *
     75 * @param int $id_objet
     76 * @param string $objet
     77 * @param int $id_auteur
     78 *
     79 * @return array|bool
     80 */
    4481function alertes_trouver($id_objet, $objet, $id_auteur) {
    4582        $row = false;
  • _plugins_/alertes/trunk/lang/alertes_fr.php

    r101339 r101473  
    1111        'abo_sectors' => 'Cochez les secteurs auxquels vous souhaitez vous abonner',
    1212        'abo_topics' => 'Cochez les rubriques auxquelles vous souhaitez vous abonner',
     13        'actions_label' => 'Actions',
    1314        'add' => 'Ajouter',
    1415        'add_to' => 'Ajouter &agrave; mes alertes',
     16        'add_sector_to' => 'Ajouter ce secteur &agrave; mes alertes',
    1517        'alerts_activation' => 'Activer les alertes par email ?',
    1618        'alerts_configuration' => 'Configuration des alertes',
    1719        'alerts_configuration_message_ok' => 'La configuration a &eacute;t&eacute; sauvegard&eacute;e.',
     20        // C
     21        'champ_id_auteur_label' => 'Identifiant de l\'auteur',
     22        'champ_id_objet_label' => 'Identifiant de l\'objet',
     23        'champ_objet_label' => 'Objet',
     24        'confirmer_add_to' => 'Êtes-vous sûr de vouloir ajouter cet élément à vos alertes ?',
     25        'confirmer_remove_from' => 'Êtes-vous sûr de vouloir retirer cet élément à vos alertes ?',
    1826        // E
     27        'en_ligne' => 'En ligne',
    1928        'except_post_dated' => '(sauf les articles post-dat&eacute;s)',
    2029        // G
     
    2736        'id_sectors' => 'Identifiants des secteurs abonnables',
    2837        'id_topics' => 'Identifiants des rubriques abonnables',
     38        'info_1_alerte_' => 'Une alerte',
     39        'info_1_alerte_auteur' => 'Une alerte pour cet auteur',
     40        'info_1_alerte_rubrique' => 'Une alerte pour cette rubrique',
     41        'info_1_alerte_secteur' => 'Une alerte pour ce secteur',
     42        'info_aucune_alerte' => 'Aucune alerte enregistrée',
     43        'info_nb_alertes_' => '@nb@ alertes',
     44        'info_nb_alertes_auteur' => '@nb@ alertes pour cet auteur',
     45        'info_nb_alertes_rubrique' => '@nb@ alertes pour cette rubrique',
     46        'info_nb_alertes_secteur' => '@nb@ alertes pour ce secteur',
     47        // M
     48        'maj' => 'Date de création',
    2949        // N
    3050        'no' => 'Non',
     
    3656        'remove' => 'Retirer',
    3757        'remove_from' => 'Retirer de mes alertes',
     58        'remove_sector_from' => 'Retirer ce secteur de mes alertes',
    3859        'required_field' => 'Cette information est obligatoire !',
    3960        // S
     
    4465        // T
    4566        'title_menu_configuration' => 'Configuration Alertes',
     67        'titre_alertes' => 'Alertes',
    4668        // Y
    4769        'yes' => 'Oui',
  • _plugins_/alertes/trunk/paquet.xml

    r101386 r101473  
    22        prefix="alertes"
    33        categorie="communication"
    4         version="1.3.3"
     4        version="2.0.0"
    55        schema="1.0.1"
    66        etat="test"
     
    1313
    1414        <auteur lien="http://contrib.spip.net/Gael-Chareyre">Gael Chareyre</auteur>
     15        <auteur>Teddy Payet</auteur>
    1516
    1617        <menu nom="configurer_alertes" titre="alertes:title_menu_configuration" parent="menu_configuration" icone="images/alertes-16.png" />
     
    2223        <pipeline nom="insert_head_css" inclure="alertes_pipelines.php" />
    2324        <pipeline nom="taches_generales_cron" inclure="alertes_pipelines.php" />
     25        <pipeline nom="affiche_droite" inclure="alertes_pipelines.php" />
    2426
    2527        <necessite nom="facteur" compatibilite="[3.4.7;]" />
Note: See TracChangeset for help on using the changeset viewer.