PageRenderTime 40ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/src/Controllers/Admin/PageManagementController.php

https://gitlab.com/buildcode/cms
PHP | 257 lines | 136 code | 42 blank | 79 comment | 13 complexity | dde496f59f6247df06916cc59493a47f MD5 | raw file
  1. <?php
  2. namespace Buildcode\Cms\Controllers\Admin;
  3. use Buildcode\Cms\Buildblock;
  4. use Buildcode\Cms\Controllers\Controller;
  5. use Buildcode\Cms\Traits\ValidatesRequest;
  6. use Buildcode\Cms\Utilities\Form\Form;
  7. use Illuminate\Http\Request;
  8. use Illuminate\View\Factory as View;
  9. use Validator;
  10. use Buildcode\Cms\Repositories\TemplateRepository;
  11. class PageManagementController extends Controller
  12. {
  13. use ValidatesRequest;
  14. /**
  15. * Inject controller dependencies.
  16. *
  17. * @param Buildcode\Cms\Repositories\TemplateRepository $template
  18. */
  19. public function __construct(TemplateRepository $template)
  20. {
  21. $this->template = $template;
  22. }
  23. public function index(Request $request)
  24. {
  25. if ( ! $request->route()->parent_id)
  26. $block = buildblock(['label' => 'root', 'fields' => ['title'], 'with_hidden' => true]);
  27. else
  28. $block = buildblock(['id' => $request->route()->parent_id, 'fields' => ['title'], 'with_hidden' => true]);
  29. return view('cms::admin.page_management.overview', [
  30. 'active_page' => 'page_management',
  31. 'parent' => $block
  32. ]);
  33. }
  34. /**
  35. * Show the editing / creation form of the specified block.
  36. *
  37. * @param int $id
  38. * @param string $action
  39. * @param Illuminate\Http\Request $request
  40. * @return redirect
  41. */
  42. public function getAction($id, $action, Request $request)
  43. {
  44. $actionMap = [
  45. 'create' => 'showCreationForm',
  46. 'edit' => 'showEditingForm',
  47. 'delete' => 'showDeletionForm',
  48. 'restore' => 'restoreBlock',
  49. 'properties' => 'showPropertiesForm',
  50. 'hide' => 'hideBlock'
  51. ];
  52. if (array_key_exists($action, $actionMap)) {
  53. $block = buildblock(['id' => $id, 'with_hidden' => true, 'with_trashed' => true]);
  54. return call_user_func([$this, $actionMap[$action]], $block, $request);
  55. }
  56. return redirect(route('cms.index'));
  57. }
  58. /**
  59. * Show the creation form of the specified block.
  60. *
  61. * @param Buildcode\Cms\Buildblock $block
  62. * @return Illuminate\Routing\view
  63. */
  64. public function showCreationForm(Buildblock $block, Request $request)
  65. {
  66. if (! $block->hasChildTemplate() && ! $request->has('template')) {
  67. return view('cms::admin.page_management.pick_template', compact('block'));
  68. }
  69. $form = Form::build(
  70. $request->get('template', $block->getChildTemplate()),
  71. new Buildblock
  72. );
  73. return view('cms::admin.page_management.form', compact('form', 'block'));
  74. }
  75. /**
  76. * Show the editing form of the specified block.
  77. *
  78. * @param Buildcode\Cms\Buildblock $block
  79. * @return Illuminate\Routing\view
  80. */
  81. public function showEditingForm(Buildblock $block)
  82. {
  83. $form = Form::build(
  84. $this->template->find($block->template_id),
  85. $block
  86. );
  87. return view('cms::admin.page_management.form', compact('form', 'block'));
  88. }
  89. /**
  90. * Show the deletion page of the specified block.
  91. *
  92. * @param Buildcode\Cms\Buildblock $block
  93. * @return Illuminate\Routing\view
  94. */
  95. public function showDeletionForm(Buildblock $block)
  96. {
  97. if (! $block->isDeleted()) {
  98. $block->delete();
  99. }
  100. return view('cms::admin.page_management.block_deleted', compact('block'));
  101. }
  102. /**
  103. * Restore the deleted block.
  104. *
  105. * @param Buildcode\Cms\Buildblock $block
  106. */
  107. public function restoreBlock(Buildblock $block)
  108. {
  109. $block->restore();
  110. return redirect(route('cms.action', [$block->getId(), 'edit']));
  111. }
  112. /**
  113. * Show the properties of a block.
  114. *
  115. * @param Buildcode\Cms\Buildblock $block
  116. * @return Illuminate\Routing\view
  117. */
  118. public function showPropertiesForm(Buildblock $block)
  119. {
  120. if ( ! is_admin()) {
  121. return redirect(route('cms.action', [$id, 'edit']));
  122. }
  123. $templates = $this->template->getAll();
  124. return view('cms::admin.page_management.properties', compact('block', 'templates'));
  125. }
  126. /**
  127. * Toggle the hidden status of a block.
  128. *
  129. * @param Buildcode\Cms\Buildblock $block
  130. * @param Illuminate\Http\Request $request
  131. * @return Illuminate\Routing\view
  132. */
  133. public function hideBlock(Buildblock $block, Request $request)
  134. {
  135. $updatedBlock = $block->toggleHide();
  136. if ($request->ajax()) {
  137. return response()->json(['success' => true, 'block' => $updatedBlock]);
  138. }
  139. return redirect()->back();
  140. }
  141. /**
  142. * Save the specified block.
  143. *
  144. * @param int $id
  145. * @param string $action
  146. * @param Request $request
  147. * @return redirect
  148. */
  149. public function postAction($id, $action, Request $request)
  150. {
  151. $actionMap = [
  152. 'create' => 'postCreate',
  153. 'edit' => 'postEdit',
  154. 'properties' => 'postProperties'
  155. ];
  156. if (array_key_exists($action, $actionMap)) {
  157. $block = buildblock(['id' => $id, 'with_hidden' => true, 'with_trashed' => true]);
  158. return call_user_func([$this, $actionMap[$action]], $block, $request);
  159. }
  160. return redirect(route('cms.index'));
  161. }
  162. /**
  163. * Save the specified block (create)
  164. *
  165. * @param Buildcode\Cms\Buildblock $parent
  166. * @param Request $request
  167. * @return redirect
  168. */
  169. public function postCreate(Buildblock $parent, Request $request)
  170. {
  171. if (! $this->validateRequest($request, $parent->getChildTemplate())) {
  172. return redirect()->back()->withInput();
  173. }
  174. $block = Buildblock::make($parent, $request->toArray());
  175. flash('De pagina is succesvol aangemaakt');
  176. return redirect(route('cms.action', [$block->id, 'edit']));
  177. }
  178. /**
  179. * Save the specified block (edit)
  180. *
  181. * @param Buildcode\Cms\Buildblock $block
  182. * @param Request $request
  183. * @return redirect
  184. */
  185. public function postEdit(Buildblock $block, Request $request)
  186. {
  187. if (! $this->validateRequest($request, $block->template())) {
  188. return redirect()->back()->withInput();
  189. }
  190. $block->save($request->toArray());
  191. if ($request->has('preview'))
  192. return redirect(url($block->url) . '?cms_preview=1');
  193. flash('De pagina is succesvol opgeslagen', ['urls' => [['url' => request()->path(), 'title' => 'Terug']]]);
  194. return redirect(route('cms.page', [$block->parent_id]));
  195. }
  196. /**
  197. * Save properties of the specified block
  198. *
  199. * @param Buildcode\Cms\Buildblock $block
  200. * @param Request $request
  201. * @return redirect
  202. */
  203. public function postProperties(Buildblock $block, Request $request)
  204. {
  205. $block->update(
  206. $request->except('_token')
  207. );
  208. // Only regenerate all urls if exclude value was changed
  209. if ($block->exclude_from_url != $request->exclude_from_url) {
  210. generate_all_urls();
  211. }
  212. flash('Eigenschappen zijn opgeslagen', ['urls' => [['url' => request()->path(), 'title' => 'Terug']]]);
  213. return redirect(route('cms.page', [$block->parent_id]));
  214. }
  215. }