63b2601e67
Changed mime type map to deal with the reality that certain file types have multiple extensions and/or multiple mime types, as well as constants supporting all of the data. Created new functions using the updated mime type map to resolve mime types and extensions. Updated various items around the project that determine mime/extension to take advantage of the new functions.
85 lines
3.4 KiB
PHP
85 lines
3.4 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
class BrowserSearch extends Extension
|
|
{
|
|
public function onInitExt(InitExtEvent $event)
|
|
{
|
|
global $config;
|
|
$config->set_default_string("search_suggestions_results_order", 'a');
|
|
}
|
|
|
|
public function onPageRequest(PageRequestEvent $event)
|
|
{
|
|
global $config, $database, $page;
|
|
|
|
// Add in header code to let the browser know that the search plugin exists
|
|
// We need to build the data for the header
|
|
$search_title = $config->get_string(SetupConfig::TITLE);
|
|
$search_file_url = make_link('browser_search.xml');
|
|
$page->add_html_header("<link rel='search' type='application/opensearchdescription+xml' title='$search_title' href='$search_file_url'>");
|
|
|
|
// The search.xml file that is generated on the fly
|
|
if ($event->page_matches("browser_search.xml")) {
|
|
// First, we need to build all the variables we'll need
|
|
$search_title = $config->get_string(SetupConfig::TITLE);
|
|
$search_form_url = make_link('post/list/{searchTerms}');
|
|
$suggenton_url = make_link('browser_search/')."{searchTerms}";
|
|
$icon_b64 = base64_encode(file_get_contents("ext/static_files/static/favicon.ico"));
|
|
|
|
// Now for the XML
|
|
$xml = "
|
|
<SearchPlugin xmlns='http://www.mozilla.org/2006/browser/search/' xmlns:os='http://a9.com/-/spec/opensearch/1.1/'>
|
|
<os:ShortName>$search_title</os:ShortName>
|
|
<os:InputEncoding>UTF-8</os:InputEncoding>
|
|
<os:Image width='16' height='16'>data:image/x-icon;base64,$icon_b64</os:Image>
|
|
<SearchForm>$search_form_url</SearchForm>
|
|
<os:Url type='text/html' method='GET' template='$search_form_url'>
|
|
<os:Param name='search' value='{searchTerms}'/>
|
|
</os:Url>
|
|
<Url type='application/x-suggestions+json' template='$suggenton_url'/>
|
|
</SearchPlugin>
|
|
";
|
|
|
|
// And now to send it to the browser
|
|
$page->set_mode(PageMode::DATA);
|
|
$page->set_type(MIME_TYPE_XML);
|
|
$page->set_data($xml);
|
|
} elseif ($event->page_matches("browser_search")) {
|
|
$suggestions = $config->get_string("search_suggestions_results_order");
|
|
if ($suggestions == "n") {
|
|
return;
|
|
}
|
|
|
|
// We have to build some json stuff
|
|
$tag_search = $event->get_arg(0);
|
|
|
|
// Now to get DB results
|
|
if ($suggestions == "a") {
|
|
$order = "tag ASC";
|
|
} else {
|
|
$order = "count DESC";
|
|
}
|
|
$tags = $database->get_col(
|
|
"SELECT tag FROM tags WHERE tag LIKE :tag AND count > 0 ORDER BY $order LIMIT 30",
|
|
['tag'=>$tag_search."%"]
|
|
);
|
|
|
|
// And to do stuff with it. We want our output to look like:
|
|
// ["shimmie",["shimmies","shimmy","shimmie","21 shimmies","hip shimmies","skea shimmies"],[],[]]
|
|
$page->set_mode(PageMode::DATA);
|
|
$page->set_data(json_encode([$tag_search, $tags, [], []]));
|
|
}
|
|
}
|
|
|
|
public function onSetupBuilding(SetupBuildingEvent $event)
|
|
{
|
|
$sort_by = [];
|
|
$sort_by['Alphabetical'] = 'a';
|
|
$sort_by['Tag Count'] = 't';
|
|
$sort_by['Disabled'] = 'n';
|
|
|
|
$sb = new SetupBlock("Browser Search");
|
|
$sb->add_choice_option("search_suggestions_results_order", $sort_by, "Sort the suggestions by:");
|
|
$event->panel->add_block($sb);
|
|
}
|
|
}
|