Carnet Wiki

Ajouter des Objets Editoriaux dans le calendrier personnel - l’exemple des Pense-bêtes.

Version 13 — 7 March Thrax

Cet article est une visée pédagogique. Il explique comment j’ai incorporé dans le calendrier personnel un nouvel objet éditorial propre au plugin Pense-bêtes

Le but est cet article est de faire comprendre le fonctionnement du pipeline quete_calendrier_prive à utiliser pour ajouter un nouvel objet éditorial dans le calendrier personnel d’un auteur.

L’«Agenda interne» de SPIP est la superposition de deux calendriers [1] :

  1. Le calendrier public de la vie du site
  2. Le calendrier personnel de l’auteur.

Les calendriers sont accessibles de deux façons :

  1. dans l’espace privé, après le bandeau des outils_rapides, au sein du bandeau des outils_collaboratifs, vous trouverez l’icône «Agenda interne» et, en cliquant dessus, vous accédez aux deux calendriers fusionnés en un seul.
  2. par téléchargement ou synchronisation, des fonctions qui vous sont proposées depuis la page accessible par le menu Publication ! Suivre la vie du site.

Chaque calendrier présente des objets éditoriaux placés dans le calendrier par sa date. Par exemple, la date de publication d’un article est le repère pris pour placer l’article dans le calendrier public.

Ce traitement est réalisé par le plugin Organiseur. Ce plugin est inclus dans la distribution de SPIP.

L’objet du présent article est de vous montrer comment j’ai incorporé dans le calendrier personnel un nouvel objet éditorial propre au plugin Pense-bêtes, qui est l’Objet Pensebete (on parle d’objet éponyme).

Mon objectif était que les pense-bêtes adressés à l’auteur apparaissent dans le calendrier de l’auteur par date.

Vous pourrez adapter les démarches ici décrites à d’autres objets éditoriaux dans les plugins que vous programmerez. Pensez alors aux règles de rédaction du code préconisées sous SPIP afin que ce que vous rédigiez soit facilement compréhensible par la communauté.

Déclaration de l’utilisation du pipeline quete_calendrier_prive

Les plugins peuvent afficher leurs événements dans le calendrier privé par le pipeline quete_calendrier_prive. Ce pipeline est créé par le plugin Organiseur.

Pour pouvoir utiliser ce pipeline d’Organiseur, on déclare dans notre propre plugin que l’on va se brancher dessus en ajoutant une ligne dans les déclaration du paquet.xml :

<pipeline nom = "quete_calendrier_prive" inclure = "pensebetes_pipelines.php" />

Cette déclaration faite, il faut créer la fonction qui utilisera effectivement le pipeline. Pour ce faire, on modifie le fichier pensebetes_pipelines.php pour ajouter la fonction nécessaire :

function pensebetes_quete_calendrier_prive($flux) {


return $flux;
}

Pour l’instant, les tuyaux de programmation sont installés (on a dérivé le pipeline), mais le flux de données qui les traversent ne sont pas modifiés. En d’autres ternes, l’information circule mais n’est pas modifiée.

Vous voulez regardez ce qui se passe ? Vous pouvez le faire par un log. Un log est un journal de bord horodaté, à l’usage du programmeur, qui ordonne les différents événements qui se sont produits. Vous pouvez aller le consulter dans les répertoire tmp/log/calendrier.log ou installer un charmant plugin, Simples Logs, qui vous permettra de faire cela depuis l’interface privée.

function pensebetes_quete_calendrier_prive($flux) {
	$start = $flux['args']['start'];
	$end = $flux['args']['end'];
	$quoi = print_r($flux['data'], true);


spip_log("start = $start end = $end quoi = $quoi", 'calendrier'._LOG_INFO_IMPORTANTE);
	return $flux;
}

Ajout d’informations formatées dans le flux

Le plugin Organiseur met en forme ses données au travers de deux fonctions. Pour envoyer de la donnée relative aux évènements de rendez-vous, ce sont les fonctions suivantes :

  • quete_calendrier_interval_rv(), que vous trouverez dans le fichier /plugins-dist/organiseur/inc/quete_calendrier.php
  • convert_fullcalendar_quete_calendrier_interval_rv(), que vous trouverez dans le fichier /plugins-dist/organiseur/action/quete_calendrier_prive.php.

