Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 41 additions & 9 deletions jobs/calc_user.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
<?PHP
function calc_user($ts3,$mysqlcon,$lang,$dbname,$slowmode,$timezone,$grouptime,$boostarr,$resetbydbchange,$msgtouser,$currvers,$substridle,$exceptuuid,$exceptgroup,$allclients,$logpath,$rankupmsg,$ignoreidle,$exceptcid,$resetexcept,$phpcommand,$select_arr) {
global $forceremovelowerranks, $keephigherranks;
$nowtime = time();
$sqlexec = '';

Expand Down Expand Up @@ -40,7 +41,8 @@ function calc_user($ts3,$mysqlcon,$lang,$dbname,$slowmode,$timezone,$grouptime,$
}
}
}


// Loop every online client from team speak server
foreach ($allclients as $client) {
$cldbid = $client['client_database_id'];
$name = $mysqlcon->quote($client['client_nickname'], ENT_QUOTES);
Expand All @@ -65,9 +67,12 @@ function calc_user($ts3,$mysqlcon,$lang,$dbname,$slowmode,$timezone,$grouptime,$
}
$except = 0;
}

// Check if client exists in rank database
if(isset($select_arr['all_user'][$uid])) {
$idle = $select_arr['all_user'][$uid]['idle'] + $clientidle;
$grpid = $select_arr['all_user'][$uid]['grpid'];
$grpid = null;
$grpidTime = null;
$nextup = $select_arr['all_user'][$uid]['nextup'];
$grpsince = $select_arr['all_user'][$uid]['grpsince'];
if ($select_arr['all_user'][$uid]['cldbid'] != $cldbid && $resetbydbchange == 1) {
Expand Down Expand Up @@ -117,12 +122,17 @@ function calc_user($ts3,$mysqlcon,$lang,$dbname,$slowmode,$timezone,$grouptime,$
$activetime = $count;
}
$dtT = new DateTime("@$activetime");

// Get client acquired top ranked group and this group required online time
foreach ($grouptime as $time => $groupid) {
if (isset($sgroups[$groupid])) {
$grpid = $groupid;
$grpidTime = $time;
break;
}
}

// Add new client server groups
$grpcount=0;
foreach ($grouptime as $time => $groupid) {
$grpcount++;
Expand All @@ -132,13 +142,16 @@ function calc_user($ts3,$mysqlcon,$lang,$dbname,$slowmode,$timezone,$grouptime,$
if($except != 2 && $except != 3) {
$except = 1;
}
} elseif ($activetime > $time && !isset($exceptuuid[$uid]) && !array_intersect_key($sgroups, $exceptgroup)) {
if ($select_arr['all_user'][$uid]['grpid'] != $groupid) {
if ($select_arr['all_user'][$uid]['grpid'] != NULL && isset($sgroups[$select_arr['all_user'][$uid]['grpid']])) {
}

// Grant new rank if necessary online time has been reached
elseif ($activetime > $time && !isset($exceptuuid[$uid]) && !array_intersect_key($sgroups, $exceptgroup)) {
if ($grpid != $groupid && ($keephigherranks === 0 || $time > $grpidTime)) {
if ($grpid != NULL && isset($sgroups[$grpid])) {
usleep($slowmode);
try {
$ts3->serverGroupClientDel($select_arr['all_user'][$uid]['grpid'], $cldbid);
enter_logfile($logpath,$timezone,5,sprintf($lang['sgrprm'], $select_arr['groups'][$select_arr['all_user'][$uid]['grpid']]['sgidname'], $select_arr['all_user'][$uid]['grpid'], $name, $uid, $cldbid));
$ts3->serverGroupClientDel($grpid, $cldbid);
enter_logfile($logpath,$timezone,5,sprintf($lang['sgrprm'], $select_arr['groups'][$grpid]['sgidname'], $grpid, $name, $uid, $cldbid));
}
catch (Exception $e) {
enter_logfile($logpath,$timezone,2,"TS3 error: ".$e->getCode().': '.$e->getMessage()." ; ".sprintf($lang['sgrprerr'], $name, $uid, $cldbid, $select_arr['groups'][$groupid]['sgidname'], $groupid));
Expand All @@ -149,7 +162,7 @@ function calc_user($ts3,$mysqlcon,$lang,$dbname,$slowmode,$timezone,$grouptime,$
try {
$ts3->serverGroupClientAdd($groupid, $cldbid);
$grpsince = $nowtime;
enter_logfile($logpath,$timezone,5,sprintf($lang['sgrpadd'], $select_arr['groups'][$groupid]['sgidname'], $groupid, $name, $uid, $cldbid));
enter_logfile($logpath,$timezone,5,sprintf($lang['sgrpadd'], $select_arr['groups'][$groupid]['sgidname'], $groupid, $name, $uid, $cldbid));
}
catch (Exception $e) {
enter_logfile($logpath,$timezone,2,"TS3 error: ".$e->getCode().': '.$e->getMessage()." ; ".sprintf($lang['sgrprerr'], $name, $uid, $cldbid, $select_arr['groups'][$groupid]['sgidname'], $groupid));
Expand Down Expand Up @@ -177,6 +190,22 @@ function calc_user($ts3,$mysqlcon,$lang,$dbname,$slowmode,$timezone,$grouptime,$
$nextup = $time - $activetime;
}
}

// Remove all server groups ranked lower than client top rank (prevents multiple ranks per client)
if ($forceremovelowerranks === 1) {
foreach ($grouptime as $time => $groupid) {
if ($grpid != $groupid && $time < $grpidTime && $groupid != 0 && isset($sgroups[$groupid])) {
usleep($slowmode);
try {
$ts3->serverGroupClientDel($groupid, $cldbid);
enter_logfile($logpath, $timezone, 5, sprintf($lang['sgrprm'], $select_arr['groups'][$groupid]['sgidname'], $groupid, $name, $uid, $cldbid));
} catch (Exception $e) {
enter_logfile($logpath, $timezone, 2, "TS3 error: " . $e->getCode() . ': ' . $e->getMessage() . " ; " . sprintf($lang['sgrprerr'], $name, $uid, $cldbid, $select_arr['groups'][$groupid]['sgidname'], $groupid));
}
}
}
}

$updatedata[] = array(
"uuid" => $mysqlcon->quote($client['client_unique_identifier'], ENT_QUOTES),
"cldbid" => $cldbid,
Expand All @@ -195,7 +224,10 @@ function calc_user($ts3,$mysqlcon,$lang,$dbname,$slowmode,$timezone,$grouptime,$
"grpsince" => $grpsince,
"cid" => $client['cid']
);
} else {
}

// Client does not exist in ranksystem db, create new
else {
$grpid = '0';
foreach ($grouptime as $time => $groupid) {
if (isset($sgroups[$groupid])) {
Expand Down
10 changes: 9 additions & 1 deletion jobs/check_db.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?PHP
function check_db($mysqlcon,$lang,$dbname,$timezone,$currvers,$logpath) {
$newversion = '1.2.11';
$newversion = '1.2.11.1';
enter_logfile($logpath,$timezone,5,"Check Ranksystem database for updates...");

function set_new_version($mysqlcon,$dbname,$timezone,$newversion,$logpath) {
Expand Down Expand Up @@ -319,6 +319,14 @@ function check_writable($timezone,$logpath) {
if($mysqlcon->exec("DROP TABLE `$dbname`.`bak_stats_versions`") === false) { }
if($mysqlcon->exec("DROP TABLE `$dbname`.`bak_addon_assign_groups`") === false) { }
}
if(version_compare($currvers, '1.2.11.1', '<=')) {
if($mysqlcon->exec("ALTER TABLE $dbname.config ADD COLUMN forceremovelowerranks TINYINT(1) NOT NULL DEFAULT '0'") === false) { } else {
enter_logfile($logpath,$timezone,4," [1.2.11.1] Added config table column 'forceremovelowerranks'.");
}
if($mysqlcon->exec("ALTER TABLE $dbname.config ADD COLUMN keephigherranks TINYINT(1) NOT NULL DEFAULT '0'") === false) { } else {
enter_logfile($logpath,$timezone,4," [1.2.11.1] Added config table column 'keephigherranks'.");
}
}
$currvers = set_new_version($mysqlcon,$dbname,$timezone,$newversion,$logpath);
old_files($timezone,$logpath);
check_chmod($timezone,$logpath,$lang);
Expand Down
4 changes: 4 additions & 0 deletions languages/core_ar.php
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,10 @@
$lang['wiexuiddesc'] = "A comma seperated list of unique Client-IDs, which should not conside for the Ranksystem.<br>User in this list will be ignored for the rank up.";
$lang['wigrptime'] = "ترفيع رتبة";
$lang['wigrptimedesc'] = "Define here, after which time a user should get automatically a predefined servergroup.<br><br><pre>time (seconds)=>servergroup ID</pre><br>Max. value is 999.999.999 seconds (over 31 years)<br><br>Important for this is the 'online time' or the 'active time' of a user, depending on the setting of the mode.<br><br>Each entry has to separate from next with a comma.<br><br>The time must be entered cumulative<br><br>Example:<br><pre>60=>9,120=>10,180=>11</pre>On this example a user receives servergroup 9 after 60 seconds, servergroup 10 after another 60 seconds, servergroup 11 after another 60 seconds.";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "List Rankup (Admin-Mode)";
$lang['wihladm1'] = "Add online Time to User";
$lang['wihladm2'] = "Remove online Time from User";
Expand Down
4 changes: 4 additions & 0 deletions languages/core_cz.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,10 @@
$lang['wiexuiddesc'] = "Čárka odděluje seznam jedinečných identifikátorů klientů, které by se neměly týkat systému Ranks.<br>Uživatel v tomto seznamu bude ignorován pro hodnocení.";
$lang['wigrptime'] = "definice pořadí";
$lang['wigrptimedesc'] = "Definujte zde a po uplynutí této doby by měl uživatel automaticky získat předdefinovanou serverovou skupinu.<br><br>Max. value are 999.999.999 seconds (over 31 years)<br><br><pre>čas (sekund)=>ID skupiny serverů</pre><br>Důležité pro toto je 'online čas' nebo 'aktivní čas' uživatel v závislosti na nastavení režimu.<br><br>Každý záznam se oddělí od dalšího čárkou.<br><br>Čas musí být zadán kumulativní<br><br>Příklad:<br><pre>60=>9,120=>10,180=>11</pre>Na tomto uživatelé dostanou po 60 sekundách servergroup 9, poté po 60 sekundách servergroup 10 a tak dále ...";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "Seznam hodnocení (režim administrátora)";
$lang['wihladm1'] = "Přidat čas online uživateli";
$lang['wihladm2'] = "Remove online Time from User";
Expand Down
4 changes: 4 additions & 0 deletions languages/core_de.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,10 @@
$lang['wiexuiddesc'] = "Eine mit Komma getrennte Liste von eindeutigen Client-IDs, welche nicht am Ranksystem teilnehmen sollen.<br><br>Aufgelistete User sind von Rangsteigerungen ausgenommen.";
$lang['wigrptime'] = "Rangsteigerung Definition";
$lang['wigrptimedesc'] = "Definiere hier, nach welcher Zeit ein User automatisch in eine vorgegebene Servergruppe gelangen soll.<br><br><pre>Zeit (Sekunden)=>Servergruppen ID</pre><br>Entscheidend hierfür ist die 'online Zeit' bzw. die 'aktive Zeit' des Users, je nach Einstellung des Modus.<br><br>Maximaler Wert sind 999.999.999 Sekunden (über 31 Jahre)<br><br>Jeder Eintrag ist vom nächsten durch ein Komma zu separieren.<br><br>Die Zeiten sind kummulativ zu hinterlegen.<br><br>Beispiel:<br><pre>60=>9,120=>10,180=>11</pre>In diesem Beispiel erhält ein User die Servergruppe 9 nach 60 Sekunden, die Servergruppe 10 nach weiteren 60 Sekunden, die Servergruppe 11 nach weiteren 60 Sekunden.";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "List Rankup (Admin-Modus)";
$lang['wihladm1'] = "Zeit zu User hinzufügen";
$lang['wihladm2'] = "Zeit von User entfernen";
Expand Down
4 changes: 4 additions & 0 deletions languages/core_en.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,10 @@
$lang['wiexuiddesc'] = "A comma separated list of unique Client-IDs, which should not consider for the Ranksystem.<br>The user in this list will be ignored for the rank up.";
$lang['wigrptime'] = "rank up definition";
$lang['wigrptimedesc'] = "Define here, after which time a user should get automatically a predefined servergroup.<br><br><pre>time (seconds)=>servergroup ID</pre><br>Max. value is 999.999.999 seconds (over 31 years)<br><br>Important for this is the 'online time' or the 'active time' of a user, depending on the setting of the mode.<br><br>Each entry has to separate from next with a comma.<br><br>The time must be entered cumulative<br><br>Example:<br><pre>60=>9,120=>10,180=>11</pre>On this example a user receives servergroup 9 after 60 seconds, servergroup 10 after another 60 seconds, servergroup 11 after another 60 seconds.";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "List Rankup (Admin-Mode)";
$lang['wihladm1'] = "Add online Time to User";
$lang['wihladm2'] = "Remove online Time from User";
Expand Down
4 changes: 4 additions & 0 deletions languages/core_fr.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,10 @@
$lang['wiexuiddesc'] = "Des virgules séparent une liste d'indentifiant unique de client, qui ne doivent pas être prise en considération pour le système de rang (Ranksystem).<br>Les utilisateurs de cette liste seront ignorés pour le classement.";
$lang['wigrptime'] = "Définition des prochains rangs";
$lang['wigrptimedesc'] = "Définissez ici après quoi un utilisateur doit automatiquement obtenir un groupe de serveurs prédéfini.<br><br><pre>temps (secondes)=>ID du groupe de serveur</pre><br>Max. value is 999.999.999 seconds (over 31 years)<br><br>Important pour cela est le 'online time' ou le 'active time' d'un utilisateur, en fonction du réglage du mode.<br><br>Chaque entrée doit se séparer de la suivante avec une virgule.<br><br>L'heure doit être saisie cumulative<br><br>Exemple:<br><pre>60=>9,120=>10,180=>11</pre>Sur ce un utilisateur obtient après 60 secondes le groupe de serveurs 9, à son tour après 60 secondes le groupe de serveurs 10, et ainsi de suite ...";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "Liste de classement (Mode-Admin)";
$lang['wihladm1'] = "Ajouter du temps en ligne à un utilisateur";
$lang['wihladm2'] = "Remove online Time from User";
Expand Down
4 changes: 4 additions & 0 deletions languages/core_it.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,10 @@
$lang['wiexuiddesc'] = "Lista degli utenti (ID Univoco) che non verranno contati dal Ranksystem (separati da virgola. es 5GFxciykQMojlrvugWti835Wdto=,YQf+7x/4LJ2Tw5cuQGItsVEn+S4=)<br>Questi utentiverranno ignorati.";
$lang['wigrptime'] = "Definisci Rankup";
$lang['wigrptimedesc'] = "Definisci qui dopo quanto tempo un utente debba ottenere automaticamente un servergroup predefinito.<br><br><pre>tempo (IN SECONDI)=>servergroup ID</pre><br>Max. value is 999.999.999 seconds (over 31 years)<br><br>Sono importanti per questa impostazione il 'Tempo online' o il 'Tempo di attività' di un utente, dipende da come impostata la modalità.<br><br>Ogni voce deve essere separate dalla successive con una virgola. br><br>Dovrà essere inserito il tempo cumulativo<br><br>Esempio:<br><pre>60=>9,120=>10,180=>11</pre>Su queste basi un utente ottiene il servergroup 9 dopo 60 secondi, a sua volta il 10 dopo altri 60 secondi e così via...";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "Lista Utenti (Modalità Admin)";
$lang['wihladm1'] = "Aggiungi del tempo online ad un utente";
$lang['wihladm2'] = "Remove online Time from User";
Expand Down
4 changes: 4 additions & 0 deletions languages/core_nl.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,10 @@
$lang['wiexuiddesc'] = "A comma seperated list of unique Client-IDs, which should not conside for the Ranksystem.<br>User in this list will be ignored for the rank up.";
$lang['wigrptime'] = "rank up definition";
$lang['wigrptimedesc'] = "Define here after which time a user should get automatically a predefined servergroup.<br><br><pre>time (seconds)=>servergroup ID</pre><br>Max. value are 999.999.999 seconds (over 31 years)<br><br>Important for this is the 'online time' or the 'active time' of an user, depending on setting of the mode.<br><br>Each entry have to separate from next with a comma.<br><br>The time must be entered cumulative<br><br>Example:<br><pre>60=>9,120=>10,180=>11</pre>On this a user get after 60 seconds the servergroup 9, in turn after 60 seconds the servergroup 10, and so on...";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "List Rankup (Admin-Mode)";
$lang['wihladm1'] = "Add online Time to User";
$lang['wihladm2'] = "Remove online Time from User";
Expand Down
4 changes: 4 additions & 0 deletions languages/core_pl.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,10 @@
$lang['wiexuiddesc'] = "Rozdzielona przecinkiem lista unikalnych identyfikatorow klientow, ktorych nie nalezy uwzgledniac w systemie Ranksystem.<br>Uzytkownik na tej liscie zostanie zignorowany w rankingu.";
$lang['wigrptime'] = "rangowa definicja";
$lang['wigrptimedesc'] = "Okresl tutaj, po ktorym czasie uzytkownik powinien automatycznie uzyskac predefiniowaną grupe serwerow.<br><br><pre>czas (sekundy)=>identyfikator grupy serwerow</pre><br>Max. value is 999.999.999 seconds (over 31 years)<br><br>Wazne w tym przypadku jest 'czas online' lub 'czas aktywnosci' uzytkownika, w zaleznosci od ustawienia trybu.<br><br>Kazdy wpis musi oddzielac sie od nastepnego za pomocą przecinka.<br><br>Czas musi byc wprowadzony łącznie<br><br>Przykład:<br><pre>60=>9,120=>10,180=>11</pre>W tym przypadku uzytkownik dostaje po 60 sekundach grupe serwerow 9, po kolei po 60 sekundach grupa serwerow 10 itd.";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "Lista Rankup (tryb administratora)";
$lang['wihladm1'] = "Dodaj czas online do uzytkownika";
$lang['wihladm2'] = "Remove online Time from User";
Expand Down
4 changes: 4 additions & 0 deletions languages/core_pt.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,10 @@
$lang['wiexuiddesc'] = "Uma lista separada de vírgulas de ID-Ùnica, que não deve considerar para o Sistema de Rank.<br>O usuário nesta lista será ignorado e não vai participar do ranking.";
$lang['wigrptime'] = "Definições de classifiaões";
$lang['wigrptimedesc'] = "Defina aqui, após quanto tempo um usuário deve obter automaticamente um grupo de servidores predefinido.<br><br><pre>Tempo (em segundos)=>ID do grupo do servidor</pre><br>Max. value is 999.999.999 seconds (over 31 years)<br><br>Importante para este é o 'tempo online' ou o 'tempo ativo' de um usuário, dependendo da configuração do modo.<br><br>Cada entrada deve se separar do próximo com uma vírgula.<br><br>O tempo deve ser inserido cumulativo<br><br>Exemplo:<br><pre>60=>9,120=>10,180=>11</pre>Neste usuário, pegue após 60 segundos o grupo de servidores 9, por sua vez, após 60 segundos, o grupo de servidores 10 e assim por diante ...";
$lang['forceremovelowerranks'] = "Forced removal of lower ranks";
$lang['forceremovelowerranksdesc'] = "If client has more than one ranksystem group, all, except one higher ranked, will be removed.";
$lang['keephigherranks'] = "Keep manually defined ranks";
$lang['keephigherranksdesc'] = "Keep client rank, when it is higher than it should be by online time.";
$lang['wihladm'] = "Classificação (Modo Admin)";
$lang['wihladm1'] = "Adicionar tempo online ao usuário";
$lang['wihladm2'] = "Remove online Time from User";
Expand Down
Loading