AppTable.php 3.28 KB
<?php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\ORM\TableRegistry;
use Cake\Datasource\EntityInterface;

/**
 * App Model
 */
class AppTable extends Table
{

    const ROLES = [ 'Utilisateur', 'Responsable', 'Administration', 'Super Administrateur' ];
    
    // Voir utilisation de cette propriété plus loin
    public $current_entity = null;
    
    // autoriser les caracteres habituels standards pour un ou plusieurs MOTs
    // accents + - _ / () . , \s (=space)
    private $chaine = "a-zA-Z0-9éèàùâêôîïôûç%().,\/\s\+\-_'";

    public static function isValidRole($role) { return in_array($role, self::ROLES); }

    // Check prix > 0
    public function checkPriceIsPositive($prix_ht) {
        if (trim($prix_ht) != '') return is_numeric($prix_ht) && $prix_ht >= 0;
        return true;
    }
    
    public function check_string($check)
    {
        return (bool) preg_match(
            
            '/^[' 
                . $this->chaine 
            . ']*$/', 
            
            $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->chaine
                //. '?%!:,&#*><\-\+\="\'' 
                . "?%!:,&#*><\-\+\="
                // l'apostrophe
                . "'"
                // le guillemet
                . '"'
            . ']*$/', 
            
            $check
            
        );
    }

    public function check_mail($check)
    {
        return (bool) filter_var($check, FILTER_VALIDATE_EMAIL);
    }

    // @Override parent Table
    /* 
     * (EP202009) pour comportement commun à toutes les EntitiesTable à la fin du save() ou du delete()
     * 
     * On crée une variable globale $this->current_entity qui contient l'entité (Entity) courante 
     * (après save, donc mise à jour avec les données du formulaire, et avec un new id si ADD, 
     * mais aussi avec les erreurs si le save s'est mal passé)
     * Cette entité courante est récupérable depuis TOUT controleur, comme ceci :
     *      - $this->Materiels->current_entity
     *      ou plus simplement avec le raccourci AppController :
     *      - $this->getCurrentEntity()
     * 
     */
    public function save(EntityInterface $entity, $options = []) {
        $success = parent::save($entity,$options);
        // On sauvegarde l'entité pour la réutiliser dans les notifications (ou ailleurs)
        $this->current_entity = $entity;
        return $success;
    }
    public function delete(EntityInterface $entity, $options = []) {
        $DEBUG = false;
        // On sauvegarde l'entité pour la réutiliser dans les notifications (ou ailleurs)
        $this->current_entity = $entity;
        if (!$DEBUG) return parent::delete($entity,$options);
        return true;
    }
    
    /*
    public function getEntity($id) {
        debug($this->get($id));
        debug($this->getEntityClass()); // 'App\Model\Entity\Materiel'
        debug($this->getTable()); // table name
        //_getClassName() 
        //return TableRegistry::getTableLocator()->get('Materiels')->get($id);
    }
    */
    
}