/[openfoncier]/trunk/obj/electronicsignature.class.php
ViewVC logotype

Annotation of /trunk/obj/electronicsignature.class.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10808 - (hide annotations)
Wed Nov 24 17:48:35 2021 UTC (3 years, 2 months ago) by softime
File size: 14960 byte(s)
* Fusion de la branche d'intégration 5.2.0-develop dans le trunk

1 softime 10067 <?php
2     /**
3     * Contient la définition des classes 'electronicsignature' et 'electronicsignature_base'.
4     */
5    
6 softime 10074 if (defined('PATH_OPENMAIRIE') !== true) {
7     define('PATH_OPENMAIRIE', '../core/');
8     }
9     require_once PATH_OPENMAIRIE."om_logger.class.php";
10    
11 softime 10067 /**
12     * Abstracteur du parapheur
13     */
14     class electronicsignature {
15    
16     /**
17 softime 10079 * Configuration du connecteur parapheur.
18     * @var array
19 softime 10067 */
20     var $conf = null;
21    
22     /**
23 softime 10079 * Instance du connecteur parapheur.
24     * @var object
25 softime 10067 */
26     var $electronicsignature = null;
27    
28     /**
29 softime 10808 * Liste des clés obligatoire pour les parapheurs.
30     * @var array
31     */
32     const DATA_KEYS = array(
33     "om_utilisateur_email",
34     "om_utilisateur_nom",
35     "signataire_arrete_email",
36     "signataire_arrete_nom",
37     "signataire_arrete_prenom",
38     "date_limite_instruction",
39     "dossier"
40     );
41    
42     /**
43     * Liste des clés obligatoire pour les métadonnées des documents d'instruction.
44     * @var array
45     */
46     const DOSSIER_METADATA = array(
47     "mimetype",
48     "filename",
49     "url_di"
50     );
51    
52     /**
53 softime 10079 * Instancie le connecteur parapheur depuis la collectivité transmise et la
54     * configuration.
55     *
56     * Liste des paramètres :
57     * - *conf_name* nom de la configuration à récupérer, par défaut 'electronicsignature-default'
58     * - *collectivite_idx* identifiant de la collectivité
59     * - collectivite_multi_idx identifiant de la collectivité de niveau 2
60     *
61     * @param array $params Liste des paramètres.
62 softime 10067 */
63     public function __construct(array $params) {
64     //
65     if (file_exists("../dyn/electronicsignature.inc.php") === false) {
66 softime 10074 throw new electronicsignature_configuration_exception(__("Aucun fichier de configuration pour la signature électronique."));
67 softime 10067 }
68     include("../dyn/electronicsignature.inc.php");
69     if (isset($conf) === false) {
70 softime 10074 throw new electronicsignature_configuration_exception(__("Aucune configuration pour la signature électronique."));
71 softime 10067 }
72     $this->conf = $conf;
73     //
74     if (isset($params['conf_name']) === true) {
75     $this->conf = $this->conf[$params['conf_name']];
76     } else {
77     $this->conf = $this->conf['electronicsignature-default'];
78     }
79     //
80     if (isset($params['collectivite_idx']) === true
81     && $this->get_conf('unexpected_collectivite') !== null
82     && in_array($params['collectivite_idx'], $this->get_conf('unexpected_collectivite')) === true) {
83     //
84 softime 10074 throw new electronicsignature_configuration_exception(__("Aucun parapheur configuré pour la collectivité."));
85 softime 10067 }
86     //
87     if (isset($params['collectivite_idx']) === true
88     && $this->get_conf($params['collectivite_idx']) !== null) {
89     //
90     $this->conf = $this->conf[$params['collectivite_idx']];
91     }
92     elseif (isset($params['collectivite_multi_idx']) === true
93     && $this->get_conf($params['collectivite_multi_idx']) !== null) {
94     //
95     $this->conf = $this->conf[$params['collectivite_multi_idx']];
96     } else {
97 softime 10074 throw new electronicsignature_configuration_exception(__("Aucun parapheur configuré pour la collectivité."));
98 softime 10067 }
99    
100     //
101     if ($this->get_conf('path') === null) {
102     throw new electronicsignature_configuration_exception(__("Le chemin vers le connecteur du parapheur n'est pas configuré."));
103     }
104     //
105     if ($this->get_conf('connector') === null) {
106     throw new electronicsignature_configuration_exception(__("Le nom du connecteur du parapheur n'est pas configuré."));
107     }
108     //
109     $connector = sprintf(
110     '%s_%s',
111     get_class($this),
112     $this->get_conf('connector')
113     );
114     require_once $this->conf['path'].$connector.'.class.php';
115     $this->electronicsignature = new $connector($this->get_conf());
116     }
117    
118     /**
119 softime 10079 * Détruit la ressource instanciée dans le constructeur.
120 softime 10067 */
121     public function __destruct() {
122     //
123     if (is_null($this->electronicsignature) === false) {
124     unset($this->electronicsignature);
125     }
126     }
127    
128     /**
129 softime 10079 * Accesseur pour récupérer la configuration complète du connecteur parapheur
130     * ou une partie de celle-ci.
131     *
132     * @param string $params Attribut de la configuration.
133     * @return mixed Le tableau de configuration complet ou la valeur
134     * d'une entrée du tableau de configuration.
135 softime 10067 */
136     public function get_conf($params = null) {
137     if ($params === null) {
138     return $this->conf;
139     }
140     if (is_string($params) === true
141     && is_array($this->conf) === true) {
142     //
143     if (array_key_exists($params, $this->conf) === true) {
144     return $this->conf[$params];
145     }
146     }
147     if (is_array($params) === true
148     && is_array($this->conf) === true
149     && count($params) === 2
150     && array_key_exists($params[0], $this->conf) === true
151     && is_array($this->conf[$params[0]]) === true
152     && array_key_exists($params[1], $this->conf[$params[0]]) === true) {
153     //
154     return $this->conf[$params[0]][$params[1]];
155     }
156     return null;
157     }
158    
159     /**
160 softime 10079 * Appelle la méthode de même nom du connecteur parapheur.
161     * Permet de transmettre un document à signer.
162     *
163 softime 10808 * @param array $data Liste des paramètres (dépend du connecteur).
164     * @param string $file_content Contenu du document à signer.
165     * @param array $dossier_metadata Métadonnées du dossier d'instruction.
166     * @param array $optional_data Paramètres spécifique au connecteur.
167     * @return array Tableau de résultat retourné par le
168 softime 10079 * connecteur parapheur, sinon retourne une exception.
169 softime 10067 */
170 softime 10808 public function send_for_signature(array $data, string $file_content, array $dossier_metadata, array $optional_data = null) {
171 softime 10067 //
172     if (is_array($data) === false
173     || empty($data) === true) {
174     //
175 softime 10074 throw new electronicsignature_parameter_exception();
176 softime 10067 }
177 softime 10808
178     $missed_data_keys = array();
179     foreach (self::DATA_KEYS as $data_key) {
180     // Construire une liste des clés manquantes
181     if (! isset($data[$data_key])) {
182     $missed_data_keys[] = $data_key;
183     }
184     }
185     if (! empty($missed_data_keys)) {
186     throw new electronicsignature_connector_exception(
187     __("Certains paramètres nécessaires à l'envoi en signature sont manquantes : ").implode(', ', $missed_data_keys)
188     );
189     }
190    
191     $missed_metadata_keys = array();
192     foreach (self::DOSSIER_METADATA as $data_key) {
193     // Construire une liste des clés manquantes
194     if (! isset($data[$data_key])) {
195     $missed_metadata_keys[] = $data_key;
196     }
197     }
198     if (! empty($missed_data_keys)) {
199     throw new electronicsignature_connector_exception(
200     __("Certaines métadonnées nécessaires à l'envoi en signature sont manquantes : ").implode(', ', $missed_data_keys)
201     );
202     }
203    
204 softime 10067 if (empty($file_content) === true) {
205     //
206 softime 10808 throw new electronicsignature_parameter_exception(__("Contenu du fichier absent."));
207 softime 10067 }
208    
209     //
210     $es = $this->electronicsignature;
211     if (is_null($es) === true) {
212     return false;
213     }
214     //
215 softime 10808 return $es->send_for_signature($data, $file_content, $dossier_metadata, $optional_data);
216 softime 10067 }
217    
218     /**
219 softime 10079 * Appelle la méthode de même nom du connecteur parapheur.
220     * Permet de récupérer le statut d'un parapheur.
221     *
222     * @param array $data Liste des paramètres (dépend du connecteur).
223     * @return array Tableau de résultat retourné par le
224     * connecteur parapheur, sinon retourne une exception.
225 softime 10067 */
226     public function get_signature_status(array $data) {
227     //
228     if (is_array($data) === false
229     || empty($data) === true) {
230     //
231     throw new electronicsignature_parameter_exception();
232     }
233    
234     //
235     $es = $this->electronicsignature;
236     if (is_null($es) === true) {
237     return false;
238     }
239     //
240     return $es->get_signature_status($data);
241     }
242    
243     /**
244 softime 10079 * Appelle la méthode de même nom du connecteur parapheur.
245     * Permet de récupérer le document signé.
246     *
247     * @param array $data Liste des paramètres (dépend du connecteur).
248     * @return array Tableau de résultat retourné par le
249     * connecteur parapheur, sinon retourne une exception.
250 softime 10067 */
251     public function get_signed_document(array $data) {
252     //
253     if (is_array($data) === false
254     || empty($data) === true) {
255     //
256     throw new electronicsignature_parameter_exception();
257     }
258    
259     //
260     $es = $this->electronicsignature;
261     if (is_null($es) === true) {
262     return false;
263     }
264     //
265     return $es->get_signed_document($data);
266     }
267    
268     }
269    
270     /**
271     * Classe parente de tous les connecteurs parapheur
272     */
273     class electronicsignature_base {
274    
275 softime 10074 /**
276 softime 10079 * Configuration du connecteur parapheur.
277     * @var array
278 softime 10074 */
279 softime 10070 var $conf = null;
280    
281 softime 10074 /**
282 softime 10079 * Instancie le connecteur parapheur selon la configuration.
283     *
284     * @param array $conf Configuration du connecteur.
285 softime 10074 */
286     public function __construct(array $conf) {
287 softime 10070 $this->conf = $conf;
288     }
289    
290 softime 10074 /**
291 softime 10079 * Accesseur pour récupérer la configuration complète du connecteur parapheur
292     * ou une partie de celle-ci.
293     *
294     * @param string $params Attribut de la configuration.
295     * @return mixed Le tableau de configuration complet ou la valeur
296     * d'une entrée du tableau de configuration.
297 softime 10074 */
298 softime 10070 protected function get_conf($params = null) {
299     if ($params === null) {
300     return $this->conf;
301     }
302     if (is_string($params) === true
303     && is_array($this->conf) === true) {
304     //
305     if (array_key_exists($params, $this->conf) === true) {
306     return $this->conf[$params];
307     }
308     }
309     if (is_array($params) === true
310     && is_array($this->conf) === true
311     && count($params) === 2
312     && array_key_exists($params[0], $this->conf) === true
313     && is_array($this->conf[$params[0]]) === true
314     && array_key_exists($params[1], $this->conf[$params[0]]) === true) {
315     //
316     return $this->conf[$params[0]][$params[1]];
317     }
318     return null;
319     }
320    
321 softime 10074 /**
322 softime 10079 * Doit être implémentée par des classe dérivées.
323     * Permet de transmettre un document à signer.
324     *
325 softime 10808 * @param array $data Liste des paramètres (dépend du connecteur).
326     * @param string $file_content Contenu du document à signer.
327     * @param array $dossier_metadata Métadonnées du dossier d'instruction.
328     * @param array $optional_data Paramètres spécifique au connecteur.
329     * @return array Tableau de résultat retourné par le
330 softime 10079 * connecteur parapheur, sinon retourne une exception.
331 softime 10074 */
332 softime 10808 protected function send_for_signature(array $data, string $file_content, array $dossier_metadata, array $optional_data = null) {
333 softime 10067 //
334     throw new electronicsignature_connector_method_not_implemented_exception();
335     }
336    
337 softime 10074 /**
338 softime 10079 * Doit être implémentée par des classe dérivées.
339     * Permet de récupérer le statut d'un parapheur.
340     *
341     * @param array $data Liste des paramètres (dépend du connecteur).
342     * @return array Tableau de résultat retourné par le
343     * connecteur parapheur, sinon retourne une exception.
344 softime 10074 */
345 softime 10067 protected function get_signature_status(array $data) {
346     //
347     throw new electronicsignature_connector_method_not_implemented_exception();
348     }
349    
350 softime 10074 /**
351 softime 10079 * Doit être implémentée par des classe dérivées.
352     * Permet de récupérer le document signé.
353     *
354     * @param array $data Liste des paramètres (dépend du connecteur).
355     * @return array Tableau de résultat retourné par le
356     * connecteur parapheur, sinon retourne une exception.
357 softime 10074 */
358 softime 10067 protected function get_signed_document(array $data) {
359     //
360     throw new electronicsignature_connector_method_not_implemented_exception();
361     }
362    
363     }
364    
365     /**
366     * Classe gérant les erreurs
367     */
368     class electronicsignature_exception extends Exception {
369    
370 softime 10074 public function __construct($message = "", $code = 0, Exception $previous = null) {
371 softime 10067 parent::__construct($message, $code, $previous);
372 softime 10074 logger::instance()->writeErrorLogToFile();
373 softime 10079 logger::instance()->cleanLog();
374 softime 10067 }
375 softime 10074
376 softime 10079 protected function add_to_log($code, $message) {
377 softime 10074 logger::instance()->log(sprintf(
378     "Electronic Signature Connector - Error code : %s -> %s",
379     $code,
380     $message
381     ));
382     }
383 softime 10067 }
384    
385     class electronicsignature_configuration_exception extends electronicsignature_exception {
386    
387 softime 10074 public function __construct($message = null) {
388 softime 10067 $ret = trim(sprintf(
389     '%s %s %s',
390     __('Erreur de configuration du parapheur.'),
391     __('Veuillez contacter votre administrateur.'),
392     $message
393     ));
394 softime 10074 parent::__construct($ret);
395 softime 10067 }
396     }
397    
398     class electronicsignature_parameter_exception extends electronicsignature_exception {
399    
400 softime 10074 public function __construct($message = null) {
401 softime 10067 $ret = trim(sprintf(
402     '%s %s %s',
403     __("Les paramètres d'appel au parapheur ne sont pas valides."),
404     __('Veuillez contacter votre administrateur.'),
405     $message
406     ));
407 softime 10074 parent::__construct($ret);
408 softime 10067 }
409     }
410    
411     class electronicsignature_connector_exception extends electronicsignature_exception {
412    
413 softime 10074 public function __construct($message = null, $code = null) {
414     // Log de l'erreur technique
415 softime 10079 $this->add_to_log($code, $message);
416 softime 10074 // Log utilisateur
417 softime 10067 $ret = trim(sprintf(
418 softime 10116 '%s %s %s',
419 softime 10067 __('Erreur du parapheur.'),
420 softime 10116 __('Veuillez contacter votre administrateur.'),
421     $message
422 softime 10067 ));
423 softime 10074 parent::__construct($ret);
424 softime 10067 }
425     }
426    
427     class electronicsignature_connector_method_not_implemented_exception extends electronicsignature_exception {
428    
429 softime 10074 public function __construct($message = null) {
430 softime 10067 $ret = trim(sprintf(
431     '%s %s %s',
432     __("La méthode n'est pas implémentée dans le connecteur."),
433     __('Veuillez contacter votre administrateur.'),
434     $message
435     ));
436 softime 10074 parent::__construct($ret);
437 softime 10067 }
438     }

Properties

Name Value
svn:executable *

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26