From e05c3557192aa67c8a8a0a2e0260d2482986c664 Mon Sep 17 00:00:00 2001 From: AlexisHenry Date: Tue, 20 Dec 2022 12:00:53 +0100 Subject: [PATCH] feat: searchbar (#8) --- public/index.php | 19 +++++- services/dashboard.php | 144 +++++++++++++++++++++++++++++++++++------ 2 files changed, 144 insertions(+), 19 deletions(-) diff --git a/public/index.php b/public/index.php index 01611fa..81d8d0c 100644 --- a/public/index.php +++ b/public/index.php @@ -54,8 +54,25 @@

owner->description ?>

+ 'category', + * 'filename' => 'filename' + * ] + */ + foreach (getCategories() as $category) { + foreach (getCategoryItems($category) as $item) { + if (strpos($item, $search) !== false) { + $items[] = [ + 'category' => $category, + 'filename' => $item + ]; + } + } + } + return $items; +} + /** * @param string $category * @return array */ -function getContent(string $category): array +function getCategoryItems(string $category): array { + /** + * @var array $files + * @var array $categoryItems + * @var array $exclude + */ $files = []; - $categoryContent = scandir("./shared/$category/"); + $categoryItems = scandir("./shared/$category/"); $exclude = ['.', '..', '.gitignore', 'index.php']; - foreach ($categoryContent as $content) { - if (!in_array($content, $exclude)) { - $files[] = $content; - } + foreach ($categoryItems as $item) { + if (!in_array($item, $exclude)) $files[] = $item; } return $files; } /** - * @param string $category - * @param string $domain + * @param array $items + * @param ?string $category * @return string */ -function generateCategoryContentList(string $category): string +function generateItems(array $items, ?string $category = null): string { - $content = getContent($category); + /** + * @var string $list + * @var string $domain + */ $list = ""; $domain = (($_SERVER['HTTPS'] ?? false) ? "https://" : "http://") . $_SERVER['HTTP_HOST']; - foreach ($content as $item) { - $url = $domain . "/shared/$category/$item"; - $downloadUrl = $domain . "/shared/$category/?file=$item"; + if (!$category) { + $category = $items[0]['category']; + } + foreach ($items as $item) { + if (!is_array($item)) { + $item = [ + 'category' => $category, + 'filename' => $item + ]; + } + $category = $item['category']; + $filename = $item['filename']; + /** + * @var string $url + * @var string $downloadUrl + */ + $url = $domain . "/shared/$category/$filename"; + $downloadUrl = $domain . "/shared/$category/?file=$filename"; $list .= "
  • - $item + $filename

    $url @@ -63,10 +118,40 @@ function generateCategoryContentList(string $category): string

  • "; } + return $list; +} + +/** + * @param string $category + * @param string $domain + * @return string + */ +function generateCategoryItemsList(string $category): string +{ + /** + * @var array $items + * @var string $list + */ + $items = getCategoryItems($category); + $list = generateItems($items, $category); if (empty($list)) $list = "
  • No content available
  • "; return ""; } +/** + * @param string $search + * @return bool|string + */ +function generateSearchContentList(string $search): bool|string +{ + /** + * @var array $correspondingItems + */ + $correspondingItems = getItemsCorrespondingToSearch($search); + if (count($correspondingItems) <= 0 || !$correspondingItems) return false; + return generateItems($correspondingItems); +} + /** * @param string $category * @param bool $background @@ -91,16 +176,39 @@ function generateCategorySection(string $category, bool $background): string
    - ".generateCategoryContentList($category)." + ".generateCategoryItemsList($category)." "; } +/** + * @return string + */ +function searchResults(): string +{ + /** + * @var string $search + * @var string $results + */ + $search = $_GET['search'] ?? null; + if (!isset($search) || $search === "") { + $results = "
  • No search term provided
  • "; + } else { + $results = generateSearchContentList($search); + if (!$results) $results = "
  • No result found
  • "; + } + return ""; +} + /** * @return Dashboard */ function dashboard(): Dashboard { + /** + * @var array $settings + * @var Dashboard $dashboard + */ $settings = Yaml::parseFile(__DIR__ . '/../settings.yml'); $dashboard = new Dashboard($settings['dashboard']); return $dashboard;