Télécharger FAQ
 

Templeet pas à pas

XV. L'écriture de nouveaux packages

Cette documentation traite de la version 3 du système de package.

Les packages permettent d'installer de nouvelles applications ou fonctionalités à Templeet.
Pour construire un package il est nécessaire de respecter quelques règles afin que la gestion du package se fasse sans encombre.

Un package doit se trouver dans un répertoire qui porte son nom dans template/templeet_packages. Dans ce répertoire ce trouvent tous les fichiers du package.

Les fichiers nécessaires au fonctionnement du package:

OK

Ce fichier doit contenir une seule ligne:

install:3

Ce fichier permet de définir la version du système de package.

INFO.??

Ces fichiers où les points d'interrogation sont remplacés par des codes langues ISO639-2 contiennent un petit descriptif de ce que fait le package.

Par exemple pour le package cal les fichiers INFO sont:

INFO.fr

Le module CAL permet de générer un calendrier.

INFO.en

The CAL module handles calendars.

NOTE : ce descriptif est intégré dans une page dont le codage de caractère est en iso-8859-1, donc ce fichier doit utiliser le même encodage.

noinstall

Ce fichier est optionel. Il permet de définir un package comme non installable. C'est à dire que le package est présent, mais il n'est pas destiné à être installé dans un répertoire.

install.tmpl

Ce fichier contient les instructions qui permettent la gestion du package. Ce fichier est appelé par le gestionnaire de packages pour diverses opérations.

Ce fichier est inclus par le gestionnaire avec un paramètre qui indique quelle est l'opération à effectuer.

Un fichier install.tmpl doit traiter obligatoirement quatre opérations de base qui sont:

Lors du traitement des commandes remove et update, il est possible de connaître le répertoire où est installé le package via la variable packagedir.



La structure générale d'un fichier install.tmpl est la suivante:

~switch(

	 ATTENTION:
  ~parseparam(1) == 'installable',
      { 
	 Le package est-il installable ?
      },
      
	 ATTENTION:
  ~get_filenamevar(1) == 'install',
      {
	      
	 Instructions pour l'installation
      },
      
  ~get_filenamevar(1) == 'remove',
      {
	 Instructions pour la suppression 
      },
	 
  ~get_filenamevar(1) == 'update',
      {
	 Instructions pour la mise à jour     
      }   
	 
)

Lors des opérations sur le package l'enregsitrement des packages doit être tenu à jour. Cette gestion se fait à l'aide des fonctions package_register et package_unregister.

Syntaxe des fonctions:

~package_register(nom du package,répertoire d'installation)

~package_unregister(nom du package,répertoire d'installation)

Lorsqu'un package par nature ne s'installe pas dans un répertoire particulier, le paramètre répertoire doit être templeet.

Présentation du fichier install.tmpl du module cal:

~string(

~set('files',~array(					<-- liste des fichiers à copier
	~array('modules/cal.php','templeet/modules/'), 
	~array('doc/.*','template/templeet_doc/')
	     )
    ),
~defunc('remove_files',				   <-- fonction d'effacement des fichiers installés
{
     ~delete_files(~array('templeet/modules/cal.php',
      'template/templeet_doc/cal.fr.html'))
}
),


~switch(
  ~parseparam(1) == 'installable',
      !~file_exists('templeet/modules/cal.php'),	   <-- si le fichier le module est présent 
							  alors le package n'est pas installable
  ~get_filenamevar(1) == 'install',{
     ~package_install(~get_filenamevar(2),~get('files')),       <-- copie des fichiers
     ~uncache('templeet_doc/index.en.html','templeet_doc/index.fr.html'),	<-- effacement du cache des pages
									  d'index de la documention à cause de  
									  l'ajout de la documentation du module.
									      
     ~set('res',~configurator("","","")),			  <-- prise en compte du nouveau module
     ~if(~get('res')<0,
	 {
	   ~remove_files(),
	   ~displaylang(~get('lang'),~array(
	       'fr' => "erreur à l'installation du package",
	       'en' => "error while installing package"
	       )     
	   )
	 },
	 {
	   ~package_register('cal','templeet'),			 <-- enregistrement du package
	   ~displaylang(~get('lang'),~array(
	       'fr' => "package installé",
	       'en' => "package installed"
	       )     
	   )
	 }  
	)
     },
  ~get_filenamevar(1) == 'remove',{
     ~remove_files(),					 <-- effacer les fichiers 
     ~package_unregister('cal','templeet'),		    <-- suppression du package de la base des
								package installés
     ~set('res',~configurator("","","")),		      <-- prise en compte de la suppression du module								      
     ~displaylang(~get('lang'),~array(
	   'fr' => "package supprimé",
	   'en' => "package removed"
	 ))},
	 
  ~get_filenamevar(1) == 'update',{
     ~remove_files(),					 <-- effacer les fichiers 
     ~package_unregister('cal','templeet'),		    <-- suppression du package de la base des
								package installés
     ~package_install(~get_filenamevar(2),~get('files')),   <-- copie des nouveaux fichiers
     ~uncache('templeet_doc/index.en.html','templeet_doc/index.fr.html'),	<-- effacement du cache des pages
     ~package_register('cal','templeet'),		    <-- réenregistrement du package avec les 
								nouveaux paramètres
     ~set('res',~configurator("","","")),		      <-- prise en compte de la mise à jour du module
     ~displaylang(~get('lang'),~array(
	   'fr' => "package mis à jour",
	   'en' => "package updated"
	 )) 
	   }	  
	 
)

)


Lors de l'écriture des procédures de supression et de mise à jour en particulier, les développeurs de packages prendront garde de ne pas modifier de fichiers qui n'appartiennent pas au package. Plusieurs packages pouvant être installés dans le MEME répertoire, la suppression d'un package ne doit EN AUCUN CAS provoquer le dysfonctionnement des autres packages.