| 
									
										
										
										
											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
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |