diff --git a/jobs/calc_user.php b/jobs/calc_user.php index 3713bb8..8ed7af7 100644 --- a/jobs/calc_user.php +++ b/jobs/calc_user.php @@ -1,5 +1,6 @@ quote($client['client_nickname'], ENT_QUOTES); @@ -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) { @@ -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++; @@ -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)); @@ -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)); @@ -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, @@ -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])) { diff --git a/jobs/check_db.php b/jobs/check_db.php index c613e66..3244976 100644 --- a/jobs/check_db.php +++ b/jobs/check_db.php @@ -1,6 +1,6 @@ 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); diff --git a/languages/core_ar.php b/languages/core_ar.php index a6c7508..5794fa2 100644 --- a/languages/core_ar.php +++ b/languages/core_ar.php @@ -392,6 +392,10 @@ $lang['wiexuiddesc'] = "A comma seperated list of unique Client-IDs, which should not conside for the Ranksystem.
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.

time (seconds)=>servergroup ID

Max. value is 999.999.999 seconds (over 31 years)

Important for this is the 'online time' or the 'active time' of a user, depending on the setting of the mode.

Each entry has to separate from next with a comma.

The time must be entered cumulative

Example:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_cz.php b/languages/core_cz.php index 24955c5..b8652b0 100644 --- a/languages/core_cz.php +++ b/languages/core_cz.php @@ -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.
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.

Max. value are 999.999.999 seconds (over 31 years)

čas (sekund)=>ID skupiny serverů

Důležité pro toto je 'online čas' nebo 'aktivní čas' uživatel v závislosti na nastavení režimu.

Každý záznam se oddělí od dalšího čárkou.

Čas musí být zadán kumulativní

Příklad:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_de.php b/languages/core_de.php index 62c285e..103f041 100644 --- a/languages/core_de.php +++ b/languages/core_de.php @@ -391,6 +391,10 @@ $lang['wiexuiddesc'] = "Eine mit Komma getrennte Liste von eindeutigen Client-IDs, welche nicht am Ranksystem teilnehmen sollen.

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.

Zeit (Sekunden)=>Servergruppen ID

Entscheidend hierfür ist die 'online Zeit' bzw. die 'aktive Zeit' des Users, je nach Einstellung des Modus.

Maximaler Wert sind 999.999.999 Sekunden (über 31 Jahre)

Jeder Eintrag ist vom nächsten durch ein Komma zu separieren.

Die Zeiten sind kummulativ zu hinterlegen.

Beispiel:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_en.php b/languages/core_en.php index 95ddee1..d8d8647 100644 --- a/languages/core_en.php +++ b/languages/core_en.php @@ -391,6 +391,10 @@ $lang['wiexuiddesc'] = "A comma separated list of unique Client-IDs, which should not consider for the Ranksystem.
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.

time (seconds)=>servergroup ID

Max. value is 999.999.999 seconds (over 31 years)

Important for this is the 'online time' or the 'active time' of a user, depending on the setting of the mode.

Each entry has to separate from next with a comma.

The time must be entered cumulative

Example:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_fr.php b/languages/core_fr.php index de34aa5..028b293 100644 --- a/languages/core_fr.php +++ b/languages/core_fr.php @@ -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).
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.

temps (secondes)=>ID du groupe de serveur

Max. value is 999.999.999 seconds (over 31 years)

Important pour cela est le 'online time' ou le 'active time' d'un utilisateur, en fonction du réglage du mode.

Chaque entrée doit se séparer de la suivante avec une virgule.

L'heure doit être saisie cumulative

Exemple:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_it.php b/languages/core_it.php index cf018b3..ed1c7cf 100644 --- a/languages/core_it.php +++ b/languages/core_it.php @@ -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=)
Questi utentiverranno ignorati."; $lang['wigrptime'] = "Definisci Rankup"; $lang['wigrptimedesc'] = "Definisci qui dopo quanto tempo un utente debba ottenere automaticamente un servergroup predefinito.

tempo (IN SECONDI)=>servergroup ID

Max. value is 999.999.999 seconds (over 31 years)

Sono importanti per questa impostazione il 'Tempo online' o il 'Tempo di attività' di un utente, dipende da come impostata la modalità.

Ogni voce deve essere separate dalla successive con una virgola. br>
Dovrà essere inserito il tempo cumulativo

