Valider 4d6d4dbc rédigé par Maïeul's avatar Maïeul
Parcourir les fichiers

change: passage à la classe Icalendar

parent 70f4c0ba
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+0 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -15,7 +15,6 @@ include_spip('inc/actions');
include_spip('action/editer_liens');
include_spip('inc/editer');
include_spip('inc/import_ics');
include_spip('lib/iCalcreator.class'); /*pour la librairie icalcreator incluse dans le plugin icalendar*/
/**
 * Identifier le formulaire en faisant abstraction des paramètres qui ne représentent pas l'objet edité
 *
+1 −13
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -19,22 +19,10 @@ function date_ical_to_sql($date, $decalage = array(), $seulement_date = false) {
	}
	if (isset($date['params']) and $params = $date['params'] and is_array($params) and in_array('DATE',$params)) {
		$all_day = True;
		$date_sql = sql_format_date(
			$value['year'],
			$value['month'],
			$value['day']
		);
	} else {
		$all_day = False;
		$date_sql = sql_format_date(
			$value['year'],
			$value['month'],
			$value['day'],
			$value['hour'],
			$value['min'],
			$value['sec']
		);
	}
	$date_sql = $value->format('Y-m-d H:i:s');
	$date_ete = intval(affdate($date_sql,'I'));//Est-on en heure d'été?
	if (!$all_day and is_array($decalage)
		and isset($decalage['ete'])
+34 −28
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php
if (!defined('_ECRIRE_INC_VERSION')) return;

include_once(_DIR_PLUGIN_ICALENDAR.'/vendor/kigkonsult/icalcreator/autoload.php');
include_spip('inc/distant');
/**
 * Importation ou synchronisation d'un almanach
 **/
