Add project files.
This commit is contained in:
217
ConstructorAppUI/wwwroot/WebTheme/bat/rd-search.php
Normal file
217
ConstructorAppUI/wwwroot/WebTheme/bat/rd-search.php
Normal file
@@ -0,0 +1,217 @@
|
||||
<?php
|
||||
if (!isset($_GET['s'])) {
|
||||
die('You must define a search term!');
|
||||
}
|
||||
|
||||
$highlight = true;//highlight results or not
|
||||
$search_in = array('html', 'htm');//allowable filetypes to search in
|
||||
$search_dir = '..';//starting directory
|
||||
$recursive = true;//should it search recursively or not
|
||||
define('SIDE_CHARS', 15);
|
||||
$file_count = 0;
|
||||
$search_term = mb_strtolower($_GET['s'], 'UTF-8');
|
||||
|
||||
if ($search_term == "?s=") {
|
||||
$search_term = "";
|
||||
}
|
||||
|
||||
$search_term = preg_replace('/^\/$/', '"/"', $search_term);
|
||||
$search_term = preg_replace('/\+/', ' ', $search_term);
|
||||
$search_term_length = strlen($search_term);
|
||||
if (isset($_GET['liveCount'])){
|
||||
$search_live_count = $_GET['liveCount'];
|
||||
}
|
||||
$final_result = array();
|
||||
|
||||
$search_filter_init = $_GET['filter'];
|
||||
$search_filter = preg_replace("/\*/", ".*", $search_filter_init);
|
||||
$search_template = preg_replace('/\+/', ' ', $_GET['template']);
|
||||
preg_match_all("/\#\{((?!title|href|token|count)[a-z]*)\}/", $search_template, $template_tokens);
|
||||
$template_tokens = $template_tokens[1];
|
||||
|
||||
$files = list_files($search_dir);
|
||||
|
||||
foreach ($files as $file) {
|
||||
|
||||
if (0 == filesize($file)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!preg_match("/" . $search_filter . "/", $file)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$contents = file_get_contents($file);
|
||||
preg_match("/\<title\>(.*)\<\/title\>/", $contents, $page_title); //getting page title
|
||||
if (preg_match("#\<body.*\>(.*)\<\/body\>#si", $contents, $body_content)) { //getting content only between <body></body> tags
|
||||
$clean_content = strip_tags($body_content[0]); //remove html tags
|
||||
$clean_content = preg_replace('/\s+/', ' ', $clean_content); //remove duplicate whitespaces, carriage returns, tabs, etc
|
||||
|
||||
$found = strpos_recursive(mb_strtolower($clean_content, 'UTF-8'), $search_term);
|
||||
|
||||
$final_result[$file_count]['page_title'][] = $page_title[1];
|
||||
$final_result[$file_count]['file_name'][] = preg_replace("/^.{3}/", "\\1", $file);
|
||||
}
|
||||
|
||||
for ($j = 0; $j < count($template_tokens); $j++) {
|
||||
if (preg_match("/\<meta\s+name=[\'|\"]" . $template_tokens[$j] . "[\'|\"]\s+content=[\'|\"](.*)[\'|\"]\>/", $contents, $res)) {
|
||||
$final_result[$file_count][$template_tokens[$j]] = $res[1];
|
||||
}
|
||||
}
|
||||
|
||||
if ($found && !empty($found)) {
|
||||
for ($z = 0; $z < count($found[0]); $z++) {
|
||||
$pos = $found[0][$z][1];
|
||||
$side_chars = SIDE_CHARS;
|
||||
if ($pos < SIDE_CHARS) {
|
||||
$side_chars = $pos;
|
||||
if (isset($_GET['liveSearch']) and $_GET['liveSearch'] != "") {
|
||||
$pos_end = SIDE_CHARS + $search_term_length + 15;
|
||||
} else {
|
||||
$pos_end = SIDE_CHARS * 9 + $search_term_length;
|
||||
}
|
||||
} else {
|
||||
if (isset($_GET['liveSearch']) and $_GET['liveSearch'] != "") {
|
||||
$pos_end = SIDE_CHARS + $search_term_length + 15;
|
||||
} else {
|
||||
$pos_end = SIDE_CHARS * 9 + $search_term_length;
|
||||
}
|
||||
}
|
||||
|
||||
$pos_start = $pos - $side_chars;
|
||||
$str = substr($clean_content, $pos_start, $pos_end);
|
||||
$result = preg_replace('#' . $search_term . '#ui', '<span class="search">\0</span>', $str);
|
||||
//$result = preg_replace('#'.$search_term.'#ui', '<span class="search">'.$search_term.'</span>', $str);
|
||||
$final_result[$file_count]['search_result'][] = $result;
|
||||
|
||||
}
|
||||
} else {
|
||||
$final_result[$file_count]['search_result'][] = '';
|
||||
}
|
||||
$file_count++;
|
||||
}
|
||||
|
||||
if ($file_count > 0) {
|
||||
|
||||
//Sort final result
|
||||
foreach ($final_result as $key => $row) {
|
||||
$search_result[$key] = $row['search_result'];
|
||||
}
|
||||
array_multisort($search_result, SORT_DESC, $final_result);
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<div id="search-results">
|
||||
|
||||
<?php if (count($final_result) > 0 and isset($_GET['liveSearch']) and $_GET['liveSearch'] != "") {
|
||||
echo "<div class='search-quick-result'>Quick Results</div>";
|
||||
} ?>
|
||||
|
||||
<ol class="search-list">
|
||||
<?php
|
||||
$sum_of_results = 0;
|
||||
$match_count = 0;
|
||||
for ($i = 0; $i < count($final_result); $i++) {
|
||||
if (!empty($final_result[$i]['search_result'][0]) || $final_result[$i]['search_result'][0] !== '') {
|
||||
$match_count++;
|
||||
$sum_of_results += count($final_result[$i]['search_result']);
|
||||
if (isset($_GET['liveSearch']) and $_GET['liveSearch'] != "" and $i >= $search_live_count) {
|
||||
} else {
|
||||
?>
|
||||
<li class="search-list-item">
|
||||
|
||||
<?php
|
||||
$replacement = [$final_result[$i]['page_title'][0],
|
||||
$final_result[$i]['file_name'][0],
|
||||
$final_result[$i]['search_result'][0],
|
||||
count($final_result[$i]['search_result'])
|
||||
];
|
||||
$template = preg_replace(["/#{title}/","/#{href}/","/#{token}/","/#{count}/"],$replacement, $search_template);
|
||||
for ($k = 0; $k < count($template_tokens); $k++){
|
||||
if (isset($final_result[$i][$template_tokens[$k]])){
|
||||
$template = preg_replace("/#{" . $template_tokens[$k] . "}/", $final_result[$i][$template_tokens[$k]], $template);
|
||||
}else{
|
||||
$template = preg_replace("/#{" . $template_tokens[$k] . "}/", " ", $template);
|
||||
}
|
||||
}
|
||||
|
||||
echo $template; ?>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($match_count == 0) {
|
||||
echo '<li><div class="search-error">No results found for "<span class="search">' . $search_term . '</span>"<div/></li>';
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if (isset($_GET['liveSearch']) and $_GET['liveSearch'] != "" and $match_count != 0) {
|
||||
?>
|
||||
<li class="search-list-item-all">
|
||||
<a href='search-results.html?s=<?php echo $_GET['s']; ?>&filter=<?php echo $search_filter_init; ?>' class="search-submit">
|
||||
<?php
|
||||
echo "See other ";
|
||||
echo $sum_of_results;
|
||||
echo $sum_of_results < 2 ? " result on " : " results";
|
||||
?>
|
||||
</a>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
//lists all the files in the directory given (and sub-directories if it is enabled)
|
||||
function list_files($dir)
|
||||
{
|
||||
global $recursive, $search_in;
|
||||
|
||||
$result = array();
|
||||
if (is_dir($dir)) {
|
||||
if ($dh = opendir($dir)) {
|
||||
while (($file = readdir($dh)) !== false) {
|
||||
if (!($file == '.' || $file == '..')) {
|
||||
$file = $dir . '/' . $file;
|
||||
if (is_dir($file) && $recursive == true && $file != './.' && $file != './..') {
|
||||
$result = array_merge($result, list_files($file));
|
||||
} else if (!is_dir($file)) {
|
||||
if (in_array(get_file_extension($file), $search_in)) {
|
||||
$result[] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
//returns the extention of a file
|
||||
function get_file_extension($filename)
|
||||
{
|
||||
$result = '';
|
||||
$parts = explode('.', $filename);
|
||||
if (is_array($parts) && count($parts) > 1) {
|
||||
$result = end($parts);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function strpos_recursive($haystack, $needle, $offset = 0, &$results = array())
|
||||
{
|
||||
$offset = stripos($haystack, $needle, $offset);
|
||||
if ($offset === false) {
|
||||
return $results;
|
||||
} else {
|
||||
$pattern = '/' . $needle . '/ui';
|
||||
preg_match_all($pattern, $haystack, $results, PREG_OFFSET_CAPTURE);
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user