BlogRepository.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <?php
  2. namespace Longyi\Blog\Repositories;
  3. use Carbon\Carbon;
  4. use Illuminate\Support\Arr;
  5. use Illuminate\Support\Facades\DB;
  6. use Illuminate\Support\Facades\Event;
  7. use Longyi\Blog\Models\Category;
  8. use Longyi\ImageUpload\Services\ImageUploadService;
  9. use Webkul\Core\Eloquent\Repository;
  10. class BlogRepository extends Repository
  11. {
  12. /**
  13. * Specify Model class name
  14. *
  15. * @return mixed
  16. */
  17. function model()
  18. {
  19. return 'Longyi\Blog\Models\Blog';
  20. }
  21. /**
  22. * Save blog.
  23. *
  24. * @param array $data
  25. * @return bool|\Longyi\Blog\Contracts\Blog
  26. */
  27. public function save(array $data)
  28. {
  29. Event::dispatch('admin.blogs.create.before', $data);
  30. $create_data = $data;
  31. if ( array_key_exists('src', $create_data) ) {
  32. unset($create_data['src']);
  33. }
  34. if ( array_key_exists('m_src', $create_data) ) {
  35. unset($create_data['m_src']);
  36. }
  37. $blog = $this->create($create_data);
  38. $this->uploadImages($data, $blog, 'src');
  39. $this->uploadImages($data, $blog, 'm_src');
  40. Event::dispatch('admin.blogs.create.after', $blog);
  41. return true;
  42. }
  43. /**
  44. * Update item.
  45. *
  46. * @param array $data
  47. * @param int $id
  48. * @return bool
  49. */
  50. public function updateItem(array $data, $id)
  51. {
  52. Event::dispatch('admin.blogs.update.before', $id);
  53. $update_data = $data;
  54. if ( array_key_exists('src', $update_data) ) {
  55. unset($update_data['src']);
  56. }
  57. if ( array_key_exists('m_src', $update_data) ) {
  58. unset($update_data['m_src']);
  59. }
  60. $blog = $this->update($update_data, $id);
  61. $this->uploadImages($data, $blog, 'src');
  62. $this->uploadImages($data, $blog, 'm_src');
  63. Event::dispatch('admin.blogs.update.after', $blog);
  64. return true;
  65. }
  66. /**
  67. * Upload category's images.
  68. *
  69. * @param array $data
  70. * @param \Webkul\Category\Contracts\Category $category
  71. * @param string $type
  72. * @return void
  73. */
  74. public function uploadImages($data, $blog, $type = 'src')
  75. {
  76. $imageUploadService = app(ImageUploadService::class);
  77. if (isset($data[$type])) {
  78. foreach ($data[$type] as $imageId => $image) {
  79. $file = $type . '.' . $imageId;
  80. if (request()->hasFile($file)) {
  81. if ($blog->{$type}) {
  82. $imageUploadService->delete($blog->{$type});
  83. }
  84. $result = $imageUploadService->upload(
  85. request()->file($file)
  86. );
  87. if (! ($result['success'] ?? false)) {
  88. throw new \Exception($result['error'] ?? 'Blog image upload failed.');
  89. }
  90. $blog->{$type} = $result['path'];
  91. $blog->save();
  92. }
  93. }
  94. } else {
  95. if ($blog->{$type}) {
  96. $imageUploadService->delete($blog->{$type});
  97. }
  98. $blog->{$type} = null;
  99. $blog->save();
  100. }
  101. }
  102. /**
  103. * Delete a blog item and delete the image from the disk or where ever it is.
  104. *
  105. * @param int $id
  106. * @return bool
  107. */
  108. public function destroy($id)
  109. {
  110. $blogItem = $this->find($id);
  111. $imageUploadService = app(ImageUploadService::class);
  112. if ($blogItem->src) {
  113. $imageUploadService->delete($blogItem->src);
  114. }
  115. if ($blogItem->m_src) {
  116. $imageUploadService->delete($blogItem->m_src);
  117. }
  118. return $this->model->destroy($id);
  119. }
  120. /**
  121. * Get only active blogs.
  122. *
  123. * @return array
  124. */
  125. public function getActiveBlogs()
  126. {
  127. $locale = config('app.locale');
  128. $blogs = DB::table('blogs')
  129. ->where('published_at', '<=', Carbon::now()->format('Y-m-d'))
  130. ->where('status', 1)
  131. ->where('locale', $locale)
  132. ->orderBy('id', 'DESC')
  133. ->paginate(12);
  134. return $blogs;
  135. }
  136. /**
  137. * Get only single blogs.
  138. *
  139. * @return array
  140. */
  141. public function getSingleBlogs($id)
  142. {
  143. $blog = DB::table('blogs')
  144. ->whereSlug($id)
  145. ->where('published_at', '<=', Carbon::now()->format('Y-m-d'))
  146. ->where('status', 1)
  147. ->first();
  148. return $blog;
  149. }
  150. /**
  151. * Get only single blogs.
  152. *
  153. * @return array
  154. */
  155. public function getBlogCategories($id)
  156. {
  157. $locale = config('app.locale');
  158. $categoryId = DB::table('blog_categories')
  159. ->where('slug', $id)->first();
  160. $blogs = DB::table('blogs')
  161. ->where('published_at', '<=', Carbon::now()->format('Y-m-d'))
  162. ->where('default_category', $categoryId['id'])
  163. ->where('status', 1)
  164. ->where('locale', $locale)
  165. ->orderBy('id', 'DESC')
  166. ->paginate(12);
  167. return $blogs;
  168. }
  169. }