2016-02-20 20:37:06 +08:00
|
|
|
<?php namespace BookStack\Repos;
|
|
|
|
|
|
|
|
use BookStack\Book;
|
|
|
|
use BookStack\Chapter;
|
2016-03-06 03:00:26 +08:00
|
|
|
use BookStack\Entity;
|
2016-02-20 20:37:06 +08:00
|
|
|
use BookStack\Page;
|
2016-02-29 03:03:04 +08:00
|
|
|
use BookStack\Services\RestrictionService;
|
2016-02-20 20:37:06 +08:00
|
|
|
|
|
|
|
class EntityRepo
|
|
|
|
{
|
|
|
|
|
2016-03-06 03:00:26 +08:00
|
|
|
/**
|
|
|
|
* @var Book $book
|
|
|
|
*/
|
2016-02-20 20:37:06 +08:00
|
|
|
public $book;
|
2016-03-06 03:00:26 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @var Chapter
|
|
|
|
*/
|
2016-02-20 20:37:06 +08:00
|
|
|
public $chapter;
|
2016-03-06 03:00:26 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @var Page
|
|
|
|
*/
|
2016-02-20 20:37:06 +08:00
|
|
|
public $page;
|
2016-03-06 03:00:26 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @var RestrictionService
|
|
|
|
*/
|
|
|
|
protected $restrictionService;
|
2016-02-20 20:37:06 +08:00
|
|
|
|
|
|
|
/**
|
|
|
|
* EntityService constructor.
|
|
|
|
*/
|
2016-03-06 03:00:26 +08:00
|
|
|
public function __construct()
|
2016-02-20 20:37:06 +08:00
|
|
|
{
|
2016-03-06 03:00:26 +08:00
|
|
|
$this->book = app(Book::class);
|
|
|
|
$this->chapter = app(Chapter::class);
|
|
|
|
$this->page = app(Page::class);
|
|
|
|
$this->restrictionService = app(RestrictionService::class);
|
2016-02-20 20:37:06 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the latest books added to the system.
|
|
|
|
* @param $count
|
|
|
|
* @param $page
|
|
|
|
*/
|
|
|
|
public function getRecentlyCreatedBooks($count = 20, $page = 0)
|
|
|
|
{
|
2016-02-29 03:03:04 +08:00
|
|
|
return $this->restrictionService->enforceBookRestrictions($this->book)
|
2016-03-06 03:00:26 +08:00
|
|
|
->orderBy('created_at', 'desc')->skip($page * $count)->take($count)->get();
|
2016-02-20 20:37:06 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the most recently updated books.
|
|
|
|
* @param $count
|
|
|
|
* @param int $page
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public function getRecentlyUpdatedBooks($count = 20, $page = 0)
|
|
|
|
{
|
2016-02-29 03:03:04 +08:00
|
|
|
return $this->restrictionService->enforceBookRestrictions($this->book)
|
2016-03-06 03:00:26 +08:00
|
|
|
->orderBy('updated_at', 'desc')->skip($page * $count)->take($count)->get();
|
2016-02-20 20:37:06 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the latest pages added to the system.
|
|
|
|
* @param $count
|
|
|
|
* @param $page
|
|
|
|
*/
|
|
|
|
public function getRecentlyCreatedPages($count = 20, $page = 0)
|
|
|
|
{
|
2016-02-29 03:03:04 +08:00
|
|
|
return $this->restrictionService->enforcePageRestrictions($this->page)
|
2016-03-06 03:00:26 +08:00
|
|
|
->orderBy('created_at', 'desc')->skip($page * $count)->take($count)->get();
|
2016-02-20 20:37:06 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get the most recently updated pages.
|
|
|
|
* @param $count
|
|
|
|
* @param int $page
|
|
|
|
* @return mixed
|
|
|
|
*/
|
|
|
|
public function getRecentlyUpdatedPages($count = 20, $page = 0)
|
|
|
|
{
|
2016-02-29 03:03:04 +08:00
|
|
|
return $this->restrictionService->enforcePageRestrictions($this->page)
|
2016-03-06 03:00:26 +08:00
|
|
|
->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;
|
2016-02-20 20:37:06 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|