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

Diff of /trunk/obj/task.class.php

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 9751 by gmalvolti, Thu Dec 10 15:10:41 2020 UTC revision 9785 by mbideau, Tue Dec 22 09:08:49 2020 UTC
# Line 1  Line 1 
1  <?php  <?php
2  //$Id$  //$Id$
3  //gen openMairie le 14/04/2020 14:11  //gen openMairie le 14/04/2020 14:11
4    
5  require_once "../gen/obj/task.class.php";  require_once "../gen/obj/task.class.php";
# Line 21  class task extends task_gen { Line 21  class task extends task_gen {
21          );          );
22          $this->class_actions[997] = array(          $this->class_actions[997] = array(
23              "identifier" => "json_data",              "identifier" => "json_data",
24              "view" => "view_update_task",              "view" => "post_update_task",
25              "permission_suffix" => "modifier",              "permission_suffix" => "modifier",
26          );          );
27          $this->class_actions[996] = array(          $this->class_actions[996] = array(
28              "identifier" => "json_data",              "identifier" => "json_data",
29              "view" => "view_add_task",              "view" => "post_add_task",
30              "permission_suffix" => "ajouter",              "permission_suffix" => "ajouter",
31          );          );
32      }      }
# Line 112  class task extends task_gen { Line 112  class task extends task_gen {
112                      "obj" => "dossier",                      "obj" => "dossier",
113                      "idx" => $form->val['dossier'],                      "idx" => $form->val['dossier'],
114                  ));                  ));
115                    
116                  if($form->val['type'] == "creation_DA"){                  if($form->val['type'] == "creation_DA"){
117                      $obj_link = 'dossier_autorisation';                      $obj_link = 'dossier_autorisation';
118                  } else {                  } else {
# Line 159  class task extends task_gen { Line 159  class task extends task_gen {
159      }      }
160    
161      public function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {      public function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
162          parent::verifier($val, $dnu1, $dnu2);          $ret = parent::verifier($val, $dnu1, $dnu2);
163          //  
164          if (array_key_exists('timestamp_log', $this->valF) === true          if (array_key_exists('timestamp_log', $this->valF) === true
165              && is_array(json_decode($this->valF['timestamp_log'], true)) === false) {              && is_array(json_decode($this->valF['timestamp_log'], true)) === false) {
166              //              //
# Line 170  class task extends task_gen { Line 170  class task extends task_gen {
170                  sprintf('<span class="bold">%s</span>', $this->getLibFromField('timestamp_log'))                  sprintf('<span class="bold">%s</span>', $this->getLibFromField('timestamp_log'))
171              ));              ));
172          }          }
173    
174            // une tâche entrante doit avoir un type et une payload non-vide
175            if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {
176                if (isset($this->valF['type']) === false) {
177                    $this->correct = false;
178                    $this->addToMessage(sprintf(
179                        __("Le champ %s est obligatoire pour une tâche entrante."),
180                        sprintf('<span class="bold">%s</span>', $this->getLibFromField('type'))
181                    ));
182                    $this->addToLog(__METHOD__.'(): erreur: '.$this->msg, DEBUG_MODE);
183                }
184                if (isset($this->valF['json_payload']) === false) {
185                    $this->correct = false;
186                    $this->addToMessage(sprintf(
187                        __("Le champ %s est obligatoire pour une tâche entrante."),
188                        sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'))
189                    ));
190                    $this->addToLog(__METHOD__.'(): erreur: '.$this->msg, DEBUG_MODE);
191                }
192            }
193    
194            // le JSON doit être décodable
195            if (isset($this->valF['json_payload']) && ! empty($this->valF['json_payload']) && (
196                    is_array(json_decode($this->valF['json_payload'], true)) === false
197                    || json_last_error() !== JSON_ERROR_NONE)) {
198                $this->correct = false;
199                $this->addToMessage(sprintf(
200                    __("Le champ %s doit être dans un format JSON valide (erreur: %s)."),
201                    sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'),
202                    json_last_error() !== JSON_ERROR_NONE ? json_last_error_msg() : __('invalide'))
203                ));
204                $this->addToLog(__METHOD__.'(): erreur JSON: '.$this->msg, DEBUG_MODE);
205            }
206    
207            // une tâche entrante doit avoir une payload avec les clés requises
208            elseif (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {
209    
210                // décode la payload JSON
211                $json_payload = json_decode($this->valF['json_payload'], true);
212    
213                // défini une liste de chemin de clés requises
214                $paths = array(
215                    'dossier/dossier'
216                );
217    
218                // tâche de type création de DI/DA
219                if (isset($this->valF['type']) !== false && $this->valF['type'] == 'create_DI_for_consultation') {
220    
221                    $paths = array_merge($paths, array(
222                        'dossier/dossier_autorisation_type_detaille_code',
223                        'dossier/date_demande',
224                        'dossier/depot_electronique',
225                    ));
226    
227                    // si l'option commune est activée (mode MC)
228                    if ($this->f->is_option_dossier_commune_enabled()) {
229                        $paths[] = 'dossier/insee';
230                    }
231    
232                    // présence d'un moyen d'identifier la collectivité/le service
233                    if (! isset($json_payload['dossier']['acteur']) &&
234                            ! isset($json_payload['dossier']['om_collectivite'])) {
235                        $this->correct = false;
236                        $this->addToMessage(sprintf(
237                            __("L'une des clés %s ou %s est obligatoire dans le contenu du champ %s pour une tâche entrante."),
238                            sprintf('<span class="bold">%s</span>', 'dossier/acteur'),
239                            sprintf('<span class="bold">%s</span>', 'dossier/om_collectivite'),
240                            sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'))
241                        ));
242                        $this->addToLog(__METHOD__.'(): erreur: '.$this->msg, DEBUG_MODE);
243                    }
244                }
245    
246                // pas d'erreur déjà trouvée
247                if($this->correct) {
248    
249                    // pour chaque chemin
250                    foreach($paths as $path) {
251    
252                        // décompose le chemin
253                        $tokens = explode('/', $path);
254                        $cur_depth = $json_payload;
255    
256                        // descend au et à mesure dans l'arborescence du chemin
257                        foreach($tokens as $token) {
258    
259                            // en vérifiant que chaque élément du chemin est défini et non-nul
260                            if (isset($cur_depth[$token]) === false) {
261    
262                                // sinon on produit une erreur
263                                $this->correct = false;
264                                $this->addToMessage(sprintf(
265                                    __("La clé %s est obligatoire dans le contenu du champ %s pour une tâche entrante."),
266                                    sprintf('<span class="bold">%s</span>', $path),
267                                    sprintf('<span class="bold">%s</span>', $this->getLibFromField('json_payload'))
268                                ));
269                                $this->addToLog(__METHOD__.'(): erreur: '.$this->msg, DEBUG_MODE);
270                                break 2;
271                            }
272                            $cur_depth = $cur_depth[$token];
273                        }
274                    }
275                }
276            }
277    
278            return $ret && $this->correct;
279      }      }
280    
281      protected function task_exists(string $type, string $object_id) {      protected function task_exists(string $type, string $object_id) {
# Line 193  class task extends task_gen { Line 299  class task extends task_gen {
299      }      }
300    
301      /**      /**
302         * TRIGGER - triggerajouter.
303         *
304         * @param string $id
305         * @param null &$dnu1 @deprecated  Ne pas utiliser.
306         * @param array $val Tableau des valeurs brutes.
307         * @param null $dnu2 @deprecated  Ne pas utiliser.
308         *
309         * @return boolean
310         */
311        function triggerajouter($id, &$dnu1 = null, $val = array(), $dnu2 = null) {
312    
313            // tâche entrante
314            if (isset($this->valF['stream']) === false || $this->valF['stream'] == 'input') {
315    
316                // décode la paylod JSON pour extraire les données métiers à ajouter
317                // en tant que métadonnées de la tâche
318                $json_payload = json_decode($this->valF['json_payload'], true);
319                $this->valF["dossier"] = $json_payload['dossier']['dossier'];
320            }
321        }
322    
323        /**
324       * TREATMENT - add_task       * TREATMENT - add_task
325       * Ajoute un enregistrement.       * Ajoute un enregistrement.
326       *       *
# Line 207  class task extends task_gen { Line 335  class task extends task_gen {
335    
336          // Si la tâche est de type ajout_piece et de stream input alors on ajoute le fichier          // Si la tâche est de type ajout_piece et de stream input alors on ajoute le fichier
337          // et on ajoute l'uid dans le champ json_payload avant l'ajout de la tâche          // et on ajoute l'uid dans le champ json_payload avant l'ajout de la tâche
338          if (isset($params['val']['type'])          if (isset($params['val']['type'])
339              && $params['val']['type'] == "ajout_piece"              && $params['val']['type'] == "ajout_piece"
340              && isset($params['val']['stream'])              && isset($params['val']['stream'])
341              && $params['val']['stream'] == "input" ) {              && $params['val']['stream'] == "input" ) {
# Line 240  class task extends task_gen { Line 368  class task extends task_gen {
368              'type' => $params['val']['type'],              'type' => $params['val']['type'],
369              'timestamp_log' => $timestamp_log,              'timestamp_log' => $timestamp_log,
370              'state' => isset($params['val']['state']) === true ? $params['val']['state'] : 'new',              'state' => isset($params['val']['state']) === true ? $params['val']['state'] : 'new',
371              'object_id' => $params['val']['object_id'],              'object_id' => isset($params['val']['object_id']) ? $params['val']['object_id'] : '',
372              'dossier' => $params['val']['dossier'],              'dossier' => isset($params['val']['dossier']) ? $params['val']['dossier'] : '',
373              'stream' => isset($params['val']['stream']) === true ? $params['val']['stream'] : 'output',              'stream' => isset($params['val']['stream']) === true ? $params['val']['stream'] : 'output',
374              'json_payload' => isset($params['val']['json_payload']) === true ? $params['val']['json_payload'] : '{}',              'json_payload' => isset($params['val']['json_payload']) === true ? $params['val']['json_payload'] : '{}',
375          );          );
376          if($valF["stream"] != "input"){  
377            // tâche sortante
378            if($valF["stream"] == "output"){
379    
380                // TODO expliquer ce code
381              $task_exists = $this->task_exists($valF['type'], $valF['object_id']);              $task_exists = $this->task_exists($valF['type'], $valF['object_id']);
382              if ($valF['type'] === 'modification_DI' && $task_exists === false) {              if ($valF['type'] === 'modification_DI' && $task_exists === false) {
383                  $task_exists = $this->task_exists('creation_DI', $valF['object_id']);                  $task_exists = $this->task_exists('creation_DI', $valF['object_id']);
# Line 267  class task extends task_gen { Line 399  class task extends task_gen {
399                  return $inst_task->update_task($update_params);                  return $inst_task->update_task($update_params);
400              }              }
401          }          }
402    
403          $add = $this->ajouter($valF);          $add = $this->ajouter($valF);
404            $this->addToLog(__METHOD__."(): retour de l'ajout de tâche: ".var_export($add, true), VERBOSE_MODE);
405          if ($add === false) {          if ($add === false) {
406              $this->addToLog($this->msg, DEBUG_MODE);              $this->addToLog(__METHOD__."(): ".$this->msg, DEBUG_MODE);
407              return $this->end_treatment(__METHOD__, false);              return $this->end_treatment(__METHOD__, false);
408          }          }
409          return $this->end_treatment(__METHOD__, true);          return $this->end_treatment(__METHOD__, true);
# Line 316  class task extends task_gen { Line 450  class task extends task_gen {
450      /**      /**
451       * Récupère le journal d'horodatage dans le champ timestamp_log de       * Récupère le journal d'horodatage dans le champ timestamp_log de
452       * l'enregistrement instancié.       * l'enregistrement instancié.
453       *       *
454       * @param  array  $params Tableau des paramètres       * @param  array  $params Tableau des paramètres
455       * @return array sinon false en cas d'erreur       * @return array sinon false en cas d'erreur
456       */       */
# Line 774  class task extends task_gen { Line 908  class task extends task_gen {
908          }          }
909      }      }
910    
911      function view_update_task() {      function post_update_task() {
912          // Mise à jour des valeurs          // Mise à jour des valeurs
913          //          //
914          $params = array(          $params = array(
# Line 821  class task extends task_gen { Line 955  class task extends task_gen {
955          $this->f->displayMessage($message_class, $message);          $this->f->displayMessage($message_class, $message);
956      }      }
957    
958      function view_add_task() {      function post_add_task() {
959          $params = array();          // TODO Tester de remplacer la ligne de json_payload par un $_POST
960          $params['val']['stream'] = 'input';          $result = $this->add_task(array(
961          $params['val']['json_payload'] = html_entity_decode($this->f->get_submitted_post_value('json_payload'));              'val' => array(
962          $json_payload = json_decode($params['val']['json_payload'], true);                  'stream' => 'input',
963          $params['val']['type'] = $json_payload['task']['type'];                  'json_payload' => html_entity_decode($this->f->get_submitted_post_value('json_payload')),
964          $params['val']['dossier'] = $json_payload['task']['dossier'];                  'type' => $this->f->get_submitted_post_value('type'),
965          $params['val']['object_id'] = "";              )
966          $result = $this->add_task($params);          ));
967          $message = $this->msg;          $message = $this->msg;
968          $message_class = "valid";          $message_class = "valid";
969          if ($result === false){          if ($result === false){
# Line 844  class task extends task_gen { Line 978  class task extends task_gen {
978          $this->f->displayMessage($message_class, $message);          $this->f->displayMessage($message_class, $message);
979      }      }
980    
981      protected function get_lien_objet_by_type($type) {      function get_lien_objet_by_type($type) {
982          //          //
983          $objet = '';          $objet = '';
984          if ($type === 'creation_DA') {          if ($type === 'creation_DA') {
985              $objet = 'dossier_autorisation';              $objet = 'dossier_autorisation';
986          }          }
987          if ($type === 'creation_DI'          if ($type === 'creation_DI'
988                || $type === 'create_DI_for_consultation'
989              || $type === 'depot_DI'              || $type === 'depot_DI'
990              || $type === 'modification_DI'              || $type === 'modification_DI'
991              || $type === 'qualification_DI'              || $type === 'qualification_DI'

Legend:
Removed from v.9751  
changed lines
  Added in v.9785

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26