![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/ledger.corals.io/Corals/modules/CMS/Services/ |
<?php namespace Corals\Modules\CMS\Services; use Corals\Modules\CMS\Models\Category; use Corals\Modules\CMS\Models\Content; use Corals\Modules\CMS\Models\Post; use Corals\Modules\CMS\Transformers\API\ContentPresenter; use Corals\Modules\Utility\Models\Tag\Tag; class CMSService { public $internalState = false; /** * @return mixed */ public function getContentQuery() { $contentQuery = Content::query(); return $contentQuery; } /** * @param $request * @param $categorySlug * @return mixed * @throws \Exception */ public function getPostsByCategory($request, $categorySlug) { $category = Category::active()->where('slug', $categorySlug)->first(); if (!$category) { abort(404, 'Not Found!!'); } $posts = $category->posts(); $posts = $this->applyFilters($request, $posts); return $this->paginateResult($posts); } /** * @param $request * @param $tagSlug * @return mixed * @throws \Exception */ public function getPostsByTag($request, $tagSlug) { $tag = Tag::active()->where('slug', $tagSlug)->first(); if (!$tag) { abort(404, 'Not Found!!'); } $posts = Post::query()->withAnyTags([$tag->name], 'CMS'); $posts = $this->applyFilters($request, $posts); return $this->paginateResult($posts); } protected function applyFilters($request, $queryBuilder) { $queryBuilder->published(); $queryBuilder->internal($this->internalState); if (!user()) { $queryBuilder->public(); } $query = strip_tags($request->get('query')); if (!empty($query)) { $queryBuilder->where(function ($subQuery) use ($query) { $subQuery->where('title', 'like', "%$query%") ->orWhere('content', 'like', "%$query%"); }); } return $queryBuilder; } /** * @param $request * @param $type * @return mixed * @throws \Exception */ public function contentListByType($request, $type) { $contentQuery = $this->getContentQuery(); $contentQuery->where('type', $type); $contentQuery = $this->applyFilters($request, $contentQuery); return $this->paginateResult($contentQuery); } /** * @param $queryBuilder * @return mixed * @throws \Exception */ protected function paginateResult($queryBuilder) { $presenter = new ContentPresenter(); return $presenter->present($queryBuilder->paginate()); } /** * @param $request * @param $slug * @return mixed * @throws \Exception */ public function show($request, $slug) { $contentQuery = $this->getContentQuery(); $contentQuery = $this->applyFilters($request, $contentQuery); $item = $contentQuery->where('slug', \Str::slug($slug))->first(); if (!$item) { abort(404, 'Not Found!'); } $item->setPresenter(new ContentPresenter()); return $item->presenter(); } }