147 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace nur\config;
 | |
| 
 | |
| use nur\func;
 | |
| 
 | |
| /**
 | |
|  * Interface IConfigManager: interface pour un gestionnaire de configuration
 | |
|  */
 | |
| interface IConfigManager {
 | |
|   /** ajouter une classe ou un objet à la liste des configurateurs */
 | |
|   function addConfigurator($configurators): void;
 | |
| 
 | |
|   /**
 | |
|    * configurer les objets et les classes qui ne l'ont pas encore été. la liste
 | |
|    * des objets et des classes à configurer est fournie en appelant la méthode
 | |
|    * {@link addConfigurator()}
 | |
|    *
 | |
|    * par défaut, la configuration se fait en appelant toutes les méthodes
 | |
|    * publiques des objets et toutes les méthodes statiques des classes qui
 | |
|    * commencent par 'configure', e.g 'configureThis()' ou 'configure_db()',
 | |
|    * si elles n'ont pas déjà été appelées
 | |
|    *
 | |
|    * Il est possible de modifier la liste des méthodes appelées avec le tableau
 | |
|    * $options, qui doit être conforme au schema de {@link func::CALL_ALL_SCHEMA}
 | |
|    */
 | |
|   function configure(?array $options=null): void;
 | |
| 
 | |
|   /**
 | |
|    * réinitialiser la liste des objets et des classes qui ont été configurés.
 | |
|    */
 | |
|   function resetConfiguration(): void;
 | |
| 
 | |
|   #############################################################################
 | |
|   # gestion des objets
 | |
|   #
 | |
|   # la configuration est normalement stockée sous forme de tableau, et on accède
 | |
|   # aux valeurs avec des chemins de clé. parfois, on peut souhaiter que la
 | |
|   # valeur retournée pour un chemin de clé soit un objet, construit à partir de
 | |
|   # la valeur présente dans la configuration pour ce chemin-là.
 | |
|   #
 | |
|   # les méthodes de cette section permettent d'implémenter ce mode opératoire
 | |
| 
 | |
|   /**
 | |
|    * indiquer si la definition ou le chemin de clé spécifiés doit retourner un
 | |
|    * objet.
 | |
|    */
 | |
|   function isObject($definition, ?string $pkey=null): bool;
 | |
| 
 | |
|   /**
 | |
|    * créer un nouvel objet avec la définition spécifiée.
 | |
|    *
 | |
|    * - l'on peut choisir de se baser sur le chemin de clé $pkey pour savoir
 | |
|    *   comment instancier l'objet.
 | |
|    * - sinon, la définition sera un tableau de la forme
 | |
|    *   [[$class], $args..., $key=>$values...]
 | |
|    *   où $class est le nom de la classe d'objet, $args des arguments
 | |
|    *   supplémentaires éventuels utilisés par le constructeur. les clés
 | |
|    *   associatives sont utilisées pour faire un tableau qui est passé en
 | |
|    *   dernier argument.
 | |
|    */
 | |
|   function newObject($definition, ?string $pkey=null);
 | |
| 
 | |
|   #############################################################################
 | |
| 
 | |
|   /** spécifier le code application. */
 | |
|   function initAppcode(string $appcode): void;
 | |
| 
 | |
|   /** obtenir le code application, utilisé pour les autorisations d'accès */
 | |
|   function getAppcode(): string;
 | |
| 
 | |
|   const PROD = "prod";
 | |
|   const TEST = "test";
 | |
|   const DEVEL = "devel";
 | |
|   const DEFAULT_PROFILES = [
 | |
|     self::PROD,
 | |
|     self::TEST,
 | |
|     self::DEVEL,
 | |
|   ];
 | |
| 
 | |
|   /**
 | |
|    * clé de profil à utiliser pour le profil par défaut (c'est à dire que les
 | |
|    * valeurs sont valides pour tous les profils)
 | |
|    */
 | |
|   const PROFILE_ALL = "ALL";
 | |
| 
 | |
|   /**
 | |
|    * spécifier le profil à sélectionner par défaut si l'utilisateur n'en n'a pas
 | |
|    * fourni
 | |
|    */
 | |
|   function setDefaultProfile(?string $defaultProfile): void;
 | |
| 
 | |
|   /** retourner la liste des profils valides */
 | |
|   function getProfiles(): array;
 | |
| 
 | |
|   /** spécifier le profil courant. */
 | |
|   function setProfile(string $profile): void ;
 | |
| 
 | |
|   /**
 | |
|    * obtenir le profile courant.
 | |
|    *
 | |
|    * si le profil courant n'est pas défini:
 | |
|    * - si $ensureNn est vrai, calculer le profil courant
 | |
|    * - sinon retourner null
 | |
|    *
 | |
|    * le profil courant est calculé à partir *des données de l'environnement*
 | |
|    * si aucun profil n'a été spécifié par l'utilisateur dans l'environnement,
 | |
|    * choisir:
 | |
|    * - le profil spécifié par {@link setDefaultProfile()} ou
 | |
|    * - le premier profil de {@link getProfiles()}
 | |
|    */
 | |
|   function getProfile(bool $ensureNn=true): ?string;
 | |
| 
 | |
|   #############################################################################
 | |
| 
 | |
|   /**
 | |
|    * Ajouter une configuration valide pour le(s) profil(s) spécifié(s)
 | |
|    *
 | |
|    * $config est:
 | |
|    * - soit une classe qui définit une ou plusieurs des constantes SCHEMA, DBS,
 | |
|    *   MSGS, MAILS, APP, USER
 | |
|    * - soit une instance de {@link DynConfig}
 | |
|    *
 | |
|    * si $inProfiles===null, la configuration est valide dans tous les profils
 | |
|    */
 | |
|   function addConfig($config, ?array $inProfiles=null): void;
 | |
| 
 | |
|   /**
 | |
|    * obtenir la valeur au chemin de clé $pkey dans le profil spécifié
 | |
|    *
 | |
|    * le $inProfile===null, prendre le profil par défaut.
 | |
|    */
 | |
|   function getValue(string $pkey, $default=null, ?string $inProfile=null);
 | |
| 
 | |
|   #############################################################################
 | |
| 
 | |
|   /** affirmer un fait, information qui peut être utilisée par l'application */
 | |
|   function setFact(string $fact, $value=true): void;
 | |
| 
 | |
|   /** tester si un fait est avéré */
 | |
|   function isFact(string $fact, $value=true): bool;
 | |
| 
 | |
|   /** spécifier le mode DEBUG */
 | |
|   function setDebug(?bool $debug=true): void;
 | |
|   /** est-on en mode DEBUG? */
 | |
|   function isDebug(): bool;
 | |
| }
 |