<?php use Cake\I18n\Time; use Cake\I18n\Date; use App\Controller\MaterielsController; // (EP 21/5/19) // --- Elements set by Controller for this view --- /*TODO: $materiels doit etre enrichi avec des nouveaux attributs tels que (pour chaque materiel de la liste) : - CAN_EDIT - CAN_DELETE - CAN_VALIDATE - CAN_TBA - CAN_ARCHIVE */ $domain_options = $domain_options; //debug($domain_options); $nbMateriels = $nbMateriels; $controller=$controller; $materiels = $materiels; $configuration = $configuration; // Uniquement quand un statut est sélectionné (pour filtrer) $SELECTED_STATUS = isset($SELECTED_STATUS) ? $SELECTED_STATUS : null; // TODO: yena plein d'autres // ... // - Constants : // - User status: $role = $role; $username = $username; $priviledgedUser = $priviledgedUser; $USER_IS_UTILISATEUR = $USER_IS_UTILISATEUR; $USER_IS_RESPONSABLE = $USER_IS_RESPONSABLE; $USER_IS_RESPONSABLE_OR_MORE = $USER_IS_RESPONSABLE_OR_MORE; $USER_IS_ADMIN = $USER_IS_ADMIN; $USER_IS_ADMIN_OR_MORE = $USER_IS_ADMIN_OR_MORE; $USER_IS_ADMINPLUS = $USER_IS_ADMINPLUS; $USER_IS_ADMINPLUS_OR_MORE = $USER_IS_ADMINPLUS_OR_MORE; $USER_IS_SUPERADMIN = $USER_IS_SUPERADMIN; // (EP) TODO: Vraiment utile ??? A virer je pense $PROFILE_USER = $PROFILE_USER; $PROFILE_ADMIN = $PROFILE_ADMIN; $PROFILE_RESPONSABLE = $PROFILE_RESPONSABLE; $PROFILE_ADMINPLUS = $PROFILE_ADMINPLUS; $PROFILE_SUPERADMIN = $PROFILE_SUPERADMIN; $allProfiles = $allProfiles; // - Materiel status: $idGmNa = $idGmNa; $idGtNa = $idGtNa; // - Fonctions : $displayElement = $displayElement; $dateProchainControleVerif = $dateProchainControleVerif; $echoActionButton = $echoActionButton; // @TODO : get from Configurations $METRO=false; /* <!-- ****************************************************************************** FONCTIONS D'AFFICHAGE DES DIFFÉRENTES SECTIONS DE LA PAGE WEB ****************************************************************************** --> */ $displayStatusButtons = function($SELECTED_STATUS, $nbMateriels, $html) { ?> <div class="actions" style="width: 100%; float: none; padding: 0 0;"> <?php echo '<p>'; echo "Afficher les matériels : "; echo '</br>'; echo '</br>'; $b_all = $b_cre = $b_val = $b_toarc = $b_arc = ''; $SELECTED = '<i class="icon-ok"></i>'; //if (isset($SELECTED_STATUS)) { if ($SELECTED_STATUS) { if ($SELECTED_STATUS == 'CREATED') $b_cre = $SELECTED; else if ($SELECTED_STATUS == 'VALIDATED') $b_val = $SELECTED; else if ($SELECTED_STATUS == 'TOBEARCHIVED') $b_toarc = $SELECTED; else if ($SELECTED_STATUS == 'ARCHIVED') $b_arc = $SELECTED; } else $b_all = $SELECTED; // Affichage des boutons de filtrage par statut (en haut de la page) //$args = explode('?',$_SERVER['REQUEST_URI']); //$args = count($args)==2 ? '?'.$args[1] : null; $params = $this->request->getParam('?'); // S'il y a des paramètres, supprimer le paramètre 'page' car inapproprié if ($params) unset($params['page']); //echo $this->Html->link($b_all . ' Tous', [ echo $html->link($b_all . ' Tous', [ 'action' => 'index', '?' => $params ], [ 'title' => 'Tous', 'style' => 'margin-right: 5px', 'escape' => false ]); echo $html->link($b_cre . ' A valider', [ 'action' => 'index', 'CREATED', // https://book.cakephp.org/3/en/views/helpers/html.html#creating-links //'?' => ['height' => 400, 'width' => 500] '?' => $params //'?' => null //[$args], //"http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] ], [ 'title' => 'Liste des matériels créés', 'style' => 'margin-right: 5px', 'escape' => false ]); echo $html->link($b_val . ' Validés', [ 'action' => 'index', 'VALIDATED', '?' => $params ], [ 'title' => 'Liste des materiels que l\'on peut archiver', 'style' => 'margin-right: 5px', 'escape' => false ]); echo $html->link($b_toarc . ' A sortir', [ 'action' => 'index', 'TOBEARCHIVED', '?' => $params ], [ 'title' => 'A sortir de l\'inventaire', 'style' => 'margin-right: 5px', 'escape' => false ]); echo $html->link($b_arc . ' Archivés', [ 'action' => 'index', 'ARCHIVED', '?' => $params ], [ 'title' => 'A sortir de l\'inventaire', 'style' => 'margin-right: 0px', 'escape' => false ]); echo '</p>'; // ACTIONS : buttons "Tout selectionner", "Tout decocher" // - show only with "A valider" and "A sortir" if ($SELECTED_STATUS && $nbMateriels>0) { echo $html->link('<i class="icon-check"></i> Tout cocher', '#all', [ 'onclick' => 'selectAll()', 'title' => 'Sélectionner tout les matériels', 'style' => ': 400px; margin-right: 50px', 'escape' => false ]); echo $html->link('<i class="icon-check-empty"></i> Tout décocher', '#none', [ 'onclick' => 'selectNone()', 'title' => 'Sélectionner aucun matériel', 'style' => 'margin-right: 50px', 'escape' => false ]); } echo "</div>"; }; // displayStatusButtons() $displaySelectors = function($form, $request, $displayNbLinesSelector, $displayAgeSelector, $displayDomaineSelector, $domain_options) { //echo '<div>'; echo '<div class="col-lg-2 col-md-3 col-sm-4">'; echo '<table><tr>'; echo '<td>'; $displayNbLinesSelector($form, $request); echo '</td>'; echo '<td>'; $displayAgeSelector($form, $request); echo '</td>'; echo '<td>'; $displayDomaineSelector($form, $request, $domain_options); echo '</td>'; echo '</tr></table>'; echo '</div>'; }; $displayNbLinesSelector = function($form, $request) { //echo '<div class="col-lg-2 col-md-3 col-sm-4">'; //echo $this->Form->create('materiels', [ // echo $this->Form->create('materiels', ['url' => '/materiels/execActions?page=index']); //echo $this->Form->control('aff_par_defaut', [ echo $form->control('aff_par_defaut', [ 'label' => 'Nombre lignes', 'onchange' => "updateUrlWithSelectedValue('aff-par-defaut', 'aff')", 'options' => [ '20' => 20, '30' => 30, '50' => 50, '100' => 100, '150' => 150, '200' => 200 ] ]); //echo '</div>'; }; // displayNbLinesSelector() $displayAgeSelector = function($form, $request) { //echo '<div class="col-lg-2 col-md-3 col-sm-4">'; echo $form->control('age_selector', [ 'label' => 'Age', 'onchange' => "updateUrlWithSelectedValue('age-selector', 'age')", 'options' => [ '0' => 'Tous', '5' => 'Récents (5 ans max)', '10' => '5-10 ans', '15' => '10-15 ans', '20' => '15-20 ans', //'20plus' => '+ 20 ans', '21' => '+ 20 ans', //'unknown' => 'inconnu', '-1' => 'inconnu', ], // Inutile car géré via javascript //'default' => '5', ]); //echo '</div>'; }; // displayNbLinesSelector() $displayDomaineSelector = function($form, $request, $domain_options) { //echo '<div class="col-lg-2 col-md-3 col-sm-4">'; echo $form->control('domain_selector', [ 'label' => 'Domaine', 'onchange' => "updateUrlWithSelectedValue('domain-selector', 'domain')", 'options' => $domain_options, // Inutile car géré via javascript 'default' => 0, ]); //echo '</div>'; }; // displayNbLinesSelector() $displayActionButtonsForSelectedOrAllElements = function($form, $SELECTED_STATUS, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN) { //if (isset($SELECTED_STATUS)) { if ($SELECTED_STATUS) { switch ($SELECTED_STATUS) { case 'CREATED': $action = 'Valider les'; break; case 'VALIDATED': $action = "Demander l'archivage des"; break; case 'TOBEARCHIVED': $action = "Sortir les"; break; } if ($SELECTED_STATUS != 'ARCHIVED') { //if (! ($role == 'Super Administrateur' && $SELECTED_STATUS == 'TOBEARCHIVED')) { if (! ($USER_IS_SUPERADMIN && $SELECTED_STATUS=='TOBEARCHIVED') ) { //echo $this->Form->submit($action . ' matériels cochés', [ // 'name' => 'updateSelectedStatus', // 'id' => 'updateSelectedStatus', // 'style' => 'margin: 0px' //]); //echo $this->Form->button($action . ' matériels cochés', [ 'class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'updateSelectedStatus', 'id' => 'updateSelectedStatus', 'style' => 'margin: 0px']); echo $form->button($action . ' matériels cochés', [ 'class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'updateSelectedStatus', 'id' => 'updateSelectedStatus', 'style' => 'margin: 0px']); echo "<br /><br />"; } } //echo $this->Form->submit('Exporter la liste des matériels cochés', [ // 'name' => 'export', // 'id' => 'export', // 'style' => 'margin: 0px;' //]); echo $form->button('Exporter la liste des matériels cochés', ['class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'export', 'id' => 'export', 'style' => 'margin: 0px;' ]); echo "<br /><br />"; } if ($USER_IS_ADMIN_OR_MORE || $USER_IS_RESPONSABLE) //echo $this->Form->submit('Exporter la liste complete', [ // 'name' => 'exportAll', // 'id' => 'exportAll', // 'style' => 'margin: 0px;' //]); echo $form->button('Exporter la liste complete', ['class'=>'btn btn-outline-success', 'type'=>'submit', 'name' => 'exportAll', 'id' => 'exportAll', 'style' => 'margin: 0px;']); }; /* * Couleurs en fonction du statut du matos * */ $displayColorLegend = function() { // CREATED => bleu // VALIDATED => vert // TBA => orange // ARCHIVED => rouge //echo "<p><i><b><u>Couleur</u> :</b> <div>bleu=à valider</div> ; vert=validé ; orange=à sortir ; rouge=archivé (couleur date rouge = fin garantie)</i></p>"; echo "<p><i><b><u>Couleur</u> :</b> <i style='color:blue'>bleu=à valider</i> ; <i style='color:green'>vert=validé</i> ; <i style='color:orange'>orange=à sortir</i> ; <i style='color:red'>rouge=archivé</i> ; couleur date rouge = <i style='color:red'>fin garantie</i></i></p>"; }; $displayActionButtonsForMateriel = function($materiel, $username, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN, $controller, $html) { // TODO: Dans l'idéal, ces variables doivent etre définies par le controleur et passées à la vue // (sous forme d'un tableau contenant ces droits pour CHAQUE materiel) // Car la vue doit être la moins "intelligente" possible, la plus simple possible $IS_CREATED = ($materiel->status == 'CREATED'); $IS_VALIDATED = ($materiel->status == 'VALIDATED'); $IS_TOBEARCHIVED = ($materiel->status == 'TOBEARCHIVED'); $IS_ARCHIVED = ($materiel->status == 'ARCHIVED'); /* * Couleurs en fonction du statut du matos * */ // CREATED => bleu if ($IS_CREATED) $color = 'blue'; // VALIDATED => vert if ($IS_VALIDATED) $color = 'green'; // TBA => orange if ($IS_TOBEARCHIVED) $color = 'orange'; // ARCHIVED => rouge if ($IS_ARCHIVED) $color = 'red'; $color = "style='color: $color'"; $USER_IS_CREATOR_OR_OWNER = in_array($username, [$materiel->nom_createur, $materiel->nom_responsable]); $USER_IS_SAME_GROUP_AS_MATERIEL = ( ( isset($priviledgedUser->groupes_metier_id) && $priviledgedUser->groupes_metier_id!=$idGmNa && $materiel->groupes_metier_id==$priviledgedUser->groupes_metier_id ) || ( isset($priviledgedUser->groupes_thematique_id) && $priviledgedUser->groupes_thematique_id!=$idGtNa && $materiel->groupes_thematique_id==$priviledgedUser->groupes_thematique_id ) ); $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL = $USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL; $CONTEXT1 = $USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL; // Détermination des autorisations pour tous les boutons "éditer", "supprimer", "valider", ... $id = $materiel->id; $CAN_EDIT = $controller->isAuthorizedAction('edit', $id); //$CAN_EDIT = $IS_CREATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL); //$CAN_EDIT = $IS_CREATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_UTILISATEUR_AND_CREATOR_OR_OWNER || $USER_IS_RESPONSABLE_AND_SAME_GROUP_AS_MATERIEL || $USER_IS_RESPONSABLE_AND_CREATOR_OR_OWNER); $CAN_DELETE = $controller->isAuthorizedAction('delete', $id); //$CAN_DELETE = $CAN_EDIT; /* $CAN_VALIDATE_OR_INVALIDATE = $USER_IS_ADMIN_OR_MORE || ( ($materiel->materiel_administratif == 0) && $USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL ); $CAN_VALIDATE = $IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE; $CAN_INVALIDATE = !$IS_CREATED && $CAN_VALIDATE_OR_INVALIDATE; $CAN_TBA = $IS_VALIDATED && ($USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL)); $CAN_ARCHIVE = $IS_TOBEARCHIVED && $CAN_VALIDATE_OR_INVALIDATE; */ $CAN_INVALIDATE = $controller->isAuthorizedAction('statusCreated', $id); $CAN_VALIDATE = $controller->isAuthorizedAction('statusValidated', $id); $CAN_TBA = $controller->isAuthorizedAction('statusTobearchived', $id); $CAN_ARCHIVE = $controller->isAuthorizedAction('statusArchived', $id); echo '<td class="actions" style="padding: 6px 0; text-align: left;">'; // 1) EDIT icon /* if ( in_array($materiel->status, [ 'CREATED', // (EP 17/5/19) ben non, on peut pas si c'est validé !!! //'VALIDATED' ]) && ( $USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL) ) ) */ if ($CAN_EDIT) echo $html->link(__('<i class="icon-pencil"></i>'), ['action' => 'edit', $materiel->id], ['title' => 'Editer', 'style' => 'margin: 0 2px', 'escape' => false ]); // 2) VALIDER/TBA/ARCHIVER icon /* if ( $USER_IS_ADMIN || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL) ) { */ //if ($materiel->status=='CREATED' && !$USER_IS_RESPONSABLE) { if ($CAN_VALIDATE) echo $html->link('<i class="icon-ok-sign"></i>', [ 'action' => 'statusValidated', $materiel->id ], [ 'title' => 'Valider', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => 'Êtes-vous sur de vouloir valider ' . $materiel->designation . ' ?' ] ); //else if (h($materiel->status) == 'VALIDATED') { if ($CAN_TBA) echo $html->link('<i class="icon-inbox"></i>', [ 'action' => 'statusTobearchived', $materiel->id ], [ 'title' => 'Demander la sortie de l\'inventaire', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => 'Êtes-vous sur de vouloir faire une demande d\'archive ' . $materiel->designation . ' ?' ] ); //else if ($materiel->status=='TOBEARCHIVED' && !$USER_IS_RESPONSABLE) if ($CAN_ARCHIVE) echo $html->link('<i class="icon-inbox"></i>', [ 'action' => 'statusArchived', $materiel->id ], [ 'title' => 'Sortir de l\'inventaire', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => 'Êtes-vous sur de vouloir archiver ' . $materiel->designation . ' ?' ] ); // 3) DELETE icon /* if (h($materiel->status) == 'CREATED') { if ( $USER_IS_ADMIN_OR_MORE || $USER_IS_CREATOR_OR_OWNER || ($USER_IS_RESPONSABLE && $USER_IS_SAME_GROUP_AS_MATERIEL) ) */ if ($CAN_DELETE) echo $html->link(__('<i class="icon-trash"></i>'), [ 'action' => 'delete', $materiel->id ], [ 'title' => 'Supprimer', 'style' => 'margin: 0 2px', 'escape' => false, 'confirm' => __('Êtes-vous sur de vouloir supprimer {0} ?', $materiel->designation) ] ); echo "</td>"; return $color; }; // displayActionButtonsForMateriel ?> <!-- ****************************************************************************** PAGE WEB HTML ****************************************************************************** --> <div class="materiels index col-lg-12 col-md-12 col-sm-12"> <!-- TITRE --> <?php echo '<h2><i class="icon-list"></i> Liste des matériels ('.$nbMateriels.')</h2>'; ?> <!-- BOUTONS STATUT (admin+ only) <div class="actions" style="width: 100%; float: none; padding: 0 0;"> --> <?php /*echo '<p>'; echo $this->Html->link('<i class="icon-plus"></i> Nouveau Matériel', [ 'action' => 'add' ], [ 'title' => 'Ajouter un matériel', 'escape' => false ]); echo '</p>';*/ if ($USER_IS_ADMIN_OR_MORE) $displayStatusButtons($SELECTED_STATUS, $nbMateriels, $this->Html); //</div> // <!-- SELECTEURS : NOMBRE LIGNES PAR PAGE et AGE --> $displaySelectors($this->Form, $this->request, $displayNbLinesSelector, $displayAgeSelector, $displayDomaineSelector, $domain_options); //$displayNbLinesSelector($this->Form, $this->request); echo $this->Form->create('materiels', [ 'url' => '/materiels/execActions?page=' . $this->request->getQuery('page') ]); // <!-- AFFICHAGE DES MATERIELS --> if ($nbMateriels == 0) echo 'Aucun matériel'; else { // $form2 = $this->Form; // /echo $this->Form->create('materiels', ['url' => '/materiels/execActions']); if ($SELECTED_STATUS) echo $this->Form->hidden('what', ['value'=>$SELECTED_STATUS]); ?> <table style="border-collapse: separate; border-spacing: 0;"> <!-- HEAD (Titres) --> <thead> <tr> <?php if ($SELECTED_STATUS) { echo '<th></th>'; }?> <th class="actions"><?= __('') ?></th> <th><?= $this->Paginator->sort('designation','Désignation') ?></th> <th><?= $this->Paginator->sort('numero_laboratoire', 'N° interne (labo)') ?></th> <th><?= $this->paginator->sort('hors_service', ' ') ?></th> <th><?= $this->Paginator->sort('categorie_id', 'Catégorie') ?></th> <th><?= $this->Paginator->sort('organisme_id', 'Org.') ?></th> <th><?= $this->Paginator->sort('numero_inventaire_organisme', 'N° Invent. Org.') ?></th> <th><?= $this->Paginator->sort('nom_responsable', "Nom de l'utilisateur") ?></th> <th><?= $this->Paginator->sort('status', 'Statut') ?></th> <th><?= $this->Paginator->sort('date_acquisition', 'Date Achat') ?></th> <th><?= $this->Paginator->sort('etiquette', 'Et') ?></th> <?php if ($METRO) echo "<th>".$this->Paginator->sort('metrologie', 'Metro')."</th>" ?> </tr> </thead> <!-- BODY (Lignes matériels) --> <tbody> <?php // Pour changer la couleur du nom du matos si la garantie est passée $time = Time::now(); // On récupère la date et l'heure actuelles $today = new date("$time->year-$time->month-$time->day"); // On extrait la date pour la vérification de fin de garantie //$today = $today->format('Ydm'); // On formatte la date initialement en 31-12-2000 (par exemple) en un format qui pourra etre comparé : 20001231 $today = $today->format('Ymd'); // On formatte la date initialement en 31-12-2000 (par exemple) en un format qui pourra etre comparé : 20001231 // BOUCLE SUR CHAQUE MATERIEL, ligne par ligne //$mc = new MaterielsController(); foreach ($materiels as $materiel) : // Date fin garantie ? $date_color = ''; if ($materiel->date_fin_garantie !== NULL) { //debug("today $today"); $timeFin = new time($materiel->date_fin_garantie); $dateFin = new date("$timeFin->year-$timeFin->month-$timeFin->day"); //$dateFin = $dateFin->format('Ydm'); $dateFin = $dateFin->format('Ymd'); //debug("datefin $dateFin"); if ($today>=$dateFin) $date_color = 'style="color: #FF0000"'; //debug("couleur $date_color"); } ?> <tr> <?php //<tr style="color:<?=$color>;"> // (1) COLONNE SELECTION (checkbox) if ($SELECTED_STATUS) { echo '<td class="smallText">' . $this->Form->checkbox($materiel->id, [ 'style' => 'margin: 3px', 'id' => $materiel->id ]) . '</td>'; } // <!-- (2) COLONNE ACTIONS (Edit, Delete, Validate, TBA, Archive) --> $color = $displayActionButtonsForMateriel($materiel, $username, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN, $controller, $this->Html); ?> <!-- (3) LES AUTRES COLONNES (DATA : designation, num labo, hs, categ, ...) --> <td class="smallText"><?= $materiel->has('designation') ? $this->Html->link($materiel->designation, ['controller' => 'Materiels', 'action' => 'view', $materiel->id],[$color]) : '' ?></td> <td class="smallText"><?= h($materiel->numero_laboratoire) ?></td> <td class="smallText" style="color: red"><strong><?= ($materiel->hors_service) ? 'HS' : '' ?></strong></td> <td class="smallText"><?= $materiel->has('category') ? h($materiel->category->nom) : '' ?></td> <td class="smallText"><?= $materiel->has('organisme') ? h($materiel->organisme->nom) : '' ?></td> <td class="smallText"><?= h($materiel->numero_inventaire_organisme) ?></td> <td class="smallText"><?= h($materiel->nom_responsable) ?></td> <?php // (4) COLONNE MATERIEL STATUS : C/V/TBA/A switch (h($materiel->status)) { case 'CREATED': $statut = 'C'; break; case 'VALIDATED': $statut = 'V'; break; case 'TOBEARCHIVED': $statut = 'TBA'; break; case 'ARCHIVED': $statut = 'A'; break; default: $statut = ''; break; } ?> <td class="smallText" <?=$color?>><?= $statut ?></td> <!-- // (5) COLONNES Date acquisition et Etiquette posée --> <td class="smallText" <?=$date_color?>><?= h($materiel->date_acquisition) ?></td> <td class="smallText"><?= h($materiel->etiquette)=='1' ? 'Y':'N' ?></td> <!-- // (6) COLONNE METRO o/n --> <?php if ($METRO) echo '<td class="smallText">'. (h($materiel->metrologie)=='1' ? 'Y':'N').'</td>'; ?> </tr> <?php endforeach; ?> </tbody> </table> <?php $displayColorLegend(); $displayActionButtonsForSelectedOrAllElements($this->Form, $SELECTED_STATUS, $USER_IS_RESPONSABLE, $USER_IS_ADMIN_OR_MORE, $USER_IS_SUPERADMIN); echo $this->element('pagination_with_first_and_last'); $this->Form->end(); } // (nbMateriels>0) ?> </div> <!-- <div class="actions"> <php echo $this->element('menu') ?> <php echo $this->element('menu_index', [ 'pluralHumanName' => 'Matériels', 'singularHumanName' => 'Matériel' ])?> </div> --> <!-- ****************************************************************************** JAVASCRIPT ****************************************************************************** --> <script type="text/javascript"> /* // Pour changer l'url lorsque le nombre de lignes souhaité est modifié //$(document).ready(function () { $(document).ready(onSelectNbLines); function onSelectNbLines() { $("#aff-par-defaut").bind("change", function (event) { var nbr=$("#aff-par-defaut :selected").val(); var urlDeBase = window.location.href.split("?"); var urlDecoupee = window.location.search.split("&"), i, j; // On sépare la chaine des paramètres en fonction du & var urlDecoupeeBis = new Array(); var param = 0; var bool = false; //console.log(nbr); for(i=0; i<urlDecoupee.length; ++i) { urlDecoupeeBis[i] = urlDecoupee[i].split("="); // On sépare les parametres de leurs valeurs for(j=0; j<urlDecoupeeBis[i].length; ++j){ if(urlDecoupeeBis[i][0] == "aff" || urlDecoupeeBis[i][0] == "?aff") { //console.info('toto'); bool = true; param = i; // Si le parametre "aff" est trouvé, on le récupère break; } } } if(bool) { // Si le parametre recherché a ete trouvé, ... //console.log("coucouT"); urlDecoupeeBis[param][1] = nbr; //urlDecoupeeBis[i][0] c'est le nom du parametre, et urlDecoupeeBis[i][1] c'est la valeur associée var url = ""; for(i=0; i<urlDecoupee.length; ++i) { //... on reconstruit une url propre ... */ //////if(/^\?[a-zA-A0-9]*/.test(urlDecoupeeBis[0][0])) { /* if(i!=0) url += "&"; // Sauf pour le 1er parametre, qui lui commence par un "?" } else url += "&"; url += urlDecoupeeBis[i][0]+"="+urlDecoupeeBis[i][1]; // On reforme les parametres "&nom=valeur" en les concatenant } window.location.href = urlDeBase[0]+url; // ... et on fait la redirection } else if(urlDecoupee[0]=="") window.location.href = window.location.href + '?aff=' + nbr; // Sinon on joute juste le parametre en fin d'url else window.location.href = window.location.href + '&aff=' + nbr; }); } //); */ // Pour changer l'url lorsque l'age est modifié //$(document).ready(function () { /* $(document).ready(onSelectAge); function onSelectAge() { $("#age-selector").bind("change", function (event) { */ //$(document).ready($("#age-selector").onchange = onSelectAge); //function changeAge(select_name, param_name) { function updateUrlWithSelectedValue(select_name, param_name) { //$("#age-selector").bind("change", function (event) { // Exemple pour http://labinvent.devv/materiels/index/CREATED?aff=30&age=5&page=3 : // 5 //var param_val=$("#age-selector :selected").val(); selected_elem = "#" + select_name + " :selected"; var param_val = $(selected_elem).val(); // Array [ "http://labinvent.devv/materiels/CREATED", "aff=30&age=15&page=3" ] // Array [ "http://labinvent.devv/materiels/CREATED" ] s'il n'y a aucun argument (pas de chaine commençant par "?...") var urlDeBase = window.location.href.split("?"); // Array [ "?aff=30", "age=15", "page=3" ] // Array [ "" ] si pas d'argument passé var args = window.location.search.split("&"); var i; //, j; //var param = 0; //var bool = false; //var argsBis = new Array(); var argsBis = []; //console.log(param_val, args); // Si pas d'argument (paramètre) passé, args[0] = '' => on ne fait rien if (args[0]=='') args = []; //console.log(args); for(i=0; i<args.length; ++i) { // On sépare les parametres de leurs valeurs // ex: argsBis[i] = args[i].split("="); /* for(j=0; j<argsBis[i].length; ++j){ if(argsBis[i][0] == "age" || argsBis[i][0] == "?age") { bool = true; param = i; // Si le parametre "age" est trouvé, on le récupère break; } } */ } // Resultat : /* 0: Array [ "?aff", "30" ] 1: Array [ "age", "20" ] 2: Array [ "page", "3" ] */ //console.log(argsBis); //if(bool) { // Si le parametre recherché a ete trouvé //argsBis[param][1] = age; //argsBis[i][0] c'est le nom du parametre, et argsBis[i][1] c'est la valeur associée var oldargs = ''; for(i=0; i<args.length; ++i) { //... on reconstruit une url propre ... // On ne conserve pas l'argument de pagination (page=x) car les données ne seront plus les mêmes et cette page risque de ne plus exister => ERROR // On ne conserve pas non plus l'argument 'age' car on va l'ajouter en tête des arguments arg_name = argsBis[i][0]; // Si "?arg" on supprime le ? if (arg_name.startsWith('?')) arg_name = arg_name.substring(1); //if (['page','age'].includes(arg_name)) continue; if (['page', param_name].includes(arg_name)) continue; /* if (argsBis[i][0] == 'page') continue; if (argsBis[i][0] == 'age') continue; */ //if(/^\?[a-zA-A0-9]*/.test(argsBis[0][0])) { // if(i!=0) oldargs += "&"; // Sauf pour le 1er parametre, qui lui commence par un "?" //} //else oldargs += "&"; /* // "&arg=valeur", sauf pour le 1er paramètre (pas de '&') if (i > 0) oldargs += "&"; oldargs += arg_name + "=" + argsBis[i][1]; */ oldargs += '&' + arg_name + "=" + argsBis[i][1]; // On reforme les parametres "&nom=valeur" en les concatenant } //window.location.href = urlDeBase[0]+oldargs; // ... et on fait la redirection //} //else if(args[0]=="") window.location.href = window.location.href + '?age=' + age; // Sinon on ajoute juste le parametre en fin d'url //else window.location.href = window.location.href + '&age=' + age; //console.log(urlDeBase[0]); //console.log(urlDeBase[0] + '?age='+age + oldargs); //new_url = urlDeBase[0] + '?age='+age + oldargs; new_url = urlDeBase[0] + '?'+param_name+'='+param_val+ oldargs; //if (oldargs) new_url += oldargs; window.location.href = new_url; //}); } //); // Actualiser l'age sélectionné si passé en paramètre de l'url $(document).ready(selectAge); //Actualiser la pagination (nombre de lignes par page) sélectionnée si passée en paramètre de l'url $(document).ready(selectNbLines); //Actualiser le domaine sélectionné si passé en paramètre de l'url $(document).ready(selectDomain); function selectDomain() { var domain_id = parseInt($_GET('domain')); //console.log(domain_id); // NotANumber if (!isNaN(domain_id)) $("#domain-selector")[0].selectedIndex = domain_id; //document.getElementById('domain-selector').selectedIndex = domain_id; //$("#domain-selector").val(domain_id); //document.getElementById('domain-selector').value = domain; } //$(document).ready(function () { function selectNbLines() { var nblines = parseInt($_GET('aff')); //document.getElementById('aff-par-defaut').value = affichage; if ( [20,30,50,100,200].includes(nblines) ) $("#aff-par-defaut").val(nblines); else $("#aff-par-defaut").val(<?=$configuration->aff_par_defaut?>); /* switch(affichage) { case 20 : //document.getElementById('aff-par-defaut').selectedIndex = 0; document.getElementById('aff-par-defaut').value = 20; break; case 30 : document.getElementById('aff-par-defaut').selectedIndex = 1; break; case 50 : document.getElementById('aff-par-defaut').selectedIndex = 2; break; case 100 : document.getElementById('aff-par-defaut').selectedIndex = 3; break; case 150 : document.getElementById('aff-par-defaut').selectedIndex = 4; //document.getElementById('aff-par-defaut').value = 20; break; case 200 : document.getElementById('aff-par-defaut').selectedIndex = 5; break; default : // Par défaut, lorsque le parametre "aff" n'existe pas, au premier affichage $("#aff-par-defaut").val(<S echo $configuration->aff_par_defaut S>); // On récupère la valeur dans la BD directement, mais en PHP, faut pas déconner break; } */ } //); //$(document).ready(function () { function selectAge() { var age = parseInt($_GET('age')); /* if ( [0,5,10,15,20,21,-1].includes(age) ) $("#aff-par-defaut").val(age); else $("#aff-par-defaut").val(5); */ switch(age) { // TOUS case 0 : $("#age-selector")[0].selectedIndex = 0; break; //case 0 : document.getElementById('age-selector').selectedIndex = 0; break; // 5 ans max case 5 : $("#age-selector")[0].selectedIndex = 1; break; //case 5 : document.getElementById('age-selector').selectedIndex = 1; break; // 5-10 ans case 10 : $("#age-selector")[0].selectedIndex = 2; break; //case 10 : document.getElementById('age-selector').selectedIndex = 2; break; // 10-15 case 15 : document.getElementById('age-selector').selectedIndex = 3; break; //case 15 : $("#age-selector").selectedIndex = 3; break; // 15-20 case 20 : document.getElementById('age-selector').selectedIndex = 4; break; //case 20 : $("#age-selector").selectedIndex = 4; break; //case '20plus' : case 21 : document.getElementById('age-selector').selectedIndex = 5; break; //case 21 : $("#age-selector").selectedIndex = 5; break; //case 'unknown' : case -1 : document.getElementById('age-selector').selectedIndex = 6; break; //case -1 : $("#age-selector").selectedIndex = 6; break; // Par défaut, lorsque le parametre "age" n'existe pas => 0-5 ans default : document.getElementById('age-selector').selectedIndex = 1; //default : $("#age-selector").selectedIndex = 1; break; //default : $("#age-selector").val(5); } } //); // La fonction suivante permet de recuperer les parametres d’une URL function $_GET(param) { var vars = {}; window.location.href.replace( location.hash, '' ).replace( /[?&]+([^=&]+)=?([^&]*)?/gi, // regexp function( m, key, value ) { // callback vars[key] = value !== undefined ? value : ''; } ); if ( param ) { return vars[param] ? vars[param] : null; } return vars; } </script>