Config
From ClaroDevel
| Table of contents |
|
|
Config
A new feature is write to edit online the config of claroline.
It's an admin tool
Il n'y aura plus de fichier de configuration dans la distribution mais des fichiers de définitions des paramètres.
C'est claroline qui génèrera les fichiers de conf sur base de la même moulinette que pour les langues.
Détail
Fonctionnement
Les valeurs de configuration actives seront stockées en DB. Le script de configuration recoit une demande pour outil.
Il lit alors le fichier de définition et il lit les valeurs actives si elles existent dans la db
Ensuite il génère le forumlaire, on peut editer comme on veut puis dire, "appliquer", "restaurer les valeur par défaut", "abandonner"
Si on utilise "appliquer" il regénère tous les fichiers de conf concernés
L'avantage c'est qu'à l'upgrade on écrase les fichiers de définition pas les valeurs actives
le système sera ensuite étendu pour permmetre le déclanchement de script/fonction en cas de modif de certaines valeurs de config. Par exemple je switch le "userPasswordCrypt" -> script qui crypte tous les pass
en db on a une table id, propName, propValue, claro_label
claro_label permet de retrouver tous les params
exemple
10 $toolConfProperties['CONFVAL_LOG_CALENDAR_INSERT'] =
11 array ('label' => 'Logguer les ajouts d\'agenda'
12 ,'default' => 'TRUE'
13 ,'type' => 'boolean'
14 ,'display' => TRUE
15 ,'readonly' => FALSE
16 ,'container' => 'CONST'
17 ,'acceptedval' => array ('TRUE'=>'enabled'
18 ,'FALSE'=>'dislabed'
19 )
20 );
- CONFVAL_LOG_CALENDAR_INSERT <- nom du conteneur
- container => 'CONST' <- type du conteneur
donc ici il génère un define('CONFVAL_LOG_CALENDAR_INSERT', ...)
- default => 'TRUE' <- valeur proposée par défaut
- type => 'boolean' <- permet de définir le contrôle sur valeur recue et l'aspect du formulaire on peut mettre boolean, integer, string, enum, enum+, ereg, si boolean,'acceptedval' => array ('TRUE'=>'enabled','FALSE'=>'dislabed') perment de mettre le nom à coté des radios
- display = TRUE;
- readonly = FALSE;
Ces deux là permettent d'afficher ou non une valeur dans l'éditeur et de la rendre editable ou non
un autre exemple
$toolConfProperties['DEFAULT_SUFFIX_MAIL']['default'] = '@fake.zz';
$toolConfProperties['DEFAULT_SUFFIX_MAIL']['type' ] = 'regexp';
$toolConfProperties['DEFAULT_SUFFIX_MAIL']['acceptedval'] = '@(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z][0-9a-z-]*[0-9a-z]\.)+[a-z]{2,4})$';
On pourrai imaginer avoir une page "gestion des outils" et pour chaque outil des actions possibles
- configurer,
- archiver,
- vérifier,
- upgrader,
- ....
This tool is write to edit setting of claroline.
In the old claroline, there was a central config file in next release a conf repository was build with conf files
To not owerwrite on the following release, was rename from .conf.inc.php to .conf.inc.php.dist
Installer was eable to rename from .conf.inc.php.dist to .conf.inc.php
The actual config file is build to merge new and active setting. The system as more change than previous evolution Tool are released with a conf definition file This file define for each property a name, a place but also some control for define accepted content. and finally some comment, explanation or info
this version do not include
- trigered procedure (function called when a property is switch or set to a particular value)
- renaming or deletion of properties from config
- locking of edit file (This tools can't really be in the active part of the day in prod. ) I need to change that to let admin sleep during the night
To make transition,
- a section can parse old file to found old properties and his values.
This script would be continue to generate a def conf file.
Displays
define("DISP_MENU", __LINE__);
Print out a lis of eable action.
define("DISP_EDIT_MAIN", __LINE__);
Old script to config main conf.
define("DISP_EDIT_CONF_CLASS", __LINE__);
Edit settings of a tool.
define("DISP_GENERATE_CONF", __LINE__);
Build conf file of a tool.
define("DISP_SCAN_RESULT", __LINE__);
Scan old conf file to detect values.
Install
During install the config fiel are generated from .dist
These files would be deprecated.
The config file would be created from definition file using the default values.
Actually we suppose that all values have an default value.
The process need a working database and so would wait that the database is created to
- parse the repository of definition file
- and for each ,
- parse the content,
- fill the db ,
- generate the conf file.
In fine , it' the same result than with dist file.
upgrade
for upgrade, it's a little less easy. There is already some values in config.
The idea is
- to create tables used by config tools,
- parse the repository of definition file
- and for each ,
- parse the content of definition file,
- parse the actual conf file
- merge data (keep value of existing old properties,)
- fill the db ,
- generate the conf file.
configurations stockées dans un tableau
Utiliser un tableau va nous permettre:
- de parser facilement le fichier de conf
- d'écraser facilement les conf pour un cours
- d'afficher rapidement dans un script les variables de configuration disponibles (var_dump du tableau -> utile pour le devel et débugage)
- il est possible de stocker différent type dans un tableau (booleen, string, integer, array, etc...)
Ce qui pourrait être "contre" et les contres arguments du contre
obligation des array
Ma première objection était l'obligation de mettre des valeurs de config toujours en tableau, perte de liberté du développeur ou de l'intégrateur. Mais, c'est un fichier qui n'a pas à être édité normalement. donc celui qui arrive là a déjà un bagage. S'il veut ajouter une valeur il connait php, s'il veut éditer une valeur, on s'est pas cassé le cul a faire un éditeur pour qu'il aille le changer manuellement.
Et si j'intègre un outil qui a une config sans tableau ?
Si le fichier de config de mon outil (Mytool.setup.php) contient des variables ou des constantes ? Il suffit d'inclure le CLAROLABEL.conf.php qui lui est généré et continet les valeurs dans un tableau. et de modifier Mytool.setup.php pour affecter ce qui vient de CLAROLABEL.conf.php. on perd un include mais on gagne en gestion de code en cas de mise à jour.
Utiliser une fonction:
- permet de retrouver facilement les utilisations de variables de config. (lisibilité accrue)
- intégration facile d'outil existant dans claroline (dans les fichier de setup de l'outil chaque variable = claro
la tableau claro_config dans inc/conf/claro_main.conf.php
/* campus_name : Name of your campus */ $claro_config['platform_name'] = 'My campus'; /* platform_language : Select the default language of the platform */ $claro_config['platform_language'] = 'english'; /* claro_stylesheet : Set the stylesheet layout */ $claro_config['platform_stylesheet'] = 'default.css'; /* administrator_name : Complete name */ $claro_config['administrator_name'] = 'John Doe'; /* administrator_email : This email is the main contact address on the platform */ $claro_config['administrator_email'] = 'mathieu@claroline.net'; /* administrator_phone : Phone */ $claro_config['administrator_phone'] = ""; /* institution_name : Name displayed in the top banner */ $claro_config['institution_name'] = 'My institute'; /* institution_url : URL */ $claro_config['institution_url'] = 'http://www.google.com/';
dans inc/lib/claro_init_global.php
// Determine the directory path where this current file lies // This path will be useful to include the other intialisation files $includePath = dirname(__FILE__); // YOU CAN REMOVE THE @ of the following line after install. unset($claro_config); @include($includePath.'/conf/claro_main.conf.php');
la fonction dans inc/lib/claro_main_lib.php
function claro_get_conf ($conf_name)
{
global $claro_config;
if ( isset($claro_config[$conf_name]) )
{
return $claro_config[$conf_name];
}
else
{
// Je ne sais pas encore ce qu'on doit faire ?
return FALSE;
}
}
exemple:
$db = @mysql_connect(claro_get_conf('db_host'), claro_get_conf('db_login'), claro_get_conf('db_pass'));
le parsing dans admin/tool/config_edit.php
Plus de problème pour parser un fichier:
$config_value = parse_config_file($conf_name);
Voici la fonction de parsing dans config.lib.php
function parse_config_file($conf_name)
{
include( $conf_name );
return $claro_config;
}
Note: L'include se fait en local dans la fontion. Donc on récupére correctement les valeurs du fichier de config et uniquement celle là.
todo
config todo/
- renommer la fonction trueFalse
- function load() décide pour load_def_file que le def est un .php
si load_def_file le fait il peut tenter de détecter php/xml(/ ini?) puis seulement retourner false si rien n'est trouvé.
- découpage écrans <-> fichiers de config
- outil pour créer un .def
- renommage de variables
