Code requirements for vacation

Code requirements for vacation

Vacation function is fully functional
This commit is contained in:
Catalin Novgorodschi
2026-04-27 13:26:39 +03:00
parent ed25eb68ec
commit e998dde06b
8 changed files with 484 additions and 129 deletions
+1 -18
View File
@@ -81,7 +81,6 @@ class Account {
else if(User::exists($database,$_POST['name'])) {
$form->addError("name",USRNM_TAKEN);
}
}
if(!isset($_POST['pw']) || trim($_POST['pw']) == "") {
$form->addError("pw",PW_EMPTY);
@@ -116,8 +115,6 @@ class Account {
$form->addError("invt",$_POST['invited']);
$_SESSION['errorarray'] = $form->getErrors();
$_SESSION['valuearray'] = $_POST;
header("Location: anmelden.php");
exit;
}
@@ -144,7 +141,6 @@ class Account {
["", $_POST['invited']],
1
);
$this->generateBase($_POST['kid'], $uid, $_POST['name']);
header("Location: login.php");
exit;
@@ -155,7 +151,6 @@ class Account {
private function Activate() {
global $database;
if(START_DATE < date('d.m.Y') or START_DATE == date('d.m.Y') && START_TIME <= date('H:i'))
{
$q = "SELECT act, username, password, email, tribe, location FROM ".TB_PREFIX."activate where act = '".$database->escape($_POST['id'])."'";
@@ -185,7 +180,6 @@ class Account {
private function Unreg() {
global $database;
$q = "SELECT password, username FROM ".TB_PREFIX."activate where id = ".(int) $_POST['id'];
$result = mysqli_query($database->dblink,$q);
$dbarray = mysqli_fetch_array($result);
@@ -202,7 +196,6 @@ class Account {
private function Login() {
global $database, $session, $form;
$user = $_POST['user'];
if(!isset($_POST['user']) || empty($_POST['user'])){
$form->addError("user", $user);
@@ -222,15 +215,10 @@ class Account {
}
else $form->addError("pw", LOGIN_PW_ERROR);
}
$userData = $database->getUserArray($_POST['user'], 0);
// Vacation mode by Shadow
if($userData["vac_mode"] == 1 && $userData["vac_time"] > time()){
$form->addError("vacation", "Vacation mode is still enabled");
}
// Vacation mode by Shadow
if($form->returnErrors() > 0){
$_SESSION['errorarray'] = $form->getErrors();
$_SESSION['valuearray'] = $_POST;
@@ -238,9 +226,7 @@ class Account {
header("Location: login.php");
exit();
}else{
// Vacation mode by Shadow
$database->removevacationmode($userData['id']);
// Vacation mode by Shadow
if($database->login($_POST['user'], $_POST['pw'])){
$database->UpdateOnline("login", $_POST['user'], time(), $userData['id']);
}else if($database->sitterLogin($_POST['user'], $_POST['pw'])){
@@ -252,8 +238,7 @@ class Account {
}
private function Logout() {
global $session, $database;
global $session, $database;
unset($_SESSION['wid']);
$database->activeModify(addslashes($session->username),1);
$database->UpdateOnline("logout") or die(mysqli_error($database->dblink));
@@ -268,10 +253,8 @@ class Account {
function generateBase($kid, $uid, $username) {
global $database;
$message = new Message();
if($kid == 0) $kid = rand(1,4);
else $kid = $_POST['kid'];
$database->generateVillages([['wid' => 0, 'mode' => 0, 'type' => 3, 'kid' => $kid, 'capital' => 1, 'pop' => 2, 'name' => null, 'natar' => 0]], $uid, $username);
$message->sendWelcome($uid, $username);
}
-5
View File
@@ -47,7 +47,6 @@ class Alliance {
public function procAlliance($get) {
global $session, $database;
if($session->alliance > 0) {
$this->allianceArray = $database->getAlliance($session->alliance);
// Permissions Array
@@ -57,7 +56,6 @@ class Alliance {
$this->inviteArray = $database->getInvitation($session->uid);
$this->gotInvite = count($this->inviteArray) > 0;
}
if(isset($get['a'])) {
switch($get['a']) {
case 2:
@@ -86,7 +84,6 @@ class Alliance {
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){
@@ -105,9 +102,7 @@ class Alliance {
public static function canAct($datas, $mode = 0){
global $database, $session;
$hasSwitchedToAdmin = isset($datas['admin']) && !empty($datas['admin']) && $datas['admin'] == "switch_admin";
return (/*$database->CheckEditRes($datas['aid']) == 1 && */($datas['alliance'] > 0 && (($database->isAllianceOwner($session->uid) == $datas['alliance'] ||
($datas['forum_perm'] == 1 && $session->alliance == $datas['alliance']))) ||
($datas['owner'] == $session->uid && $session->access != ADMIN)) ||
+176 -1
View File
@@ -8496,8 +8496,183 @@ References: User ID/Message ID, Mode
return $dbarray2['vac_mode'] == 1;
}
}
else return false;
else
return
false;
}
/*****************************************
Function to vacation mode remake by Shadow
References: Shadow
*****************************************/
function checkVacationRequirements($uid){
$uid = (int)$uid;
$time = time();
$errors = [];
// 1. Troops moving OUT
$q = "SELECT COUNT(*) as num
FROM ".TB_PREFIX."movement m
JOIN ".TB_PREFIX."vdata v ON v.wref = m.from
WHERE v.owner=$uid
AND m.proc=0
AND m.endtime > $time
AND m.sort_type = 3";
$res = mysqli_query($this->dblink,$q);
if(!$res){ die("SQL ERROR (TROOPS_MOVING): ".mysqli_error($this->dblink)); }
$row = mysqli_fetch_assoc($res);
if((int)$row['num'] > 0) $errors[] = "TROOPS_MOVING";
// 2. Incoming troops
$q = "SELECT COUNT(*) as num
FROM ".TB_PREFIX."movement m
JOIN ".TB_PREFIX."vdata v ON v.wref = m.to
WHERE v.owner=$uid
AND m.proc=0
AND m.endtime > $time
AND (m.sort_type = 3 OR m.sort_type = 4)";
$res = mysqli_query($this->dblink,$q);
if(!$res){ die("SQL ERROR (INCOMING): ".mysqli_error($this->dblink)); }
$row = mysqli_fetch_assoc($res);
if((int)$row['num'] > 0) $errors[] = "INCOMING_TROOPS";
// 3. Reinforcements
$q = "SELECT COUNT(*) as num
FROM ".TB_PREFIX."enforcement e
JOIN ".TB_PREFIX."vdata v ON v.wref = e.vref
WHERE v.owner = $uid
AND e.from != e.vref";
$res = mysqli_query($this->dblink,$q);
if(!$res){ die("SQL ERROR (REINFORCEMENTS): ".mysqli_error($this->dblink)); }
$row = mysqli_fetch_assoc($res);
if((int)$row['num'] > 0) $errors[] = "REINFORCEMENTS";
// 4. Wonder of the World
$q = "SELECT COUNT(*) as num
FROM ".TB_PREFIX."fdata f
JOIN ".TB_PREFIX."vdata v ON v.wref=f.vref
WHERE v.owner=$uid AND f.f99t=40";
$res = mysqli_query($this->dblink,$q);
if(!$res){ die("SQL ERROR (WW): ".mysqli_error($this->dblink)); }
$row = mysqli_fetch_assoc($res);
if((int)$row['num'] > 0) $errors[] = "WW";
// 5. Artefacts
$q = "SELECT COUNT(*) as num
FROM ".TB_PREFIX."artefacts
WHERE owner=$uid";
$res = mysqli_query($this->dblink,$q);
if(!$res){ die("SQL ERROR (ARTEFACTS): ".mysqli_error($this->dblink)); }
$row = mysqli_fetch_assoc($res);
if((int)$row['num'] > 0) $errors[] = "ARTEFACTS";
// 6. Beginner protection (FIXAT)
$q = "SELECT protect
FROM ".TB_PREFIX."users
WHERE id=$uid";
$res = mysqli_query($this->dblink,$q);
if(!$res){ die("SQL ERROR (PROTECTION): ".mysqli_error($this->dblink)); }
$row = mysqli_fetch_assoc($res);
$protect = (int)$row['protect'];
if($protect > 0 && $protect > $time){
$errors[] = "PROTECTION";
}
// =========================
// 7. PRISONERS (FIX FINAL)
// =========================
// 7.1 Enemy troops trapped in your villages
$q = "SELECT COUNT(*) as num
FROM ".TB_PREFIX."prisoners p
JOIN ".TB_PREFIX."vdata v ON v.wref = p.wref
WHERE v.owner = $uid";
$res = mysqli_query($this->dblink,$q);
if(!$res){
die("SQL ERROR (PRISONERS_IN): ".mysqli_error($this->dblink));
}
$row = mysqli_fetch_assoc($res);
$hasEnemyTrapped = (int)$row['num'];
// 7.2 Your troops trapped in enemy villages
$q = "SELECT COUNT(*) as num
FROM ".TB_PREFIX."prisoners p
JOIN ".TB_PREFIX."vdata v ON v.wref = p.from
WHERE v.owner = $uid";
$res = mysqli_query($this->dblink,$q);
if(!$res){
die("SQL ERROR (PRISONERS_OUT): ".mysqli_error($this->dblink));
}
$row = mysqli_fetch_assoc($res);
$hasOwnCaptured = (int)$row['num'];
// FINAL RULE
if($hasEnemyTrapped > 0){
$errors[] = "PRISONERS_IN";
}
if($hasOwnCaptured > 0){
$errors[] = "PRISONERS_OUT";
}
// 8. Marketplace
$q = "SELECT COUNT(*) as num
FROM ".TB_PREFIX."movement m
JOIN ".TB_PREFIX."vdata v ON v.wref = m.from
WHERE v.owner = $uid
AND m.proc = 0
AND m.endtime > $time
AND m.sort_type = 0";
$res = mysqli_query($this->dblink,$q);
if(!$res){ die("SQL ERROR (MARKET): ".mysqli_error($this->dblink)); }
$row = mysqli_fetch_assoc($res);
if((int)$row['num'] > 0) $errors[] = "MARKET";
// 9. Account deletion
$q = "SELECT timestamp
FROM ".TB_PREFIX."deleting
WHERE uid = $uid";
$res = mysqli_query($this->dblink,$q);
if(!$res){ die("SQL ERROR (DELETING): ".mysqli_error($this->dblink)); }
$row = mysqli_fetch_assoc($res);
if(!empty($row['timestamp']) && $row['timestamp'] > $time){
$errors[] = "ACCOUNT_DELETION";
}
return empty($errors) ? true : $errors;
}
// no need to cache this method
function getHeroDeadReviveOrInTraining($id) {
+48 -16
View File
@@ -79,23 +79,55 @@ class Profile {
*/
private function setvactionmode($post){
global $database, $session, $form;
global $database, $session;
if(isset($post['vac']) && $post['vac'] && isset($post['vac_days']) && $post['vac_days'] >= 2 && $post['vac_days'] <= 14){
unset($_SESSION['wid']);
$database->setvacmode($session->uid, $post['vac_days']);
$database->activeModify(addslashes($session->username), 1);
$database->UpdateOnline("logout");
$session->Logout();
header("Location: login.php");
exit;
}else{
$form->add("vac", VAC_MODE_WRONG_DAYS);
header("Location: spieler.php?s=".$session->uid);
exit;
}
}
if(isset($post['vac']) && $post['vac'] && isset($post['vac_days']) && $post['vac_days'] >= 2 && $post['vac_days'] <= 14){
$check = $database->checkVacationRequirements($session->uid);
if($check !== true){
$messages = [
"TROOPS_MOVING" => "There are no outgoing troops",
"INCOMING_TROOPS" => "There are no incoming troops",
"REINFORCEMENTS" => "You have reinforcements on your villages",
"WW" => "You own a Wonder of the World",
"ARTEFACTS" => "You own artefacts",
"PROTECTION" => "You are still under beginner protection",
"PRISONERS_IN" => "No units trapped in your traps",
"PRISONERS_OUT" => "No units in enemy traps",
"MARKET" => "Marketplace transport active",
"ACCOUNT_DELETION" => "Account is scheduled for deletion"
];
$output = "";
foreach($check as $err){
$output .= ($messages[$err] ?? $err) . "<br>";
}
$_SESSION['vac_error'] = $output;
header("Location: spieler.php?s=5");
exit;
}
// TOTUL OK → intră în vacanță
unset($_SESSION['wid']);
$database->setvacmode($session->uid, $post['vac_days']);
$database->activeModify(addslashes($session->username), 1);
$database->UpdateOnline("logout");
$session->Logout();
header("Location: login.php");
exit;
} else {
$_SESSION['vac_error'] = "Vacation days must be between 2 and 14";
header("Location: spieler.php?s=5");
exit;
}
}
/**
* Function to vacation mode - by advocaite and Shadow