diff options
author | Marvin Borner | 2018-06-03 00:25:14 +0200 |
---|---|---|
committer | Marvin Borner | 2018-06-03 00:25:14 +0200 |
commit | 5dd1aeed623821c2bce410e20926c97a656bcbed (patch) | |
tree | dd47ebb7a2485d1d4a9d86f4e6063c59e413aa9f /main | |
parent | edd4feedadcebd6d872f56d6099057316f244067 (diff) |
Improved searching query (added 'like wildcards')
Diffstat (limited to 'main')
6 files changed, 77 insertions, 15 deletions
diff --git a/main/app/sprinkles/admin/routes/search.php b/main/app/sprinkles/admin/routes/search.php index 4dc1519..05793c1 100644 --- a/main/app/sprinkles/admin/routes/search.php +++ b/main/app/sprinkles/admin/routes/search.php @@ -3,6 +3,6 @@ /** * Routes for searching any kind of data we have */ -$app->group('/search', function () { - $this->get('/user/{user_name}', 'UserFrosting\Sprinkle\Admin\Controller\UserController:pageInfo'); +$app->group('/api/search', function () { + $this->get('/user/{search_term}', 'UserFrosting\Sprinkle\Admin\Controller\SearchController:ByUsername'); })->add('authGuard'); diff --git a/main/app/sprinkles/admin/src/Controller/SearchController.php b/main/app/sprinkles/admin/src/Controller/SearchController.php new file mode 100644 index 0000000..2398a56 --- /dev/null +++ b/main/app/sprinkles/admin/src/Controller/SearchController.php @@ -0,0 +1,56 @@ +<?php +/** + * UserFrosting (http://www.userfrosting.com) + * + * @link https://github.com/userfrosting/UserFrosting + * @license https://github.com/userfrosting/UserFrosting/blob/master/licenses/UserFrosting.md (MIT License) + */ + +namespace UserFrosting\Sprinkle\Admin\Controller; + +use function GuzzleHttp\Psr7\str; +use UserFrosting\Fortress\RequestDataTransformer; +use UserFrosting\Fortress\RequestSchema; +use UserFrosting\Fortress\ServerSideValidator; +use UserFrosting\Sprinkle\Core\Controller\SimpleController; +use UserFrosting\Support\Exception\ForbiddenException; +use UserFrosting\Support\Exception\BadRequestException; +use UserFrosting\Support\Exception\NotFoundException; +use Slim\Http\Request; +use Slim\Http\Response; +use Illuminate\Database\Capsule\Manager as DB; + +/** + * Controller class for user-related requests, including listing users, CRUD for users, etc. + * + * @author Alex Weissman (https://alexanderweissman.com) + */ +class SearchController extends SimpleController +{ + + /** + * Searches a user by name, username and email // TODO: Maybe not allowed to search everyone? + * + * @param Request $request + * @param Response $response + * @param $args + * @return Response + * @throws NotFoundException + */ + public function ByUsername(Request $request, Response $response, $args) { + $classMapper = $this->ci->classMapper; + $users = $classMapper->createInstance('user') + ->where("first_name", "like", "%" . $args["search_term"] . "%") + ->orWhere("last_name", "like", "%" . $args["search_term"] . "%") + ->orWhere(DB::raw("CONCAT(`first_name`, ' ', `last_name`)"), 'LIKE', "%" . $args["search_term"] . "%") + ->orWhere("user_name", "like", "%" . $args["search_term"] . "%") + ->get(); + + foreach ($users as $number => $user) { + $users[$number]["avatar"] = $user->avatar; + } + + if (count($users) === 0) throw new NotFoundException(); + return $response->withJson($users, 200, JSON_PRETTY_PRINT); + } +} diff --git a/main/app/sprinkles/admin/src/Controller/WormholeController.php b/main/app/sprinkles/admin/src/Controller/WormholeController.php index 47e6fcb..ec33f3e 100644 --- a/main/app/sprinkles/admin/src/Controller/WormholeController.php +++ b/main/app/sprinkles/admin/src/Controller/WormholeController.php @@ -110,7 +110,7 @@ class WormholeController extends SimpleController $classMapper = $this->ci->classMapper; foreach ($UsersFriends as $Key => $UsersFriendId) { // NOT THAT EFFICIENT... $UsersFriendInformation = $classMapper->createInstance('user')// select doesnt work with instance - ->where('id', $UsersFriendId->id) + ->where('id', $UsersFriendId->id) ->get(); $UsersFriends[$Key]->id = $UsersFriendInformation[0]->id; $UsersFriends[$Key]->username = $UsersFriendInformation[0]->user_name; diff --git a/main/app/sprinkles/core/assets/SiteAssets/css/main.css b/main/app/sprinkles/core/assets/SiteAssets/css/main.css index da6243e..2afc962 100644 --- a/main/app/sprinkles/core/assets/SiteAssets/css/main.css +++ b/main/app/sprinkles/core/assets/SiteAssets/css/main.css @@ -223,6 +223,7 @@ hr.ChatHeaderDivider { /* main chat */ .SelectedReceiver { display: none; + height: 100%; } .ChatMessages { diff --git a/main/app/sprinkles/core/assets/SiteAssets/js/main.js b/main/app/sprinkles/core/assets/SiteAssets/js/main.js index b7ebd1f..0f3dfd8 100644 --- a/main/app/sprinkles/core/assets/SiteAssets/js/main.js +++ b/main/app/sprinkles/core/assets/SiteAssets/js/main.js @@ -143,26 +143,31 @@ $("#ImageUploadButton").on("click", function () { * SEARCH */ UserSearchBar.keyup(function () { - SearchResults.empty(); const RequestedUser = UserSearchBar.val(); - if (RequestedUser !== " " && RequestedUser !== "") + if (RequestedUser !== " " && RequestedUser !== "") { $.ajax({ - url: site.uri.public + "/api/users/u/" + RequestedUser, - success: function (answer) { - console.log("%c[SEARCH LOGGER] User " + RequestedUser + " was found!", "color: green"); - //var GifUrls = ["https://media.giphy.com/media/xUPGcg01dIAot4zyZG/giphy.gif", "https://media.giphy.com/media/IS9LfP9oSLdcY/giphy.gif", "https://media.giphy.com/media/5wWf7H0WTquIU1DFY4g/giphy.gif"]; - //var RandomGif = Math.floor((Math.random() * GifUrls.length)); - //var RandomGifUrl = GifUrls[RandomGif]; - //console.image(RandomGifUrl, 0.5); - - SearchResults.append("<img class='Avatar' src='" + answer.avatar + "'/><div class='UsersFullName'>" + answer.full_name + "</div>"); + url: site.uri.public + "/api/search/user/" + RequestedUser, + success: function (UserArray) { + SearchResults.empty(); + UserArray.forEach(function(User) { + console.log("%c[SEARCH LOGGER] User " + RequestedUser + " was found!", "color: green"); + //var GifUrls = ["https://media.giphy.com/media/xUPGcg01dIAot4zyZG/giphy.gif", "https://media.giphy.com/media/IS9LfP9oSLdcY/giphy.gif", "https://media.giphy.com/media/5wWf7H0WTquIU1DFY4g/giphy.gif"]; + //var RandomGif = Math.floor((Math.random() * GifUrls.length)); + //var RandomGifUrl = GifUrls[RandomGif]; + //console.image(RandomGifUrl, 0.5); + SearchResults.append("<img class='Avatar' src='" + User.avatar + "'/><div class='UsersFullName'>" + User.full_name + "</div>"); + }) }, error: function () { + SearchResults.empty(); console.log("%c[SEARCH LOGGER] User " + RequestedUser + " was not found!", "color: red"); alerts.ufAlerts().ufAlerts('fetch'); } }); + } else { + SearchResults.empty(); + } }); /** diff --git a/main/app/sprinkles/core/templates/pages/index.html.twig b/main/app/sprinkles/core/templates/pages/index.html.twig index c77fa4d..5f8fe76 100644 --- a/main/app/sprinkles/core/templates/pages/index.html.twig +++ b/main/app/sprinkles/core/templates/pages/index.html.twig @@ -42,7 +42,7 @@ title="{{ translate("EXPLORE_TAB.USER_SEARCH_PH") }}" placeholder="{{ translate("EXPLORE_TAB.USER_SEARCH_PH") }}"> <br> - {#<div id="alerts-page"></div>#} + <div id="alerts-page"></div> <div class="SearchResults"> </div> <div id="ExploreData"> |