/foody.blogtamsudev.vn/app/Http/Controllers/TraitController/ArticleDetail.php

https://gitlab.com/ntphuc/BackendFeedy · PHP · 337 lines · 297 code · 34 blank · 6 comment · 49 complexity · bde1a853ec99550c82f70e2786034527 MD5 · raw file

  1. <?php
  2. namespace App\Http\Controllers\TraitController;
  3. use App\Models\Category;
  4. use Illuminate\Http\Request;
  5. use App\Jobs\ReleaseContent;
  6. use App\Models\MetaArticle;
  7. use App\Models\Article;
  8. use Illuminate\Support\Facades\Input;
  9. trait ArticleDetail
  10. {
  11. public function getCreate()
  12. {
  13. $this->authorize('CreateArticle');
  14. $data['location'] = Category::where('type', 'location')->get();
  15. $data['category'] = Category::where('type', 'category')->get();
  16. $data['guess'] = Category::where('type', 'guess')->get();
  17. return view('childs.article.create')->with($data);
  18. }
  19. function postCreate()
  20. {
  21. $this->authorize('CreateArticle');
  22. try {
  23. $data_article = \Input::except('_token', 'category', 'location', 'guess', 'seo_title', 'seo_meta', 'seo_description', 'tags', 'related', 'gallery', 'publish_time', 'publish_date', 'address', 'time_action', 'price');
  24. $meta_data = \Input::only(['address', 'time_action', 'price', 'seo_title', 'seo_meta', 'seo_description', 'category', 'location', 'guess', 'tags', 'related', 'gallery']);
  25. $article = new Article();
  26. $data = array();
  27. foreach ($data_article as $k => $v) {
  28. $article->$k = $v;
  29. }
  30. if (\Input::get('gallery') != '') {
  31. $folder_gallery = public_path() . \Input::get('gallery');
  32. if (is_dir($folder_gallery)) {
  33. foreach (scandir($folder_gallery) as $k => $items) {
  34. if ($k >= 3) {
  35. $data[] = str_replace('//', '/', $folder_gallery . '/' . $items);
  36. }
  37. }
  38. $gallery_path = json_encode($data);
  39. }else {
  40. $gallery_path = '';
  41. }
  42. } else {
  43. $gallery_path = '';
  44. }
  45. if (Input::get('status') == '') {
  46. $article->status = 'Draft';
  47. }
  48. $article->slug = str_slug(\Input::get('title'));
  49. $article->gallery_path = $gallery_path;
  50. $article->creator = \Auth::user()->email;
  51. $article->save();
  52. //meta insert
  53. foreach ($meta_data as $k => $v) {
  54. if ($k == 'related' || $k == 'tags') {
  55. if ($k == 'tags') {
  56. $tags = explode(',', $v);
  57. $meta_final = [];
  58. foreach ($tags as $items) {
  59. if (Category::where('title', $items)->where('type', 'tag')->count() > 0) {
  60. $tag = Category::where('title', $items)->where('type', 'tag')->first();
  61. $meta_final[] = [$tag->id => $tag->title];
  62. } else {
  63. $tag = new Category();
  64. $tag->title = $items;
  65. $tag->slug = str_slug($items);
  66. $tag->type = 'tag';
  67. $tag->parent_id = 0;
  68. $tag->status = 1;
  69. $tag->save();
  70. $meta_final[] = [$tag->id => $items];
  71. }
  72. }
  73. } else {
  74. $meta_final = [];
  75. $relates = explode(',', $v);
  76. foreach ($relates as $items) {
  77. $check = Article::where('title', $items)->count();
  78. if ($check > 0) {
  79. $relate = Article::where('title', $items)->first();
  80. $meta_final[] = [$relate->id => $relate->title];
  81. }
  82. }
  83. }
  84. $meta_insert = new MetaArticle ();
  85. $meta_insert->meta_key = $k;
  86. $meta_insert->meta_value = json_encode($meta_final);
  87. $meta_insert->article_id = $article->id;
  88. $meta_insert->save();
  89. } elseif ($k == 'category') {
  90. foreach (json_decode($v) as $cate) {
  91. $meta_insert = new MetaArticle ();
  92. $meta_insert->meta_key = 'relation_category';
  93. $meta_insert->meta_value = $cate;
  94. $meta_insert->article_id = $article->id;
  95. $meta_insert->save();
  96. }
  97. } elseif ($k == 'location') {
  98. foreach (json_decode($v) as $location) {
  99. $meta_insert = new MetaArticle ();
  100. $meta_insert->meta_key = 'relation_location';
  101. $meta_insert->meta_value = $location;
  102. $meta_insert->article_id = $article->id;
  103. $meta_insert->save();
  104. }
  105. } elseif ($k == 'guess') {
  106. foreach (json_decode($v) as $location) {
  107. $meta_insert = new MetaArticle ();
  108. $meta_insert->meta_key = 'relation_guess';
  109. $meta_insert->meta_value = $location;
  110. $meta_insert->article_id = $article->id;
  111. $meta_insert->save();
  112. }
  113. } else {
  114. $meta_insert = new MetaArticle ();
  115. $meta_insert->meta_key = 'review_' . $k;
  116. $meta_insert->meta_value = $v;
  117. $meta_insert->article_id = $article->id;
  118. $meta_insert->save();
  119. }
  120. }
  121. //Job publish Article
  122. if (Input::get('status') == '') {
  123. $datetime_publish = date('Y-m-d H:i', strtotime(\Input::get('publish_date') . ' ' . \Input::get('publish_time')));
  124. $time_delay = (strtotime($datetime_publish) - strtotime(date('Y-m-d H:i')));
  125. if ($time_delay >= 0) {
  126. $this->dispatch((new ReleaseContent($article->id))->delay($time_delay));
  127. }
  128. }
  129. //Insert Meta Seo
  130. return json_encode(['status' => 'success', 'msg' => 'Post Successfully']);
  131. } catch (\Exception $e) {
  132. return json_encode(['status' => 'error', 'msg' => $e->getMessage()]);
  133. }
  134. }
  135. public function getEdit($article_id)
  136. {
  137. $this->authorize('EditArticle');
  138. $data['location'] = Category::where('type', 'location')->get();
  139. $data['category'] = Category::where('type', 'category')->get();
  140. $data['guess'] = Category::where('type', 'guess')->get();
  141. $article = Article::find($article_id);
  142. foreach ($article->articleOtherInfoReview as $v) {
  143. $data[$v->meta_key] = $v->meta_value;
  144. }
  145. $this->authorize('PostOfUser', $article);
  146. $data['article'] = $article;
  147. return view('childs.article.edit')->with($data);
  148. }
  149. function postEdit($article_id)
  150. {
  151. $this->authorize('EditArticle');
  152. try {
  153. $data_article = \Input::except('_token', 'category', 'location', 'guess', 'seo_title', 'seo_meta', 'seo_description', 'tags', 'related', 'gallery', 'publish_time', 'publish_date', 'address', 'time_action', 'price');
  154. $meta_data = \Input::only(['address', 'time_action', 'price', 'seo_title', 'seo_meta', 'seo_description', 'category', 'location', 'guess', 'tags', 'related', 'gallery']);
  155. $article = Article::find($article_id);
  156. $data = array();
  157. foreach ($data_article as $k => $v) {
  158. $article->$k = $v;
  159. }
  160. if (\Input::get('gallery') != '') {
  161. $folder_gallery = public_path() . \Input::get('gallery');
  162. if (is_dir($folder_gallery)) {
  163. foreach (scandir($folder_gallery) as $k => $items) {
  164. if ($k >= 3) {
  165. $data[] = str_replace('//', '/', $folder_gallery . '/' . $items);
  166. }
  167. }
  168. $gallery_path = json_encode($data);
  169. }else {
  170. $gallery_path = '';
  171. }
  172. } else {
  173. $meta_data['gallery'] = $article->articlegallery->meta_value ;
  174. $gallery_path = $article->gallery_path;
  175. }
  176. $article->articleCategory()->detach();
  177. $article->title = \Input::get('title');
  178. $article->status = 'Draft';
  179. $article->slug = str_slug(\Input::get('title'));
  180. $article->gallery_path = $gallery_path;
  181. $article->creator = \Auth::user()->email;
  182. $article->save();
  183. //meta insert
  184. foreach ($meta_data as $k => $v) {
  185. if ($k == 'related' || $k == 'tags') {
  186. if ($k == 'tags') {
  187. $tags = explode(',', $v);
  188. $meta_final = [];
  189. foreach ($tags as $items) {
  190. if (Category::where('title', $items)->where('type', 'tag')->count() > 0) {
  191. $tag = Category::where('title', $items)->where('type', 'tag')->first();
  192. $meta_final[] = [$tag->id => $tag->title];
  193. } else {
  194. $tag = new Category();
  195. $tag->title = $items;
  196. $tag->slug = str_slug($items);
  197. $tag->type = 'tag';
  198. $tag->parent_id = 0;
  199. $tag->status = 1;
  200. $tag->save();
  201. $meta_final[] = [$tag->id => $items];
  202. }
  203. }
  204. } else {
  205. $meta_final = [];
  206. $relates = explode(',', $v);
  207. foreach ($relates as $items) {
  208. $check = Article::where('title', $items)->count();
  209. if ($check > 0) {
  210. $relate = Article::where('title', $items)->first();
  211. $meta_final[] = [$relate->id => $relate->title];
  212. }
  213. }
  214. }
  215. $meta_insert = new MetaArticle ();
  216. $meta_insert->meta_key = $k;
  217. $meta_insert->meta_value = json_encode($meta_final);
  218. $meta_insert->article_id = $article->id;
  219. $meta_insert->save();
  220. } elseif ($k == 'category') {
  221. foreach (json_decode($v) as $cate) {
  222. $meta_insert = new MetaArticle ();
  223. $meta_insert->meta_key = 'relation_category';
  224. $meta_insert->meta_value = $cate;
  225. $meta_insert->article_id = $article->id;
  226. $meta_insert->save();
  227. }
  228. } elseif ($k == 'location') {
  229. foreach (json_decode($v) as $location) {
  230. $meta_insert = new MetaArticle ();
  231. $meta_insert->meta_key = 'relation_location';
  232. $meta_insert->meta_value = $location;
  233. $meta_insert->article_id = $article->id;
  234. $meta_insert->save();
  235. }
  236. } elseif ($k == 'guess') {
  237. foreach (json_decode($v) as $location) {
  238. $meta_insert = new MetaArticle ();
  239. $meta_insert->meta_key = 'relation_guess';
  240. $meta_insert->meta_value = $location;
  241. $meta_insert->article_id = $article->id;
  242. $meta_insert->save();
  243. }
  244. } else {
  245. $meta_insert = new MetaArticle ();
  246. $meta_insert->meta_key = 'review_' . $k;
  247. if ($k == 'ingredients' || $k == 'directions') {
  248. $meta_insert->meta_value = str_replace(PHP_EOL, '<br>', $v);
  249. } else {
  250. $meta_insert->meta_value = $v;
  251. }
  252. $meta_insert->article_id = $article->id;
  253. $meta_insert->save();
  254. }
  255. }
  256. //Job publish Article
  257. $datetime_publish = date('Y-m-d H:i', strtotime(\Input::get('publish_date') . ' ' . \Input::get('publish_time')));
  258. $time_delay = (strtotime($datetime_publish) - strtotime(date('Y-m-d H:i')));
  259. if ($time_delay >= 0) {
  260. $this->dispatch((new ReleaseContent($article->id))->delay($time_delay));
  261. }
  262. //Insert Meta Seo
  263. return json_encode(['status' => 'success', 'msg' => 'Post Successfully']);
  264. } catch (\Exception $e) {
  265. return json_encode(['status' => 'error', 'msg' => $e->getMessage()]);
  266. }
  267. }
  268. function postDelete()
  269. {
  270. $this->authorize('DeleteArticle');
  271. try {
  272. $article_id = isset($_POST['id']) ? $_POST['id'] : 0;
  273. $article = Article::find((int)$article_id);
  274. $article->delete();
  275. return json_encode(['status' => 'success', 'msg' => 'Delete successfully']);
  276. } catch (\Exception $e) {
  277. return json_encode(['status' => 'error', 'msg' => $e->getMessage()]);
  278. }
  279. }
  280. function postPublish()
  281. {
  282. $this->authorize('PublishArticle');
  283. try {
  284. $article_id = isset($_POST['id']) ? $_POST['id'] : 0;
  285. $article = Article::find((int)$article_id);
  286. $article->status = 'publish';
  287. $article->save();
  288. return json_encode(['status' => 'success', 'msg' => 'Publish successfully']);
  289. } catch (\Exception $e) {
  290. return json_encode(['status' => 'error', 'msg' => $e->getMessage()]);
  291. }
  292. }
  293. public function anyEditPost(Request $request)
  294. {
  295. $this->authorize('EditArticle');
  296. try {
  297. return json_encode(['status' => 'success', 'msg' => 'Post Successfully']);
  298. } catch (\Exception $e) {
  299. return json_encode(['status' => 'error', 'msg' => $e->getMessage()]);
  300. }
  301. }
  302. }
  303. ?>