127 lines
4.7 KiB
Text
127 lines
4.7 KiB
Text
<?php
|
|
require ("header.php");
|
|
|
|
/* Output an error box */
|
|
function writeerror (string $message, bool $link) {
|
|
print ('<div class="box boxmargins" id="headingbox">');
|
|
print (' <div id="headingtext">');
|
|
print (' <span class="heading bold">Search Error</span><br><br>');
|
|
print (' <span class="subheading">' . $message . '</span>');
|
|
if ($link == true) {
|
|
print (' <br><br>Click <a href="//' . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . '" title="Retry search">here</a> to retry your search.');
|
|
}
|
|
print (' </div>');
|
|
print ('</div>');
|
|
}
|
|
|
|
/* 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="Xdisplay: flex; Xjustify-content: center;"> -->
|
|
<div>
|
|
<!-- <div style="text-align: right; justify-content: center;"> -->
|
|
<div style="text-align: right;">
|
|
<form action="/search">
|
|
<!-- <span class="bold" style="text-align: right; justify-content: center;">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> -->
|
|
<span class="bold" style="text-align: right;">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 ('• <a href="' . $entry . '" title="View $entry">' . $entry . '</a><br>');
|
|
$count++;
|
|
} elseif ($type == "d") {
|
|
print ('• <a href="' . $entry . '" title="Directory ' . $entry . '">' . $entry . '</a> (<a href="/search?l=' . $_GET["l"] . '&p=' . urlencode ($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 shown.");
|
|
} else {
|
|
print ($count . " results shown.");
|
|
}
|
|
?>
|
|
</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");
|
|
?>
|