Esempio:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_nl.php b/languages/core_nl.php index 879ae4a..8054ec4 100644 --- a/languages/core_nl.php +++ b/languages/core_nl.php @@ -391,6 +391,10 @@ $lang['wiexuiddesc'] = "A comma seperated list of unique Client-IDs, which should not conside for the Ranksystem.
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.

time (seconds)=>servergroup ID

Max. value are 999.999.999 seconds (over 31 years)

Important for this is the 'online time' or the 'active time' of an user, depending on setting of the mode.

Each entry have to separate from next with a comma.

The time must be entered cumulative

Example:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_pl.php b/languages/core_pl.php index 528a64c..c224063 100644 --- a/languages/core_pl.php +++ b/languages/core_pl.php @@ -391,6 +391,10 @@ $lang['wiexuiddesc'] = "Rozdzielona przecinkiem lista unikalnych identyfikatorow klientow, ktorych nie nalezy uwzgledniac w systemie Ranksystem.
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.

czas (sekundy)=>identyfikator grupy serwerow

Max. value is 999.999.999 seconds (over 31 years)

Wazne w tym przypadku jest 'czas online' lub 'czas aktywnosci' uzytkownika, w zaleznosci od ustawienia trybu.

Kazdy wpis musi oddzielac sie od nastepnego za pomocą przecinka.

Czas musi byc wprowadzony łącznie

Przykład:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_pt.php b/languages/core_pt.php index 7839d22..74909f7 100644 --- a/languages/core_pt.php +++ b/languages/core_pt.php @@ -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.
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.

Tempo (em segundos)=>ID do grupo do servidor

Max. value is 999.999.999 seconds (over 31 years)

Importante para este é o 'tempo online' ou o 'tempo ativo' de um usuário, dependendo da configuração do modo.

Cada entrada deve se separar do próximo com uma vírgula.

O tempo deve ser inserido cumulativo

Exemplo:
60=>9,120=>10,180=>11
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"; diff --git a/languages/core_ro.php b/languages/core_ro.php index c1b0ca9..0e82edf 100644 --- a/languages/core_ro.php +++ b/languages/core_ro.php @@ -391,6 +391,10 @@ $lang['wiexuiddesc'] = "A comma seperated list of unique Client-IDs, which should not conside for the Ranksystem.
User in this list will be ignored for the rank up."; $lang['wigrptime'] = "Clasificare grade"; $lang['wigrptimedesc'] = "Define here, after which time a user should get automatically a predefined servergroup.

time (seconds)=>servergroup ID

Max. value is 999.999.999 seconds (over 31 years)

Important for this is the 'online time' or the 'active time' of a user, depending on the setting of the mode.

Each entry has to separate from next with a comma.

The time must be entered cumulative

Example:
60=>9,120=>10,180=>11
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'] = "Lista Rank(Mod Admin)"; $lang['wihladm1'] = "Adauga timp online"; $lang['wihladm2'] = "Remove online Time from User"; diff --git a/languages/core_ru.php b/languages/core_ru.php index 7318f56..864a9a0 100644 --- a/languages/core_ru.php +++ b/languages/core_ru.php @@ -390,6 +390,12 @@ $lang['wiexuid'] = "Исключенные пользователи"; $lang['wiexuiddesc'] = "Укажите через запятую уникальные идентификаторы пользователей (UID), которых система рангов будет игнорировать и им не будет засчитываться время, проведенное на сервере.
"; $lang['wigrptime'] = "Настройка рангов"; +$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'] = "Список пользователей (Admin-Mode)"; +$lang['wihladm'] = "Список пользователей (Admin-Mode)"; $lang['wigrptimedesc'] = "Укажите через какой промежуток времени, будут выдаваться группы сервера.

Время (в секундах)=>номер группы сервера (ServerGroupID)

К тому же, от выбранного режима будет зависеть.

Каждый параметр должен разделяться запятой.

Так же время должно быть указано по 'нарастающей'

