Typage.php 3.86 KB
Newer Older
1 2 3
<?php

/**
Théo GUILLON's avatar
Théo GUILLON committed
4
 * Model Typage
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 *
 * 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 Typage extends AppModel implements LinkedOrganisationInterface {
27 28 29 30 31 32 33 34 35 36 37

    public $name = 'Typage';
    
    public $validationDomain = 'validation';
    
    /**
     * validate associations
     *
     * @var array
     *
     * @access public
Théo GUILLON's avatar
Théo GUILLON committed
38 39
     * @created 22/04/2020
     * @version V1.2.0
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
     */
    public $validate = [
        'libelle' => [
            'notBlank' => [
                'rule' => ['notBlank']
            ]
        ],
    ];
    
    /**
     * hasMany associations
     *
     * @var array
     *
     * @access public
Théo GUILLON's avatar
Théo GUILLON committed
55 56
     * @created 22/04/2020
     * @version V1.2.0
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
     */
    public $hasAndBelongsToMany = [
        'Organisation' => [
            'className' => 'Organisation',
            'joinTable' => 'typages_organisations',
            'foreignKey' => 'typage_id',
            'associationForeignKey' => 'organisation_id',
            'unique' => true,
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'with' => 'TypageOrganisation'
        ]
    ];
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

    /**
     * Retourne un champ virtuel contenant le nombre d'entités liées au @fixme.
     *
     * @param string $primaryKeyField | 'Typage.id' --> Champ représentant le Typage.id
     * @param string $fieldName | 'organisations_count' --> Nom du champ virtuel
     * @return string
     */
    public function vfLinkedOrganisationsCount($primaryKeyField = 'Typage.id', $fieldName = 'organisations_count') {
        $subQuery = [
            'alias' => 'typages_organisations',
            'fields' => ['COUNT(DISTINCT(typages_organisations.organisation_id))'],
            'conditions' => [
                "typages_organisations.typage_id = {$primaryKeyField}"
            ],
            'contain' => false
        ];
        $sql = $this->TypageOrganisation->sql($subQuery);
        return "( {$sql} ) AS \"{$this->alias}__{$fieldName}\"";
    }
94 95 96 97 98 99 100 101 102 103 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

    /**
     * Retourne les id des entités liées au type d'annexe.
     *
     * @param int $id
     * @return array
     */
    public function getLinkedOrganisationsIds($id) {
        $query = [
            'fields' => ['organisation_id'],
            'conditions' => ['typage_id' => $id],
        ];
        return Hash::extract(
            $this->TypageOrganisation->find('all', $query),
            '{n}.TypageOrganisation.organisation_id'
        );
    }

    /**
     * Retourne une condition permettant de limiter aux types d'annexes liés à une ou plusieurs entités.
     *
     * @param array|int $organisation_id
     * @return string
     */
    public function getConditionOrganisation($organisation_id) {
        $query = [
            'alias' => 'typages_organisations',
            'fields' => [
                'typages_organisations.typage_id'
            ],
            'conditions' => [
                'typages_organisations.organisation_id' => $organisation_id
            ]
        ];
        $sql = $this->TypageOrganisation->sql($query);
        return "{$this->alias}.{$this->primaryKey} IN ( {$sql} )";
    }
131
}