PageRenderTime 33ms CodeModel.GetById 7ms RepoModel.GetById 0ms app.codeStats 0ms

/app/Http/Controllers/AdminController.php

https://gitlab.com/igorbabko/blog
PHP | 325 lines | 189 code | 34 blank | 102 comment | 5 complexity | 54e39189c90144fc3cd8c5145650cd1e MD5 | raw file
  1. <?php
  2. namespace Blog\Http\Controllers;
  3. use Blog\Http\Controllers\Controller;
  4. use Blog\Http\Requests\PostCreateRequest;
  5. use Blog\Http\Requests\PostUpdateRequest;
  6. use Blog\Http\Requests\TagCreateRequest;
  7. use Blog\Http\Requests\TagUpdateRequest;
  8. use Blog\Http\Requests\UploadFileRequest;
  9. use Blog\Http\Requests\UploadNewFolderRequest;
  10. use Blog\Jobs\PostFormFields;
  11. use Blog\Post;
  12. use Blog\Services\UploadsManager;
  13. use Blog\Tag;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\File;
  16. class AdminController extends Controller
  17. {
  18. protected $manager;
  19. protected $fields = [
  20. 'tag' => '',
  21. 'title' => '',
  22. 'subtitle' => '',
  23. 'meta_description' => '',
  24. 'page_image' => '',
  25. 'layout' => 'blog.layouts.index',
  26. 'reverse_direction' => 0,
  27. ];
  28. public function __construct(UploadsManager $manager)
  29. {
  30. $this->manager = $manager;
  31. }
  32. /**
  33. * Display a listing of the posts.
  34. *
  35. * @return Response
  36. */
  37. public function index(Request $request)
  38. {
  39. $folder = $request->get('folder');
  40. $data = $this->manager->folderInfo($folder);
  41. return view('admin.index', ['posts' => Post::all(), 'tags' => Tag::all(), 'uploads' => $data]);
  42. }
  43. /**
  44. * Show the form for creating a new post.
  45. *
  46. * @return \Illuminate\Http\Response
  47. */
  48. public function createPost()
  49. {
  50. $data = $this->dispatch(new PostFormFields());
  51. return view('admin.post.create', $data);
  52. }
  53. /**
  54. * Store a newly created post in storage.
  55. *
  56. * @param \Illuminate\Http\Request $request
  57. * @return \Illuminate\Http\Response
  58. */
  59. public function storePost(PostCreateRequest $request)
  60. {
  61. $post = Post::create($request->postFillData());
  62. $post->syncTags($request->get('tags', []));
  63. return redirect()->route('admin.post.index')
  64. ->withSuccess('New Post Successfully Created.');
  65. }
  66. /**
  67. * Display the posts list.
  68. *
  69. * @param int $pageId
  70. * @return \Illuminate\Http\Response
  71. */
  72. public function showPosts($pageId)
  73. {
  74. }
  75. /**
  76. * Display the specified post.
  77. *
  78. * @param int $id
  79. * @return \Illuminate\Http\Response
  80. */
  81. public function showPost($id)
  82. {
  83. //
  84. }
  85. /**
  86. * Show the form for editing the specified post.
  87. *
  88. * @param int $id
  89. * @return \Illuminate\Http\Response
  90. */
  91. public function editPost($id)
  92. {
  93. $data = $this->dispatch(new PostFormFields($id));
  94. return view('admin.post.edit', $data);
  95. }
  96. /**
  97. * Update the specified post in storage.
  98. *
  99. * @param \Illuminate\Http\Request $request
  100. * @param int $id
  101. * @return \Illuminate\Http\Response
  102. */
  103. public function updatePost(PostUpdateRequest $request, $id)
  104. {
  105. $post = Post::findOrFail($id);
  106. $post->fill($request->postFillData());
  107. $post->save();
  108. $post->syncTags($request->get('tags', []));
  109. if ($request->action === 'continue') {
  110. return redirect()
  111. ->back()
  112. ->withSuccess('Post saved.');
  113. }
  114. return redirect()
  115. ->route('admin.post.index')
  116. ->withSuccess('Post saved.');
  117. }
  118. /**
  119. * Remove the specified post from storage.
  120. *
  121. * @param int $id
  122. * @return \Illuminate\Http\Response
  123. */
  124. public function destroyPost($id)
  125. {
  126. $post = Post::findOrFail($id);
  127. $post->tags()->detach();
  128. $post->delete();
  129. return redirect()
  130. ->route('admin.post.index')
  131. ->withSuccess('Post deleted.');
  132. }
  133. // tags
  134. /**
  135. * Show the form for creating a new tag.
  136. *
  137. * @return \Illuminate\Http\Response
  138. */
  139. public function createTag()
  140. {
  141. $data = [];
  142. foreach ($this->fields as $field => $default) {
  143. $data[$field] = old($field, $default);
  144. }
  145. return view('admin.tag.create', $data);
  146. }
  147. /**
  148. * Store a newly created tag in storage.
  149. *
  150. * @param \Illuminate\Http\Request $request
  151. * @return \Illuminate\Http\Response
  152. */
  153. public function storeTag(TagCreateRequest $request)
  154. {
  155. $tag = new Tag();
  156. foreach (array_keys($this->fields) as $field) {
  157. $tag->$field = $request->get($field);
  158. }
  159. $tag->save();
  160. return redirect('/admin/tag')->withSuccess("The tag '$tag->tag' was created.");
  161. }
  162. /**
  163. * Show the form for editing a tag.
  164. *
  165. * @param int $id
  166. * @return \Illuminate\Http\Response
  167. */
  168. public function editTag($id)
  169. {
  170. $tag = Tag::findOrFail($id);
  171. $data = ['id' => $id];
  172. foreach (array_keys($this->fields) as $field) {
  173. $data[$field] = old($field, $tag->$field);
  174. }
  175. return view('admin.tag.edit', $data);
  176. }
  177. /**
  178. * Update the tag in storage.
  179. *
  180. * @param TagUpdateRequest $request
  181. * @param int $id
  182. * @return \Illuminate\Http\Response
  183. */
  184. public function updateTag(TagUpdateRequest $request, $id)
  185. {
  186. $tag = Tag::findOrFail($id);
  187. foreach (array_keys(array_except($this->fields, ['tag'])) as $field) {
  188. $tag->$field = $request->get($field);
  189. }
  190. $tag->save();
  191. return redirect("/admin/tag/$id/edit")->withSuccess("Changes saved.");
  192. }
  193. /**
  194. * Remove the tag from storage.
  195. *
  196. * @param int $id
  197. * @return \Illuminate\Http\Response
  198. */
  199. public function destroyTag($id)
  200. {
  201. $tag = Tag::findOrFail($id);
  202. $tag->delete();
  203. return redirect('/admin/tag')->withSuccess("The '$tag->tag' tag has been deleted.");
  204. }
  205. /////////////////
  206. // uploads
  207. /**
  208. * Show page of files / subfolders
  209. */
  210. // public function index(Request $request)
  211. // {
  212. // $folder = $request->get('folder');
  213. // $data = $this->manager->folderInfo($folder);
  214. // return view('admin.upload.index', $data);
  215. // }
  216. /**
  217. * Create a new folder
  218. */
  219. public function createFolder(UploadNewFolderRequest $request)
  220. {
  221. $new_folder = $request->get('new_folder');
  222. $folder = $request->get('folder') . '/' . $new_folder;
  223. $result = $this->manager->createDirectory($folder);
  224. if ($result === true) {
  225. return redirect()
  226. ->back()
  227. ->withSuccess("Folder '$new_folder' created.");
  228. }
  229. $error = $result ?: "An error occurred creating directory.";
  230. return redirect()
  231. ->back()
  232. ->withErrors([$error]);
  233. }
  234. /**
  235. * Delete a file
  236. */
  237. public function deleteFile(Request $request)
  238. {
  239. $del_file = $request->get('del_file');
  240. $path = $request->get('folder') . '/' . $del_file;
  241. $result = $this->manager->deleteFile($path);
  242. if ($result === true) {
  243. return redirect()
  244. ->back()
  245. ->withSuccess("File '$del_file' deleted.");
  246. }
  247. $error = $result ?: "An error occurred deleting file.";
  248. return redirect()
  249. ->back()
  250. ->withErrors([$error]);
  251. }
  252. /**
  253. * Delete a folder
  254. */
  255. public function deleteFolder(Request $request)
  256. {
  257. $del_folder = $request->get('del_folder');
  258. $folder = $request->get('folder') . '/' . $del_folder;
  259. $result = $this->manager->deleteDirectory($folder);
  260. if ($result === true) {
  261. return redirect()
  262. ->back()
  263. ->withSuccess("Folder '$del_folder' deleted.");
  264. }
  265. $error = $result ?: "An error occurred deleting directory.";
  266. return redirect()
  267. ->back()
  268. ->withErrors([$error]);
  269. }
  270. /**
  271. * Upload new file
  272. */
  273. public function uploadFile(UploadFileRequest $request)
  274. {
  275. $file = $_FILES['file'];
  276. $fileName = $request->get('file_name');
  277. $fileName = $fileName ?: $file['name'];
  278. $path = str_finish($request->get('folder'), '/') . $fileName;
  279. $content = File::get($file['tmp_name']);
  280. $result = $this->manager->saveFile($path, $content);
  281. if ($result === true) {
  282. return redirect()
  283. ->back()
  284. ->withSuccess("File '$fileName' uploaded.");
  285. }
  286. $error = $result ?: "An error occurred uploading file.";
  287. return redirect()
  288. ->back()
  289. ->withErrors([$error]);
  290. }
  291. }