Пример:
60=>9,120=>10,180=>11
По истечению 60 секунд пользователь получает сервер группу под SGID 9, по истечению еще 120 секунд пользователь получает сервер группу SGID 10, и так далее..."; $lang['wihladm'] = "Список пользователей (Режим администратора)"; $lang['wihladm1'] = "Начислить время пользователю"; diff --git a/other/config.php b/other/config.php index 6fd1fea..089a62d 100644 --- a/other/config.php +++ b/other/config.php @@ -210,6 +210,8 @@ function rem_session_ts3($rspathhex) { $avatar_delay = $config['avatar_delay']; $registercid = $config['registercid']; $iphash = $config['iphash']; + $forceremovelowerranks = (int)$config['forceremovelowerranks']; + $keephigherranks = (int)$config['keephigherranks']; } } elseif(!isset($_GET["lang"])) { $lang = set_language("en"); diff --git a/stats/list_rankup.php b/stats/list_rankup.php index ce0279f..2741eb5 100644 --- a/stats/list_rankup.php +++ b/stats/list_rankup.php @@ -301,15 +301,25 @@ function pagination($keysort,$keyorder,$user_pro_seite,$seiten_anzahl_gerundet,$ ksort($grouptime); if (count($sqlhis) > 0) { foreach ($sqlhis as $uuid => $value) { - if ($substridle == 1) { - $activetime = $value['count'] - $value['idle']; - } else { - $activetime = $value['count']; + // Get client next rank group and this group required online time + $grpcount = $curgroupid = $curgrpidTime = 0; + foreach ($grouptime as $time => $groupid) { + $grpcount++; + if ($grpcount === 1) { + $curgroupid = $groupid; + $curgrpidTime = $time; + } + if ($value['grpid'] == $groupid) { + $curgroupid = $groupid; + $curgrpidTime = $time; + break; + } } + $grpcount=0; foreach ($grouptime as $time => $groupid) { $grpcount++; - if ($activetime < $time || $grpcount == count($grouptime) && $value['nextup'] <= 0 && $showhighest == 1 || $grpcount == count($grouptime) && $value['nextup'] == 0 && $adminlogin == 1) { + if (($curgrpidTime < $time) || ($grpcount == count($grouptime) && $value['nextup'] <= 0 && $showhighest == 1) || ($grpcount == count($grouptime) && $value['nextup'] == 0 && $adminlogin == 1)) { echo ''; if ($showcolrg == 1 || $adminlogin == 1) { if($value['except'] == 2 || $value['except'] == 3) { diff --git a/webinterface/core.php b/webinterface/core.php index 4b36551..ae2c80c 100644 --- a/webinterface/core.php +++ b/webinterface/core.php @@ -116,6 +116,8 @@ function getclientip() { $resetexcept = $_POST['resetexcept']; if (isset($_POST['resetbydbchange'])) $resetbydbchange = 1; else $resetbydbchange = 0; if (isset($_POST['cleanclients'])) $cleanclients = 1; else $cleanclients = 0; + if (isset($_POST['forceremovelowerranks'])) $forceremovelowerranks = 1; else $forceremovelowerranks = 0; + if (isset($_POST['keephigherranks'])) $keephigherranks = 1; else $keephigherranks = 0; $cleanperiod = $_POST['cleanperiod']; $boost = $_POST['boost']; if($_POST['registercid'] == NULL) { @@ -124,7 +126,7 @@ function getclientip() { $registercid = $_POST['registercid']; } if($errcnf == 0) { - if ($mysqlcon->exec("UPDATE `$dbname`.`config` SET `substridle`='$substridle',`exceptuuid`='$exceptuuid',`exceptgroup`='$exceptgroup',`exceptcid`='$exceptcid',`grouptime`='$grouptime',`ignoreidle`='$ignoreidle',`resetbydbchange`='$resetbydbchange',`cleanclients`='$cleanclients',`cleanperiod`='$cleanperiod',`boost`='$boost',`resetexcept`='$resetexcept',`registercid`='$registercid'") === false) { + if ($mysqlcon->exec("UPDATE `$dbname`.`config` SET `substridle`='$substridle',`exceptuuid`='$exceptuuid',`exceptgroup`='$exceptgroup',`exceptcid`='$exceptcid',`grouptime`='$grouptime',`ignoreidle`='$ignoreidle',`resetbydbchange`='$resetbydbchange',`cleanclients`='$cleanclients',`cleanperiod`='$cleanperiod',`boost`='$boost',`resetexcept`='$resetexcept',`registercid`='$registercid',`forceremovelowerranks`='$forceremovelowerranks',`keephigherranks`='$keephigherranks'") === false) { $err_msg = print_r($mysqlcon->errorInfo(), true); $err_lvl = 3; } else { @@ -215,6 +217,18 @@ function getclientip() {
+
+ +
+ data-size="mini" name="forceremovelowerranks" value=""> +
+
+
+ +
+ data-size="mini" name="keephigherranks" value=""> +
+
@@ -438,6 +452,38 @@ function getclientip() {
+ +