From c4e65e18c4d2dbd19c0d6c41b76991818bab1c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 15 Mar 2016 13:57:40 +0100 Subject: [PATCH 1/5] FEATURE: add parent class for all search engines --- app/Handlers/Search/Content.php | 15 +++++++-------- app/Handlers/Search/Search.php | 26 ++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 8 deletions(-) create mode 100644 app/Handlers/Search/Search.php 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/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 @@ + Date: Tue, 15 Mar 2016 13:59:06 +0100 Subject: [PATCH 2/5] FEATURE: prevent searching empty string. This commit adds exception handling for serching empty string --- app/Http/Controllers/Admin/Search.php | 10 ++++++++-- resources/views/admin/search/page.blade.php | 12 ++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/Http/Controllers/Admin/Search.php b/app/Http/Controllers/Admin/Search.php index 76658312..744e561d 100644 --- a/app/Http/Controllers/Admin/Search.php +++ b/app/Http/Controllers/Admin/Search.php @@ -11,12 +11,18 @@ class Search extends Controller { public function getSearch() { - $results = []; $term = Input::get('search'); if (!is_null($term)) { - $results = $this->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]); 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)
From 6f50549072fc21b6020d2ba7b17d042d12354e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 15 Mar 2016 14:00:53 +0100 Subject: [PATCH 3/5] FEATURE: register file searching --- app/Handlers/Search/Files.php | 35 +++++++++++++++++++ app/Handlers/Search/Presenters/AdminFiles.php | 19 ++++++++++ app/Providers/AppServiceProvider.php | 3 ++ resources/lang/en/search.php | 10 +++--- 4 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 app/Handlers/Search/Files.php create mode 100644 app/Handlers/Search/Presenters/AdminFiles.php 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/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 From 3c9c53e04d2a6e7c7dc53733746f72c122c92c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 15 Mar 2016 14:01:24 +0100 Subject: [PATCH 4/5] DOCUMENTATION: add documentation for Search controller --- app/Http/Controllers/Admin/Search.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/app/Http/Controllers/Admin/Search.php b/app/Http/Controllers/Admin/Search.php index 744e561d..6250e8a3 100644 --- a/app/Http/Controllers/Admin/Search.php +++ b/app/Http/Controllers/Admin/Search.php @@ -2,13 +2,21 @@ namespace App\Http\Controllers\Admin; +use App\Handlers\Contracts\SearchHandler; +use App\Handlers\Contracts\SearchPresenterHandler; use App\Http\Controllers\Controller; use App\Http\Requests; use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Input; +use Symfony\Component\Process\Exception\InvalidArgumentException; class Search extends Controller { + /** + * Create form for searching + * + * @return $this|\Illuminate\Contracts\View\Factory|\Illuminate\View\View + */ public function getSearch() { $results = []; @@ -28,6 +36,15 @@ class Search extends Controller 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') @@ -35,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), From 55ee35d14ba429686184e1bacb2d5f17e4a85047 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Kv=C3=A1=C4=8Dek?= Date: Tue, 15 Mar 2016 14:02:01 +0100 Subject: [PATCH 5/5] FIX: remove spaces before and after searched string in input --- resources/views/admin/search/form.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 @@
- +