61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			61 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);
 | |
|     }
 | |
| }
 |