rendered paste body<?php
/**
* Feed search
*
* @author Tudor Prodan <tudor.prodan@gmail.com>
*/
class feedSearch {
private $out;
private $caseSensitiveSearch = false;
/**
* Entry point for the application.
*
* @return void
*/
public function run($caseSensitiveSearch = false) {
$this->caseSensitiveSearch = $caseSensitiveSearch;
switch ($this->fetchRunCode()) {
case "search":
$this->out = $this->run_search();
break;
default:
$this->out = $this->run_main();
$this->wrapOut();
break;
}
$this->printOut();
}
/**
* Renders the page elements.
*
* @return string
*/
private function run_main() {
$out = "
<script type=\"text/javascript\">
var xmlHttp;
var resultDiv;
function getHTTPObject() {
if (typeof XMLHttpRequest != 'undefined') {
return new XMLHttpRequest();
}
try {
return new ActiveXObject(\"Msxml2.XMLHTTP\");
} catch (e) {
try {
return new ActiveXObject(\"Microsoft.XMLHTTP\");
} catch (e) {}
}
return false;
}
function searchStateChange() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
result = xmlHttp.responseText;
resultDiv.innerHTML = result;
} else {
resultDiv.innerHTML = \"There was a problem with the request.\";
}
}
}
function checkInput() {
var search_url = document.getElementById(\"search_url\");
var search_tagName = document.getElementById(\"search_tagName\");
var search_keyword = document.getElementById(\"search_keyword\");
if (search_url.value == \"\" || search_tagName.value == \"\" || search_keyword.value == \"\") {
resultDiv.innerHTML = \"All fields are mandatory for the search.\";
return false;
}
return true;
}
function run_search() {
resultDiv = document.getElementById(\"result\");
var params = \"\";
if (checkInput() == false) {
return;
}
xmlHttp = getHTTPObject();
if (xmlHttp == null) {
resultDiv.innerHTML = \"Your browser doesn't support AJAX technology. Please use a different browser.\";
return;
}
resultDiv.innerHTML = \"Performing search, please wait...\";
var search_url = document.getElementById(\"search_url\");
var search_tagName = document.getElementById(\"search_tagName\");
var search_keyword = document.getElementById(\"search_keyword\");
params = \"search_url=\" + escape(search_url.value) + \"&search_tagName=\" + escape(search_tagName.value) + \"&search_keyword=\" + escape(search_keyword.value);
xmlHttp.onreadystatechange = searchStateChange;
xmlHttp.open(\"POST\", document.location, true);
xmlHttp.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");
xmlHttp.setRequestHeader(\"Content-length\", params.length);
xmlHttp.setRequestHeader(\"Connection\", \"close\");
xmlHttp.send(params);
}
</script>
<table>
<tr>
<td>URL</td>
<td><input type=\"text\" name=\"search_url\" id=\"search_url\" size=\"50\"/></td>
</tr>
<tr>
<td>Tag Name</td>
<td><input type=\"text\" name=\"search_tagName\" id=\"search_tagName\" /></td>
</tr>
<tr>
<td>Search keyword</td>
<td><input type=\"text\" name=\"search_keyword\" id=\"search_keyword\" /></td>
</tr>
<tr>
<td></td>
<td><input type=\"button\" value=\"Search\" onclick=\"run_search();\"/></td>
</tr>
</table>
<div id=\"result\"></div>
";
return $out;
}
/**
* Renders the search results.
*
* @return string
*/
private function run_search() {
$out = "";
$search_url = $GLOBALS["_POST"]["search_url"];
$search_tagName = $GLOBALS["_POST"]["search_tagName"];
$search_keyword = $GLOBALS["_POST"]["search_keyword"];
if ($search_url == "" || $search_tagName == "" || $search_keyword == "") {
return "All fields are mandatory for the search.";
}
if (!$this->checkSearchURL($search_url)) {
return "You can only access files on the www.";
}
$fileData = $this->fetchFileContent($search_url);
if ($fileData == "") {
return "The requested page does not exist or is unavailable.";
}
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
$xmlElements = Array();
xml_parse_into_struct($parser, $fileData, $xmlElements);
foreach ($xmlElements as $key => $value) {
if ( $value["type"] = "complete" // only elements with values
// tag match
&& ($this->caseSensitiveSearch ? strcmp($value["tag"], $search_tagName) : strcasecmp($value["tag"], $search_tagName)) == 0
// keyword match
&& ($this->caseSensitiveSearch ? ereg($search_keyword, $value["value"]) : eregi($search_keyword, $value["value"]))
) {
$out .= "<li>".$value["value"]."</li>";
}
}
if ($out == "") {
$out = "No match.";
} else {
$out = "<ul>".$out."</ul>";
}
return $out;
}
/**
* Checks if the url is on http.
*
* @return bool
*/
private function checkSearchURL($url) {
if (substr($url, 0, 7) != "http://") {
return false;
}
return true;
}
/**
* Returns the content of the file/page.
*
* @return string
*/
private function fetchFileContent($filePath) {
$file = @ fopen($filePath, "r");
if (!$file) {
return "";
}
$fileData = "";
while ($readData = fread($file, 4096)) {
$fileData .= $readData;
}
return $fileData;
}
/**
* Returns the application run state.
*
* @return string
*/
private function fetchRunCode() {
if (isset($GLOBALS["_POST"]["search_url"])) {
return "search";
} else {
return "main";
}
}
/**
* Wraps the output in HTML tags.
*
* @return void
*/
private function wrapOut() {
$this->out = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">".chr(10).
"<html>".chr(10).
"<head>".chr(10).
"<title>".$this->docTitle."</title>".chr(10).
"</head>".chr(10).
"<body>".chr(10).
$this->out.
"</body>".chr(10).
"</html>";
}
private function printOut() {
echo $this->out;
}
}
$theApp = new feedSearch();
$theApp->run(); // for case sensitive searching use run(1)
?>