book = app(Book::class); $this->chapter = app(Chapter::class); $this->page = app(Page::class); $this->restrictionService = app(RestrictionService::class); } /** * Get the latest books added to the system. * @param $count * @param $page */ public function getRecentlyCreatedBooks($count = 20, $page = 0) { return $this->restrictionService->enforceBookRestrictions($this->book) ->orderBy('created_at', 'desc')->skip($page * $count)->take($count)->get(); } /** * Get the most recently updated books. * @param $count * @param int $page * @return mixed */ public function getRecentlyUpdatedBooks($count = 20, $page = 0) { return $this->restrictionService->enforceBookRestrictions($this->book) ->orderBy('updated_at', 'desc')->skip($page * $count)->take($count)->get(); } /** * Get the latest pages added to the system. * @param $count * @param $page */ public function getRecentlyCreatedPages($count = 20, $page = 0) { return $this->restrictionService->enforcePageRestrictions($this->page) ->orderBy('created_at', 'desc')->skip($page * $count)->take($count)->get(); } /** * Get the most recently updated pages. * @param $count * @param int $page * @return mixed */ public function getRecentlyUpdatedPages($count = 20, $page = 0) { return $this->restrictionService->enforcePageRestrictions($this->page) ->orderBy('updated_at', 'desc')->skip($page * $count)->take($count)->get(); } /** * Updates entity restrictions from a request * @param $request * @param Entity $entity */ public function updateRestrictionsFromRequest($request, Entity $entity) { $entity->restricted = $request->has('restricted') && $request->get('restricted') === 'true'; $entity->restrictions()->delete(); if ($request->has('restrictions')) { foreach ($request->get('restrictions') as $roleId => $restrictions) { foreach ($restrictions as $action => $value) { $entity->restrictions()->create([ 'role_id' => $roleId, 'action' => strtolower($action) ]); } } } $entity->save(); } /** * Prepare a string of search terms by turning * it into an array of terms. * Keeps quoted terms together. * @param $termString * @return array */ protected function prepareSearchTerms($termString) { preg_match_all('/"(.*?)"/', $termString, $matches); if (count($matches[1]) > 0) { $terms = $matches[1]; $termString = trim(preg_replace('/"(.*?)"/', '', $termString)); } else { $terms = []; } if (!empty($termString)) $terms = array_merge($terms, explode(' ', $termString)); return $terms; } }