Changeset 101478 in spip-zone


Ignore:
Timestamp:
Jan 2, 2017, 12:52:59 PM (3 years ago)
Author:
teddy.spip@…
Message:

Et voilà! La roadmap de la v2 est terminée!

  • On peut maintenant ajouter les articles mis à jour dans les envois d'alertes ;
  • Simplification du code pour les alertes (BO) sur les objets, tout se calcule dans le pipeline ;
  • On peut ajouter manuellement un article aux alertes si ce dernier a une date plus récente que sa date de publication ;
  • Suppression des logs _LOG_XXX qui induisent ici en erreur les logs ;
  • Par un genie, on stocke dans une table auxiliaire les dates de modif des articles pour pouvoir les comparer par la suite ;

On peut générer maintenant l'archive de cette nouvelle version du plugin. Il faudra écrire la documentation par la suite.

Location:
_plugins_/alertes/trunk
Files:
2 added
10 edited

Legend:

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

    r101351 r101478  
    1919function alertes_upgrade($nom_meta_base_version, $version_cible) {
    2020        include_spip('inc/meta');
     21        $maj = array();
     22
     23        $maj['create'] = array(
     24                array('creer_base'),
     25        );
    2126        $current_version = "0.0.0";
    2227        if ((!isset($GLOBALS['meta'][$nom_meta_base_version]))
     
    3338                }
    3439        }
     40        $maj['1.1.0'][] = array(
     41                'maj_tables',
     42                array(
     43                        'spip_alertes_articles',
     44                ),
     45        );
     46
     47        include_spip('base/upgrade');
     48        maj_plugin($nom_meta_base_version, $version_cible, $maj);
    3549}
    3650
     
    4559        sql_drop_table("spip_alertes");
    4660        sql_drop_table("spip_alertes_cron");
     61        sql_drop_table("spip_alertes_articles");
     62
     63        effacer_meta('alertes');
    4764        effacer_meta('config_alertes');
    4865        effacer_meta($nom_meta_base_version);
  • _plugins_/alertes/trunk/alertes_pipelines.php

    r101474 r101478  
    2929        if (is_array($a) AND intval($a['intervalle_cron']) > 1) {
    3030                $taches_generales['alertes'] = 60*intval($a['intervalle_cron']); // toutes les X minutes
     31                $taches_generales['alertes_maj_art'] = 60*intval($a['intervalle_cron']); // toutes les X minutes
    3132        }
    3233
     
    108109                                                                        if ($del = sql_delete('spip_alertes', 'id_auteur=' . $v['id_auteur'])) {
    109110                                                                                spip_log('Effacement des auteurs sans emails le ' . date('Y-m-d H:i:s'),
    110                                                                                         'alertes' . _LOG_INFO);
     111                                                                                        'alertes');
    111112                                                                        }
    112113                                                                }
     
    116117                                                        if ($del = sql_delete('spip_alertes', 'id_auteur=' . $abonne['id_auteur'])) {
    117118                                                                spip_log('Effacer des auteurs sans ID le ' . date('Y-m-d H:i:s'),
    118                                                                         'alertes' . _LOG_INFO);
     119                                                                        'alertes');
    119120                                                        }
    120121                                                }
     
    169170                                                                        if ($del = sql_delete('spip_alertes', 'id_auteur=' . $v['id_auteur'])) {
    170171                                                                                spip_log('Effacer des auteurs sans email le ' . date('Y-m-d H:i:s'),
    171                                                                                         'alertes' . _LOG_INFO);
     172                                                                                        'alertes');
    172173                                                                        }
    173174                                                                }
     
    177178                                                        if ($del = sql_delete('spip_alertes', 'id_auteur=' . $abonne['id_auteur'])) {
    178179                                                                spip_log('Effacer des auteurs sans ID le ' . date('Y-m-d H:i:s'),
    179                                                                         'alertes' . _LOG_INFO);
     180                                                                        'alertes');
    180181                                                        }
    181182                                                }
     
    230231                                                                        if ($del = sql_delete('spip_alertes', 'id_auteur=' . $v['id_auteur'])) {
    231232                                                                                spip_log('Effacer des auteurs sans email le ' . date('Y-m-d H:i:s'),
    232                                                                                         'alertes' . _LOG_INFO);
     233                                                                                        'alertes');
    233234                                                                        }
    234235                                                                }
     
    238239                                                        if ($del = sql_delete('spip_alertes', 'id_auteur=' . $abonne['id_auteur'])) {
    239240                                                                spip_log('Effacer des auteurs sans ID le ' . date('Y-m-d H:i:s'),
    240                                                                         'alertes' . _LOG_INFO);
     241                                                                        'alertes');
    241242                                                        }
    242243                                                }
     
    291292                                                                        if ($del = sql_delete('spip_alertes', 'id_auteur=' . $v['id_auteur'])) {
    292293                                                                                spip_log('Effacer des auteurs sans email le ' . date('Y-m-d H:i:s'),
    293                                                                                         'alertes' . _LOG_INFO);
     294                                                                                        'alertes');
    294295                                                                        }
    295296                                                                }
     
    299300                                                        if ($del = sql_delete('spip_alertes', 'id_auteur=' . $abonne['id_auteur'])) {
    300301                                                                spip_log('Effacer des auteurs sans ID le ' . date('Y-m-d H:i:s'),
    301                                                                         'alertes' . _LOG_INFO);
     302                                                                        'alertes');
    302303                                                        }
    303304                                                }
     
    351352                                                        if ($ok = $envoyer_mail($email, $sujet, $corps)) {
    352353                                                                //Email envoyé. On log.
    353                                                                 spip_log('Email correctement envoyer a ' . $email, 'alertes' . _LOG_INFO);
     354                                                                spip_log('Email correctement envoyer a ' . $email, 'alertes');
    354355                                                        } else {
    355356                                                                //Email non envoyé. On log.
    356                                                                 spip_log('Echec de l\'envoie d\'email a ' . $email, 'alertes' . _LOG_ERREUR);
     357                                                                spip_log('Echec de l\'envoie d\'email a ' . $email, 'alertes');
    357358                                                        }
    358359                                                }
     
    369370        include_spip('base/abstract_sql');
    370371        include_spip('inc/config');
     372
     373        $contexte = array();
     374        $contexte['objet'] = $flux['args']['exec'];
     375        $_id_objet = id_table_objet($flux['args']['exec']);
     376        $contexte['id_objet'] = isset($flux['args'][$_id_objet]) ? $flux['args'][$_id_objet] : 0;
     377        $contexte[$_id_objet] = isset($flux['args'][$_id_objet]) ? $flux['args'][$_id_objet] : 0;
     378        $contexte['editable'] = false;
     379        $contexte['editable_rubrique'] = false;
     380        $contexte['editable_secteur'] = false;
     381
     382        /**
     383         * On est sur une page rubrique ou auteur
     384         */
    371385        if (in_array($flux['args']['exec'], array('rubrique', 'auteur'))) {
    372386                $config = lire_config('config_alertes');
    373                 $contexte = array();
    374                 $contexte['objet'] = $flux['args']['exec'];
    375387                $_id_objet = id_table_objet($flux['args']['exec']);
    376388                $contexte['id_objet'] = $flux['args'][$_id_objet];
     389                if ($contexte['objet'] == 'rubrique') {
     390                        $contexte['id_secteur'] = trouver_secteur($contexte['id_objet']);
     391                }
    377392                if (in_array($contexte['id_objet'], to_array($config[table_objet($flux['args']['exec'])])) and $config['activer_alertes'] === 'oui') {
    378393                        $contexte['editable'] = true;
    379394                }
     395                if (isset($contexte['id_rubrique']) and in_array($contexte['id_rubrique'], to_array($config['rubriques']))) {
     396                        $contexte['editable_rubrique'] = true;
     397                }
     398                if (isset($contexte['id_secteur']) and in_array($contexte['id_secteur'], to_array($config['secteurs']))) {
     399                        $contexte['editable'] = true;
     400                        $contexte['editable_secteur'] = true;
     401                }
    380402                $flux['data'] = recuperer_fond('prive/squelettes/inclure/alertes', $contexte,
    381403                                array('ajax' => false)) . $flux['data'];
     404                $contexte['editable'] = false; /* On fait un petit reset */
    382405        }
     406        /**
     407         * On est sur une page article
     408         */
    383409        if ($flux['args']['exec'] == 'article') {
    384410                $config = lire_config('config_alertes');
    385                 $contexte = array();
    386                 $contexte['objet'] = $flux['args']['exec'];
    387                 $_id_objet = id_table_objet($flux['args']['exec']);
    388                 $contexte['id_objet'] = $flux['args'][$_id_objet];
    389411                $art = sql_fetsel(array('id_rubrique','id_secteur'), 'spip_articles', 'id_article='.sql_quote($contexte['id_objet']));
    390412                if (is_array($art) and count($art)) {
    391413                        $contexte = array_merge($contexte, $art);
    392414                }
    393                 if ((in_array($contexte['id_rubrique'], to_array($config['rubriques'])) or in_array($contexte['id_secteur'], to_array($config['secteurs']))) and $config['activer_alertes'] === 'oui') {
     415                if ((in_array($contexte['id_rubrique'], to_array($config['rubriques'])) or in_array($contexte['id_secteur'], to_array($config['secteurs']))) and $config['activer_alertes'] === 'oui' and $config['activer_alertes_articles'] === 'oui') {
    394416                        $contexte['editable'] = true;
     417                }
     418                if (in_array($contexte['id_rubrique'], to_array($config['rubriques']))) {
     419                        $contexte['editable_rubrique'] = true;
     420                }
     421                if (in_array($contexte['id_secteur'], to_array($config['secteurs']))) {
     422                        $contexte['editable_secteur'] = true;
    395423                }
    396424
    397425                $flux['data'] = recuperer_fond('prive/squelettes/inclure/alertes_articles', $contexte,
    398426                                array('ajax' => false)) . $flux['data'];
     427                $contexte['editable'] = false; /* On fait un petit reset */
    399428        }
    400429
  • _plugins_/alertes/trunk/base/alertes.php

    r101339 r101478  
    5656}
    5757
     58/**
     59 * Déclarer la table de stockage de la date de maj des articles
     60 *
     61 * @pipeline declarer_tables_objets_sql
     62 *
     63 * @param array $tables
     64 *     Description des tables
     65 *
     66 * @return array
     67 *     Description complétée des tables
     68 */
     69function alertes_declarer_tables_auxiliaires($tables) {
     70        //-- Table alertes_articles ----------------------------------------
     71        $tables['spip_alertes_articles'] = array(
     72                // Les champs et leurs particularités (clés etc)
     73                'field' => array(
     74                        'id_article' => "bigint(21) NOT NULL",
     75                        'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL",
     76                        'maj' => "TIMESTAMP",
     77                ),
     78                'key' => array(
     79                        "PRIMARY KEY" => "id_article",
     80                ),
     81        );
     82
     83        return $tables;
     84}
     85
  • _plugins_/alertes/trunk/formulaires/configurer_alertes.html

    r101474 r101478  
    1515                                        <li class="editer long_label editer_activer_alertes obligatoire[ (#GET{erreurs}|oui)erreur]">
    1616                                                <label><:alerte:alerts_activation:></label>
     17                                                [<span class='erreur_message'>(#GET{erreurs})</span>]
    1718                                                <div class="choix">
    1819                                                        <input type='radio' class="radio" name='activer_alertes' value='non' id='activer_alertes_non'[(#ENV{activer_alertes,non}|=={non}|oui)checked="checked"] />
     
    2425                                                </div>
    2526                                        </li>
     27                                        #SET{erreurs,#ENV**{erreurs}|table_valeur{activer_alertes_articles}}
     28                                        <li class="editer long_label editer_activer_alertes_articles obligatoire[ (#GET{erreurs}|oui)erreur][(#ENV{activer_alertes,non}|=={non}|oui)hidden invisible]">
     29                                                <label><:alerte:alerts_articles_activation:></label>
     30                                                [<span class='erreur_message'>(#GET{erreurs})</span>]
     31                                                <p class="explication" id="explication_activer_alertes_articles"><:alerte:activer_alertes_articles_explication:></p>
     32                                                <div class="choix">
     33                                                        <input type='radio' class="radio" name='activer_alertes_articles' value='non' id='activer_alertes_articles_non'[(#ENV{activer_alertes_articles,non}|=={non}|oui)checked="checked"] />
     34                                                        <label for='activer_alertes_articles_non'><:alerte:no:></label>
     35                                                </div>
     36                                                <div class="choix">
     37                                                        <input type='radio' class="radio" name='activer_alertes_articles' value='oui' id='activer_alertes_articles_oui'[(#ENV{activer_alertes_articles,non}|=={oui}|oui)checked="checked"] />
     38                                                        <label for='activer_alertes_articles_oui'><:alerte:yes:></label>
     39                                                </div>
     40                                        </li>
    2641                                        #SET{erreurs,#ENV**{erreurs}|table_valeur{mode_envoi}}
    2742                                        <li class="editer long_label editer_mode_envoi obligatoire[ (#GET{erreurs}|oui)erreur]">
    2843                                                <label><:alerte:sending_method:></label>
     44                                                [<span class='erreur_message'>(#GET{erreurs})</span>]
    2945                                                <div class="choix">
    3046                                                        <input type='radio' class="radio" name='mode_envoi' value='direct' id='mode_envoi_direct'[(#ENV{mode_envoi,direct}|=={direct}|oui)checked="checked"] />
  • _plugins_/alertes/trunk/formulaires/configurer_alertes.php

    r101474 r101478  
    5353        $a = serialize(array(
    5454                'activer_alertes' => _request('activer_alertes'),
     55                'activer_alertes_articles' => _request('activer_alertes_articles'),
    5556                'groupes' => _request('groupes'),
    5657                'secteurs' => _request('secteurs'),
  • _plugins_/alertes/trunk/genie/alertes.php

    r101351 r101478  
    1212
    1313function genie_alertes_dist($time) {
    14         spip_log('Lancement du cron', 'alertes' . _LOG_ERREUR);
     14        spip_log('Lancement du cron ' . __FUNCTION__, 'alertes');
    1515        include_spip('base/abstract_sql');
    1616        $now = date('Y-m-d H:i:s');
     
    3333        if ($nb_max > intval($a['nb_mails'])) {
    3434                $time = -intval($a['nb_mails']); //Si j'ai bien compris, temps en seconde avant de relancer la tâche non-terminée.
    35                 spip_log('Le temps sera fixe a ' . $time, 'alertes' . _LOG_ERREUR);
     35                spip_log('Le temps sera fixe a ' . $time, 'alertes');
    3636        }
    3737        //Parcours des alertes demandées, qui ne doivent pas être dans le futur
     
    4141                include_spip('classes/facteur'); //dépendance Facteur
    4242                $envoyer_mail = charger_fonction('envoyer_mail', 'inc/');
    43                 spip_log('Il y a des resultats', 'alertes' . _LOG_ERREUR);
     43                spip_log("Il y a des resultats\n" . print_r($resultats, true), 'alertes');
    4444                //Envoi des emails d'alertes
    4545                while ($res = sql_fetch($resultats)) {
     
    4747                        $id_auteur = $res['id_auteur'];
    4848                        $article_accessible = true;
    49                         spip_log('Pour ' . $id_article . ' on a auteur ' . $id_auteur . ' qui est abo', 'alertes' . _LOG_ERREUR);
     49                        spip_log('Pour ' . $id_article . ' on a auteur ' . $id_auteur . ' qui est abo', 'alertes');
    5050                        //On récupere l'email de l'auteur concerné
    5151                        if ($auteur = sql_select('id_auteur,email', 'spip_auteurs', 'id_auteur = ' . intval($id_auteur))) {
    52                                 spip_log('Il y a des abonnes : ' . $id_auteur, 'alertes' . _LOG_ERREUR);
     52                                spip_log('Il y a des abonnes : ' . $id_auteur, 'alertes');
    5353                                while ($aut = sql_fetch($auteur)) {
    5454                                        //Evidemment, il faut l'email du membre.
     
    6060                                        if ($acces_restreint == true) {
    6161                                                $article_accessible = false; //On repasse à false par défaut
    62                                                 spip_log('Il y a acces restreint', 'alertes' . _LOG_ERREUR);
     62                                                spip_log('Il y a acces restreint', 'alertes');
    6363                                                //Recuperation des zones de l'auteur
    6464                                                if ($zones = sql_select("id_zone", "spip_zones_liens",
     
    7373                                                                                $article_accessible = true; //Dès qu'on a une zone accessible, on passe à true
    7474                                                                                spip_log('mais on est dans une zone accessible pour ' . $id_article,
    75                                                                                         'alertes' . _LOG_ERREUR);
     75                                                                                        'alertes');
    7676                                                                        }
    7777                                                                }
     
    8080                                        }
    8181                                        if (($email) && ($statut == true) && ($article_accessible == true)) {
    82                                                 spip_log('On build le mail pour ' . $id_article, 'alertes' . _LOG_ERREUR);
     82                                                spip_log('On build le mail pour ' . $id_article, 'alertes');
    8383                                                //On build le mail à partir de templates
    8484                                                $header_email = recuperer_fond("alertes/header-email-alerte",
     
    9494                                                //On n'envoie que si on a un contenu (présumé dans le corps du mail)
    9595                                                if ($corps_email) {
    96                                                         spip_log('On prepare l\'envoi', 'alertes' . _LOG_ERREUR);
     96                                                        spip_log('On prepare l\'envoi', 'alertes');
    9797                                                        //Envoi email via Facteur
    9898                                                        $html = $header_email . $corps_email . $footer_email;
     
    106106                                                                $del = sql_delete('spip_alertes_cron',
    107107                                                                        'id_alerte_cron = ' . intval($res['id_alerte_cron']));
    108                                                                 spip_log('Email correctement envoyer a ' . $email, 'alertes' . _LOG_ERREUR);
     108                                                                spip_log('Email correctement envoyer a ' . $email, 'alertes');
    109109                                                        } else {
    110110                                                                //Email non envoyé. On log.
    111                                                                 spip_log('Echec de l\'envoie d\'email a ' . $email, 'alertes' . _LOG_ERREUR);
     111                                                                spip_log('Echec de l\'envoie d\'email a ' . $email, 'alertes');
    112112                                                        }
    113113                                                } else {
    114                                                         spip_log('On n\'a pas de contenu pour ' . $id_article, 'alertes' . _LOG_ERREUR);
     114                                                        spip_log('On n\'a pas de contenu pour ' . $id_article, 'alertes');
    115115                                                }
    116116                                        } else {
    117117                                                spip_log('Pas d\'email pour ' . $id_auteur . ' ou' . $id_article . 'non publie ou article inaccessible',
    118                                                         'alertes' . _LOG_ERREUR);
     118                                                        'alertes');
    119119                                                //Auteur sans email ou article non-publié/inexistant/restreint
    120120                                                if ($statut != true) {
  • _plugins_/alertes/trunk/lang/alerte_fr.php

    r101474 r101478  
    1414        'add' => 'Ajouter',
    1515        'add_to' => 'Ajouter &agrave; mes alertes',
     16        'add_article_to' => 'Ajouter cet article aux alertes',
    1617        'add_sector_to' => 'Ajouter ce secteur &agrave; mes alertes',
    1718        'alerts_activation' => 'Activer les alertes par email ?',
     19        'alerts_articles_activation' => 'Activer les alertes sur les articles mis à jour ?',
     20        'activer_alertes_articles_explication' => 'Vous devez activer le mode d\'envoi par CRON pour bénéficier de cette fonctionnalité.',
    1821        'alerts_configuration' => 'Configuration des alertes',
    1922        'alerts_configuration_message_ok' => 'La configuration a &eacute;t&eacute; sauvegard&eacute;e.',
     
    2225        'champ_id_objet_label' => 'Identifiant de l\'objet',
    2326        'champ_objet_label' => 'Objet',
     27        'confirmer_add_article_to' => 'Êtes-vous sûr de vouloir ajouter cet élément aux alertes ?',
    2428        'confirmer_add_to' => 'Êtes-vous sûr de vouloir ajouter cet élément à vos alertes ?',
    2529        'confirmer_remove_from' => 'Êtes-vous sûr de vouloir retirer cet élément à vos alertes ?',
  • _plugins_/alertes/trunk/paquet.xml

    r101474 r101478  
    33        categorie="communication"
    44        version="2.0.0"
    5         schema="1.0.1"
     5        schema="1.1.0"
    66        etat="test"
    77        compatibilite="[3.0.0;3.1.*]"
     
    2020        <pipeline nom="declarer_tables_principales" inclure="base/alertes.php" />
    2121        <pipeline nom="declarer_tables_interfaces" inclure="base/alertes.php" />
     22        <pipeline nom="declarer_tables_auxiliaires" inclure="base/alertes.php" />
    2223
    2324        <pipeline nom="notifications_destinataires" inclure="alertes_pipelines.php" />
  • _plugins_/alertes/trunk/prive/squelettes/inclure/alertes.html

    r101474 r101478  
    11#SET{config_objet,#CONFIG{config_alertes/#ENV{objet}|table_objet}|to_array}
    2 <BOUCLE_autorise(CONDITION){si #CONFIG{config_alertes/activer_alertes}|=={oui}|et{#ENV{id_objet}|in_array{#GET{config_objet}}|oui}}>
    3 [(#BOITE_OUVRIR{<:alerte:titre_alerte:>})]
     2<BOUCLE_editable (CONDITION){si #ENV{editable}|oui}>
     3[(#BOITE_OUVRIR{<:alerte:titre_alertes:>})]
    44<BOUCLE_compteur_objet (ALERTES) {objet} {id_objet} />
    5         <div class="nb_elements">
    6                 <div><a href="[(#URL_ECRIRE{alertes}|parametre_url{objet,#OBJET}|parametre_url{id_objet,#ID_OBJET})]">[(#TOTAL_BOUCLE|singulier_ou_pluriel{alerte:info_1_alerte_#OBJET,alerte:info_nb_alertes_#OBJET})]</a></div>
    7         </div><//B_compteur_objet>
     5        [<div class="nb_elements">
     6                <div><a href="[(#URL_ECRIRE{alertes}|parametre_url{objet,#OBJET}|parametre_url{id_objet,#ID_OBJET})]">(#TOTAL_BOUCLE|singulier_ou_pluriel{alerte:info_1_alerte_#OBJET,alerte:info_nb_alertes_#OBJET})</a></div>
     7        </div>]<//B_compteur_objet>
    88
    99[(#ID_OBJET|alertes_trouver{#OBJET,#SESSION{id_auteur}}|non)
     
    2626        Si on est sur un objet rubrique, il faut permettre de s'abonner au secteur.
    2727]
    28 <BOUCLE_objet_rubrique (CONDITION) {si #OBJET|=={rubrique}|oui}>
     28[(#SET{secteur,[(#ID_OBJET|trouver_secteur)]})]
     29<BOUCLE_objet_secteur (CONDITION) {si #ENV{editable_secteur}|oui}>
    2930        <hr class="nettoyeur"/>
    30         [(#SET{secteur,[(#ID_OBJET|trouver_secteur)]})]
    3131        <BOUCLE_compteur_secteur (ALERTES) {objet="secteur"} {id_objet=#GET{secteur}} />
    32         <div class="nb_elements">
    33                 <div><a href="[(#URL_ECRIRE{alertes}|parametre_url{objet,secteur}|parametre_url{id_objet,#GET{secteur}})]">[(#TOTAL_BOUCLE|singulier_ou_pluriel{alerte:info_1_alerte_secteur,alerte:info_nb_alertes_secteur})]</a></div>
    34         </div><//B_compteur_secteur>
     32        [<div class="nb_elements">
     33                <div><a href="[(#URL_ECRIRE{alertes}|parametre_url{objet,secteur}|parametre_url{id_objet,#GET{secteur}})]">(#TOTAL_BOUCLE|singulier_ou_pluriel{alerte:info_1_alerte_secteur,alerte:info_nb_alertes_secteur})</a></div>
     34        </div>]<//B_compteur_secteur>
    3535        [(#GET{secteur}|>{0}|oui)
    3636                [(#GET{secteur}|alertes_trouver{secteur,#SESSION{id_auteur}}|non)
     
    5151                ]
    5252        ]
    53 </BOUCLE_objet_rubrique>
     53</BOUCLE_objet_secteur>
    5454
    5555#BOITE_FERMER
    56 </BOUCLE_autorise>
     56</BOUCLE_editable>
  • _plugins_/alertes/trunk/prive/squelettes/inclure/alertes_articles.html

    r101474 r101478  
    11[(#REM)
    2         Pour bientôt
    3 ]
     2        Dans le pipeline alertes_affiche_droite(), on a vérifié que le présent article faisait parti des rubriques ou des secteurs abonnables, donc éditable.
     3Puis, on regarde s'il y a des abonnés à la rubrique et/ou au secteur. Enfin, on vérifie si l'article a été modifié depuis sa mise en ligne.
     4Si tous ces critères sont remplis, on affiche le bouton pour ajouter l'article aux envois d'alertes.
     5][(#SET{abonnement,0})]
     6<BOUCLE_editable (CONDITION) {si #ENV{editable}}>
     7        <BOUCLE_compteur_rubrique (ALERTES) {id_objet=#ENV{id_rubrique}} {objet='rubrique'}/>[(#SET{abonnement,#GET{abonnement}|plus{#TOTAL_BOUCLE}})]<//B_compteur_rubrique>
     8<BOUCLE_compteur_secteur (ALERTES) {id_objet=#ENV{id_secteur}} {objet='secteur'}/>[(#SET{abonnement,#GET{abonnement}|plus{#TOTAL_BOUCLE}})]<//B_compteur_secteur>
     9        <BOUCLE_principal (ARTICLES) {id_article}>
     10                <BOUCLE_modif (CONDITION) {si #DATE|affdate{'Ymd'}|<{#DATE_MODIF|affdate{'Ymd'}}|oui} {si #GET{abonnement}|>{0}|oui}>
     11                [(#BOITE_OUVRIR{<:alerte:titre_alertes:>})]
     12                        [(#BOUTON_ACTION{[(#CHEMIN{images/alerte-add-32.png}
     13                                |balise_img{<:alerte:add_article_to:>}|inserer_attribut{class,co_middle}
     14                                |image_reduire{24,24}
     15                                |concat{' <b>',<:alerte:add_article_to:>,'</b>'})],
     16                                [(#URL_ACTION_AUTEUR{ajouter_alerte_article,#ID_ARTICLE-[(#ENV{editable_rubrique}|?{#ID_RUBRIQUE,0})]-[(#ENV{editable_secteur}|?{#ID_SECTEUR,0})],#SELF})],
     17                                icone s24 horizontale alerte-24,<:alerte:confirmer_add_article_to:>})]
     18                #BOITE_FERMER
     19                </BOUCLE_modif>
     20        </BOUCLE_principal>
     21</BOUCLE_editable>
     22[(#FILTRE{trim})]
Note: See TracChangeset for help on using the changeset viewer.