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

change!: adaptation de l'itérateur, des modèles et des exemples, à la nouvelle version de la classe

BREAKING CHANGES:

- comme on est sur un iterateur, on simplifie: la valeur des propriétés
  n'est plus dans `propriete/X/value` mais directement dans
  `propriete/X`
- ne sont accessibles que les propriétés avec un `getter`
- certaines propriétés ne sont plus tabulaires (comme `summary`)
- pour les propriétés dates, on retourne directement la date au format
  SQL, mais du coup on n'a plus de hour/minutes/ etc. On s'en sort avec
  les filtres de date de SPIP

Correction mineure en passant: pour le modèle éviter d'avoir des pages
vides au début
parent 23ab9561
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+8 −8
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -21,19 +21,19 @@
	<div style="background:#eee;margin:1rem 0;padding:1rem;">
	<BOUCLE_vacances(DATA)
	{source ics, https://fr.ftp.opendatasoft.com/openscol/fr-en-calendrier-scolaire/Zone-#VALEUR.ics}
	{par dtstart/str}
	{description/0/value != ''}
	{dtend/str>=#GET{today}}
	{dtstart/str<=#GET{nextyear}}
	{par dtstart}
	{description/0 != ''}
	{dtend>=#GET{today}}
	{dtstart<=#GET{nextyear}}
	>
		<h3>#VALEUR{description/0/value}</h3>
		<h3>#VALEUR{description/0}</h3>
		<dt>
		[(#SET{date,#VALEUR{dtstart/str}})]
		[(#SET{date,#VALEUR{dtstart}})]
		[(#GET{date}|jour) ][(#GET{date}|nom_mois)][ (#GET{date}|annee{#_zone:VALEUR})]
		[(#SET{date,#VALEUR{dtend/str}})]
		[(#SET{date,#VALEUR{dtend}})]
		[ &mdash; (#GET{date}|jour) ][(#GET{date}|nom_mois)][ (#GET{date}|annee{#_zone:VALEUR})]
		</dt>
		[<dd>(#VALEUR{summary/0/value})</dd>]
		[<dd>(#VALEUR{summary})</dd>]
	</BOUCLE_vacances>
	</div>
	</B_vacances>
+39 −35
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -4,45 +4,49 @@
# hors de la fonction, de facon a ce que la class soit chargee
# meme si le resultat est deja dans le cache (sinon le cache est inexploitable).
# cf. iterateur/data.php
include_spip('lib/iCalcreator.class');

function inc_ics_to_array($u) {

	# on passe par un fichier temp car notre librairie fonctionne comme ca
	$tmp = _DIR_TMP . 'ics-'.md5($u);
	ecrire_fichier($tmp, str_replace("\r\n", "\n", $u));

	$cal = new vcalendar();
	$cal->setConfig( 'filename', $tmp );
	$cal->parse();
	
	supprimer_fichier($tmp);
include_once(_DIR_PLUGIN_ICALENDAR.'/vendor/kigkonsult/icalcreator/autoload.php');
include_spip('inc/distant');

	$table_valeur = function_exists('Iterateurs_table_valeur')
		? 'Iterateurs_table_valeur' : 'table_valeur';

	# noter les dates cles dans un format plus facile a recuperer
	foreach($cal->components as $k => &$v) {

		foreach(array('dtstart', 'dtend', 'dtstamp', 'lastmodified', 'created')
		as $champ) {
			if (isset($v->$champ)
			  AND $w = &$v->$champ
			  AND $date = $table_valeur($w, "value")) {
				$w['str'] = date('Y-m-d H:i:s', strtotime(sprintf("%04d-%02d-%02dT%02d:%02d:%02d%s",
					$date['year'],
					$date['month'],
					$date['day'],
					isset($date['hour']) ? $date['hour'] : '',
					isset($date['min']) ? $date['min'] : '',
					isset($date['sec']) ? $date['sec'] : '',
					isset($date['tz']) ? $date['tz'] : ''
					))
				);
function inc_ics_to_array($u) {
	static $getters = [];
	if (!$getters) {
		$methods = get_class_methods('Kigkonsult\Icalcreator\Vevent');

		// Ne trouver que les méthodes qui commencent par get ou getAll et qui n'est pas getProperties
		foreach ($methods as $m) {
			if ($m === 'getProperties') {
				continue;
			}
			if (substr($m, 0, 6) === 'getAll') {
				$getters[strtolower(substr($m, 6))] = $m;
				continue;
			}
			if (substr($m, 0, 3) === 'get') {
				$getAll = str_replace('get', 'getAll', $m);
				if (!in_array($getAll, $methods)) {
					$getters[strtolower(substr($m, 3))] = $m;
					continue;
				}

	return($cal->components);
			}
		}
	}
	$cal = new \Kigkonsult\Icalcreator\Vcalendar();
	$cal->parse($u);

	$return = [];
	foreach($cal->getComponents(\Kigkonsult\Icalcreator\Vcalendar::VEVENT) as $k => $v) {
		$event_properties = [];
		foreach ($getters as $prop => $getter) {
			$get = $v->$getter();
			if (gettype($get) === 'object' && get_class($get) === 'DateTime') {
				$get = $get->format('Y-m-d H:i:s');
			}
			$event_properties[$prop] = $get;
		}
		$return[] = $event_properties;
	}
	return $return;
}
+15 −16
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -2,41 +2,40 @@
#ANCRE_PAGINATION
<BOUCLE_calendrier(DATA)
 {source ics, #ENV{ics}}
 {par dtstart/str}{pagination 10}
 {par dtstart}{pagination 10}
 {dtend > #DATE}
 >

  [(#VALEUR{dtend/str}|strtotime|>={#DATE|strtotime}|oui)
       [(#VALEUR{dtstart/value/hour}|>{00}|?{
       [(#VALEUR{dtstart/value/month}|=={#VALEUR{dtend/value/month}}|?{
       [(#VALEUR{dtstart/value/day}|=={#VALEUR{dtend/value/day}}|?{
       [(#VALEUR{dtstart}|heures|>{00}|?{
       [(#VALEUR{dtstart}|mois|=={#VALEUR{dtend}|mois}|?{
       [(#VALEUR{dtstart}|jour|=={#VALEUR{dtend}|jour}|?{
       <dt>
        [(#SET{date_debut,#VALEUR{dtstart/str}})]
        [(#SET{date_debut,#VALEUR{dtstart}})]
    [(#SET{date_fin,#VALEUR{dtend/str}})]
    Le [(#GET{date_debut}|jour) ][(#GET{date_debut}|nom_mois) ][(#GET{date_debut}|annee) ]<span> de [(#GET{date_debut}|affdate{'G'})]:[(#GET{date_debut}|minutes )] à [(#GET{date_fin}|heures)]:[(#GET{date_fin}|minutes )]</span>
  </dt>
  <dd>[(#VALEUR{summary/value})<p>#VALEUR{description/0/value}]</p></dd>
  <dd>[(#VALEUR{summary})<p>#VALEUR{description/0}]</p></dd>
  ,
       <dt>
        [(#SET{date_debut,#VALEUR{dtstart/str}})]
    [(#SET{date_fin,#VALEUR{dtend/str}})]
        [(#SET{date_debut,#VALEUR{dtstart}})]
    [(#SET{date_fin,#VALEUR{dtend}})]
   Du [(#GET{date_debut}|jour) ][(#GET{date_debut}|nom_mois) ][(#GET{date_debut}|annee) ]
     au [(#GET{date_fin}|jour) ][(#GET{date_fin}|nom_mois) ][(#GET{date_fin}|annee)]<span> de [(#GET{date_debut}|affdate{'G'})]:[(#GET{date_debut}|minutes )] à [(#GET{date_fin}|affdate{'G'})]:[(#GET{date_fin}|minutes)]</span>
  </dt>
  <dd>[(#VALEUR{summary/value})<p>#VALEUR{description/0/value}]</p></dd>
  <dd>[(#VALEUR{summary})<p>#VALEUR{description/0}]</p></dd>
  ,
       <dt>
        [(#SET{date_debut,#VALEUR{dtstart/str}})])
    Du [(#GET{date_debut}|jour) ][(#GET{date_debut}|nom_mois)]
    [(#SET{date_fin,#VALEUR{dtend/str}})]
    [(#SET{date_fin,#VALEUR{dtend}})]
    [ au (#GET{date_fin}|jour) ][(#GET{date_fin}|nom_mois) ][(#GET{date_fin}|annee)] <span> [(#GET{date_debut}|heures)]:[(#GET{date_debut}|minutes )]</span>
  </dt>
  <dd> [(#VALEUR{summary/value})<p>#VALEUR{description/0/value}]</p></dd>})]  })]
  <dd> [(#VALEUR{summary})<p>#VALEUR{description/0}]</p></dd>})]  })]
  ,
  <dt>[(#SET{date_debut,#VALEUR{dtstart/str}})]
  <dt>[(#SET{date_debut,#VALEUR{dtstart}})]
    Le [(#GET{date_debut}|jour) ][(#GET{date_debut}|nom_mois) ][(#GET{date_debut}|annee)]
  </dt>
  <dd>[(#VALEUR{summary/value})<p>#VALEUR{description/0/value}]</p></dd>})]
  ]
  <dd>[(#VALEUR{summary})<p>#VALEUR{description/0}]</p></dd>})]

</BOUCLE_calendrier>
#PAGINATION{precedent_suivant}