<?php namespace nur\config; use nur\A; use nur\b\ValueException; /** * Class ArrayConfig: une configuration stockée dans un tableau * * Lors de la création de l'objet, il faut préciser le cas échéant dans quels * profils sont valides cette configuration. */ class ArrayConfig extends DynConfig { protected function PROFILES(): array { return static::PROFILES; } const PROFILES = []; protected function SCHEMA(): array { return static::SCHEMA; } const SCHEMA = []; protected function DBS(): array { return static::DBS; } const DBS = []; protected function MSGS(): array { return static::MSGS; } const MSGS = []; protected function MAILS(): array { return static::MAILS; } const MAILS = []; protected function APP(): array { return static::APP; } const APP = []; protected function USER(): array { return static::USER; } const USER = []; /** * @var array liste des profils dans lesquels cette configuration est valide. * * un tableau vide signifie que la configuration est valide dans tous les * profils */ protected $profiles; /** @var array */ protected $config; function __construct(?array $config=null, string ...$profiles) { if (!$profiles) $profiles = $this->PROFILES(); $this->profiles = $profiles; A::update_nx($config, [ "schema" => $this->SCHEMA(), "dbs" => $this->DBS(), "msgs" => $this->MSGS(), "mails" => $this->MAILS(), "app" => $this->APP(), "user" => $this->USER(), ]); $this->config = $config; } function has(string $pkey, string $profile): bool { if ($this->profiles && !in_array($profile, $this->profiles)) return false; return A::phas_s($this->config, $pkey); } function get(string $pkey, string $profile) { if ($this->profiles && !in_array($profile, $this->profiles)) return null; return A::pget_s($this->config, $pkey); } function set(string $pkey, $value, string $profile): void { if ($this->profiles && !in_array($profile, $this->profiles)) { throw new ValueException("$profile: unauthorized profile"); } A::pset_s($this->config, $pkey, $value); } }