Vous pouvez écrire votre propre formatage des données que vous allez ajouter à celles qui transitent dans le pipeline que nous avons dérivé.

Nous avons ajouter un évènement test pour la date d’aujourd’hui. Cet évènement vous rappellera le premier article que vous avez écrit sous SPIP. Nous reprenons donc la fonction précitée située dans le fichier pensebetes_pipelines.php et nous la rédigeons ainsi :

function pensebetes_quete_calendrier_prive($flux) {
	
	$texte = generer_url_ecrire('article', 'id_article = 1');// fonction dans urls.php
	$texte = str_replace ('&', '&', $texte); // on injecte du json pas du HTML
	$flux['data'][] = array ('id' => ,
	'title' => "Mon premier article",
	'allDay' => 1,
	'start' => date('Y-m-d'),
	'end' => date('Y-m-d'),
	'url' => liens_absolus($texte, ''), //fonction de filtres_mini.php
	'className' => 'calendrier-event calendrier-couleur01',
	'description' =>'Ma description qui déchire !');


return $flux;
}

La consultation du calendrier fera apparaitre à la date d’aujourd’hui le premier article que vous avez écrit (article1).

Ajout de l’information que vous souhaitez dans le flux

L’objectif est maintenant de faire apparaitre les pense-bêtes qu’a reçu l’auteur dans son calendrier personnel. Voici comment le plugin Pense-bêtes procède :

function pensebetes_quete_calendrier_prive($flux) {
	
	$id_auteur = $GLOBALS['visiteur_session']['id_auteur'] ;


if ($mes_pensebetes= sql_allfetsel('id_pensebete, titre, texte, date', 'spip_pensebetes', 'id_receveur=' . intval($id_auteur). ' AND date > "'.$flux['args']['start'].'" AND date < "'.$flux['args']['end'].'"')) {
		foreach ($mes_pensebetes as $un) {
			$texte = generer_url_ecrire('pensebete','id_pensebete=' . $un['id_pensebete']);// fonction dans urls.php
			$texte = str_replace ('&','&',$texte); // on injecte du json pas du HTML
			$flux['data'][] = array ('id' => ,
			'title' => $un['titre'],
			'allDay' => 1,
			'start' => substr ($un['date'],0,10),
			'end' => substr ($un['date'],0,10),
			'url' => liens_absolus($texte, ''), //fonction de filtres_mini.php
			'className' => 'calendrier-event calendrier-couleur01',
			'description' =>$un['texte']);
		}
	}
	return $flux;
}

Si vous souhaitez vous aussi insérer vos données, vous pouvez vous inspirer de cette démarche.

Il n’est pas inutile de mieux comprendre ce qu’est le json. C’est un langage formatant la donnée. Ce langage est ensuite utilisé par le javascript de la librairie Fullcalendar utiliser par le plugin Organiseur.

Le formatage json de la donnée qui nous intéresse, et que nous transmettons par un tableau PHP dans le flux du pipeline est le suivant :

  • id : id unique de l’événement (qui sera attribué par le pipeline ; en attendant on met zéro)
  • title : titre de l’événement
  • allDay : précise si l’évènement est sur la journée (true) ou non (false)
  • start : date de début de l’événement
  • end : date de fin de l’événement
  • url : url sur laquelle on envoi lors du clic sur l’événement (Attention à ne pas mettre le code HTML de & mais bien le signe &)
  • className : classe css appliquée à l’événement (Et ici utilisation des class calendrier-couleurxx de SPIP)
  • description : courte description de l’événement, mais qui n’est pas affichée dans le calendrier (bug ?).

Redonner du sens à la Description

Attention, les paragraphes qui suivent sont techniques et proposent de modifier un plugin existant dans la distribution de SPIP.

Le plugin Organiseur dans sa version 1.2.4 propose de renseigner le champ json description... mais ne l’exploite pas ! Il n’y a aucun traitement fait. Il vous est proposé de remédier ici à ce défaut. L’exploitation par jquery des données json proposée à la librairie Fullcalendar se fait dans le squelette /organiseur/prive/squelettes/contenu/calendrier.html

jqueryUI permet de mettre en place des infos bulles. Nous allons donc utiliser cette possibilité pour donner une utilité au champ description précité.

L’exploitation par jquery des données json proposée à la librairie Fullcalendar se fait dans le squelette /organiseur/prive/squelettes/contenu/calendrier.html