RecettesController.php 6.21 KB
Newer Older
1 2
<?php

3 4
App::uses('AuthComponent', 'Controller/Component');

5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
class RecettesController extends AppController {

    public $uses = [
        'Organisation'
    ];

    /**
     * Vérification de l'accès aux actions en fonction du profil de l'utilisateur connecté.
     */
    public function beforeFilter() {
        parent::beforeFilter();

        // Seul le rôle Superutilisateur peut accéder à ce contrôleur, uniquement en mode debug et sur une instance de recette
        $recette = preg_match('/^https{0,1}:\/\/(localhost|.*\.recette\.libriciel\.fr)[:\/]/', Router::url( $this->here, true )) === 1;
        if ($this->Droits->isSu() !== true || (int)Configure::read('debug') < 1 || $recette === false) {
            throw new ForbiddenException(__d('default', 'default.flasherrorPasDroitPage'));
        }
    }

    protected function _getOrganisations() {
        $query = [
            'fields' => [
                'Organisation.id',
                'Organisation.raisonsociale'
            ],
            'contain' => [
                'Responsable' => [
                    'fields' => ['Responsable.nom_complet'],
                    'order' => ['Responsable.nom_complet']
                ],
                'Role' => [
                    'fields' => ['Role.libelle'],
                    'order' => ['Role.libelle']
                ],
                'Service' => [
                    'fields' => ['Service.libelle'],
                    'order' => ['Service.libelle']
                ],
                'Soustraitant' => [
44 45
                    'fields' => ['Soustraitant.raisonsocialestructure'],
                    'order' => ['Soustraitant.raisonsocialestructure']
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
                ],
                'Typage' => [
                    'fields' => ['Typage.libelle'],
                    'order' => ['Typage.libelle']
                ],
                'User' => [
                    'fields' => ['User.username'],
                    'order' => ['User.username']
                ],
            ],
            'order' => [
                'Organisation.raisonsociale'
            ]
        ];

        return $this->Organisation->find('all', $query);
    }

64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
    protected function _getFormulaires() {
        $Formulaire = ClassRegistry::init('Formulaire');

        $Formulaire->belongsTo['Organisation'] = [
            'className' => 'Organisation',
            'foreignKey' => 'organisations_id',
            'conditions' => null,
            'fields' => null,
            'order' => null,
            'counterCache' => null
        ];

        $query = [
            'fields' => [
                'Organisation.raisonsociale',
                'Formulaire.libelle',
                'Formulaire.active',
                'Formulaire.rt_externe',
            ],
            'contain' => [
                'Organisation'
            ],
            'order' => [
                'Organisation.raisonsociale',
                'Formulaire.rt_externe',
                'Formulaire.libelle',
                'Formulaire.id'
            ]
        ];
        return $Formulaire->find('all', $query);
}

96 97 98 99 100 101 102
    protected function _getUsers() {
        $query = [
            'fields' => array_merge(
                [
                    'User.username',
                    'User.nom_complet',
                    'User.email',
103 104
                    'User.notification',
                    'User.password',
105
                    '("Admin"."id" IS NOT NULL) AS "User__is_superadmin"',
106 107 108 109 110
                    '(CASE
                        WHEN "User"."username" = \'superadmin\' THEN \'admin\'
                        WHEN "Admin"."id" IS NOT NULL THEN \'Voitures2ColoSoupersos\'
                        ELSE \'bateauavionmotovoiture\'
                    END) AS "User__pwd"',
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 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
                ],
                $this->Organisation->User->Admin->fields()
            ),
            'contain' => [
                'Organisation' => [
                    'fields' => [
                        'Organisation.raisonsociale',
                        '("Organisation"."dpo" = "OrganisationUser"."user_id") AS "User__is_dpo"',
                    ],
                    'order' => [
                        'Organisation.raisonsociale'
                    ],
                ],

            ],
            'joins' => [
                $this->Organisation->User->join('Admin', ['type' => 'LEFT OUTER'])
            ],
            'conditions' => [],
            'order' => [
                'User.username'
            ]
        ];
        $users = $this->Organisation->User->find('all', $query);

        foreach ($users as $idx => $user) {
            foreach ((array)Hash::extract($user, 'Organisation.{n}.OrganisationUser') as $i => $ou) {
                $query = [
                    'conditions' => [
                        'OrganisationUser.id' => $ou['id']
                    ],
                    'contain' => [
                        'OrganisationUserRole' => [
                            'Role' => [
                                'fields' => 'Role.libelle',
                                'order' => 'Role.libelle',
                            ]
                        ],
                        'OrganisationUserService' => [
                            'Service' => [
                                'fields' => 'Service.libelle',
                                'order' => 'Service.libelle',
                            ]
                        ],
                    ]
                ];
                $users[$idx]['Organisation'][$i]['OrganisationUser'] = array_merge(
                    $users[$idx]['Organisation'][$i],
                    $this->Organisation->OrganisationUser->find('first', $query)
                );
            }
        }

164 165 166 167 168
        // Si le mot de passe n'est pas un de ceux auxquels on s'attend, on le note pour avertir dans la vue
        foreach (array_keys($users) as $idx) {
            $users[$idx]['User']['password'] = AuthComponent::password($users[$idx]['User']['pwd']) === $users[$idx]['User']['password'];
        }

169 170 171 172
        return $users;
    }

    public function index() {
173
        $formulaires = $this->_getFormulaires();
174 175 176
        $organisations = $this->_getOrganisations();
        $users = $this->_getUsers();

177
        $this->set(compact('formulaires', 'organisations', 'users'));
178 179
    }
}