/app/Page/ResasBase.php

https://gitlab.com/vchellen_xtn/testaudit · PHP · 143 lines · 93 code · 8 blank · 42 comment · 37 complexity · 5757d1bd399d2cc004fc75b4a7556842 MD5 · raw file

  1. <?php
  2. /**
  3. * Classe utilisée par Page_Resas et Page_Resas_Admin pour assurer l'authentification
  4. */
  5. class Page_ResasBase extends Page
  6. {
  7. /** @var AccesAgence */
  8. protected $_resasUser = null;
  9. /** @var Agence */
  10. protected $_agence;
  11. /** Renvoie si la page a besoin de HTTPS @returns bool */
  12. protected function isThatPageNeedsHttps()
  13. {
  14. return true;
  15. }
  16. /**
  17. * Vérifier les paramètres et l'identification
  18. *
  19. */
  20. protected function checkParameters()
  21. {
  22. // se déconnecter de /resas/ ... mais pas de l'admin
  23. if (isset($_GET['logout'])) {
  24. $this->setResasUser(null);
  25. }
  26. // les vérifications de Page
  27. if (!parent::checkParameters())
  28. return false;
  29. // est ce que l'utilisateur est associée à une agence ?
  30. // s'il y a un paramètre agence, on le valide
  31. if (isset($_REQUEST['agence']) && isset($_REQUEST['login']) && isset($_REQUEST['role']) && isset($_REQUEST['key'])) {
  32. $msg = '';
  33. $this->setResasUser(AccesAgence::create($_REQUEST['role'], $_REQUEST['login'], $_REQUEST['agence'], $_REQUEST['key'], $msg));
  34. if ($msg) {
  35. $this->_addMessage($msg);
  36. }
  37. } else if (isset($_COOKIE['ADA001_RESAS_AGENCE'])) {
  38. $this->setResasUser(AccesAgence::createFromCookie($_COOKIE['ADA001_RESAS_AGENCE']));
  39. }
  40. // si l'utilisateur est connecté on arrête là
  41. if ($this->_resasUser) {
  42. // on vérifie que l'OAV est ouverte pour cette agence
  43. if ($this->_agence) {
  44. return true;
  45. } else {
  46. $this->_addMessage("Votre agence n'est pas autorisé à accéder à l'OAV !");
  47. }
  48. }
  49. // sinon est-il identifié dans l'admin ?
  50. if (!$this->_adminUser)
  51. {
  52. // sinon il faut s'authentifier
  53. $this->setId('resas/login');
  54. return false;
  55. }
  56. // OK on est conecté et il faut choisir l'agence
  57. $this->setId('resas/agence');
  58. return false;
  59. }
  60. /**
  61. * Renvoie l'agence courante
  62. *
  63. */
  64. public function getAgence()
  65. {
  66. return $this->_agence;
  67. }
  68. /**
  69. * Essaie de changer d'agence pour l'utilisateur courant
  70. *
  71. * @param string $agenceID
  72. * @param string $msg
  73. * @returns bool
  74. */
  75. protected function changeAgence($agenceID, &$msg) {
  76. if ($agenceID && Agence::isValidID($agenceID)) {
  77. // il faut valider le login, le rôle et l'agence
  78. $agence = '';
  79. $adminUser = $this->getAdminUser();
  80. $resasUser = $this->getResasUser();
  81. if ($adminUser && ($adminUser->hasRights(Acces::SB_ADMIN) || $adminUser->hasRights(Acces::SB_TC))) {
  82. $agence = $agenceID;
  83. } else if ($resasUser && $resasUser->hasRightsOnAgence($agenceID) && $resasUser->getConfigData('oav_acces', 'agence', $agenceID)) {
  84. $agence = $agenceID;
  85. } else {
  86. $msg = "Vous n'avez pas le droit d'accéder à cette agence.";
  87. }
  88. // déterminer le login et le rôle
  89. $login = ($resasUser ? $resasUser['login'] : $adminUser['login']);
  90. $role = '';
  91. if ($resasUser) {
  92. $role = $resasUser->getRole();
  93. } else if ($adminUser->hasRights(Acces::SB_ADMIN)) {
  94. $role = 'admin';
  95. } else if ($adminUser->hasRights(Acces::SB_TC)) {
  96. $role = 'comptoir';
  97. } else {
  98. $msg = "Vous n'avez pas le droit d'accéder à cet outil.";
  99. }
  100. if ($login && $role && $agence) {
  101. if ($x = AccesAgence::create($role, $login, $agence, AccesAgence::getKey($role, $login, $agence), $msg)) {
  102. $this->setResasUser($x);
  103. return true;
  104. }
  105. }
  106. }
  107. return false;
  108. }
  109. /**
  110. * Renvoie l'utilisateur courant
  111. * @returns AccesAgence
  112. */
  113. public function getResasUser() {
  114. return $this->_resasUser;
  115. }
  116. /**
  117. * Change le ResasUser courant
  118. *
  119. * @param AccesAgence $resasUser
  120. * @return Page_ResasBase
  121. */
  122. public function setResasUser(AccesAgence $resasUser = null) {
  123. $this->_resasUser = $resasUser;
  124. if ($this->_resasUser) {
  125. self::setCookie('ADA001_RESAS_AGENCE', $this->_resasUser->getCookie());
  126. if ($this->_adminUser || $this->_resasUser->getConfigData('oav_acces')) {
  127. $this->_agence = Agence::factory($this->_resasUser['pdv']);
  128. }
  129. } else {
  130. self::setCookie('ADA001_RESAS_AGENCE', '', time() - 24*3600);
  131. }
  132. return $this;
  133. }
  134. }
  135. ?>