Commit c630247ae38f8ab3cd5f92bd9e3b837d0b8f2cba
1 parent
daccf948
Exists in
master
and in
2 other branches
Mise à jour framework cakephp et amélioration recherche matériel
- Bugfixes et améliorations recherche matériel : - ajout du fournisseur dans la recherche globale - bugfix désignation (si elle contient plusieurs mots) - refactorisation et optimisation du code (bcp plus court...) - ... - Mise à jour du framework cakephp à la version courante : passage de v3.5 à v3.7 ($ php composer.phar require --update-with-dependencies "cakephp/cakephp:3.7.*")
Showing
2 changed files
with
345 additions
and
451 deletions
Show diff stats
README.md
@@ -53,8 +53,8 @@ Logiciel testé et validé sur les configurations suivantes : | @@ -53,8 +53,8 @@ Logiciel testé et validé sur les configurations suivantes : | ||
53 | 53 | ||
54 | VERSION ACTUELLE | 54 | VERSION ACTUELLE |
55 | 55 | ||
56 | -Date: 17/01/2019 | ||
57 | -Version: 2.10.1 | 56 | +Date: 21/01/2019 |
57 | +Version: 2.10.2 | ||
58 | Author: EP | 58 | Author: EP |
59 | Mise à jour framework cakephp et amélioration recherche matériel: | 59 | Mise à jour framework cakephp et amélioration recherche matériel: |
60 | - Mise à jour du framework cakephp à la version courante : passage de v3.5 à v3.7 | 60 | - Mise à jour du framework cakephp à la version courante : passage de v3.5 à v3.7 |
@@ -62,7 +62,7 @@ Author: EP | @@ -62,7 +62,7 @@ Author: EP | ||
62 | - Bugfixes et améliorations recherche matériel : | 62 | - Bugfixes et améliorations recherche matériel : |
63 | - ajout du fournisseur dans la recherche globale | 63 | - ajout du fournisseur dans la recherche globale |
64 | - bugfix désignation (si elle contient plusieurs mots) | 64 | - bugfix désignation (si elle contient plusieurs mots) |
65 | - - optimisation du code (bcp plus court...) | 65 | + - refactorisation et optimisation du code (bcp plus court...) |
66 | - ... | 66 | - ... |
67 | 67 | ||
68 | Version majeure en cours : 2.10 (https://projects.irap.omp.eu/versions/207) | 68 | Version majeure en cours : 2.10 (https://projects.irap.omp.eu/versions/207) |
src/Controller/MaterielsController.php
@@ -5,6 +5,7 @@ use App\Controller\AppController; | @@ -5,6 +5,7 @@ use App\Controller\AppController; | ||
5 | use Cake\ORM\TableRegistry; | 5 | use Cake\ORM\TableRegistry; |
6 | use Cake\Mailer\Email; | 6 | use Cake\Mailer\Email; |
7 | use Cake\ORM\Locator\TableLocator; | 7 | use Cake\ORM\Locator\TableLocator; |
8 | +use Cake\Auth\FallbackPasswordHasher; | ||
8 | 9 | ||
9 | /** | 10 | /** |
10 | * Materiels Controller | 11 | * Materiels Controller |
@@ -1351,11 +1352,207 @@ class MaterielsController extends AppController | @@ -1351,11 +1352,207 @@ class MaterielsController extends AppController | ||
1351 | return NULL; | 1352 | return NULL; |
1352 | } | 1353 | } |
1353 | 1354 | ||
1354 | - /** | ||
1355 | - * Find method | 1355 | + |
1356 | + private function find_general($general_search_field_name) { | ||
1357 | + // $general_search_field_name equals 's_all' or 's_all2' | ||
1358 | + | ||
1359 | + //$generalFieldConditions = NULL; | ||
1360 | + | ||
1361 | + $all = $this->request->getData($general_search_field_name); | ||
1362 | + //debug($all); exit; | ||
1363 | + // Check for a date | ||
1364 | + foreach ([ | ||
1365 | + "/", | ||
1366 | + "-" | ||
1367 | + ] as $symb) { | ||
1368 | + $pos1 = strpos($all, $symb); // Première occurence | ||
1369 | + $pos2 = strrchr($all, $symb); // Dernière occurence | ||
1370 | + if ($pos1 !== false && $pos2 !== false && $pos1 != $pos2) { | ||
1371 | + list ($dd, $mm, $yyyy) = explode($symb, $all); | ||
1372 | + if (checkdate((int) $mm, (int) $dd, (int) $yyyy)) { | ||
1373 | + $all = "$yyyy-$mm-$dd"; | ||
1374 | + break; | ||
1375 | + } | ||
1376 | + } | ||
1377 | + } | ||
1378 | + // End datecheck | ||
1379 | + | ||
1380 | + $tabSearch = explode(' ', $all); | ||
1381 | + | ||
1382 | + $merge = []; | ||
1383 | + foreach ($tabSearch as $word) { | ||
1384 | + $FieldConditions = [ | ||
1385 | + // Utilisation de array() pour pouvoir mettre plusieurs fois la meme clé. | ||
1386 | + // Exemple : la clé "Materiels.designation LIKE" pourra apparaître plusieurs fois si on fait une recherche de "mac pc" | ||
1387 | + // On aura : "Materiels.designation LIKE" => '%mac%' et "Materiels.designation LIKE" => '%pc%' | ||
1388 | + // Sinon on aurait uniquement eu : "Materiels.designation LIKE" => '%pc%' | ||
1389 | + array( | ||
1390 | + 'Materiels.designation LIKE' => '%' . $word . '%' | ||
1391 | + ), | ||
1392 | + array( | ||
1393 | + 'Materiels.numero_laboratoire LIKE' => '%' . $word . '%' | ||
1394 | + ), | ||
1395 | + array( | ||
1396 | + 'Materiels.numero_inventaire_organisme LIKE' => '%' . $word . '%' | ||
1397 | + ), | ||
1398 | + array( | ||
1399 | + 'Materiels.numero_inventaire_old LIKE' => '%' . $word . '%' | ||
1400 | + ), | ||
1401 | + array( | ||
1402 | + 'Materiels.numero_commande LIKE' => '%' . $word . '%' | ||
1403 | + ), | ||
1404 | + array( | ||
1405 | + 'Materiels.description LIKE' => '%' . $word . '%' | ||
1406 | + ), | ||
1407 | + /*TODO: comment gérer fournisseur ???*/ | ||
1408 | + array( | ||
1409 | + //'Materiels.fournisseur_id LIKE' => '%' . $word . '%' | ||
1410 | + //'Materiels.fournisseur_id =' => $word | ||
1411 | + 'Fournisseurs.nom LIKE' => '%' . $word . '%' | ||
1412 | + ), | ||
1413 | + array( | ||
1414 | + 'Materiels.nom_responsable LIKE' => '%' . $word . '%' | ||
1415 | + ), | ||
1416 | + array( | ||
1417 | + 'Materiels.email_responsable LIKE' => '%' . $word . '%' | ||
1418 | + ), | ||
1419 | + array( | ||
1420 | + 'Materiels.code_comptable LIKE' => '%' . $word . '%' | ||
1421 | + ), | ||
1422 | + array( | ||
1423 | + 'Materiels.numero_serie LIKE' => '%' . $word . '%' | ||
1424 | + ), | ||
1425 | + array( | ||
1426 | + 'Materiels.date_acquisition LIKE' => '%' . $word . '%' | ||
1427 | + ), | ||
1428 | + array( | ||
1429 | + 'Materiels.lieu_detail LIKE' => '%' . $word . '%' | ||
1430 | + ) | ||
1431 | + ]; | ||
1432 | + $merge = array_merge($merge, $FieldConditions); | ||
1433 | + } | ||
1434 | + $generalFieldConditions = [ | ||
1435 | + 'OR' => $merge | ||
1436 | + ]; | ||
1437 | + | ||
1438 | + return $generalFieldConditions; | ||
1439 | + } | ||
1440 | + | ||
1441 | + | ||
1442 | + private function find_specific_fields() { | ||
1443 | + | ||
1444 | + // Materiel type | ||
1445 | + $matostype = $this->request->getData('s_matostype'); | ||
1446 | + $matostypeRequest = NULL; | ||
1447 | + | ||
1448 | + switch ($matostype) { | ||
1449 | + // Administratif | ||
1450 | + case 'A': | ||
1451 | + $matostypeRequest['Materiels.materiel_administratif ='] = '1'; | ||
1452 | + break; | ||
1453 | + // Technique | ||
1454 | + case 'T': | ||
1455 | + $matostypeRequest['Materiels.materiel_technique ='] = '1'; | ||
1456 | + break; | ||
1457 | + // Admin et Tech | ||
1458 | + case 'AT': | ||
1459 | + $matostypeRequest['Materiels.materiel_administratif ='] = '1'; | ||
1460 | + $matostypeRequest['Materiels.materiel_technique ='] = '1'; | ||
1461 | + break; | ||
1462 | + // Admin ONLY | ||
1463 | + case 'AO': | ||
1464 | + $matostypeRequest['Materiels.materiel_administratif ='] = '1'; | ||
1465 | + $matostypeRequest['Materiels.materiel_technique ='] = '0'; | ||
1466 | + break; | ||
1467 | + // Tech ONLY | ||
1468 | + case 'TO': | ||
1469 | + $matostypeRequest['Materiels.materiel_administratif ='] = '0'; | ||
1470 | + $matostypeRequest['Materiels.materiel_technique ='] = '1'; | ||
1471 | + break; | ||
1472 | + } | ||
1473 | + | ||
1474 | + $periode_acquisitionRequest = NULL; | ||
1475 | + $date_acquisition = NULL; | ||
1476 | + | ||
1477 | + $salle = NULL; | ||
1478 | + $fournisseur = NULL; | ||
1479 | + if ($this->request->getData('s_periode_acquisition1') != '') | ||
1480 | + $periode_acquisitionRequest['Materiels.date_acquisition >='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_periode_acquisition1')))); | ||
1481 | + if ($this->request->getData('s_periode_acquisition2') != '') | ||
1482 | + $periode_acquisitionRequest['Materiels.date_acquisition <='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_periode_acquisition2')))); | ||
1483 | + if ($this->request->getData('s_date_acquisition') != '') | ||
1484 | + $date_acquisition['Materiels.date_acquisition LIKE'] = '%' . date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_date_acquisition')))) . '%'; | ||
1485 | + | ||
1486 | + $montantRequest = []; | ||
1487 | + if ($this->request->getData('s_prix_ht_inf') != '') | ||
1488 | + $montantRequest['Materiels.prix_ht <='] = $this->request->getData('s_prix_ht_inf'); | ||
1489 | + if ($this->request->getData('s_prix_ht_sup') != '') | ||
1490 | + $montantRequest['Materiels.prix_ht >='] = $this->request->getData('s_prix_ht_sup'); | ||
1491 | + | ||
1492 | + if ($this->request->getData('s_salle') !== null && $this->request->getData('s_salle') != '') | ||
1493 | + $salle['Materiels.lieu_detail LIKE'] = '%' . $this->request->getData('s_salle') . '%'; | ||
1494 | + | ||
1495 | + if ($this->request->getData('s_fournisseur_id') !== null && $this->request->getData('s_fournisseur_id') != '') | ||
1496 | + $fournisseur['Materiels.fournisseur_id ='] = $this->request->getData('s_fournisseur'); | ||
1497 | + | ||
1498 | + /* TODO: (EP 2019/01) NOUVEAU CODE POUR REMPLACER LE CODE SUPER REDONDANT D'AVANT (300 lignes !!!) */ | ||
1499 | + $designation = NULL; | ||
1500 | + if ($this->request->getData('s_designation')) { | ||
1501 | + //$designation_words = []; | ||
1502 | + //$designation_words = explode (" ", $this->request->getData('s_designation')); | ||
1503 | + $designation = str_replace(" ","%", $this->request->getData('s_designation')); | ||
1504 | + $designation = [ 'Materiels.designation LIKE' => '%'.$designation.'%' ]; | ||
1505 | + #TODO: gérer un peu mieux le cas où le champ designation contient plusieurs mots: en cherchant chaque mot séparément (avec un "OU") : | ||
1506 | + /* | ||
1507 | + $designation_conditions = []; | ||
1508 | + for ($i = 0; $i < count($designation); $i++) { | ||
1509 | + //'Materiels.designation LIKE' => '%' . $designation[0]. '%', | ||
1510 | + //'Materiels.designation LIKE' => '%' . $designation[1]. '%', | ||
1511 | + $designation_conditions['Materiels.designation LIKE'] = '%'.$designation_words[$i].'%'); | ||
1512 | + } | ||
1513 | + */ | ||
1514 | + } | ||
1515 | + | ||
1516 | + // Putting all these specific fields together | ||
1517 | + $specificFieldsConditions = [ | ||
1518 | + //'Materiels.designation LIKE' => '%' . $designation[0] . '%', | ||
1519 | + //'Materiels.designation LIKE' => '%' . $this->request->getData('s_designation'). '%', | ||
1520 | + $designation, | ||
1521 | + //'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', | ||
1522 | + $this->getConditionForField('numero_laboratoire'), | ||
1523 | + $this->getConditionForField('numero_commande'), | ||
1524 | + $date_acquisition, | ||
1525 | + $periode_acquisitionRequest, | ||
1526 | + $this->getConditionForFieldNumber('prix_ht'), | ||
1527 | + $montantRequest, | ||
1528 | + $this->getConditionForFieldNumber('sur_categorie_id'), | ||
1529 | + $this->getConditionForFieldNumber('categorie_id'), | ||
1530 | + $this->getConditionForFieldNumber('sous_categorie_id'), | ||
1531 | + $this->getConditionForField('nom_responsable'), | ||
1532 | + $this->getConditionForField('numero_inventaire_organisme'), | ||
1533 | + $this->getConditionForField('numero_inventaire_old'), | ||
1534 | + $this->getConditionForFieldNumber('groupes_metier_id'), | ||
1535 | + $this->getConditionForFieldNumber('groupes_thematique_id'), | ||
1536 | + $salle, | ||
1537 | + //$fournisseur, | ||
1538 | + $this->getConditionForFieldNumber('fournisseur_id'), | ||
1539 | + $this->getConditionForFieldNumber('organisme_id'), | ||
1540 | + $matostypeRequest, | ||
1541 | + $this->getConditionForFieldNumber('organisme_id'), | ||
1542 | + $matostypeRequest, | ||
1543 | + $this->getConditionForField('status'), | ||
1544 | + ]; | ||
1545 | + | ||
1546 | + return $specificFieldsConditions; | ||
1547 | + | ||
1548 | + } | ||
1549 | + | ||
1550 | + | ||
1551 | + /* ******************** | ||
1552 | + * Create all needed LISTS and pass them to the VIEW (find) | ||
1553 | + * ******************** | ||
1356 | */ | 1554 | */ |
1357 | - public function find() | ||
1358 | - { | 1555 | + private function set_elements_lists_for_view_find() { |
1359 | 1556 | ||
1360 | $s_sur_categories = $this->Materiels->SurCategories->find('list', [ | 1557 | $s_sur_categories = $this->Materiels->SurCategories->find('list', [ |
1361 | 'keyField' => 'id', | 1558 | 'keyField' => 'id', |
@@ -1421,475 +1618,172 @@ class MaterielsController extends AppController | @@ -1421,475 +1618,172 @@ class MaterielsController extends AppController | ||
1421 | ) | 1618 | ) |
1422 | ]); | 1619 | ]); |
1423 | $categories = $this->Materiels->Categories; | 1620 | $categories = $this->Materiels->Categories; |
1424 | - $this->set(compact('s_numero_laboratoire', 's_nomresp', 's_sur_categories', 's_categories', 's_sous_categories', 's_groupes_thematiques', 's_groupes_metiers', | 1621 | + |
1622 | + // Pass all these LISTS to the view : | ||
1623 | + $this->set(compact('s_numero_laboratoire', 's_nomresp', 's_sur_categories', 's_categories', 's_sous_categories', 's_groupes_thematiques', 's_groupes_metiers', | ||
1425 | 's_organismes', 's_fournisseurs', 's_salles', 'categories')); | 1624 | 's_organismes', 's_fournisseurs', 's_salles', 'categories')); |
1625 | + | ||
1626 | + } | ||
1627 | + | ||
1628 | + | ||
1629 | + | ||
1630 | + | ||
1631 | + /** | ||
1632 | + * Find method | ||
1633 | + * (EP) tout refait le 18/1/17 pour que ça soit plus lisible et moins bugué... | ||
1634 | + */ | ||
1635 | + public function find() | ||
1636 | + { | ||
1637 | + | ||
1638 | + $this->set_elements_lists_for_view_find(); | ||
1639 | + | ||
1640 | + // Get the previous search result (from session) set in the view (find.ctp) | ||
1426 | $resultTri = $this->request->getSession()->read("resultTri"); | 1641 | $resultTri = $this->request->getSession()->read("resultTri"); |
1427 | 1642 | ||
1643 | + // Do not show Archived materiel if not Admin | ||
1644 | + $conditionNotArchived = $this->USER_IS_ADMIN_AT_LEAST() ? '' : [ 'Materiels.status !=' => 'ARCHIVED' ]; | ||
1428 | // if (! (in_array($this->role, ['Administration', 'Administration Plus', 'Super Administrateur']))) | 1645 | // if (! (in_array($this->role, ['Administration', 'Administration Plus', 'Super Administrateur']))) |
1429 | - if (! $this->USER_IS_ADMIN_AT_LEAST()) | ||
1430 | - $conditionNotArchived = [ | ||
1431 | - 'Materiels.status !=' => 'ARCHIVED' | ||
1432 | - ]; | ||
1433 | - else | ||
1434 | - $conditionNotArchived = ''; | ||
1435 | 1646 | ||
1436 | - // some data POSTED (au moins le champ de recherche generale) ? | ||
1437 | - if ($this->request->getData('s_all') !== null || $this->request->getData('s_all_2') !== null || $this->request->getData('s_designation') !== null) { | ||
1438 | - $generalFieldConditions = NULL; | ||
1439 | - // if general field set (s_all), then set general request for it | ||
1440 | - //if ($this->request->getData('s_all') !== null) { | ||
1441 | - //debug($this->request->getData()); exit; | ||
1442 | - if ($this->request->data('s_all') !== null) { | ||
1443 | - $all = $this->request->getData('s_all'); | ||
1444 | - //debug($all); exit; | ||
1445 | - // Check for a date | ||
1446 | - foreach ([ | ||
1447 | - "/", | ||
1448 | - "-" | ||
1449 | - ] as $symb) { | ||
1450 | - $pos1 = strpos($all, $symb); // Première occurence | ||
1451 | - $pos2 = strrchr($all, $symb); // Dernière occurence | ||
1452 | - if ($pos1 !== false && $pos2 !== false && $pos1 != $pos2) { | ||
1453 | - list ($dd, $mm, $yyyy) = explode($symb, $all); | ||
1454 | - if (checkdate((int) $mm, (int) $dd, (int) $yyyy)) { | ||
1455 | - $all = "$yyyy-$mm-$dd"; | ||
1456 | - break; | ||
1457 | - } | ||
1458 | - } | ||
1459 | - } | ||
1460 | - // End datecheck | ||
1461 | - | ||
1462 | - $tabSearch = explode(' ', $all); | ||
1463 | 1647 | ||
1464 | - $merge = []; | ||
1465 | - foreach ($tabSearch as $word) { | ||
1466 | - $FieldConditions = [ | ||
1467 | - // Utilisation de array() pour pouvoir mettre plusieurs fois la meme clé. | ||
1468 | - // Exemple : la clé "Materiels.designation LIKE" pourra apparaître plusieurs fois si on fait une recherche de "mac pc" | ||
1469 | - // On aura : "Materiels.designation LIKE" => '%mac%' et "Materiels.designation LIKE" => '%pc%' | ||
1470 | - // Sinon on aurait uniquement eu : "Materiels.designation LIKE" => '%pc%' | ||
1471 | - array( | ||
1472 | - 'Materiels.designation LIKE' => '%' . $word . '%' | ||
1473 | - ), | ||
1474 | - array( | ||
1475 | - 'Materiels.numero_laboratoire LIKE' => '%' . $word . '%' | ||
1476 | - ), | ||
1477 | - array( | ||
1478 | - 'Materiels.numero_inventaire_organisme LIKE' => '%' . $word . '%' | ||
1479 | - ), | ||
1480 | - array( | ||
1481 | - 'Materiels.numero_inventaire_old LIKE' => '%' . $word . '%' | ||
1482 | - ), | ||
1483 | - array( | ||
1484 | - 'Materiels.numero_commande LIKE' => '%' . $word . '%' | ||
1485 | - ), | ||
1486 | - array( | ||
1487 | - 'Materiels.description LIKE' => '%' . $word . '%' | ||
1488 | - ), | ||
1489 | - /*TODO: comment gérer fournisseur ???*/ | ||
1490 | - array( | ||
1491 | - //'Materiels.fournisseur_id LIKE' => '%' . $word . '%' | ||
1492 | - //'Materiels.fournisseur_id =' => $word | ||
1493 | - 'Fournisseurs.nom LIKE' => '%' . $word . '%' | ||
1494 | - ), | ||
1495 | - array( | ||
1496 | - 'Materiels.nom_responsable LIKE' => '%' . $word . '%' | ||
1497 | - ), | ||
1498 | - array( | ||
1499 | - 'Materiels.email_responsable LIKE' => '%' . $word . '%' | ||
1500 | - ), | ||
1501 | - array( | ||
1502 | - 'Materiels.code_comptable LIKE' => '%' . $word . '%' | ||
1503 | - ), | ||
1504 | - array( | ||
1505 | - 'Materiels.numero_serie LIKE' => '%' . $word . '%' | ||
1506 | - ), | ||
1507 | - array( | ||
1508 | - 'Materiels.date_acquisition LIKE' => '%' . $word . '%' | ||
1509 | - ), | ||
1510 | - array( | ||
1511 | - 'Materiels.lieu_detail LIKE' => '%' . $word . '%' | ||
1512 | - ) | ||
1513 | - ]; | ||
1514 | - $merge = array_merge($merge, $FieldConditions); | 1648 | + /* ******************** |
1649 | + * Plusieurs cas possibles: | ||
1650 | + * - (1) SI POST (getData()) : | ||
1651 | + * - (1.1) WITH DATA (au moins un champ rempli, avec ou sans critère de tri) : | ||
1652 | + * - (1.1.1) recherche globale (s_all ou s_all2) : | ||
1653 | + * - (1.1.1.1) s_all2 (champ de recherche global en bas à gauche) => recherche globale (toutes les tables) | ||
1654 | + * - (1.1.1.2) s_all (champ de recherche général matériel tout au début du formulaire de recherche, en haut de page) => recherche générale sur la table matériel (et tables liées) | ||
1655 | + * - (1.1.2) recherche spécifique : 1 ou plusieurs champ(s) spécifique(s) (s_designation, ...) => recherche sur champs spécifiques | ||
1656 | + * - (1.2) NO DATA, only empty fields : Une recherche a été soumise sans remplir aucun champ !! => ne rien faire | ||
1657 | + * - (2) SINON : | ||
1658 | + * - (2.1) avec critères de tri => sort_result() : Devant le résultat d'une recherche, on a simplement cliqué sur une colonne pour afficher le résultat TRIÉ (sorted) | ||
1659 | + * - (2.2) sans critère de tri => c'est la première fois qu'on vient sur la vue, rien à faire de plus | ||
1660 | + * ******************** | ||
1661 | + */ | ||
1662 | + | ||
1663 | + | ||
1664 | + // (1) POST | ||
1665 | + if ($this->request->is('post')) { | ||
1666 | + $has_data = FALSE; | ||
1667 | + foreach ($this->request->getData() as $k=>$v) { | ||
1668 | + if ($v != '') { | ||
1669 | + $has_data = TRUE; | ||
1670 | + break; | ||
1515 | } | 1671 | } |
1516 | - $generalFieldConditions = [ | ||
1517 | - 'OR' => $merge | ||
1518 | - ]; | ||
1519 | } | 1672 | } |
1520 | - if ($this->request->getData('s_all_2') !== null) { | ||
1521 | - $all = $this->request->getData('s_all_2'); | 1673 | + |
1674 | + // (1.1) POST with data | ||
1675 | + if ($has_data) { | ||
1522 | 1676 | ||
1523 | - // Check for a date | ||
1524 | - foreach ([ | ||
1525 | - "/", | ||
1526 | - "-" | ||
1527 | - ] as $symb) { | ||
1528 | - $pos1 = strpos($all, $symb); // Première occurence | ||
1529 | - $pos2 = strrchr($all, $symb); // Dernière occurence | ||
1530 | - if ($pos1 !== false && $pos1 != $pos2) { | ||
1531 | - // Si une première occurence est trouvée, une dernière aussi | ||
1532 | - list ($dd, $mm, $yyyy) = explode($symb, $all); | ||
1533 | - if (checkdate((int) $mm, (int) $dd, (int) $yyyy)) { | ||
1534 | - $all = "$yyyy-$mm-$dd"; | ||
1535 | - break; | ||
1536 | - } | ||
1537 | - } | ||
1538 | - } | ||
1539 | - // End datecheck | 1677 | + ///debug("post with data"); |
1540 | 1678 | ||
1541 | - $tabSearch = explode(' ', $all); | ||
1542 | - $merge = []; | ||
1543 | - foreach ($tabSearch as $word) { | ||
1544 | - $FieldConditions = [ | ||
1545 | - // Utilisation de array() pour pouvoir mettre plusieurs fois la meme clé. | ||
1546 | - // Exemple : la clé "Materiels.designation LIKE" pourra apparaître plusieurs fois si on fait une recherche de "mac pc" | ||
1547 | - // On aura : "Materiels.designation LIKE" => '%mac%' et "Materiels.designation LIKE" => '%pc%' | ||
1548 | - // Sinon on aurait uniquement eu : "Materiels.designation LIKE" => '%pc%' | ||
1549 | - array( | ||
1550 | - 'Materiels.designation LIKE' => '%' . $word . '%' | ||
1551 | - ), | ||
1552 | - array( | ||
1553 | - 'Materiels.numero_laboratoire LIKE' => '%' . $word . '%' | ||
1554 | - ), | ||
1555 | - array( | ||
1556 | - 'Materiels.numero_inventaire_organisme LIKE' => '%' . $word . '%' | ||
1557 | - ), | ||
1558 | - array( | ||
1559 | - 'Materiels.numero_inventaire_old LIKE' => '%' . $word . '%' | ||
1560 | - ), | ||
1561 | - array( | ||
1562 | - 'Materiels.numero_commande LIKE' => '%' . $word . '%' | ||
1563 | - ), | ||
1564 | - array( | ||
1565 | - 'Materiels.description LIKE' => '%' . $word . '%' | ||
1566 | - ), | ||
1567 | - /*TODO: comment gérer fournisseur ???*/ | ||
1568 | - array( | ||
1569 | - //'Materiels.fournisseur_id LIKE' => '%' . $word . '%' | ||
1570 | - //'Materiels.fournisseur_id =' => $word | ||
1571 | - 'Fournisseurs.nom LIKE' => '%' . $word . '%' | ||
1572 | - ), | ||
1573 | - array( | ||
1574 | - 'Materiels.nom_responsable LIKE' => '%' . $word . '%' | ||
1575 | - ), | ||
1576 | - array( | ||
1577 | - 'Materiels.email_responsable LIKE' => '%' . $word . '%' | ||
1578 | - ), | ||
1579 | - array( | ||
1580 | - 'Materiels.code_comptable LIKE' => '%' . $word . '%' | ||
1581 | - ), | ||
1582 | - array( | ||
1583 | - 'Materiels.numero_serie LIKE' => '%' . $word . '%' | ||
1584 | - ), | ||
1585 | - array( | ||
1586 | - 'Materiels.date_acquisition LIKE' => '%' . $word . '%' | ||
1587 | - ), | ||
1588 | - array( | ||
1589 | - 'Materiels.lieu_detail LIKE' => '%' . $word . '%' | ||
1590 | - ) | ||
1591 | - ]; | ||
1592 | - $merge = array_merge($merge, $FieldConditions); | 1679 | + // (1.1.1) Recherche globale (s_all_2 ou s_all) : |
1680 | + /* | ||
1681 | + * TODO: Distinguer la recherche globale dans TOUTES les tables (s_all_2) de la recherche générale seulement dans la table matériel (s_all) | ||
1682 | + * - Pour le moment, les résultats sont les mêmes pour ces 2 champs (normal, on fait le même traitement), c'est pas normal !!! | ||
1683 | + * - Recherche s_all ok : il faudrait juste améliorer la recherche dans toutes les tables liées au matériel (fournisseur, organismes, catégories...) | ||
1684 | + * - Recherche s_all_2 pas faite : à inventer... | ||
1685 | + * - Ajouter des tests de recherche (nombreux cas possibles) | ||
1686 | + */ | ||
1687 | + if ( $this->request->getData('s_all_2') || $this->request->getData('s_all') ) { | ||
1688 | + ///debug("recherche globale"); | ||
1689 | + $general_search_field_name = $this->request->getData('s_all_2') ? 's_all_2':'s_all'; | ||
1690 | + $conditions = $this->find_general($general_search_field_name); | ||
1691 | + /* | ||
1692 | + if ($this->request->getData('s_all_2')) | ||
1693 | + debug("s_all2, recherche globale (toutes les tables)"); | ||
1694 | + else if ($this->request->getData('s_all')) | ||
1695 | + debug("s_all, recherche générale dans la table des matériels (et tables associées)"); | ||
1696 | + */ | ||
1593 | } | 1697 | } |
1594 | - $generalFieldConditions = [ | ||
1595 | - 'OR' => $merge | ||
1596 | - ]; | ||
1597 | - } | ||
1598 | - | ||
1599 | - | ||
1600 | - /* | ||
1601 | - * SPECIFIC FIELDS | ||
1602 | - */ | ||
1603 | - //$specificFieldsConditions = NULL; | ||
1604 | - //$specificFieldsConditions = []; | ||
1605 | - | ||
1606 | - // au moins un champ specifique rempli ? | ||
1607 | - if ($this->request->getData('s_designation') !== null) { | ||
1608 | - // Materiel type | ||
1609 | - $matostype = $this->request->getData('s_matostype'); | ||
1610 | - $matostypeRequest = NULL; | ||
1611 | 1698 | ||
1612 | - switch ($matostype) { | ||
1613 | - // Administratif | ||
1614 | - case 'A': | ||
1615 | - $matostypeRequest['Materiels.materiel_administratif ='] = '1'; | ||
1616 | - break; | ||
1617 | - // Technique | ||
1618 | - case 'T': | ||
1619 | - $matostypeRequest['Materiels.materiel_technique ='] = '1'; | ||
1620 | - break; | ||
1621 | - // Admin et Tech | ||
1622 | - case 'AT': | ||
1623 | - $matostypeRequest['Materiels.materiel_administratif ='] = '1'; | ||
1624 | - $matostypeRequest['Materiels.materiel_technique ='] = '1'; | ||
1625 | - break; | ||
1626 | - // Admin ONLY | ||
1627 | - case 'AO': | ||
1628 | - $matostypeRequest['Materiels.materiel_administratif ='] = '1'; | ||
1629 | - $matostypeRequest['Materiels.materiel_technique ='] = '0'; | ||
1630 | - break; | ||
1631 | - // Tech ONLY | ||
1632 | - case 'TO': | ||
1633 | - $matostypeRequest['Materiels.materiel_administratif ='] = '0'; | ||
1634 | - $matostypeRequest['Materiels.materiel_technique ='] = '1'; | ||
1635 | - break; | 1699 | + // (1.1.2) recherche spécifique : 1 ou plusieurs champ(s) spécifique(s) (s_designation, ...) => recherche sur champs spécifiques |
1700 | + else { | ||
1701 | + ///debug("recherche de champs spécifiques dans la table des matériels"); | ||
1702 | + $conditions = $this->find_specific_fields(); | ||
1636 | } | 1703 | } |
1704 | + | ||
1705 | + // CONSTRUCTION DE LA REQUETE SQL COMPLETE = $specificFieldsConditions OR $generalFieldConditions (mais entre chaque champ, c'est un AND) | ||
1706 | + // by default, no sort | ||
1707 | + $conditions = [ $conditions, $conditionNotArchived ]; | ||
1708 | + //debug($conditions); exit; | ||
1709 | + | ||
1710 | + $lastResults = $this->Materiels->find('all', [ | ||
1711 | + 'conditions' => $conditions, | ||
1712 | + 'contain' => ['Categories', 'Fournisseurs'] | ||
1713 | + ])->limit(1000); | ||
1637 | 1714 | ||
1638 | - $periode_acquisitionRequest = NULL; | ||
1639 | - $date_acquisition = NULL; | ||
1640 | - | ||
1641 | - $salle = NULL; | ||
1642 | - $fournisseur = NULL; | ||
1643 | - if ($this->request->getData('s_periode_acquisition1') != '') | ||
1644 | - $periode_acquisitionRequest['Materiels.date_acquisition >='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_periode_acquisition1')))); | ||
1645 | - if ($this->request->getData('s_periode_acquisition2') != '') | ||
1646 | - $periode_acquisitionRequest['Materiels.date_acquisition <='] = date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_periode_acquisition2')))); | ||
1647 | - if ($this->request->getData('s_date_acquisition') != '') | ||
1648 | - $date_acquisition['Materiels.date_acquisition LIKE'] = '%' . date('Y-m-d', strtotime(str_replace('/', '-', $this->request->getData('s_date_acquisition')))) . '%'; | 1715 | + $this->paginate = [ |
1716 | + 'maxLimit' => 1000, | ||
1717 | + 'limit' => 1000 | ||
1718 | + ]; | ||
1719 | + //debug($lastResults); exit; | ||
1720 | + $_results = $this->paginate($lastResults); | ||
1721 | + $this->set(compact('_results')); | ||
1649 | 1722 | ||
1650 | - $montantRequest = []; | ||
1651 | - if ($this->request->getData('s_prix_ht_inf') != '') | ||
1652 | - $montantRequest['Materiels.prix_ht <='] = $this->request->getData('s_prix_ht_inf'); | ||
1653 | - if ($this->request->getData('s_prix_ht_sup') != '') | ||
1654 | - $montantRequest['Materiels.prix_ht >='] = $this->request->getData('s_prix_ht_sup'); | 1723 | + // pour l'export |
1724 | + $this->request->getSession()->write("result", $lastResults->toArray()); | ||
1655 | 1725 | ||
1656 | - if ($this->request->getData('s_salle') !== null && $this->request->getData('s_salle') != '') | ||
1657 | - $salle['Materiels.lieu_detail LIKE'] = '%' . $this->request->getData('s_salle') . '%'; | 1726 | + } // $has_data |
1727 | + | ||
1728 | + // (1.2) POST without data | ||
1729 | + else { | ||
1730 | + ///debug("post without data => do nothing"); | ||
1731 | + // with sort field => trier un résultat | ||
1732 | + // without sort field => c'est la première visite de cette vue | ||
1733 | + } | ||
1734 | + | ||
1735 | + } | ||
1736 | + | ||
1737 | + // (2) no POST | ||
1738 | + else { | ||
1739 | + ///debug("no POST"); | ||
1740 | + | ||
1741 | + // (2.1) AVEC critère de tri (sort) => seulement demandé un tri du résultat, no data posted | ||
1742 | + /* | ||
1743 | + * TODO: on pourrait faire autrement: | ||
1744 | + * A chaque fois qu'on fait un tri sur une colonne, | ||
1745 | + * au lieu de sauvegarder le résultat de la recherche dans une variable de session puis recharger ce résultat en mémoire pour le trier, | ||
1746 | + * il vaudrait mieux relancer la recherche à chaque fois, mais juste changer le critère de tri, c'est plus simple, plus naturel | ||
1747 | + */ | ||
1748 | + if ($resultTri !== null && strstr($this->request->here(), 'sort') != false && strstr($this->request->here(), 'direction') != false) { | ||
1658 | 1749 | ||
1659 | - if ($this->request->getData('s_fournisseur_id') !== null && $this->request->getData('s_fournisseur_id') != '') | ||
1660 | - $fournisseur['Materiels.fournisseur_id ='] = $this->request->getData('s_fournisseur'); | 1750 | + $foundMateriel = []; |
1661 | 1751 | ||
1662 | - /* TODO: (EP) NOUVEAU CODE EN COURS POUR REMPLACER LE CODE REDONDANT CI-APRES */ | ||
1663 | - $designation = NULL; | ||
1664 | - if ($this->request->getData('s_designation')) { | ||
1665 | - //$designation_words = []; | ||
1666 | - $designation_words = explode (" ", $this->request->getData('s_designation')); | ||
1667 | - $designation = str_replace(" ","%", $this->request->getData('s_designation')); | ||
1668 | - /* | ||
1669 | - $designation_conditions = []; | ||
1670 | - for ($i = 0; $i < count($designation); $i++) { | ||
1671 | - //$designation_conditions['Materiels.designation LIKE'] = '%'.$designation_words[$i].'%'); | ||
1672 | - } | ||
1673 | - */ | ||
1674 | - $designation = [ 'Materiels.designation LIKE' => '%'.$designation.'%' ]; | 1752 | + foreach ($resultTri as $r) { |
1753 | + array_push($foundMateriel, $r->id); | ||
1675 | } | 1754 | } |
1676 | - | ||
1677 | - // Putting all these specific fields together | ||
1678 | - $specificFieldsConditions = [ | ||
1679 | - | ||
1680 | - //'Materiels.designation LIKE' => '%' . $designation[0] . '%', | ||
1681 | - //'Materiels.designation LIKE' => '%' . $this->request->getData('s_designation'). '%', | ||
1682 | - $designation, | ||
1683 | - //'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', | ||
1684 | - $this->getConditionForField('numero_laboratoire'), | ||
1685 | - $this->getConditionForField('numero_commande'), | ||
1686 | - $date_acquisition, | ||
1687 | - $periode_acquisitionRequest, | ||
1688 | - $this->getConditionForFieldNumber('prix_ht'), | ||
1689 | - $montantRequest, | ||
1690 | - $this->getConditionForFieldNumber('sur_categorie_id'), | ||
1691 | - $this->getConditionForFieldNumber('categorie_id'), | ||
1692 | - $this->getConditionForFieldNumber('sous_categorie_id'), | ||
1693 | - $this->getConditionForField('nom_responsable'), | ||
1694 | - $this->getConditionForField('numero_inventaire_organisme'), | ||
1695 | - $this->getConditionForField('numero_inventaire_old'), | ||
1696 | - $this->getConditionForFieldNumber('groupes_metier_id'), | ||
1697 | - $this->getConditionForFieldNumber('groupes_thematique_id'), | ||
1698 | - $salle, | ||
1699 | - //$fournisseur, | ||
1700 | - $this->getConditionForFieldNumber('fournisseur_id'), | ||
1701 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1702 | - $matostypeRequest, | ||
1703 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1704 | - $matostypeRequest, | ||
1705 | - $this->getConditionForField('status'), | ||
1706 | - | ||
1707 | - ]; | ||
1708 | - /* (EP) CODE REDONDANT INUTILEMENT, REMPLACÉ PAR LE CODE CI-DESSUS, BIEN PLUS COURT, qui en plus ne marchait pas !!! | ||
1709 | - $designation = explode (" ", $this->request->getData('s_designation')); | ||
1710 | - //debug($designation); | ||
1711 | - if (count($designation) == 1 ) { | ||
1712 | - $specificFieldsConditions = [ | ||
1713 | - 'Materiels.designation LIKE' => '%' . $designation[0] . '%', | ||
1714 | - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', | ||
1715 | - $this->getConditionForField('numero_commande'), | ||
1716 | - $date_acquisition, | ||
1717 | - $periode_acquisitionRequest, | ||
1718 | - $this->getConditionForFieldNumber('prix_ht'), | ||
1719 | - $montantRequest, | ||
1720 | - $this->getConditionForFieldNumber('sur_categorie_id'), | ||
1721 | - $this->getConditionForFieldNumber('categorie_id'), | ||
1722 | - $this->getConditionForFieldNumber('sous_categorie_id'), | ||
1723 | - $this->getConditionForField('nom_responsable'), | ||
1724 | - $this->getConditionForField('numero_inventaire_organisme'), | ||
1725 | - $this->getConditionForField('numero_inventaire_old'), | ||
1726 | - $this->getConditionForFieldNumber('groupes_metier_id'), | ||
1727 | - $this->getConditionForFieldNumber('groupes_thematique_id'), | ||
1728 | - $salle, | ||
1729 | - //$fournisseur, | ||
1730 | - $this->getConditionForFieldNumber('fournisseur_id'), | ||
1731 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1732 | - $matostypeRequest, | ||
1733 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1734 | - $matostypeRequest | ||
1735 | - ]; | 1755 | + $res = $this->Materiels->find('all', [ |
1756 | + 'limit' => 1000 | ||
1757 | + ]); | ||
1758 | + for ($i = 0; $i < sizeof($foundMateriel); $i ++) { | ||
1759 | + $res->orWhere([ | ||
1760 | + 'id =' => $foundMateriel[$i] | ||
1761 | + ]); | ||
1736 | } | 1762 | } |
1737 | - else if(count($designation) == 2 ) { | ||
1738 | - //debug($designation); | ||
1739 | - $specificFieldsConditions = [ | ||
1740 | - 'Materiels.designation LIKE' => '%' . $designation[0]. '%', | ||
1741 | - 'Materiels.designation LIKE' => '%' . $designation[1]. '%', | ||
1742 | - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', | ||
1743 | - $this->getConditionForField('numero_commande'), | ||
1744 | - $date_acquisition, | ||
1745 | - $periode_acquisitionRequest, | ||
1746 | - $this->getConditionForFieldNumber('prix_ht'), | ||
1747 | - $montantRequest, | ||
1748 | - $this->getConditionForFieldNumber('sur_categorie_id'), | ||
1749 | - $this->getConditionForFieldNumber('categorie_id'), | ||
1750 | - $this->getConditionForFieldNumber('sous_categorie_id'), | ||
1751 | - $this->getConditionForField('nom_responsable'), | ||
1752 | - $this->getConditionForField('numero_inventaire_organisme'), | ||
1753 | - $this->getConditionForField('numero_inventaire_old'), | ||
1754 | - $this->getConditionForFieldNumber('groupes_metier_id'), | ||
1755 | - $this->getConditionForFieldNumber('groupes_thematique_id'), | ||
1756 | - $salle, | ||
1757 | - //$fournisseur, | ||
1758 | - $this->getConditionForFieldNumber('fournisseur_id'), | ||
1759 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1760 | - $matostypeRequest, | ||
1761 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1762 | - $matostypeRequest | ||
1763 | - ]; | ||
1764 | - }else if(count($designation) == 3 ) { | ||
1765 | - $specificFieldsConditions = [ | ||
1766 | - 'Materiels.designation LIKE' => '%' . $designation[0] . '%', | ||
1767 | - 'Materiels.designation LIKE' => '%' . $designation[1] . '%', | ||
1768 | - 'Materiels.designation LIKE' => '%' . $designation[2] . '%', | ||
1769 | - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', | ||
1770 | - $this->getConditionForField('numero_commande'), | ||
1771 | - $date_acquisition, | ||
1772 | - $periode_acquisitionRequest, | ||
1773 | - $this->getConditionForFieldNumber('prix_ht'), | ||
1774 | - $montantRequest, | ||
1775 | - $this->getConditionForFieldNumber('sur_categorie_id'), | ||
1776 | - $this->getConditionForFieldNumber('categorie_id'), | ||
1777 | - $this->getConditionForFieldNumber('sous_categorie_id'), | ||
1778 | - $this->getConditionForField('nom_responsable'), | ||
1779 | - $this->getConditionForField('numero_inventaire_organisme'), | ||
1780 | - $this->getConditionForField('numero_inventaire_old'), | ||
1781 | - $this->getConditionForFieldNumber('groupes_metier_id'), | ||
1782 | - $this->getConditionForFieldNumber('groupes_thematique_id'), | ||
1783 | - $salle, | ||
1784 | - //$fournisseur, | ||
1785 | - $this->getConditionForFieldNumber('fournisseur_id'), | ||
1786 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1787 | - $matostypeRequest, | ||
1788 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1789 | - $matostypeRequest | ||
1790 | - ]; | ||
1791 | - }else { | ||
1792 | - $specificFieldsConditions = [ | ||
1793 | - 'Materiels.designation LIKE' => '%' . $this->request->getData('s_designation'). '%', | ||
1794 | - 'Materiels.numero_laboratoire LIKE' => '%' . $this->request->getData('s_numero_laboratoire') . '%', | ||
1795 | - $this->getConditionForField('numero_commande'), | ||
1796 | - $date_acquisition, | ||
1797 | - $periode_acquisitionRequest, | ||
1798 | - $this->getConditionForFieldNumber('prix_ht'), | ||
1799 | - $montantRequest, | ||
1800 | - $this->getConditionForFieldNumber('sur_categorie_id'), | ||
1801 | - $this->getConditionForFieldNumber('categorie_id'), | ||
1802 | - $this->getConditionForFieldNumber('sous_categorie_id'), | ||
1803 | - $this->getConditionForField('nom_responsable'), | ||
1804 | - $this->getConditionForField('numero_inventaire_organisme'), | ||
1805 | - $this->getConditionForField('numero_inventaire_old'), | ||
1806 | - $this->getConditionForFieldNumber('groupes_metier_id'), | ||
1807 | - $this->getConditionForFieldNumber('groupes_thematique_id'), | ||
1808 | - $salle, | ||
1809 | - //$fournisseur, | ||
1810 | - $this->getConditionForFieldNumber('fournisseur_id'), | ||
1811 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1812 | - $matostypeRequest, | ||
1813 | - $this->getConditionForFieldNumber('organisme_id'), | ||
1814 | - $matostypeRequest | ||
1815 | - ]; | ||
1816 | - } | ||
1817 | - */ | ||
1818 | 1763 | ||
1819 | - /* | ||
1820 | - // STATUS : CREATED, VALIDATED, ARCHIVED... | ||
1821 | - //debug($specificFieldsConditions); | ||
1822 | - //if ($this->request->getData('s_status') != '') | ||
1823 | - if ($this->request->getData('s_status')) | ||
1824 | - //debug("status is" . $this->request->getData('s_status')); | ||
1825 | - array_push($specificFieldsConditions, | ||
1826 | - [ 'Materiels.status =' => $this->request->getData('s_status') ] | ||
1827 | - ); | ||
1828 | - */ | ||
1829 | - } | ||
1830 | - | ||
1831 | - | ||
1832 | - // CONSTRUCTION DE LA REQUETE SQL COMPLETE = $specificFieldsConditions OR $generalFieldConditions (mais entre chaque champ, c'est un AND) | ||
1833 | - // by default, no sort | ||
1834 | - if ($this->request->getData('s_all_2') !== null && $this->request->getData('s_all_2') != '') | ||
1835 | - $conditions = [ | ||
1836 | - $generalFieldConditions, | ||
1837 | - $conditionNotArchived | ||
1838 | - ]; | ||
1839 | - else if ($this->request->getData('s_all') !== null && $this->request->getData('s_all') != '') | ||
1840 | - $conditions = [ | ||
1841 | - $generalFieldConditions, | ||
1842 | - $conditionNotArchived | 1764 | + $this->paginate = [ |
1765 | + 'maxLimit' => 1000, | ||
1766 | + 'limit' => 1000 | ||
1843 | ]; | 1767 | ]; |
1844 | - else | ||
1845 | - $conditions = [ | ||
1846 | - $specificFieldsConditions, | ||
1847 | - $conditionNotArchived | ||
1848 | - ]; | ||
1849 | - | ||
1850 | - $lastResults = $this->Materiels->find('all', [ | ||
1851 | - 'conditions' => $conditions, | ||
1852 | - 'contain' => ['Categories', 'Fournisseurs'] | ||
1853 | - ])->limit(1000); | ||
1854 | - | ||
1855 | - $this->paginate = [ | ||
1856 | - 'maxLimit' => 1000, | ||
1857 | - 'limit' => 1000 | ||
1858 | - ]; | ||
1859 | - //debug($lastResults); exit; | ||
1860 | - $_results = $this->paginate($lastResults); | ||
1861 | - $this->set(compact('_results')); | ||
1862 | - | ||
1863 | - // pour l'export | ||
1864 | - $this->request->getSession()->write("result", $lastResults->toArray()); | ||
1865 | - | ||
1866 | - } // end if() | ||
1867 | - else if ($resultTri !== null && strstr($this->request->here(), 'sort') != false && strstr($this->request->here(), 'direction') != false) { | ||
1868 | - $findedMateriel = []; | ||
1869 | - | ||
1870 | - foreach ($resultTri as $r) { | ||
1871 | - array_push($findedMateriel, $r->id); | 1768 | + $_results = $this->paginate($res); |
1769 | + $this->set(compact('_results')); | ||
1770 | + | ||
1771 | + // pour l'export | ||
1772 | + $this->request->getSession()->write("result", $res->toArray()); | ||
1872 | } | 1773 | } |
1873 | - $res = $this->Materiels->find('all', [ | ||
1874 | - 'limit' => 1000 | ||
1875 | - ]); | ||
1876 | - for ($i = 0; $i < sizeof($findedMateriel); $i ++) { | ||
1877 | - $res->orWhere([ | ||
1878 | - 'id =' => $findedMateriel[$i] | ||
1879 | - ]); | 1774 | + |
1775 | + // (2.2) SANS critère de tri => c'est la première fois qu'on vient sur la vue, rien à faire de plusl | ||
1776 | + else { | ||
1777 | + ///debug("1ère venue sur la vue"); | ||
1880 | } | 1778 | } |
1881 | 1779 | ||
1882 | - $this->paginate = [ | ||
1883 | - 'maxLimit' => 1000, | ||
1884 | - 'limit' => 1000 | ||
1885 | - ]; | ||
1886 | - $_results = $this->paginate($res); | ||
1887 | - $this->set(compact('_results')); | ||
1888 | - | ||
1889 | - // pour l'export | ||
1890 | - $this->request->getSession()->write("result", $res->toArray()); | ||
1891 | - } | ||
1892 | - } | 1780 | + } // no POST |
1781 | + | ||
1782 | + } // find() | ||
1783 | + | ||
1784 | + | ||
1785 | + | ||
1786 | + | ||
1893 | 1787 | ||
1894 | /** | 1788 | /** |
1895 | * group update status + exportAll | 1789 | * group update status + exportAll |