lwb5-in-2025/scripts/game/beta5/forums/library/getStructure.inc

98 lines
2.7 KiB
PHP

<?php
class beta5_forums_getStructure {
public function __construct($lib) {
$this->lib = $lib;
$this->db = $this->lib->game->db;
$this->players = $this->lib->game->getLib('beta5/player');
$this->alliance = $this->lib->game->getLib('beta5/alliance');
$this->account = $this->lib->game->getLib('main/account');
$this->mForums = $this->lib->game->getLib('main/forums');
}
function run($player) {
$rv = array();
$ord = 0;
$pi = $this->players->call('get', $player);
$isAdm = $this->account->call('isAdmin', $pi['uid']);
$gAdm = $this->mForums->call('getAdministrator', $pi['uid']);
$gMod = $this->mForums->call('getModerator', $pi['uid']);
// Get categories for general forums
$gCats = $this->mForums->call('getCategories');
foreach ($gCats as $gc) {
$rv['G#'.$gc['id']] = array(
"id" => $gc['id'],
"type" => "G",
"title" => $gc['title'],
"desc" => $gc['description'],
"order" => $ord ++,
"forums" => array()
);
}
// Get version-specific general category
$vCat = $this->mForums->call('getVersionCategory', 'beta5');
if ($vCat) {
$rv['G#'.$vCat['id']] = array(
"id" => $vCat['id'],
"type" => "V",
"title" => "Legacy Worlds - Beta 5",
"desc" => $vCat['description'],
"order" => $ord ++,
"forums" => array()
);
}
// Get general forums
$gCats = array_keys($rv);
foreach ($gCats as $cid) {
$rcid = substr($cid,2);
$rv[$cid]['forums'] = $this->mForums->call('getForums', $rcid);
$foDiff = 0;
for ($i=0;$i<count($rv[$cid]['forums']);$i++) {
if (!$isAdm && $rv[$cid]['forums'][$i]['admin_only']) {
array_splice($rv[$cid]['forums'], $i, 1);
$i --;
$foDiff ++;
continue;
}
$id = $rv[$cid]['forums'][$i]['id'];
$rv[$cid]['forums'][$i]['unread'] = $rv[$cid]['forums'][$i]['topics'] - $this->mForums->call('getRead', $id, $pi['uid']);
$rv[$cid]['forums'][$i]['mod'] = in_array($rv[$cid]['id'], $gAdm) || in_array($id, $gMod);
$rv[$cid]['forums'][$i]['forder'] -= $foDiff;
}
}
// Get alliance forums
$ap = $this->alliance->call('getPrivileges', $player);
if (($ap['f_read'] ?? false) || ($ap['f_mod'] ?? false)) {
$rv['A#'.$pi['aid']] = array(
"id" => $pi['aid'],
"type" => "A",
"title" => $pi['aname'],
"order" => $ord ++,
"forums" => array()
);
$fl = $this->alliance->call('getForumsComplete', $pi['aid']);
$rcid = 'A#'.$pi['aid'];
foreach ($fl as $f) {
if (!(in_array($f['id'],$ap['f_read']) || in_array($f['id'],$ap['f_mod']))) {
continue;
}
$f['mod'] = in_array($f['id'],$ap['f_mod']);
$f['unread'] = $f['topics'] - $this->lib->call('getRead', $f['id'], $player);
$f['rcid'] = $rcid;
array_push($rv[$rcid]['forums'],$f);
}
}
return $rv;
}
}
?>