@@ -35,10 +38,13 @@ function trouver_evenements_almanach($id_almanach,$champs='uid,id_evenement',$to

function importer_almanach($id_almanach,$url,$id_article,$decalage,$dtstart_exclu=false,$dtend_inclus=false){
	// Début de la récupération des évènements
	//configuration nécessaire à la récupération
	$config = array('unique_id'=>'','url'=>$url);
	$cal = new vcalendar($config);
	if (!$cal->parse()){

	$config = array(\Kigkonsult\Icalcreator\Vcalendar::UNIQUE_ID=>'');

	$cal = new \Kigkonsult\Icalcreator\Vcalendar($config);
	$iCalContent = recuperer_url($url);

	if (!$cal->parse($iCalContent)){
		spip_log("Erreur lors de l'analyse de l'url $url (almanach $id_almanach)",'import_ics'._LOG_ERREUR);
		sql_update('spip_almanachs',array('derniere_erreur'=>'NOW()'),'id_almanach='.intval($id_almanach));
		return;
@@ -57,23 +63,23 @@ function importer_almanach($id_almanach,$url,$id_article,$decalage,$dtstart_excl
	};
	$les_uid_distant = array();
	while ($comp = $cal->getComponent()) {
		if (get_class($comp) !== 'vevent') {
		if (get_class($comp) !== 'Kigkonsult\Icalcreator\Vevent') {
			continue;
		}
		// Ne pas importer les événements marqués comme privés
		$classe = $comp->getProperty('CLASS');
		if (defined('_IMPORT_ICS_PUBLIC_SEULEMENT') AND ($classe == 'PRIVATE')) {
		$classe = $comp->getClass();
		if (defined('_IMPORT_ICS_PUBLIC_SEULEMENT') AND ($classe === \Kigkonsult\Icalcreator\Vcalendar::PRIVATE)) {
			continue;
		}
		#les variables qui vont servir à vérifier l'existence et l'unicité
		$uid_distant = $comp->getProperty('UID');#uid de l'evenement
		$uid_distant = $comp->getUid();#uid de l'evenement
		if (isset($les_uid_distant[$uid_distant])) {
			$les_uid_distant[$uid_distant]++;
		} else {
			$les_uid_distant[$uid_distant] = 0;
		}
		$last_modified_distant = $comp->getProperty('LAST-MODIFIED');
		$sequence_distant = $comp->getProperty('SEQUENCE');
		$last_modified_distant = $comp->getLastmodified();
		$sequence_distant = $comp->getSequence();

		//vérifier l'existence et l'unicité
		if (in_array($uid_distant, $uid)){//si l'uid_distant est présente dans la bdd, alors on teste si l'evenement a été modifié à distance
@@ -139,9 +145,9 @@ function importer_evenement($objet_evenement, $id_almanach, $id_article, $decala
	# création de l'evt
	autoriser_exception('creer','evenement','');
	autoriser_exception('modifier','article',$id_article);
	autoriser_exception('instituer','evenement',$id_evenement);

	$id_evenement= objet_inserer('evenements', $id_article, $champs_sql);
	autoriser_exception('instituer','evenement',$id_evenement);

	objet_instituer('evenement',$id_evenement,array("statut"=>$statut));
	// lier les mots
@@ -170,37 +176,37 @@ function importer_evenement($objet_evenement, $id_almanach, $id_article, $decala
function evenement_ical_to_sql($objet_evenement, $decalage, $dtstart_exclu=false, $dtend_inclus = false){
	//on recupere les infos de l'evenement dans des variables

	$uid_distant = $objet_evenement->getProperty('UID');#uid de l'evenement
	$attendee = $objet_evenement->getProperty('attendee'); #nom de l'attendee
	$lieu = $objet_evenement->getProperty('location');#récupération du lieu
	$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 !
	$uid_distant = $objet_evenement->getUid();#uid de l'evenement
	$attendee = $objet_evenement->getAttendee(); #nom de l'attendee
	$lieu = $objet_evenement->getLocation();#récupération du lieu
	$summary_array = $objet_evenement->getSummary(true); #summary est un array on recupere la valeur dans l'insertion attention, summary c'est pour le titre !
	$titre_evt=str_replace('SUMMARY:', '', $summary_array['value']);
	$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
	$descriptif_array = $objet_evenement->getProperty('DESCRIPTION', 1,TRUE);
	$organizer = $objet_evenement->getProperty('ORGANIZER');#organisateur de l'evenement
	$last_modified_distant = serialize($objet_evenement->getProperty('LAST-MODIFIED'));
	$sequence_distant = $objet_evenement->getProperty('SEQUENCE');
	$url = $objet_evenement->getUrl();#on récupère l'url de l'événement pour la mettre dans les notes histoire de pouvoir relier à l'événement original
	$descriptif_array = $objet_evenement->getDescription(true);
	$organizer = $objet_evenement->getOrganizer();#organisateur de l'evenement
	$last_modified_distant = serialize($objet_evenement->getLastmodified());
	$sequence_distant = $objet_evenement->getSequence();
	if (is_null($sequence_distant)){
		$sequence_distant = 0;
	}


	//données de localisation de l'évenement
	$localisation = $objet_evenement->getProperty('GEO');#c'est un array array( "latitude"  => <latitude>, "longitude" => <longitude>))
	$localisation = $objet_evenement->getGeo();#c'est un array array( "latitude"  => <latitude>, "longitude" => <longitude>))
	$latitude = isset($localisation['latitude']) ? $localisation['latitude'] : '';
	$longitude = isset($localisation['longitude']) ? $longitude['longitude'] : '';


	// Dates de début et de fin
	$dtstart_array = $objet_evenement->getProperty('dtstart', 1, TRUE);
	$dtstart_array = $objet_evenement->getDtstart(true);
	list ($date_debut,$start_all_day) = date_ical_to_sql($dtstart_array,$decalage);
	#les 3 lignes suivantes servent à récupérer la date de fin et à la mettre dans le bon format
	$dtend_array = $objet_evenement->getProperty('dtend', 1, TRUE);
	$dtend_array = $objet_evenement->getDtend(true);
	if (is_array($dtend_array)) {
		list ($date_fin,$end_all_day) = date_ical_to_sql($dtend_array,$decalage);
	} else {
		$duration_array = $objet_evenement->getProperty('duration', 1, TRUE);
		if ($duration_array['value']<>''){
		$duration_array = $objet_evenement->getDuration(true);
		if (is_array($duration_array) && $duration_array['value'] <>''){
			$date_deb = date_ical_to_sql($dtstart_array,'', TRUE);
			$date_ete = intval(affdate($date_deb,'I'));//Est-on en heure d'été?
			if (!$all_day AND is_array($decalage) AND isset($decalage['ete']) AND isset($decalage['hiver'])) {
@@ -214,7 +220,7 @@ function evenement_ical_to_sql($objet_evenement, $decalage, $dtstart_exclu=false
			$date_fin = import_ics_date_sql_shift($date_deb,  "$duree_seconde second");
		} else {
			$date_fin = $date_debut;
			$end_all_day = $debut_all_day;
			$end_all_day = $start_all_day;
		}
	}

@@ -249,8 +255,8 @@ function evenement_ical_to_sql($objet_evenement, $decalage, $dtstart_exclu=false

	// Les propriétés X- (fournies par le plugin agenda > 3.34 si demandée expressement)
	$xprops = array();
	while ($prop = $objet_evenement->getProperty('X-PROP','',true)) {
		$xprops[$prop[0]] = $prop[1]['value'];
	while ($prop = $objet_evenement->getXprop()) {
		$xprops[$prop[0]] = $prop[1];
	}
	$champs_x = array('adresse', 'places', 'inscription');
	if (test_plugin_actif('cextras')) {