staging.slackware.uk/html/search.shtml

126 lines
4 KiB
Text

<?php
require ("header.php");
/* Output an error box */
function writeerror (string $message, bool $link) {
?>
<div class="box boxmargins" id="headingbox">
<div id="headingtext">
<span class="heading bold">Search Error</span><br><br>
<span class="subheading"><?php print ($message); ?></span>
<?php
if ($link == true) {
?>
<br><br>Click <a href="//<?php print ("$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"); ?>" title="Retry search">here</a> to retry your search.
<?php
}
?>
</div>
</div>
<?php
}
/* Construct the url */
if (isset ($_SERVER["HTTPS"])) {
$url = "https://";
} else {
$url = "http://";
}
$url .= $_SERVER["HTTP_HOST"] . "/cgi-bin/searchapi.cgi?";
if (isset ($_GET[l])) {
$url .= "l=" . urlencode ($_GET["l"]) . "&";
}
if (isset ($_GET[p])) {
$url .= "p=" . urlencode ($_GET["p"]) . "&";
} else {
$url .= "p=%2F&";
}
if (isset ($_GET[q])) {
$url .= "q=" . urlencode ($_GET["q"]);
} else {
$url .= "q=";
}
/* Query the search API */
if ($fh = fopen ($url, "r")) {
/* Read and extract the status number */
$status_line = stream_get_line ($fh, 0, "\0");
$status = explode (":", $status_line);
/* Process the status code and output content */
if ($status[1] == "0") {
?>
<div class="box boxmargins" id="headingbox">
<div id="headingtext">
<span class="heading bold">Search Results</span><br>
<div class="subheading">
Searches may contain multiple terms, include globs (<code>man 7 <a href="https://man7.org/linux/man-pages/man7/glob.7.html" title="glob man pageg">glob</a></code>)<br>
and descend down from the current directory.<br><br>
<span class="bold">Adjust search:</span>
<div style="display: flex; justify-content: center;">
<div style="text-align: right;">
<form action="/search">
<span class="bold">Search path:</span>
<input class="searchinput searchresultsinput" title="Search Path" type="text" name="p" value="<?php print ($_GET["p"]); ?>" autocomplete="on" required><br>
<span class="bold">Search query:</span>
<input class="searchinput searchresultsinput" title="Search Query" type="text" name="q" value="<?php print ($_GET["q"]); ?>" autocomplete="on" required>
<input type="submit" hidden>
</form>
</div>
</div>
</div>
</div>
</div>
<br>
<div class="box boxmargins boxpadding" id="searchresultsbox">
<hr>
<code>
<?php
$count = 0;
/* Read the results and turn them into urls */
while ($result_line = stream_get_line ($fh, 0, "\0")) {
$type = strtok ($result_line, " ");
$entry = strtok ("\0");
if ($type == "f" || $type == "l" || $type == "o") {
print ("&bull; <a href=\"$entry\" title=\"View $entry\">$entry</a><br>");
$count++;
} elseif ($type == "d") {
print ("&bull; <a href=\"$entry\" title=\"Directory $entry\">$entry</a>&nbsp;(<a href=\"/search?l=$_GET[l]&p=$entry&q=" . urlencode ($_GET[q]) . "\" title=\"Repeat search in this directory\">Repeat search in this directory</a>)<br>");
$count++;
}
}
/* Output a total */
if ($count == 0) {
print ("No results - try to widen your search.");
} elseif ($count == 1) {
print ("1 result found.");
} else {
print ($count . " results found.");
}
?>
</code>
<hr>
</div>
<?php
} else {
/* The status line indicates an error */
$error_line = stream_get_line ($fh, 0, "\0");
$error = explode (":", $error_line);
if ($status[1] == 1) {
writeerror ($error[1], true);
} elseif ($status[1] == 2) {
writeerror ($error[1], false);
} else {
writeerror ("An unexpected error occured!", false);
}
}
} else {
/* Error from the API */
writeerror ("Search facility unavailable at present, sorry!", false);
}
fclose ($fh);
require ("footer.shtml");
?>