| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace BookStack\Entities\Tools; | 
					
						
							| 
									
										
										
										
											2020-11-22 09:20:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | use BookStack\Entities\EntityProvider; | 
					
						
							|  |  |  | use BookStack\Entities\Models\Book; | 
					
						
							|  |  |  | use BookStack\Entities\Models\Bookshelf; | 
					
						
							| 
									
										
										
										
											2021-11-20 22:03:56 +08:00
										 |  |  | use BookStack\Entities\Models\Chapter; | 
					
						
							| 
									
										
										
										
											2021-11-06 08:32:01 +08:00
										 |  |  | use BookStack\Entities\Models\Page; | 
					
						
							| 
									
										
										
										
											2020-11-22 09:20:38 +08:00
										 |  |  | use Illuminate\Support\Collection; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SiblingFetcher | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Search among the siblings of the entity of given type and id. | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function fetch(string $entityType, int $entityId): Collection | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |         $entity = (new EntityProvider())->get($entityType)->visible()->findOrFail($entityId); | 
					
						
							| 
									
										
										
										
											2020-11-22 09:20:38 +08:00
										 |  |  |         $entities = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Page in chapter
 | 
					
						
							| 
									
										
										
										
											2021-11-06 08:32:01 +08:00
										 |  |  |         if ($entity instanceof Page && $entity->chapter) { | 
					
						
							| 
									
										
										
										
											2020-11-22 09:20:38 +08:00
										 |  |  |             $entities = $entity->chapter->getVisiblePages(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Page in book or chapter
 | 
					
						
							| 
									
										
										
										
											2021-11-20 22:03:56 +08:00
										 |  |  |         if (($entity instanceof Page && !$entity->chapter) || $entity instanceof Chapter) { | 
					
						
							| 
									
										
										
										
											2020-11-22 09:20:38 +08:00
										 |  |  |             $entities = $entity->book->getDirectChildren(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // Book
 | 
					
						
							|  |  |  |         // Gets just the books in a shelf if shelf is in context
 | 
					
						
							| 
									
										
										
										
											2021-11-06 08:32:01 +08:00
										 |  |  |         if ($entity instanceof Book) { | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  |             $contextShelf = (new ShelfContext())->getContextualShelfForBook($entity); | 
					
						
							| 
									
										
										
										
											2020-11-22 09:20:38 +08:00
										 |  |  |             if ($contextShelf) { | 
					
						
							|  |  |  |                 $entities = $contextShelf->visibleBooks()->get(); | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |                 $entities = Book::visible()->get(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-06 08:32:01 +08:00
										 |  |  |         // Shelf
 | 
					
						
							|  |  |  |         if ($entity instanceof Bookshelf) { | 
					
						
							| 
									
										
										
										
											2020-11-22 09:20:38 +08:00
										 |  |  |             $entities = Bookshelf::visible()->get(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $entities; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |