[PLUGINS] +clavettes et dependances
[lhc/web/clavette_www.git] / www / plugins / import_ics / formulaires / editer_almanach.php
1 <?php
2 /**
3 * Gestion du formulaire de d'édition de almanach
4 *
5 * @plugin Import_ics
6 * @copyright 2013
7 * @author Amaury Adon
8 * @licence GNU/GPL
9 * @package SPIP\Import_ics\Formulaires
10 */
11
12 if (!defined('_ECRIRE_INC_VERSION')) return;
13
14 include_spip('inc/actions');
15 include_spip('action/editer_liens');
16 include_spip('inc/editer');
17 include_spip('lib/iCalcreator.class'); /*pour la librairie icalcreator incluse dans le plugin icalendar*/
18 /**
19 * Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
20 *
21 */
22 function formulaires_editer_almanach_identifier_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
23 return serialize(array(intval($id_almanach)));
24 }
25
26 /**
27 * Chargement du formulaire d'édition de almanach
28 *
29 * Déclarer les champs postés et y intégrer les valeurs par défaut
30 */
31 function formulaires_editer_almanach_charger_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
32 $valeurs = formulaires_editer_objet_charger('almanach',$id_almanach,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
33 //$valeurs[_etapes]=2;//on rajoute un couple clé/valeur pour le nombre d'étapes du formulaire (pas la peine tant que je n'arrive pas à avoir un résutat correct)
34 $valeurs['resa_auto']='non';
35 return $valeurs;
36
37 }
38
39 /**
40 * Vérifications du formulaire d'édition de almanach
41 *
42 */
43 function formulaires_editer_almanach_verifier_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
44 //version de base de la fabrique
45 //return formulaires_editer_objet_verifier('almanach',$id_almanach, array('titre', 'url', 'id_article'));
46 $erreurs = formulaires_editer_objet_verifier('almanach',$id_almanach, array('titre', 'url', 'id_article', 'id_mot'));
47 //verification supplementaires
48 return $erreurs;
49 }
50
51
52 /**
53 * Importation d'un événement dans la base
54 **/
55 function importation_evenement($objet_evenement,$id_almanach){
56 #on recupere les infos de l'evenement dans des variables
57 $attendee = $objet_evenement->getProperty( "attendee" ); #nom de l'attendee
58 $lieu = $objet_evenement->getProperty("location");#récupération du lieu
59 $summary_array = $objet_evenement->getProperty("summary", 1, TRUE); #summary est un array on recupere la valeur dans l'insertion attention, summary c'est pour le titre !
60 $titre_evt=str_replace('SUMMARY:', '', $summary_array["value"]);
61 $url = $objet_evenement->getProperty( "URL");#on récupère l'url de l'événement pour la mettre dans les notes histoire de pouvoir relier à l'événement original
62 $descriptif_array = $objet_evenement->getProperty("DESCRIPTION", 1,TRUE);
63 $organizer = $objet_evenement->getProperty("ORGANIZER");#organisateur de l'evenement
64 #données de localisation de l'évenement
65 $localisation = $objet_evenement->getProperty( "GEO" );#c'est un array array( "latitude" => <latitude>, "longitude" => <longitude>))
66 $latitude = $localisation['latitude'];
67 $longitude = $localisation['longitude'];
68 //un petit coup avec l'uid
69 $uid_distante = $objet_evenement->getProperty("UID");#uid de l'evenement
70 #les 3 lignes suivantes servent à récupérer la date de début et à la mettre dans le bon format
71 $dtstart_array = $objet_evenement->getProperty("dtstart", 1, TRUE);
72 $dtstart = $dtstart_array["value"];
73 $startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
74 $startTime = '';#on initialise le temps de début
75 if (!in_array("DATE", $dtstart_array["params"])) {
76 $startTime = " {$dtstart["hour"]}:{$dtstart["min"]}:{$dtstart["sec"]}";
77 }
78 #on fait une variable qui contient le résultat des deux précédentes actions
79 $date_debut = $startDate.$startTime;
80 #les 3 lignes suivantes servent à récupérer la date de fin et à la mettre dans le bon format
81 $dtend_array = $objet_evenement->getProperty("dtend", 1, TRUE);
82 $dtend = $dtend_array["value"];
83 $endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
84 $endTime = '';#on initialise le temps de fin
85 if (!in_array("DATE", $dtend_array["params"])) {
86 $endTime = " {$dtend["hour"]}:{$dtend["min"]}:{$dtend["sec"]}";
87 }
88 #on fait une variable qui contient le résultat des deux précédentes actions
89 $date_fin = $endDate.$endTime;
90 #on insere les infos des événements dans la base
91 # ca ce sera pour quand j'arriverai à faire fonctionner le selecteur d'articles $id_article = preg_replace('(article\|)','',_request('id_article')); #le selecteur d'article fournit un tableau, on se débarasse du mot article dedans et on appellera ensuite la première valeur (il pourrait y avoir des saisies multiples même si ici on ne les autorise pas)
92 $id_mot = _request('id_mot');
93 $id_article = _request('id_article');
94 $id_evenement= sql_insertq('spip_evenements',array('id_article' =>$id_article,'date_debut'=>$date_debut,'date_fin'=>$date_fin,'titre'=>$titre_evt,'descriptif'=>'<math>'.$descriptif_array["value"].'</math>','lieu'=>$lieu,'adresse'=>'','inscription'=>'0','places'=>'0','horaire'=>'oui','statut'=>'publie','attendee'=>str_replace('MAILTO:', '', $attendee),'id_evenement_source'=>'0','uid'=>$uid_distante,'sequence'=>$sequence_distante,'notes'=>$url));
95
96 #on associe l'évéenement à l'almanach
97 #objet_associer(array('almanach'=>$id_almanach),array('evenement'=>$id_evenement),array('vu'=>'oui'));
98 sql_insertq("spip_almanachs_liens",array('id_almanach'=>$id_almanach,'id_objet'=>$id_evenement,'objet'=>'evenement','vu'=>'oui'));
99 #on associe l'événement à son mot
100 sql_insertq("spip_mots_liens",array('id_mot'=>$id_mot,'id_objet'=>$id_evenement,'objet'=>'evenement'));
101 #on ajoute la resa si on le doit
102 if ((_request("id_ressource"))>0) {
103 $id_ressource=_request("id_ressource");
104 ajout_resa($titre_evt,$id_ressource,$date_debut,$date_fin);
105 }
106 }
107
108
109 /**
110 *ajout d'une reservation à l'événeemnt si c'est coché
111 **/
112
113 function ajout_resa($titre_evt,$id_ressource,$date_debut,$date_fin){
114 $id_orr_reservation = sql_insertq("spip_orr_reservations",array('orr_reservation_nom'=>$titre_evt,'orr_date_debut'=>$date_debut,'orr_date_fin'=>$date_fin));
115 sql_insertq("spip_orr_reservations_liens",array('id_orr_reservation'=>$id_orr_reservation,'id_objet'=>$id_ressource,'objet'=>'orr_ressource','vu'=>'non'));
116 echo "ajout résa";
117
118 }
119 /**
120 * Traitement du formulaire d'édition de almanach
121 *
122 * Traiter les champs postés
123 *
124 */
125 function formulaires_editer_almanach_traiter_dist($id_almanach='new', $retour='', $lier_trad=0, $config_fonc='', $row=array(), $hidden=''){
126 $chargement = formulaires_editer_objet_traiter('almanach',$id_almanach,'',$lier_trad,$retour,$config_fonc,$row,$hidden);
127 #on recupère l'id de l'almanach dont on aura besoin plus tard
128 $id_almanach = $chargement['id_almanach'];
129 #on associe le mot à l'almanach
130 $id_mot = _request('id_mot');
131 if (_request('resa_auto')=='oui')
132 $resa_auto=1;
133 sql_insertq("spip_mots_liens",array('id_mot'=>$id_mot,'id_objet'=>$id_almanach,'objet'=>'almanach'));
134 sql_insertq("spip_almanachs",array('resa_auto'=>$resa_auto));
135 echo $resa_auto;
136 #configuration nécessaire à la récupération
137 $config = array("unique_id"=>"","url"=>_request("url"));
138 $cal = new vcalendar($config);
139 $cal->parse();
140 //ON fait un appel dans la base de spip pour vpouvoir vérifier si un événement y est déjà (ça ne se fait pas en une ligne...)
141 $liens = sql_allfetsel('id_evenement, uid, sequence', 'spip_evenements');
142 // on definit un tableau des uid présentes dans la base
143 $uid ="";
144 foreach ($liens as $u ) {
145 $uid[] = $u['uid'];
146 };
147 while ($comp = $cal->getComponent())
148 {
149 #les variables qui vont servir à vérifier l'existence et l'unicité
150 $sequence_distante = $comp->getProperty( "SEQUENCE" );#sequence d l'evenement http://kigkonsult.se/iCalcreator/docs/using.html#SEQUENCE
151 $uid_distante = $comp->getProperty("UID");#uid de l'evenement
152 if (!is_int($sequence_distante)){$sequence_distante="0";}//au cas où le flux ics ne fournirait pas le champ sequence, on initialise la valeur à 0 comme lors d'un import
153 //est-ce que c'est un googlecal ? Dans ce cas, on a un traitement un peu particulier
154
155 //On commence à vérifier l'existence et l'unicité maintenant et on met à jour ou on importe selon le cas
156 if (in_array($uid_distante, $uid)){//si l'uid_distante est présente dans la bdd
157 $cle = array_search($uid_distante, $uid); // on utilise le fait que les deux tableaux ont le même index pour le récupérer
158 $sequence = $liens[$cle]['sequence'];//sequence presente dans la base ayant le meme index
159
160 if ($sequence < $sequence_distante ){//si la sequecne de la bdd est plus petite, il y a eu mise à jour et il faut intervenir
161 echo "c'est pas pareil, il faut mettre à jour l'événement ".$liens[$cle]['id_evenement']."<br/>";
162 }
163 } else {importation_evenement($comp,$id_almanach);};//l'evenement n'est pas dans la bdd, on va l'y mettre
164 }
165
166 return $chargement;
167 }
168
169
170 ?>