ZnoteAAC/forum.php
2020-08-02 14:48:13 +02:00

1112 lines
44 KiB
PHP

<?php require_once 'engine/init.php'; include 'layout/overall/header.php';
protect_page();
error_reporting(E_ALL ^ E_NOTICE);
if (!$config['forum']['enabled']) admin_only($user_data);
/* -------------------------------
--- Znote AAC forum ---
-------------------------------
Created by Znote.
Version 1.4.
Changelog (1.0 --> 1.2):
- Updated to the new date/clock time system
- Bootstrap design support.
Changelog (1.2 --> 1.3):
- Show character outfit as avatar
- Show in-game position
Changelog (1.3 -> 1.4):
- Fix SQL query error when editing Board name.
*/
// BBCODE support:
function TransformToBBCode($string) {
$tags = array(
'[center]{$1}[/center]' => '<center>$1</center>',
'[b]{$1}[/b]' => '<b>$1</b>',
'[img]{$1}[/img]' => '<a href="$1" target="_BLANK"><img src="$1" alt="image" style="width: 100%"></a>',
'[link]{$1}[/link]' => '<a href="$1">$1</a>',
'[link={$1}]{$2}[/link]' => '<a href="$1" target="_BLANK">$2</a>',
'[url={$1}]{$2}[/url]' => '<a href="$1" target="_BLANK">$2</a>',
'[color={$1}]{$2}[/color]' => '<font color="$1">$2</font>',
'[*]{$1}[/*]' => '<li>$1</li>',
'[youtube]{$1}[/youtube]' => '<div class="youtube"><div class="aspectratio"><iframe src="//www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe></div></div>',
);
foreach ($tags as $tag => $value) {
$code = preg_replace('/placeholder([0-9]+)/', '(.*?)', preg_quote(preg_replace('/\{\$([0-9]+)\}/', 'placeholder$1', $tag), '/'));
$string = preg_replace('/'.$code.'/i', $value, $string);
if (strpos($string, "<a href=") !== false) {
if (strpos($string, "http") === false) {
$string = substr_replace($string, "//", 9, 0);
}
}
}
return $string;
}
Function PlayerHaveAccess($yourChars, $playerName){
$access = false;
foreach($yourChars as $char) {
if ($char['name'] == $playerName) $access = true;
}
return $access;
}
// Start page init
$admin = is_admin($user_data);
if ($admin) $yourChars = mysql_select_multi("SELECT `id`, `name`, `group_id` FROM `players` WHERE `level`>='1' AND `account_id`='". $user_data['id'] ."';");
else $yourChars = mysql_select_multi("SELECT `id`, `name`, `group_id` FROM `players` WHERE `level`>='". $config['forum']['level'] ."' AND `account_id`='". $user_data['id'] ."';");
if (!$yourChars) $yourChars = array();
$charCount = count($yourChars);
$yourAccess = accountAccess($user_data['id'], $config['ServerEngine']);
if ($admin) {
if (!empty($_POST)) {
$guilds = mysql_select_multi("SELECT `id`, `name` FROM `guilds` ORDER BY `name`;");
$guilds[] = array('id' => '0', 'name' => 'No guild');
}
$yourAccess = 100;
}
// Your characters, indexed by char_id
$charData = array();
foreach ($yourChars as $char) {
$charData[$char['id']] = $char;
if (get_character_guild_rank($char['id']) > 0) {
$guild = get_player_guild_data($char['id']);
$charData[$char['id']]['guild'] = $guild['guild_id'];
$charData[$char['id']]['guild_rank'] = $guild['rank_level'];
} else $charData[$char['id']]['guild'] = '0';
}
$cooldownw = array(
$user_znote_data['cooldown'],
time(),
$user_znote_data['cooldown'] - time()
);
/////////////////
// Guild Leader & admin
$leader = false;
foreach($charData as $char) {
if ($char['guild'] > 0 && $char['guild_rank'] == 3) $leader = true;
}
if ($admin && !empty($_POST) || $leader && !empty($_POST)) {
$admin_thread_delete = getValue($_POST['admin_thread_delete']);
$admin_thread_close = getValue($_POST['admin_thread_close']);
$admin_thread_open = getValue($_POST['admin_thread_open']);
$admin_thread_sticky = getValue($_POST['admin_thread_sticky']);
$admin_thread_unstick = getValue($_POST['admin_thread_unstick']);
$admin_thread_id = getValue($_POST['admin_thread_id']);
// delete thread
if ($admin_thread_delete !== false) {
$admin_thread_id = (int)$admin_thread_id;
$access = false;
if (!$admin) {
$thread = mysql_select_single("SELECT `forum_id` FROM `znote_forum_threads` WHERE `id`='$admin_thread_id';");
$forum = mysql_select_single("SELECT `guild_id` FROM `znote_forum` WHERE `id`='". $thread['forum_id'] ."';");
foreach($charData as $char) if ($char['guild'] == $forum['guild_id'] && $char['guild_rank'] == 3) $access = true;
} else $access = true;
if ($access) {
// Delete all associated posts
mysql_delete("DELETE FROM `znote_forum_posts` WHERE `thread_id`='$admin_thread_id';");
// Delete thread itself
mysql_delete("DELETE FROM `znote_forum_threads` WHERE `id`='$admin_thread_id' LIMIT 1;");
echo '<h1>Thread and all associated posts deleted.</h1>';
} else echo '<p><b><font color="red">Permission denied.</font></b></p>';
}
// Close thread
if ($admin_thread_close !== false) {
$admin_thread_id = (int)$admin_thread_id;
$access = false;
if (!$admin) {
$thread = mysql_select_single("SELECT `forum_id` FROM `znote_forum_threads` WHERE `id`='$admin_thread_id';");
$forum = mysql_select_single("SELECT `guild_id` FROM `znote_forum` WHERE `id`='". $thread['forum_id'] ."';");
foreach($charData as $char) if ($char['guild'] == $forum['guild_id'] && $char['guild_rank'] == 3) $access = true;
} else $access = true;
if ($access) {
mysql_update("UPDATE `znote_forum_threads` SET `closed`='1' WHERE `id`='$admin_thread_id' LIMIT 1;");
//die("UPDATE `znote_forum_threads` SET `closed`='1' WHERE `id`='$admin_thread_id' LIMIT 1;");
echo '<h1>Thread has been closed.</h1>';
} else echo '<p><b><font color="red">Permission denied.</font></b></p>';
}
// open thread
if ($admin_thread_open !== false) {
$admin_thread_id = (int)$admin_thread_id;
$access = false;
if (!$admin) {
$thread = mysql_select_single("SELECT `forum_id` FROM `znote_forum_threads` WHERE `id`='$admin_thread_id';");
$forum = mysql_select_single("SELECT `guild_id` FROM `znote_forum` WHERE `id`='". $thread['forum_id'] ."';");
foreach($charData as $char) if ($char['guild'] == $forum['guild_id'] && $char['guild_rank'] == 3) $access = true;
} else $access = true;
if ($access) {
mysql_update("UPDATE `znote_forum_threads` SET `closed`='0' WHERE `id`='$admin_thread_id' LIMIT 1;");
echo '<h1>Thread has been opened.</h1>';
} else echo '<p><b><font color="red">Permission denied.</font></b></p>';
}
// stick thread
if ($admin_thread_sticky !== false) {
$admin_thread_id = (int)$admin_thread_id;
$access = false;
if (!$admin) {
$thread = mysql_select_single("SELECT `forum_id` FROM `znote_forum_threads` WHERE `id`='$admin_thread_id';");
$forum = mysql_select_single("SELECT `guild_id` FROM `znote_forum` WHERE `id`='". $thread['forum_id'] ."';");
foreach($charData as $char) if ($char['guild'] == $forum['guild_id'] && $char['guild_rank'] == 3) $access = true;
} else $access = true;
if ($access) {
mysql_update("UPDATE `znote_forum_threads` SET `sticky`='1' WHERE `id`='$admin_thread_id' LIMIT 1;");
echo '<h1>Thread has been sticked.</h1>';
} else echo '<p><b><font color="red">Permission denied.</font></b></p>';
}
// unstick thread
if ($admin_thread_unstick !== false) {
$admin_thread_id = (int)$admin_thread_id;
$access = false;
if (!$admin) {
$thread = mysql_select_single("SELECT `forum_id` FROM `znote_forum_threads` WHERE `id`='$admin_thread_id';");
$forum = mysql_select_single("SELECT `guild_id` FROM `znote_forum` WHERE `id`='". $thread['forum_id'] ."';");
foreach($charData as $char) if ($char['guild'] == $forum['guild_id'] && $char['guild_rank'] == 3) $access = true;
} else $access = true;
if ($access) {
mysql_update("UPDATE `znote_forum_threads` SET `sticky`='0' WHERE `id`='$admin_thread_id' LIMIT 1;");
echo '<h1>Thread has been unsticked.</h1>';
} else echo '<p><b><font color="red">Permission denied.</font></b></p>';
}
}
/////////////////
// ADMIN FUNCT
if ($admin && !empty($_POST)) {
$admin_post_id = getValue($_POST['admin_post_id']);
$admin_post_delete = getValue($_POST['admin_post_delete']);
$admin_category_delete = getValue($_POST['admin_category_delete']);
$admin_category_edit = getValue($_POST['admin_category_edit']);
$admin_category_id = getValue($_POST['admin_category_id']);
$admin_update_category = getValue($_POST['admin_update_category']);
$admin_category_name = getValue($_POST['admin_category_name']);
$admin_category_access = getValue($_POST['admin_category_access']);
$admin_category_closed = getValue($_POST['admin_category_closed']);
$admin_category_hidden = getValue($_POST['admin_category_hidden']);
$admin_category_guild_id = getValue($_POST['admin_category_guild_id']);
if ($admin_category_access === false) $admin_category_access = 0;
if ($admin_category_closed === false) $admin_category_closed = 0;
if ($admin_category_hidden === false) $admin_category_hidden = 0;
if ($admin_category_guild_id === false) $admin_category_guild_id = 0;
$admin_board_create_name = getValue($_POST['admin_board_create_name']);
$admin_board_create_access = getValue($_POST['admin_board_create_access']);
$admin_board_create_closed = getValue($_POST['admin_board_create_closed']);
$admin_board_create_hidden = getValue($_POST['admin_board_create_hidden']);
$admin_board_create_guild_id = getValue($_POST['admin_board_create_guild_id']);
if ($admin_board_create_access === false) $admin_board_create_access = 0;
if ($admin_board_create_closed === false) $admin_board_create_closed = 0;
if ($admin_board_create_hidden === false) $admin_board_create_hidden = 0;
if ($admin_board_create_guild_id === false) $admin_board_create_guild_id = 0;
// Create board
if ($admin_board_create_name !== false) {
// Insert data
mysql_insert("INSERT INTO `znote_forum` (`name`, `access`, `closed`, `hidden`, `guild_id`)
VALUES ('$admin_board_create_name',
'$admin_board_create_access',
'$admin_board_create_closed',
'$admin_board_create_hidden',
'$admin_board_create_guild_id');");
echo '<h1>Board has been created.</h1>';
}
//////////////////
// update category
if ($admin_update_category !== false) {
$admin_category_id = (int)$admin_category_id;
// Update the category
mysql_update("UPDATE `znote_forum` SET
`name`='$admin_category_name',
`access`='$admin_category_access',
`closed`='$admin_category_closed',
`hidden`='$admin_category_hidden',
`guild_id`='$admin_category_guild_id'
WHERE `id`='$admin_category_id' LIMIT 1;");
echo '<h1>Board has been updated successfully.</h1>';
}
//////////////////
// edit category
if ($admin_category_edit !== false) {
$admin_category_id = (int)$admin_category_id;
$category = mysql_select_single("SELECT `id`, `name`, `access`, `closed`, `hidden`, `guild_id`
FROM `znote_forum` WHERE `id`='$admin_category_id' LIMIT 1;");
if ($category !== false) {
?>
<form action="" method="post">
<input type="hidden" name="admin_category_id" value="<?php echo $category['id']; ?>">
<table class="updateTable table table-striped">
<tr>
<td><label for="admin_category_name">Board name:</label></td>
<td><input name="admin_category_name" value="<?php echo $category['name']; ?>" class="span12"></td>
</tr>
<tr>
<td><label for="admin_category_access">Required Access:</label></td>
<td>
<select name="admin_category_access" class="span12">
<?php
foreach($config['ingame_positions'] as $access => $name) {
if ($access == $category['access']) echo "<option value='$access' selected>$name</option>";
else echo "<option value='$access'>$name</option>";
}
?>
</select>
</td>
</tr>
<tr>
<td><label for="admin_category_closed">Closed:</label></td>
<td>
<select name="admin_category_closed" class="span12">
<?php
if ($category['closed'] == 1) echo '<option value="1" selected>Yes</option>';
else echo '<option value="1">Yes</option>';
if ($category['closed'] == 0) echo '<option value="0" selected>No</option>';
else echo '<option value="0">No</option>';
?>
</select>
</td>
</tr>
<tr>
<td><label for="admin_category_hidden">Hidden:</label></td>
<td>
<select name="admin_category_hidden" class="span12">
<?php
if ($category['hidden'] == 1) echo '<option value="1" selected>Yes</option>';
else echo '<option value="1">Yes</option>';
if ($category['hidden'] == 0) echo '<option value="0" selected>No</option>';
else echo '<option value="0">No</option>';
?>
</select>
</td>
</tr>
<tr>
<td><label for="admin_category_guild_id">Guild id:</label></td>
<td>
<select name="admin_category_guild_id" class="span12">
<?php foreach($guilds as $guild) {
if ($category['guild_id'] == $guild['id']) echo "<option value='". $guild['id'] ."' selected>". $guild['name'] ."</option>";
else echo "<option value='". $guild['id'] ."'>". $guild['name'] ."</option>";
} ?>
</select>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="admin_update_category" value="Update Board" style="width: 100%; height: 30px;" class="btn btn-success"></td>
</tr>
</table>
</form>
<?php
} else echo '<h2>Category not found.</h2>';
}
// delete category
if ($admin_category_delete !== false) {
$admin_category_id = (int)$admin_category_id;
// find all threads in category
$threads = mysql_select_multi("SELECT `id` FROM `znote_forum_threads` WHERE `forum_id`='$admin_category_id';");
// Then loop through all threads, and delete all associated posts:
foreach($threads as $thread) {
mysql_delete("DELETE FROM `znote_forum_posts` WHERE `thread_id`='". $thread['id'] ."';");
}
// Then delete all threads
mysql_delete("DELETE FROM `znote_forum_threads` WHERE `forum_id`='$admin_category_id';");
// Then delete the category
mysql_delete("DELETE FROM `znote_forum` WHERE `id`='$admin_category_id' LIMIT 1;");
echo '<h1>Board, associated threads and all their associated posts deleted.</h1>';
}
// delete post
if ($admin_post_delete !== false) {
$admin_post_id = (int)$admin_post_id;
// Delete the post
mysql_delete("DELETE FROM `znote_forum_posts` WHERE `id`='$admin_post_id' LIMIT 1;");
echo '<h1>Post has been deleted.</h1>';
}
}
// End admin function
// Fetching get values
if (!empty($_GET)) {
$getCat = getValue($_GET['cat']);
$getForum = getValue($_GET['forum']);
$getThread = getValue($_GET['thread']);
$new_thread_category = getValue($_POST['new_thread_category']);
$new_thread_cid = getValue($_POST['new_thread_cid']);
$create_thread_cid = getValue($_POST['create_thread_cid']);
$create_thread_title = getValue($_POST['create_thread_title']);
$create_thread_text = getValue($_POST['create_thread_text']);
$create_thread_category = getValue($_POST['create_thread_category']);
$update_thread_id = getValue($_POST['update_thread_id']);
$update_thread_title = getValue($_POST['update_thread_title']);
$update_thread_text = getValue($_POST['update_thread_text']);
$edit_thread = getValue($_POST['edit_thread']);
$edit_thread_id = getValue($_POST['edit_thread_id']);
$reply_thread = getValue($_POST['reply_thread']);
$reply_text = getValue($_POST['reply_text']);
$reply_cid = getValue($_POST['reply_cid']);
$edit_post = getValue($_POST['edit_post']);
$edit_post_id = getValue($_POST['edit_post_id']);
$update_post_id = getValue($_POST['update_post_id']);
$update_post_text = getValue($_POST['update_post_text']);
/////////////////////
// When you are POSTING in an existing thread
if ($reply_thread !== false && $reply_text !== false && $reply_cid !== false) {
$reply_cid = (int)$reply_cid;
if ($user_znote_data['cooldown'] < time()) {
user_update_znote_account(array('cooldown'=>(time() + $config['forum']['cooldownPost'])));
$thread = mysql_select_single("SELECT `closed` FROM `znote_forum_threads` WHERE `id`='$reply_thread' LIMIT 1;");
if ($thread['closed'] == 1 && $admin === false) $access = false;
else $access = true;
if ($access) {
mysql_insert("INSERT INTO `znote_forum_posts` (`thread_id`, `player_id`, `player_name`, `text`, `created`, `updated`) VALUES ('$reply_thread', '$reply_cid', '". $charData[$reply_cid]['name'] ."', '$reply_text', '". time() ."', '". time() ."');");
if ($config['forum']['newPostsBumpThreads']) mysql_update("UPDATE `znote_forum_threads` SET `updated`='". time() ."' WHERE `id`='$reply_thread';");
} else echo '<p><b><font color="red">You don\'t have permission to post on this thread. [Thread: Closed]</font></b></p>';
} else {
?>
<font class="forumCooldown" color="red">Antispam: You need to wait <?php echo ($user_znote_data['cooldown'] - time()); ?> seconds before you can create or post.</font>
<?php
}
}
/////////////////////
// When you ARE creating new thread
if ($create_thread_cid !== false && $create_thread_title !== false && $create_thread_text !== false && $create_thread_category !== false) {
if ($user_znote_data['cooldown'] < time()) {
user_update_znote_account(array('cooldown'=>(time() + $config['forum']['cooldownCreate'])));
$category = mysql_select_single("SELECT `access`, `closed`, `guild_id` FROM `znote_forum` WHERE `id`='$create_thread_category' LIMIT 1;");
if ($category !== false) {
$access = true;
if (!$admin) {
if ($category['access'] > $yourAccess) $access = false;
if ($category['guild_id'] > 0) {
$status = false;
foreach($charData as $char) {
if ($char['guild'] == $category['guild_id']) $status = true;
}
if (!$status) $access = false;
}
if ($category['closed'] > 0) $access = false;
}
if ($access) {
mysql_insert("INSERT INTO `znote_forum_threads`
(`forum_id`, `player_id`, `player_name`, `title`, `text`, `created`, `updated`, `sticky`, `hidden`, `closed`)
VALUES (
'$create_thread_category',
'$create_thread_cid',
'". $charData[$create_thread_cid]['name'] ."',
'$create_thread_title',
'$create_thread_text',
'". time() ."',
'". time() ."',
'0', '0', '0');");
SendGet(array('cat'=>$create_thread_category), 'forum.php');
} else echo '<p><b><font color="red">Permission to create thread denied.</font></b></p>';
} else echo 'Category does not exist.';
} else {
?>
<font class="forumCooldown" color="red">Antispam: You need to wait <?php echo ($user_znote_data['cooldown'] - time()); ?> seconds before you can create or post.</font>
<?php
}
}
/////////////////////
// When you ARE updating post
if ($update_post_id !== false && $update_post_text !== false) {
// Fetch the post data
$post = mysql_select_single("SELECT `id`, `player_name`, `text`, `thread_id` FROM `znote_forum_posts` WHERE `id`='$update_post_id' LIMIT 1;");
$thread = mysql_select_single("SELECT `closed` FROM `znote_forum_threads` WHERE `id`='". $post['thread_id'] ."' LIMIT 1;");
// Verify access
$access = PlayerHaveAccess($yourChars, $post['player_name']);
if ($thread !== false && $thread['closed'] == 1 && $admin === false) $access = false;
if ($admin) $access = true;
//if ($thread === false) $access = false;
if ($access) {
mysql_update("UPDATE `znote_forum_posts` SET `text`='$update_post_text', `updated`='". time() ."' WHERE `id`='$update_post_id';");
echo '<h1>post has been updated.</h1>';
} else echo "<p><font color='red'>Your permission to edit this post has been denied.</font></p>";
}
/////////////////////
// When you ARE updating thread
if ($update_thread_id !== false && $update_thread_title !== false && $update_thread_text !== false) {
// Fetch the thread data
$thread = mysql_select_single("SELECT `id`, `player_name`, `title`, `text`, `closed` FROM `znote_forum_threads` WHERE `id`='$update_thread_id' LIMIT 1;");
// Verify access
$access = PlayerHaveAccess($yourChars, $thread['player_name']);
if ($thread['closed'] == 1 && $admin === false) $access = false;
if ($admin) $access = true;
if ($access) {
mysql_update("UPDATE `znote_forum_threads` SET `title`='$update_thread_title', `text`='$update_thread_text' WHERE `id`='$update_thread_id';");
echo '<h1>Thread has been updated.</h1>';
} else echo "<p><font color='red'>Your permission to edit this thread has been denied.</font></p>";
}
/////////////////////
// When you want to edit a post
if ($edit_post_id !== false && $edit_post !== false) {
// Fetch the post data
$post = mysql_select_single("SELECT `id`, `thread_id`, `text`, `player_name` FROM `znote_forum_posts` WHERE `id`='$edit_post_id' LIMIT 1;");
$thread = mysql_select_single("SELECT `closed` FROM `znote_forum_threads` WHERE `id`='". $post['thread_id'] ."' LIMIT 1;");
// Verify access
$access = PlayerHaveAccess($yourChars, $post['player_name']);
if ($thread['closed'] == 1 && $admin === false) $access = false;
if ($admin) $access = true;
if ($access) {
?>
<h1>Edit Post</h1>
<form type="" method="post">
<input name="update_post_id" type="hidden" value="<?php echo $post['id']; ?>">
<textarea name="update_post_text" style="width: 610px; height: 300px"><?php echo $post['text']; ?></textarea><br>
<input type="submit" value="Update Post" class="btn btn-success">
</form>
<?php
} else echo '<p><b><font color="red">You don\'t have permission to edit this post.</font></b></p>';
} else
/////////////////////
// When you want to edit a thread
if ($edit_thread_id !== false && $edit_thread !== false) {
// Fetch the thread data
$thread = mysql_select_single("SELECT `id`, `title`, `text`, `player_name`, `closed` FROM `znote_forum_threads` WHERE `id`='$edit_thread_id' LIMIT 1;");
$access = PlayerHaveAccess($yourChars, $thread['player_name']);
if ($thread['closed'] == 1) $access = false;
if ($admin) $access = true;
if ($access) {
?>
<h1>Edit Thread</h1>
<form type="" method="post">
<input name="update_thread_id" type="hidden" value="<?php echo $thread['id']; ?>">
<input name="update_thread_title" type="text" value="<?php echo $thread['title']; ?>" style="width: 500px;"><br><br>
<textarea name="update_thread_text" style="width: 610px; height: 300px"><?php echo $thread['text']; ?></textarea><br>
<input type="submit" value="Update Thread" class="btn btn-success">
</form>
<?php
} else echo '<p><b><font color="red">Edit access denied.</font></b></p>';
} else
/////////////////////
// When you want to view a thread
if ($getThread !== false) {
$getThread = (int)$getThread;
$threadData = mysql_select_single("SELECT `id`, `forum_id`, `player_id`, `player_name`, `title`, `text`, `created`, `updated`, `sticky`, `hidden`, `closed` FROM `znote_forum_threads` WHERE `id`='$getThread' LIMIT 1;");
if ($threadData !== false) {
$category = mysql_select_single("SELECT `hidden`, `access`, `guild_id` FROM `znote_forum` WHERE `id`='". $threadData['forum_id'] ."' LIMIT 1;");
if ($category === false) die("Thread category does not exist.");
$access = true;
$leader = false;
if ($category['hidden'] == 1 || $category['access'] > 1 || $category['guild_id'] > 0) {
$access = false;
if ($category['hidden'] == 1) $access = PlayerHaveAccess($yourChars, $threadData['player_name']);
if ($category['access'] > 1 && $yourAccess >= $category['access']) $access = true;
foreach($charData as $char) {
if ($category['guild_id'] == $char['guild']) $access = true;
if ($char['guild_rank'] == 3) $leader = true;
}
if ($admin) $access = true;
}
if ($access) {
$threadPlayer = ($config['forum']['outfit_avatars'] || $config['forum']['player_position']) ? mysql_select_single("SELECT `id`, `group_id`, `sex`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons` FROM `players` WHERE `id`='".$threadData['player_id']."';") : false;
?>
<font>LinkMap: <a href="forum.php">Forum</a> - <a href="?cat=<?php echo $getCat; ?>"><?php echo $getForum; ?></a></font><br>
<font size="5" id="ThreadTitle">Viewing thread: <?php echo "<a href='?forum=". $getForum ."&cat=". $getCat ."&thread=". $threadData['id'] ."'>". $threadData['title'] ."</a>"; ?></font>
<table class="znoteTable ThreadTable table table-striped">
<tr class="yellow">
<th<?php if ($threadPlayer !== false) echo ' colspan="2"'; ?>>
<?php
echo getClock($threadData['created'], true);
if ($threadPlayer === false): ?>
- Created by:
<?php
echo "<a href='characterprofile.php?name=". $threadData['player_name'] ."'>". $threadData['player_name'] ."</a>";
endif;
?>
</th>
</tr>
<tr>
<?php if ($threadPlayer !== false): ?>
<td class="avatar">
<a href='characterprofile.php?name=<?php echo $threadData['player_name']; ?>'><?php echo $threadData['player_name']; ?></a>
<?php if ($config['forum']['outfit_avatars']): ?>
<br><img src="<?php echo $config['show_outfits']['imageServer']; ?>?id=<?php echo $threadPlayer['looktype']; ?>&addons=<?php echo $threadPlayer['lookaddons']; ?>&head=<?php echo $threadPlayer['lookhead']; ?>&body=<?php echo $threadPlayer['lookbody']; ?>&legs=<?php echo $threadPlayer['looklegs']; ?>&feet=<?php echo $threadPlayer['lookfeet']; ?>" alt="img">
<?php endif; ?>
<?php if ($config['forum']['player_position']): ?>
<br><span><?php echo group_id_to_name($threadPlayer['group_id']); ?></span>
<?php endif; ?>
</td>
<?php endif; ?>
<td>
<p><?php echo nl2br(TransformToBBCode($threadData['text'])); ?></p>
</td>
</tr>
</table>
<hr class="bighr">
<?php
if ($admin || $leader) {
// PlayerHaveAccess($yourChars, $thread['player_name']) ||
// $yourChars
?>
<table class="adminTable table">
<tr>
<td>
<form action="" method="post">
<input type="hidden" name="admin_thread_id" value="<?php echo $threadData['id']; ?>">
<input type="submit" name="admin_thread_delete" value="Delete Thread" class="btn btn-danger">
</form>
</td>
<td>
<?php if ($threadData['closed'] == 0) { ?>
<form action="" method="post">
<input type="hidden" name="admin_thread_id" value="<?php echo $threadData['id']; ?>">
<input type="submit" name="admin_thread_close" value="Close Thread" class="btn btn-warning">
</form>
<?php } else { ?>
<form action="" method="post">
<input type="hidden" name="admin_thread_id" value="<?php echo $threadData['id']; ?>">
<input type="submit" name="admin_thread_open" value="Open Thread" class="btn btn-success">
</form>
<?php } ?>
</td>
<td>
<?php if ($threadData['sticky'] == 0) { ?>
<form action="" method="post">
<input type="hidden" name="admin_thread_id" value="<?php echo $threadData['id']; ?>">
<input type="submit" name="admin_thread_sticky" value="Stick thread" class="btn btn-info">
</form>
<?php } else { ?>
<form action="" method="post">
<input type="hidden" name="admin_thread_id" value="<?php echo $threadData['id']; ?>">
<input type="submit" name="admin_thread_unstick" value="Unstick thread" class="btn btn-primary">
</form>
<?php } ?>
</td>
<td>
<form action="" method="post">
<input type="hidden" name="edit_thread_id" value="<?php echo $threadData['id']; ?>">
<input type="submit" name="edit_thread" value="Edit Thread" class="btn btn-warning">
</form>
</td>
</tr>
</table>
<?php
} else {
if ($threadData['closed'] == 0 && PlayerHaveAccess($yourChars, $threadData['player_name'])) {
?>
<table class="editThread">
<tr>
<td>
<form action="" method="post">
<input type="hidden" name="edit_thread_id" value="<?php echo $threadData['id']; ?>">
<input type="submit" name="edit_thread" value="Edit Thread" class="btn btn-info">
</form>
</td>
</tr>
</table>
<?php
}
}
?>
<?php
// Display replies... (copy table above and edit each post)
$posts = mysql_select_multi("SELECT `id`, `player_id`, `player_name`, `text`, `created`, `updated` FROM `znote_forum_posts` WHERE `thread_id`='". $threadData['id'] ."' ORDER BY `created`;");
if ($posts !== false) {
// Load extra data (like outfit avatars?)
$players = array();
$extra = false;
if ($config['forum']['outfit_avatars'] || $config['forum']['player_position']) {
$extra = true;
foreach($posts as $post)
if (!isset($players[$post['player_id']]))
$players[$post['player_id']] = array();
$sql_players = mysql_select_multi("SELECT `id`, `group_id`, `sex`, `lookbody`, `lookfeet`, `lookhead`, `looklegs`, `looktype`, `lookaddons` FROM `players` WHERE `id` IN (".implode(',', array_keys($players)).");");
foreach ($sql_players as $player)
$players[$player['id']] = $player;
}
foreach($posts as $post) {
?>
<table class="znoteTable ThreadTable table table-striped">
<tr class="yellow">
<th<?php if ($extra) echo ' colspan="2"'; ?>>
<?php echo getClock($post['created'], true);
if (!$extra): ?>
- Posted by:
<?php echo "<a href='characterprofile.php?name=". $post['player_name'] ."'>". $post['player_name'] ."</a>";
endif; ?>
</th>
</tr>
<tr>
<?php if ($extra): ?>
<td class="avatar">
<a href='characterprofile.php?name=<?php echo $post['player_name']; ?>'><?php echo $post['player_name']; ?></a>
<?php if ($config['forum']['outfit_avatars']): ?>
<br><img src="<?php echo $config['show_outfits']['imageServer']; ?>?id=<?php echo $players[$post['player_id']]['looktype']; ?>&addons=<?php echo $players[$post['player_id']]['lookaddons']; ?>&head=<?php echo $players[$post['player_id']]['lookhead']; ?>&body=<?php echo $players[$post['player_id']]['lookbody']; ?>&legs=<?php echo $players[$post['player_id']]['looklegs']; ?>&feet=<?php echo $players[$post['player_id']]['lookfeet']; ?>" alt="img">
<?php endif; ?>
<?php if ($config['forum']['player_position']): ?>
<br><span><?php echo group_id_to_name($players[$post['player_id']]['group_id']); ?></span>
<?php endif; ?>
</td>
<?php endif; ?>
<td>
<p><?php echo nl2br(TransformToBBCode($post['text'])); ?></p>
</td>
</tr>
</table>
<hr class="bighr">
<?php
if (PlayerHaveAccess($yourChars, $post['player_name']) || $admin) {
if ($admin) {
?>
<form action="" method="post" class="postButton">
<input type="hidden" name="admin_post_id" value="<?php echo $post['id']; ?>">
<input type="submit" name="admin_post_delete" value="Delete Post" class="btn btn-danger">
</form>
<?php
}
if ($threadData['closed'] == 0 || $admin) {
?>
<form action="" method="post" class="postButton">
<input type="hidden" name="edit_post_id" value="<?php echo $post['id']; ?>">
<input type="submit" name="edit_post" value="Edit Post" class="btn btn-info">
</form>
<?php
}
}
}
}
// Quick Reply
if ($charCount > 0) {
if ($threadData['closed'] == 0 || $yourAccess > 3) {
?>
<form action="" method="post">
<input name="reply_thread" type="hidden" value="<?php echo $threadData['id']; ?>"><br>
<p style="font-size: 13px; padding-left: 10px; padding-top: 10px; height: 5px; width: 600px; border-top: 1px solid black;"><b>[b]Bold Text[/b]</b>, [img]<a href="https://imgur.com/">Direct Image Link</a>[/img], [center]Centered Text[/center],<br> [link]<a href="https://youtube.com/" target="_BLANK">https://youtube.com/</a>[/link], [color=<font color="green">GREEN</font>]<font color="green">Green Text!</font>[/color], [*] - Dotted [/*]</p><br>
<textarea class="forumReply" name="reply_text" style="width: 610px; height: 150px"></textarea><br>
<select name="reply_cid" multiple="multiple">
<?php
foreach($yourChars as $char) {
echo "<option value='". $char['id'] ."'>". $char['name'] ."</option>";
}
?>
</select>
<input name="" type="submit" value="Post Reply" class="btn btn-primary">
</form>
<?php
} else echo '<p><b>You don\'t have permission to post on this thread. [Thread: Closed]</b></p>';
} else {
?><p>You must have a character on your account that is level <?php echo $config['forum']['level']; ?>+ to reply to this thread.</p><?php
}
} else echo "<p><font color='red'>Your permission to access this thread has been denied.</font></p>";
} else {
?>
<h1>Thread unavailable</h1>
<p>Thread is unavailable for you, or do not exist any more.
<?php
if ($_GET['cat'] > 0 && !empty($_GET['forum'])) {
$tmpCat = getValue($_GET['cat']);
$tmpCatName = getValue($_GET['forum']);
?>
<br><a href="forum.php?forum=<?php echo $tmpCatName; ?>&cat=<?php echo $tmpCat; ?>">Go back to: <?php echo $tmpCatName; ?></a></p>
<?php
} else {
?>
<br><a href="forum.php">Go back to Forum</a></p>
<?php
}
?>
<?php
}
} else
/////////////////////
// When you want to create a new thread
if ($new_thread_category !== false && $new_thread_cid !== false) {
// Verify we got access to this category
$category = mysql_select_single("SELECT `access`, `closed`, `guild_id` FROM `znote_forum` WHERE `id`='$new_thread_category' LIMIT 1;");
if ($category !== false) {
$access = true;
if (!$admin) {
if ($category['access'] > $yourAccess) $access = false;
if ($category['guild_id'] > 0) {
$status = false;
foreach($charData as $char) {
if ($char['guild'] == $category['guild_id']) $status = true;
}
if (!$status) $access = false;
}
if ($category['closed'] > 0) $access = false;
}
if ($access) {
?>
<h1>Create new thread</h1>
<form type="" method="post">
<input type="text" disabled value="<?php echo $charData[$new_thread_cid]['name']; ?>" style="width: 100px;">
<input name="create_thread_cid" type="hidden" value="<?php echo $new_thread_cid; ?>">
<input name="create_thread_category" type="hidden" value="<?php echo $new_thread_category; ?>">
<input name="create_thread_title" type="text" placeholder="Thread title" style="width: 500px;"><br><br>
<textarea name="create_thread_text" style="width: 610px; height: 300px" placeholder="Thread text"></textarea><br>
<input type="submit" value="Create Thread" class="btn btn-success">
</form>
<?php
} else echo '<p><b><font color="red">Permission to create thread denied.</font></b></p>';
}
} else
/////////////////////
// When category is specified
if ($getCat !== false) {
$getCat = (int)$getCat;
// Fetch category rules
$category = mysql_select_single("SELECT `name`, `access`, `closed`, `hidden`, `guild_id` FROM `znote_forum` WHERE `id`='$getCat' AND `access`<='$yourAccess' LIMIT 1;");
if ($category !== false && $category['guild_id'] > 0 && !$admin) {
$access = false;
foreach($charData as $char) if ($category['guild_id'] == $char['guild']) $access = true;
if ($access !== true) $category = false;
}
if ($category !== false) {
// TODO : Verify guild access
//foreach($charData)
echo "<h1><a href='forum.php'>Forum</a> Board: ". $category['name'] ."</h1>";
// Threads
// - id - forum_id - player_id - player_name - title - text - created - updated - sticky - hidden - closed
$threads = mysql_select_multi("SELECT `id`, `player_name`, `title`, `sticky`, `closed` FROM `znote_forum_threads` WHERE `forum_id`='$getCat' ORDER BY `sticky` DESC, `updated` DESC;");
///// HTML \\\\\
if ($threads !== false) {
?>
<table class="znoteTable table table-bordered table-striped table-hover" id="forumThreadTable">
<tr class="yellow">
<th width="80%">Title</th>
<th width="20%">By</th>
</tr>
<?php
foreach($threads as $thread) {
$access = true;
if ($category['hidden'] == 1) {
if (!$admin) $access = false;
$access = PlayerHaveAccess($yourChars, $thread['player_name']);
if ($yourAccess > 3) $access = true;
}
if ($access) {
?>
<tr class="special">
<?php
$url = url("forum.php?forum=". $category['name'] ."&cat=". $getCat ."&thread=". $thread['id']);
echo '<td onclick="javascript:window.location.href=\'' . $url . '\'">';
?>
<!--<td>-->
<?php
if ($thread['sticky'] == 1) echo $config['forum']['sticky'],' ';
if ($thread['closed'] == 1) echo $config['forum']['closed'],' ';
echo $thread['title'];
?>
</td>
<?php
$url = url("characterprofile.php?name=". $thread['player_name']);
echo '<td onclick="javascript:window.location.href=\'' . $url . '\'">';
?>
<!--<td>-->
<?php
echo $thread['player_name'];
?>
</td>
</tr>
<?php
}
}
?>
</table>
<?php
} else echo 'Board is empty, no threads exist yet.';
///////////
// Create thread button
if ($charCount > 0) {
if ($category['closed'] == 0 || $admin) {
?>
<form action="" method="post">
<input type="hidden" value="<?php echo $getCat; ?>" name="new_thread_category">
<select name="new_thread_cid" multiple="multiple">
<?php
foreach($yourChars as $char) {
echo "<option value='". $char['id'] ."'>". $char['name'] ."</option>";
}
?>
</select>
<input type="submit" value="Create new thread" class="btn btn-primary">
</form>
<?php
} else echo '<p>This board is closed.</p>';
} else echo "<p>You must have a character on your account that is level ". $config['forum']['level'] ."+ to create new threads.</p>";
} else echo "<p><font color='red'>Your permission to access this board has been denied.<br>If you are trying to access a Guild Board, you need level: ". $config['forum']['level'] ."+</font></p>";
}
} else {
//////////////////////
// No category specified, show list of available categories
if (!$admin) $categories = mysql_select_multi(
"SELECT `id`, `name`, `access`, `closed`, `hidden`, `guild_id` FROM `znote_forum` WHERE `access`<='$yourAccess' ORDER BY `name`;");
else $categories = mysql_select_multi("SELECT `id`, `name`, `access`, `closed`, `hidden`, `guild_id` FROM `znote_forum` ORDER BY `name`;");
$guildboard = false;
?>
<table class="znoteTable table table-striped table-hover" id="forumCategoryTable">
<tr class="yellow">
<th>Forum Boards</th>
<?php
$guild = false;
foreach($charData as $char) {
if ($char['guild'] > 0) $guild = true;
}
if ($admin || $guild) {
if (!isset($guilds)) {
$guilds = mysql_select_multi("SELECT `id`, `name` FROM `guilds` ORDER BY `name`;");
$guilds[] = array('id' => '0', 'name' => 'No guild');
}
$guildName = array();
foreach($guilds as $guild) {
$guildName[$guild['id']] = $guild['name'];
}
if ($admin) {
?>
<th>Edit</th>
<th>Delete</th>
<?php
}
}
?>
</tr>
<?php
if ($categories !== false) {
foreach ($categories as $category) {
$access = true;
if ($category['guild_id'] > 0) {
$guildboard[] = $category;
$access = false;
}
/*
if ($guild) {
foreach($charData as $char) {
if ($category['guild_id'] == $char['guild']) $access = true;
}
}
*/
if ($access) {
$url = url("forum.php?cat=". $category['id']);
echo '<tr class="special">';
echo '<td onclick="javascript:window.location.href=\'' . $url . '\'">';
if ($category['closed'] == 1) echo $config['forum']['closed'],' ';
if ($category['hidden'] == 1) echo $config['forum']['hidden'],' ';
if ($category['guild_id'] > 0) {
echo "[". $guildName[$category['guild_id']] ."] ";
}
echo $category['name'] ."</td>";
// Admin columns
if ($admin) {
?>
<td style="margin: 0px; padding: 0px; width: 100px;">
<form action="" method="post">
<input type="hidden" name="admin_category_id" value="<?php echo $category['id']; ?>">
<input type="submit" name="admin_category_edit" value="Edit" style="margin: 0px; padding: 0px; width: 50px; height: 22px;" class="btn btn-warning">
</form>
</td>
<td style="margin: 0px; padding: 0px; width: 100px;">
<form action="" method="post">
<input type="hidden" name="admin_category_id" value="<?php echo $category['id']; ?>">
<input type="submit" name="admin_category_delete" value="Delete" style="margin: 0px; padding: 0px; width: 75px; height: 22px;" class="btn btn-danger">
</form>
</td>
<?php
}
echo '</tr>';
}
}
}
?>
</table>
<hr class="bighr">
<?php
if ($guildboard !== false && $guild || $guildboard !== false && $admin) {
//
?>
<table class="table table-striped table-hover znoteTable" id="forumCategoryTable">
<tr class="yellow">
<th>Guild Boards</th>
<?php
foreach($charData as $char) {
if ($char['guild'] > 0) $guild = true;
}
if ($admin || $guild) {
if (!isset($guilds)) {
$guilds = mysql_select_multi("SELECT `id`, `name` FROM `guilds` ORDER BY `name`;");
$guilds[] = array('id' => '0', 'name' => 'No guild');
}
$guildName = array();
foreach($guilds as $guild) {
$guildName[$guild['id']] = $guild['name'];
}
if ($admin) {
?>
<th width="100">Edit</th>
<th width="100">Delete</th>
<?php
}
}
?>
</tr>
<?php
$count = 0;
foreach ($guildboard as $board) {
$access = false;
foreach($charData as $char) {
if ($board['guild_id'] == $char['guild']) {
$access = true;
$count++;
}
}
if ($access || $admin) {
$url = url("forum.php?cat=". $board['id']);
echo '<tr class="special">';
echo '<td onclick="javascript:window.location.href=\'' . $url . '\'">';
if ($board['closed'] == 1) echo $config['forum']['closed'],' ';
if ($board['hidden'] == 1) echo $config['forum']['hidden'],' ';
if ($board['guild_id'] > 0) {
echo "[". $guildName[$board['guild_id']] ."] ";
}
echo $board['name'] ."</td>";
// Admin columns
if ($admin) {
?>
<td style="margin: 0px; padding: 0px; width: 100px;">
<form action="" method="post">
<input type="hidden" name="admin_category_id" value="<?php echo $board['id']; ?>">
<input type="submit" name="admin_category_edit" value="Edit" style="margin: 0px; padding: 0px; width: 50px; height: 22px;" class="btn btn-warning">
</form>
</td>
<td style="margin: 0px; padding: 0px; width: 100px;">
<form action="" method="post">
<input type="hidden" name="admin_category_id" value="<?php echo $board['id']; ?>">
<input type="submit" name="admin_category_delete" value="Delete" style="margin: 0px; padding: 0px; width: 75px; height: 22px;" class="btn btn-danger">
</form>
</td>
<?php
}
echo '</tr>';
}
}
if ($count == 0 && !$admin) echo '<tr><td>You don\'t have access to any guildboards.</td></tr>';
?>
</table>
<?php
}
if ($admin) {
?>
<h2>Create board:</h2>
<form action="" method="post">
<input type="text" name="admin_board_create_name" placeholder="Board name"><br><br>
Required access: <select name="admin_board_create_access">
<?php
foreach($config['ingame_positions'] as $access => $name) {
echo "<option value='$access'>$name</option>";
}
?>
</select><br><br>
Board closed: <select name="admin_board_create_closed">
<option value="0">No</option>
<option value="1">Yes</option>
</select><br>
Board hidden: <select name="admin_board_create_hidden">
<option value="0">No</option>
<option value="1">Yes</option>
</select><br><br>
Guild board: <select name="admin_board_create_guild_id">
<?php
foreach($guilds as $guild) {
if ($guild['id'] == 0) echo "<option value='". $guild['id'] ."' selected>". $guild['name'] ."</option>";
else echo "<option value='". $guild['id'] ."'>". $guild['name'] ."</option>";
}
?>
</select><br><br>
<input type="submit" value="Create Board" class="btn btn-primary">
</form>
<?php
}
}
include 'layout/overall/footer.php'; ?>