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).
This commit is contained in:
@@ -5,14 +5,20 @@ use App\Enumerations\Exceptions\EnumerationExistsException;
|
|||||||
use App\Handlers\Contracts\SearchHandler;
|
use App\Handlers\Contracts\SearchHandler;
|
||||||
use App\Handlers\Contracts\SearchPresenterHandler;
|
use App\Handlers\Contracts\SearchPresenterHandler;
|
||||||
use App\Handlers\Registrators\Items\SearchEngine;
|
use App\Handlers\Registrators\Items\SearchEngine;
|
||||||
|
use Symfony\Component\Process\Exception\InvalidArgumentException;
|
||||||
|
|
||||||
class SearchEngineRegistrator
|
class SearchEngineRegistrator
|
||||||
{
|
{
|
||||||
|
const ADMIN = 'admin';
|
||||||
|
const VISITOR = 'visitor';
|
||||||
protected $searchEngines;
|
protected $searchEngines;
|
||||||
|
|
||||||
function __construct($app)
|
function __construct($app)
|
||||||
{
|
{
|
||||||
$this->searchEngines = [];
|
$this->searchEngines = [
|
||||||
|
self::ADMIN => [],
|
||||||
|
self::VISITOR => []
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -21,37 +27,46 @@ class SearchEngineRegistrator
|
|||||||
* @param SearchHandler $search
|
* @param SearchHandler $search
|
||||||
* @param SearchPresenterHandler $presenter
|
* @param SearchPresenterHandler $presenter
|
||||||
*
|
*
|
||||||
|
* @param $type
|
||||||
|
*
|
||||||
* @throws EnumerationExistsException
|
* @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
|
// register new extension
|
||||||
$this->searchEngines[$search->getId()] = [$search, $presenter];
|
$this->searchEngines[$type][$search->getId()] = [$search, $presenter];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Getter for all registered extensions
|
* Getter for all registered extensions
|
||||||
*
|
*
|
||||||
|
* @param $type
|
||||||
|
*
|
||||||
* @return array
|
* @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
|
* Checks if this section is not already defined
|
||||||
*
|
*
|
||||||
|
* @param $type
|
||||||
* @param $id
|
* @param $id
|
||||||
*
|
*
|
||||||
* @throws EnumerationExistsException
|
* @throws EnumerationExistsException
|
||||||
*/
|
*/
|
||||||
private function checkIfRegistered($id)
|
private function checkIfRegistered($type, $id)
|
||||||
{
|
{
|
||||||
if (isset($this->searchEngines[$id])) {
|
if (isset($this->searchEngines[$type][$id])) {
|
||||||
throw new EnumerationExistsException('Already existing search engine ' . $id);
|
throw new EnumerationExistsException('Already existing search engine ' . $id . ' in ' . $type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin;
|
|||||||
|
|
||||||
use App\Handlers\Contracts\SearchHandler;
|
use App\Handlers\Contracts\SearchHandler;
|
||||||
use App\Handlers\Contracts\SearchPresenterHandler;
|
use App\Handlers\Contracts\SearchPresenterHandler;
|
||||||
|
use App\Handlers\Registrators\SearchEngineRegistrator;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Requests;
|
use App\Http\Requests;
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
@@ -48,7 +49,7 @@ class Search extends Controller
|
|||||||
protected function performSearch($term)
|
protected function performSearch($term)
|
||||||
{
|
{
|
||||||
$engines = App::make('registerSearchEngine')
|
$engines = App::make('registerSearchEngine')
|
||||||
->get();
|
->get(SearchEngineRegistrator::ADMIN);
|
||||||
|
|
||||||
$resultsParts = [];
|
$resultsParts = [];
|
||||||
foreach ($engines as $engine) {
|
foreach ($engines as $engine) {
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
{
|
{
|
||||||
$registrator = $this->app->make('registerSearchEngine');
|
$registrator = $this->app->make('registerSearchEngine');
|
||||||
|
|
||||||
$registrator->register(new Content(), new AdminContentPresenter());
|
$registrator->register(new Content(), new AdminContentPresenter(), SearchEngineRegistrator::ADMIN);
|
||||||
$registrator->register(new Files(), new AdminFiles());
|
$registrator->register(new Files(), new AdminFiles(), SearchEngineRegistrator::ADMIN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user