mirror of
https://github.com/Znote/ZnoteAAC.git
synced 2025-10-13 18:04:54 +02:00
Forum search script, multi keyword search supported
search: titles, posts, authors latest posts authors latest threads view latest threads view latest posts ------- working on new ipn for paygol (under dev)
This commit is contained in:
207
forum_search.php
Normal file
207
forum_search.php
Normal file
@@ -0,0 +1,207 @@
|
||||
<?php require_once 'engine/init.php'; include 'layout/overall/header.php'; protect_page();
|
||||
|
||||
// Search CONFIG
|
||||
$searchResults = 30; // How many max search results
|
||||
|
||||
function stripBBCode($text_to_search) {
|
||||
$pattern = '|[[\/\!]*?[^\[\]]*?]|si';
|
||||
$replace = '';
|
||||
return preg_replace($pattern, $replace, $text_to_search);
|
||||
}
|
||||
|
||||
//data_dump($_GET, false, "Post data:");
|
||||
|
||||
// Fetch and sanitize values:
|
||||
$type = getValue($_GET['type']);
|
||||
if ($type !== false) $type = (int)$type;
|
||||
$text = getvalue($_GET['text']);
|
||||
|
||||
$text = explode(' ', $text);
|
||||
$textTitleSql = "";
|
||||
$textPostSql = "";
|
||||
$textAuthorSql = "";
|
||||
for ($i = 0; $i < count($text); $i++) {
|
||||
if ($i != count($text) -1) {
|
||||
$textTitleSql .= "`title` LIKE '%". $text[$i] ."%' AND ";
|
||||
$textPostSql .= "`text` LIKE '%". $text[$i] ."%' AND ";
|
||||
$textAuthorSql .= "`player_name` LIKE '%". $text[$i] ."%' AND ";
|
||||
} else {
|
||||
$textTitleSql .= "`title` LIKE '%". $text[$i] ."%'";
|
||||
$textPostSql .= "`text` LIKE '%". $text[$i] ."%'";
|
||||
$textAuthorSql .= "`player_name` LIKE '%". $text[$i] ."%'";
|
||||
}
|
||||
}
|
||||
|
||||
data_dump($text, array($textTitleSql, $textPostSql, $textAuthorSql), "search");
|
||||
|
||||
?>
|
||||
<h1>Search forum</h1>
|
||||
<form method="" type="get">
|
||||
<select name="type">
|
||||
<option value="1" <?php if ($type == 1) echo "selected"; ?>>Title</option>
|
||||
<option value="2" <?php if ($type == 2) echo "selected"; ?>>Post</option>
|
||||
<option value="3" <?php if ($type == 3) echo "selected"; ?>>Author (threads)</option>
|
||||
<option value="4" <?php if ($type == 4) echo "selected"; ?>>Author (posts)</option>
|
||||
<option value="5" <?php if ($type == 5) echo "selected"; ?>>Latest Posts</option>
|
||||
<option value="6" <?php if ($type == 6) echo "selected"; ?>>Latest Threads</option>
|
||||
</select>
|
||||
<input type="text" name="text" value="<?php if ($text !== false) echo implode(' ', $text); ?>">
|
||||
<input type="submit" value="Search">
|
||||
</form>
|
||||
<?php
|
||||
|
||||
if ($type !== false && $text !== false && $type <= 4 || $type > 4 && $type <= 6) {
|
||||
$forums = mysql_select_multi("SELECT `id` FROM `znote_forum` WHERE `access`='1' AND `guild_id`='0';");
|
||||
$allowedForums = array();
|
||||
foreach($forums as $forum) $allowedForums[] = $forum['id'];
|
||||
|
||||
//data_dump($allowedForums, false, "Allowed forums to search");
|
||||
// in_array(6, $allowedForums)
|
||||
|
||||
$results = false;
|
||||
switch ($type) {
|
||||
case 1: // Search titles
|
||||
$results = mysql_select_multi("SELECT `id` AS `thread_id`, `forum_id`, `title`, `text`, `player_name` FROM `znote_forum_threads` WHERE $textTitleSql ORDER BY `id` DESC LIMIT $searchResults;");
|
||||
// Filter out search results in custom access boards.
|
||||
for ($i = 0; $i < count($results); $i++)
|
||||
if (!in_array($results[$i]['forum_id'], $allowedForums))
|
||||
$results[$i]['forum_id'] = false;
|
||||
else {
|
||||
$results[$i]['title'] = stripBBCode($results[$i]['title']);
|
||||
$results[$i]['text'] = stripBBCode($results[$i]['text']);
|
||||
}
|
||||
|
||||
//if ($results !== false) data_dump($results, false, "Search results");
|
||||
//else echo "<br><b>No results.</b>";
|
||||
break;
|
||||
|
||||
case 2: // Search posts
|
||||
$results = mysql_select_multi("SELECT `thread_id`, `player_name`, `text` FROM `znote_forum_posts` WHERE $textPostSql ORDER BY `id` DESC LIMIT $searchResults;");
|
||||
// Missing ['forum_id'], ['title'], lets get them
|
||||
for ($i = 0; $i < count($results); $i++) {
|
||||
// $results[$i]['asd']
|
||||
$thread = mysql_select_single("SELECT `forum_id`, `title` FROM `znote_forum_threads` WHERE `id`='".$results[$i]['thread_id']."' LIMIT 1;");
|
||||
if ($thread !== false) {
|
||||
$results[$i]['forum_id'] = $thread['forum_id'];
|
||||
$results[$i]['title'] = $thread['title'];
|
||||
if (!in_array($results[$i]['forum_id'], $allowedForums)) $results[$i]['forum_id'] = false;
|
||||
else {
|
||||
$results[$i]['title'] = stripBBCode($results[$i]['title']);
|
||||
$results[$i]['text'] = stripBBCode($results[$i]['text']);
|
||||
}
|
||||
} else $results[$i]['forum_id'] = false;
|
||||
|
||||
} // DONE. :)
|
||||
//data_dump(false, $results, "DATA");
|
||||
break;
|
||||
|
||||
case 3: // Search authors last threads
|
||||
$results = mysql_select_multi("SELECT `id` AS `thread_id`, `forum_id`, `title`, `text`, `player_name` FROM `znote_forum_threads` WHERE $textAuthorSql ORDER BY `id` DESC LIMIT $searchResults;");
|
||||
// Filter out search results in custom access boards.
|
||||
for ($i = 0; $i < count($results); $i++)
|
||||
if (!in_array($results[$i]['forum_id'], $allowedForums))
|
||||
$results[$i]['forum_id'] = false;
|
||||
else {
|
||||
$results[$i]['title'] = stripBBCode($results[$i]['title']);
|
||||
$results[$i]['text'] = stripBBCode($results[$i]['text']);
|
||||
}
|
||||
|
||||
//if ($results !== false) data_dump($results, false, "Search results");
|
||||
//else echo "<br><b>No results.</b>";
|
||||
break;
|
||||
|
||||
case 4: // Search authors last posts
|
||||
$results = mysql_select_multi("SELECT `thread_id`, `player_name`, `text` FROM `znote_forum_posts` WHERE $textAuthorSql ORDER BY `id` DESC LIMIT $searchResults;");
|
||||
// Missing ['forum_id'], ['title'], lets get them
|
||||
for ($i = 0; $i < count($results); $i++) {
|
||||
// $results[$i]['asd']
|
||||
$thread = mysql_select_single("SELECT `forum_id`, `title` FROM `znote_forum_threads` WHERE `id`='".$results[$i]['thread_id']."' LIMIT 1;");
|
||||
if ($thread !== false) {
|
||||
$results[$i]['forum_id'] = $thread['forum_id'];
|
||||
$results[$i]['title'] = $thread['title'];
|
||||
if (!in_array($results[$i]['forum_id'], $allowedForums)) $results[$i]['forum_id'] = false;
|
||||
else {
|
||||
$results[$i]['title'] = stripBBCode($results[$i]['title']);
|
||||
$results[$i]['text'] = stripBBCode($results[$i]['text']);
|
||||
}
|
||||
} else $results[$i]['forum_id'] = false;
|
||||
|
||||
} // DONE. :)
|
||||
break;
|
||||
|
||||
case 5: // Search latest titles
|
||||
$results = mysql_select_multi("SELECT `id` AS `thread_id`, `forum_id`, `title`, `text`, `player_name` FROM `znote_forum_threads` ORDER BY `id` DESC LIMIT $searchResults;");
|
||||
// Filter out search results in custom access boards.
|
||||
for ($i = 0; $i < count($results); $i++)
|
||||
if (!in_array($results[$i]['forum_id'], $allowedForums))
|
||||
$results[$i]['forum_id'] = false;
|
||||
else {
|
||||
$results[$i]['title'] = stripBBCode($results[$i]['title']);
|
||||
$results[$i]['text'] = stripBBCode($results[$i]['text']);
|
||||
}
|
||||
|
||||
//if ($results !== false) data_dump($results, false, "Search results");
|
||||
//else echo "<br><b>No results.</b>";
|
||||
break;
|
||||
|
||||
case 6: // Search posts
|
||||
$results = mysql_select_multi("SELECT `thread_id`, `player_name`, `text` FROM `znote_forum_posts` ORDER BY `id` DESC LIMIT $searchResults;");
|
||||
// Missing ['forum_id'], ['title'], lets get them
|
||||
for ($i = 0; $i < count($results); $i++) {
|
||||
// $results[$i]['asd']
|
||||
$thread = mysql_select_single("SELECT `forum_id`, `title` FROM `znote_forum_threads` WHERE `id`='".$results[$i]['thread_id']."' LIMIT 1;");
|
||||
if ($thread !== false) {
|
||||
$results[$i]['forum_id'] = $thread['forum_id'];
|
||||
$results[$i]['title'] = $thread['title'];
|
||||
if (!in_array($results[$i]['forum_id'], $allowedForums)) $results[$i]['forum_id'] = false;
|
||||
else {
|
||||
$results[$i]['title'] = stripBBCode($results[$i]['title']);
|
||||
$results[$i]['text'] = stripBBCode($results[$i]['text']);
|
||||
}
|
||||
} else $results[$i]['forum_id'] = false;
|
||||
|
||||
} // DONE. :)
|
||||
//data_dump(false, $results, "DATA");
|
||||
break;
|
||||
default:
|
||||
# code...
|
||||
break;
|
||||
}
|
||||
|
||||
// Create table and show stuff!
|
||||
if ($results !== false) {
|
||||
$count = 0;
|
||||
foreach ($results as $r) if ($r['forum_id'] !== false) $count++;
|
||||
if ($count > 0) {
|
||||
?>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Char</th>
|
||||
<th>Thread</th>
|
||||
<th>Post</th>
|
||||
</tr>
|
||||
<?php
|
||||
foreach ($results as $result) {
|
||||
if ($result['forum_id'] !== false) {
|
||||
// $result required fields = ['thread_id'], ['forum_id'], ['title'], ['text'], ['player_name']
|
||||
?>
|
||||
<tr>
|
||||
<td><a href="characterprofile.php?name=<?php echo $result['player_name']; ?>"><?php echo $result['player_name']; ?></a></td>
|
||||
<td>
|
||||
<a href="forum.php?thread=<?php echo $result['thread_id']; ?>&forum=Search&cat=<?php echo $result['forum_id']; ?>">
|
||||
<?php echo $result['title']; ?>
|
||||
</a>
|
||||
</td>
|
||||
<td><?php echo (strlen($result['text']) > 140) ? substr($result['text'],0,137).'...' : $result['text']; ?></td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</table>
|
||||
<?php
|
||||
} else echo "No results.";
|
||||
} else echo "No results.";
|
||||
} else echo "<br><b>You must fill in all fields!</b>";
|
||||
|
||||
include 'layout/overall/footer.php'; ?>
|
Reference in New Issue
Block a user