From b886b447c939db888aee84224995da58540b4503 Mon Sep 17 00:00:00 2001 From: Thomas Lange Date: Sun, 22 Oct 2017 21:04:02 +0200 Subject: Implemented: A full-text search functionality for posts and pages in the administration area. In addition, some markup within the "/*/index.php" files of the admin template was re-formatted. --- admin/page/search.php | 52 +++++++++++++++++++++++++++++++++++++ admin/post/search.php | 52 +++++++++++++++++++++++++++++++++++++ core/language/de.php | 12 +++++++++ core/language/en.php | 12 +++++++++ core/namespace/Page/Item.php | 14 ++++++++++ template/admin/html/home.php | 20 +++++++++++--- template/admin/html/page/index.php | 5 +++- template/admin/html/page/search.php | 20 ++++++++++++++ template/admin/html/post/index.php | 5 +++- template/admin/html/post/search.php | 20 ++++++++++++++ template/admin/html/user/index.php | 5 +++- template/admin/lang/de.php | 11 ++++++++ template/admin/lang/en.php | 11 ++++++++ template/admin/rsrc/main.css | 5 ++++ 14 files changed, 238 insertions(+), 6 deletions(-) create mode 100644 admin/page/search.php create mode 100644 admin/post/search.php create mode 100644 template/admin/html/page/search.php create mode 100644 template/admin/html/post/search.php diff --git a/admin/page/search.php b/admin/page/search.php new file mode 100644 index 0000000..c718caa --- /dev/null +++ b/admin/page/search.php @@ -0,0 +1,52 @@ +attr('user')); + + $pages[] = generatePageItemTemplate($Page, $User); + } + catch(Page\Exception $Exception){} + catch(User\Exception $Exception){} + } + } +} + +#=============================================================================== +# TRY: Template\Exception +#=============================================================================== +try { + $SearchTemplate = Template\Factory::build('page/search'); + $SearchTemplate->set('QUERY', $search); + $SearchTemplate->set('PAGES', $pages ?? []); + + $MainTemplate = Template\Factory::build('main'); + $MainTemplate->set('NAME', $Language->text('title_page_search')); + $MainTemplate->set('HTML', $SearchTemplate); + + echo $MainTemplate; +} + +#=============================================================================== +# CATCH: Template\Exception +#=============================================================================== +catch(Template\Exception $Exception) { + Application::exit($Exception->getMessage()); +} +?> \ No newline at end of file diff --git a/admin/post/search.php b/admin/post/search.php new file mode 100644 index 0000000..3369be2 --- /dev/null +++ b/admin/post/search.php @@ -0,0 +1,52 @@ +attr('user')); + + $posts[] = generatePostItemTemplate($Post, $User); + } + catch(Post\Exception $Exception){} + catch(User\Exception $Exception){} + } + } +} + +#=============================================================================== +# TRY: Template\Exception +#=============================================================================== +try { + $SearchTemplate = Template\Factory::build('post/search'); + $SearchTemplate->set('QUERY', $search); + $SearchTemplate->set('POSTS', $posts ?? []); + + $MainTemplate = Template\Factory::build('main'); + $MainTemplate->set('NAME', $Language->text('title_post_search')); + $MainTemplate->set('HTML', $SearchTemplate); + + echo $MainTemplate; +} + +#=============================================================================== +# CATCH: Template\Exception +#=============================================================================== +catch(Template\Exception $Exception) { + Application::exit($Exception->getMessage()); +} +?> \ No newline at end of file diff --git a/core/language/de.php b/core/language/de.php index a1f8060..5d29d5d 100644 --- a/core/language/de.php +++ b/core/language/de.php @@ -158,6 +158,12 @@ $LANGUAGE['delete_page'] = 'Seite löschen'; $LANGUAGE['delete_post'] = 'Beitrag löschen'; $LANGUAGE['delete_user'] = 'Benutzer löschen'; +#=============================================================================== +# Items search +#=============================================================================== +$LANGUAGE['search_page'] = 'Seiten durchsuchen'; +$LANGUAGE['search_post'] = 'Beiträge durchsuchen'; + #=============================================================================== # Item insert titles #=============================================================================== @@ -179,6 +185,12 @@ $LANGUAGE['title_page_delete'] = $LANGUAGE['delete_page']; $LANGUAGE['title_post_delete'] = $LANGUAGE['delete_post']; $LANGUAGE['title_user_delete'] = $LANGUAGE['delete_user']; +#=============================================================================== +# Item search titles +#=============================================================================== +$LANGUAGE['title_page_search'] = $LANGUAGE['search_page']; +$LANGUAGE['title_post_search'] = $LANGUAGE['search_post']; + #=============================================================================== # Item overview titles #=============================================================================== diff --git a/core/language/en.php b/core/language/en.php index 55c0ce3..dc70154 100644 --- a/core/language/en.php +++ b/core/language/en.php @@ -158,6 +158,12 @@ $LANGUAGE['delete_page'] = 'Delete page'; $LANGUAGE['delete_post'] = 'Delete post'; $LANGUAGE['delete_user'] = 'Delete user'; +#=============================================================================== +# Items search +#=============================================================================== +$LANGUAGE['search_page'] = 'Search in pages'; +$LANGUAGE['search_post'] = 'Search in posts'; + #=============================================================================== # Item insert titles #=============================================================================== @@ -179,6 +185,12 @@ $LANGUAGE['title_page_delete'] = $LANGUAGE['delete_page']; $LANGUAGE['title_post_delete'] = $LANGUAGE['delete_post']; $LANGUAGE['title_user_delete'] = $LANGUAGE['delete_user']; +#=============================================================================== +# Item search titles +#=============================================================================== +$LANGUAGE['title_page_search'] = $LANGUAGE['search_page']; +$LANGUAGE['title_post_search'] = $LANGUAGE['search_post']; + #=============================================================================== # Item overview titles #=============================================================================== diff --git a/core/namespace/Page/Item.php b/core/namespace/Page/Item.php index c6cece7..e3bf6a3 100644 --- a/core/namespace/Page/Item.php +++ b/core/namespace/Page/Item.php @@ -25,5 +25,19 @@ class Item extends \Item { return sha1(implode(NULL, $attributes)); } + + #=============================================================================== + # Return unique page IDs for search results + #=============================================================================== + public static function getSearchResultIDs($search, \Database $Database): array { + $Statement = $Database->prepare(sprintf("SELECT id FROM %s WHERE + MATCH(name, body) AGAINST(? IN BOOLEAN MODE) LIMIT 20", Attribute::TABLE)); + + if($Statement->execute([$search])) { + return $Statement->fetchAll($Database::FETCH_COLUMN); + } + + return []; + } } ?> \ No newline at end of file diff --git a/template/admin/html/home.php b/template/admin/html/home.php index f8a45c5..7698035 100644 --- a/template/admin/html/home.php +++ b/template/admin/html/home.php @@ -2,7 +2,12 @@

