[PLUGINS] +clavettes et dependances
[lhc/web/clavette_www.git] / www / plugins / import_ics / genie / import_ics_synchro.php
1 <?php
2
3 /**
4 * Gestion du génie import_ics_synchro
5 *
6 * @plugin import_ics pour SPIP
7 * @license GPL
8 *
9 */
10
11 if (!defined('_ECRIRE_INC_VERSION')) return;
12
13 /**
14 * Actualise tous les almanachs
15 *
16 * @genie import_ics_synchro
17 *
18 * @param int $last
19 * Timestamp de la dernière exécution de cette tâche
20 * @return int
21 * Positif : la tâche a été effectuée
22 */
23 function genie_import_ics_synchro_dist($t){
24
25 //on recupère toutes les infos sur les almanachs
26 if(
27 $resultats = sql_allfetsel('*', 'spip_almanachs')
28 and is_array($resultats)
29 )
30 {
31 //librairie icalcreator incluse dans le plugin icalendar
32 include_spip('lib/iCalcreator.class');
33
34 //pour chacun des almanachs, on va traiter les différences
35 foreach ($resultats as $r) {
36 // on va faire une sélection des evenemnts associés à l'almanach en cours
37 //donc jointure sur les table spip_evenemnts et spip_almanachs_liens
38 $evenements_lies = sql_allfetsel('E.uid, E.id_evenement, E.sequence',
39 'spip_evenements AS E
40 INNER JOIN spip_almanachs_liens AS L
41 ON E.id_evenement = L.id_objet AND L.id_almanach='.intval($r['id_almanach']));
42
43 //tableau des uid associés à cet almanach tiré du tableau précédent
44 $uid ="";
45 foreach ($evenements_lies as $u ) {
46 $uid[] = $u['uid'];
47 };
48
49 //configuration nécessaire à la récupération et parsing du calendrier distant
50
51 $config = array("unique_id" => "distant",
52 "url" => $r['url']);
53 $v = new vcalendar($config);
54 $v->parse();
55
56 echo "almanach".$r["id_almanach"]."</br>";
57 while ($comp = $v->getComponent())
58 {
59 //les variables qui vont servir à vérifier l'existence et l'unicité
60 $sequence_distante = $comp->getProperty( "SEQUENCE" );#sequence d l'evenement http://kigkonsult.se/iCalcreator/docs/using.html#SEQUENCE
61 $uid_distante = $comp->getProperty("UID");#uid de l'evenement;
62 //au cas où le flux ics ne fournirait pas le champ sequence, on initialise la valeur à 0 comme lors d'un import
63 if (!is_int($sequence_distante)){$sequence_distante="0";}
64 //On commence à vérifier l'existence et l'unicité maintenant et on met à jour
65 //ou on importe selon le cas
66 if (in_array($uid_distante, $uid)){//si l'uid_distante est présente dans la bdd
67 // on utilise le fait que les deux tableaux ont le même index pour le récupérer
68 $cle = array_search($uid_distante, $uid);
69 //sequence presente dans la base ayant le meme index
70 $sequence = $evenements_lies[$cle]['sequence'];
71 if ($sequence < $sequence_distante) {
72 importation_evenement($comp,$r);
73 }
74 } else {importation_evenement($comp,$r);}
75 }
76 }
77 }
78
79 return 1;
80
81 }
82
83
84 /**
85 * Importation d'un événement dans la base
86 **/
87 function importation_evenement($objet_evenement,$tableau_almanach){
88 #on recupere les infos de l'evenement dans des variables
89 $attendee = $objet_evenement->getProperty( "attendee" ); #nom de l'attendee
90 $lieu = $objet_evenement->getProperty("location");#récupération du lieu
91 $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 !
92 $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
93 $descriptif_array = $objet_evenement->getProperty("DESCRIPTION", 1,TRUE);
94 $organizer = $objet_evenement->getProperty("ORGANIZER");#organisateur de l'evenement
95 #données de localisation de l'évenement
96 $localisation = $objet_evenement->getProperty( "GEO" );#c'est un array array( "latitude" => <latitude>, "longitude" => <longitude>))
97 $latitude = $localisation['latitude'];
98 $longitude = $localisation['longitude'];
99 //un petit coup avec l'uid
100 $uid_distante = $objet_evenement->getProperty("UID");#uid de l'evenement
101 #les 3 lignes suivantes servent à récupérer la date de début et à la mettre dans le bon format
102 $dtstart_array = $objet_evenement->getProperty("dtstart", 1, TRUE);
103 $dtstart = $dtstart_array["value"];
104 $startDate = "{$dtstart["year"]}-{$dtstart["month"]}-{$dtstart["day"]}";
105 $startTime = '';#on initialise le temps de début
106 if (!in_array("DATE", $dtstart_array["params"])) {
107 $startTime = " {$dtstart["hour"]}:{$dtstart["min"]}:{$dtstart["sec"]}";
108 }
109 #on fait une variable qui contient le résultat des deux précédentes actions
110 $date_debut = $startDate.$startTime;
111 #les 3 lignes suivantes servent à récupérer la date de fin et à la mettre dans le bon format
112 $dtend_array = $objet_evenement->getProperty("dtend", 1, TRUE);
113 $dtend = $dtend_array["value"];
114 $endDate = "{$dtend["year"]}-{$dtend["month"]}-{$dtend["day"]}";
115 $endTime = '';#on initialise le temps de fin
116 if (!in_array("DATE", $dtend_array["params"])) {
117 $endTime = " {$dtend["hour"]}:{$dtend["min"]}:{$dtend["sec"]}";
118 }
119 #on fait une variable qui contient le résultat des deux précédentes actions
120 $date_fin = $endDate.$endTime;
121 #on insere les infos des événements dans la base
122 //les infos de l'almanach
123 $id_mot = $tableau_almanach['id_mot'];
124 $id_article = $tableau_almanach['id_article'];
125 $id_almanach = $tableau_almanach['id_almanach'];
126
127 //insertion de l'evenement en bdd
128 $id_evenement= sql_insertq('spip_evenements',array('id_article' =>$id_article,'date_debut'=>$date_debut,'date_fin'=>$date_fin,'titre'=>str_replace('SUMMARY:', '', $summary_array["value"]),'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));
129 //on associe l'événement à l'almanach
130 sql_insertq("spip_almanachs_liens",array('id_almanach'=>$id_almanach,'id_objet'=>$id_evenement,'objet'=>'evenement','vu'=>'oui'));
131 //on associe l'événement à son mot
132 sql_insertq("spip_mots_liens",array('id_mot'=>$id_mot,'id_objet'=>$id_evenement,'objet'=>'evenement'));
133 }
134
135 ?>