~maj plugins
[ptitvelo/web/www.git] / www / plugins / agenda_3_5 / formulaires / migrer_agenda.php
1 <?php
2 /**
3 * Plugin Agenda 4 pour Spip 3.0
4 * Licence GPL 3
5 *
6 * 2006-2011
7 * Auteurs : cf paquet.xml
8 */
9
10 if (!defined("_ECRIRE_INC_VERSION")) return;
11
12
13 function formulaires_migrer_agenda_charger_dist(){
14
15 $valeurs = array(
16
17 'id_parent'=>'',
18 'toute_la_branche' => '',
19 'champ_date_debut' => 'date',
20 'champ_date_fin' => 'date_redac',
21 'horaire' => 'oui',
22 'groupes_mots' => array(),
23 );
24
25 return $valeurs;
26 }
27
28 function formulaires_migrer_agenda_verifier_dist(){
29
30 $erreurs = array();
31 $oblis = array('id_parent','champ_date_debut','champ_date_fin','horaire');
32
33 foreach ($oblis as $obli){
34 if (!_request($obli))
35 $erreurs[$obli] = _T('info_obligatoire');
36 }
37
38 if (!isset($erreurs['champ_date_debut'])
39 AND !in_array(_request('champ_date_debut'),array('date','date_redac')))
40 $erreurs['champ_date_debut'] = _T('migreragenda:erreur_choix_incorrect');
41
42 if (!isset($erreurs['champ_date_fin'])
43 AND !in_array(_request('champ_date_fin'),array('date','date_redac')))
44 $erreurs['champ_date_fin'] = _T('migreragenda:erreur_choix_incorrect');
45
46 if (!isset($erreurs['horaire'])
47 AND !in_array(_request('horaire'),array('oui','non')))
48 $erreurs['horaire'] = _T('migreragenda:erreur_choix_incorrect');
49
50 if (!isset($erreurs['groupes_mots'])
51 AND $groupes = _request('groupes_mots')){
52
53 if (!is_array($groupes))
54 $erreurs['groupes_mots'] = _T('migreragenda:erreur_choix_incorrect');
55 else {
56 $groupes = array_map('intval',$groupes);
57 if (sql_countsel('spip_groupes_mots',sql_in('id_groupe',$groupes))!=count($groupes))
58 $erreurs['groupes_mots'] = _T('migreragenda:erreur_choix_incorrect');
59 }
60 }
61
62 // pas d'erreurs ? verifier ce qui va etre fait et l'annoncer
63 if (!count($erreurs) AND !_request('confirm')){
64 $where = migrer_agenda_where_articles(_request('id_parent'),_request('toute_la_branche'));
65 $nba = sql_countsel("spip_articles",$where);
66
67 $message = _T('migreragenda:info_migration_articles')." ";
68 $message .= sinon(singulier_ou_pluriel($nba,'info_1_article','info_nb_articles'),_T('info_aucun_article'));
69
70 $erreurs['confirmer'] = $message;
71 $erreurs['message_erreur'] = ''; // pas de message automatique
72 }
73
74 return $erreurs;
75 }
76
77
78 function formulaires_migrer_agenda_traiter_dist(){
79 $id_rubrique = _request('id_parent');
80 $where_articles = migrer_agenda_where_articles($id_rubrique,_request('toute_la_branche'));
81 $groupes = _request('groupes_mots');
82 if (!$groupes)
83 $groupes = array();
84 $where_mots = migrer_agenda_where_mots($groupes);
85
86 $horaire = (_request('horaire')=='oui'?true:false);
87 $champ_date_debut = _request('champ_date_debut');
88 $champ_date_fin = _request('champ_date_fin');
89
90 // poser le flag agenda sur la rubrique !
91 sql_updateq("spip_rubriques",array('agenda'=>1),'id_rubrique='.intval($id_rubrique));
92 // et migrer les articles
93 $nb = migrer_articles($where_articles,$champ_date_debut,$champ_date_fin,$horaire,$where_mots);
94
95 $message = _T('migreragenda:info_migration_articles_reussi')." ";
96 $message .= sinon(singulier_ou_pluriel($nb,'info_1_article','info_nb_articles'),_T('info_aucun_article'));
97
98 return array('message_ok'=>$message);
99 }
100
101
102
103 function migrer_articles($where_articles,$champ_date_debut,$champ_date_fin,$horaire,$where_mots){
104
105 include_spip("action/editer_evenement");
106
107 $where_mots = implode(" AND ",$where_mots);
108
109 $nb = 0;
110 $res = sql_select("*","spip_articles",$where_articles);
111 while ($row = sql_fetch($res)){
112
113 $id_evenement = evenement_inserer($row['id_article']);
114 // mettre les champs
115 $set = array(
116 'date_debut' => $row[$champ_date_debut],
117 'date_fin' => $row[$champ_date_fin],
118 'titre' => $row['titre'],
119 'horaire' => ($horaire?'oui':'non')
120 );
121 evenement_modifier($id_evenement,$set);
122
123 // associer les mots : en sql pour ne pas exploser si plein de mots en base
124 $mots = sql_allfetsel('M.id_mot','spip_mots AS M JOIN spip_mots_liens AS L ON (M.id_mot=L.id_mot AND L.objet='.sql_quote('article').')',"id_objet=".intval($row['id_article'])." AND (".$where_mots.")");
125 if (count($mots)){
126 $insert = array();
127 foreach ($mots as $mot){
128 $insert[] = array('id_mot'=>$mot['id_mot'],'objet'=>'evenement','id_objet'=>$id_evenement);
129 }
130 sql_insertq_multi("spip_mots_liens",$insert);
131 }
132
133
134 // publier l'evenement
135 evenement_modifier($id_evenement,array('statut'=>'publie'));
136
137 $nb++;
138 }
139
140 return $nb;
141 }
142
143
144
145 function migrer_agenda_where_articles($id_rubrique,$branche = false){
146
147 $where = array();
148 $where[] = "statut=".sql_quote('publie');
149 if ($branche){
150 include_spip("inc/rubriques");
151 $where[] = sql_in('id_rubrique',calcul_branche_in($id_rubrique));
152 }
153 else
154 $where[] = "id_rubrique=".intval($id_rubrique);
155
156 // exclure les articles qui ont deja un evenement
157 $where[] = "id_article NOT IN (".sql_get_select("id_article","spip_evenements").")";
158
159 return $where;
160 }
161
162 function migrer_agenda_where_mots($groupes){
163 $id_groupe = array();
164
165 $rows = sql_allfetsel('*','spip_groupes_mots',sql_in('id_groupe',$groupes));
166 foreach($rows as $row){
167 $id_groupe[] = $row['id_groupe'];
168 $tables_liees = explode(',',$row['tables_liees']);
169 $tables_liees = array_filter($tables_liees);
170 // ajouter les evenements a ce groupe de mot
171 if (!in_array('evenements',$tables_liees)){
172 include_spip("action/editer_groupe_mots");
173 $tables_liees[] = 'evenements';
174 $tables_liees = implode(',',$tables_liees);
175 groupemots_modifier($row['id_groupe'],array('tables_liees'=>$tables_liees));
176 }
177 }
178
179 $where = array(sql_in('id_groupe',$id_groupe));
180 return $where;
181 }
182
183 ?>