+<?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);
+ }
+
+}
\ No newline at end of file