diff options
| author | Jonas Kohl | 2024-10-10 17:33:13 +0200 | 
|---|---|---|
| committer | Jonas Kohl | 2024-10-10 17:33:13 +0200 | 
| commit | 64b1ec0fabbf7328a79a20ff58502ebfa80fad8b (patch) | |
| tree | 88f2281295b347bdd3beee5bc45f68314f2051dc /src/application/actions/search | |
| parent | 4ffc399a847ce4f328d4f14adebb48d06ad033f9 (diff) | |
Break up actions into individual files
Diffstat (limited to 'src/application/actions/search')
| -rw-r--r-- | src/application/actions/search/get.php | 65 | 
1 files changed, 65 insertions, 0 deletions
| diff --git a/src/application/actions/search/get.php b/src/application/actions/search/get.php new file mode 100644 index 0000000..d3de970 --- /dev/null +++ b/src/application/actions/search/get.php @@ -0,0 +1,65 @@ +<?php + +use mystic\forum\orm\Attachment; +use mystic\forum\orm\Post; +use mystic\forum\orm\Topic; +use mystic\forum\orm\User; +use mystic\forum\utils\RequestUtils; + +$query = $_GET["query"] ?? null; +if ($query !== null) { +    $start_time = microtime(true); +    /** @var Post[] $posts */ +    $posts = $db->execCustomQuery(<<<SQL +        SELECT posts.* FROM topics, posts +        WHERE +            NOT posts.deleted +            AND to_tsvector('english', topics.title || ' ' || posts.content) @@ websearch_to_tsquery('english', $1) +        ORDER BY posts.post_date DESC +        ; +    SQL, [ $query ], Post::class); + +    $topicLookup = []; +    $attachmentLookup = []; +    $userLookup = []; +    foreach ($posts as $item) { +        if (!isset($topicLookup[$item->topicId])) { +            $topic = new Topic; +            $topic->id = $item->topicId; +            if ($db->fetch($topic)) +                $topicLookup[$topic->id] = &$topic; +        } +        if (!isset($attachmentLookup[$item->id])) { +            $attachmentLookup[$item->id] = $db->fetchCustom(Attachment::class, 'WHERE post_id = $1', [ $item->id ]); +        } +        if (!isset($userLookup[$item->authorId])) { +            $user = new User; +            $user->id = $item->authorId; +            if ($db->fetch($user)) +                $userLookup[$item->authorId] = $user; +        } +    } +    $end_time = microtime(true); +    $search_duration = $end_time - $start_time; +     +    _view("template_start", ["_title" => __("Search results for “%query%”", [ "query" => $query ])]); +    _view("template_navigation_start"); +    _view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($db)]); +    _view("template_navigation_end"); +    _view("form_search", [ "query" => $query ]); +    _view("view_search_results", [ +        "posts" => &$posts, +        "topics" => &$topicLookup, +        "users" => &$userLookup, +        "attachments" => &$attachmentLookup, +        "search_duration" => $search_duration, +    ]); +    _view("template_end", [...getThemeAndLangInfo()]); +} else { +    _view("template_start", ["_title" => __("Search")]); +    _view("template_navigation_start"); +    _view("template_navigation", ["user" => RequestUtils::getAuthorizedUser($db)]); +    _view("template_navigation_end"); +    _view("form_search"); +    _view("template_end", [...getThemeAndLangInfo()]); +}
\ No newline at end of file |