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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10116 - (hide annotations)
Wed May 19 17:26:37 2021 UTC (3 years, 8 months ago) by softime
Original Path: branches/4.14.0-develop_connecteur_parapheur/obj/electronicsignature.class.php
File size: 12808 byte(s)
* Correction utilisation méthode send_for_signature du connecteur dans instruction
* Modification handle_error dans isntruction pour l'utilisation du parapheur
* Ajout méthode has_connector_parapheur dans instruction
* Ajout du message retourné par le connecteur à l'affichage de l'erreur pour l'utilisateur
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 10079 * Instancie le connecteur parapheur depuis la collectivité transmise et la
30     * configuration.
31     *
32     * Liste des paramètres :
33     * - *conf_name* nom de la configuration à récupérer, par défaut 'electronicsignature-default'
34     * - *collectivite_idx* identifiant de la collectivité
35     * - collectivite_multi_idx identifiant de la collectivité de niveau 2
36     *
37     * @param array $params Liste des paramètres.
38 softime 10067 */
39     public function __construct(array $params) {
40     //
41     if (file_exists("../dyn/electronicsignature.inc.php") === false) {
42 softime 10074 throw new electronicsignature_configuration_exception(__("Aucun fichier de configuration pour la signature électronique."));
43 softime 10067 }
44     include("../dyn/electronicsignature.inc.php");
45     if (isset($conf) === false) {
46 softime 10074 throw new electronicsignature_configuration_exception(__("Aucune configuration pour la signature électronique."));
47 softime 10067 }
48     $this->conf = $conf;
49     //
50     if (isset($params['conf_name']) === true) {
51     $this->conf = $this->conf[$params['conf_name']];
52     } else {
53     $this->conf = $this->conf['electronicsignature-default'];
54     }
55     //
56     if (isset($params['collectivite_idx']) === true
57     && $this->get_conf('unexpected_collectivite') !== null
58     && in_array($params['collectivite_idx'], $this->get_conf('unexpected_collectivite')) === true) {
59     //
60 softime 10074 throw new electronicsignature_configuration_exception(__("Aucun parapheur configuré pour la collectivité."));
61 softime 10067 }
62     //
63     if (isset($params['collectivite_idx']) === true
64     && $this->get_conf($params['collectivite_idx']) !== null) {
65     //
66     $this->conf = $this->conf[$params['collectivite_idx']];
67     }
68     elseif (isset($params['collectivite_multi_idx']) === true
69     && $this->get_conf($params['collectivite_multi_idx']) !== null) {
70     //
71     $this->conf = $this->conf[$params['collectivite_multi_idx']];
72     } else {
73 softime 10074 throw new electronicsignature_configuration_exception(__("Aucun parapheur configuré pour la collectivité."));
74 softime 10067 }
75    
76     //
77     if ($this->get_conf('path') === null) {
78     throw new electronicsignature_configuration_exception(__("Le chemin vers le connecteur du parapheur n'est pas configuré."));
79     }
80     //
81     if ($this->get_conf('connector') === null) {
82     throw new electronicsignature_configuration_exception(__("Le nom du connecteur du parapheur n'est pas configuré."));
83     }
84     //
85     $connector = sprintf(
86     '%s_%s',
87     get_class($this),
88     $this->get_conf('connector')
89     );
90     require_once $this->conf['path'].$connector.'.class.php';
91     $this->electronicsignature = new $connector($this->get_conf());
92     }
93    
94     /**
95 softime 10079 * Détruit la ressource instanciée dans le constructeur.
96 softime 10067 */
97     public function __destruct() {
98     //
99     if (is_null($this->electronicsignature) === false) {
100     unset($this->electronicsignature);
101     }
102     }
103    
104     /**
105 softime 10079 * Accesseur pour récupérer la configuration complète du connecteur parapheur
106     * ou une partie de celle-ci.
107     *
108     * @param string $params Attribut de la configuration.
109     * @return mixed Le tableau de configuration complet ou la valeur
110     * d'une entrée du tableau de configuration.
111 softime 10067 */
112     public function get_conf($params = null) {
113     if ($params === null) {
114     return $this->conf;
115     }
116     if (is_string($params) === true
117     && is_array($this->conf) === true) {
118     //
119     if (array_key_exists($params, $this->conf) === true) {
120     return $this->conf[$params];
121     }
122     }
123     if (is_array($params) === true
124     && is_array($this->conf) === true
125     && count($params) === 2
126     && array_key_exists($params[0], $this->conf) === true
127     && is_array($this->conf[$params[0]]) === true
128     && array_key_exists($params[1], $this->conf[$params[0]]) === true) {
129     //
130     return $this->conf[$params[0]][$params[1]];
131     }
132     return null;
133     }
134    
135     /**
136 softime 10079 * Appelle la méthode de même nom du connecteur parapheur.
137     * Permet de transmettre un document à signer.
138     *
139     * @param array $data Liste des paramètres (dépend du connecteur).
140     * @param string $file_content Contenu du document à signer.
141     * @return array Tableau de résultat retourné par le
142     * connecteur parapheur, sinon retourne une exception.
143 softime 10067 */
144     public function send_for_signature(array $data, string $file_content) {
145     //
146     if (is_array($data) === false
147     || empty($data) === true) {
148     //
149 softime 10074 throw new electronicsignature_parameter_exception();
150 softime 10067 }
151     if (empty($file_content) === true) {
152     //
153 softime 10074 throw new electronicsignature_parameter_exception();
154 softime 10067 }
155    
156     //
157     $es = $this->electronicsignature;
158     if (is_null($es) === true) {
159     return false;
160     }
161     //
162     return $es->send_for_signature($data, $file_content);
163     }
164    
165     /**
166 softime 10079 * Appelle la méthode de même nom du connecteur parapheur.
167     * Permet de récupérer le statut d'un parapheur.
168     *
169     * @param array $data Liste des paramètres (dépend du connecteur).
170     * @return array Tableau de résultat retourné par le
171     * connecteur parapheur, sinon retourne une exception.
172 softime 10067 */
173     public function get_signature_status(array $data) {
174     //
175     if (is_array($data) === false
176     || empty($data) === true) {
177     //
178     throw new electronicsignature_parameter_exception();
179     }
180    
181     //
182     $es = $this->electronicsignature;
183     if (is_null($es) === true) {
184     return false;
185     }
186     //
187     return $es->get_signature_status($data);
188     }
189    
190     /**
191 softime 10079 * Appelle la méthode de même nom du connecteur parapheur.
192     * Permet de récupérer le document signé.
193     *
194     * @param array $data Liste des paramètres (dépend du connecteur).
195     * @return array Tableau de résultat retourné par le
196     * connecteur parapheur, sinon retourne une exception.
197 softime 10067 */
198     public function get_signed_document(array $data) {
199     //
200     if (is_array($data) === false
201     || empty($data) === true) {
202     //
203     throw new electronicsignature_parameter_exception();
204     }
205    
206     //
207     $es = $this->electronicsignature;
208     if (is_null($es) === true) {
209     return false;
210     }
211     //
212     return $es->get_signed_document($data);
213     }
214    
215     }
216    
217     /**
218     * Classe parente de tous les connecteurs parapheur
219     */
220     class electronicsignature_base {
221    
222 softime 10074 /**
223 softime 10079 * Configuration du connecteur parapheur.
224     * @var array
225 softime 10074 */
226 softime 10070 var $conf = null;
227    
228 softime 10074 /**
229 softime 10079 * Instancie le connecteur parapheur selon la configuration.
230     *
231     * @param array $conf Configuration du connecteur.
232 softime 10074 */
233     public function __construct(array $conf) {
234 softime 10070 $this->conf = $conf;
235     }
236    
237 softime 10074 /**
238 softime 10079 * Accesseur pour récupérer la configuration complète du connecteur parapheur
239     * ou une partie de celle-ci.
240     *
241     * @param string $params Attribut de la configuration.
242     * @return mixed Le tableau de configuration complet ou la valeur
243     * d'une entrée du tableau de configuration.
244 softime 10074 */
245 softime 10070 protected function get_conf($params = null) {
246     if ($params === null) {
247     return $this->conf;
248     }
249     if (is_string($params) === true
250     && is_array($this->conf) === true) {
251     //
252     if (array_key_exists($params, $this->conf) === true) {
253     return $this->conf[$params];
254     }
255     }
256     if (is_array($params) === true
257     && is_array($this->conf) === true
258     && count($params) === 2
259     && array_key_exists($params[0], $this->conf) === true
260     && is_array($this->conf[$params[0]]) === true
261     && array_key_exists($params[1], $this->conf[$params[0]]) === true) {
262     //
263     return $this->conf[$params[0]][$params[1]];
264     }
265     return null;
266     }
267    
268 softime 10074 /**
269 softime 10079 * Doit être implémentée par des classe dérivées.
270     * Permet de transmettre un document à signer.
271     *
272     * @param array $data Liste des paramètres (dépend du connecteur).
273     * @param string $file_content Contenu du document à signer.
274     * @return array Tableau de résultat retourné par le
275     * connecteur parapheur, sinon retourne une exception.
276 softime 10074 */
277 softime 10067 protected function send_for_signature(array $data, string $file_content) {
278     //
279     throw new electronicsignature_connector_method_not_implemented_exception();
280     }
281    
282 softime 10074 /**
283 softime 10079 * Doit être implémentée par des classe dérivées.
284     * Permet de récupérer le statut d'un parapheur.
285     *
286     * @param array $data Liste des paramètres (dépend du connecteur).
287     * @return array Tableau de résultat retourné par le
288     * connecteur parapheur, sinon retourne une exception.
289 softime 10074 */
290 softime 10067 protected function get_signature_status(array $data) {
291     //
292     throw new electronicsignature_connector_method_not_implemented_exception();
293     }
294    
295 softime 10074 /**
296 softime 10079 * Doit être implémentée par des classe dérivées.
297     * Permet de récupérer le document signé.
298     *
299     * @param array $data Liste des paramètres (dépend du connecteur).
300     * @return array Tableau de résultat retourné par le
301     * connecteur parapheur, sinon retourne une exception.
302 softime 10074 */
303 softime 10067 protected function get_signed_document(array $data) {
304     //
305     throw new electronicsignature_connector_method_not_implemented_exception();
306     }
307    
308     }
309    
310     /**
311     * Classe gérant les erreurs
312     */
313     class electronicsignature_exception extends Exception {
314    
315 softime 10074 public function __construct($message = "", $code = 0, Exception $previous = null) {
316 softime 10067 parent::__construct($message, $code, $previous);
317 softime 10074 logger::instance()->writeErrorLogToFile();
318 softime 10079 logger::instance()->cleanLog();
319 softime 10067 }
320 softime 10074
321 softime 10079 protected function add_to_log($code, $message) {
322 softime 10074 logger::instance()->log(sprintf(
323     "Electronic Signature Connector - Error code : %s -> %s",
324     $code,
325     $message
326     ));
327     }
328 softime 10067 }
329    
330     class electronicsignature_configuration_exception extends electronicsignature_exception {
331    
332 softime 10074 public function __construct($message = null) {
333 softime 10067 $ret = trim(sprintf(
334     '%s %s %s',
335     __('Erreur de configuration du parapheur.'),
336     __('Veuillez contacter votre administrateur.'),
337     $message
338     ));
339 softime 10074 parent::__construct($ret);
340 softime 10067 }
341     }
342    
343     class electronicsignature_parameter_exception extends electronicsignature_exception {
344    
345 softime 10074 public function __construct($message = null) {
346 softime 10067 $ret = trim(sprintf(
347     '%s %s %s',
348     __("Les paramètres d'appel au parapheur ne sont pas valides."),
349     __('Veuillez contacter votre administrateur.'),
350     $message
351     ));
352 softime 10074 parent::__construct($ret);
353 softime 10067 }
354     }
355    
356     class electronicsignature_connector_exception extends electronicsignature_exception {
357    
358 softime 10074 public function __construct($message = null, $code = null) {
359     // Log de l'erreur technique
360 softime 10079 $this->add_to_log($code, $message);
361 softime 10074 // Log utilisateur
362 softime 10067 $ret = trim(sprintf(
363 softime 10116 '%s %s %s',
364 softime 10067 __('Erreur du parapheur.'),
365 softime 10116 __('Veuillez contacter votre administrateur.'),
366     $message
367 softime 10067 ));
368 softime 10074 parent::__construct($ret);
369 softime 10067 }
370     }
371    
372     class electronicsignature_connector_method_not_implemented_exception extends electronicsignature_exception {
373    
374 softime 10074 public function __construct($message = null) {
375 softime 10067 $ret = trim(sprintf(
376     '%s %s %s',
377     __("La méthode n'est pas implémentée dans le connecteur."),
378     __('Veuillez contacter votre administrateur.'),
379     $message
380     ));
381 softime 10074 parent::__construct($ret);
382 softime 10067 }
383     }

Properties

Name Value
svn:executable *

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26