diff --git a/app/Handlers/Search/Content.php b/app/Handlers/Search/Content.php index 48e30681..1dd3b364 100644 --- a/app/Handlers/Search/Content.php +++ b/app/Handlers/Search/Content.php @@ -1,10 +1,9 @@ tokenize($term); return ContentModel::where('content', 'LIKE', $token) - ->orWhere('meta_description', 'LIKE', $token) - ->orWhere('meta_keywords', 'LIKE', $token) - ->orWhere('title', 'LIKE', $token) - ->orWhere('url', 'LIKE', $token) - ->get(); + ->orWhere('meta_description', 'LIKE', $token) + ->orWhere('meta_keywords', 'LIKE', $token) + ->orWhere('title', 'LIKE', $token) + ->orWhere('url', 'LIKE', $token) + ->get(); } public function getId() diff --git a/app/Handlers/Search/Files.php b/app/Handlers/Search/Files.php new file mode 100644 index 00000000..5105b3c5 --- /dev/null +++ b/app/Handlers/Search/Files.php @@ -0,0 +1,35 @@ +tokenize($term); + + return File::where('original_filename', 'LIKE', $token) + ->orWhere('keywords', 'LIKE', $token) + ->orWhere('description', 'LIKE', $token) + ->orWhere('mime_type', 'LIKE', $token) + ->get(); + } +} \ No newline at end of file diff --git a/app/Handlers/Search/Presenters/AdminFiles.php b/app/Handlers/Search/Presenters/AdminFiles.php new file mode 100644 index 00000000..7ce21748 --- /dev/null +++ b/app/Handlers/Search/Presenters/AdminFiles.php @@ -0,0 +1,19 @@ + $foundItems]); + } +} \ No newline at end of file diff --git a/app/Handlers/Search/Search.php b/app/Handlers/Search/Search.php new file mode 100644 index 00000000..ada51c7d --- /dev/null +++ b/app/Handlers/Search/Search.php @@ -0,0 +1,26 @@ +performSearch($term); + try { + $results = $this->performSearch($term); + } catch (InvalidArgumentException $e) { + // user entered empty string (or something like empty string) + return redirect() + ->route('search') + ->with('error', $e->getMessage()); + } } return view('admin.search.page', ['search' => $term, 'results' => $results]); } + /** + * Method used for performing search. + * + * This method iterates over all registered search engines and returns results for each engine apart. + * + * @param string $term search text + * + * @return array array of results. One item per each engine + */ protected function performSearch($term) { $engines = App::make('registerSearchEngine') @@ -29,10 +52,17 @@ class Search extends Controller $resultsParts = []; foreach ($engines as $engine) { + /** + * @var SearchHandler $search + * @var SearchPresenterHandler $presenter + */ + list ($search, $presenter) = $engine; + // try to find given term $results = $search->search($term); + // create result object $resultsParts[$search->getId()] = [ 'name' => $search->getName(), 'content' => $presenter->render($results), diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index bfcf32f6..31abfee2 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -7,7 +7,9 @@ use App\Handlers\Registrators\SettingsExtensionRegistrator; use App\Handlers\Registrators\TemplateRegistrator; use App\Handlers\Registrators\WidgetRegistrator; use App\Handlers\Search\Content; +use App\Handlers\Search\Files; use App\Handlers\Search\Presenters\AdminContent as AdminContentPresenter; +use App\Handlers\Search\Presenters\AdminFiles; use App\Widgets\HtmlCode\HtmlCode; use Illuminate\Support\ServiceProvider; @@ -108,5 +110,6 @@ class AppServiceProvider extends ServiceProvider $registrator = $this->app->make('registerSearchEngine'); $registrator->register(new Content(), new AdminContentPresenter()); + $registrator->register(new Files(), new AdminFiles()); } } diff --git a/resources/lang/en/search.php b/resources/lang/en/search.php index e79caadc..e467800c 100644 --- a/resources/lang/en/search.php +++ b/resources/lang/en/search.php @@ -1,7 +1,9 @@ 'Content', - 'term' => 'Search', - 'results' => 'Found results', - 'pageTitle' => 'Search' + 'content' => 'Content', + 'term' => 'Search', + 'results' => 'Found results', + 'pageTitle' => 'Search', + 'files' => 'Files', + 'emptyString' => 'Cannot search for empty string!' ]; \ No newline at end of file diff --git a/resources/views/admin/search/form.blade.php b/resources/views/admin/search/form.blade.php index e2c0bcc5..f4a45faa 100644 --- a/resources/views/admin/search/form.blade.php +++ b/resources/views/admin/search/form.blade.php @@ -1,6 +1,6 @@
- +
diff --git a/resources/views/admin/search/page.blade.php b/resources/views/admin/search/page.blade.php index 0eb9deb4..cbf25edb 100644 --- a/resources/views/admin/search/page.blade.php +++ b/resources/views/admin/search/page.blade.php @@ -8,6 +8,18 @@

@lang('search.pageTitle')

+ @if (session('success')) +
+ {{ session('success') }} +
+ @endif + + @if (session('error')) +
+ {{ session('error') }} +
+ @endif + @if ($search)