/www/cms/cms-controllers/index.php

https://bitbucket.org/broo/sitedev-core · PHP · 152 lines · 102 code · 45 blank · 5 comment · 28 complexity · 944bc0942fe4e5d230e11ac5639a8ce0 MD5 · raw file

  1. <?php
  2. require_once '../prepend.php';
  3. $page = new \App\Cms\Back\Page();
  4. if ($page->isAllowed()) {
  5. // Инициализация объекта
  6. $obj = null;
  7. if (!empty($_GET['id'])) {
  8. $obj = \App\Cms\Front\Controller::getById($_GET['id']);
  9. if (!$obj) reload();
  10. } else if (array_key_exists('add', $_GET)) {
  11. $obj = new \App\Cms\Front\Controller();
  12. }
  13. // Форма редактирования или добавления объекта
  14. if ($obj) {
  15. $form = \App\Cms\Ext\Form::load(dirname(__FILE__) . '/form.xml');
  16. $form->fillWithObject($obj);
  17. if ($obj->id) {
  18. $form->content = $obj->getContent();
  19. if ($obj->isDocumentMain) {
  20. $form->typeId = 3;
  21. }
  22. }
  23. $form->run();
  24. if ($form->isSubmited() && $form->isSuccess()) {
  25. if ($form->isSubmited('delete')) {
  26. $obj->delete();
  27. \App\Cms\Back\Log::logModule(
  28. \App\Cms\Back\Log::ACT_DELETE,
  29. $obj->id,
  30. $obj->getTitle()
  31. );
  32. \App\Cms\Ext\Form::saveCookieStatus();
  33. redirect($page->getUrl('path'));
  34. } else {
  35. $obj->fillWithData($form->toArray());
  36. if ($obj->typeId == 3) {
  37. $obj->typeId = 1;
  38. $obj->isDocumentMain = true;
  39. } else {
  40. $obj->isDocumentMain = false;
  41. }
  42. if ($obj->checkUnique()) {
  43. $obj->save();
  44. \App\Cms\Back\Log::logModule(
  45. $form->isSubmited('insert') ? \App\Cms\Back\Log::ACT_CREATE : \App\Cms\Back\Log::ACT_MODIFY,
  46. $obj->id,
  47. $obj->getTitle()
  48. );
  49. if (
  50. $form->isSubmited('update') ||
  51. (!is_file($obj->getFilename()) && $form->content != '')
  52. ) {
  53. $obj->saveContent($form->content);
  54. }
  55. if ($obj->isDocumentMain) {
  56. \Ext\Db::get()->execute(
  57. 'UPDATE ' . $obj->getTable() .
  58. ' SET is_document_main = 0' .
  59. ' WHERE is_document_main = 1 AND ' .
  60. $obj->getPrimaryKeyWhereNot()
  61. );
  62. }
  63. \App\Cms\Ext\Form::saveCookieStatus();
  64. reload('?id=' . $obj->id);
  65. } else {
  66. $form->setUpdateStatus(\App\Cms\Ext\Form::ERROR);
  67. $form->filename->setUpdateStatus(\Ext\Form\Element::ERROR_EXIST);
  68. }
  69. }
  70. }
  71. }
  72. // Статус обработки формы
  73. $formStatusXml = '';
  74. if (!isset($form) || !$form->isSubmited()) {
  75. $formStatusXml = \App\Cms\Ext\Form::getCookieStatusXml(
  76. empty($obj) ? 'Выполнено' : 'Данные сохранены'
  77. );
  78. \App\Cms\Ext\Form::clearCookieStatus();
  79. }
  80. // Внутренняя навигация
  81. $filterXml = '';
  82. foreach (\App\Cms\Front\Controller::getList() as $item) {
  83. $filterXml .= $item->getBackOfficeXml();
  84. }
  85. $filterXml = \Ext\Xml::node('local-navigation', $filterXml);
  86. // XML модуля
  87. $xml = $filterXml . $formStatusXml;
  88. $attrs = array('type' => 'simple', 'is-able-to-add' => 'true');
  89. if (empty($obj)) {
  90. if (\App\Cms\Back\Section::get()->description) {
  91. $xml .= \Ext\Xml::notEmptyNode('content', \Ext\Xml::cdata(
  92. 'html',
  93. '<p class="first">' . \App\Cms\Back\Section::get()->description . '</p>'
  94. ));
  95. }
  96. } else if ($obj->getId()) {
  97. $attrs['id'] = $obj->id;
  98. $xml .= \Ext\Xml::cdata('title', $obj->getTitle());
  99. $xml .= $form->getXml();
  100. } else {
  101. $attrs['is-new'] = 1;
  102. $xml .= \Ext\Xml::cdata('title', 'Добавление');
  103. $xml .= $form->getXml();
  104. }
  105. $page->addContent(\Ext\Xml::node('module', $xml, $attrs));
  106. }
  107. $page->output();