PageRenderTime 42ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/Ip/Internal/Pages/AdminController.php

https://gitlab.com/x33n/ImpressPages
PHP | 462 lines | 348 code | 109 blank | 5 comment | 40 complexity | e25cb507177c8ad8b8cb95dfb4fd9305 MD5 | raw file
  1. <?php
  2. /**
  3. * @package ImpressPages
  4. *
  5. */
  6. namespace Ip\Internal\Pages;
  7. class AdminController extends \Ip\Controller
  8. {
  9. public function index()
  10. {
  11. ipAddJsVariable('ipTranslationAreYouSure', __('Are you sure?', 'Ip-admin', false));
  12. ipAddJs('Ip/Internal/Core/assets/js/angular.js');
  13. ipAddJs('Ip/Internal/Pages/assets/js/pages.js');
  14. ipAddJs('Ip/Internal/Pages/assets/js/pagesLayout.js');
  15. ipAddJs('Ip/Internal/Pages/assets/js/menuList.js');
  16. ipAddJs('Ip/Internal/Pages/assets/jstree/jstree.min.js');
  17. ipAddJs('Ip/Internal/Pages/assets/js/jquery.pageTree.js');
  18. ipAddJs('Ip/Internal/Pages/assets/js/jquery.pageProperties.js');
  19. ipAddJs('Ip/Internal/Grid/assets/grid.js');
  20. ipAddJs('Ip/Internal/Grid/assets/gridInit.js');
  21. ipAddJs('Ip/Internal/Grid/assets/subgridField.js');
  22. ipAddJsVariable('languageList', Helper::languageList());
  23. ipAddJsVariable('ipPagesLanguagesPermission', ipAdminPermission('Languages'));
  24. $menus = Model::getMenuList();
  25. foreach($menus as $key => &$menu) {
  26. $default = 'top';
  27. if ($key == 0) {
  28. $default = 'bottom';
  29. }
  30. $menu['defaultPosition'] = Model::getDefaultMenuPagePosition($menu['alias'], false, $default);
  31. $default = 'bellow';
  32. $menu['defaultPositionWhenSelected'] = Model::getDefaultMenuPagePosition($menu['alias'], true, $default);
  33. }
  34. $menus = ipFilter('ipPagesMenuList', $menus);
  35. ipAddJsVariable('menuList', $menus);
  36. $variables = array(
  37. 'addPageForm' => Helper::addPageForm(),
  38. 'addMenuForm' => Helper::addMenuForm(),
  39. 'languagesUrl' => ipConfig()->baseUrl() . '?aa=Languages.index'
  40. );
  41. $layout = ipView('view/layout.php', $variables);
  42. ipResponse()->setLayoutVariable('removeAdminContentWrapper', true);
  43. ipAddJsVariable('listStylePageSize', ipGetOption('Pages.pageListSize', 30));
  44. return $layout->render();
  45. }
  46. public function pagesGridGateway()
  47. {
  48. $parentId = ipRequest()->getRequest('parentId');
  49. if (!$parentId) {
  50. throw new \Ip\Exception('Missing required parameter');
  51. }
  52. $worker = new \Ip\Internal\Grid\Worker(Helper::pagesGridConfig($parentId));
  53. $result = $worker->handleMethod(ipRequest());
  54. return new \Ip\Response\JsonRpc($result);
  55. }
  56. public function getPages()
  57. {
  58. $data = ipRequest()->getRequest();
  59. if (empty($data['languageId'])) {
  60. throw new \Ip\Exception("Missing required parameters");
  61. }
  62. $language = ipContent()->getLanguage($data['languageId']);
  63. if (!$language) {
  64. throw new \Ip\Exception("Language doesn't exist. " . $data['languageId']);
  65. }
  66. $languageCode = $language->getCode();
  67. if (empty($data['menuName'])) {
  68. throw new \Ip\Exception("Missing required parameters");
  69. }
  70. $menuName = $data['menuName'];
  71. $parentId = ipDb()->selectValue(
  72. 'page',
  73. 'id',
  74. array('languageCode' => $languageCode, 'alias' => $menuName, 'isDeleted' => 0)
  75. );
  76. $tree = JsTreeHelper::getPageTree($languageCode, $parentId);
  77. $tree = ipFilter('ipPageTree', $tree, array('languageCode' => $languageCode, 'parentId' => $parentId));
  78. $responseData = array(
  79. 'tree' => $tree
  80. );
  81. return new \Ip\Response\Json($responseData);
  82. }
  83. public function pagePropertiesForm()
  84. {
  85. $pageId = ipRequest()->getQuery('pageId');
  86. if (!$pageId) {
  87. throw new \Ip\Exception("Missing required parameters");
  88. }
  89. $variables = array(
  90. 'form' => Helper::pagePropertiesForm($pageId)
  91. );
  92. $layout = ipView('view/pageProperties.php', $variables)->render();
  93. $data = array(
  94. 'html' => $layout
  95. );
  96. return new \Ip\Response\Json($data);
  97. }
  98. public function updatePage()
  99. {
  100. ipRequest()->mustBePost();
  101. $data = ipRequest()->getPost();
  102. if (empty($data['pageId'])) {
  103. throw new \Ip\Exception("Missing required parameters");
  104. }
  105. $pageId = (int)$data['pageId'];
  106. $page = ipContent()->getPage($pageId);
  107. if (!$page) {
  108. throw new \Ip\Exception("Page doesn't exist");
  109. }
  110. $answer = array();
  111. if (strtotime($data['createdAt']) === false) {
  112. $answer['errors']['createdAt'] = __('Incorrect date format. Example:', 'Ip-admin', false) . date(" Y-m-d");
  113. }
  114. if (strtotime($data['updatedAt']) === false) {
  115. $answer['errors']['updatedAt'] = __('Incorrect date format. Example:', 'Ip-admin', false) . date(" Y-m-d");
  116. }
  117. if ($data['alias'] != $page->getAlias()) {
  118. if (Model::getPageByAlias($page->getLanguageCode(), $data['alias'])) {
  119. $answer['errors']['alias'] = __('This alias is already occupied', 'Ip-admin');
  120. }
  121. }
  122. $data['isVisible'] = !empty($data['isVisible']);
  123. $data['isDisabled'] = !empty($data['isDisabled']);
  124. $data['isSecured'] = !empty($data['isSecured']);
  125. $data['isBlank'] = !empty($data['isBlank']);
  126. if ($page->getUrlPath() == $data['urlPath']) {
  127. unset($data['urlPath']);
  128. }
  129. if (empty($answer['errors'])) {
  130. Model::updatePageProperties($pageId, $data);
  131. ipEvent('ipFormUpdatePageSubmitted', array($data));
  132. $answer['status'] = 'success';
  133. $answer['newPageUrl'] = ipPage($pageId)->getUrlPath();
  134. } else {
  135. $answer['status'] = 'error';
  136. }
  137. return new \Ip\Response\Json($answer);
  138. }
  139. public function updateMenuForm()
  140. {
  141. $menuId = (int)ipRequest()->getQuery('id');
  142. if (empty($menuId)) {
  143. throw new \Ip\Exception("Missing required parameters");
  144. }
  145. $form = Helper::menuForm($menuId);
  146. $html = $form->render();
  147. $data = array(
  148. 'html' => $html
  149. );
  150. return new \Ip\Response\Json($data);
  151. }
  152. public function addPage()
  153. {
  154. ipRequest()->mustBePost();
  155. $parentId = ipRequest()->getPost('parentId');
  156. if (empty($parentId)) {
  157. throw new \Ip\Exception("Missing required parameters");
  158. }
  159. $title = ipRequest()->getPost('title');
  160. if ($title === '') {
  161. $title = __('Untitled', 'Ip-admin', false);
  162. }
  163. $isVisible = ipRequest()->getPost('isVisible', 0);
  164. $pageId = Service::addPage($parentId, $title, array('isVisible' => $isVisible));
  165. $position = ipRequest()->getPost('position');
  166. if ($position !== null) {
  167. Service::movePage($pageId, $parentId, $position);
  168. }
  169. $eventData = ipRequest()->getPost();
  170. ipEvent('ipFormCreatePageSubmitted', $eventData);
  171. $answer = array(
  172. 'status' => 'success',
  173. 'pageId' => $pageId
  174. );
  175. return new \Ip\Response\Json($answer);
  176. }
  177. public function setDefaultPagePosition()
  178. {
  179. ipRequest()->mustBePost();
  180. $alias = ipRequest()->getPost('alias');
  181. $isPageSelected = ipRequest()->getPost('isPageSelected');
  182. $position = ipRequest()->getPost('position');
  183. Model::setDefaultMenuPagePosition($alias, $isPageSelected, $position);
  184. return new \Ip\Response\Json(1);
  185. }
  186. public function deletePage()
  187. {
  188. ipRequest()->mustBePost();
  189. $pageId = (int)ipRequest()->getPost('pageId');
  190. if (!$pageId) {
  191. throw new \Ip\Exception("Page id is not set");
  192. }
  193. Service::deletePage($pageId);
  194. $answer = array();
  195. $answer['status'] = 'success';
  196. return new \Ip\Response\Json($answer);
  197. }
  198. public function movePage()
  199. {
  200. ipRequest()->mustBePost();
  201. $data = ipRequest()->getPost();
  202. if (!isset($data['pageId'])) {
  203. throw new \Ip\Exception("Page id is not set");
  204. }
  205. $pageId = (int)$data['pageId'];
  206. if (!empty($data['destinationParentId'])) {
  207. $destinationParentId = $data['destinationParentId'];
  208. } else {
  209. if (!isset($data['languageId'])) {
  210. throw new \Ip\Exception("Missing required parameters");
  211. }
  212. throw new \Ip\Exception\NotImplemented();
  213. }
  214. if (!isset($data['destinationPosition'])) {
  215. throw new \Ip\Exception("Destination position is not set");
  216. }
  217. $destinationPosition = $data['destinationPosition'];
  218. try {
  219. Model::movePage($pageId, $destinationParentId, $destinationPosition);
  220. } catch (\Ip\Exception $e) {
  221. $answer = array(
  222. 'status' => 'error',
  223. 'error' => $e->getMessage()
  224. );
  225. return new \Ip\Response\Json($answer);
  226. }
  227. $answer = array(
  228. 'status' => 'success'
  229. );
  230. return new \Ip\Response\Json($answer);
  231. }
  232. public function copyPage()
  233. {
  234. ipRequest()->mustBePost();
  235. $data = ipRequest()->getPost();
  236. if (!isset($data['pageId'])) {
  237. throw new \Ip\Exception("Page id is not set");
  238. }
  239. $pageId = (int)$data['pageId'];
  240. if (!isset($data['destinationParentId'])) {
  241. throw new \Ip\Exception("Missing required parameter");
  242. }
  243. $destinationParentId = $data['destinationParentId'];
  244. if (!isset($data['destinationPosition'])) {
  245. throw new \Ip\Exception("Destination position is not set");
  246. }
  247. $destinationPosition = $data['destinationPosition'];
  248. try {
  249. Service::copyPage($pageId, $destinationParentId, $destinationPosition);
  250. } catch (\Ip\Exception $e) {
  251. $answer = array(
  252. 'status' => 'error',
  253. 'error' => $e->getMessage()
  254. );
  255. return new \Ip\Response\Json($answer);
  256. }
  257. $answer = array(
  258. 'status' => 'success'
  259. );
  260. return new \Ip\Response\Json($answer);
  261. }
  262. public function getPageUrl()
  263. {
  264. $data = ipRequest()->getQuery();
  265. if (!isset($data['pageId'])) {
  266. throw new \Ip\Exception("Page id is not set");
  267. }
  268. $pageId = (int)$data['pageId'];
  269. $page = new \Ip\Page($pageId);
  270. $answer = array(
  271. 'pageUrl' => $page->getLink()
  272. );
  273. return new \Ip\Response\Json($answer);
  274. }
  275. public function updateMenu()
  276. {
  277. $request = ipRequest();
  278. $menuId = $request->getPost('id');
  279. $title = $request->getPost('title');
  280. $alias = $request->getPost('alias');
  281. $layout = $request->getPost('layout');
  282. $type = $request->getPost('type');
  283. if (empty($menuId) || empty($title) || empty($alias) || empty($layout) || empty($type)) {
  284. throw new \Ip\Exception('Missing required parameters');
  285. }
  286. // validate page alias
  287. $page = Model::getPage($menuId);
  288. $errors = array();
  289. if ($page['alias'] != $alias) {
  290. if (Model::getPageByAlias($page['languageCode'], $alias)) {
  291. $errors['alias'] = __('This alias is already occupied', 'Ip-admin');
  292. }
  293. }
  294. if ($errors) {
  295. return new \Ip\Response\Json(array(
  296. 'status' => 'error',
  297. 'errors' => $errors,
  298. ));
  299. }
  300. Service::updateMenu($menuId, $alias, $title, $layout, $type);
  301. $eventData = $request->getPost();
  302. ipEvent('ipFormUpdateMenuSubmitted', $eventData);
  303. $answer = array(
  304. 'status' => 'ok'
  305. );
  306. return new \Ip\Response\Json($answer);
  307. }
  308. public function createMenu()
  309. {
  310. $request = ipRequest();
  311. $request->mustBePost();
  312. $languageCode = $request->getPost('languageCode');
  313. $title = $request->getPost('title');
  314. $type = $request->getPost('type');
  315. if (empty($title)) {
  316. $title = __('Untitled', 'Ip-admin', false);
  317. }
  318. $pageId = Service::createMenu($languageCode, null, $title, $type);
  319. $menu = ipContent()->getPage($pageId);
  320. $eventData = $request->getPost();
  321. $eventData['id'] = $pageId;
  322. ipEvent('ipFormCreateMenuSubmitted', $eventData);
  323. $answer = array(
  324. 'status' => 'success',
  325. 'menuName' => $menu->getAlias()
  326. );
  327. return new \Ip\Response\Json($answer);
  328. }
  329. public function changeMenuOrder()
  330. {
  331. ipRequest()->mustBePost();
  332. $menuId = ipRequest()->getPost('menuId');
  333. $newIndex = ipRequest()->getPost('newIndex');
  334. if (empty($menuId) || !isset($newIndex)) {
  335. throw new \Ip\Exception("Missing required parameters");
  336. }
  337. Model::changeMenuOrder($menuId, $newIndex);
  338. return new \Ip\Response\Json(array(
  339. 'error' => 0
  340. ));
  341. }
  342. }