loadComponent('Security');`
*
* @return void
*/
public function initialize() {
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$this->loadComponent('LdapAuth', [
'authorize' => [
'Controller'
],
'loginRedirect' => [
'controller' => 'Pages',
'action' => 'home'
],
'logoutRedirect' => [
'controller' => 'Pages',
'action' => 'home'
]
]);
$this->confLabinvent = TableRegistry::get('Configurations')->find()
->where([
'id =' => 1
])
->first();
}
/**
*
* @param $user Give
* authorization in general
* @return boolean
*/
public function isAuthorized($user) {
$configuration = $this->confLabinvent;
$role = TableRegistry::get('Users')->find()
->where([
'username' => $user[$configuration->authentificationType_ldap][0]
])
->first()['role'];
$action = $this->request->params['action'];
// error_log($action);
// Super-Admin peut accéder à chaque action
if ($role == 'Super Administrateur')
return true;
// Pour tout le monde
if (in_array($action, [
'index',
'find',
'view',
'creer',
'add',
'getNextDate',
'getDateGarantie'
]))
return true;
// Par défaut refuser
return false;
}
function userHasRole($roleDefine) {
$configuration = TableRegistry::get('Configurations')->find()
->where([
'id =' => 1
])
->first();
$role = TableRegistry::get('Users')->find()
->where([
'username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]
])
->first()['role'];
$isAuthorized = false;
switch ($roleDefine) {
case 'Super Administrateur':
if (in_array($role, [
'Super Administrateur'
]))
$isAuthorized = true;
break;
case 'Administration Plus':
if (in_array($role, [
'Administration Plus',
'Super Administrateur'
]))
$isAuthorized = true;
break;
case 'Administration':
if (in_array($role, [
'Administration',
'Administration Plus',
'Super Administrateur'
]))
$isAuthorized = true;
break;
case 'Responsable':
if (in_array($role, [
'Responsable',
'Administration',
'Administration Plus',
'Super Administrateur'
]))
$isAuthorized = true;
break;
case 'Utilisateur':
if (in_array($role, [
'Utilisateur',
'Responsable',
'Administration',
'Administration Plus',
'Super Administrateur'
]))
$isAuthorized = true;
break;
}
return $isAuthorized;
}
/**
*
* {@inheritdoc}
*
* @see \Cake\Controller\Controller::beforeFilter()
*/
public function beforeFilter(Event $event) {
// !!! Ne jamais autoriser l'action 'login', sinon cela va créer des problèmes sur le fonctionnement normal de AuthComponent (cf doc) !!!
$configuration = TableRegistry::get('Configurations')->find()
->where([
'id =' => 1
])
->first();
if ($configuration->mode_install) {
$this->LdapAuth->allow([
'display',
'add',
'edit',
'installOff'
]);
} else {
$this->LdapAuth->allow([
'display'
]);
}
$this->LdapAuth->config('authError', "Désolé, vous n'êtes pas autorisé à accéder à cette zone.");
}
public function afterFilter(Event $event) {
if (in_array($this->request->params['action'], [
'edit',
'add'
])) {
$this->request->session()->write("retourForm1", true);
} else if ($this->request->params['action'] != 'creer') {
$this->request->session()->write("retourForm1", false);
}
}
/**
* Before render callback.
*
* @param \Cake\Event\Event $event
* The beforeRender event.
* @return void
*/
public function beforeRender(Event $event) {
if (! array_key_exists('_serialize', $this->viewVars) && in_array($this->response->type(), [
'application/json',
'application/xml'
])) {
$this->set('_serialize', true);
}
$this->set('username', $this->LdapAuth->user('sn')[0] . ' ' . $this->LdapAuth->user('givenname')[0]);
$configuration = TableRegistry::get('Configurations')->find()
->where([
'id =' => 1
])
->first();
$this->set('configuration', $configuration);
$this->request->session()->write("authType", $configuration->authentificationType_ldap);
$user = TableRegistry::get('Users')->find()
->where([
'username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]
])
->first();
$role = $user['role'];
if ($role == null)
$role = 'Utilisateur';
$this->set('role', $role);
$this->set('userConnected', $user);
$this->set('idGmNa', TableRegistry::get('GroupesMetiers')->find()
->where([
'nom =' => 'N/A'
])
->first()['id']);
$this->set('idGtNa', TableRegistry::get('GroupesThematiques')->find()
->where([
'nom =' => 'N/A'
])
->first()['id']);
$displayElement = function ($nom, $valeur, $params = "") {
$balise = ($params != "") ? '
' : ' | ';
// Ca c'est parce que sinon y'a au moins deux tests qui passent pas, a cause de l'espace dans la balise ...
if ($valeur != "")
echo ' | ' . $nom . ' | ' . $balise . $valeur . '
';
};
$this->set('displayElement', $displayElement);
}
// "le materiel", "le suivi"...
protected function getArticle() {
return "Le ";
}
/**
*
* @param string $subject
* @param string $message
* @param string[] $to
*/
// public function sendEmailTo($subject, $message, $to = null) {
// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first();
// if ($to != null && !$configuration->test) {
// for($i = 0; $i < sizeof($to); $i++) {
// if (filter_var($to[$i], FILTER_VALIDATE_EMAIL)) {
// $email = new Email();
// $etiquetteFrom = explode("@", $configuration->sender_mail);
// if($configuration->envoi_mail_management_dev) {
// $email->transport('dev')
// ->from([$configuration->sender_mail => $etiquetteFrom[0]])
// ->to($to[$i])
// ->subject("[LabInvent] ".$subject)
// ->send($message);
// } else {
// $email->transport('default')
// ->from([$configuration->sender_mail => $etiquetteFrom[0]])
// ->to($to[$i])
// ->subject("[LabInvent] ".$subject)
// ->send($message);
// }
// }
// }
// }
// }
// /**
// * Envoi d'un email à la gestion (et aux devs) pour prévenir qu'un matériel a été créé ou modifié
// * (cf howto dans http://book.cakephp.org/2.0/fr/core-utility-libraries/email.html)
// * @param string $subject
// * @param string $message
// */
// public function sendEmailToManagementWith($subject, $message) {
// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first();
// for($i = 1; $i < 11; $i++) {
// $t = 'emailGuest'.$i;
// $to = $configuration->$t;
// if ($to != null && !$configuration->test) {
// if (filter_var($to, FILTER_VALIDATE_EMAIL)) {
// $email = new Email();
// $etiquetteFrom = explode("@", $configuration->sender_mail);
// if($configuration->envoi_mail_management_dev) {
// $email->transport('dev')
// ->from([$configuration->sender_mail => $etiquetteFrom[0]])
// ->to($to)
// ->subject("[LabInvent] ".$subject)
// ->send($message);
// } else {
// $email->transport('default')
// ->from([$configuration->sender_mail => $etiquetteFrom[0]])
// ->to($to)
// ->subject("[LabInvent] ".$subject)
// ->send($message);
// }
// }
// }
// }
// }
// public function sendEmailToManagement($idObj = null) {
// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first();
// $userAuth = $this->LdapAuth->user($configuration->authentificationType_ldap)[0];
// $controller = substr($this->request->params['controller'], 0, -1); // materiel
// $action = $this->request->params['action']; // add or edit or delete or ...
// $userName = $this->LdapAuth->user('sn')[0].' '.$this->LdapAuth->user('givenname')[0];
// $userEmail = $this->LdapAuth->user('mail')[0];
// $role = TableRegistry::get('Users')->find()->where(['username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]])->first()['role'];
// if($role == null) $role = 'Utilisateur';
// $modelName = $this->modelClass; // 'Materiels'
// $id = $idObj;
// switch ($action) {
// case 'add':
// $actionFrench = ['Création d\'un ', 'été créé'];
// break;
// case 'edit':
// $actionFrench = ['Modification d\'un ', 'été modifié'];
// break;
// case 'delete':
// $actionFrench = ['Suppression d\'un ', 'été supprimé'];
// break;
// case 'statusValidated':
// $actionFrench = ['Validation d\'un ', 'été validé'];
// break;
// case 'statusToBeArchived':
// $actionFrench = ['Demande Archivage d\'un ', 'été demandé pour archivage'];
// break;
// case 'statusArchived':
// $actionFrench = ['Archivage d\'un ', 'été archivé'];
// break;
// case 'setLabelIsPlaced':
// $actionFrench = ['Etiquette posé sur un ', 'reçu une étiquette'];
// break;
// default:
// $actionFrench = [$action.' d\'un ', 'été '.$action];
// break;
// }
// $doneBy = $userName." (".$userEmail.", login=".$userAuth.", profil=".$role.").";
// $subject = $actionFrench[0].$controller;
// if($id != null) {
// $entityName = TableRegistry::get($modelName)->find('all')->where(['id =' => $id])->first();
// if($modelName == 'Materiels') {
// $entityName = $entityName['designation'];
// }
// else if ($modelName == 'Suivis' || $modelName == 'Emprunts') {
// $entityName = $entityName['id'];
// }
// else {
// $entityName = $entityName['nom'];
// }
// }
// else {
// $entityName = NULL;
// }
// $message = $this->getArticle().$controller." ".$entityName." (id=".$id.") a ".$actionFrench[1]." par ".$doneBy;
// $this->sendEmailToManagementWith($subject, $message);
// }
// /**
// * Envoi d'un email au propriétaire pour prévenir qu'un matériel a été créé
// * @param string $subject
// * @param string $message
// */
// public function sendEmailToCreate($idObj = null) {
// $id = $idObj;
// $configuration = TableRegistry::get('Configurations')->find()->where(['id =' => 1])->first();
// $materiel = TableRegistry::get('Materiels')->find()->where(['id =' => $id])->first();
// $createurName = $this->LdapAuth->user('sn')[0].' '.$this->LdapAuth->user('givenname')[0];
// $createurEmail = $this->LdapAuth->user('mail')[0];
// $toEmail = $materiel->email_responsable;
// $role = TableRegistry::get('Users')->find()->where(['username' => $this->LdapAuth->user($configuration->authentificationType_ldap)[0]])->first()['role'];
// if($role == null) $role = 'Utilisateur';
// $subject = 'Ajout d\'un matériel';
// $message = $createurName.' (email = '.$createurEmail.', role = '.$role.') a ajouté le matériel "'.$materiel->designation.'" ('.$materiel->numero_laboratoire.') et vous a nommé propriétaire de ce matériel.';
// if ($toEmail != null && !$configuration->test) {
// if (filter_var($toEmail, FILTER_VALIDATE_EMAIL)) {
// $email = new Email();
// $etiquetteFrom = explode("@", $configuration->sender_mail);
// if($configuration->envoi_mail_management_dev) {
// $email->transport('dev')
// ->from([$configuration->sender_mail => $etiquetteFrom[0]])
// ->to($toEmail)
// ->subject("[LabInvent] ".$subject)
// ->send($message);
// } else {
// $email->transport('default')
// ->from([$configuration->sender_mail => $etiquetteFrom[0]])
// ->to($toEmail)
// ->subject("[LabInvent] ".$subject)
// ->send($message);
// }
// }
// }
// }
static function isLabinventDebugMode() {
return TableRegistry::get('Configurations')->find()
->where([
'id =' => 1
])
->first()->mode_debug;
}
function myDebug($arg, $stop = false) {
if ($this->isLabinventDebugMode()) {
Configure::write('debug', true);
debug($arg);
if ($stop)
exit();
}
}
/**
* Envoi un mail avec un sujet, contenant un message à destination d'une liste de mails, selon l'action effectuée.
*
* @param $obj :
* Matériel concerné
*/
public function sendEmail($obj) {
/*
* $_SESSION['Auth']['User'] pour retrouver TOUTES les infos de la session courante (tout est du string) :
* nom['sn'][0]
* prenom['givenname'][0]
* mail['mail'][0]
* login['xxx'][0] /!\ Ce champ est suceptible de changer de nom, dans les tests ce champ est ['cn'][0]
* mdp['userpassword'][0]
*/
$configuration = $this->confLabinvent;
$action = $this->request->params['action']; // add or edit or delete or ...
// Si les deux cases "Activer l'envoi des mails.." sont décochée, on se fatigue pas à exécuter la fonction
if (! $configuration->envoi_mail && ! $configuration->envoi_mail_guests)
return null;
$materiel = $obj;
$mailList = array();
// On détermine le message et le sujet du mail en fonction de l'action effectuee
$acteur = $_SESSION['Auth']['User']['givenname'][0] . ' ' . $_SESSION['Auth']['User']['sn'][0];
$nom_materiel = $materiel->designation;
Switch ($action) {
case 'add':
$subject = "Ajout d'un matériel";
$msg = "$acteur a ajouté le matériel $nom_materiel";
break;
case 'edit':
$subject = "Modification d'un matériel";
$msg = "$acteur a modifié le matériel $nom_materiel";
break;
case 'delete':
$subject = "Suppression d'un matériel";
$msg = "$acteur a supprimé le matériel $nom_materiel";
break;
case 'statusValidated':
$subject = "Validation d'un matériel";
$msg = "$acteur a validé le matériel $nom_materiel";
break;
case 'statusToBeArchived':
$subject = "Demande d'archivage d'un matériel";
$msg = "$acteur a demandé l'archivage du matériel $nom_materiel";
break;
case 'statusArchived':
$subject = "Archivage d'un matériel";
$msg = "$acteur a archivé le matériel $nom_materiel";
break;
case 'setLabelIsPlaced':
$subject = "Etiquette posée sur un matériel";
$msg = "Etiquette posée sur le matériel $nom_materiel";
break;
case 'printLabelRuban':
$subject = "Etiquette imprimée";
$msg = "L'étiquette concerant votre matériel $nom_materiel a été imprimée. Veuillez vérifier et compléter si besoin la fiche corespondante.";
$mailList[0] = $materiel->email_responsable;
default:
$subject = "Action \"$action\" sur un matériel";
$msg = "$acteur a effectué l'action \"$action\" sur le matériel $nom_materiel";
break;
}
// Et maintenant on construit la liste de mails ...
// Si l'envoi général est activé (et que l'action ne correspond pas à 'printLabelRuban'):
if ($configuration->envoi_mail && $action != 'printLabelRuban') {
// mail owner
$mailList[0] = $materiel->email_responsable;
// mail resp
$mailsRespMetier = null;
$mailsRespMetier = null;
if ($materiel->groupes_metier_id != null && $materiel->groupes_metier_id != 1)
// Le ..!= 1 c'est parce que le groupe métier/thématique d'id 1 correspond au groupe N/A, soit aucun groupe
$mailsRespMetier = TableRegistry::get('Users')->find()
->select('email')
->where([
'role =' => 'Responsable',
'groupes_metier_id =' => $materiel->groupes_metier_id
])
->toArray();
if ($mailsRespMetier != null && $mailsRespMetier != null) {
$mailResp = array_unique(array_merge($mailsRespMetier, $mailRespThematique));
for ($i = 0; $i < sizeof($mailsResp); $i ++) {
$mailList[sizeof($mailList)] = $mailsResp[$i]['email'];
}
}
// mail admin de reference (ici appele gestionnaire) -> Partie administration
// Cela a été mis en commentaire car de toute façon l'utilisateur va voir un administratif pour faire valider sa fiche,
// Pas la peine de spam l'administration de mails non plus hein !
/*
* if ($action != 'statusValidated' && $action != 'statusArchived') {
* $mailsAdmin = TableRegistry::get('Users')->find()
* ->select('email')
* ->where([
* 'role =' => 'Administration'
* ])
* ->toArray();
* for ($i = 0; $i < sizeof($mailsAdmin); $i ++) {
* $mailList[sizeof($mailList)] = $mailsAdmin[$i]['email'];
* }
* }
*/
}
// Si l'envoi à la liste spécifiée est activé (et que l'action ne correspond pas à 'printLabelRuban'):
if ($configuration->envoi_mail_guests && $action != 'printLabelRuban') {
// mail aux adresses specifiees dans la config
for ($i = 0; $i < 11; $i ++) {
if ($configuration['emailGuest' . $i])
$mailList[sizeof($mailList)] = $configuration['emailGuest' . $i];
// Le if vérifie que la ligne soit pas null
}
}
// On dedoublonne la liste des mails, c'pas tres cool de se faire spam 2-3 fois pour la meme action sur le meme materiel, non mais !
$List = array_unique($mailList);
// ... Pour envoyer les mails aux personnes concernees
foreach ($List as $mail) {
// On envoi des mails à toute la liste, sauf pour "l'acteur", il sait ce qu'il a fait, pas besoin de le spam non plus hein
if ($mail != $_SESSION['Auth']['User']['mail'][0]) {
$message = $msg; // Sisi, cette variable $message est utile, m'enfin vous pouvez toujours essayer de la supprimer ..... Et pensez à regarder le contenu de vos mails !!! Sinon ca fait une tumeur
if ($action != 'statusValidated')
$message .= " Veuillez vérifier et compléter si besoin la fiche corespondante.";
$role = TableRegistry::get('Users')->find()
->select('role')
->where([
'email =' => $mail
])
->first()['role'];
if ($role)
$role = 'en tant que ' . $role;
else
$role = 'car vous avez demandé à le recevoir. Pour faire retirer votre mail de la liste, veuillez contacter un SuperAdmin';
$message .= "\n\n" . 'Vous recevez ce message ' . $role;
$this->sendEmailTo("$subject", $message, $mail, $configuration);
}
}
return $List;
}
// Fonction d'envoi de mails
private function sendEmailTo($subject, $msg, $mail, $config) {
if ($mail != null && ! $config->test) {
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
$email = new Email();
$etiquetteFrom = explode("@", $config->sender_mail);
// if($config->envoi_mail) { // <-- Si la case "Envoi des mails de management en local " est cochée
// $email->transport('dev')
// ->from([$config->sender_mail => $etiquetteFrom[0]])
// ->to($mail)
// ->subject("[LabInvent] ".$subject)
// ->send($msg);
// } else { // <-- Si la case n'est pas cochée
$email->transport('default')
->from([
$config->sender_mail => $etiquetteFrom[0]
])
->to($mail)
->subject("[LabInvent] " . $subject)
->send($msg);
// }
}
}
}
}