62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			62 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
|  | <?php namespace BookStack\Entities; | ||
|  | 
 | ||
|  | use BookStack\Entities\Repos\EntityRepo; | ||
|  | use Illuminate\Session\Store; | ||
|  | 
 | ||
|  | class EntityContextManager | ||
|  | { | ||
|  |     protected $session; | ||
|  |     protected $entityRepo; | ||
|  | 
 | ||
|  |     protected $KEY_SHELF_CONTEXT_ID = 'context_bookshelf_id'; | ||
|  | 
 | ||
|  |     /** | ||
|  |      * EntityContextManager constructor. | ||
|  |      * @param Store $session | ||
|  |      * @param EntityRepo $entityRepo | ||
|  |      */ | ||
|  |     public function __construct(Store $session, EntityRepo $entityRepo) | ||
|  |     { | ||
|  |         $this->session = $session; | ||
|  |         $this->entityRepo = $entityRepo; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Get the current bookshelf context for the given book. | ||
|  |      * @param Book $book | ||
|  |      * @return Bookshelf|null | ||
|  |      */ | ||
|  |     public function getContextualShelfForBook(Book $book) | ||
|  |     { | ||
|  |         $contextBookshelfId = $this->session->get($this->KEY_SHELF_CONTEXT_ID, null); | ||
|  |         if (is_int($contextBookshelfId)) { | ||
|  | 
 | ||
|  |             /** @var Bookshelf $shelf */ | ||
|  |             $shelf = $this->entityRepo->getById('bookshelf', $contextBookshelfId); | ||
|  | 
 | ||
|  |             if ($shelf && $shelf->contains($book)) { | ||
|  |                 return $shelf; | ||
|  |             } | ||
|  | 
 | ||
|  |         } | ||
|  |         return null; | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Store the current contextual shelf ID. | ||
|  |      * @param int $shelfId | ||
|  |      */ | ||
|  |     public function setShelfContext(int $shelfId) | ||
|  |     { | ||
|  |         $this->session->put($this->KEY_SHELF_CONTEXT_ID, $shelfId); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * Clear the session stored shelf context id. | ||
|  |      */ | ||
|  |     public function clearShelfContext() | ||
|  |     { | ||
|  |         $this->session->forget($this->KEY_SHELF_CONTEXT_ID); | ||
|  |     } | ||
|  | 
 | ||
|  | } |