Alliance forum fixes part 5

+Confederation and shared forums are now visible to the confederation
alliances or selected alliances/users
+Sticked topics are now displayed first
+Fixed a bug that permitted to add confederated alliances/users to
shared forums
+Minor bug fixing
This commit is contained in:
iopietro
2018-05-20 21:45:14 +02:00
parent 807b684e29
commit 3a14da51e0
7 changed files with 175 additions and 47 deletions
+33 -6
View File
@@ -44,7 +44,7 @@ class Alliance {
public $inviteArray = [];
public $allianceArray = [];
public $userPermArray = [];
public function procAlliance($get) {
global $session, $database;
@@ -77,6 +77,25 @@ class Alliance {
}
}
/**
* Determines if a forum is accessible or not
*
* @param int $forumID The forum ID
* @return bool Returns if the forum is accessible or not
*/
public function isForumAccessible($forumID){
global $session;
//Loop through the shared forums and try to find the passed one
foreach($session->sharedForums as $forums){
foreach($forums as $forum){
if($forum['id'] == $forumID) return true;
}
}
return false;
}
/**
* Determines if a player can act with the forum (edit/delete/create things, etc.)
*
@@ -110,28 +129,36 @@ class Alliance {
global $database, $session;
$alliances = $users = [];
//TODO: Reduce the code of this part and cache existing diplomacy relationship
//Deduplicate alliances
if(!empty($alliancesID)){
foreach($alliancesID as $alliance){
if(!empty($alliance) && is_numeric($alliance) && $database->aExist($alliance, 'id') && $alliance != $session->alliance) $alliances[$alliance] = true;
if(!empty($alliance) && is_numeric($alliance) && $database->aExist($alliance, 'id') && $alliance != $session->alliance && empty($database->diplomacyExistingRelationships($alliance))){
$alliances[$alliance] = true;
}
}
}
if(!empty($alliancesName)){
foreach($alliancesName as $alliance){
if(!empty($alliance) && !empty($allianceID = $database->getAllianceID($alliance)) && $allianceID != $session->alliance) $alliances[$allianceID] = true;
if(!empty($alliance) && !empty($allianceID = $database->getAllianceID($alliance)) && $allianceID != $session->alliance && empty($database->diplomacyExistingRelationships($allianceID))){
$alliances[$allianceID] = true;
}
}
}
//Deduplicate users
if(!empty($usersID)){
foreach($usersID as $user) {
if(!empty($user) && is_numeric($user) && ($userAlly = $database->getUserAllianceID($user)) > 0 && $userAlly != $session->alliance && $database->getUserField($user, 'username', 0) != "[?]" && $user != $session->uid) $users[$user] = true;
if(!empty($user) && is_numeric($user) && ($userAlly = $database->getUserAllianceID($user)) > 0 && $userAlly != $session->alliance && $database->getUserField($user, 'username', 0) != "[?]" && $user != $session->uid && empty($database->diplomacyExistingRelationships($userAlly))) {
$users[$user] = true;
}
}
}
if(!empty($usersName)){
foreach($usersName as $user){
if(!empty($user) && !empty($userID = $database->getUserField($user, 'id', 1)) && $userID != $session->uid && ($userAlly = $database->getUserAllianceID($userID)) > 0 && $userAlly != $session->alliance) $users[$userID] = true;
if(!empty($user) && !empty($userID = $database->getUserField($user, 'id', 1)) && $userID != $session->uid && ($userAlly = $database->getUserAllianceID($userID)) > 0 && $userAlly != $session->alliance && empty($database->diplomacyExistingRelationships($userAlly))) {
$users[$userID] = true;
}
}
}
+105 -15
View File
@@ -627,7 +627,7 @@ class MYSQLi_DB implements IDbConnection {
function mysqli_fetch_all($result) {
list($result) = $this->escape_input($result);
$all = array();
$all = [];
if($result) {
while($row = mysqli_fetch_assoc($result)) {
$all[] = $row;
@@ -2250,12 +2250,105 @@ class MYSQLi_DB implements IDbConnection {
return $this->getVillageByWorldID($wref, $use_cache);
}
/**
* Get shared forums (and confederation forums), based on user ID and alliance ID
*
* @param int $uid The user ID
* @param int $alliance The alliance ID
* @return array Returns all user's shared forums
*/
function getSharedForums($uid, $alliance){
list($uid, $alliance) = $this->escape_input((int) $uid, (int) $alliance);
$allianceForums = $confForums = $closedForums = [];
$q = "SELECT * FROM
".TB_PREFIX."forum_cat
WHERE
display_to_alliances
LIKE
'%,$alliance,%'
OR
display_to_alliances
LIKE
'%,$alliance%'
OR
display_to_alliances
LIKE
'%$alliance,%'
OR
display_to_alliances
LIKE
'%$alliance%'
OR
display_to_users
LIKE
'%,$uid,%'
OR
display_to_users
LIKE
'%,$uid%'
OR
display_to_users
LIKE
'%$uid,%'
OR
display_to_users
LIKE
'%$uid%'
";
$result = mysqli_query($this->dblink, $q);
while($row = mysqli_fetch_assoc($result)) {
switch($row['forum_area']){
case 0: $allianceForums[] = $row; break;
case 2: $confForums[] = $row; break;
case 3: $closedForums[] = $row; break;
}
}
//Get the alliance confederation forums
if($alliance > 0){
$confederations = $this->diplomacyExistingRelationships($alliance);
if(!empty($confederations)){
foreach($confederations as $confederation){
if($confederation['type'] == 1){
$confederationForums = $this->ForumCat($confederation['alli1'] == $alliance ? $confederation['alli2'] : $confederation['alli1'], 1);
if(!empty($confederationForums)){
foreach($confederationForums as $forum){
if($forum['forum_area'] == 2) $confForums[] = $forum;
}
}
}
}
}
}
return ['alliance' => $allianceForums, 'confederation' => $confForums, 'closed' => $closedForums];
}
/**
* Get the total amount of the wanted forum, based on alliance and the forum area
*
* @param int $forumArea The forum Area 0 = alliance, 1 = public, 2 = confederation, 3 = closed
* @param int $ally The alliance ID
* @return int Returns the total amount of the wanted forum
*/
function countForums($forumArea, $ally){
list($forumArea, $ally) = $this->escape_input((int) $forumArea, (int) $ally);
$q = "SELECT Count(*) as Total FROM ".TB_PREFIX."forum_cat WHERE ".($ally != -1 ? "alliance = $ally AND" : "")." forum_area = $forumArea";
$result = mysqli_fetch_array(mysqli_query($this->dblink, $q), MYSQLI_ASSOC );
return $result['Total'];
}
// no need to refactor this method
function CheckForum($id) {
list($id) = $this->escape_input((int) $id);
$q = "SELECT Count(*) as Total FROM " . TB_PREFIX . "forum_cat where alliance = $id";
$result = mysqli_fetch_array(mysqli_query($this->dblink,$q), MYSQLI_ASSOC);
$result = mysqli_fetch_array(mysqli_query($this->dblink, $q), MYSQLI_ASSOC);
return $result['Total'] > 0;
}
@@ -2366,10 +2459,10 @@ class MYSQLi_DB implements IDbConnection {
}
// no need to cache this method
function ForumCat($id) {
list($id) = $this->escape_input($id);
function ForumCat($id, $mode = 0) {
list($id, $mode) = $this->escape_input($id, $mode);
$q = "SELECT * from " . TB_PREFIX . "forum_cat where alliance = '$id' OR forum_area = 1 ORDER BY sorting DESC, id";
$q = "SELECT * from " . TB_PREFIX . "forum_cat where alliance = '$id' ".(!$mode ? "OR forum_area = 1" : "")." ORDER BY sorting DESC, id";
$result = mysqli_query($this->dblink,$q);
return $this->mysqli_fetch_all($result);
}
@@ -3179,16 +3272,13 @@ class MYSQLi_DB implements IDbConnection {
$array = $this->query_return($q);
$text = "";
if ($array) {
foreach($array as $row){
if($row['alli1'] == $aid){
$alliance = $this->getAlliance($row['alli2']);
}elseif($row['alli2'] == $aid){
$alliance = $this->getAlliance($row['alli1']);
}
$text .= "";
$text .= "<a href=allianz.php?aid=".$alliance['id'].">".$alliance['tag']."</a><br> ";
}
if($array){
foreach($array as $row){
if($row['alli1'] == $aid) $alliance = $this->getAlliance($row['alli2']);
elseif($row['alli2'] == $aid) $alliance = $this->getAlliance($row['alli1']);
$text .= "";
$text .= "<a href=allianz.php?aid=" . $alliance['id'] . ">" . $alliance['tag'] . "</a><br> ";
}
}
if(strlen($text) == 0){
$text = "-<br>";
+6 -3
View File
@@ -70,10 +70,11 @@ class Session {
var $bonus3 = 0;
var $bonus4 = 0;
var $timer = 0;
var $sharedForums = [];
var $checker, $mchecker;
public $userinfo = array();
private $userarray = array();
var $villages = array();
public $userinfo = [];
private $userarray = [];
var $villages = [];
function __construct() {
global $database; //TienTN fix
@@ -238,6 +239,7 @@ class Session {
private function PopulateVar() {
global $database;
$this->userarray = $this->userinfo = $database->getUserArray($_SESSION['username'], 0);
$this->username = $this->userarray['username'];
$this->uid = $_SESSION['id_user'] = $this->userarray['id'];
@@ -257,6 +259,7 @@ class Session {
$this->cp = floor($this->userarray['cp']);
$this->gold = $this->userarray['gold'];
$this->oldrank = $this->userarray['oldrank'];
$this->sharedForums = $database->getSharedForums($this->uid, $this->alliance);
$_SESSION['ok'] = $this->userarray['ok'];
if($this->userarray['b1'] > $this->time) {
$this->bonus1 = 1;
+11 -6
View File
@@ -13,12 +13,17 @@ if($session->access == BANNED){
$opt = $database->getAlliPermissions($session->uid, $aid);
$displayarray = $database->getUserArray($session->uid, 1);
$forumcat = $database->ForumCat(htmlspecialchars($displayarray['alliance']));
$ally = $session->alliance;
$public = mysqli_fetch_array(mysqli_query($database->dblink, "SELECT Count(*) as Total FROM ".TB_PREFIX."forum_cat WHERE forum_area = 1"), MYSQLI_ASSOC);
$confederation = mysqli_fetch_array(mysqli_query($database->dblink, "SELECT Count(*) as Total FROM ".TB_PREFIX."forum_cat WHERE alliance = $ally AND forum_area = 2"), MYSQLI_ASSOC);
$alliance = mysqli_fetch_array(mysqli_query($database->dblink, "SELECT Count(*) as Total FROM ".TB_PREFIX."forum_cat WHERE alliance = $ally AND forum_area = 0"), MYSQLI_ASSOC);
$closed = mysqli_fetch_array(mysqli_query($database->dblink, "SELECT Count(*) as Total FROM ".TB_PREFIX."forum_cat WHERE alliance = $ally AND forum_area = 3"), MYSQLI_ASSOC);
$countArray = [$alliance['Total'], $public['Total'], $confederation['Total'], $closed['Total']];
$forumcat = array_merge($forumcat,
$session->sharedForums['alliance'],
$session->sharedForums['confederation'],
$session->sharedForums['closed']);
$countArray = [$database->countForums(0, $session->alliance) + count($session->sharedForums['alliance']),
$database->countForums(1, -1),
$database->countForums(2, $session->alliance) + count($session->sharedForums['confederation']),
$database->countForums(3, $session->alliance) + count($session->sharedForums['closed'])];
$forumArea = ["Alliance Forum(s)", "Public Forum(s)", "Confederation Forum(s)", "Closed Forum(s)"];
foreach($countArray as $index => $count){
+1 -1
View File
@@ -19,7 +19,7 @@ if(empty($CatName)) $alliance->redirect($_GET);
$opt = $database->getAlliPermissions($session->uid, $aid);
$ChckTopic = $database->CheckCatTopic($cat_id);
$Topics = array_merge($database->ForumCatTopic($cat_id), $database->ForumCatTopicStick($cat_id));
$Topics = array_merge($database->ForumCatTopicStick($cat_id), $database->ForumCatTopic($cat_id));
?>
<h4><a href="allianz.php?s=2">Alliance</a> -> <a href="allianz.php?s=2&fid=<?php echo $cat_id; ?>"><?php echo $CatName; ?></a></h4><table cellpadding="1" cellspacing="1" id="topics"><thead>
<tr>
+5 -2
View File
@@ -83,7 +83,9 @@ if(isset($_POST['editforum']) &&
if(isset($_POST['newtopic']) && isset($_POST['thema']) && isset($_POST['text']) && isset($_POST['fid'])
&& !empty($_POST['thema']) && !empty($_POST['text']) && !empty($_POST['fid']) &&
(($forumData = reset($database->ForumCatEdit($_POST['fid'])))['alliance'] == $session->alliance || $forumData['forum_area'] == 1)){
(($forumData = reset($database->ForumCatEdit($_POST['fid'])))['alliance'] == $session->alliance ||
$forumData['forum_area'] == 1 || $alliance->isForumAccessible($_POST['fid'])))
{
$title = $_POST['thema'];
$text = $_POST['text'];
$cat = $_POST['fid'];
@@ -115,7 +117,8 @@ if(isset($_POST['newtopic']) && isset($_POST['thema']) && isset($_POST['text'])
if(isset($_POST['newpost']) && isset($_POST['text']) && !empty($_POST['text']) &&
isset($_POST['tid']) && !empty($_POST['tid']) &&
isset($_POST['fid2']) && !empty($_POST['fid2']) &&
(($forumData = reset($database->ForumCatEdit($_POST['fid2'])))['alliance'] == $session->alliance || $forumData['forum_area'] == 1))
(($forumData = reset($database->ForumCatEdit($_POST['fid2'])))['alliance'] == $session->alliance ||
$forumData['forum_area'] == 1 || $alliance->isForumAccessible($_POST['fid2'])))
{
$text = $_POST['text'];
$tids = $_POST['tid'];
+14 -14
View File
@@ -35,13 +35,13 @@ if(isset($_GET['fid']) || isset($_GET['fid2'])){
$fid = preg_replace("/[^0-9]/","",!empty($_GET['fid']) ? $_GET['fid'] : $_GET['fid2']);
$forum_type = reset($database->ForumCatEdit($fid));
if (!empty($forum_type)) {
if(!empty($forum_type['forum_name']) && $forum_type['forum_area'] != 1){
if($forum_type['forum_area'] != 1 && !$alliance->isForumAccessible($fid)){
if($forum_type['alliance'] != $session->alliance){
header("Location: ".$_SERVER['PHP_SELF']);
exit;
}
}
}
}
}
if(isset($_GET['aid']) || isset($_GET['fid']) || isset($_GET['fid2']) ||
$session->alliance > 0 || ($session->alliance == 0 && isset($_GET['s']) && $_GET['s'] == 2)){
@@ -50,33 +50,33 @@ if(isset($_GET['aid']) || isset($_GET['fid']) || isset($_GET['fid2']) ||
<html>
<head>
<title><?php
echo SERVER_NAME . ' &raquo; &raquo; &raquo; Alliance ';
echo SERVER_NAME.' &raquo; &raquo; &raquo; Alliance ';
if(!empty($_GET['s'])){
switch($_GET['s']){
case '2' :
if($session->alliance == 0) echo 'Forum (No alliance)';
else echo 'Forum (' . $alliance->allianceArray['tag'] . ' - ' . $alliance->allianceArray['name'] . ')';
else echo 'Forum ('.$alliance->allianceArray['tag'].' - '.$alliance->allianceArray['name'].')';
break;
case '6' :
echo 'Chat (' . $alliance->allianceArray['tag'] . ' - ' . $alliance->allianceArray['name'] . ')';
echo 'Chat ('.$alliance->allianceArray['tag'].' - '.$alliance->allianceArray['name'].')';
break;
case '3' :
echo 'Attacks (' . $alliance->allianceArray['tag'] . ' - ' . $alliance->allianceArray['name'] . ')';
echo 'Attacks ('.$alliance->allianceArray['tag'].' - '.$alliance->allianceArray['name'].')';
break;
case '4' :
echo 'News (' . $alliance->allianceArray['tag'] . ' - ' . $alliance->allianceArray['name'] . ')';
echo 'News ('.$alliance->allianceArray['tag'].' - '.$alliance->allianceArray['name'].')';
break;
case '5' :
echo 'Options (' . $alliance->allianceArray['tag'] . ' - ' . $alliance->allianceArray['name'] . ')';
echo 'Options ('.$alliance->allianceArray['tag'].' - '.$alliance->allianceArray['name'].')';
break;
}
}
else echo $alliance->allianceArray['tag'] . ' - ' . $alliance->allianceArray['name'];
else echo $alliance->allianceArray['tag'].' - '.$alliance->allianceArray['name'];
?></title>
<link rel="shortcut icon" href="favicon.ico"/>
@@ -102,12 +102,12 @@ if(isset($_GET['aid']) || isset($_GET['fid']) || isset($_GET['fid2']) ||
if($session->gpack == null || GP_ENABLE == false) {
echo "
<link href='" . GP_LOCATE . "travian.css?e21d2' rel='stylesheet' type='text/css' />
<link href='" . GP_LOCATE . "lang/en/lang.css?e21d2' rel='stylesheet' type='text/css' />";
<link href='".GP_LOCATE."travian.css?e21d2' rel='stylesheet' type='text/css' />
<link href='".GP_LOCATE."lang/en/lang.css?e21d2' rel='stylesheet' type='text/css' />";
} else {
echo "
<link href='" . $session->gpack . "travian.css?e21d2' rel='stylesheet' type='text/css' />
<link href='" . $session->gpack . "lang/en/lang.css?e21d2' rel='stylesheet' type='text/css' />";
<link href='".$session->gpack."travian.css?e21d2' rel='stylesheet' type='text/css' />
<link href='".$session->gpack."lang/en/lang.css?e21d2' rel='stylesheet' type='text/css' />";
}
?>
@@ -205,7 +205,7 @@ $userPermissions = $database->getAlliPermissions($session->uid, $session->allian
}
// Options
}else{
header("Location: " . $_SERVER['PHP_SELF']);
header("Location: ".$_SERVER['PHP_SELF']);
exit();
}
}else if(isset($_GET['delinvite'])){