235 |
echo "\t</form>\n"; |
echo "\t</form>\n"; |
236 |
} |
} |
237 |
|
|
238 |
|
/** |
239 |
|
* WIDGET DASHBOARD - widget_recherche_parametrable. |
240 |
|
* |
241 |
|
* Le widget permet de lister les dossiers en fonction de l'état, |
242 |
|
* du filtre instructeur ou division et d'avoir un message d'aide personnalisé |
243 |
|
*/ |
244 |
|
function view_widget_recherche_parametrable($content=null) { |
245 |
|
$params = array('etat', 'filtre', 'tri', 'affichage', 'source_depot', 'message_help'); |
246 |
|
$arguments = $this->get_arguments($content, $params); |
247 |
|
$conf = $this->get_config_recherche_dossier_parametrable($arguments); |
248 |
|
|
249 |
|
$sql = sprintf( |
250 |
|
"SELECT |
251 |
|
%s |
252 |
|
FROM |
253 |
|
%s |
254 |
|
%s |
255 |
|
%s |
256 |
|
%s |
257 |
|
%s", |
258 |
|
$conf["query_ct_select"], |
259 |
|
$conf["query_ct_from"], |
260 |
|
trim($conf["query_ct_where"]) !== '' ? "WHERE" : '', |
261 |
|
$conf["query_ct_where"], |
262 |
|
$conf["query_ct_orderby"], |
263 |
|
$conf["query_ct_limit"] |
264 |
|
); |
265 |
|
|
266 |
|
$search = array( |
267 |
|
"valide" => "false", |
268 |
|
"advanced-search-submit" => "", |
269 |
|
); |
270 |
|
|
271 |
|
// Ajout des arguments pour la recherche avancée |
272 |
|
foreach ($conf['arguments'] as $key => $argument) { |
273 |
|
$search[$key] = $argument; |
274 |
|
} |
275 |
|
|
276 |
|
// Récupération de l'identifiant de l'instructeur pour la recherche avancée |
277 |
|
if ($conf['arguments']['filtre'] == 'instructeur') { |
278 |
|
$select_instructeur = sprintf( |
279 |
|
"SELECT |
280 |
|
dossier.instructeur |
281 |
|
FROM |
282 |
|
%s", |
283 |
|
$conf["query_ct_from"] |
284 |
|
); |
285 |
|
|
286 |
|
// Execution de la requête |
287 |
|
$id_instructeur = $this->f->db->getone($select_instructeur); |
288 |
|
$this->addToLog(__METHOD__."(): db->getone(\"".$select_instructeur."\");", VERBOSE_MODE); |
289 |
|
$this->f->isDatabaseError($id_instructeur); |
290 |
|
|
291 |
|
$search['instructeur'] = $id_instructeur; |
292 |
|
} |
293 |
|
|
294 |
|
// Récupération de l'identifiant de la division pour la recherche avancée |
295 |
|
if ($conf['arguments']['filtre'] == 'division') { |
296 |
|
$select_division = sprintf( |
297 |
|
"SELECT |
298 |
|
division.division |
299 |
|
FROM |
300 |
|
%s", |
301 |
|
$conf["query_ct_from"] |
302 |
|
); |
303 |
|
|
304 |
|
// Execution de la requête |
305 |
|
$id_division = $this->f->db->getone($select_division); |
306 |
|
$this->addToLog(__METHOD__."(): db->getone(\"".$select_division."\");", VERBOSE_MODE); |
307 |
|
$this->f->isDatabaseError($id_division); |
308 |
|
|
309 |
|
$search['division'] = $id_division; |
310 |
|
} |
311 |
|
|
312 |
|
// Récupération de la collectivité pour la recherche avancée |
313 |
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
314 |
|
$search['om_collectivite'] = $_SESSION['collectivite']; |
315 |
|
} |
316 |
|
|
317 |
|
// Génération de l'advs_id |
318 |
|
$advs_id = str_replace(array('.',','), '', microtime(true)); |
319 |
|
$search["advanced-search-submit"] = ""; |
320 |
|
$_SESSION["advs_ids"][$advs_id] = serialize($search); |
321 |
|
|
322 |
|
// Affichage du message d'informations |
323 |
|
printf( |
324 |
|
$this->template_help, |
325 |
|
$conf["message_help"] |
326 |
|
); |
327 |
|
|
328 |
|
// Affichage du widget avec une bulle |
329 |
|
if ($conf["arguments"]["affichage"] === "nombre") { |
330 |
|
// Execution de la requête |
331 |
|
$res = $this->f->db->getone($sql); |
332 |
|
$this->addToLog(__METHOD__."(): db->getone(\"".$sql."\");", VERBOSE_MODE); |
333 |
|
$this->f->isDatabaseError($res); |
334 |
|
|
335 |
|
// Si il n'y a aucun dossier à afficher |
336 |
|
if (intval($res) == 0) { |
337 |
|
// Affichage du message d'informations |
338 |
|
echo _("Aucun dossier trouvé."); |
339 |
|
// Exit |
340 |
|
return; |
341 |
|
} |
342 |
|
$this->display_resultat_bulle($res, __("dossier(s) trouvé(s)"), "bg-info", ""); |
343 |
|
} else { |
344 |
|
// Exécution de la requête |
345 |
|
$res = $this->f->db->query($sql); |
346 |
|
$this->addToLog(__METHOD__."(): db->query(\"".$sql."\");", VERBOSE_MODE); |
347 |
|
$this->f->isDatabaseError($res); |
348 |
|
|
349 |
|
// Si il n'y a aucun dossier à afficher |
350 |
|
if ($res->numrows() == 0) { |
351 |
|
// Affichage du message d'informations |
352 |
|
echo _("Vous n'avez pas de dossiers pour le moment."); |
353 |
|
// Exit |
354 |
|
return; |
355 |
|
} |
356 |
|
|
357 |
|
// |
358 |
|
$template_table = ' |
359 |
|
<table class="tab-tab"> |
360 |
|
<thead> |
361 |
|
<tr class="ui-tabs-nav ui-accordion ui-state-default tab-title"> |
362 |
|
<th class="title col-0 firstcol"> |
363 |
|
<span class="name"> |
364 |
|
%s |
365 |
|
</span> |
366 |
|
</th> |
367 |
|
<th class="title col-1"> |
368 |
|
<span class="name"> |
369 |
|
%s |
370 |
|
</span> |
371 |
|
</th> |
372 |
|
<th class="title col-2 lastcol"> |
373 |
|
<span class="name"> |
374 |
|
%s |
375 |
|
</span> |
376 |
|
</th> |
377 |
|
</tr> |
378 |
|
</thead> |
379 |
|
<tbody> |
380 |
|
%s |
381 |
|
</tbody> |
382 |
|
</table> |
383 |
|
'; |
384 |
|
// |
385 |
|
$template_line = ' |
386 |
|
<tr class="tab-data odd"> |
387 |
|
<td class="col-1 firstcol"> |
388 |
|
%s |
389 |
|
</td> |
390 |
|
<td class="col-1"> |
391 |
|
%s |
392 |
|
</td> |
393 |
|
<td class="col-2 lastcol"> |
394 |
|
%s |
395 |
|
</td> |
396 |
|
</tr> |
397 |
|
'; |
398 |
|
// |
399 |
|
$template_href = OM_ROUTE_FORM.'&obj=dossier_instruction&action=3&idx=%s'; |
400 |
|
// |
401 |
|
$template_link = ' |
402 |
|
<a class="lienTable" href="%s"> |
403 |
|
%s |
404 |
|
</a> |
405 |
|
'; |
406 |
|
|
407 |
|
/** |
408 |
|
* Si il y a des dossiers à afficher, alors on affiche le widget. |
409 |
|
*/ |
410 |
|
// On construit le contenu du tableau |
411 |
|
$ct_tbody = ''; |
412 |
|
while ($row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) { |
413 |
|
// On construit l'attribut href du lien |
414 |
|
$ct_href = sprintf( |
415 |
|
$template_href, |
416 |
|
// idx |
417 |
|
$row["dossier"] |
418 |
|
); |
419 |
|
// On construit la ligne |
420 |
|
$ct_tbody .= sprintf( |
421 |
|
$template_line, |
422 |
|
// Colonne 1 - Numéro du dossier |
423 |
|
sprintf( |
424 |
|
$template_link, |
425 |
|
$ct_href, |
426 |
|
$row["dossier"] |
427 |
|
), |
428 |
|
// Colonne 2 - Libellé du dossier |
429 |
|
sprintf( |
430 |
|
$template_link, |
431 |
|
$ct_href, |
432 |
|
$row["dossier_libelle"] |
433 |
|
), |
434 |
|
// Colonne 3 - Date dépôt |
435 |
|
sprintf( |
436 |
|
$template_link, |
437 |
|
$ct_href, |
438 |
|
$this->f->formatDate($row["date_depot"]) |
439 |
|
) |
440 |
|
); |
441 |
|
} |
442 |
|
// Affichage du tableau listant les dossiers |
443 |
|
printf( |
444 |
|
$template_table, |
445 |
|
// Colonne 1 - Numéro de dossier |
446 |
|
_('dossier'), |
447 |
|
// Colonne 2 - Libellé du dossier |
448 |
|
_('nom_petitionnaire'), |
449 |
|
// Colonne 3 - Date de dépôt |
450 |
|
_('date_depot'), |
451 |
|
// Contenu du tableau |
452 |
|
$ct_tbody |
453 |
|
); |
454 |
|
} |
455 |
|
|
456 |
|
|
457 |
|
// Affichage du footer |
458 |
|
printf( |
459 |
|
$this->template_footer, |
460 |
|
sprintf( |
461 |
|
OM_ROUTE_TAB."&obj=dossier_instruction&advs_id=%s&tricol=%s&message_help=%s", |
462 |
|
$advs_id, |
463 |
|
$conf['arguments']['tri'], |
464 |
|
urlencode($conf['message_help']) |
465 |
|
), |
466 |
|
|
467 |
|
// titre |
468 |
|
_("Voir +") |
469 |
|
); |
470 |
|
} |
471 |
|
|
472 |
|
/** |
473 |
|
* Cette méthode permet de récupérer la configuration du widget 'Recherche |
474 |
|
* paramétrable'. |
475 |
|
* |
476 |
|
* @return array |
477 |
|
*/ |
478 |
|
function get_config_recherche_dossier_parametrable($arguments) { |
479 |
|
$arguments_default = array( |
480 |
|
'affichage' => "nombre", |
481 |
|
'filtre' => 'instructeur', |
482 |
|
'tri' => -6 |
483 |
|
); |
484 |
|
|
485 |
|
// Vérification des arguments |
486 |
|
foreach ($arguments_default as $key => $value) { |
487 |
|
// |
488 |
|
if (isset($arguments[$key])) { |
489 |
|
// |
490 |
|
$elem = trim($arguments[$key]); |
491 |
|
if ($key === "filtre" |
492 |
|
&& in_array($elem, array("instructeur", "division", "aucun"))) { |
493 |
|
// La valeur doit être dans cette liste |
494 |
|
$arguments[$key] = $elem; |
495 |
|
continue; |
496 |
|
} |
497 |
|
if ($key === "affichage" |
498 |
|
&& in_array($elem, array('liste', 'nombre'))) { |
499 |
|
// La valeur doit être dans cette liste |
500 |
|
$arguments[$key] = $elem; |
501 |
|
continue; |
502 |
|
} |
503 |
|
if ($key === "tri" |
504 |
|
&& is_numeric(str_replace('-', '', $elem)) === true) { |
505 |
|
// |
506 |
|
$arguments[$key] = $elem; |
507 |
|
continue; |
508 |
|
} |
509 |
|
} |
510 |
|
// |
511 |
|
$arguments[$key] = $value; |
512 |
|
} |
513 |
|
|
514 |
|
// Ajout du filtre sur la source du dépôt |
515 |
|
$query_ct_where_source_depot = ""; |
516 |
|
if (isset($arguments["source_depot"]) |
517 |
|
&& ! is_null($arguments["source_depot"]) |
518 |
|
&& $arguments["source_depot"] !== "") { |
519 |
|
|
520 |
|
$source_depot = $arguments["source_depot"]; |
521 |
|
if (! is_null($source_depot) && $source_depot !== "") { |
522 |
|
$query_ct_where_source_depot = sprintf( |
523 |
|
" demande.source_depot = '%s' ", |
524 |
|
$source_depot |
525 |
|
); |
526 |
|
} |
527 |
|
} |
528 |
|
|
529 |
|
$query_limit = ''; |
530 |
|
// Gestion de l'affichage |
531 |
|
if ($arguments['affichage'] == 'nombre') { |
532 |
|
$query_ct_select = "COUNT(*)"; |
533 |
|
$query_ct_orderby = ''; |
534 |
|
} else { |
535 |
|
$query_ct_select = " |
536 |
|
dossier.dossier, |
537 |
|
dossier.dossier_libelle, |
538 |
|
dossier.date_depot |
539 |
|
"; |
540 |
|
|
541 |
|
$query_ct_orderby = sprintf("ORDER BY dossier.date_depot DESC"); |
542 |
|
} |
543 |
|
|
544 |
|
$query_ct_from = sprintf( |
545 |
|
'%1$sdossier LEFT JOIN %1$sdemande |
546 |
|
ON demande.dossier_instruction = dossier.dossier', |
547 |
|
DB_PREFIXE |
548 |
|
); |
549 |
|
|
550 |
|
// Filtre sur la collectivité en fonction du niveau |
551 |
|
if ($this->f->isCollectiviteMono($_SESSION['collectivite']) === true) { |
552 |
|
$query_ct_join_collectivite_filter = " JOIN ".DB_PREFIXE."om_collectivite |
553 |
|
ON dossier.om_collectivite=om_collectivite.om_collectivite |
554 |
|
AND om_collectivite.om_collectivite=".$_SESSION['collectivite']." |
555 |
|
"; |
556 |
|
} else { |
557 |
|
$query_ct_join_collectivite_filter = " LEFT JOIN ".DB_PREFIXE."om_collectivite |
558 |
|
ON dossier.om_collectivite=om_collectivite.om_collectivite |
559 |
|
"; |
560 |
|
} |
561 |
|
|
562 |
|
$query_ct_where_filtre = ""; |
563 |
|
$filtre = $arguments["filtre"]; |
564 |
|
// Filtre sur les dossiers qui concernent l'utilisateur |
565 |
|
if ($filtre == "instructeur") { |
566 |
|
// |
567 |
|
$query_ct_where_filtre_instructeur = " JOIN ".DB_PREFIXE."instructeur |
568 |
|
ON dossier.instructeur=instructeur.instructeur |
569 |
|
JOIN ".DB_PREFIXE."om_utilisateur |
570 |
|
ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur |
571 |
|
AND om_utilisateur.login='".$_SESSION['login']."' |
572 |
|
"; |
573 |
|
} else { |
574 |
|
$query_ct_where_filtre_instructeur = " LEFT JOIN ".DB_PREFIXE."instructeur |
575 |
|
ON dossier.instructeur=instructeur.instructeur |
576 |
|
LEFT JOIN ".DB_PREFIXE."om_utilisateur |
577 |
|
ON instructeur.om_utilisateur=om_utilisateur.om_utilisateur "; |
578 |
|
} |
579 |
|
// Filtre sur les dossier de la division |
580 |
|
if ($filtre == "division") { |
581 |
|
// |
582 |
|
$query_ct_where_filtre_division = " JOIN ".DB_PREFIXE."division |
583 |
|
ON dossier.division=division.division |
584 |
|
AND division.division = ".$_SESSION['division']." |
585 |
|
"; |
586 |
|
} else { |
587 |
|
$query_ct_where_filtre_division = " LEFT JOIN ".DB_PREFIXE."division |
588 |
|
ON dossier.division=division.division"; |
589 |
|
} |
590 |
|
|
591 |
|
// |
592 |
|
$query_ct_where = ''; |
593 |
|
if (isset($arguments["etat"]) |
594 |
|
&& is_null($arguments["etat"]) === false |
595 |
|
&& $arguments["etat"] !== "") { |
596 |
|
// |
597 |
|
$query_ct_where = sprintf( |
598 |
|
" dossier.etat = '%s' ", |
599 |
|
$arguments['etat'] |
600 |
|
); |
601 |
|
} |
602 |
|
|
603 |
|
$query_ct_select_champaffiche = array( |
604 |
|
'dossier.dossier as "'._("dossier").'"', |
605 |
|
'dossier.dossier_libelle as "'._("dossier").'"', |
606 |
|
'to_char(dossier.date_depot ,\'DD/MM/YYYY\') as "'._("date_depot").'"' |
607 |
|
); |
608 |
|
|
609 |
|
$message_help = ""; |
610 |
|
// Récupération du message d'aide |
611 |
|
if (isset($arguments["message_help"]) |
612 |
|
&& ! is_null($arguments["message_help"]) |
613 |
|
&& $arguments["message_help"] !== "") { |
614 |
|
|
615 |
|
$message_help = $arguments["message_help"]; |
616 |
|
} |
617 |
|
|
618 |
|
// Filtrage sur l'instructeur ou la division |
619 |
|
$query_ct_where_filtre = $query_ct_where_filtre_instructeur.$query_ct_where_filtre_division; |
620 |
|
|
621 |
|
// Construction du FROM |
622 |
|
$query_ct_from = $query_ct_from.$query_ct_join_collectivite_filter.$query_ct_where_filtre; |
623 |
|
|
624 |
|
// Construction du WHERE |
625 |
|
$query_ct_where = sprintf( |
626 |
|
'%s %s %s', |
627 |
|
$query_ct_where, |
628 |
|
trim($query_ct_where_source_depot) !== '' ? 'AND' : '', |
629 |
|
$query_ct_where_source_depot |
630 |
|
); |
631 |
|
|
632 |
|
return array( |
633 |
|
"arguments" => $arguments, |
634 |
|
"message_help" => $message_help, |
635 |
|
"query_ct_select_champaffiche" => $query_ct_select_champaffiche, |
636 |
|
"query_ct_select" => $query_ct_select, |
637 |
|
"query_ct_from" => $query_ct_from, |
638 |
|
"query_ct_where" => $query_ct_where, |
639 |
|
"query_ct_orderby" => $query_ct_orderby, |
640 |
|
"query_ct_limit" => $query_limit, |
641 |
|
); |
642 |
|
} |
643 |
|
|
644 |
|
|
645 |
|
|
646 |
/** |
/** |
647 |
* WIDGET DASHBOARD - widget_recherche_dossier_par_type. |
* WIDGET DASHBOARD - widget_recherche_dossier_par_type. |