EmpruntsTable.php 5.59 KB
<?php
namespace App\Model\Table;

use App\Model\Entity\Emprunt;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;

/**
 * Emprunts Model
 *
 * @property \Cake\ORM\Association\BelongsTo $Materiels
 */
class EmpruntsTable extends Table
{

    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('emprunts');
        $this->displayField('id');
        $this->primaryKey('id');

        $this->addBehavior('Timestamp');

        $this->belongsTo('Materiels', [
            'foreignKey' => 'materiel_id',
            'joinType' => 'INNER'
        ]);
    }

    /**
     * Default validation rules.
     *
     * @param \Cake\Validation\Validator $validator Validator instance.
     * @return \Cake\Validation\Validator
     */
    public function validationDefault(Validator $validator)
    {
        $validator
            ->integer('id')
            ->allowEmpty('id', 'create');

        $validator
            ->allowEmpty('date_emprunt');

        $validator
            ->allowEmpty('date_retour_emprunt')
            ->add('nom_emprunteur_ext', 'valid', ['rule' => ['checkReturnDateIsAfterLoanDate'], 'message' => 'La date de retour doit être postérieure à la date de l\'emprunt.', 'provider' => 'table']);     

        $validator
            ->boolean('emprunt_interne')
            ->allowEmpty('emprunt_interne');

        $validator
        	->allowEmpty('laboratoire')
            ->add('laboratoire', 'valid', ['rule' => ['check_string'], 'message' => 'Le champ doit être valide.', 'provider' => 'table'])
            ->add('laboratoire', 'valid', ['rule' => ['checkLaboratoire'], 'message' => 'Le champ doit être rempli pour un emprunt externe.', 'provider' => 'table']);

            /*
        $validator
            ->notEmpty('e_lieu_stockage');
        */
            
        $validator
        	->allowEmpty('e_lieu_detail')
            ->add('e_lieu_detail', 'valid', ['rule' => ['check_string'], 'message' => 'Le champ doit être valide.', 'provider' => 'table'])
            ->add('e_lieu_detail', 'valid', ['rule' => ['checkLieu'], 'message' => 'Le champ doit être rempli pour un emprunt interne.', 'provider' => 'table']);
         
            /*
        $validator
            ->notEmpty('nom_emprunteur_int');
        */
            
        $validator
            ->allowEmpty('email_emprunteur_int');
        
        $validator
        	->allowEmpty('nom_emprunteur_ext')
            ->add('nom_emprunteur_ext', 'valid', ['rule' => ['checkEmpruntExt'], 'message' => 'Le champ doit être rempli.', 'provider' => 'table']);

        $validator
            ->allowEmpty('email_emprunteur_ext')
            ->add('email_emprunteur_ext', 'valid', ['rule' => ['checkEmailExt'], 'message' => 'Cet Email n\'est pas valide.', 'provider' => 'table']);
        
        $validator
            ->allowEmpty('commentaire')
            ->add('commentaire', 'valid', ['rule' => ['check_string_with_some_special_cars'], 'message' => 'Le champ doit être valide.', 'provider' => 'table']);
            
        return $validator;
    }
    
    
    // autoriser les caracteres habituels standards pour un ou plusieurs MOTs
    // accents + - _ / () . , \s (=space)
    private $string = "a-zA-Z0-9éèàùâêôîôûç%().,\/\s\+\-_";
    
    public function check_string($check) {
    	return (bool) preg_match('/^['.$this->string.']*$/', $check);
    }
    
    // autoriser les caracteres spéciaux (pour une PHRASE ou paragraphe) :
    // check_string PLUS ces symboles ====> & * > < ? % ! : , " '
    public function check_string_with_some_special_cars($check) {
    	return (bool) preg_match('/^['.$this->string.'?%!:,&*><\-\+\="\''.']*$/', $check);
    }
    
    function checkReturnDateIsAfterLoanDate() {
    	/*
    	$dateEmprunt = $this->data [$this->name] ['date_emprunt'];
    	$dateRetour = $this->data [$this->name] ['date_retour_emprunt'];
    	$dateEmprunt = explode("-", $dateEmprunt);
    	$dateRetour = explode("-", $dateRetour);
    	$dateEmprunt = $dateEmprunt[2].$dateEmprunt[1].$dateEmprunt[0];
    	$dateRetour = $dateRetour[2].$dateRetour[1].$dateRetour[0];
    	if ($dateEmprunt > $dateRetour) {
    		return false;
    	}
    	return true;
    	*/
    	return true;
    }
    
    function checkEmprunt() {
    	//return ($this->data [$this->name] ['emprunt_interne'] == 1 || $this->data [$this->name] ['nom_emprunteur_ext'] != '');
    	return true;
    }
    
    function checkEmail() {
    	//return ($this->data [$this->name] ['emprunt_interne'] == 1 || Validation::email ( $this->data [$this->name] ['email_emprunteur_ext'] ));
    	return true;
    }
    
    function checkLaboratoire() {
    	//return ((($this->data [$this->name] ['emprunt_interne'] == 0) && ($this->data [$this->name] ['laboratoire'] != '')) || ($this->data [$this->name] ['emprunt_interne'] == 1));
    	return true;
    }
    
    function checkLieu() {
    	//return ((($this->data [$this->name] ['emprunt_interne'] == 1) && ($this->data [$this->name] ['e_lieu_detail'] != '')) || ($this->data [$this->name] ['emprunt_interne'] == 0));
    	return true;
    }

    /**
     * Returns a rules checker object that will be used for validating
     * application integrity.
     *
     * @param \Cake\ORM\RulesChecker $rules The rules object to be modified.
     * @return \Cake\ORM\RulesChecker
     */
    public function buildRules(RulesChecker $rules)
    {
        $rules->add($rules->existsIn(['materiel_id'], 'Materiels'));
        return $rules;
    }
}