API pour les *template*s
~~~~~~~~~~~~~~~~~~~~~~~~

Un système de *templates* n'est pas très utile sans un moyen d'accéder à
diverses informations internes à Glasnost.

Cette section expose brièvement l'API (Application Programmer Interface)
de Glasnost.

Objets
------

Le type d'objet le plus fréquemment rencontré est de type
``GlasnostObject``, il s'agit en fait des **objets** Glasnost tels que
Articles, Groupes, Rubriques...

Un attribut ``label`` est défini pour chacun des objets. Il reprend ce qui
a été défini comme "étiquette" pour un objet (par exemple, pour un
article, son titre, pour une personne, son nom et son prénom...).

Les attributs propres à chacun de ces objets sont évidemment
disponibles. Par exemple: ``article.title`` pour accéder au titre de
l'objet article

Ces attributs peuvent également être préfixés de ``t8d_`` pour accéder à
une traduction de l'attribut (exemple: ``article.t8d_title``).

Un attribut ``isAccessible`` indique finalement si l'objet est accessible
en lecture.

Un GlasnostObject s'instancie sur l'id d'un objet.

Exemple: ::

	GlasnostObject('glasnost://site/articles/1')

Les deux autres types d'objets sont les ``serverRoles`` qui représentent
(en gros) un type d'objet connu par Glasnost et ``GlasnostTime`` qui est
utilisé pour les champs de type Time des ``GlasnostObject``.

``GlasnostServerRole`` possède les attributs ``label`` et ``url``.

``GlasnostTime`` possède les attributs suivants:

* ``isoDate`` : date au format ISO (2002-08-12 16:04:44)
* ``euroDate`` : date au format européen (12-08-2002)
* ``usDate`` : date au format US (08-12-2002)
* ``time`` : heure (16:04:44)
* ``yearMonth`` : année et mois (2002-08)

Ainsi que:

* ``euro`` : ``euroDate`` + ``time``
* ``us`` : ``usDate`` + ``time``

Variables
---------

``currentObject`` est un ``GlasnostObject`` défini pour les pages affichant un
objet (ex: ``http://site/articles/1`` définira ``currentObject`` comme étant
l'article numéro 1).

``userToken`` est une variable qui contient le jeton de l'utilisateur ou
rien si l'utilisateur n'est pas loggé.

Fonctions
---------

``canAddObject(objectType)`` retourne un booléen indiquant si
l'utilisateur a les permissions nécessaires pour créer un objet du
type ``objectType``.

``parseSpip(text)`` retourne le paramètre `text` au format SPIP converti en
HTML.

``pretion(text)`` crée et retourne une liste divisant le texte selon les
balises <hr /> s'y trouvant.

``getLastObjects(serverRole, number)`` retourne les `number` objets les plus
récents pour le serverRole `serverRole`.

``getMainRubric()`` retourne la rubrique définie comme rubrique
principale.

``getPathToObject(object)`` retourne une liste des rubriques à parcourir
pour atteindre l'objet ou None si aucun chemin vers l'article n'est
trouvé.

Exemple: ::

	<p tal:on-error="nothing">
	  Vous êtes ici:
	  <span tal:repeat="s getPathToObject(GlasnostObject( \
	           'glasnost://entrouvert.theridion.lan/articles/22'))"
	        tal:replace="'/ ' + s.label">Chemin</span>
	</p>

``getServerRoles()`` retourne la liste des serverRoles connus.

``getSetContainedObjects(set, serverRoles=[], sortOn=None)`` retourne la
liste des objets contenus dans la liste set dont le ``serverRole``
correspond à un des ``serverRole`` listé dans ``serverRoles`` et triés sur
l'attribut ``sortOn``.

Exemple::

	<ul>
	  <li tal:repeat="a2 getSetContainedObjects(r.membersSet, \
	         ['articles'], sortOn='modificationTime')"
	      tal:content="a2.label">un article</li>
	</ul>

Remarque: le backslash permet d'écrire une longue expression Python
sur plusieurs lignes.

Modules
-------

Les modules standards Python suivants sont accessibles depuis les
*template*s: ``math`` et ``time``.

