Changeset 54006 in spip-zone


Ignore:
Timestamp:
Nov 3, 2011, 7:59:38 PM (8 years ago)
Author:
cedric@…
Message:

corriger le retour du formulaire
debut de refoactoring/modernisation de editer_evenement

Location:
_plugins_/agenda/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/agenda/trunk/action/editer_evenement.php

    r48210 r54006  
    77 */
    88
    9 function action_editer_evenement_dist(){
    10 
    11         $securiser_action = charger_fonction('securiser_action', 'inc');
    12         $arg = $securiser_action();
    13 
    14         // si id_article n'est pas un nombre, c'est une creation
     9
     10function action_editer_evenement_dist($arg=null){
     11
     12        if (is_null($arg)){
     13                $securiser_action = charger_fonction('securiser_action', 'inc');
     14                $arg = $securiser_action();
     15        }
     16
     17        // si id_evenement n'est pas un nombre, c'est une creation
    1518        // mais on verifie qu'on a toutes les donnees qu'il faut.
    1619        if (!$id_evenement = intval($arg)) {
     
    2427}
    2528
    26 function action_evenement_set($id_evenement, $set=null){
    27         $err = '';
    28 
    29         if (is_null($set)){
    30                 $c = array();
    31                 foreach (array(
    32                         'titre', 'descriptif', 'lieu', 'id_parent',
    33                         'inscription','places','adresse',
    34                 ) as $champ)
    35                         $c[$champ] = _request($champ);
    36 
    37                 $c['horaire'] = _request('horaire')=='non'?'non':'oui';
    38                 include_spip('inc/date_gestion');
    39                 $date_debut = verifier_corriger_date_saisie('debut',$c['horaire']=='oui',$erreurs);
    40                 $date_fin = verifier_corriger_date_saisie('fin',$c['horaire']=='oui',$erreurs);
    41 
    42                 $c['date_debut'] = date('Y-m-d H:i:s',$date_debut);
    43                 $c['date_fin'] = date('Y-m-d H:i:s',$date_fin);
    44         }
    45         else
    46                 $c = $set;
     29/**
     30 * creer un nouvel evenement
     31 * @param int $id_article
     32 * @param int $id_evenement_source
     33 * @return int
     34 */
     35function evenement_inserer($id_article,$id_evenement_source = 0){
     36        include_spip('inc/autoriser');
     37        if (!autoriser('creerevenementdans','article',$id_article)){
     38                spip_log("agenda action formulaire article : auteur ".$GLOBALS['visiteur_session']['id_auteur']." n'a pas le droit de creer un evenement dans article $id_article",'agenda');
     39                return false;
     40        }
     41
     42        $champs = array(
     43                "id_evenement_source"=>intval($id_evenement_source),
     44                'id_article'=>intval($id_article),
     45                "maj"=>date("Y-m-d H:i:s"),
     46                'statut' => 'prepa',
     47        );
     48
     49        // Envoyer aux plugins
     50        $champs = pipeline('pre_insertion',
     51                array(
     52                        'args' => array(
     53                                'table' => 'spip_evenements',
     54                        ),
     55                        'data' => $champs
     56                )
     57        );
     58
     59        // nouvel evenement
     60        $id_evenement = sql_insertq("spip_evenements", $champs);
     61
     62        pipeline('post_insertion',
     63                array(
     64                        'args' => array(
     65                                'table' => 'spip_evenements',
     66                                'id_objet' => $id_evenement
     67                        ),
     68                        'data' => $champs
     69                )
     70        );
     71
     72        if (!$id_evenement){
     73                spip_log("agenda action formulaire evenement : impossible d'ajouter un evenement",'agenda');
     74                return false;
     75        }
     76        return $id_evenement;
     77}
     78
     79
     80function evenement_modifier($id_evenement, $set=null){
    4781
    4882        include_spip('inc/modifier');
    49         agenda_action_revision_evenement($id_evenement, $c);
    50         agenda_action_revision_evenement_mots($id_evenement, _request('mots',$set));
    51         agenda_action_revision_evenement_repetitions($id_evenement,_request('repetitions',$set), _request('mots',$set));
     83        include_spip('inc/filtres');
     84        $c = collecter_requests(
     85                // white list
     86                objet_info('evenement','champs_editables'),
     87                // black list
     88                array('statut','id_article'),
     89                // donnees eventuellement fournies
     90                $set
     91        );
     92
     93        // Si l'evenement est publie, invalider les caches et demander sa reindexation
     94        $t = sql_getfetsel("statut", "spip_evenements", "id_evenement=".intval($id_evenement));
     95        $invalideur = $indexation = false;
     96        if ($t == 'publie') {
     97                $invalideur = "id='evenement/$id_evenement'";
     98                $indexation = true;
     99        }
     100
     101        if ($err = objet_modifier_champs('evenement', $id_evenement,
     102                array(
     103                        'nonvide' => array('titre' => _T('info_nouvel_evenement')." "._T('info_numero_abbreviation').$id_evenement),
     104                        'invalideur' => $invalideur,
     105                        'indexation' => $indexation,
     106                ),
     107                $c))
     108                return $err;
     109
     110        if (!is_null($mots = _request('mots',$set)))
     111                evenement_associer_mots($id_evenement,$mots);
     112
     113        agenda_action_revision_evenement_repetitions($id_evenement,_request('repetitions',$set));
    52114
    53115        // Modification de statut, changement de rubrique ?
    54         $c = array();
    55         foreach (array(
    56                 'id_parent'
    57         ) as $champ)
    58                 $c[$champ] = _request($champ,$set);
    59         $err .= agenda_action_instituer_evenement($id_evenement, $c);
     116        $c = collecter_requests(array('statut', 'id_parent'),array(),$set);
     117        $err = evenement_instituer($id_evenement, $c);
    60118
    61119        return $err;
    62120}
     121
    63122
    64123function agenda_action_revision_evenement_repetitions($id_evenement,$repetitions="",$liste_mots=array()){
     
    77136}
    78137
    79 function agenda_action_update_repetitions($id_evenement,$repetitions,$liste_mots){
     138function agenda_action_update_repetitions($id_evenement,$repetitions){
    80139        // evenement source
    81140        if ($row = sql_fetsel("*", "spip_evenements","id_evenement=".intval($id_evenement))){
     
    95154                        return; // pas un evenement source donc rien a faire ici
    96155
     156                include_spip('action/editer_liens');
     157                $liens = objet_trouver_liens(array('mot'=>'*'),array('evenement'=>$id_evenement));
     158                $mots = array();
     159                foreach($liens as $l)
     160                        $mots[] = $l['mot'];
     161
    97162                $repetitions_updated = array();
    98163                // mettre a jour toutes les repetitions deja existantes ou les supprimer si plus lieu
     
    128193                                                "id_article" => $id_article),"id_evenement=".intval($row['id_evenement']));
    129194
    130                                 agenda_action_revision_evenement_mots($row['id_evenement'], $liste_mots);
     195                                evenement_associer_mots($row['id_evenement'], $mots);
    131196                        }
    132197                        else {
     
    135200                                sql_delete("spip_evenements","id_evenement=".$row['id_evenement']);
    136201                        }
    137 
    138202                }
    139203                // regarder les repetitions a ajouter
     
    170234}
    171235
    172 
    173 function agenda_action_revision_evenement_mots($id_evenement,$liste_mots){
    174         // suppression des mots obsoletes
    175         $cond_in  = $cond_not_in = "";
    176         if (count($liste_mots)){
    177                 $cond_not_in = sql_in('id_mot', join(',',$liste_mots), 'NOT');
    178                 $cond_in = sql_in('id_mot', join(',',$liste_mots));
    179         }
    180         sql_delete("spip_mots_liens","objet='evenement' AND id_objet=".intval($id_evenement) . ($cond_in?" AND ".$cond_not_in:""));
    181 
    182 
    183         $liste_deja = array();
    184         if ($cond_in)
    185                 $liste_deja = sql_allfetsel("id_mot", "spip_mots_liens", "objet='evenement' AND id_objet=".intval($id_evenement) . " AND $cond_in");
    186         if (count($liste_deja)) {
    187                 $cond_not_in = sql_in('id_mot', join(',',array_map('reset',$liste_deja)), 'NOT');
    188                 $liste_mots = sql_allfetsel('id_mot','spip_mots',"$cond_in AND $cond_not_in");
    189                 $liste_mots = array_map('reset',$liste_mots);
    190         }
    191         if (count($liste_mots)) {
    192                 $ins = array();
    193                 foreach($liste_mots as $k=>$id_mot)
    194                         $ins[] = array('id_objet'=>$id_evenement,'id_mot'=>$id_mot,'objet'=>'evenement');
    195                 sql_insertq_multi("spip_mots_liens", $ins);
    196         }
    197 }
    198 
    199 // creer un nouvel evenement
    200 function agenda_action_insert_evenement($id_article,$id_evenement_source = 0){
    201         include_spip('inc/autoriser');
    202         if (!autoriser('creerevenementdans','article',$id_article)){
    203                 spip_log("agenda action formulaire article : auteur ".$GLOBALS['visiteur_session']['id_auteur']." n'a pas le droit de creer un evenement dans article $id_article",'agenda');
    204                 return false;
    205         }
    206 
    207         // nouvel evenement
    208         $id_evenement = sql_insertq("spip_evenements", array("id_evenement_source"=>intval($id_evenement_source), "maj"=>date("Y-m-d H:i:s"), 'id_article'=>intval($id_article)));
    209 
    210         if (!$id_evenement){
    211                 spip_log("agenda action formulaire article : impossible d'ajouter un evenement",'agenda');
    212                 return false;
    213         }
    214         return $id_evenement;
    215 }
    216 
    217 // Enregistre une revision d'evenement
    218 function agenda_action_revision_evenement ($id_evenement, $c=false) {
    219 
    220         if ($c['id_parent']) {
    221                 // Si l'article est publie, invalider les caches et demander sa reindexation
    222                 $t = sql_getfetsel("statut", "spip_articles", "id_article=".intval($c['id_parent']));
    223                 if ($t == 'publie') {
    224                         $invalideur = "id='id_article/$id_article'";
    225                         $indexation = true;
    226                 }
    227         }
    228 
    229         modifier_contenu('evenement', $id_evenement,
    230                 array(
    231                         'nonvide' => array('titre' => _T('info_sans_titre')),
    232                         'invalideur' => $invalideur,
    233                         'indexation' => $indexation
    234                 ),
    235                 $c);
    236 
    237         return ''; // pas d'erreur
     236function evenement_associer_mots($id_evenement,$mots){
     237        include_spip('action/editer_liens');
     238        // associer les mots fournis
     239        objet_associer(array('mot'=>$mots),array('evenement'=>$id_evenement));
     240        // enlever les autres
     241        objet_dissocier(array('mot'=>array('NOT',$mots)),array('evenement'=>$id_evenement));
    238242}
    239243
    240244
    241245// $c est un array ('statut', 'id_parent' = changement de rubrique)
    242 function agenda_action_instituer_evenement($id_evenement, $c) {
     246function evenement_instituer($id_evenement, $c) {
    243247
    244248        include_spip('inc/autoriser');
     
    268272                        'args' => array(
    269273                                'table' => 'spip_evenements',
    270                                 'id_objet' => $id_evenement
     274                                'action'=>'instituer',
     275                                'id_objet' => $id_evenement,
     276                                'id_parent_ancien' => $id_parent,
    271277                        ),
    272278                        'data' => $champs
     
    291297                        'args' => array(
    292298                                'table' => 'spip_evenements',
    293                                 'id_objet' => $id_evenement
     299                                'action'=>'instituer',
     300                                'id_objet' => $id_evenement,
     301                                'id_parent_ancien' => $id_parent,
    294302                        ),
    295303                        'data' => $champs
     
    332340}
    333341
     342
     343function agenda_action_insert_evenement($id_article,$id_evenement_source = 0){return evenement_inserer($id_article,$id_evenement_source);}
     344function action_evenement_set($id_evenement, $set=null){return evenement_modifier($id_evenement, $set);}
     345function agenda_action_instituer_evenement($id_evenement, $c) {return evenement_instituer($id_evenement,$c);}
     346function agenda_action_revision_evenement_mots($id_evenement,$liste_mots){return evenement_associer_mots($id_evenement,$liste_mots);}
    334347?>
  • _plugins_/agenda/trunk/formulaires/editer_evenement.php

    r54000 r54006  
    9797
    9898function formulaires_editer_evenement_traiter_dist($id_evenement='new', $id_article=0, $retour='', $lier_trad = 0, $config_fonc='evenements_edit_config', $row=array(), $hidden=''){
     99        set_request('horaire',_request('horaire')=='non'?'non':'oui');
     100        include_spip('inc/date_gestion');
     101        $erreurs = array();
     102        $date_debut = verifier_corriger_date_saisie('debut',_request('horaire')=='oui',$erreurs);
     103        $date_fin = verifier_corriger_date_saisie('fin',_request('horaire')=='oui',$erreurs);
     104        set_request('date_debut',date('Y-m-d H:i:s',$date_debut));
     105        set_request('date_fin',date('Y-m-d H:i:s',$date_fin));
    99106
    100         $res = array();
    101         $action_editer = charger_fonction("editer_evenement",'action');
    102         list($id,$err) = $action_editer();
    103         if ($err){
    104                 $res['message_erreur'] = $err;
    105         }
    106         else {
    107                 $res['message_ok'] = _L('ok');
    108                 if ($retour) {
    109                         $retour = parametre_url($retour,'id_evenement',$id);
    110                         if (strpos($retour,'article')!==FALSE){
    111                                 $id_article = sql_getfetsel('id_article','spip_evenements','id_evenement='.intval($id));
    112                                 $retour = parametre_url($retour,'id_article',$id_article);
    113                         }
    114                         $res['redirect'] = $retour;
     107        $res = formulaires_editer_objet_traiter('evenement',$id_evenement,$id_article,0,$retour,$config_fonc,$row,$hidden);
     108        $id_evenement = $res['id_evenement'];
     109        if ($res['redirect']) {
     110                if (strpos($res['redirect'],'article')!==false){
     111                        $id_article = sql_getfetsel('id_article','spip_evenements','id_evenement='.intval($id_evenement));
     112                        $res['redirect'] = parametre_url($res['redirect'],'id_article',$id_article);
    115113                }
    116114        }
Note: See TracChangeset for help on using the changeset viewer.