Commit 44ce1b3511aeaa2dcb1d65766750376325776dfb

Authored by Etienne Pallier
1 parent c7f3b590
Exists in master and in 2 other branches dev, dev-IRAP

Bugfix, refactorisation, et new scripts utiles

- bugfix update domaine quand categorie sélectionnée (fonction getFromCategorie() de SurCategoriesController.php, utilisée par materiels/add et materiels/edit) => ne fonctionnait plus depuis des années !!!!
- refactorisation du code beforeSave() dans src/Model/Table/MaterielsTable.php
- nouveau script TEST_WEB pour lancer le serveur web de développement (pratique, pas besoin de Apache)
- nouveau script SHOW_LOGS pour voir facilement le contenu des logs

IMPORTANT:
			- Pour connaitre la version actuelle, taper "./VERSION"
			- Pour mettre à jour le code, utiliser ./UPDATE depuis la racine du projet (ne plus se contenter de faire "git pull")
			(UPDATE fait "git pull" mais il met aussi à jour la BD, seulement si nécessaire)
			- Pour s'assurer que la version récupérée est stable, taper "./TESTS.sh" (tout doit passer ok)
			- En cas de problème, taper ./SHOW_LOGS pour voir si les logs d'erreur peuvent aider
			- Pour que "./TESTS.sh" s'exécute sans "deprecated error",
			il faut ajouter cette ligne dans la clé 'Error' de votre fichier config/app.php
			    'Error' => [
			    		...
			        'errorLevel' => E_ALL & ~E_USER_DEPRECATED,
			       	...
			    ],
README.md
... ... @@ -53,17 +53,21 @@ Logiciel testé et validé sur les configurations suivantes :
53 53  
54 54 VERSION ACTUELLE
55 55  
56   -Date: 24/01/2019
57   -Version: 2.10.6
  56 +Date: 01/02/2019
  57 +Version: 2.10.7
58 58 Author: EP
59   - Mise à jour du fichier VERSION pour donner bcp plus d'infos
  59 + Bugfix, refactorisation, et nouveaux scripts utiles
  60 + - bugfix update domaine quand categorie sélectionnée (fonction getFromCategorie() de SurCategoriesController.php, utilisée par materiels/add et materiels/edit) => ne fonctionnait plus depuis des années !!!!
  61 + - refactorisation du code beforeSave() dans src/Model/Table/MaterielsTable.php
  62 + - nouveau script TEST_WEB pour lancer le serveur web de développement (pratique, pas besoin de Apache)
  63 + - nouveau script SHOW_LOGS pour voir facilement le contenu des logs
60 64  
61 65 IMPORTANT:
62 66 - Pour connaitre la version actuelle, taper "./VERSION"
63   - - Pour mettre à jour le code, ne plus se contenter de faire "git pull",
64   - mais utiliser plutot ./UPDATE.sh (depuis la racine du projet)
65   - qui met aussi à jour la BD (seulement si nécessaire)
66   - - Pour s'assurer que la version récupérée est stable, taper "./TESTS.sh"
  67 + - Pour mettre à jour le code, utiliser ./UPDATE depuis la racine du projet (ne plus se contenter de faire "git pull")
  68 + (UPDATE fait "git pull" mais il met aussi à jour la BD, seulement si nécessaire)
  69 + - Pour s'assurer que la version récupérée est stable, taper "./TESTS.sh" (tout doit passer ok)
  70 + - En cas de problème, taper ./SHOW_LOGS pour voir si les logs d'erreur peuvent aider
