Carnet Wiki

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

Version 1 — 5 months ago Thrax — Version initiale

L’Agenda interne de SPIP est la superposition de deux agendas, l’agenda public de la vie du site et l’agenda personnel de l’auteur [1]. Chaque calendrier présente des objets éditoriaux placés dans le calendrier par sa date : la date de publication d’un article par exemple est le repère pris pour placer l’article dans le calendrier public. C’est le plugin Organiseur inclus dans la distribution de SPIP qui s’occupe de cette fonction.

L’objet du présent article est de vous apprendre comment incorporer dans l’agenda personnel des nouveaux objets éditoriaux [2].

Pour l’exercice pédagogique, on va partir du principe que vous avez installé le plugin Pense-bêtes et que vous souhaitez le modifier pour 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.

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 modifier le fichier pensebetes_pipelines.php :

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, ou installé 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

Maintenant que vous savez comment est formaté le flux de donnée, vous pouvez regarder comment le plug Organisateur le met en forme [3] et tester si vous pouvez introduire de nouvelle information.

Pour ce faire, nous allons modifier les données qui transite dans le pipeline que nous avons dérivé.

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' => 0,
	'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;
}

Vous verrez apparaitre au jour d’aujourd’hui un évènement vous rappelant le premier article qui a été écrit sous SPIP.

Ajout de l’information que vous souhaitez dans le flux

L’objectif est maintenant de faire apparaitre les pense-bêtes dans le calendrier.

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))) {
	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' => 0,
			'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;
}