From 29b0eab3144ab6653a1cbddad9b43daecd9d4cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 15 Mar 2016 14:12:03 +0100 Subject: [PATCH] FEATURE: divide search engines into admin and visitor ones. After this separation, search engine may be registered once for visitor area (with one presenter) and once for admin area (with different presenter). --- .../Registrators/SearchEngineRegistrator.php | 33 ++++++++++++++----- app/Http/Controllers/Admin/Search.php | 3 +- app/Providers/AppServiceProvider.php | 4 +-- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/app/Handlers/Registrators/SearchEngineRegistrator.php b/app/Handlers/Registrators/SearchEngineRegistrator.php index 734fbac3..29bc700d 100644 --- a/app/Handlers/Registrators/SearchEngineRegistrator.php +++ b/app/Handlers/Registrators/SearchEngineRegistrator.php @@ -5,14 +5,20 @@ use App\Enumerations\Exceptions\EnumerationExistsException; use App\Handlers\Contracts\SearchHandler; use App\Handlers\Contracts\SearchPresenterHandler; use App\Handlers\Registrators\Items\SearchEngine; +use Symfony\Component\Process\Exception\InvalidArgumentException; class SearchEngineRegistrator { + const ADMIN = 'admin'; + const VISITOR = 'visitor'; protected $searchEngines; function __construct($app) { - $this->searchEngines = []; + $this->searchEngines = [ + self::ADMIN => [], + self::VISITOR => [] + ]; } /** @@ -21,37 +27,46 @@ class SearchEngineRegistrator * @param SearchHandler $search * @param SearchPresenterHandler $presenter * + * @param $type + * * @throws EnumerationExistsException */ - public function register(SearchHandler $search, SearchPresenterHandler $presenter) + public function register(SearchHandler $search, SearchPresenterHandler $presenter, $type) { - $this->checkIfRegistered($search->getId()); + $this->checkIfRegistered($type, $search->getId()); // register new extension - $this->searchEngines[$search->getId()] = [$search, $presenter]; + $this->searchEngines[$type][$search->getId()] = [$search, $presenter]; } /** * Getter for all registered extensions * + * @param $type + * * @return array */ - public function get() + public function get($type) { - return $this->searchEngines; + if (!isset($this->searchEngines[$type])) { + throw new InvalidArgumentException('Invalid type ' . $type); + } + + return $this->searchEngines[$type]; } /** * Checks if this section is not already defined * + * @param $type * @param $id * * @throws EnumerationExistsException */ - private function checkIfRegistered($id) + private function checkIfRegistered($type, $id) { - if (isset($this->searchEngines[$id])) { - throw new EnumerationExistsException('Already existing search engine ' . $id); + if (isset($this->searchEngines[$type][$id])) { + throw new EnumerationExistsException('Already existing search engine ' . $id . ' in ' . $type); } } } diff --git a/app/Http/Controllers/Admin/Search.php b/app/Http/Controllers/Admin/Search.php index 6250e8a3..45c5eaf8 100644 --- a/app/Http/Controllers/Admin/Search.php +++ b/app/Http/Controllers/Admin/Search.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Handlers\Contracts\SearchHandler; use App\Handlers\Contracts\SearchPresenterHandler; +use App\Handlers\Registrators\SearchEngineRegistrator; use App\Http\Controllers\Controller; use App\Http\Requests; use Illuminate\Support\Facades\App; @@ -48,7 +49,7 @@ class Search extends Controller protected function performSearch($term) { $engines = App::make('registerSearchEngine') - ->get(); + ->get(SearchEngineRegistrator::ADMIN); $resultsParts = []; foreach ($engines as $engine) { diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 31abfee2..f7c4357d 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -109,7 +109,7 @@ class AppServiceProvider extends ServiceProvider { $registrator = $this->app->make('registerSearchEngine'); - $registrator->register(new Content(), new AdminContentPresenter()); - $registrator->register(new Files(), new AdminFiles()); + $registrator->register(new Content(), new AdminContentPresenter(), SearchEngineRegistrator::ADMIN); + $registrator->register(new Files(), new AdminFiles(), SearchEngineRegistrator::ADMIN); } }