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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9245 - (hide annotations)
Fri Apr 3 09:21:03 2020 UTC (4 years, 10 months ago) by softime
File size: 20439 byte(s)
* Merge de la branche d'intégration 4.13.0-develop dans le trunk

1 softime 4927 <?php
2 softime 7996 /**
3     * DBFORM - 'lien_dossier_dossier' - Surcharge gen.
4     *
5     * @package openads
6     * @version SVN : $Id$
7     */
8 softime 4927
9     require_once "../gen/obj/lien_dossier_dossier.class.php";
10    
11     class lien_dossier_dossier extends lien_dossier_dossier_gen {
12    
13 jymadier 4940 /**
14     * Définition des actions disponibles sur la classe.
15     *
16     * @return void
17     */
18     function init_class_actions() {
19     //
20     parent::init_class_actions();
21    
22 softime 7366 // ACTION - 000 - ajouter
23 jymadier 6404 // Désactivation de l'action ajouter
24     $this->class_actions[0] = null;
25    
26 jymadier 4945 // ACTION - 001 - modifier
27     // Désactivation de l'action modifier
28     $this->class_actions[1] = null;
29    
30     // ACTION - 002 - supprimer
31     // Désactivation de l'action supprimer
32     $this->class_actions[2] = null;
33    
34     // ACTION - 003 - consulter
35     // Désactivation de l'action consulter
36     $this->class_actions[3] = null;
37    
38 jymadier 4940 // ACTION - 4 - view_tab
39     // Interface spécifique des l'onglet des dossiers liés
40     $this->class_actions[4] = array(
41     "identifier" => "view_tab",
42     "view" => "view_tab",
43     "permission_suffix" => "tab",
44 jymadier 6404 "condition" => "can_user_access_dossier_all_context",
45 jymadier 4940 );
46 jymadier 5017
47     // ACTION - 5 - view_add
48     // Interface spécifique des l'onglet des dossiers liés
49     $this->class_actions[5] = array(
50     "identifier" => "view_ajouter_liaison",
51     "method" => "ajouter_liaison",
52 nmeucci 6460 "permission_suffix" => "ajouter",
53 jymadier 5017 "crud" => "create",
54 jymadier 6404 "condition" => "can_user_access_dossier_all_context",
55 jymadier 5017 );
56 jymadier 4940 }
57    
58 nmeucci 6289 /**
59     * CONDITION - is_ajoutable.
60     *
61     * Condition pour pouvoir ajouter
62     *
63     * @return boolean
64     */
65     function is_ajoutable() {
66     // Si bypass
67 softime 7996 if ($this->f->can_bypass($this->get_absolute_class_name(), "ajouter")) {
68 nmeucci 6289 return true;
69     }
70     // Teste si le dossier n'est pas cloturé
71     // et si l'instructeur est de la même division
72     if ($this->is_dossier_instruction_not_closed() === true
73     && $this->is_instructeur_from_division_dossier() === true) {
74     return true;
75     }
76 jymadier 5017
77 nmeucci 6289 return false;
78     }
79    
80 jymadier 4940 /**
81     * VIEW - view_tab
82     *
83     * Cette vue permet d'afficher l'interface spécifique du tableau
84 jymadier 5017 * des dossiers liés.
85 jymadier 4940 *
86     * @return void
87     */
88     function view_tab() {
89    
90     // Vérification de l'accessibilité sur l'élément
91     $this->checkAccessibility();
92    
93 nmeucci 6054 // Si le paramètre 'idxformulaire' n'est pas vide
94     // (idxformulaire est la valeur de la clé primaire du DI)
95 jymadier 4941 if ($this->f->get_submitted_get_value('idxformulaire') !== null and $this->f->get_submitted_get_value('idxformulaire') != '') {
96 nmeucci 4942
97 jymadier 4940 // Initialisation des variables
98 jymadier 4941 $idx = $this->f->get_submitted_get_value('idxformulaire');
99 jymadier 4940 $retourformulaire = ($this->f->get_submitted_get_value('retourformulaire') !== null) ? $this->f->get_submitted_get_value('retourformulaire') : "";
100 jymadier 6449 $obj = ($this->f->get_submitted_get_value('obj') !== null) ? $this->f->get_submitted_get_value('obj') : "";
101    
102 nmeucci 6082 if ($retourformulaire == "") {
103     // Valeur par défaut de $retourformulaire
104     $retourformulaire = 'dossier_instruction';
105     }
106 nmeucci 4942
107 nmeucci 6054 // Vérification de la visibilité du DA
108     $da = $this->get_inst_dossier_instruction($idx);
109    
110 nmeucci 5063 echo "<div id=\"sousform-href\"></div>";
111 jymadier 6449 echo "<div id=\"sousform-" . $obj . "\">";
112 nmeucci 5063 echo "<div class=\"soustab-message\"></div>";
113     echo "<div class=\"soustab-container\">";
114 nmeucci 4942
115 jymadier 4940 // Affichage du tableau des dossiers d'autorisation
116 nmeucci 6054 if ($da->is_dossier_autorisation_visible() === true) {
117 softime 7996 $link_tab_dossier_autorisation = OM_ROUTE_SOUSTAB.'&obj=dossier_autorisation&idxformulaire='.$idx.'&retour=tab&retourformulaire='.$retourformulaire;
118 nmeucci 6054 printf('<div id="sousform-dossier_autorisation"></div>
119     <script type="text/javascript" >
120     ajaxIt(\'dossier_autorisation\', \'%1$s\');
121     </script>
122     ', $link_tab_dossier_autorisation);
123     }
124 nmeucci 4942
125     // Affichage du tableau des dossiers d'instruction
126 softime 7996 $link_tab_dossier_lies = OM_ROUTE_SOUSTAB.'&obj=dossier_lies&idxformulaire='.$idx.'&context=' . $obj . '&retour=tab&retourformulaire='.$retourformulaire;
127 nmeucci 5123 printf('<div id="tab_dossier_lies_href" data-href="%1$s"></div><div id="sousform-dossier_lies"></div>
128 nmeucci 5063 <script type="text/javascript" >
129 nmeucci 5070 ajaxIt(\'dossier_lies\', \'%1$s\');
130 nmeucci 5063 </script>
131 nmeucci 5070 ', $link_tab_dossier_lies);
132 jymadier 4940
133 softime 7067 // Affichage du tableau des dossiers d'instruction retour
134 softime 7996 $link_tab_dossier_lies_retour = OM_ROUTE_SOUSTAB.'&obj=dossier_lies_retour&idxformulaire='.$idx.'&context=' . $obj . '&retour=tab&retourformulaire='.$retourformulaire;
135 softime 7067 printf('<div id="tab_dossier_lies_retour_href" data-href="%1$s"></div><div id="sousform-dossier_lies_retour"></div>
136     <script type="text/javascript" >
137     ajaxIt(\'dossier_lies_retour\', \'%1$s\');
138     </script>
139     ', $link_tab_dossier_lies_retour);
140    
141    
142 nmeucci 4942 // Affichage du tableau des dossiers d'autorisation liés géographiquement
143 softime 7996 $link_tab_dossier_lies_geographiquement = OM_ROUTE_SOUSTAB.'&obj=dossier_lies_geographiquement&idxformulaire='.$idx.'&retour=tab&retourformulaire='.$retourformulaire;
144 nmeucci 5123 printf('<div id="sousform-dossier_lies_geographiquement"></div>
145 nmeucci 5063 <script type="text/javascript" >
146 nmeucci 5070 ajaxIt(\'dossier_lies_geographiquement\', \'%1$s\');
147 nmeucci 5063 </script>
148 nmeucci 5070 ', $link_tab_dossier_lies_geographiquement);
149 nmeucci 4942
150     echo '</div></div>';
151     }
152 jymadier 4940 }
153    
154 jymadier 5017
155     /**
156     * VIEW - ajouter_liaison
157     *
158     * Cette vue permet de traiter les contraintes postées et d'afficher
159     * le résultat de ce traitement en AJAX.
160     *
161     * @return void
162     */
163     function ajouter_liaison($val = array()) {
164 jymadier 6449 $this->checkAccessibility();
165 jymadier 5017 // Begin
166     $this->begin_treatment(__METHOD__);
167     // Mutateur de valF
168     $this->setValF($val);
169     // Mutateur de valF specifique a l'ajout
170     $this->setValFAjout($val);
171     // Verification de la validite des donnees
172     $this->verifier($val, $this->f->db, null);
173     // Verification specifique au MODE 'insert' de la validite des donnees
174     $this->verifierAjout($val, $this->f->db);
175     // Si les verifications precedentes sont correctes, on procede a
176     // l'ajout, sinon on ne fait rien et on affiche un message d'echec
177     if ($this->correct) {
178     // Appel au mutateur pour le calcul de la cle primaire (si la cle
179     // est automatique) specifique au MODE 'insert'
180     $this->setId($this->f->db);
181     // Execution du trigger 'before' specifique au MODE 'insert'
182     // Le premier parametre est vide car en MODE 'insert'
183     // l'enregistrement n'existe pas encore donc il n'a pas
184     // d'identifiant
185     if($this->triggerajouter("", $this->f->db, $val, null) === false) {
186     $this->correct = false;
187     $this->addToLog(__METHOD__."(): ERROR", DEBUG_MODE);
188     // Return
189     return $this->end_treatment(__METHOD__, false);
190     }
191     // Execution de la requete d'insertion des donnees de l'attribut
192     // valF de l'objet dans l'attribut table de l'objet
193     $res = $this->f->db->autoExecute(DB_PREFIXE.$this->table, $this->valF, DB_AUTOQUERY_INSERT);
194     // Logger
195     $this->addToLog(__METHOD__."(): db->autoExecute(\"".DB_PREFIXE.$this->table."\", ".print_r($this->valF, true).", DB_AUTOQUERY_INSERT);", VERBOSE_MODE);
196     // Si une erreur survient
197     if (database::isError($res, true)) {
198     // Appel de la methode de recuperation des erreurs
199     $this->erreur_db($res->getDebugInfo(), $res->getMessage(), '');
200     $this->correct = false;
201     // Return
202     return $this->end_treatment(__METHOD__, false);
203     } else {
204     //
205     $main_res_affected_rows = $this->f->db->affectedRows();
206     // Log
207     $this->addToLog(__METHOD__."(): "._("Requete executee"), VERBOSE_MODE);
208     // Execution du trigger 'after' specifique au MODE 'insert'
209     // Le premier parametre est vide car en MODE 'insert'
210     // l'enregistrement n'existe pas encore donc il n'a pas
211     // d'identifiant
212     if($this->triggerajouterapres($this->valF[$this->clePrimaire], $this->f->db, $val, null) === false) {
213     $this->correct = false;
214     $this->addToLog(__METHOD__."(): ERROR", DEBUG_MODE);
215     // Return
216     return $this->end_treatment(__METHOD__, false);
217     }
218 nmeucci 6050 $messageAddSuccess = _("Le dossier %s a été lié.");
219 nmeucci 5141 $this->addToMessage(sprintf($messageAddSuccess, $this->valF['dossier_cible']));
220 jymadier 5017
221     // Template du lien vers le DI
222 softime 7996 $template_link_di = "<a id='link_dossier_instruction_lie' title=\"%s\" class='lien' href='".OM_ROUTE_FORM."&obj=dossier_instruction&action=777&idx=%s'>
223 nmeucci 5141 <span class='om-icon om-icon-16 om-icon-fix consult-16'></span>%s</a>";
224 jymadier 5017
225     // Lien vers le DI
226 nmeucci 5141 $link_di = sprintf(
227     $template_link_di,
228     _("Acceder au dossier d'instruction"),
229     $this->valF['dossier_cible'],
230     _("Acceder au dossier d'instruction")
231     );
232 jymadier 5017
233     // Message affiché à l'utilisateur
234 nmeucci 5141 $this->addToMessage('<br/>'.$link_di);
235 jymadier 5017 }
236     } else {
237     // Return
238     return $this->end_treatment(__METHOD__, false);
239     }
240     // Return
241     return $this->end_treatment(__METHOD__, true);
242     }
243    
244    
245 jymadier 4945 function setType(&$form,$maj) {
246     parent::setType($form,$maj);
247    
248     //type
249 jymadier 5017 $form->setType('lien_dossier_dossier','hidden');
250 jymadier 4945 $form->setType('dossier_src','hidden');
251 jymadier 5017 $form->setType('dossier_cible', 'text');
252 jymadier 4945 $form->setType('type_lien','hidden');
253     }
254    
255 nmeucci 5227 function setLib(&$form,$maj) {
256     parent::setLib($form,$maj);
257     $form->setLib('dossier_cible', _("dossier cible"));
258     }
259 jymadier 5017
260 nmeucci 5227
261 jymadier 5017 function setLayout(&$form, $maj) {
262    
263    
264     // Col1 : Fieldset "Dossier d'Instruction"
265     // $form->setBloc('dossier_cible', 'D', '', 'col_9');
266    
267     $form->setFieldset('dossier_cible', 'D', _("Lier un Dossier"));
268     $form->setFieldset('dossier_cible', 'F');
269    
270    
271     // $form->setBloc('dossier_cible', 'F');
272    
273     }
274    
275    
276 softime 6929 function setvalF($val = array()) {
277 jymadier 5017 //
278     parent::setValF($val);
279     //
280     if ($this->getParameter('maj') == 5) {
281     //
282     $dossier = $this->getParameter("idxformulaire");
283     //
284     $this->valF["dossier_src"] = $dossier;
285     $this->valF["dossier_cible"] = strtoupper(str_replace(" ", "", $this->f->db->escapesimple($this->valF["dossier_cible"])));
286     $this->valF["type_lien"] = "manuel";
287     }
288     }
289    
290 softime 6929 function retoursousformulaire($idxformulaire = NULL, $retourformulaire = NULL, $val = NULL,
291     $objsf = NULL, $premiersf = NULL, $tricolsf = NULL, $validation = NULL,
292     $idx = NULL, $maj = NULL, $retour = NULL) {
293 softime 9245 // bouton retour HTML
294     echo sprintf("\n".
295     '<a class="retour" href="#" id="sousform-action-%s-back-%s" data-href="%s">%s</a>'."\n",
296     $objsf, uniqid(),
297     sprintf(
298     OM_ROUTE_SOUSFORM."&obj=%s&action=%d&idx=%s&retourformulaire=%s&idxformulaire=%s",
299     $objsf, 4, 0 /* forçage de l'identifiant à zéro ? */, $retourformulaire, $idxformulaire
300     ),
301     __('Retour')
302     );
303 jymadier 5017 }
304    
305     /**
306 softime 8989 * @return void
307     */
308     function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
309     //parent::verifier($val);
310 nmeucci 5141 // Vérification des champs obligatoires
311 jymadier 5017 $this->checkRequired();
312     if ($this->correct === false) {
313     return false;
314     }
315 nmeucci 5141
316     // Un DI ne peut pas s'auto-lier
317 jymadier 5017 $id_dossier_cible = str_replace(" ", "", $this->valF['dossier_cible']);
318 nmeucci 5141 if ($id_dossier_cible == $this->getParameter("idxformulaire")) {
319 jymadier 5017 $this->correct = false;
320 nhaye 6395 $this->addToMessage(_("Vous ne pouvez pas lier un dossier à lui-même. Saisissez un nouveau numéro puis recommencez."));
321 jymadier 5017 return false;
322     }
323    
324 nmeucci 5141 // Vérification de l'existence du DI cible (avec gestion multi)
325     $where_collectivite = "";
326     if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) {
327     $where_collectivite = "
328     AND dossier.om_collectivite=".$_SESSION['collectivite']."
329 jymadier 5017 ";
330 nmeucci 5141 }
331     $sql = "
332     SELECT
333     count(*)
334     FROM
335     ".DB_PREFIXE."dossier
336     WHERE
337     dossier.dossier = '".strtoupper($id_dossier_cible)."'
338     ".$where_collectivite;
339     $count = $this->f->db->getOne($sql);
340     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
341     $this->f->isDatabaseError($count);
342     if ($count === '0') {
343     $this->correct = false;
344 nhaye 6406 $this->addToMessage(
345     sprintf(
346     _("Il n'existe aucun dossier correspondant au numéro %s. Saisissez un nouveau numéro puis recommencez."),
347     $id_dossier_cible
348     )
349     );
350 nmeucci 6051 $this->form->setVal('dossier_cible', '');
351 nmeucci 5141 return false;
352     }
353 jymadier 5017
354 softime 7996 $inst_dossier = $this->f->get_inst__om_dbform(array(
355     "obj" => "dossier_instruction",
356     "idx" => $id_dossier_cible,
357     ));
358 jymadier 6404
359     // Contrôle d'accès au groupe et aux dossiers confidentiels du groupe du dossier cible
360     if ($inst_dossier->can_user_access_dossier() === false) {
361     $this->correct = false;
362 nhaye 6406 $this->addToMessage(
363     sprintf(
364     _("Il n'existe aucun dossier correspondant au numéro %s. Saisissez un nouveau numéro puis recommencez."),
365     $id_dossier_cible
366     )
367     );
368 jymadier 6404 $this->form->setVal('dossier_cible', '');
369     return false;
370     }
371    
372 nmeucci 5141 // Vérification de l'existence d'un lien
373     $type_link = $this->get_type_link($this->valF['dossier_src'], $this->valF['dossier_cible']);
374     if ($type_link !== null) {
375     switch ($type_link) {
376     case 'manuel':
377     $message_deja_lie = _("Le dossier %s est déjà lié au dossier courant.");
378     break;
379     case 'auto_recours':
380     $message_deja_lie = _("Le dossier %s est déjà lié au dossier courant (lien automatique).");
381     break;
382     case 'lien_par_da':
383     $message_deja_lie = _("Le dossier %s est déjà lié au dossier courant (même dossier d'autorisation).");
384     break;
385     default:
386     $message_deja_lie = _("L'existence d'une liaison entre le dossier courant et le %s n'a pas pu être vérifiée.");
387     $message_deja_lie .= '<br/>';
388     $message_deja_lie .= _("Veuillez contacter votre administrateur.");
389     break;
390 jymadier 5017 }
391 nmeucci 5141 $this->addToMessage(sprintf($message_deja_lie, $id_dossier_cible));
392     $this->correct = false;
393     return false;
394 jymadier 5017 }
395     }
396    
397 nmeucci 5141 /**
398     * Récupère, s'il existe, le type du lien entre deux DI.
399     *
400     * Le lien peut être implicite (les DI ont le même DA) ou créé :
401     * - manuellement (lors de l'ajout par l'utilisateur) ;
402     * - automatiquement (lors de la création d'un DI contentieux).
403     *
404     * S'il s'agit d'une liaison implicite par le DA,
405     * la notion de DI cible / source ne s'applique pas.
406     *
407     * Sinon elle s'applique et le lien est directionnel :
408     * inverser les DI cible et source est susceptible de modifier le résultat.
409     *
410     * @param string $dossier_src ID du DI source
411     * @param string $dossier_cible ID du DI cible
412     * @return mixed NULL si aucune liaison sinon type du lien (STRING)
413     */
414     function get_type_link($dossier_src, $dossier_cible) {
415 jymadier 5017
416 nmeucci 5141 // On vérifie s'il y a une entrée dans la table de liaison pour le sens
417     // indiqué en paramètres : si c'est le cas on retourne le type du lien trouvé.
418 jymadier 5017 $sql = "
419     SELECT
420     type_lien
421     FROM
422     ".DB_PREFIXE."lien_dossier_dossier
423     WHERE
424     dossier_src = '".strtoupper($dossier_src)."'
425     AND dossier_cible = '".strtoupper($dossier_cible)."'
426     ";
427     $type_lien = $this->f->db->getOne($sql);
428     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
429 nmeucci 5141 $this->f->isDatabaseError($type_lien);
430 jymadier 5017 if ($type_lien !== null AND $type_lien !== '') {
431     return $type_lien;
432     }
433 nmeucci 5141
434     // Sinon on vérifie la présence d'une éventuelle liaison implicite par le DA.
435     $sql = "
436     SELECT
437     count(*)
438     FROM
439     ".DB_PREFIXE."dossier
440     WHERE
441     dossier = '".strtoupper($dossier_cible)."'
442     AND dossier_autorisation = (SELECT dossier_autorisation
443     FROM ".DB_PREFIXE."dossier
444     WHERE dossier = '".strtoupper($dossier_src)."')
445     ";
446     $res = $this->f->db->getOne($sql);
447     $this->f->addToLog(__METHOD__."(): db->getOne(\"".$sql."\");", VERBOSE_MODE);
448     $this->f->isDatabaseError($res);
449     if ($res === '1') {
450     return 'lien_par_da';
451     }
452    
453     // Sinon aucun lien n'a été trouvé.
454     return null;
455 jymadier 5017 }
456 nmeucci 6054
457     /**
458     * Récupère l'instance du dossier d'instruction.
459     *
460     * @param string $dossier_instruction Identifiant du dossier d'instruction.
461     *
462     * @return object
463     */
464     function get_inst_dossier_instruction($dossier_instruction = null) {
465     //
466     return $this->get_inst_common("dossier_instruction", $dossier_instruction);
467     }
468 jymadier 6404
469     /*
470     * CONDITION - can_user_access_dossier_all_context
471     *
472     * Vérifie que l'utilisateur a bien accès au dossier d'instruction.
473     * Cette méthode vérifie que l'utilisateur est lié au groupe du dossier, et si le
474     * dossier est confidentiel qu'il a accès aux confidentiels de ce groupe.
475     *
476     */
477     function can_user_access_dossier_all_context() {
478    
479     ($this->f->get_submitted_get_value('idxformulaire') !== null ? $id_dossier =
480     $this->f->get_submitted_get_value('idxformulaire') : $id_dossier = "");
481     //
482     if ($id_dossier !== "") {
483 softime 7996 $dossier = $this->f->get_inst__om_dbform(array(
484     "obj" => "dossier_instruction",
485     "idx" => $id_dossier,
486     ));
487 jymadier 6404 //
488     return $dossier->can_user_access_dossier();
489     }
490     return false;
491     }
492    
493 softime 7366 /**
494 softime 8989 * SETTER_FORM - setSelect.
495 softime 7366 *
496 softime 8989 * @return void
497 softime 7366 */
498 softime 8989 function setSelect(&$form, $maj, &$dnu1 = null, $dnu2 = null) {
499 softime 7366 // Surcharge la méthode pour ne pas initialiser les select des champs
500     // dossier_cible et dossier_src qui récupère la liste complète des
501     // dossiers d'instructions
502 softime 8989 //parent::setSelect($form, $maj);
503 softime 7366 }
504    
505 softime 7685 /**
506     * Indique si la redirection vers le lien de retour est activée ou non.
507     *
508     * L'objectif de cette méthode est de permettre d'activer ou de désactiver
509     * la redirection dans certains contextes.
510     *
511     * @return boolean
512     */
513     function is_back_link_redirect_activated() {
514     //
515     return false;
516     }
517    
518    
519 softime 4927 }
520    
521 softime 7996

Properties

Name Value
svn:keywords "Id"

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26