Changeset 122455 in spip-zone


Ignore:
Timestamp:
Feb 13, 2020, 9:58:43 AM (6 days ago)
Author:
Cerdic
Message:

Gestion du statut des repetitions : par defaut interdit de le modifier et c'est le statut de la repetition source qui s'applique, sauf si on desynchronise l'evenement, auquel cas on peut ensuite le publier/depublier independamment

Location:
_plugins_/agenda/trunk
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/agenda/trunk

    • Property subgit:lock:b5dc1a46ec594ced5a5a1b480d8d0de6dd89fc9c deleted
    • Property subgit:lock:56a8f752a2f05b10487a1b88b330d5eee3172f17 set to 2020-02-13T10:58:55.891
  • _plugins_/agenda/trunk/action/editer_evenement.php

    r122432 r122455  
    327327        $id_parent  = $id_parent_ancien = $row['id_article'];
    328328        $statut = $statut_ancien = $row['statut'];
     329        $propager_statut_toutes_repetitions = false;
    329330
    330331        $champs = array();
     
    361362                                // si article a la poubelle, evenement aussi
    362363                                $champs['statut'] = $statut = 'poubelle';
     364                                $propager_statut_toutes_repetitions = true;
    363365                                break;
    364366                        default:
     
    366368                                if (in_array($statut, array('publie','0'))) {
    367369                                        $champs['statut'] = $statut = 'prop';
     370                                        $propager_statut_toutes_repetitions = true;
    368371                                }
    369372                                break;
     
    375378        if ($statut=='0') {
    376379                $champs['statut'] = $statut = 'prop';
     380                $propager_statut_toutes_repetitions = true;
    377381        }
    378382
     
    408412        }
    409413
    410         // Envoyer les modifs sur l'evenement et toutes ses repetitons
    411         $ids = array_map('reset', sql_allfetsel('id_evenement', 'spip_evenements', 'id_evenement_source='.intval($id_evenement)));
     414        // Envoyer les modifs sur l'evenement et toutes ses repetitons synchro
     415        $ids = sql_allfetsel('id_evenement', 'spip_evenements', 'modif_synchro_source=1 and id_evenement_source='.intval($id_evenement));
     416        $ids = array_column($ids, 'id_evenement');
    412417        $ids[] = intval($id_evenement);
    413418        sql_updateq('spip_evenements', $champs, sql_in('id_evenement', $ids));
     419
     420        // et les eventuelles propagations aux repetitions non synchro
     421        if (!empty($champs['id_article'])) {
     422                sql_updateq('spip_evenements', ['id_article' => $champs['id_article']], 'modif_synchro_source=0 and id_evenement_source='.intval($id_evenement));
     423        }
     424        if (!empty($champs['statut']) and $propager_statut_toutes_repetitions) {
     425                sql_updateq('spip_evenements', ['statut' => $champs['statut']], 'modif_synchro_source=0 and id_evenement_source='.intval($id_evenement));
     426        }
    414427
    415428        // Invalider les caches
  • _plugins_/agenda/trunk/agenda_autoriser.php

    r113129 r122455  
    104104 */
    105105function autoriser_evenement_instituer_dist($faire, $quoi, $id, $qui, $options) {
     106        $evenement = sql_fetsel('*', 'spip_evenements', 'id_evenement='.intval($id));
     107        if (!$evenement) {
     108                return false;
     109        }
     110        // on ne modifie pas independamment le statut d'un evenement repetition qui reste synchro sur l'evenement source
     111        if ($evenement['id_evenement_source']!=0
     112                and $evenement['modif_synchro_source']) {
     113                return false;
     114        }
    106115        if (!isset($options['id_article']) or !$id_article=$options['id_article']) {
    107                 $id_article = sql_getfetsel('id_article', 'spip_evenements', 'id_evenement='.intval($id));
     116                $id_article = $evenement['id_article'];
    108117        }
    109118        if (!$id_article) {
    110119                return false;
    111120        }
    112         $statut = sql_getfetsel('statut', 'spip_articles', 'id_article='.intval($id_article));
    113         // interdit de publier un evenement sur un article non publie
    114         if ($statut!=='publie'
    115                 and isset($options['statut'])
    116                 and $options['statut']=='publie') {
    117                 return false;
     121        if (isset($options['statut'])) {
     122                $statut = sql_getfetsel('statut', 'spip_articles', 'id_article='.intval($id_article));
     123                // interdit de publier un evenement sur un article non publie
     124                if ($statut!=='publie'
     125                        and $options['statut']=='publie') {
     126                        return false;
     127                }
    118128        }
    119129        $options['id_article'] = $id_article;
  • _plugins_/agenda/trunk/agenda_pipelines.php

    r122357 r122455  
    181181                and lire_config('agenda/synchro_statut', 1)) {
    182182                $set = array();
    183                 // les evenements principaux, associes a cet article
    184                 $where = array('id_article='.intval($id_article),'id_evenement_source=0');
     183                // les evenements de cet article
     184                $where = array('id_article='.intval($id_article));
    185185                switch ($statut) {
    186186                        case 'poubelle':
     
    189189                                break;
    190190                        case 'publie':
    191                                 // on passe aussi tous les evenements prop en publie
     191                                // on passe aussi tous les evenements principaux prop en publie
     192                                // (sera repercute sur les repetitions synchro automatiquement)
    192193                                $set['statut'] = 'publie';
     194                                $where[] = "id_evenement_source=0";
    193195                                $where[] = "statut='prop'";
    194196                                break;
    195197                        default:
    196198                                if ($statut_ancien=='publie') {
    197                                         // on depublie aussi tous les evenements publie
     199                                        // on depublie aussi tous les evenements source publie
    198200                                        $set['statut'] = 'prop';
     201                                        $where[] = "id_evenement_source=0";
    199202                                        $where[] = "statut='publie'";
    200203                                }
    201204                                break;
    202205                }
     206
    203207                if (count($set)) {
    204208                        include_spip('action/editer_evenement');
     
    206210                        // et on applique a tous les evenements lies a l'article
    207211                        while ($row = sql_fetch($res)) {
     212                                autoriser_exception('instituer', 'evenement', $row['id_evenement']);
    208213                                evenement_modifier($row['id_evenement'], $set);
     214                                autoriser_exception('instituer', 'evenement', $row['id_evenement'], false);
    209215                        }
    210216                }
  • _plugins_/agenda/trunk/lang/agenda_fr.php

    r122378 r122455  
    2525        'bouton_annuler' => 'Annuler',
    2626        'bouton_supprimer' => 'Supprimer',
     27        'bouton_modifier_repetition' => 'Modifier cette répétition',
    2728
    2829        // C
  • _plugins_/agenda/trunk/paquet.xml

    r122441 r122455  
    22        prefix="agenda"
    33        categorie="date"
    4         version="4.0.5"
     4        version="4.0.6"
    55        etat="test"
    66        compatibilite="[3.2.0;3.3.*]"
  • _plugins_/agenda/trunk/prive/objets/infos/evenement.html

    r99125 r122455  
    44<div class='numero'><:titre_cadre_numero_objet{objet=#GET{texte_objet}}:><p>#ID_EVENEMENT</p></div>
    55
    6 [(#FORMULAIRE_INSTITUER_OBJET{evenement,#ID_EVENEMENT})]
     6[(#FORMULAIRE_INSTITUER_OBJET{evenement,#ID_EVENEMENT,'',#ID_EVENEMENT_SOURCE|non|ou{#MODIF_SYNCHRO_SOURCE|non}})]
     7
     8[(#ID_EVENEMENT_SOURCE|et{#MODIF_SYNCHRO_SOURCE})
     9        <div class="center">
     10                [(#BOUTON_ACTION{<:agenda:bouton_modifier_repetition:>,#URL_ACTION_AUTEUR{separer_evenement_repetition,#ID_EVENEMENT,#SELF}})]
     11        </div>
     12]
    713
    814[(#REM)
Note: See TracChangeset for help on using the changeset viewer.