/[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 6449 - (hide annotations)
Thu Mar 30 16:39:52 2017 UTC (7 years, 10 months ago) by jymadier
Original Path: branches/contentieux/obj/lien_dossier_dossier.class.php
File size: 19552 byte(s)
- Ajout de droits manquants et suppression de droits inutiles
- Changement des conditions pour l'affichage des boutons "Ajouter" et "Supprimer" un lien : on teste dans les 2 cas sur la division du dossier, le fait qu'il soit clôturé, le bypass...
- Modification des identifiants de div, bind JS etc.

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26