text('overview_dashboard_desc')?>

text('last_post')?>

-

text('posts')?>: | text('post_overview')?> | text('insert')?>

+

+ text('posts')?>: + | text('post_overview')?> + | text('insert')?> + | text('search')?> +

@@ -12,7 +17,12 @@

text('last_page')?>

-

text('pages')?>: | text('page_overview')?> | text('insert')?>

+

+ text('pages')?>: + | text('page_overview')?> + | text('insert')?> + | text('search')?> +

@@ -23,7 +33,11 @@

text('last_user')?>

-

text('users')?>: | text('user_overview')?> | text('insert')?>

+

+ text('users')?>: + | text('user_overview')?> + | text('insert')?> +

diff --git a/template/admin/html/page/index.php b/template/admin/html/page/index.php index dbd5144..1027996 100644 --- a/template/admin/html/page/index.php +++ b/template/admin/html/page/index.php @@ -1,4 +1,7 @@ -

text('page_overview')?>">text('insert')?>

+

+ text('page_overview')?> + ">text('insert')?> +

text('overview_page_desc')?>

diff --git a/template/admin/html/page/search.php b/template/admin/html/page/search.php new file mode 100644 index 0000000..1a43bf7 --- /dev/null +++ b/template/admin/html/page/search.php @@ -0,0 +1,20 @@ +

+ text('title_page_search')?> + ">text('insert')?> +

+

text('search_page_desc')?>

+ +
+
+ +
+
+ +
+
+ +
+ + + +
\ No newline at end of file diff --git a/template/admin/html/post/index.php b/template/admin/html/post/index.php index a78076e..1ae8471 100644 --- a/template/admin/html/post/index.php +++ b/template/admin/html/post/index.php @@ -1,4 +1,7 @@ -

text('post_overview')?>">text('insert')?>