67 71 - Pour que "./TESTS.sh" s'exécute sans "deprecated error",
68 72 il faut ajouter cette ligne dans la clé 'Error' de votre fichier config/app.php
69 73 'Error' => [
... ... @@ -92,7 +96,7 @@ CHANGEMENTS IMPORTANTS (MILESTONES)
92 96 Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/commits/master
93 97  
94 98 -----------------------------------------------------------------------------------------------------------
95   -23/01/2019 Version: 2.10.1, 2, 3, 4, et 5 (EP)
  99 +23/01/2019 Version: 2.10.1, 2, 3, 4, et 6 (EP)
96 100 Mise à jour framework cakephp et amélioration recherche matériel et bugfix ldap:
97 101 - Mise à jour du framework cakephp à la version courante : passage de v3.5 à v3.7
98 102 ($ php composer.phar require --update-with-dependencies "cakephp/cakephp:3.7.*")
... ... @@ -106,7 +110,7 @@ Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/c
106 110 - Complète refactorisation de MaterielsController::find(), y avait besoin !
107 111 - Ajout de tests
108 112 - ...
109   - - Nouveaux fichiers VERSION.sh, UPDATE.sh, et mise à jour de TESTS.sh
  113 + - Nouveaux fichiers VERSION, UPDATE.sh, et mise à jour de TESTS.sh
110 114 - LDAP authentified bugfix
111 115  
112 116 15/01/2019 Version: 2.9.2 (EP)
... ...
README_cakephp.md 0 → 100644
... ... @@ -0,0 +1,51 @@
  1 +# CakePHP Application Skeleton
  2 +
  3 +[![Build Status](https://img.shields.io/travis/cakephp/app/master.svg?style=flat-square)](https://travis-ci.org/cakephp/app)
  4 +[![Total Downloads](https://img.shields.io/packagist/dt/cakephp/app.svg?style=flat-square)](https://packagist.org/packages/cakephp/app)
  5 +
  6 +A skeleton for creating applications with [CakePHP](https://cakephp.org) 3.x.
  7 +
  8 +The framework source code can be found here: [cakephp/cakephp](https://github.com/cakephp/cakephp).
  9 +
  10 +## Installation
  11 +
  12 +1. Download [Composer](https://getcomposer.org/doc/00-intro.md) or update `composer self-update`.
  13 +2. Run `php composer.phar create-project --prefer-dist cakephp/app [app_name]`.
  14 +
  15 +If Composer is installed globally, run
  16 +
  17 +```bash
  18 +composer create-project --prefer-dist cakephp/app
  19 +```
  20 +
  21 +In case you want to use a custom app dir name (e.g. `/myapp/`):
  22 +
  23 +```bash
  24 +composer create-project --prefer-dist cakephp/app myapp
  25 +```
  26 +
  27 +You can now either use your machine's webserver to view the default home page, or start
  28 +up the built-in webserver with:
  29 +
  30 +```bash
  31 +bin/cake server -p 8765
  32 +```
  33 +
  34 +Then visit `http://localhost:8765` to see the welcome page.
  35 +
  36 +## Update
  37 +
  38 +Since this skeleton is a starting point for your application and various files
  39 +would have been modified as per your needs, there isn't a way to provide
  40 +automated upgrades, so you have to do any updates manually.
  41 +
  42 +## Configuration
  43 +
  44 +Read and edit `config/app.php` and setup the `'Datasources'` and any other
  45 +configuration relevant for your application.
  46 +
  47 +## Layout
  48 +
  49 +The app skeleton uses a subset of [Foundation](http://foundation.zurb.com/) (v5) CSS
  50 +framework by default. You can, however, replace it with any other library or
  51 +custom styles.
... ...
SHOW_LOGS 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +#!/usr/bin/env bash
  2 +
  3 +echo
  4 +echo "Fichiers log dans logs/ :"
  5 +
  6 +echo
  7 +echo "*****************"
  8 +echo "- error.log :"
  9 +echo "*****************"
  10 +echo
  11 +tail -n30 logs/error.log
  12 +
  13 +echo
  14 +echo "*****************"
  15 +echo "- cli-error.log :"
  16 +echo "*****************"
  17 +echo
  18 +tail -n30 logs/cli-error.log
... ...
TEST_WEB 0 → 100644
... ... @@ -0,0 +1,8 @@
  1 +#!/usr/bin/env bash
  2 +
  3 +echo
  4 +echo "CONNECTEZ-VOUS MAINTENANT A http://localhost:8765"
  5 +echo
  6 +echo
  7 +
  8 +bin/cake server -p 8765
... ...
UPDATE 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +#!/usr/bin/env bash
  2 +
  3 +cd install/
  4 +./update.sh
... ...
src/Controller/SurCategoriesController.php
... ... @@ -180,4 +180,47 @@ class SurCategoriesController extends AppController
180 180 'action' => 'index'
181 181 ]);
182 182 }
  183 +
  184 +
  185 + // used by Materiels view ADD/EDIT (form), on categorie change (javascript)
  186 + public function getFromCategorie() {
  187 + //debug($this->request->data);
  188 + //$categorie_id = isset($this->request->data['Materiel']['s_categorie_id']) ? $this->request->data['Materiel']['s_categorie_id'] : $this->request->data['Materiel']['categorie_id'];
  189 + $selected_categorie_id = ($this->request->getData('s_categorie_id') !== null) ? $this->request->getData('s_categorie_id') : $categorie_id = $this->request->getData('categorie_id');
  190 +
  191 + //debug($categorie_id);
  192 + //$categorie_id = $this->request->data['Materiel']['categorie_id'];
  193 + //$categorie_id = "33";
  194 + //$categ = ClassRegistry::init('Categorie');
  195 + //$categ = TableRegistry::get('Categories')->get($materiel->photo_id)->get('type_doc');
  196 + //$categ = TableRegistry::get('Categories');
  197 +
  198 + /*
  199 + $surcategorie = $categ->find('first', array(
  200 + 'conditions' => array('Categorie.id' => $categorie_id),
  201 + 'fields' => array('Categorie.sur_categorie_id'),
  202 + 'recursive' => -1
  203 + ))->first();
  204 + */
  205 +
  206 + $selected_categorie = TableRegistry::get('Categories')
  207 + ->find()
  208 + ->where([
  209 + 'id' => $selected_categorie_id
  210 + //'id' => '5'
  211 + ])
  212 + ->first();
  213 + //debug($surcategorie);
  214 + //$surcategorie = $surcategorie->sur_categorie_id;
  215 + $Sur_categ_id = $selected_categorie->sur_categorie_id;
  216 + //debug($Sur_categ_id);
  217 + //$this->set('surcategorie',$surcategorie['Categorie']['sur_categorie_id']);
  218 + //$this->set('surcategorie',$surcategorie);
  219 + //$this->set('surcategorie',"5");
  220 + //$this->set('Sur_categ_id',"5");
  221 + $this->set('Sur_categ_id', $Sur_categ_id);
  222 + //$this->layout = 'ajax';
  223 + $this->viewBuilder()->layout = 'ajax';
  224 + }
  225 +
183 226 }
... ...
src/Model/Table/MaterielsTable.php
... ... @@ -360,58 +360,64 @@ class MaterielsTable extends AppTable
360 360  
361 361 public function beforeSave($event, $entity, $options)
362 362 {
363   - if (! $entity->get('administrer')) {
364   - if (! empty($entity->get('nom_responsable')) && empty($entity->get('nom_responsable'))) {
  363 + if ( ! $entity->get('administrer') ) {
  364 + /* (EP) TODO: ajouter champ nom_ancien_responsable
  365 + Ca ressemble fort à un bug ce truc !!! (mais je suis pas encore sur de mon bugfix)
  366 +
  367 + if ( !empty($entity->get('nom_responsable')) && empty($entity->get('nom_responsable')) ) {
365 368 $entity->set('nom_responsable', $entity->get('nom_ancien_responsable'));
  369 +
  370 + Une fois le champ nom_ancien_responsable ajouté, on pourra activer ce code:
  371 + // Garder trace du nom du responsable précédent si jamais on change le nom du reponsable
  372 + // Utile aussi si un responsable n'existe plus dans le ldap, on aura toujours son nom dans la BD
  373 + if ( !empty($entity->get('nom_responsable')) && empty($entity->get('nom_ancien_responsable')) ) {
  374 + $entity->set('nom_ancien_responsable', $entity->get('nom_responsable'));
366 375 }
  376 + */
367 377 // numero_laboratoire generator (QC changed this in Jan 2015)
368 378 $configuration = TableRegistry::get('Configurations')->find()
369 379 ->where([
370 380 'id =' => 1
371   - ])
372   - ->first();
373   - if ($configuration->numero_labo_sans_annee) {
374   - if (empty($entity->get('numero_laboratoire'))) {
375   - $labShortName = $configuration->labNameShort;
376   - $num = TableRegistry::get('Materiels')->find('all', [
377   - 'fields' => [
378   - 'numero_laboratoire'
379   - ],
380   - 'conditions' => [
381   - 'Materiels.numero_laboratoire LIKE' => $labShortName . '%'
382   - ],
383   - 'order' => [
384   - 'Materiels.numero_laboratoire DESC'
385   - ]
386   - ])->first()['numero_laboratoire'];
387   - error_log($num);
388   - $newId = substr($num, - 4) + 1;
389   - error_log($newId);
390   - $labNumber = $labShortName . '-' . sprintf("%04d", $newId);
391   - $entity->set('numero_laboratoire', $labNumber);
392   - }
393   - } else {
394   - if (empty($entity->get('numero_laboratoire')) && ! empty($entity->get('date_acquisition'))) {
395   - $year = substr($entity->get('date_acquisition'), 6, 4);
  381 + ]) -> first();
  382 +
  383 + // (EP) Set new $labNumber (laboratory number) for this new materiel
  384 + $WITH_YEAR = FALSE;
  385 + $DATE_GIVEN = TRUE;
  386 + if (!$configuration->numero_labo_sans_annee) {
  387 + $WITH_YEAR = TRUE;
  388 + $DATE_GIVEN = !empty($entity->get('date_acquisition'));
  389 + }
  390 + if ( empty($entity->get('numero_laboratoire')) && $DATE_GIVEN ) {
  391 + if ($WITH_YEAR) {
  392 + $year=substr($entity->get('date_acquisition'), 6, 4);
396 393 if (strlen($year) == 2) {
397 394 $year = '20' . $year;
398 395 }
399   - $labShortName = $configuration->labNameShort;
400   - $num = TableRegistry::get('Materiels')->find('all', [
401   - 'fields' => [
402   - 'numero_laboratoire'
403   - ],
404   - 'conditions' => [
405   - 'Materiels.numero_laboratoire LIKE' => $labShortName . '-' . $year . '%'
406   - ],
407   - 'order' => [
408   - 'Materiels.numero_laboratoire DESC'
409   - ]
410   - ])->first()['numero_laboratoire'];
411   - $newId = substr($num, - 4) + 1;
412   - $labNumber = $labShortName . '-' . $year . '-' . sprintf("%04d", $newId);
413   - $entity->set('numero_laboratoire', $labNumber);
414 396 }
  397 + $labShortName = $configuration->labNameShort;
  398 + $numero_laboratoire = $labShortName;
  399 + $WITH_YEAR && $numero_laboratoire .= '-' . $year;
  400 + $num = TableRegistry::get('Materiels')->find('all', [
  401 + 'fields' => [
  402 + 'numero_laboratoire'
  403 + ],
  404 + 'conditions' => [
  405 + 'Materiels.numero_laboratoire LIKE' => $numero_laboratoire . '%'
  406 + ],
  407 + 'order' => [
  408 + 'Materiels.numero_laboratoire DESC'
  409 + ]
  410 + ])->first()['numero_laboratoire'];
  411 + //error_log($num);
  412 + //var_dump($num);
  413 + //debug($num); exit;
  414 + #$newId = substr($num, -4) + 1;
  415 + # To avoid a "warning: a non-numeric value encountered" eror:
  416 + $newId = (int)substr($num, -4) + 1;
  417 + //error_log($newId);
  418 + //debug($newId);
  419 + $labNumber = $numero_laboratoire . '-' . sprintf("%04d", $newId);
  420 + $entity->set('numero_laboratoire', $labNumber);
415 421 }
416 422 }
417 423 if (empty($entity->get('date_acquisition'))) {
... ...
src/Template/Materiels/add.ctp
... ... @@ -19,7 +19,7 @@ if (isset($cpMateriel)) {
19 19 $Site_id = $cpMateriel->site_id;
20 20 } else {
21 21 $Designation = NULL;
22   - $Sur_categ_id = NULL;
  22 + if (!isset($Sur_categ_id)) $Sur_categ_id = NULL;
23 23 $Categ_id = NULL;
24 24 $Sous_categ_id = NULL;
25 25 $Description = NULL;
... ... @@ -35,6 +35,7 @@ if (isset($cpMateriel)) {
35 35 $Lieu_detail = NULL;
36 36 $Site_id = 9;
37 37 }
  38 +//debug($Sur_categ_id)
38 39 ?>
39 40  
40 41 <div class="materiels form">
... ... @@ -287,6 +288,10 @@ echo $this-&gt;element(&#39;menu_form&#39;, [
287 288 ?>
288 289 </div>
289 290  
  291 +
  292 +
  293 +
  294 +
290 295 <?php
291 296 /**
292 297 * GESTION DES EVENEMENTS SUR LES DOMAINES/CATEGORIES/SOUS-CATEGORIES
... ... @@ -304,7 +309,10 @@ echo $this-&gt;element(&#39;menu_form&#39;, [
304 309 */
305 310 ?>
306 311  
307   -<?php // Alors oui, c'est pas joli, mais CakePHP a eu l'EXCELENTE IDEE de TOUT inclure dans la balise <head> du site ... Et bien entendu c'est pas pris en compte ici .... Halleluja bordel (#JeremyFerrary) ?>
  312 +<?php
  313 +// Alors oui, c'est pas joli, mais CakePHP a eu l'EXCELENTE IDEE de TOUT inclure dans la balise <head> du site
  314 +// et c'est pas pris en compte ici
  315 +?>
308 316 <?=$this->Html->script('jquery-1.8.12')?>
309 317 <?=$this->Html->script('script')?>
310 318 <?=$this->Html->script('DatepickerConfig')?>
... ... @@ -313,6 +321,10 @@ echo $this-&gt;element(&#39;menu_form&#39;, [
313 321 <script type="text/javascript">
314 322  
315 323 /**
  324 + * updateSelectOptionsFromAnother() is defined in webroot/js/script.js
  325 + */
  326 +
  327 +/**
316 328 * Event DOMAINE change
317 329 *
318 330 * Sur sélection d'un DOMAINE ==> update CATEGORIES + empty SOUS-CATEGORIES
... ... @@ -327,15 +339,14 @@ echo $this-&gt;element(&#39;menu_form&#39;, [
327 339 $(document).ready(function() {
328 340 $("#sur-categorie-id").bind("change", function(event) {
329 341 var domaineId = $("#sur-categorie-id :selected").val();
330   - var domaineresp= "<?=$domaineresp?>";
  342 + var domaineresp = "<?=$domaineresp?>";
331 343  
332 344 var role= "<?=$role?>";
333   - if(domaineId== domaineresp){
  345 + if(domaineId == domaineresp){
334 346 if (role == "Responsable") $("#metro").css("display", "block");
335 347 else $("#metro").css("display", "none");
336 348 }
337   - else
338   - $("#metro").css("display", "none");
  349 + else $("#metro").css("display", "none");
339 350  
340 351 if (domaineId=="") updateSelectOptionsFromAnother("#categorie-id", "#sur-categorie-id", "Categories/getAll", "Choisir une catégorie");
341 352 else updateSelectOptionsFromAnother("#categorie-id", "#sur-categorie-id", "Categories/getBySurCategorie", "Choisir une catégorie");
... ...
src/Template/SurCategories/get_from_categorie.ctp 0 → 100644
... ... @@ -0,0 +1,4 @@
  1 +<?php
  2 +//echo $surcategorie;
  3 +echo $Sur_categ_id;
  4 +?>
0 5 \ No newline at end of file
... ...
webroot/js/script.js
... ... @@ -34,8 +34,8 @@ function emptySelectOptions(selectFieldId, defaultOption) {
34 34 */
35 35 function updateSelectOptionsFromAnother(selectId, otherSelectId, requestName, emptyOptionName) {
36 36 var reg=new RegExp("(materiels).*$","g");
37   - var currentURL = window.location.pathname;
38   - var newURL = currentURL.replace(reg, requestName);
  37 + var currentURL = window.location.pathname; // ex: /materiels/add
  38 + var newURL = currentURL.replace(reg, requestName); // ex: /sur-categories/getFromCategorie
39 39 $.ajax({
40 40 async:true,
41 41 data:$(otherSelectId).serialize(),
... ...