Carnet Wiki

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

Version 9 — 4 months ago Thrax

Cet article est une visée pédagogique. Il vous explique comment j’ai incorporé ajouté dans le calendrier personnel un nouvel objet éditorial propre au plugin Pense-bêtes les objets pense-bêtes reçus par un auteur dans le calendrier personnel de l’auteur.

Le but est cet article est de faire comprendre le fonctionnement du pipeline < code>quete_calendrier_prive</code > à 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.

Chaque calendrier présente des objets éditoriaux placés dans le calendrier par sa date. 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 [2]. Par exemple , 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->https://plugins.spip.net/organiseur.html] inclus dans la distribution de SPIP qui s’occupe de cette fonction.

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 incorporer dans le calendrier personnel[net/organiseur.prend en charge les calendriers." class='spip_out' rel='external'>Nous parlons ici de modifications dans le cadre d’une configuration minimale. Pour utiliser le calendrier, il n’est nullement obligatoire d’installer le plugin Agenda. Nous travaillons ici avec SPIP sans plugin additionnel. Dans la configuration de base, seul le plugin [Organiseur] 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->https://plugins.spip.spip.net/pensebetes.html] html], 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.

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&lt;/code >.  'quete_calendrier_prive '.  Ce pipeline est créé par le plugin [Organiseur->https://plugins.spip.net/organiseur.html].


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 <code>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&lt;/code >  Vous  pouvez  aller  le  consulter  dans  les  répertoire  tmp/log ,  ou installer un charmant plugin, [Simples Logs->https://plugins.spip.net/simplog.html], qui vous permettra de faire cela depuis l'interface privée.


<cadre>
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;
}
</cadre>


{{{Ajout d'informations formatées dans le flux}}}


Le plug [Organiseur->https://plugins.spip.net/organiseur.html] 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 :
-* <code>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 ?).