+

+ text('post_overview')?> + ">text('insert')?> +

text('overview_post_desc')?>

diff --git a/template/admin/html/post/search.php b/template/admin/html/post/search.php new file mode 100644 index 0000000..ab021b9 --- /dev/null +++ b/template/admin/html/post/search.php @@ -0,0 +1,20 @@ +

+ text('title_post_search')?> + ">text('insert')?> +

+

text('search_post_desc')?>

+ +
+
+ +
+
+ +
+
+ +
+ + + +
\ No newline at end of file diff --git a/template/admin/html/user/index.php b/template/admin/html/user/index.php index b1b4463..e1e24ef 100644 --- a/template/admin/html/user/index.php +++ b/template/admin/html/user/index.php @@ -1,4 +1,7 @@ -

text('user_overview')?>">text('insert')?>

+

+ text('user_overview')?> + ">text('insert')?> +

text('overview_user_desc')?>

diff --git a/template/admin/lang/de.php b/template/admin/lang/de.php index ec79d0a..7591a8f 100644 --- a/template/admin/lang/de.php +++ b/template/admin/lang/de.php @@ -41,6 +41,12 @@ $LANGUAGE['delete_page_desc'] = 'Falls du diese Seite nicht mehr benötigst kann $LANGUAGE['delete_post_desc'] = 'Falls du diesen Beitrag nicht mehr benötigst kannst du ihn über den folgenden Button permanent löschen.'; $LANGUAGE['delete_user_desc'] = 'Falls du diesen Benutzer nicht mehr benötigst kannst du ihn über den folgenden Button permanent löschen.'; +#=============================================================================== +# Search item description +#=============================================================================== +$LANGUAGE['search_page_desc'] = 'Hier kannst du mit der booleschen Volltextsuche eine Seite suchen (siehe MySQL-Dokumentation).'; +$LANGUAGE['search_post_desc'] = 'Hier kannst du mit der booleschen Volltextsuche einen Beitrag suchen (siehe MySQL-Dokumentation).'; + #=============================================================================== # Item overview description #=============================================================================== @@ -106,6 +112,11 @@ $LANGUAGE['sure'] = 'Bist du sicher?'; $LANGUAGE['login'] = 'Einloggen'; $LANGUAGE['logout'] = 'Ausloggen'; +#=============================================================================== +# Placeholders +#=============================================================================== +$LANGUAGE['placeholder_search'] = 'Suchbegriff eingeben …'; + #=============================================================================== # Labels #=============================================================================== diff --git a/template/admin/lang/en.php b/template/admin/lang/en.php index d5c189a..63a18f5 100644 --- a/template/admin/lang/en.php +++ b/template/admin/lang/en.php @@ -41,6 +41,12 @@ $LANGUAGE['delete_page_desc'] = 'If you do not need this page anymore, you can p $LANGUAGE['delete_post_desc'] = 'If you do not need this post anymore, you can permanently delete it by clicking the following button.'; $LANGUAGE['delete_user_desc'] = 'If you do not need this user anymore, you can permanently delete it by clicking the following button.'; +#=============================================================================== +# Search item description +#=============================================================================== +$LANGUAGE['search_page_desc'] = 'Here you can search a page with the boolean full-text search (see MySQL documentation).'; +$LANGUAGE['search_post_desc'] = 'Here you can search a post with the boolean full-text search (see MySQL documentation).'; + #=============================================================================== # Item overview description #=============================================================================== @@ -106,6 +112,11 @@ $LANGUAGE['sure'] = 'Are you sure?'; $LANGUAGE['login'] = 'Login'; $LANGUAGE['logout'] = 'Logout'; +#=============================================================================== +# Placeholders +#=============================================================================== +$LANGUAGE['placeholder_search'] = 'Enter search term …'; + #=============================================================================== # Labels #=============================================================================== diff --git a/template/admin/rsrc/main.css b/template/admin/rsrc/main.css index fb6a882..0086fbc 100644 --- a/template/admin/rsrc/main.css +++ b/template/admin/rsrc/main.css @@ -216,6 +216,11 @@ label:after{content:":";} /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ #message-list{margin:0;padding:0.5rem;list-style:none;background:#C45C66;color:#EEE;font-size:0.6rem;} +/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ +/* Search form +/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ +#search-form{margin-bottom:1rem;} + /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* FontAwesome Main /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ -- cgit v1.2.3