Responsable.php 4.95 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
<?php

/**
 * Model Responsable
 *
 * web-DPO : Outil de gestion de vos traitements dans le cadre de la 
 * réglementation relative à la protection des données personnelles (RGPD)
 * 
 * Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
 *
 * Licensed under The CeCiLL V2 License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 * 
 * @copyright   Copyright (c) Libriciel SCOP (https://www.libriciel.fr/)
 * @link        https://www.libriciel.fr/web-cil/
 * @since       web-DPO v1.0.0
 * @license     http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html CeCiLL V2 License
 * @version     v1.0.0
 * @package     AppModel
 */

App::uses('AppModel', 'Model');
24
App::uses('LinkedOrganisationInterface', 'Model/Interface');
25

26
class Responsable extends AppModel implements LinkedOrganisationInterface {
27 28 29

    public $name = 'Responsable';
    
30 31
    public $validationDomain = 'validation';
    
32 33 34 35 36 37 38 39 40 41 42 43
    public $actsAs = [
        'Database.DatabaseFormattable' => [
            'Database.DatabaseDefaultFormatter' => [
                'formatTrim' => [
                    'NOT' => ['binary']
                ],
                'formatNull' => true,
                'formatNumeric' => [
                    'float',
                    'integer'
                ],
                'formatSuffix'  => '/_id$/',
44
                'formatStripNotAlnum' => '/^(telephoneresponsable|telephonestructure|faxstructure|siretstructure)$/'
45
            ]
46
        ],
47
        'FieldAsFilterOption',
48 49 50
        'LettercaseFormattable' => [
            'upper_noaccents' => ['nomresponsable'],
            'title' => ['prenomresponsable']
51 52
        ]
    ];
53 54 55 56 57 58 59 60 61 62

    /**
     * Champs virtuels du modèle
     *
     * @var array
     */
    public $virtualFields = [
        'nom_complet' => '( COALESCE( "Responsable"."prenomresponsable", \'\' ) || \' \' || COALESCE( "Responsable"."nomresponsable", \'\' ))',
    ];

63 64 65 66 67 68 69 70 71 72
    /**
     * validate associations
     *
     * @var array
     *
     * @access public
     * @created 12/04/2018
     * @version v1.0.0
     */
    public $validate = [
73
        'siretstructure' => [
74 75 76 77 78
            'luhn' => [
                'rule' => [
                    'luhn',
                    true
                ],
79
                'message' => 'validation.numeroSIRETNonValide'
80 81 82
            ],
            [
                'rule' => 'numeric', 
83
                'message' => 'validation.numeroSIRETUniquementComposeChiffre'
84
            ],
85 86 87 88 89 90 91 92 93 94 95 96 97 98
//            [
//                'rule' => [
//                    'minLength',
//                    '14'
//                ],
//                'message' => 'validation.numeroSIRETAvoir14Caracteres'
//            ],
//            [
//                'rule' => [
//                    'maxLength',
//                    '14'
//                ],
//                'message' => 'validation.numeroSIRETDoitPasDepasser14Caracteres'
//            ]
99 100 101 102
        ],
        'emailresponsable' => [
            [
                'rule' => ['custom', REGEXP_EMAIL_FR],
103
                'message' => 'validation.adresseMailNonValide'
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
            ]
        ]
    ];
    
    /**
     * hasMany associations
     *
     * @var array
     *
     * @access public
     * @created 11/04/2018
     * @version v1.0.0
     */
    public $hasAndBelongsToMany = [
        'Organisation' => [
            'className' => 'Organisation',
            'joinTable' => 'responsables_organisations',
            'foreignKey' => 'responsable_id',
            'associationForeignKey' => 'organisation_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'with' => 'ResponsableOrganisation'
        ]
    ];
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169

    /**
     * Retourne les id des organisations liées au responsable.
     *
     * @param int $id
     * @return array
     */
    public function getLinkedOrganisationsIds($id) {
        $query = [
            'fields' => ['organisation_id'],
            'conditions' => ['responsable_id' => $id],
        ];
        return Hash::extract(
            $this->ResponsableOrganisation->find('all', $query),
            '{n}.ResponsableOrganisation.organisation_id'
        );
    }

    /**
     * Retourne une condition permettant de limiter aux sous-traitants liés à une ou plusieurs entités.
     *
     * @param array|int $organisation_id
     * @return string
     */
    public function getConditionOrganisation($organisation_id) {
        $query = [
            'alias' => 'responsables_organisations',
            'fields' => [
                'responsables_organisations.responsable_id'
            ],
            'conditions' => [
                'responsables_organisations.organisation_id' => $organisation_id
            ]
        ];
        $sql = $this->ResponsableOrganisation->sql($query);
        return "{$this->alias}.{$this->primaryKey} IN ( {$sql} )";
    }
170
}