PageRenderTime 28ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/Ip/Internal/Admin/SiteController.php

https://gitlab.com/x33n/ImpressPages
PHP | 291 lines | 211 code | 68 blank | 12 comment | 23 complexity | f34b4fdc5b9b47ad41ab5ee359f104b3 MD5 | raw file
  1. <?php
  2. namespace Ip\Internal\Admin;
  3. class SiteController extends \Ip\Controller
  4. {
  5. public function login()
  6. {
  7. if (\Ip\Internal\Admin\Backend::userId()) {
  8. //user has already been logged in
  9. \Ip\Internal\Content\Service::setManagementMode(1);
  10. return new \Ip\Response\Redirect(ipHomeUrl());
  11. }
  12. // If none of the administrator exist, we create default one and log in user
  13. $administrators = \Ip\Internal\Administrators\Model::getAll();
  14. if (empty($administrators)) {
  15. $adminUsername = 'admin';
  16. $adminEmail = ipGetOptionLang('Config.websiteEmail');
  17. $adminPassword = Model::randString(8);
  18. $adminId = \Ip\Internal\Administrators\Service::add($adminUsername, $adminEmail, $adminPassword);
  19. \Ip\Internal\AdminPermissionsModel::addPermission('Super admin', $adminId);
  20. // Set variable to know that user is autogenerated
  21. ipStorage()->set('Ip', 'adminIsAutogenerated', $adminPassword);
  22. // Logging in new admin
  23. $model = Model::instance();
  24. if ($model->login($adminUsername, $adminPassword)) {
  25. \Ip\Internal\System\Model::sendUsageStatistics(array('action' => 'Install.adminIsAutogenerated'));
  26. $redirectUrl = ipHomeUrl();
  27. return new \Ip\Response\Redirect($redirectUrl);
  28. } else {
  29. \Ip\Internal\System\Model::sendUsageStatistics(array('action' => 'Install.adminIsAutogeneratedFailed'));
  30. // todo: handle errors
  31. // $errors = $model->getErrors();
  32. }
  33. }
  34. $content = ipView('view/login.php', array('loginForm' => FormHelper::getLoginForm()));
  35. ipAddJs('Ip/Internal/Admin/assets/login.js');
  36. $response = ipResponse();
  37. $response->setLayout('Ip/Internal/Admin/view/loginLayout.php');
  38. $response->setLayoutVariable('content', $content);
  39. ipAddJs('assets/languageSelect.js');
  40. $response->setLayoutVariable('languageSelectForm', FormHelper::getLanguageSelectForm());
  41. return $response;
  42. }
  43. public function passwordResetForm()
  44. {
  45. if (\Ip\Internal\Admin\Backend::userId()) {
  46. //user has already been logged in
  47. \Ip\Internal\Content\Service::setManagementMode(1);
  48. return new \Ip\Response\Redirect(ipHomeUrl());
  49. }
  50. $content = ipView('view/passwordReset.php', array('passwordResetForm' => FormHelper::getPasswordResetForm1()));
  51. ipAddJs('Ip/Internal/Admin/assets/passwordReset1.js');
  52. $response = ipResponse();
  53. $response->setLayout('Ip/Internal/Admin/view/loginLayout.php');
  54. $response->setLayoutVariable('content', $content);
  55. ipAddJs('assets/languageSelect.js');
  56. $response->setLayoutVariable('languageSelectForm', FormHelper::getLanguageSelectForm());
  57. return $response;
  58. }
  59. public function passwordResetInfo()
  60. {
  61. if (\Ip\Internal\Admin\Backend::userId()) {
  62. //user has already been logged in
  63. \Ip\Internal\Content\Service::setManagementMode(1);
  64. return new \Ip\Response\Redirect(ipHomeUrl());
  65. }
  66. $content = ipView('view/passwordResetInfo.php');
  67. $response = ipResponse();
  68. $response->setLayout('Ip/Internal/Admin/view/loginLayout.php');
  69. $response->setLayoutVariable('content', $content);
  70. ipAddJs('assets/languageSelect.js');
  71. $response->setLayoutVariable('languageSelectForm', FormHelper::getLanguageSelectForm());
  72. return $response;
  73. }
  74. public function passwordResetSuccess()
  75. {
  76. if (\Ip\Internal\Admin\Backend::userId()) {
  77. //user has already been logged in
  78. \Ip\Internal\Content\Service::setManagementMode(1);
  79. return new \Ip\Response\Redirect(ipHomeUrl());
  80. }
  81. $content = ipView('view/passwordResetSuccess.php');
  82. $response = ipResponse();
  83. $response->setLayout('Ip/Internal/Admin/view/loginLayout.php');
  84. $response->setLayoutVariable('content', $content);
  85. ipAddJs('assets/languageSelect.js');
  86. $response->setLayoutVariable('languageSelectForm', FormHelper::getLanguageSelectForm());
  87. return $response;
  88. }
  89. public function passwordReset()
  90. {
  91. if (\Ip\Internal\Admin\Backend::userId()) {
  92. //user has already been logged in
  93. \Ip\Internal\Content\Service::setManagementMode(1);
  94. return new \Ip\Response\Redirect(ipHomeUrl());
  95. }
  96. $content = ipView('view/passwordReset2.php', array('passwordResetForm' => FormHelper::getPasswordResetForm2()));
  97. ipAddJs('Ip/Internal/Admin/assets/passwordReset2.js');
  98. $response = ipResponse();
  99. $response->setLayout('Ip/Internal/Admin/view/loginLayout.php');
  100. $response->setLayoutVariable('content', $content);
  101. ipAddJs('assets/languageSelect.js');
  102. $response->setLayoutVariable('languageSelectForm', FormHelper::getLanguageSelectForm());
  103. return $response;
  104. }
  105. public function loginAjax()
  106. {
  107. ipRequest()->mustBePost();
  108. $validateForm = FormHelper::getLoginForm();
  109. $errors = $validateForm->validate(ipRequest()->getPost());
  110. $username = ipRequest()->getPost('login');
  111. if (empty($errors)) {
  112. $model = Model::instance();
  113. if (!$model->login($username, ipRequest()->getPost('password'))) {
  114. $errors = $model->getErrors();
  115. }
  116. }
  117. $redirectUrl = ipHomeUrl();
  118. $model = Model::instance();
  119. $adminMenuItems = $model->getAdminMenuItems(null);
  120. if (!empty($adminMenuItems)) {
  121. //redirect user to the first module
  122. $firstMenuItem = $adminMenuItems[0];
  123. $redirectUrl = $firstMenuItem->getUrl();
  124. }
  125. if (empty($errors)) {
  126. $answer = array(
  127. 'status' => 'success',
  128. 'redirectUrl' => $redirectUrl
  129. );
  130. } else {
  131. $answer = array(
  132. 'status' => 'error',
  133. 'errors' => $errors
  134. );
  135. $usageStatistics = array(
  136. 'action' => 'Admin.loginFailed',
  137. 'data' => array(
  138. 'admin' => $username,
  139. 'errors' => $errors
  140. )
  141. );
  142. \Ip\Internal\System\Model::sendUsageStatistics($usageStatistics);
  143. }
  144. if (ipRequest()->getPost('ajax', 1)) {
  145. $response = new \Ip\Response\Json($answer);
  146. return $response;
  147. } else {
  148. //MultiSite autologin
  149. return new \Ip\Response\Redirect($redirectUrl);
  150. }
  151. }
  152. public function passwordResetAjax()
  153. {
  154. ipRequest()->mustBePost();
  155. $validateForm = FormHelper::getPasswordResetForm1();
  156. $errors = $validateForm->validate(ipRequest()->getPost());
  157. $username = ipRequest()->getPost('username');
  158. if (empty($errors)) {
  159. $user = \Ip\Internal\Administrators\Service::getByEmail($username);
  160. if (!$user) {
  161. $user = \Ip\Internal\Administrators\Service::getByUsername($username);
  162. }
  163. if ($user) {
  164. \Ip\Internal\Administrators\Service::sendResetPasswordLink($user['id']);
  165. } else {
  166. $errors['username'] = __('Following administrator doesn\'t exist', 'Ip-admin', false);
  167. }
  168. }
  169. if (empty($errors)) {
  170. $answer = array(
  171. 'status' => 'success',
  172. 'redirectUrl' => ipActionUrl(array('sa' => 'Admin.passwordResetInfo'))
  173. );
  174. } else {
  175. $answer = array(
  176. 'status' => 'error',
  177. 'errors' => $errors
  178. );
  179. }
  180. $response = new \Ip\Response\Json($answer);
  181. return $response;
  182. }
  183. public function passwordResetAjax2()
  184. {
  185. ipRequest()->mustBePost();
  186. $validateForm = FormHelper::getPasswordResetForm2();
  187. $errors = $validateForm->validate(ipRequest()->getPost());
  188. $userId = ipRequest()->getPost('userId');
  189. $secret = ipRequest()->getPost('secret');
  190. $password = ipRequest()->getPost('password');
  191. try {
  192. \Ip\Internal\Administrators\Service::resetPassword($userId, $secret, $password);
  193. } catch (\Ip\Exception $e) {
  194. $user['global_error'] = $e->getMessage();
  195. }
  196. if (empty($errors)) {
  197. $answer = array(
  198. 'status' => 'success',
  199. 'redirectUrl' => ipActionUrl(array('sa' => 'Admin.passwordResetSuccess'))
  200. );
  201. } else {
  202. $answer = array(
  203. 'status' => 'error',
  204. 'errors' => $errors
  205. );
  206. }
  207. $response = new \Ip\Response\Json($answer);
  208. return $response;
  209. }
  210. public function logout()
  211. {
  212. Model::instance()->logout();
  213. return new \Ip\Response\Redirect(ipFileUrl('admin/'));
  214. }
  215. public function changeLanguage()
  216. {
  217. $locale = ipRequest()->getPost('languageCode', 'en');
  218. $hour = 60 * 60;
  219. $day = $hour * 24;
  220. setcookie("ipAdminLocale", $locale, time() + $day * ipGetOption('Config.adminLocaleCookieExpire', 10 * 365));
  221. return new \Ip\Response\Json(array('success' => 1));
  222. }
  223. }