Commit 44ce1b3511aeaa2dcb1d65766750376325776dfb
1 parent
c7f3b590
Exists in
master
and in
2 other branches
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, ... ],
Showing
10 changed files
with
208 additions
and
59 deletions
Show diff stats
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) | ... | ... |
... | ... | @@ -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. | ... | ... |
... | ... | @@ -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 | ... | ... |
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->element('menu_form', [ |
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->element('menu_form', [ |
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->element('menu_form', [ |
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->element('menu_form', [ |
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"); | ... | ... |
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(), | ... | ... |