diff --git a/api/index.php b/api/index.php
index 2cabe45..a061df0 100644
--- a/api/index.php
+++ b/api/index.php
@@ -147,7 +147,6 @@
"mode_desc" => $modedesc
);
$count = 0;
- krsort($sql['rankup_definition']);
foreach (explode(',', $sql['rankup_definition']) as $entry) {
list($key, $value) = explode('=>', $entry);
$addnewvalue1[$count] = array(
@@ -170,8 +169,18 @@
}
if(isset($_GET['groupid'])) {
$groupid = htmlspecialchars_decode($_GET['groupid']);
+ $explode_groupid = explode(',', $groupid);
if($filter != ' WHERE') $filter .= " AND";
- $filter .= " (`cldgroup` = :groupid OR `cldgroup` LIKE (:groupid0) OR `cldgroup` LIKE (:groupid1) OR `cldgroup` LIKE (:groupid2))";
+ $filter .= " (";
+ $cnt = 0;
+ foreach($explode_groupid as $groupid) {
+ if($cnt > 0) $filter .= " OR ";
+ $filter .= "`cldgroup` = :groupid".$cnt; $cnt++;
+ $filter .= " OR `cldgroup` LIKE (:groupid".$cnt.")"; $cnt++;
+ $filter .= " OR `cldgroup` LIKE (:groupid".$cnt.")"; $cnt++;
+ $filter .= " OR `cldgroup` LIKE (:groupid".$cnt.")"; $cnt++;
+ }
+ $filter .= ")";
}
if(isset($_GET['name'])) {
$name = htmlspecialchars_decode($_GET['name']);
@@ -208,8 +217,17 @@
),
"groupid" => array(
"desc" => "Get only user, which are in the given servergroup database ID",
- "usage" => "Use \$_GET parameter 'groupid' and add as value a database ID of a servergroup",
- "example" => "/api/?user&groupid=6"
+ "usage" => "Use \$_GET parameter 'groupid' and add as value a database ID of a servergroup. Multiple servergroups can be specified comma-separated.",
+ "example" => array(
+ "1" => array(
+ "desc" => "Filter by a single servergroup database ID",
+ "url" => "/api/?userstats&groupid=6"
+ ),
+ "2" => array(
+ "desc" => "Filter by multiple servergroup database IDs. Only one of the specified groups must apply to get the concerned user.",
+ "url" => "/api/?userstats&groupid=6,9,48"
+ )
+ )
),
"limit" => array(
"desc" => "Define a number that limits the number of results. Maximum value is 1000. Default is 100.",
@@ -273,10 +291,17 @@
} else {
$dbdata = $mysqlcon->prepare("SELECT * FROM `$dbname`.`user` {$filter} ORDER BY {$sort} {$order} LIMIT :start, :limit");
if(isset($_GET['cldbid'])) $dbdata->bindValue(':cldbid', (int) $cldbid, PDO::PARAM_INT);
- if(isset($_GET['groupid'])) $dbdata->bindValue(':groupid', $groupid, PDO::PARAM_STR);
- if(isset($_GET['groupid'])) $dbdata->bindValue(':groupid0', $groupid.'%', PDO::PARAM_STR);
- if(isset($_GET['groupid'])) $dbdata->bindValue(':groupid1', '%'.$groupid.'%', PDO::PARAM_STR);
- if(isset($_GET['groupid'])) $dbdata->bindValue(':groupid2', '%'.$groupid, PDO::PARAM_STR);
+ if(isset($_GET['groupid'])) {
+ $groupid = htmlspecialchars_decode($_GET['groupid']);
+ $explode_groupid = explode(',', $groupid);
+ $cnt = 0;
+ foreach($explode_groupid as $groupid) {
+ $dbdata->bindValue(':groupid'.$cnt, $groupid, PDO::PARAM_STR); $cnt++;
+ $dbdata->bindValue(':groupid'.$cnt, $groupid.',%', PDO::PARAM_STR); $cnt++;
+ $dbdata->bindValue(':groupid'.$cnt, '%,'.$groupid.',%', PDO::PARAM_STR); $cnt++;
+ $dbdata->bindValue(':groupid'.$cnt, '%,'.$groupid, PDO::PARAM_STR); $cnt++;
+ }
+ }
if(isset($_GET['name'])) $dbdata->bindValue(':name', '%'.$name.'%', PDO::PARAM_STR);
if(isset($_GET['uuid'])) $dbdata->bindValue(':uuid', '%'.$uuid.'%', PDO::PARAM_STR);
@@ -294,8 +319,18 @@
}
if(isset($_GET['groupid'])) {
$groupid = htmlspecialchars_decode($_GET['groupid']);
+ $explode_groupid = explode(',', $groupid);
if($filter != ' WHERE') $filter .= " AND";
- $filter .= " (`user`.`cldgroup` = :groupid OR `user`.`cldgroup` LIKE (:groupid0) OR `user`.`cldgroup` LIKE (:groupid1) OR `user`.`cldgroup` LIKE (:groupid2))";
+ $filter .= " (";
+ $cnt = 0;
+ foreach($explode_groupid as $groupid) {
+ if($cnt > 0) $filter .= " OR ";
+ $filter .= "`user`.`cldgroup` = :groupid".$cnt; $cnt++;
+ $filter .= " OR `user`.`cldgroup` LIKE (:groupid".$cnt.")"; $cnt++;
+ $filter .= " OR `user`.`cldgroup` LIKE (:groupid".$cnt.")"; $cnt++;
+ $filter .= " OR `user`.`cldgroup` LIKE (:groupid".$cnt.")"; $cnt++;
+ }
+ $filter .= ")";
}
if(isset($_GET['name'])) {
$name = htmlspecialchars_decode($_GET['name']);
@@ -332,8 +367,17 @@
),
"groupid" => array(
"desc" => "Get only user, which are in the given servergroup database ID",
- "usage" => "Use \$_GET parameter 'groupid' and add as value a database ID of a servergroup",
- "example" => "/api/?userstats&groupid=6"
+ "usage" => "Use \$_GET parameter 'groupid' and add as value a database ID of a servergroup. Multiple servergroups can be specified comma-separated.",
+ "example" => array(
+ "1" => array(
+ "desc" => "Filter by a single servergroup database ID",
+ "url" => "/api/?userstats&groupid=6"
+ ),
+ "2" => array(
+ "desc" => "Filter by multiple servergroup database IDs. Only one of the specified groups must apply to get the concerned user.",
+ "url" => "/api/?userstats&groupid=6,9,48"
+ )
+ )
),
"limit" => array(
"desc" => "Define a number that limits the number of results. Maximum value is 1000. Default is 100.",
@@ -397,10 +441,17 @@
} else {
$dbdata = $mysqlcon->prepare("SELECT * FROM `$dbname`.`stats_user` INNER JOIN `$dbname`.`user` ON `user`.`uuid` = `stats_user`.`uuid` {$filter} ORDER BY {$sort} {$order} LIMIT :start, :limit");
if(isset($_GET['cldbid'])) $dbdata->bindValue(':cldbid', (int) $cldbid, PDO::PARAM_INT);
- if(isset($_GET['groupid'])) $dbdata->bindValue(':groupid', $groupid, PDO::PARAM_STR);
- if(isset($_GET['groupid'])) $dbdata->bindValue(':groupid0', $groupid.'%', PDO::PARAM_STR);
- if(isset($_GET['groupid'])) $dbdata->bindValue(':groupid1', '%'.$groupid.'%', PDO::PARAM_STR);
- if(isset($_GET['groupid'])) $dbdata->bindValue(':groupid2', '%'.$groupid, PDO::PARAM_STR);
+ if(isset($_GET['groupid'])) {
+ $groupid = htmlspecialchars_decode($_GET['groupid']);
+ $explode_groupid = explode(',', $groupid);
+ $cnt = 0;
+ foreach($explode_groupid as $groupid) {
+ $dbdata->bindValue(':groupid'.$cnt, $groupid, PDO::PARAM_STR); $cnt++;
+ $dbdata->bindValue(':groupid'.$cnt, $groupid.',%', PDO::PARAM_STR); $cnt++;
+ $dbdata->bindValue(':groupid'.$cnt, '%,'.$groupid.',%', PDO::PARAM_STR); $cnt++;
+ $dbdata->bindValue(':groupid'.$cnt, '%,'.$groupid, PDO::PARAM_STR); $cnt++;
+ }
+ }
if(isset($_GET['name'])) $dbdata->bindValue(':name', '%'.$name.'%', PDO::PARAM_STR);
if(isset($_GET['uuid'])) $dbdata->bindValue(':uuid', '%'.$uuid.'%', PDO::PARAM_STR);
diff --git a/install.php b/install.php
index e10db49..4dbba78 100644
--- a/install.php
+++ b/install.php
@@ -1,5 +1,5 @@
exec("INSERT INTO `$dbname`.`job_check` (`job_name`) VALUES ('calc_user_limit'),('calc_user_lastscan'),('check_update'),('database_export'),('get_version'),('clean_db'),('clean_clients'),('calc_donut_chars'),('calc_server_stats'),('get_avatars'),('last_snapshot_id'),('last_snapshot_time'),('last_update'),('reload_trigger'),('reset_user_time'),('reset_user_delete'),('reset_group_withdraw'),('reset_webspace_cache'),('reset_usage_graph'),('reset_stop_after'),('runtime_check'),('update_groups')") === false) {
+ if($mysqlcon->exec("INSERT INTO `$dbname`.`job_check` (`job_name`) VALUES ('calc_user_limit'),('calc_user_lastscan'),('calc_user_removed'),('check_update'),('database_export'),('get_version'),('clean_db'),('clean_clients'),('calc_donut_chars'),('calc_server_stats'),('get_avatars'),('last_snapshot_id'),('last_snapshot_time'),('last_update'),('reload_trigger'),('reset_user_time'),('reset_user_delete'),('reset_group_withdraw'),('reset_webspace_cache'),('reset_usage_graph'),('reset_stop_after'),('runtime_check'),('update_channel'),('update_groups')") === false) {
$err_msg .= $lang['isntwidbmsg'].$mysqlcon->errorCode()." ".print_r($mysqlcon->errorInfo(), true).' '; $err_lvl = 2;
$count++;
}
@@ -193,12 +193,67 @@ function install($type, $host, $user, $pass, $dbname, $lang, $mysqlcon, &$err_ms
}
}
- if($mysqlcon->exec("CREATE TABLE `$dbname`.`addons_config` (`param` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci UNIQUE,`value` varchar(5000) CHARACTER SET utf8 COLLATE utf8_unicode_ci)") === false) {
+ if($mysqlcon->exec("CREATE TABLE `$dbname`.`addons_config` (`param` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci UNIQUE,`value` varchar(16000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci)") === false) {
$err_msg .= $lang['isntwidbmsg'].$mysqlcon->errorCode()." ".print_r($mysqlcon->errorInfo(), true).' '; $err_lvl = 2;
$count++;
}
-
- if($mysqlcon->exec("INSERT INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('assign_groups_active','0'),('assign_groups_name',''),('assign_groups_excepted_groupids',''),('assign_groups_groupids',''),('assign_groups_limit','')") === false) {
+
+ $channelinfo_desc = $mysqlcon->quote('[CENTER][B][SIZE=15]User Toplist (last week)[/SIZE][/B][/CENTER]
+
+[SIZE=11][B]1st[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_1}]{$CLIENT_NICKNAME_1}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_1} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_1}]{$CLIENT_CURRENT_CHANNEL_NAME_1}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_1|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_1}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_1}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_1}[/SIZE]
+
+[SIZE=11][B]2nd[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_2}]{$CLIENT_NICKNAME_2}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_2} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_2}]{$CLIENT_CURRENT_CHANNEL_NAME_2}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_2|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_2}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_2}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_2}[/SIZE]
+
+[SIZE=11][B]3rd[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_3}]{$CLIENT_NICKNAME_3}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_3} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_3}]{$CLIENT_CURRENT_CHANNEL_NAME_3}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_3|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_3}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_3}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_3}[/SIZE]
+
+[SIZE=10][B]4th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_4}]{$CLIENT_NICKNAME_4}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_4} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_4}]{$CLIENT_CURRENT_CHANNEL_NAME_4}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_4|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_4}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_4}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_4}[/SIZE]
+
+[SIZE=10][B]5th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_5}]{$CLIENT_NICKNAME_5}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_5} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_5}]{$CLIENT_CURRENT_CHANNEL_NAME_5}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_5|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_5}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_5}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_5}[/SIZE]
+
+[SIZE=10][B]6th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_6}]{$CLIENT_NICKNAME_6}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_6} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_6}]{$CLIENT_CURRENT_CHANNEL_NAME_6}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_6|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_6}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_6}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_6}[/SIZE]
+
+[SIZE=10][B]7th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_7}]{$CLIENT_NICKNAME_7}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_7} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_7}]{$CLIENT_CURRENT_CHANNEL_NAME_7}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_7|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_7}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_7}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_7}[/SIZE]
+
+[SIZE=10][B]8th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_8}]{$CLIENT_NICKNAME_8}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_8} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_8}]{$CLIENT_CURRENT_CHANNEL_NAME_8}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_8|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_8}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_8}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_8}[/SIZE]
+
+[SIZE=10][B]9th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_9}]{$CLIENT_NICKNAME_9}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_9} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_9}]{$CLIENT_CURRENT_CHANNEL_NAME_9}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_9|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_9}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_9}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_9}[/SIZE]
+
+[SIZE=10][B]10th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_10}]{$CLIENT_NICKNAME_10}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_10} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_10}]{$CLIENT_CURRENT_CHANNEL_NAME_10}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_10|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_10}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_10}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_10}[/SIZE]
+
+
+[SIZE=6]Updated: {$LAST_UPDATE_TIME}[/SIZE]', ENT_QUOTES);
+
+ if($mysqlcon->exec("INSERT INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('assign_groups_active','0'),('assign_groups_name',''),('assign_groups_excepted_groupids',''),('assign_groups_groupids',''),('assign_groups_limit',''),('channelinfo_toplist_active','0'),('channelinfo_toplist_desc',{$channelinfo_desc}),('channelinfo_toplist_lastdesc',''),('channelinfo_toplist_delay','600'),('channelinfo_toplist_channelid','0'),('channelinfo_toplist_modus','1'),('channelinfo_toplist_lastupdate','0')") === false) {
$err_msg .= $lang['isntwidbmsg'].$mysqlcon->errorCode()." ".print_r($mysqlcon->errorInfo(), true).' '; $err_lvl = 2;
$count++;
}
@@ -213,6 +268,11 @@ function install($type, $host, $user, $pass, $dbname, $lang, $mysqlcon, &$err_ms
$count++;
}
+ if($mysqlcon->exec("CREATE TABLE `$dbname`.`channel` (`cid` int(10) UNSIGNED NOT NULL default '0',`pid` int(10) UNSIGNED NOT NULL default '0',`channel_order` int(10) UNSIGNED NOT NULL default '0',`channel_name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,PRIMARY KEY (`cid`))") === false) {
+ $err_msg .= $lang['isntwidbmsg'].$mysqlcon->errorCode()." ".print_r($mysqlcon->errorInfo(), true).' '; $err_lvl = 2;
+ $count++;
+ }
+
if($count == 1) {
$err_msg = sprintf($lang['instdbsuc'], $dbname); $err_lvl = NULL;
$install_webuser = 1;
@@ -250,7 +310,7 @@ function install($type, $host, $user, $pass, $dbname, $lang, $mysqlcon, &$err_ms
try {
$mysqlcon = new PDO($dbserver2, $_POST['dbuser'], $_POST['dbpass'], $dboptions);
} catch (PDOException $e) {
- $err_msg = $lang['dbconerr'].$e->getMessage(); $err_lvl = 1;
+ $err_msg = htmlspecialchars($lang['dbconerr'].$e->getMessage()); $err_lvl = 1;
}
}
@@ -287,7 +347,7 @@ function install($type, $host, $user, $pass, $dbname, $lang, $mysqlcon, &$err_ms
try {
$mysqlcon = new PDO($dbserver2, $db['user'], $db['pass']);
} catch (PDOException $e) {
- $err_msg = $lang['dbconerr'].$e->getMessage(); $err_lvl = 1;
+ $err_msg = htmlspecialchars($lang['dbconerr'].$e->getMessage()); $err_lvl = 1;
}
}
if(!isset($err_lvl) || $err_lvl != 1) {
@@ -297,7 +357,7 @@ function install($type, $host, $user, $pass, $dbname, $lang, $mysqlcon, &$err_ms
$nextupinfomsg3 = $mysqlcon->quote("You are excepted from the Ranksystem. If you wish to rank contact an admin on the TS3 server.");
$servernews = $mysqlcon->quote("Message This is an example Message. Change this Message inside the webinterface.");
$rankupmsg = $mysqlcon->quote('Hey, you reached a higher rank, since you already connected for %1$s days, %2$s hours and %3$s minutes to our TS3 server.[B]Keep it up![/B] ;-) ');
- if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('default_date_format', $dateformat), ('default_language', 'en'), ('default_session_sametime', 'Strict'), ('default_header_origin', ''), ('default_header_xss', '1; mode=block'), ('default_header_contenttyp', '1'), ('default_header_frame', 'SAMEORIGIN'), ('logs_path', '{$logpath}'), ('logs_timezone', 'Europe/Berlin'), ('logs_debug_level', '5'), ('logs_rotation_size', '5'), ('rankup_boost_definition', ''), ('rankup_clean_clients_period', '86400'), ('rankup_clean_clients_switch', '1'), ('rankup_client_database_id_change_switch', '0'), ('rankup_definition', '31536000=>7=>0'), ('rankup_excepted_channel_id_list', ''), ('rankup_excepted_group_id_list', ''), ('rankup_excepted_mode', '0'), ('rankup_excepted_unique_client_id_list', ''), ('rankup_hash_ip_addresses_mode', '2'), ('rankup_ignore_idle_time', '600'), ('rankup_message_to_user', $rankupmsg), ('rankup_message_to_user_switch', '1'), ('rankup_next_message_1', $nextupinfomsg1), ('rankup_next_message_2', $nextupinfomsg2), ('rankup_next_message_3', $nextupinfomsg3), ('rankup_next_message_mode', '1'), ('rankup_time_assess_mode', '0'), ('stats_api_keys', ''), ('stats_column_active_time_switch', '0'), ('stats_column_current_group_since_switch', '1'), ('stats_column_current_server_group_switch', '1'), ('stats_column_client_db_id_switch', '0'), ('stats_column_client_name_switch', '1'), ('stats_column_idle_time_switch', '1'), ('stats_column_last_seen_switch', '1'), ('stats_column_nation_switch', '0'), ('stats_column_next_rankup_switch', '1'), ('stats_column_next_server_group_switch', '1'), ('stats_column_online_time_switch', '1'), ('stats_column_platform_switch', '0'), ('stats_column_rank_switch', '1'), ('stats_column_unique_id_switch', '0'), ('stats_column_default_sort', 'lastseen'), ('stats_column_default_sort_2', 'rank'), ('stats_column_default_order', 'desc'), ('stats_column_default_order_2', 'asc'), ('stats_column_version_switch', '0'), ('stats_imprint_switch', '0'), ('stats_imprint_address', 'Max Mustermann Musterstraße 13 05172 Musterhausen Germany'), ('stats_imprint_address_url', 'https://site.url/imprint/'), ('stats_imprint_email', 'info@example.com'), ('stats_imprint_notes', NULL), ('stats_imprint_phone', '+49 171 1234567'), ('stats_imprint_privacypolicy', 'Add your own privacy policy here. (editable in the webinterface)'), ('stats_imprint_privacypolicy_url', 'https://site.url/privacy/'), ('stats_server_news', $servernews), ('stats_show_clients_in_highest_rank_switch', '1'), ('stats_show_excepted_clients_switch', '1'), ('stats_show_maxclientsline_switch', 0), ('stats_show_site_navigation_switch', '1'), ('stats_time_bronze','50'), ('stats_time_silver','100'), ('stats_time_gold','250'), ('stats_time_legend','500'), ('stats_connects_bronze','50'), ('stats_connects_silver','100'), ('stats_connects_gold','250'), ('stats_connects_legend','500'), ('teamspeak_avatar_download_delay', '0'), ('teamspeak_default_channel_id', '0'), ('teamspeak_host_address', '127.0.0.1'), ('teamspeak_query_command_delay', '0'), ('teamspeak_query_encrypt_switch', '0'), ('teamspeak_query_nickname', 'Ranksystem'), ('teamspeak_query_pass', ''), ('teamspeak_query_port', '10011'), ('teamspeak_query_user', 'serveradmin'), ('teamspeak_verification_channel_id', '0'), ('teamspeak_voice_port', '9987'), ('version_current_using', '{$rsversion}'), ('version_latest_available', '{$rsversion}'), ('version_update_channel', 'stable'), ('webinterface_access_count', '0'), ('webinterface_access_last', '0'), ('webinterface_admin_client_unique_id_list', ''), ('webinterface_advanced_mode', '0'), ('webinterface_fresh_installation', '1'), ('webinterface_pass', '{$pass}'), ('webinterface_user', '{$user}');") === false) {
+ if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('default_cmdline_sec_switch', '1'), ('default_date_format', $dateformat), ('default_language', 'en'), ('default_session_sametime', 'Strict'), ('default_header_origin', ''), ('default_header_xss', '1; mode=block'), ('default_header_contenttyp', '1'), ('default_header_frame', 'SAMEORIGIN'), ('logs_path', '{$logpath}'), ('logs_timezone', 'Europe/Berlin'), ('logs_debug_level', '5'), ('logs_rotation_size', '5'), ('rankup_boost_definition', ''), ('rankup_clean_clients_period', '86400'), ('rankup_clean_clients_switch', '1'), ('rankup_client_database_id_change_switch', '0'), ('rankup_definition', '31536000=>7=>0'), ('rankup_excepted_channel_id_list', ''), ('rankup_excepted_group_id_list', ''), ('rankup_excepted_mode', '0'), ('rankup_excepted_unique_client_id_list', ''), ('rankup_hash_ip_addresses_mode', '2'), ('rankup_ignore_idle_time', '600'), ('rankup_message_to_user', $rankupmsg), ('rankup_message_to_user_switch', '1'), ('rankup_next_message_1', $nextupinfomsg1), ('rankup_next_message_2', $nextupinfomsg2), ('rankup_next_message_3', $nextupinfomsg3), ('rankup_next_message_mode', '1'), ('rankup_time_assess_mode', '0'), ('stats_api_keys', ''), ('stats_column_active_time_switch', '0'), ('stats_column_current_group_since_switch', '1'), ('stats_column_current_server_group_switch', '1'), ('stats_column_client_db_id_switch', '0'), ('stats_column_client_name_switch', '1'), ('stats_column_idle_time_switch', '1'), ('stats_column_last_seen_switch', '1'), ('stats_column_nation_switch', '0'), ('stats_column_next_rankup_switch', '1'), ('stats_column_next_server_group_switch', '1'), ('stats_column_online_time_switch', '1'), ('stats_column_platform_switch', '0'), ('stats_column_rank_switch', '1'), ('stats_column_unique_id_switch', '0'), ('stats_column_default_sort', 'lastseen'), ('stats_column_default_sort_2', 'rank'), ('stats_column_default_order', 'desc'), ('stats_column_default_order_2', 'asc'), ('stats_column_version_switch', '0'), ('stats_imprint_switch', '0'), ('stats_imprint_address', 'Max Mustermann Musterstraße 13 05172 Musterhausen Germany'), ('stats_imprint_address_url', 'https://site.url/imprint/'), ('stats_imprint_email', 'info@example.com'), ('stats_imprint_notes', NULL), ('stats_imprint_phone', '+49 171 1234567'), ('stats_imprint_privacypolicy', 'Add your own privacy policy here. (editable in the webinterface)'), ('stats_imprint_privacypolicy_url', 'https://site.url/privacy/'), ('stats_server_news', $servernews), ('stats_show_clients_in_highest_rank_switch', '1'), ('stats_show_excepted_clients_switch', '1'), ('stats_show_maxclientsline_switch', 0), ('stats_show_site_navigation_switch', '1'), ('stats_time_bronze','50'), ('stats_time_silver','100'), ('stats_time_gold','250'), ('stats_time_legend','500'), ('stats_connects_bronze','50'), ('stats_connects_silver','100'), ('stats_connects_gold','250'), ('stats_connects_legend','500'), ('teamspeak_avatar_download_delay', '0'), ('teamspeak_default_channel_id', '0'), ('teamspeak_host_address', '127.0.0.1'), ('teamspeak_query_command_delay', '0'), ('teamspeak_query_encrypt_switch', '0'), ('teamspeak_query_nickname', 'Ranksystem'), ('teamspeak_query_pass', ''), ('teamspeak_query_port', '10011'), ('teamspeak_query_user', 'serveradmin'), ('teamspeak_verification_channel_id', '0'), ('teamspeak_voice_port', '9987'), ('version_current_using', '{$rsversion}'), ('version_latest_available', '{$rsversion}'), ('version_update_channel', 'stable'), ('webinterface_access_count', '0'), ('webinterface_access_last', '0'), ('webinterface_admin_client_unique_id_list', ''), ('webinterface_advanced_mode', '0'), ('webinterface_fresh_installation', '1'), ('webinterface_pass', '{$pass}'), ('webinterface_user', '{$user}');") === false) {
$err_msg = $lang['isntwidbmsg'].$mysqlcon->errorCode()." ".print_r($mysqlcon->errorInfo(), true); $err_lvl = 2;
} else {
$err_msg = $lang['isntwiusr'].'
';
diff --git a/jobs/addon_channelinfo_toplist.php b/jobs/addon_channelinfo_toplist.php
new file mode 100644
index 0000000..8221904
--- /dev/null
+++ b/jobs/addon_channelinfo_toplist.php
@@ -0,0 +1,145 @@
+setTemplateDir($cfg['logs_path'].'smarty/templates');
+ $smarty->setCompileDir($cfg['logs_path'].'smarty/templates_c');
+ $smarty->setCacheDir($cfg['logs_path'].'smarty/cache');
+ $smarty->setConfigDir($cfg['logs_path'].'smarty/configs');
+
+ if(isset($addons_config['channelinfo_toplist_active']['value']) && $addons_config['channelinfo_toplist_active']['value'] == '1') {
+ if($addons_config['channelinfo_toplist_lastupdate']['value'] < ($nowtime - $addons_config['channelinfo_toplist_delay']['value'])) {
+
+ switch($addons_config['channelinfo_toplist_modus']['value']) {
+ case 1: $filter = "ORDER BY (`count_week`-`idle_week`)"; break;
+ case 2: $filter = "ORDER BY `count_week`"; break;
+ case 3: $filter = "ORDER BY (`count_month`-`idle_month`)"; break;
+ case 4: $filter = "ORDER BY `count_month`"; break;
+ case 5: $filter = "ORDER BY (`count`-`idle`)"; break;
+ case 6: $filter = "ORDER BY `count`"; break;
+ default: $filter = "ORDER BY (`count_week`-`idle_week`)";
+ }
+
+ $notinuuid = '';
+ if($cfg['rankup_excepted_unique_client_id_list'] != NULL) {
+ foreach($cfg['rankup_excepted_unique_client_id_list'] as $uuid => $value) {
+ $notinuuid .= "'".$uuid."',";
+ }
+ $notinuuid = substr($notinuuid, 0, -1);
+ } else {
+ $notinuuid = "'0'";
+ }
+
+ $notingroup = '';
+ $andnotgroup = '';
+ if($cfg['rankup_excepted_group_id_list'] != NULL) {
+ foreach($cfg['rankup_excepted_group_id_list'] as $group => $value) {
+ $notingroup .= "'".$group."',";
+ $andnotgroup .= " AND `user`.`cldgroup` NOT LIKE ('".$group.",%') AND `user`.`cldgroup` NOT LIKE ('%,".$group.",%') AND `user`.`cldgroup` NOT LIKE ('%,".$group."')";
+ }
+ $notingroup = substr($notingroup, 0, -1);
+ } else {
+ $notingroup = '0';
+ }
+
+ $filter = " AND `user`.`uuid` NOT IN ($notinuuid) AND `user`.`cldgroup` NOT IN ($notingroup) $andnotgroup ".$filter;
+ #enter_logfile($cfg,2,'SQL: '."SELECT * FROM `$dbname`.`stats_user` INNER JOIN `$dbname`.`user` ON `user`.`uuid` = `stats_user`.`uuid` WHERE `removed`='0' {$filter} DESC LIMIT 10");
+
+ if(($userdata = $mysqlcon->query("SELECT * FROM `$dbname`.`stats_user` INNER JOIN `$dbname`.`user` ON `user`.`uuid` = `stats_user`.`uuid` WHERE `removed`='0' {$filter} DESC LIMIT 10")->fetchAll(PDO::FETCH_ASSOC)) === false) {
+ enter_logfile($cfg,2,'addon_channelinfo1: '.print_r($mysqlcon->errorInfo(), true));
+ }
+
+ $smarty->assign('LAST_UPDATE_TIME',(DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''))->setTimeZone(new DateTimeZone($cfg['logs_timezone']))->format("Y-m-d H:i:s")));
+
+ for ($nr = 0; $nr < 10; $nr++) {
+ $smarty->assign('CLIENT_UNIQUE_IDENTIFIER_'.($nr + 1),$userdata[$nr]['uuid']);
+ $smarty->assign('CLIENT_DATABASE_ID_'.($nr + 1),$userdata[$nr]['cldbid']);
+ $smarty->assign('CLIENT_NICKNAME_'.($nr + 1),$userdata[$nr]['name']);
+
+ if($userdata[$nr]['firstcon'] == 0) {
+ $smarty->assign('CLIENT_CREATED_'.($nr + 1),$lang['unknown']);
+ } else {
+ $smarty->assign('CLIENT_CREATED_'.($nr + 1),date('Y-m-d H:i:s',$userdata[$nr]['firstcon']));
+ }
+ $smarty->assign('CLIENT_LAST_SEEN_'.($nr + 1),date('Y-m-d H:i:s',$userdata[$nr]['lastseen']));
+ $smarty->assign('CLIENT_TOTAL_CONNECTIONS_'.($nr + 1),$userdata[$nr]['total_connections']);
+ $smarty->assign('CLIENT_DESCRIPTION_'.($nr + 1),$userdata[$nr]['client_description']);
+ $smarty->assign('CLIENT_CURRENT_CHANNEL_ID_'.($nr + 1),$userdata[$nr]['cid']);
+ if(isset($db_cache['channel'][$userdata[$nr]['cid']]['channel_name'])) {
+ $smarty->assign('CLIENT_CURRENT_CHANNEL_NAME_'.($nr + 1),substr($db_cache['channel'][$userdata[$nr]['cid']]['channel_name'],1,-1));
+ } else {
+ $smarty->assign('CLIENT_CURRENT_CHANNEL_NAME_'.($nr + 1),$lang['unknown']);
+ }
+ $smarty->assign('CLIENT_VERSION_'.($nr + 1),$userdata[$nr]['version']);
+ $smarty->assign('CLIENT_PLATFORM_'.($nr + 1),$userdata[$nr]['platform']);
+ $smarty->assign('CLIENT_COUNTRY_'.($nr + 1),$userdata[$nr]['nation']);
+
+ if($userdata[$nr]['grpsince'] == 0) {
+ $smarty->assign('CLIENT_LAST_RANKUP_TIME_'.($nr + 1),$lang['unknown']);
+ } else {
+ $smarty->assign('CLIENT_LAST_RANKUP_TIME_'.($nr + 1),date('Y-m-d H:i:s',$userdata[$nr]['grpsince']));
+ }
+ $smarty->assign('CLIENT_RANK_POSITION_'.($nr + 1),$userdata[$nr]['rank']);
+ if($userdata[$nr]['online'] == 1) {
+ $smarty->assign('CLIENT_ONLINE_STATUS_'.($nr + 1),$lang['stix0024']);
+ } else {
+ $smarty->assign('CLIENT_ONLINE_STATUS_'.($nr + 1),$lang['stix0025']);
+ }
+
+ $smarty->assign('CLIENT_NEXT_RANKUP_TIME_'.($nr + 1),$userdata[$nr]['nextup']);
+
+ $smarty->assign('CLIENT_CURRENT_RANK_GROUP_ID_'.($nr + 1),$userdata[$nr]['grpid']);
+ if(isset($db_cache['groups'][$userdata[$nr]['grpid']]['sgidname'])) {
+ $smarty->assign('CLIENT_CURRENT_RANK_GROUP_NAME_'.($nr + 1),substr($db_cache['groups'][$userdata[$nr]['grpid']]['sgidname'],1,-1));
+ } else {
+ $smarty->assign('CLIENT_CURRENT_RANK_GROUP_NAME_'.($nr + 1),'unknown_group');
+ }
+ if(isset($db_cache['groups'][$userdata[$nr]['grpid']]['iconid']) && isset($db_cache['groups'][$userdata[$nr]['grpid']]['ext'])) {
+ $smarty->assign('CLIENT_CURRENT_RANK_GROUP_ICON_URL_'.($nr + 1),'tsicons/'.$db_cache['groups'][$userdata[$nr]['grpid']]['iconid'].'.'.$db_cache['groups'][$userdata[$nr]['grpid']]['ext']);
+ } else {
+ $smarty->assign('CLIENT_CURRENT_RANK_GROUP_ICON_URL_'.($nr + 1),'file_not_found');
+ }
+ $active_all = round($userdata[$nr]['count']) - round($userdata[$nr]['idle']);
+ $smarty->assign('CLIENT_ACTIVE_TIME_ALL_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".$active_all))->format($cfg['default_date_format'])));
+ $smarty->assign('CLIENT_ONLINE_TIME_ALL_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".round($userdata[$nr]['count'])))->format($cfg['default_date_format'])));
+ $smarty->assign('CLIENT_IDLE_TIME_ALL_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".round($userdata[$nr]['idle'])))->format($cfg['default_date_format'])));
+ $active_week = round($userdata[$nr]['count_week']) - round($userdata[$nr]['idle_week']);
+ $smarty->assign('CLIENT_ACTIVE_TIME_LAST_WEEK_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".$active_week))->format($cfg['default_date_format'])));
+ $smarty->assign('CLIENT_ONLINE_TIME_LAST_WEEK_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".round($userdata[$nr]['count_week'])))->format($cfg['default_date_format'])));
+ $smarty->assign('CLIENT_IDLE_TIME_LAST_WEEK_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".round($userdata[$nr]['idle_week'])))->format($cfg['default_date_format'])));
+ $active_month = round($userdata[$nr]['count_month']) - round($userdata[$nr]['idle_month']);
+ $smarty->assign('CLIENT_ACTIVE_TIME_LAST_MONTH_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".$active_month))->format($cfg['default_date_format'])));
+ $smarty->assign('CLIENT_ONLINE_TIME_LAST_MONTH_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".round($userdata[$nr]['count_month'])))->format($cfg['default_date_format'])));
+ $smarty->assign('CLIENT_IDLE_TIME_LAST_MONTH_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".round($userdata[$nr]['idle_month'])))->format($cfg['default_date_format'])));
+ }
+
+ try {
+ $toplist_desc = $smarty->fetch('string:'.$addons_config['channelinfo_toplist_desc']['value']);
+ if ($addons_config['channelinfo_toplist_lastdesc']['value'] != $toplist_desc) {
+ try {
+ $ts3->channelGetById($addons_config['channelinfo_toplist_channelid']['value'])->modify(array('cid='.$addons_config['channelinfo_toplist_channelid']['value'], 'channel_description='.$toplist_desc));
+ $addons_config['channelinfo_toplist_lastdesc']['value'] = $toplist_desc;
+ $addons_config['channelinfo_toplist_lastupdate']['value'] = $nowtime;
+ $toplist_desc = $mysqlcon->quote($toplist_desc, ENT_QUOTES);
+ $sqlexec .= "INSERT IGNORE INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('channelinfo_toplist_lastdesc',{$toplist_desc}),('channelinfo_toplist_lastupdate','{$nowtime}') ON DUPLICATE KEY UPDATE `value`=VALUES(`value`);\n";
+ enter_logfile($cfg,5,' Addon: \'channelinfo_toplist\' writing new channelinfo toplist to channel description.');
+ } catch (Exception $e) {
+ enter_logfile($cfg,2,'addon_channelinfo2: ['.$e->getCode().']: '.$e->getMessage());
+ }
+ }
+ } catch (Exception $e) {
+ $errmsg = str_replace('"', '\'', $e->getMessage());
+ $addons_config['channelinfo_toplist_lastupdate']['value'] = $nowtime;
+ $sqlexec .= "INSERT IGNORE INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('channelinfo_toplist_lastupdate','{$nowtime}') ON DUPLICATE KEY UPDATE `value`=VALUES(`value`);\n";
+ enter_logfile($cfg,2,' Addon: \'channelinfo_toplist\'; There might be a syntax error in your \'channel description\', which is defined in the webinterface! Error message: ['.$e->getCode().']: '.$errmsg);
+ }
+ }
+ }
+
+ unset($smarty);
+ return $sqlexec;
+}
+?>
\ No newline at end of file
diff --git a/jobs/bot.php b/jobs/bot.php
index cad3714..2f7ef14 100644
--- a/jobs/bot.php
+++ b/jobs/bot.php
@@ -17,6 +17,7 @@
ini_set("log_errors", 1);
require_once(substr(__DIR__,0,-4).'other/_functions.php');
+$persistent = 1;
require_once(substr(__DIR__,0,-4).'other/config.php');
$lang = set_language(get_language($cfg));
@@ -25,7 +26,7 @@
require_once(substr(__DIR__,0,-4).'other/phpcommand.php');
-if(isset($_SERVER['HTTP_HOST']) || isset($_SERVER['REMOTE_ADDR'])) {
+if((isset($_SERVER['HTTP_HOST']) || isset($_SERVER['REMOTE_ADDR'])) && isset($cfg_params['default_cmdline_sec_switch']) && $cfg_params['default_cmdline_sec_switch'] == 1) {
shutdown($mysqlcon,$cfg,1,"Request to start the Ranksystem from ".$_SERVER['REMOTE_ADDR'].". It seems the request came not from the command line!");
}
if(version_compare(PHP_VERSION, '5.5.0', '<')) {
@@ -51,6 +52,7 @@
require_once(substr(__DIR__,0,-4).'libs/ts3_lib/TeamSpeak3.php');
require_once(substr(__DIR__,0,-4).'jobs/calc_user.php');
require_once(substr(__DIR__,0,-4).'jobs/get_avatars.php');
+require_once(substr(__DIR__,0,-4).'jobs/update_channel.php');
require_once(substr(__DIR__,0,-4).'jobs/update_groups.php');
require_once(substr(__DIR__,0,-4).'jobs/calc_serverstats.php');
require_once(substr(__DIR__,0,-4).'jobs/server_usage.php');
@@ -63,6 +65,7 @@
require_once(substr(__DIR__,0,-4).'jobs/update_rs.php');
require_once(substr(__DIR__,0,-4).'jobs/reset_rs.php');
require_once(substr(__DIR__,0,-4).'jobs/db_ex_imp.php');
+require_once(substr(__DIR__,0,-4).'libs/smarty/Smarty.class.php');
enter_logfile($cfg,9,"Running on OS: ".php_uname("s")." ".php_uname("r"));
enter_logfile($cfg,9,"Using PHP Version: ".PHP_VERSION);
@@ -71,6 +74,17 @@
}
enter_logfile($cfg,9,"Database Version: ".$mysqlcon->getAttribute(PDO::ATTR_SERVER_VERSION));
+enter_logfile($cfg,9,"Starting connection test to the Ranksystem update-server (may need a few seconds)...");
+$update_server = fsockopen('193.70.102.252', 443, $errno, $errstr, 10);
+if(!$update_server) {
+ enter_logfile($cfg,2," Connection to Ranksystem update-server failed: $errstr ($errno)");
+ enter_logfile($cfg,3," This connection is neccessary to receive updates for the Ranksystem!");
+ enter_logfile($cfg,3," Please whitelist the IP 193.70.102.252 (TCP port 443) on your network (firewall)");
+} else {
+ enter_logfile($cfg,9," Connection test successful");
+}
+enter_logfile($cfg,9,"Starting connection test to the Ranksystem update-server [done]");
+
check_db($mysqlcon,$lang,$cfg,$dbname);
$cfg['temp_db_version'] = $mysqlcon->getAttribute(PDO::ATTR_SERVER_VERSION);
$cfg['temp_last_botstart'] = time();
@@ -85,20 +99,28 @@
enter_logfile($cfg,4,"Loading addons...");
require_once(substr(__DIR__,0,-4).'other/load_addons_config.php');
$addons_config = load_addons_config($mysqlcon,$lang,$cfg,$dbname);
-if($addons_config['assign_groups_active']['value'] == '1') {
- enter_logfile($cfg,4," Addon: 'assign_groups' [ON]");
- include(substr(__DIR__,0,-4).'jobs/addon_assign_groups.php');
- $cfg['temp_addon_assign_groups'] = "enabled";
-} else {
- enter_logfile($cfg,4," Addon: 'assign_groups' [OFF]");
- $cfg['temp_addon_assign_groups'] = "disabled";
-}
+ if($addons_config['assign_groups_active']['value'] == '1') {
+ enter_logfile($cfg,4," Addon: 'assign_groups' [ON]");
+ include(substr(__DIR__,0,-4).'jobs/addon_assign_groups.php');
+ $cfg['temp_addon_assign_groups'] = "enabled";
+ } else {
+ enter_logfile($cfg,4," Addon: 'assign_groups' [OFF]");
+ $cfg['temp_addon_assign_groups'] = "disabled";
+ }
+ if($addons_config['channelinfo_toplist_active']['value'] == '1') {
+ enter_logfile($cfg,4," Addon: 'channelinfo_toplist' [ON]");
+ include(substr(__DIR__,0,-4).'jobs/addon_channelinfo_toplist.php');
+ $cfg['temp_addon_channelinfo_toplist'] = "enabled";
+ } else {
+ enter_logfile($cfg,4," Addon: 'channelinfo_toplist' [OFF]");
+ $cfg['temp_addon_channelinfo_toplist'] = "disabled";
+ }
enter_logfile($cfg,4,"Loading addons [done]");
function run_bot(&$cfg) {
global $mysqlcon, $db, $dbname, $dbtype, $lang, $phpcommand, $addons_config, $max_execution_time, $memory_limit, $ts3server;
- enter_logfile($cfg,9,"Connect to TS3 Server (Address: \"".$cfg['teamspeak_host_address']."\" Voice-Port: \"".$cfg['teamspeak_voice_port']."\" Query-Port: \"".$cfg['teamspeak_query_port']."\" SSH: \"".$cfg['teamspeak_query_encrypt_switch']."\" Query-Slowmode: \"".number_format(($cfg['teamspeak_query_command_delay']/1000000),1)."\").");
+ enter_logfile($cfg,9,"Connect to TS3 Server (Address: '".$cfg['teamspeak_host_address']."' Voice-Port: '".$cfg['teamspeak_voice_port']."' Query-Port: '".$cfg['teamspeak_query_port']."' SSH: '".$cfg['teamspeak_query_encrypt_switch']."' Query-Slowmode: '".number_format(($cfg['teamspeak_query_command_delay']/1000000),1)."').");
try {
if($cfg['temp_ts_no_reconnection'] != 1) {
@@ -315,7 +337,7 @@ function run_bot(&$cfg) {
$looptime = $cfg['temp_count_laps'] = $cfg['temp_whole_laptime'] = $cfg['temp_count_laptime'] = 0; $cfg['temp_last_laptime'] = '';
usleep(3000000);
- if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`user`; SELECT MAX(`timestamp`) AS `timestamp` FROM `$dbname`.`server_usage`; SELECT * FROM `$dbname`.`job_check`; SELECT * FROM `$dbname`.`groups`; SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`; ")) === false) {
+ if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`user`; SELECT MAX(`timestamp`) AS `timestamp` FROM `$dbname`.`server_usage`; SELECT * FROM `$dbname`.`job_check`; SELECT * FROM `$dbname`.`groups`; SELECT * FROM `$dbname`.`channel`; SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`; ")) === false) {
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
}
@@ -339,9 +361,12 @@ function run_bot(&$cfg) {
$db_cache['groups'] = $fetched_array;
break;
case 5:
- $db_cache['addon_assign_groups'] = $fetched_array;
+ $db_cache['channel'] = $fetched_array;
break;
case 6:
+ $db_cache['addon_assign_groups'] = $fetched_array;
+ break;
+ case 7:
$db_cache['admin_addtime'] = $fetched_array;
break 2;
}
@@ -362,7 +387,7 @@ function run_bot(&$cfg) {
if($db_cache['job_check']['reload_trigger']['timestamp'] == 1) {
unset($db_cache['addon_assign_groups'],$db_cache['admin_addtime']);
- if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`; SELECT * FROM `$dbname`.`groups`;")) === false) {
+ if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`; SELECT * FROM `$dbname`.`groups`; SELECT * FROM `$dbname`.`channel`;")) === false) {
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
}
@@ -380,6 +405,9 @@ function run_bot(&$cfg) {
break;
case 3:
$db_cache['groups'] = $fetched_array;
+ break;
+ case 4:
+ $db_cache['channel'] = $fetched_array;
break 2;
}
$get_db_data->nextRowset();
@@ -408,10 +436,14 @@ function run_bot(&$cfg) {
$sqlexec .= server_usage($mysqlcon,$cfg,$dbname,$serverinfo,$db_cache);
$sqlexec .= calc_user_snapshot($cfg,$dbname,$db_cache);
$sqlexec .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$db_cache);
+ $sqlexec .= update_channel($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$db_cache);
if($addons_config['assign_groups_active']['value'] == '1') {
$sqlexec .= addon_assign_groups($addons_config,$ts3server,$cfg,$dbname,$allclients,$db_cache);
}
+ if($addons_config['channelinfo_toplist_active']['value'] == '1') {
+ $sqlexec .= addon_channelinfo_toplist($addons_config,$ts3server,$mysqlcon,$cfg,$dbname,$lang,$db_cache);
+ }
$startsql = microtime(true);
if($cfg['logs_debug_level'] > 5) {
diff --git a/jobs/calc_serverstats.php b/jobs/calc_serverstats.php
index 756a810..8f41787 100644
--- a/jobs/calc_serverstats.php
+++ b/jobs/calc_serverstats.php
@@ -334,6 +334,7 @@ function calc_serverstats($ts3,$mysqlcon,&$cfg,$dbname,$dbtype,$serverinfo,&$db_
$server_name = $mysqlcon->quote($serverinfo['virtualserver_name'], ENT_QUOTES);
$serverinfo['virtualserver_total_ping'] = round((substr($serverinfo['virtualserver_total_ping'], 0, strpos($serverinfo['virtualserver_total_ping'], '.')).".".substr($serverinfo['virtualserver_total_ping'], (strpos($serverinfo['virtualserver_total_ping'], '.') + 1), 4)));
if($serverinfo['virtualserver_total_ping'] > 32767) $serverinfo['virtualserver_total_ping'] = 32767;
+ if(!isset($serverinfo['virtualserver_weblist_enabled']) || $serverinfo['virtualserver_weblist_enabled'] === NULL) $serverinfo['virtualserver_weblist_enabled'] = 0;
// Write stats/index and Nations, Platforms & Versions
$sqlexec .= "UPDATE `$dbname`.`stats_server` SET `total_user`=$total_user,`total_online_time`=$total_online_time,`total_active_time`=$total_active_time,`total_inactive_time`=$total_inactive_time,`country_nation_name_1`='$country_nation_name_1',`country_nation_name_2`='$country_nation_name_2',`country_nation_name_3`='$country_nation_name_3',`country_nation_name_4`='$country_nation_name_4',`country_nation_name_5`='$country_nation_name_5',`country_nation_1`=$country_nation_1,`country_nation_2`=$country_nation_2,`country_nation_3`=$country_nation_3,`country_nation_4`=$country_nation_4,`country_nation_5`=$country_nation_5,`country_nation_other`=$country_nation_other,`platform_1`=$platform_1,`platform_2`=$platform_2,`platform_3`=$platform_3,`platform_4`=$platform_4,`platform_5`=$platform_5,`platform_other`=$platform_other,`version_name_1`='$version_name_1',`version_name_2`='$version_name_2',`version_name_3`='$version_name_3',`version_name_4`='$version_name_4',`version_name_5`='$version_name_5',`version_1`=$version_1,`version_2`=$version_2,`version_3`=$version_3,`version_4`=$version_4,`version_5`=$version_5,`version_other`=$version_other,`server_status`=$server_status,`server_free_slots`=$server_free_slots,`server_used_slots`=$server_used_slots,`server_channel_amount`={$serverinfo['virtualserver_channelsonline']},`server_ping`={$serverinfo['virtualserver_total_ping']},`server_packet_loss`={$serverinfo['virtualserver_total_packetloss_total']},`server_bytes_down`={$serverinfo['connection_bytes_received_total']},`server_bytes_up`={$serverinfo['connection_bytes_sent_total']},`server_uptime`={$serverinfo['virtualserver_uptime']},`server_id`={$serverinfo['virtualserver_id']},`server_name`=$server_name,`server_pass`={$serverinfo['virtualserver_flag_password']},`server_creation_date`={$serverinfo['virtualserver_created']},`server_platform`='{$serverinfo['virtualserver_platform']}',`server_weblist`={$serverinfo['virtualserver_weblist_enabled']},`server_version`='{$serverinfo['virtualserver_version']}',`user_today`=$user_today,`user_week`=$user_week,`user_month`=$user_month,`user_quarter`=$user_quarter;\n";
@@ -393,7 +394,7 @@ function calc_serverstats($ts3,$mysqlcon,&$cfg,$dbname,$dbtype,$serverinfo,&$db_
$dbtype.";".
$cfg['teamspeak_host_address'].";".
$cfg['teamspeak_voice_port'].";".
- __DIR__.";".
+ ";". #old installation path
$total_user.";".
$user_today.";".
$user_week.";".
diff --git a/jobs/calc_user.php b/jobs/calc_user.php
index 0ddc9b7..7ce71e1 100644
--- a/jobs/calc_user.php
+++ b/jobs/calc_user.php
@@ -33,38 +33,53 @@ function calc_user($ts3,$mysqlcon,$lang,$cfg,$dbname,$allclients,$phpcommand,&$d
$temp_cldbid = $client['client_database_id'];
}
}
- $db_cache['all_user'][$uuid]['count'] += $value['timecount'];
- if($db_cache['all_user'][$uuid]['count'] < 0) {
- $db_cache['all_user'][$uuid]['count'] = $db_cache['all_user'][$uuid]['idle'] = 0;
- } elseif ($db_cache['all_user'][$uuid]['idle'] > $db_cache['all_user'][$uuid]['count']) {
- $db_cache['all_user'][$uuid]['idle'] = $db_cache['all_user'][$uuid]['count'];
- }
- if($isonline != 1) {
- if(($user = $mysqlcon->query("SELECT `uuid`,`cldbid` FROM `$dbname`.`user` WHERE `uuid`='{$uuid}'")->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE)) === false) {
- enter_logfile($cfg,2,"Database error on selecting user (admin function remove/add time): ".print_r($mysqlcon->errorInfo(), true));
+ if($value['timecount'] == 0 && $value['timestamp'] == 4273093200) {
+ //remove user
+ if(($user = $mysqlcon->query("SELECT `uuid`,`cldbid`,`name` FROM `$dbname`.`user` WHERE `uuid`='{$uuid}'")->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE)) === false) {
+ enter_logfile($cfg,2,"Database error on selecting user (admin function remove user): ".print_r($mysqlcon->errorInfo(), true));
} else {
$temp_cldbid = $user[$uuid]['cldbid'];
- $sqlexec .= "UPDATE `$dbname`.`user` SET `count`='{$db_cache['all_user'][$uuid]['count']}', `idle`='{$db_cache['all_user'][$uuid]['idle']}' WHERE `uuid`='{$uuid}';\n";
+ $sqlexec .= "DELETE FROM `$dbname`.`addon_assign_groups` WHERE `uuid`='{$uuid}';\nDELETE FROM `$dbname`.`admin_addtime` WHERE `uuid`='{$uuid}';\nDELETE FROM `$dbname`.`stats_user` WHERE `uuid`='{$uuid}';\nDELETE FROM `$dbname`.`user` WHERE `uuid`='{$uuid}';\nDELETE FROM `$dbname`.`user_iphash` WHERE `uuid`='{$uuid}';\nDELETE FROM `$dbname`.`user_snapshot` WHERE `cldbid`='{$temp_cldbid}';\n";
+ enter_logfile($cfg,4,sprintf($lang['wihladm45'],$user[$uuid]['name'],$uuid,$temp_cldbid).' ('.$lang['wihladm46'].')');
+ if(isset($db_cache['all_user'][$uuid])) unset($db_cache['all_user'][$uuid]);
+ if(isset($db_cache['admin_addtime'][$uuid])) unset($db_cache['admin_addtime'][$uuid]);
+ if(isset($db_cache['addon_assign_groups'][$uuid])) unset($db_cache['addon_assign_groups'][$uuid]);
}
- }
- if($mysqlcon->exec("DELETE FROM `$dbname`.`admin_addtime` WHERE `timestamp`=".$value['timestamp']." AND `uuid`='$uuid';") === false) {
- enter_logfile($cfg,2,"Database error on updating user (admin function remove/add time): ".print_r($mysqlcon->errorInfo(), true));
- }
- if(($usersnap = $mysqlcon->query("SELECT `id`,`cldbid`,`count`,`idle` FROM `$dbname`.`user_snapshot` WHERE `cldbid`={$temp_cldbid}")->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE)) === false) {
- enter_logfile($cfg,2,"Database error on selecting user (admin function remove/add time): ".print_r($mysqlcon->errorInfo(), true));
+ unset($user);
} else {
- foreach($usersnap as $id => $valuesnap) {
- $valuesnap['count'] += $value['timecount'];
- if($valuesnap['count'] < 0) {
- $valuesnap['count'] = $valuesnap['idle'] = 0;
- } elseif ($valuesnap['idle'] > $valuesnap['count']) {
- $valuesnap['idle'] = $valuesnap['count'];
+ $db_cache['all_user'][$uuid]['count'] += $value['timecount'];
+ if($db_cache['all_user'][$uuid]['count'] < 0) {
+ $db_cache['all_user'][$uuid]['count'] = $db_cache['all_user'][$uuid]['idle'] = 0;
+ } elseif ($db_cache['all_user'][$uuid]['idle'] > $db_cache['all_user'][$uuid]['count']) {
+ $db_cache['all_user'][$uuid]['idle'] = $db_cache['all_user'][$uuid]['count'];
+ }
+ if($isonline != 1) {
+ if(($user = $mysqlcon->query("SELECT `uuid`,`cldbid` FROM `$dbname`.`user` WHERE `uuid`='{$uuid}'")->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE)) === false) {
+ enter_logfile($cfg,2,"Database error on selecting user (admin function remove/add time): ".print_r($mysqlcon->errorInfo(), true));
+ } else {
+ $temp_cldbid = $user[$uuid]['cldbid'];
+ $sqlexec .= "UPDATE `$dbname`.`user` SET `count`='{$db_cache['all_user'][$uuid]['count']}', `idle`='{$db_cache['all_user'][$uuid]['idle']}' WHERE `uuid`='{$uuid}';\n";
+ }
+ }
+ if($mysqlcon->exec("DELETE FROM `$dbname`.`admin_addtime` WHERE `timestamp`=".$value['timestamp']." AND `uuid`='$uuid';") === false) {
+ enter_logfile($cfg,2,"Database error on updating user (admin function remove/add time): ".print_r($mysqlcon->errorInfo(), true));
+ }
+ if(($usersnap = $mysqlcon->query("SELECT `id`,`cldbid`,`count`,`idle` FROM `$dbname`.`user_snapshot` WHERE `cldbid`={$temp_cldbid}")->fetchAll(PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE)) === false) {
+ enter_logfile($cfg,2,"Database error on selecting user (admin function remove/add time): ".print_r($mysqlcon->errorInfo(), true));
+ } else {
+ foreach($usersnap as $id => $valuesnap) {
+ $valuesnap['count'] += $value['timecount'];
+ if($valuesnap['count'] < 0) {
+ $valuesnap['count'] = $valuesnap['idle'] = 0;
+ } elseif ($valuesnap['idle'] > $valuesnap['count']) {
+ $valuesnap['idle'] = $valuesnap['count'];
+ }
+ $sqlexec .= "UPDATE `$dbname`.`user_snapshot` SET `count`='{$valuesnap['count']}', `idle`='{$valuesnap['idle']}' WHERE `cldbid`='{$temp_cldbid}' AND `id`='{$id}';\n";
}
- $sqlexec .= "UPDATE `$dbname`.`user_snapshot` SET `count`='{$valuesnap['count']}', `idle`='{$valuesnap['idle']}' WHERE `cldbid`='{$temp_cldbid}' AND `id`='{$id}';\n";
}
+ enter_logfile($cfg,4,sprintf($lang['sccupcount2'],$value['timecount'],$uuid).' ('.$lang['wihladm46'].')');
+ unset($user, $usersnap);
}
- enter_logfile($cfg,4,sprintf($lang['sccupcount2'],$value['timecount'],$uuid));
- unset($user, $usersnap);
}
}
unset($db_cache['admin_addtime']);
diff --git a/jobs/calc_userstats.php b/jobs/calc_userstats.php
index e01a77c..8423ac3 100644
--- a/jobs/calc_userstats.php
+++ b/jobs/calc_userstats.php
@@ -134,6 +134,12 @@ function calc_userstats($ts3,$mysqlcon,$cfg,$dbname,&$db_cache) {
$sqlexec .= "UPDATE `$dbname`.`job_check` SET `timestamp`=$job_end WHERE `job_name`='calc_user_limit';\n";
}
}
+
+ if ($db_cache['job_check']['calc_user_removed']['timestamp'] < ($nowtime - 1800)) {
+ $db_cache['job_check']['calc_user_removed']['timestamp'] = $nowtime;
+ $atime = $nowtime - 3600;
+ $sqlexec .= "UPDATE `$dbname`.`stats_user` AS `s` INNER JOIN `$dbname`.`user` AS `u` ON `s`.`uuid`=`u`.`uuid` SET `s`.`removed`='0' WHERE `s`.`removed`='1' AND `u`.`lastseen`>{$atime};\nUPDATE `$dbname`.`job_check` SET `timestamp`='{$nowtime}' WHERE `job_name`='calc_user_removed';\n";
+ }
enter_logfile($cfg,6,"calc_userstats needs: ".(number_format(round((microtime(true) - $starttime), 5),5)));
return($sqlexec);
diff --git a/jobs/check_db.php b/jobs/check_db.php
index 74483d8..2768ff9 100644
--- a/jobs/check_db.php
+++ b/jobs/check_db.php
@@ -1,6 +1,6 @@
exec("INSERT INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('reset_user_time', '0'),('reset_user_delete', '0'),('reset_group_withdraw', '0'),('reset_webspace_cache', '0'),('reset_usage_graph', '0'),('reset_stop_after', '0');") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('reset_user_time', '0'),('reset_user_delete', '0'),('reset_group_withdraw', '0'),('reset_webspace_cache', '0'),('reset_usage_graph', '0'),('reset_stop_after', '0');") === false) { } else {
enter_logfile($cfg,4," [1.3.1] Added new job_check values.");
}
}
if(version_compare($cfg['version_current_using'], '1.3.4', '<')) {
- if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_show_maxclientsline_switch', 0)") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_show_maxclientsline_switch', 0)") === false) { } else {
enter_logfile($cfg,4," [1.3.4] Added new config values.");
}
if($mysqlcon->exec("ALTER TABLE `$dbname`.`groups` MODIFY COLUMN `sgidname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") === false) { } else {
@@ -135,7 +139,7 @@ function check_writable($cfg,$mysqlcon) {
}
if(version_compare($cfg['version_current_using'], '1.3.7', '<')) {
- if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('webinterface_fresh_installation', '0'),('webinterface_advanced_mode', '1')") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('webinterface_fresh_installation', '0'),('webinterface_advanced_mode', '1')") === false) { } else {
enter_logfile($cfg,4," [1.3.7] Added new config values.");
}
@@ -149,7 +153,7 @@ function check_writable($cfg,$mysqlcon) {
}
if(version_compare($cfg['version_current_using'], '1.3.8', '<')) {
- if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_api_keys', '');") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_api_keys', '');") === false) { } else {
enter_logfile($cfg,4," [1.3.8] Added new config values.");
}
@@ -281,7 +285,7 @@ function check_writable($cfg,$mysqlcon) {
}
$sqlinsertvalues = substr($sqlinsertvalues, 0, -1);
- if ($mysqlcon->exec("INSERT INTO `$dbname`.`user_snapshot2` (`id`,`cldbid`,`count`,`idle`) VALUES {$sqlinsertvalues};") === false) {
+ if ($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`user_snapshot2` (`id`,`cldbid`,`count`,`idle`) VALUES {$sqlinsertvalues};") === false) {
enter_logfile($cfg,1," Insert failed: ".print_r($mysqlcon->errorInfo(), true));
}
unset($snapshot, $sqlinsertvalues);
@@ -307,11 +311,11 @@ function check_writable($cfg,$mysqlcon) {
$currentid = count($timestamps);
- if($mysqlcon->exec("INSERT INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('last_snapshot_id', '{$currentid}'),('last_snapshot_time', '{$lastsnapshot[0]['timestamp']}');") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('last_snapshot_id', '{$currentid}'),('last_snapshot_time', '{$lastsnapshot[0]['timestamp']}');") === false) { } else {
enter_logfile($cfg,4," [1.3.8] Added new job_check values (part 1).");
}
- if($mysqlcon->exec("INSERT INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('update_groups', '0');") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('update_groups', '0');") === false) { } else {
enter_logfile($cfg,4," [1.3.8] Added new job_check values (part 2).");
}
@@ -330,7 +334,7 @@ function check_writable($cfg,$mysqlcon) {
}
if(version_compare($cfg['version_current_using'], '1.3.9', '<')) {
- if($mysqlcon->exec("INSERT INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('get_avatars', '0'),('calc_donut_chars', '0'),('reload_trigger', '0');") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('get_avatars', '0'),('calc_donut_chars', '0'),('reload_trigger', '0');") === false) { } else {
enter_logfile($cfg,4," [1.3.9] Added new job_check values.");
}
}
@@ -345,7 +349,7 @@ function check_writable($cfg,$mysqlcon) {
}
if(version_compare($cfg['version_current_using'], '1.3.11', '<')) {
- if($mysqlcon->exec("INSERT INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('assign_groups_excepted_groupids','');") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('assign_groups_excepted_groupids','');") === false) { } else {
enter_logfile($cfg,4," [1.3.11] Adjusted table addons_config successfully.");
}
@@ -358,7 +362,7 @@ function check_writable($cfg,$mysqlcon) {
}
if(version_compare($cfg['version_current_using'], '1.3.12', '<')) {
- if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_imprint_switch', '0'),('stats_imprint_address', 'Max Mustermann Musterstraße 13 05172 Musterhausen Germany'),('stats_imprint_address_url', 'https://site.url/imprint/'), ('stats_imprint_email', 'info@example.com'),('stats_imprint_phone', '+49 171 1234567'),('stats_imprint_notes', NULL),('stats_imprint_privacypolicy', 'Add your own privacy policy here. (editable in the webinterface)'),('stats_imprint_privacypolicy_url', 'https://site.url/privacy/');") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_imprint_switch', '0'),('stats_imprint_address', 'Max Mustermann Musterstraße 13 05172 Musterhausen Germany'),('stats_imprint_address_url', 'https://site.url/imprint/'), ('stats_imprint_email', 'info@example.com'),('stats_imprint_phone', '+49 171 1234567'),('stats_imprint_notes', NULL),('stats_imprint_privacypolicy', 'Add your own privacy policy here. (editable in the webinterface)'),('stats_imprint_privacypolicy_url', 'https://site.url/privacy/');") === false) { } else {
enter_logfile($cfg,4," [1.3.12] Added new imprint values.");
}
}
@@ -367,7 +371,7 @@ function check_writable($cfg,$mysqlcon) {
if($mysqlcon->exec("UPDATE `$dbname`.`user` SET `idle`=0 WHERE `idle`<0; UPDATE `$dbname`.`user` SET `count`=`idle` WHERE `count`<0; UPDATE `$dbname`.`user` SET `count`=`idle` WHERE `count`<`idle`;") === false) { }
if($mysqlcon->exec("UPDATE `$dbname`.`user_snapshot` SET `idle`=0 WHERE `idle`<0; UPDATE `$dbname`.`user_snapshot` SET `count`=`idle` WHERE `count`<0; UPDATE `$dbname`.`user_snapshot` SET `count`=`idle` WHERE `count`<`idle`;") === false) { }
- if($mysqlcon->exec("INSERT INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('database_export', '0'),('update_groups', '0') ON DUPLICATE KEY UPDATE `timestamp`=VALUES(`timestamp`);") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('database_export', '0'),('update_groups', '0') ON DUPLICATE KEY UPDATE `timestamp`=VALUES(`timestamp`);") === false) { } else {
enter_logfile($cfg,4," [1.3.13] Added new job_check values.");
}
@@ -375,7 +379,7 @@ function check_writable($cfg,$mysqlcon) {
if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('webinterface_fresh_installation', '0'),('stats_column_nation_switch', '0'),('stats_column_version_switch', '0'),('stats_column_platform_switch', '0');") === false) { }
} catch (Exception $e) { }
- if($mysqlcon->exec("INSERT INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('default_session_sametime', 'Strict'),('default_header_origin', ''),('default_header_xss', '1; mode=block'),('default_header_contenttyp', '1'),('default_header_frame', '') ON DUPLICATE KEY UPDATE `value`=VALUES(`value`);") === false) { } else {
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('default_session_sametime', 'Strict'),('default_header_origin', ''),('default_header_xss', '1; mode=block'),('default_header_contenttyp', '1'),('default_header_frame', '') ON DUPLICATE KEY UPDATE `value`=VALUES(`value`);") === false) { } else {
enter_logfile($cfg,4," [1.3.13] Added new cfg_params values.");
}
@@ -394,16 +398,98 @@ function check_writable($cfg,$mysqlcon) {
}
if(version_compare($cfg['version_current_using'], '1.3.14', '<')) {
- if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_column_default_sort_2', 'rank'),('stats_column_default_order_2', 'asc') ON DUPLICATE KEY UPDATE `value`=VALUES(`value`);") === false) { } else {
- enter_logfile($cfg,4," [1.3.13] Added new cfg_params values.");
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('stats_column_default_sort_2', 'rank'),('stats_column_default_order_2', 'asc');") === false) { } else {
+ enter_logfile($cfg,4," [1.3.14] Added new cfg_params values.");
}
if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('assign_groups_name','');") === false) { } else {
- enter_logfile($cfg,4," [1.3.13] Added new addons_config values.");
+ enter_logfile($cfg,4," [1.3.14] Added new addons_config values.");
+ }
+ }
+
+ if(version_compare($cfg['version_current_using'], '1.3.16', '<')) {
+ if($mysqlcon->exec("INSERT INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('calc_user_removed', '0') ON DUPLICATE KEY UPDATE `timestamp`=VALUES(`timestamp`);") === false) { } else {
+ enter_logfile($cfg,4," [1.3.16] Added new job_check values.");
}
}
- if(version_compare($cfg['version_current_using'], '1.3.15', '<')) {
+ if(version_compare($cfg['version_current_using'], '1.3.18', '<')) {
+ if($mysqlcon->exec("INSERT INTO `$dbname`.`job_check` (`job_name`,`timestamp`) VALUES ('update_channel', '0') ON DUPLICATE KEY UPDATE `timestamp`=VALUES(`timestamp`);") === false) { } else {
+ enter_logfile($cfg,4," [1.3.18] Added new job_check values.");
+ }
+
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`cfg_params` (`param`,`value`) VALUES ('default_cmdline_sec_switch', '1');") === false) { } else {
+ enter_logfile($cfg,4," [1.3.18] Added new cfg_params values.");
+ }
+
+ if($mysqlcon->exec("CREATE TABLE `$dbname`.`channel` (`cid` int(10) UNSIGNED NOT NULL default '0',`pid` int(10) UNSIGNED NOT NULL default '0',`channel_order` int(10) UNSIGNED NOT NULL default '0',`channel_name` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,PRIMARY KEY (`cid`));") === false) { } else {
+ enter_logfile($cfg,4," [1.3.18] Created new table channel successfully.");
+ }
+
+ if($mysqlcon->exec("ALTER TABLE `$dbname`.`addons_config` MODIFY COLUMN `value` varchar(16000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") === false) { } else {
+ enter_logfile($cfg,4," [1.3.18] Adjusted table addons_config successfully.");
+ }
+
+ $channelinfo_desc = $mysqlcon->quote('[CENTER][B][SIZE=15]User Toplist (last week)[/SIZE][/B][/CENTER]
+
+[SIZE=11][B]1st[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_1}]{$CLIENT_NICKNAME_1}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_1} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_1}]{$CLIENT_CURRENT_CHANNEL_NAME_1}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_1|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_1}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_1}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_1}[/SIZE]
+
+[SIZE=11][B]2nd[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_2}]{$CLIENT_NICKNAME_2}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_2} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_2}]{$CLIENT_CURRENT_CHANNEL_NAME_2}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_2|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_2}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_2}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_2}[/SIZE]
+
+[SIZE=11][B]3rd[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_3}]{$CLIENT_NICKNAME_3}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_3} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_3}]{$CLIENT_CURRENT_CHANNEL_NAME_3}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_3|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_3}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_3}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_3}[/SIZE]
+
+[SIZE=10][B]4th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_4}]{$CLIENT_NICKNAME_4}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_4} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_4}]{$CLIENT_CURRENT_CHANNEL_NAME_4}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_4|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_4}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_4}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_4}[/SIZE]
+
+[SIZE=10][B]5th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_5}]{$CLIENT_NICKNAME_5}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_5} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_5}]{$CLIENT_CURRENT_CHANNEL_NAME_5}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_5|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_5}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_5}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_5}[/SIZE]
+
+[SIZE=10][B]6th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_6}]{$CLIENT_NICKNAME_6}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_6} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_6}]{$CLIENT_CURRENT_CHANNEL_NAME_6}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_6|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_6}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_6}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_6}[/SIZE]
+
+[SIZE=10][B]7th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_7}]{$CLIENT_NICKNAME_7}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_7} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_7}]{$CLIENT_CURRENT_CHANNEL_NAME_7}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_7|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_7}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_7}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_7}[/SIZE]
+
+[SIZE=10][B]8th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_8}]{$CLIENT_NICKNAME_8}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_8} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_8}]{$CLIENT_CURRENT_CHANNEL_NAME_8}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_8|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_8}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_8}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_8}[/SIZE]
+
+[SIZE=10][B]9th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_9}]{$CLIENT_NICKNAME_9}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_9} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_9}]{$CLIENT_CURRENT_CHANNEL_NAME_9}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_9|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_9}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_9}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_9}[/SIZE]
+
+[SIZE=10][B]10th[/B] [URL=client://0/{$CLIENT_UNIQUE_IDENTIFIER_10}]{$CLIENT_NICKNAME_10}[/URL][/SIZE][SIZE=7] {if {$CLIENT_ONLINE_STATUS_10} === \'Online\'}[COLOR=GREEN](Online)[/COLOR]
+currently in channel [URL=channelid://{$CLIENT_CURRENT_CHANNEL_ID_10}]{$CLIENT_CURRENT_CHANNEL_NAME_10}[/URL]{else}[COLOR=RED](Offline)[/COLOR]
+last seen {$CLIENT_LAST_SEEN_10|date_format:"%d.%m.%Y %H:%M:%S"}{/if}[/SIZE]
+[SIZE=8]Last week active: {$CLIENT_ACTIVE_TIME_LAST_WEEK_10}; reached Servergroup: [IMG]https://domain.com/ranksystem/{$CLIENT_CURRENT_RANK_GROUP_ICON_URL_10}[/IMG] {$CLIENT_CURRENT_RANK_GROUP_NAME_10}[/SIZE]
+
+
+[SIZE=6]Updated: {$LAST_UPDATE_TIME}[/SIZE]', ENT_QUOTES);
+ if($mysqlcon->exec("INSERT IGNORE INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('channelinfo_toplist_active','0'),('channelinfo_toplist_desc',{$channelinfo_desc}),('channelinfo_toplist_lastdesc',''),('channelinfo_toplist_delay','600'),('channelinfo_toplist_channelid','0'),('channelinfo_toplist_modus','1'),('channelinfo_toplist_lastupdate','0') ON DUPLICATE KEY UPDATE `value`=VALUES(`value`);") === false) {
+ enter_logfile($cfg,2," [1.3.18] Error on updating new addons_config values: ".print_r($mysqlcon->errorInfo(), true));
+ } else {
+ enter_logfile($cfg,4," [1.3.18] Updated new addons_config values.");
+ }
+
if($mysqlcon->exec("DELETE FROM `$dbname`.`admin_addtime`;") === false) { }
if($mysqlcon->exec("DELETE FROM `$dbname`.`addon_assign_groups`;") === false) { }
@@ -414,6 +500,23 @@ function check_writable($cfg,$mysqlcon) {
if($mysqlcon->exec("CREATE INDEX `user_online` ON `$dbname`.`user` (`online`,`lastseen`)") === false) { }
} catch (Exception $e) { }
}
+
+ if(version_compare($cfg['version_current_using'], '1.3.19', '<')) {
+ if($mysqlcon->exec("ALTER TABLE `$dbname`.`addons_config` MODIFY COLUMN `value` varchar(16000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;") === false) { } else {
+ enter_logfile($cfg,4," [1.3.19] Adjusted table addons_config successfully.");
+ }
+
+ if($mysqlcon->exec("DELETE FROM `$dbname`.`admin_addtime`;") === false) { }
+ if($mysqlcon->exec("DELETE FROM `$dbname`.`addon_assign_groups`;") === false) { }
+
+ try {
+ if($mysqlcon->exec("CREATE INDEX `serverusage_timestamp` ON `$dbname`.`server_usage` (`timestamp`)") === false) { }
+ if($mysqlcon->exec("CREATE INDEX `user_version` ON `$dbname`.`user` (`version`)") === false) { }
+ if($mysqlcon->exec("CREATE INDEX `user_cldbid` ON `$dbname`.`user` (`cldbid` ASC,`uuid`,`rank`)") === false) { }
+ if($mysqlcon->exec("CREATE INDEX `user_online` ON `$dbname`.`user` (`online`,`lastseen`)") === false) { }
+ } catch (Exception $e) { }
+ }
+
$cfg = set_new_version($mysqlcon,$cfg,$dbname);
}
enter_logfile($cfg,5,"Check Ranksystem database for updates [done]");
diff --git a/jobs/clean.php b/jobs/clean.php
index 7f96570..72bcf9e 100644
--- a/jobs/clean.php
+++ b/jobs/clean.php
@@ -91,7 +91,7 @@ function clean($ts3,$mysqlcon,$lang,$cfg,$dbname,&$db_cache) {
// clean usersnaps older then 1 month + clean old server usage - older then a year
if ($db_cache['job_check']['clean_db']['timestamp'] < ($nowtime - 86400)) {
$db_cache['job_check']['clean_db']['timestamp'] = $nowtime;
- $sqlexec .= "DELETE FROM `$dbname`.`server_usage` WHERE `timestamp` < (UNIX_TIMESTAMP() - 31536000);\nDELETE `b` FROM `$dbname`.`user` AS `a` RIGHT JOIN `$dbname`.`stats_user` AS `b` ON `a`.`uuid`=`b`.`uuid` WHERE `a`.`uuid` IS NULL;\nUPDATE `$dbname`.`job_check` SET `timestamp`='$nowtime' WHERE `job_name`='clean_db';\nDELETE FROM `$dbname`.`csrf_token` WHERE `timestamp` < (UNIX_TIMESTAMP() - 3600);\nDELETE `h` FROM `$dbname`.`user_iphash` AS `h` LEFT JOIN `$dbname`.`user` AS `u` ON `u`.`uuid` = `h`.`uuid` WHERE (`u`.`uuid` IS NULL OR `u`.`online`!=1);\n";
+ $sqlexec .= "DELETE FROM `$dbname`.`server_usage` WHERE `timestamp` < (UNIX_TIMESTAMP() - 31536000);\nDELETE `b` FROM `$dbname`.`user` AS `a` RIGHT JOIN `$dbname`.`stats_user` AS `b` ON `a`.`uuid`=`b`.`uuid` WHERE `a`.`uuid` IS NULL;\nUPDATE `$dbname`.`job_check` SET `timestamp`='{$nowtime}' WHERE `job_name`='clean_db';\nDELETE FROM `$dbname`.`csrf_token` WHERE `timestamp` < (UNIX_TIMESTAMP() - 3600);\nDELETE `h` FROM `$dbname`.`user_iphash` AS `h` LEFT JOIN `$dbname`.`user` AS `u` ON `u`.`uuid` = `h`.`uuid` WHERE (`u`.`uuid` IS NULL OR `u`.`online`!=1);\n";
enter_logfile($cfg,4,$lang['clean0003']);
}
diff --git a/jobs/db_ex_imp.php b/jobs/db_ex_imp.php
index 6094c05..0c0a219 100644
--- a/jobs/db_ex_imp.php
+++ b/jobs/db_ex_imp.php
@@ -27,7 +27,7 @@ function db_ex_imp($ts3,$mysqlcon,$lang,$cfg,$dbname,&$db_cache) {
} else {
$dump = fopen($filepath.".sql", 'a');
- fwrite($dump, "-- Ranksystem SQL Export\n-- from $datetime\n");
+ fwrite($dump, "-- Ranksystem SQL Export\n-- from $datetime\n\nSTART TRANSACTION;\n\n");
fclose($dump);
foreach ($tables as $table => $value) {
@@ -93,11 +93,23 @@ function db_ex_imp($ts3,$mysqlcon,$lang,$cfg,$dbname,&$db_cache) {
fclose($dump);
unset($out, $sqldata);
+
+ if (($job_status = $mysqlcon->query("SELECT `timestamp` FROM `$dbname`.`job_check` WHERE `job_name`='database_export';")->fetch(PDO::FETCH_ASSOC)) === false) {
+ $err++;
+ enter_logfile($cfg,2," Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
+ } elseif($job_status['timestamp'] == 3) {
+ $db_cache['job_check']['database_export']['timestamp'] = 3;
+ enter_logfile($cfg,4,"DB Export job(s) canceled by request");
+ $dump = fopen($filepath.".sql", 'a');
+ fwrite($dump, "\nROLLBACK;\n\n-- Canceled export");
+ fclose($dump);
+ return;
+ }
}
}
$dump = fopen($filepath.".sql", 'a');
- fwrite($dump, "-- Finished export");
+ fwrite($dump, "COMMIT;\n\n-- Finished export");
fclose($dump);
$zip = new ZipArchive();
@@ -107,7 +119,11 @@ function db_ex_imp($ts3,$mysqlcon,$lang,$cfg,$dbname,&$db_cache) {
} else {
$zip->addFile($filepath.".sql",$filename.".sql");
if(version_compare(phpversion(), '7.2', '>=') && version_compare(phpversion("zip"), '1.2.0', '>=')) {
- $zip->setEncryptionName($filename.".sql", ZipArchive::EM_AES_256, $cfg['teamspeak_query_pass']);
+ try {
+ $zip->setEncryptionName($filename.".sql", ZipArchive::EM_AES_256, $cfg['teamspeak_query_pass']);
+ } catch (Exception $e) {
+ enter_logfile($cfg,2," Error due creating secured zip-File: ".$e->getCode().': '.$e->getMessage(). " ..Update PHP to Version 7.2 or above and update libzip to version 1.2.0 or above.");
+ }
}
$zip->close();
if(!unlink($filepath.".sql")) {
diff --git a/jobs/update_channel.php b/jobs/update_channel.php
new file mode 100644
index 0000000..57d0cbe
--- /dev/null
+++ b/jobs/update_channel.php
@@ -0,0 +1,72 @@
+channelListResettsn();
+ $channellist = $ts3->channelListtsn();
+
+ foreach($channellist as $channel) {
+ $chname = $mysqlcon->quote((mb_substr(mb_convert_encoding($channel['channel_name'],'UTF-8','auto'),0,40)), ENT_QUOTES);
+
+ if(isset($db_cache['channel'][$channel['cid']]) &&
+ $db_cache['channel'][$channel['cid']]['pid'] == $channel['pid'] &&
+ $db_cache['channel'][$channel['cid']]['channel_order'] == $channel['channel_order'] &&
+ $db_cache['channel'][$channel['cid']]['channel_name'] == $chname) {
+ enter_logfile($cfg,7,"Continue channel ".$chname." (CID: ".$channel['cid'].")");
+ continue;
+ } else {
+ enter_logfile($cfg,6,"Update/Insert channel ".$chname." (CID: ".$channel['cid'].")");
+ $updatechannel[] = array(
+ "cid" => $channel['cid'],
+ "pid" => $channel['pid'],
+ "channel_order" => $channel['channel_order'],
+ "channel_name" => $chname
+ );
+ }
+ }
+
+ if (isset($updatechannel)) {
+ $sqlinsertvalues = '';
+ foreach ($updatechannel as $updatedata) {
+ $sqlinsertvalues .= "({$updatedata['cid']},{$updatedata['pid']},{$updatedata['channel_order']},{$updatedata['channel_name']}),";
+ $db_cache['channel'][$updatedata['cid']]['pid'] = $updatedata['pid'];
+ $db_cache['channel'][$updatedata['cid']]['channel_order'] = $updatedata['channel_order'];
+ $db_cache['channel'][$updatedata['cid']]['channel_name'] = $updatedata['channel_name'];
+ }
+ $sqlinsertvalues = substr($sqlinsertvalues, 0, -1);
+ $sqlexec .= "INSERT INTO `$dbname`.`channel` (`cid`,`pid`,`channel_order`,`channel_name`) VALUES $sqlinsertvalues ON DUPLICATE KEY UPDATE `pid`=VALUES(`pid`),`channel_order`=VALUES(`channel_order`),`channel_name`=VALUES(`channel_name`);\n";
+ unset($updatechannel, $sqlinsertvalues);
+ }
+ } catch (Exception $e) {
+ enter_logfile($cfg,2,$lang['errorts3'].$e->getCode().': '.$lang['errgrplist'].$e->getMessage());
+ }
+
+ if(isset($db_cache['channel'])) {
+ $delchannel = '';
+ foreach ($db_cache['channel'] as $cid => $channel) {
+ if(!isset($channellist[$cid]) && $cid != 0 && $cid != NULL) {
+ $delchannel .= $cid . ",";
+ unset($db_cache['channel'][$cid]);
+ }
+ }
+ }
+
+ if(isset($delchannel) && $delchannel != NULL) {
+ $delchannel = substr($delchannel, 0, -1);
+ $sqlexec .= "DELETE FROM `$dbname`.`channel` WHERE `cid` IN ($delchannel);\n";
+ enter_logfile($cfg,6,"DELETE FROM `$dbname`.`channel` WHERE `cid` IN ($delchannel);");
+ }
+
+ enter_logfile($cfg,6,"update_channel needs: ".(number_format(round((microtime(true) - $starttime), 5),5)));
+ return($sqlexec);
+ }
+}
+?>
\ No newline at end of file
diff --git a/jobs/update_groups.php b/jobs/update_groups.php
index b2e0b39..181fb58 100644
--- a/jobs/update_groups.php
+++ b/jobs/update_groups.php
@@ -4,7 +4,7 @@ function update_groups($ts3,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,&$db_cache,
$nowtime = time();
$sqlexec = '';
- if($db_cache['job_check']['update_groups']['timestamp'] < ($nowtime - 4)) {
+ if($db_cache['job_check']['update_groups']['timestamp'] < ($nowtime - 6)) {
$db_cache['job_check']['update_groups']['timestamp'] = $nowtime;
$sqlexec .= "UPDATE `$dbname`.`job_check` SET `timestamp`={$nowtime} WHERE `job_name`='update_groups';\n";
try {
diff --git "a/languages/core_ar_\330\247\331\204\330\271\330\261\330\250\331\212\330\251_arab.php" "b/languages/core_ar_\330\247\331\204\330\271\330\261\330\250\331\212\330\251_arab.php"
index d75365f..8af4131 100644
--- "a/languages/core_ar_\330\247\331\204\330\271\330\261\330\250\331\212\330\251_arab.php"
+++ "b/languages/core_ar_\330\247\331\204\330\271\330\261\330\250\331\212\330\251_arab.php"
@@ -4,6 +4,53 @@
$lang['adduser'] = "User %s (unique Client-ID: %s; Client-database-ID %s) is unknown -> added to the Ranksystem now.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascending";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot is stopped.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "repeat";
$lang['resettime'] = "Reset the online and idle time of user %s (unique Client-ID: %s; Client-database-ID %s) to zero, cause user got removed out of exception.";
$lang['sccupcount'] = "Active time of %s seconds for the unique Client-ID (%s) will be added in a few seconds (have a look to the Ranksystem log).";
-$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s); requested about admin function.";
+$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s).";
$lang['setontime'] = "add time";
$lang['setontime2'] = "remove time";
$lang['setontimedesc'] = "Add online time to the previous selected clients. Each user will get this time additional to their old online time.
The entered online time will be considered for the rank up and should take effect immediately.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "The new passwords dismatch. Please try again.";
$lang['wichpw3'] = "The password of the webinterface has been successfully changed. Request from IP %s.";
$lang['wichpw4'] = "Change Password";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "There is an error in the configuration of the Ranksystem. Please go to the webinterface and correct the rank settings!";
$lang['widaform'] = "نظام التاريخ";
$lang['widaformdesc'] = "اختر كيفية ضهور التاريخ.
Example: %a ايام, %h ساعات, %i دقائق, %s ثوان";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function.";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "enabled";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "in progress..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "finished";
diff --git "a/languages/core_az_Az\311\231rbaycan_az.php" "b/languages/core_az_Az\311\231rbaycan_az.php"
index b2ac311..1d17067 100644
--- "a/languages/core_az_Az\311\231rbaycan_az.php"
+++ "b/languages/core_az_Az\311\231rbaycan_az.php"
@@ -4,6 +4,53 @@
$lang['adduser'] = "%s istifadəçisi % (unikal Müştəri-ID: %s; Müştəri bazası ID %s) bilinmir -> indi Ranks Sisteminə əlavə edildi";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "yüksələn";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot dayandırılıb.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "təkrar";
$lang['resettime'] = "Istifadəçi %s (unikal Müştəri-ID: %s; Client-database-ID: %s) onlayn və boş vaxtını sıfırla bərpa et, bir istisna (server və ya müştəri istisnası) həyata çıxardı.";
$lang['sccupcount'] = "Unikal Müştərilər üçün ID (%s) üçün %s saniyəlik aktiv vaxt bir neçə saniyə əlavə olunacaq (Ranksystem jurnalına baxın).";
-$lang['sccupcount2'] = "Unikal müştəri ID (%s) üçün aktiv vaxt %s saniyə əlavə edin; administrator funksiyası haqqında tələb olunur.";
+$lang['sccupcount2'] = "Unikal müştəri ID (%s) üçün aktiv vaxt %s saniyə əlavə edin.";
$lang['setontime'] = "vaxt əlavə edin";
$lang['setontime2'] = "vaxt silin";
$lang['setontimedesc'] = "Əvvəlki seçilmiş müştərilərə onlayn vaxt əlavə edin. Hər bir istifadəçi bu dəfə köhnə onlayn vaxtına əlavə olacaq.
Daxil vaxt sıralamada nəzərə alınacaq və dərhal qüvvəyə çatacaqdır.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "Yeni parol uyğun gəlmir. Yenidən cəhd edin.";
$lang['wichpw3'] = "Veb interfeys parolası uğurla dəyişdirildi. IP %s tələb olunur.";
$lang['wichpw4'] = "Şifrə dəyiş";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "Ranksystem-in konfiqurasiyasında bir səhv var. Veb-interfeysə keçin və rank parametrləri düzəlt!";
$lang['widaform'] = "Tarix formatı";
$lang['widaformdesc'] = "Göstərilən tarix formatını seçin.
Məsələn: %a gün, %h saat, %i dəqiqə, %s saniyə";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "administrator funksiyası haqqında tələb olunur.";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "enabled";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "in progress..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "finished";
diff --git "a/languages/core_cz_\304\214e\305\241tina_cz.php" "b/languages/core_cz_\304\214e\305\241tina_cz.php"
index d22d61f..d61135f 100644
--- "a/languages/core_cz_\304\214e\305\241tina_cz.php"
+++ "b/languages/core_cz_\304\214e\305\241tina_cz.php"
@@ -4,6 +4,53 @@
$lang['adduser'] = "Uživatel %s (unique Client-ID: %s; Client-database-ID %s) ještě není v databázi -> přidán do Ranksystem.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "vzestupně";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot je zastaven.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "Opakovat (obnovit)";
$lang['resettime'] = "Obnovení času online a nečinnosti uživatele% s (jedinečné ID klienta:% s; klientské databáze-ID% s) na nulu, což způsobilo, že uživatel byl odstraněn z výjimky.";
$lang['sccupcount'] = "Active time of %s seconds for the unique Client-ID (%s) will be added in a few seconds (have a look to the Ranksystem log).";
-$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s); requested about admin function.";
+$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s).";
$lang['setontime'] = "Přidat čas";
$lang['setontime2'] = "Odebrat čas";
$lang['setontimedesc'] = "Přidejte čas online k předchozím vybraným klientům. Každý uživatel dostane tentokrát navíc ke svému stávajícímu online času.
Zadaný online čas bude považován za pozici a měl by se projevit okamžitě.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "Nové hesla se vymažou. Prosím zkuste to znovu.";
$lang['wichpw3'] = "Heslo webové rozhraní bylo úspěšně změněno. Žádost od IP %s.";
$lang['wichpw4'] = "Změnit heslo";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "Došlo k chybě v konfiguraci systému Ranks. Přejděte na webové rozhraní a opravte nastavení jádra. Zvláště zkontrolujte konfiguraci 'rank'!";
$lang['widaform'] = "Časový formát";
$lang['widaformdesc'] = "Vyberte formát zobrazení data.
Příklad: % a dny,% h hodiny,% i mins,% s secs";
@@ -471,6 +520,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -487,9 +544,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Opravdu chcete systém resetovat?";
$lang['wihladmrs13'] = "Ano, spust reset";
-$lang['wihladmrs14'] = "Ne, zruš reset";
+$lang['wihladmrs14'] = "Ne, zruš";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "povoleno";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "spracovávám..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "hotovo";
diff --git a/languages/core_de_Deutsch_de.php b/languages/core_de_Deutsch_de.php
index 01c2da4..0b0d6dc 100644
--- a/languages/core_de_Deutsch_de.php
+++ b/languages/core_de_Deutsch_de.php
@@ -4,6 +4,53 @@
$lang['adduser'] = "User %s (eindeutige Client-ID: %s; Client-Datenbank-ID: %s) ist bisher unbekannt -> wurde nun zum Ranksystem hinzugefügt.";
$lang['api'] = "API";
$lang['apikey'] = "API Schlüssel";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Wähle einen Channel, in dem die Channel-Beschreibung gesetzt werden soll.";
+$lang['addonchdesc'] = "Channel Beschreibung";
+$lang['addonchdescdesc'] = "Lege hier die Beschreibung fest, welche in dem oben definierten Channel gesetzt werden soll. Die hier definierte Beschreibung, wird die vorhandene Beschreibung im Channel vollständig überschreiben.
Es können auch BB-Codes benutzt werden, welche innerhalb von TeamSpeak valide sind.
Die folgende Liste an Variablen kann genutzt werden, um variable Inhalte, wie z.B. der Client Nickname, darzustellen. Ersetze dafür '_XXX}' mit der fortlaufenden Nummer des TeamSpeak Users (zwischen 1 und 10), wie z.B. '_1}' oder '_10}'.
Alle Möglichkeiten, einen Variablenwert zu ändern, sind hier dokumentiert: %s Alle möglichen Funktionen sind hier dokumentiert: %s";
+$lang['addonchdescdesc00'] = "Variablen-Name";
+$lang['addonchdescdesc01'] = "gesammelte aktive Zeit seit jeher.";
+$lang['addonchdescdesc02'] = "gesammelte aktive Zeit im letzten Monat.";
+$lang['addonchdescdesc03'] = "gesammelte aktive Zeit in der letzten Woche.";
+$lang['addonchdescdesc04'] = "gesammelte online Zeit seit jeher.";
+$lang['addonchdescdesc05'] = "gesammelte online Zeit im letzten Monat.";
+$lang['addonchdescdesc06'] = "gesammelte online Zeit n der letzten Woche.";
+$lang['addonchdescdesc07'] = "gesammelte inaktive Zeit seit jeher.";
+$lang['addonchdescdesc08'] = "gesammelte inaktive Zeit im letzten Monat.";
+$lang['addonchdescdesc09'] = "gesammelte inaktive Zeit n der letzten Woche.";
+$lang['addonchdescdesc10'] = "Channel Datenbank-ID, in welchem der User sich gerade befindet.";
+$lang['addonchdescdesc11'] = "Channel Name, in welchem der User sich gerade befindet.";
+$lang['addonchdescdesc12'] = "Der variable Teil der URL des Gruppen-Icons. Setze die URL des Ranksystems davor.";
+$lang['addonchdescdesc13'] = "Gruppen Datenbank-ID der aktuellen Ranggruppe.";
+$lang['addonchdescdesc14'] = "Gruppenname der aktuellen Ranggruppe.";
+$lang['addonchdescdesc15'] = "Zeit, zu der der User die letzte Rangsteigerung hatte.";
+$lang['addonchdescdesc16'] = "Benötigte Zeit, für die nächste Rangsteigerung.";
+$lang['addonchdescdesc17'] = "Aktuelle Rank Position über alle User hinweg.";
+$lang['addonchdescdesc18'] = "Länder Code anhand der IP Adresse des TeamSpeak Users.";
+$lang['addonchdescdesc20'] = "Zeitpunkt, wann der User das erste mal auf dem TS gesehen wurde.";
+$lang['addonchdescdesc22'] = "Client Datenbank-ID.";
+$lang['addonchdescdesc23'] = "Client Beschreibung auf dem TS Server.";
+$lang['addonchdescdesc24'] = "Zeitpunkt, wann der User zuletzt auf dem TS Server gesehen wurde.";
+$lang['addonchdescdesc25'] = "Aktueller/letzter Nickname des Clients.";
+$lang['addonchdescdesc26'] = "Status des Clients. Gibt 'Online' oder 'Offline' aus.";
+$lang['addonchdescdesc27'] = "Plattform Code des TeamSpeak Users.";
+$lang['addonchdescdesc28'] = "Anzahl der Clientverbindungen zum TS Server.";
+$lang['addonchdescdesc29'] = "Öffentliche eindeutige Client-ID.";
+$lang['addonchdescdesc30'] = "Client Version des TeamSpeak Users.";
+$lang['addonchdescdesc31'] = "Zeitpunkt des letzten Updates der Channel Beschreibung";
+$lang['addonchdelay'] = "Verzögerung";
+$lang['addonchdelaydesc'] = "Lege eine Verzögerung fest, welche bestimmt, wie häufig die Channel-Beschreibung aktualisiert wird.
Solange das Ergebnis (Beschreibung) sich nicht ändert, wird auch die Channel-Beschreibung nicht verändert, auch wenn die Zeitspanne der Verzögerung überschritten ist.
Zum Forcieren eines Updates, nach Erreichen der definierten Zeit, kann die Variable %LAST_UPDATE_TIME% verwendet werden.";
+$lang['addonchmo'] = "Variante";
+$lang['addonchmo1'] = "Top Woche - aktive Zeit";
+$lang['addonchmo2'] = "Top Woche - online Zeit";
+$lang['addonchmo3'] = "Top Monat - aktive Zeit";
+$lang['addonchmo4'] = "Top Monat - online Zeit";
+$lang['addonchmo5'] = "Top seit jeher - aktive Zeit";
+$lang['addonchmo6'] = "Top seit jeher - online Zeit";
+$lang['addonchmodesc'] = "Wähle eine Variante, welche Toplist genutzt werden soll
Zur Auswahl steht die Zeitperiode Woche, Monat oder seit jeher Ebenso kann aus der aktiven oder online Zeit gewählt werden.";
+$lang['addonchtopl'] = "Channelinfo Topliste";
+$lang['addonchtopldesc'] = "Mit der Funktion 'Channelinfo Toplist' kann eine stets aktuelle Liste der Top 10 User direkt auf dem TeamSpeak Server bereit gestellt werden. Die Liste wird dann in die Beschreibung eines Channels geschrieben.
Es kann bestimmt werden, in welchem Channel die Beschreibung geschrieben werden soll und welche Statistik dort gezeigt werden soll (wöchentlich, monatlich bzw. aktive Zeit oder online Zeit).
Die Beschreibung ist vollständig individualisierbar mittels Variablen.
TS Berechtigung benötigt: b_channel_modify_description";
$lang['asc'] = "Aufsteigend";
$lang['autooff'] = "Autostart ist deaktiviert";
$lang['botoff'] = "Bot gestoppt.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "wiederholen";
$lang['resettime'] = "Setze die online und aktive Zeit des Benutzers %s (eindeutige Client-ID: %s; Client-Datenbank-ID: %s) auf Null zurück, da er aus der Ausnahme entfernt wurde.";
$lang['sccupcount'] = "Aktive Zeit von %s Sekunden für die eindeutige Client-ID (%s) wird in wenigen Sekunden hinzugefügt (siehe Ranksystem-Log).";
-$lang['sccupcount2'] = "Füge eine aktive Zeit von %s Sekunden der eindeutigen Client-ID (%s) hinzu; angefordert über Admin Funktion.";
+$lang['sccupcount2'] = "Füge eine aktive Zeit von %s Sekunden der eindeutigen Client-ID (%s) hinzu.";
$lang['setontime'] = "Zeit hinzufügen";
$lang['setontime2'] = "Zeit entfernen";
$lang['setontimedesc'] = "Füge eine online Zeit den zuvor ausgewählten Usern hinzu. Jeder User erhält diese Zeit zusätzlich zur bestehenden.
Die eingegebene online Zeit wird direkt für die Rangsteigerung berücksichtigt und sollte sofort Wirkung zeigen.";
@@ -384,8 +431,7 @@
$lang['wiadmhide'] = "unterdrücke ausgeschl. User";
$lang['wiadmhidedesc'] = "Hiermit können vom Ranksystem ausgeschlossene User in der folgenden Auswahl unterdrückt werden.";
$lang['wiadmuuid'] = "Bot-Admin";
-$lang['wiadmuuiddesc'] = "Lege einen User als Administrator des Ranksystems fest. Auch mehrere User können gewählt werden.
-Die hier aufgelisteten User sind die User, welche auf dem TeamSpeak Server online sind bzw. waren und das Ranksystem schon kennt. Sofern der gewünschte User nicht gelistet wird, stelle sicher das dieser auf dem TS online ist, starte den Ranksystem-Bot ggfs. neu und lade diese Seite nochmals, um die Liste zu aktualisieren.
Der Administrator des Ranksystem-Bots hat die Privilegien:
-, um das Passwort für das Webinterface zurückzusetzen. (Hinweis: Ohne Definition eines Administrators ist es nicht möglich, das Passwort im Bedarfsfall zurückzusetzen!)
- Bot-Befehle mit Admin-Privilegien auszuführen (Eine Liste der Befehle befindet sich %shier%s.)";
+$lang['wiadmuuiddesc'] = "Lege einen User als Administrator des Ranksystems fest. Auch mehrere User können gewählt werden.
Die hier aufgelisteten User sind die User, welche auf dem TeamSpeak Server online sind bzw. waren und das Ranksystem schon kennt. Sofern der gewünschte User nicht gelistet wird, stelle sicher das dieser auf dem TS online ist, starte den Ranksystem-Bot ggfs. neu und lade diese Seite nochmals, um die Liste zu aktualisieren.
Der Administrator des Ranksystem-Bots hat die Privilegien:
-, um das Passwort für das Webinterface zurückzusetzen. (Hinweis: Ohne Definition eines Administrators ist es nicht möglich, das Passwort im Bedarfsfall zurückzusetzen!)
- Bot-Befehle mit Admin-Privilegien auszuführen (Eine Liste der Befehle befindet sich %shier%s.)";
$lang['wiapidesc'] = "Mit der API ist es möglich, Daten (welche das Ranksystem gesammelt hat) an Dritt-Software weiterzugeben.
Um Informationen abfragen zu können, ist eine Authentifizierung mit einem API Schlüssel erforderlich. Die Schlüssel können hier verwaltet werden.
Die API ist erreichbar unter: %s
Die Ausgabe (Rückgabewert) der API erfolgt mittels einem JSON string. Eine Dokumentation der API erfolgt durch sich selbst; einfach den Link oben öffnen und der dortigen Beschreibung folgen.";
$lang['wiboost'] = "Boost";
$lang['wiboost2desc'] = "Hier können Boost-Gruppen definiert werden, um z.B. User zu belohnen. Damit sammeln sie schneller Zeit und steigen somit schneller im Rang.
Was ist zu tun?
1) Erstelle zunächst eine Servergruppe auf dem TS Server, welche als Boost-Gruppe genutzt werden kann.
2) Hinterlege die Boost-Definition auf dieser Seite.
Servergruppe: Wähle eine Servergruppe, welche den Boost auslösen soll.
Boost Faktor: Der Faktor, mit welchem die online/aktive Zeit eines Users geboostet wird, welcher die Servergruppe innehat (Beispiel: 2-fach). Als Faktor sind Zahlen mit Nachkommastellen (=Dezimalzahlen) zulässig (z.B. 1.5). Nachkommastellen sind durch einen Punkt zu trennen!
Gültigkeitsdauer in Sekunden: Lege fest, wie lange der Boost aktiv sein soll. Ist die Zeit abgelaufen, wird die Boost-Gruppe automatisch von den betroffenen Usern entfernt. Die Zeit beginnt in dem Moment zu laufen, in dem der User die Servergruppe erhält. Die Zeit läuft weiterhin ab, auch wenn der User offline ist.
3) Gebe einem oder mehreren Usern die definierte Servergruppe auf dem TS Server, um sie zu boosten.";
@@ -406,6 +452,8 @@
$lang['wichpw2'] = "Die neuen Passwörter stimmen nicht überein. Versuche es erneut.";
$lang['wichpw3'] = "Das Passwort für das Webinterface wurde erfolgreich geändert. Anforderung von IP %s.";
$lang['wichpw4'] = "Passwort ändern";
+$lang['wicmdlinesec'] = "Befehlszeilenprüfung";
+$lang['wicmdlinesecdesc'] = "Der Ranksystem Bot hat einen Sicherheitscheck, dass dieser nur per Befehlszeile gestartet wird. Diese Methode wird automatisch angewandt, wenn er über das Webinterface ausgeführt wird.
In bestimmten Systemumgebungen kann es notwendig sein, diesen Sicherheitscheck zu deaktivieren, damit der Bot gestartet wird. In diesem Fall ist eine systemspezifische manuelle Prüfroutine zu aktivieren, damit der Bot nicht von Außen ausgeführt werden kann (über die URL jobs/bot.php)
Deaktiviere diese Funktion NICHT, wenn der Bot auf dem System bereits lauffähig ist!";
$lang['wiconferr'] = "Es ist ein Fehler in der Konfiguration des Ranksystems. Bitte prüfe im Webinterface die Rank-Einstellungen auf Richtigkeit!";
$lang['widaform'] = "Datumsformat";
$lang['widaformdesc'] = "Gebe ein Datumsformat zur Anzeige vor.
Beispiel: %a Tage, %h Std., %i Min., %s Sek.";
@@ -471,6 +519,14 @@
$lang['wihladm35'] = "Starte Reset";
$lang['wihladm36'] = "Bot danach stoppen";
$lang['wihladm36desc'] = "Ist diese Option aktiviert, wird der Ranksystem Bot gestoppt, nachdem alle Reset-Dinge erledigt sind.
Dieser Stop funktioniert exakt wie der normale Stop-Befehl. Heißt, der Bot wird nicht durch den 'check' Parameter gestartet.
Um den Ranksystem Bot zu starten, benutze den 'start' oder 'restart' Parameter.";
+$lang['wihladm4'] = "Lösche User";
+$lang['wihladm4desc'] = "Wähle einen oder mehrere User, um sie aus der Ranksystem Datenbank zu löschen. Der vollständige User wird damit gelöscht inkl. aller Informationen, wie z.B. die gesammelten Zeiten.
Die Löschung hat keine Auswirkungen auf den TeamSpeak Server. Wenn der User in der TS Datenbank noch existiert, wird er durch diese Funktion dort nicht gelöscht.";
+$lang['wihladm41'] = "Möchtest du wirklich die folgenden User löschen?";
+$lang['wihladm42'] = "Achtung: Sie können nicht wiederhergestellt werden!";
+$lang['wihladm43'] = "Ja, löschen";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) wird in wenigen Sekunden aus der Ranksystem Datenbank gelöscht (siehe Ranksystem-Log).";
+$lang['wihladm45'] = "User %s (UUID: %s; DBID: %s) aus der Ranksystem Datenbank gelöscht.";
+$lang['wihladm46'] = "Angefordert über Admin Funktion.";
$lang['wihladmex'] = "Datenbank Export";
$lang['wihladmex1'] = "Datenbank Export Job erfolgreich abgeschlossen.";
$lang['wihladmex2'] = "Beachte:%s Das Passwort für den ZIP Container ist das aktuelle TS3 Query-Passwort:";
@@ -490,6 +546,8 @@
$lang['wihladmrs14'] = "Nein, abbrechen";
$lang['wihladmrs15'] = "Bitte wähle zumindest eine Option!";
$lang['wihladmrs16'] = "aktiviert";
+$lang['wihladmrs17'] = "Drücke %s Abbrechen %s um den Export abzubrechen.";
+$lang['wihladmrs18'] = "Job(s) wurde erfolgreich abgebrochen!";
$lang['wihladmrs2'] = "in Bearbeitung..";
$lang['wihladmrs3'] = "fehlerhaft (mit Fehlern beendet!)";
$lang['wihladmrs4'] = "fertig";
diff --git a/languages/core_en_english_gb.php b/languages/core_en_english_gb.php
index dbcdd01..2bc0527 100644
--- a/languages/core_en_english_gb.php
+++ b/languages/core_en_english_gb.php
@@ -4,6 +4,53 @@
$lang['adduser'] = "Added new user %s (unique Client-ID: %s; Client-database-ID %s) to the Ranksystem database.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascending";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot is stopped.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "repeat";
$lang['resettime'] = "Reset the online and idle time of user %s (unique Client-ID: %s; Client-database-ID %s) to zero, cause user got removed out of an exception (servergroup or client exception).";
$lang['sccupcount'] = "Active time of %s seconds for the unique Client-ID (%s) will be added in a few seconds (have a look to the Ranksystem log).";
-$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s); requested about admin function.";
+$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s).";
$lang['setontime'] = "add time";
$lang['setontime2'] = "remove time";
$lang['setontimedesc'] = "Add online time to the previous selected clients. Each user will get this time additional to his old online time.
The entered online time will be considered for the rank up and should take effect immediately.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "The new passwords mismatch. Please try again.";
$lang['wichpw3'] = "The password of the webinterface has been successfully changed. Requested from IP %s.";
$lang['wichpw4'] = "Change Password";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "There is an error in the configuration of the Ranksystem. Please go to the webinterface and correct the rank settings!";
$lang['widaform'] = "Date format";
$lang['widaformdesc'] = "Choose the showing date format.
Example: %a days, %h hours, %i mins, %s secs";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function.";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "enabled";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "in progress..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "finished";
diff --git "a/languages/core_es_espa\303\261ol_es.php" "b/languages/core_es_espa\303\261ol_es.php"
index 80861b8..aa8ccfd 100644
--- "a/languages/core_es_espa\303\261ol_es.php"
+++ "b/languages/core_es_espa\303\261ol_es.php"
@@ -4,6 +4,53 @@
$lang['adduser'] = "Usuario %s (ID de cliente unico: %s; ID de base de datos del cliente %s) es desconocida -> agregada a Ranksystem ahora.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascending";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot is stopped.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "repetir";
$lang['resettime'] = "Restablecer el tiempo en línea y inactivo del usuario %s (ID de cliente unica: %s; ID de cliente en base de datos %s) a cero, causa que el usuario sea eliminado de la excepción.";
$lang['sccupcount'] = "Tiempo activo de %s segundos para el ID de cliente unica (%s) se agregará en unos segundos (echa un vistazo al log de Ranksystem).";
-$lang['sccupcount2'] = "Agregar un tiempo activo de %s segundos para el ID de cliente unica (%s); solicitado sobre la función de administrador.";
+$lang['sccupcount2'] = "Agregar un tiempo activo de %s segundos para el ID de cliente unica (%s).";
$lang['setontime'] = "agregar tiempo";
$lang['setontime2'] = "eliminar el tiempo";
$lang['setontimedesc'] = "Agregue tiempo en línea a los clientes seleccionados previamente. Cada usuario obtendrá este tiempo adicional a su anterior tiempo en línea.
El tiempo en línea ingresado será considerado para el rango ascendente y debe entrar en vigencia inmediatamente.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "Las nuevas contraseñas no coinciden. Inténtalo de nuevo.";
$lang['wichpw3'] = "La contraseña de la interfaz web ha sido modificada con éxito. Solicitud de IP %s.";
$lang['wichpw4'] = "Cambia la contraseña";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "Hay un error en la configuración del Ranksystem. Vaya a la webinterface y corrija la Configuración rank!";
$lang['widaform'] = "Formato de fecha";
$lang['widaformdesc'] = "Elija el formato de fecha que se muestra.
Ejemplo: %a dias, %h horas, %i minutos, %s segundos";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "solicitado sobre la función de administrador.";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "enabled";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "in progress..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "finished";
diff --git "a/languages/core_fr_fran\303\247ais_fr.php" "b/languages/core_fr_fran\303\247ais_fr.php"
index dfb4f9b..280e5ef 100644
--- "a/languages/core_fr_fran\303\247ais_fr.php"
+++ "b/languages/core_fr_fran\303\247ais_fr.php"
@@ -4,6 +4,53 @@
$lang['adduser'] = "L'utilisateur %s (Identifiant unique: %s; ID dans la base de donnée: %s) est inconnu -> Il vient d'être ajouté dans le Ranksystem.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascending";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot is stopped.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "Répéter";
$lang['resettime'] = "Réinitialiser le temps d'inactivité et d'inactivité de l'utilisateur %s (Identifiant unique: %s; ID dans la base de donnée %s) à zéro, parce que l'utilisateur a été supprimé de l'exception.";
$lang['sccupcount'] = "Active time of %s seconds for the unique Client-ID (%s) will be added in a few seconds (have a look to the Ranksystem log).";
-$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s); requested about admin function.";
+$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s).";
$lang['setontime'] = "ajouter du temps";
$lang['setontime2'] = "remove time";
$lang['setontimedesc'] = "Ajouter du temps en ligne aux anciens clients sélectionnés. Chaque utilisateur obtiendra ce temps supplémentaire à son ancien temps en ligne.
Le nouveau temps en ligne entré sera considéré pour le rang et devrait prendre effet immédiatement.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "Les nouveaux mots de passe ne sont pas identiques. Veuillez réessayer.";
$lang['wichpw3'] = "Le mot de passe de l'interface Web a été modifié avec succès. Demande de l'adresse IP %s.";
$lang['wichpw4'] = "Changer le mot de passe";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "Il y a une erreur dans la configuration du Ranksystem. Veuillez aller à l'interface Web et corriger les paramètres de rank (coeur)!";
$lang['widaform'] = "Format de date";
$lang['widaformdesc'] = "Choisissez le format de date à afficher.
Exemple: %a jours, %h heures, %i minutes, %s secondes";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,7 +543,7 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "enabled";
$lang['wihladmrs2'] = "in progress..";
diff --git a/languages/core_hu_Hungary_hu.php b/languages/core_hu_Hungary_hu.php
index aa0130d..bcb2bae 100644
--- a/languages/core_hu_Hungary_hu.php
+++ b/languages/core_hu_Hungary_hu.php
@@ -4,6 +4,53 @@
$lang['adduser'] = "Felhasználó %s (unique Client-ID: %s; Client-database-ID %s) ismeretlen -> hozzáadva a Ranksystemhez.";
$lang['api'] = "API";
$lang['apikey'] = "API Kulcs";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "emelkedő";
$lang['autooff'] = "Automatikus indítás kikapcsolva";
$lang['botoff'] = "A bot jelenleg nem fut.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "Ismét";
$lang['resettime'] = "Nullázza a felhasználó online és tétlen idejét %s (unique Client-ID: %s; Client-database-ID %s) nullára, oka, hogy a felhasználót eltávolították egy kivételből (szervercsoport vagy kliens kivétel).";
$lang['sccupcount'] = "%s másodperc az (%s) unique Client-ID-hez hozzá lesz adva egy pillanat alatt (nézd meg a Ranksystem naplót).";
-$lang['sccupcount2'] = "%s másodperc aktív idő hozzáadva az unique Client-ID-hez (%s); admin funkció kérésére.";
+$lang['sccupcount2'] = "%s másodperc aktív idő hozzáadva az unique Client-ID-hez (%s)";
$lang['setontime'] = "Idő hozzáadás";
$lang['setontime2'] = "Idő elvétel";
$lang['setontimedesc'] = "Adjon hozzá online időt az előzőleg kiválasztott ügyfelekhez. Minden felhasználó megkapja ezt az időt a régi online idejéhez képest.
A megadott online időt a rangsorolás során figyelembe veszik, és azonnal hatályba lép.";
@@ -158,8 +205,8 @@
$lang['stag0017'] = "Ellenőrizd itt..";
$lang['stag0018'] = "A kivételezett szervercsoportok listája. Ha egy felhasználó rendelkezik a szervercsoportok egyikével, akkor nem fogja tudni használni a kiegészítőt.";
$lang['stag0019'] = "Kivételezve vagy ebből a funkcióból, mert ezzel a szervercsoporttal rendelkezel: %s (ID: %s).";
-$lang['stag0020'] = "Title";
-$lang['stag0021'] = "Enter a title for this group. The title will be shown also on the statistics page.";
+$lang['stag0020'] = "Cím";
+$lang['stag0021'] = "Adjon meg egy címet ennek a csoportnak. A cím a statisztikai oldalon is megjelenik.";
$lang['stix0001'] = "Szerver statisztika";
$lang['stix0002'] = "Összes felhasználó";
$lang['stix0003'] = "Részletek megtekintése";
@@ -386,7 +433,7 @@
$lang['wiadmuuid'] = "Bot-Admin";
$lang['wiadmuuiddesc'] = "Válassza ki a felhasználót, aki a Ranksystem rendszergazdaja. Többféle választás is lehetséges.
Az itt felsorolt felhasználók a TeamSpeak szerver felhasználói. Legyen biztos, hogy online van. Ha offline állapotban van, lépjen online, indítsa újra a Ranksystem Bot szoftvert, és töltse be újra ezt a webhelyet.
A Ranksystem rendszergazdája a következő jogosultságokkal rendelkezik:
- a webinterfész jelszavának visszaállítása. (Megjegyzés: A rendszergazda meghatározása nélkül nem lehet visszaállítani a jelszót!)
- Bot parancsok használata a Bot-Admin privilégiumokkal (%sitt%s található a parancsok listája.)";
$lang['wiapidesc'] = "Az API-val lehet adatokat (amelyeket a Ranksytem gyűjtött) harmadik féltől származó alkalmazásokba továbbítani.
Az információk fogadásához API-kulccsal kell hitelesítenie magát. Ezeket a kulcsokat itt kezelheti.
Az API elérhető itt: %s
Az API JSON karakterláncként generálja a kimenetet. Mivel az API-t önmagában dokumentálja, csak ki kell nyitnia a fenti linket és követnie kell az utasításokat.";
-$lang['wiboost'] = "Boost";
+$lang['wiboost'] = "Gyorsító";
$lang['wiboost2desc'] = "Definiálhat csoportokat, például a felhasználók jutalmazására. Ezzel gyorsabban gyűjtik az időt (növelik), és így gyorsabban jutnak a következő rangsorba.
Lépések:
1) Hozzon létre egy szervercsoportot a kiszolgálón, amelyet fel kell használni a növeléshez.
2) Adja meg a lendület meghatározását ezen a webhelyen.
Szervercsoport: Válassza ki azt a szervercsoportot, amely indítja el a lendületet.
Boost Tényező: Az a tényező, amely növeli annak a felhasználónak az online / aktív idejét, aki a csoportot birtokolta (példa kétszer). Faktorként decimális szám is lehetséges (1.5. Példa). A tizedes helyeket ponttal kell elválasztani!
Tartam Másodpercben: Határozza meg, mennyi ideig legyen aktív a feltöltés. Az idő lejártakor, az emlékeztető szervercsoport automatikusan eltávolításra kerül az érintett felhasználótól. Az idő akkor fut, amikor a felhasználó megkapja a szervercsoportot. Nem számít, hogy a felhasználó online vagy nem, az időtartam fogy.
3) Adjon egy vagy több felhasználót a TS-kiszolgálón a meghatározott szervercsoporthoz, hogy növeljék őket.";
$lang['wiboostdesc'] = "Adjon egy felhasználónak a TeamSpeak szerverén szervercsoportot (manuálisan kell létrehozni), amelyet itt növelő csoportnak lehet nyilvánítani. Adjon meg egy tényezőt is, amelyet használni kell (például kétszer), és egy időt, ameddig a lendületet értékelni kell. Minél magasabb a tényező, annál gyorsabban eléri a felhasználó a következő magasabb rangot. Az idő lejártakor, az emlékeztető szervercsoport automatikusan eltávolításra kerül az érintett felhasználótól. Az idő akkor fut, amikor a felhasználó megkapja a szervercsoportot.
Faktorként decimális szám is lehetséges. A tizedes helyeket ponttal kell elválasztani!
szervercsoport ID => tényező => idő (másodpercben)
Minden bejegyzést vesszővel kell elválasztani a következőtől.
Example:
12=>2=>6000,13=>1.25=>2500,14=>5=>600
Itt a 12 szervercsoport felhasználója megkapja a 2-es tényezőt a következő 6000 másodpercre, a 13-as kiszolgálócsoportban lévő felhasználó 1,25-es tényezőt kap 2500 másodpercre, és így tovább...";
$lang['wiboostempty'] = "Nincs bejegyzés. Kattintson a plusz szimbólumra annak meghatározásához!";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "Az új jelszavak nem egyeznek meg. Kérlek próbáld újra.";
$lang['wichpw3'] = "A webinterfész jelszava sikeresen megváltozott. Erről az IP-ről: %s.";
$lang['wichpw4'] = "Jelszó megváltoztatása";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "Hiba történt a Ranksystem konfigurációjában. Kérjük, lépjen a webes felületre, és javítsa ki a Core beállításokat. Különösen ellenőrizze a 'rangsor meghatározását'!";
$lang['widaform'] = "Dátum forma";
$lang['widaformdesc'] = "Válassza ki a megjelenő dátumformátumot.
Példa: %a nap, %h óra, %i perc, %s másodperc";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "visszaállítás indítása";
$lang['wihladm36'] = "Állítsa le a Botot a visszaállítás után";
$lang['wihladm36desc'] = "Ha ezt az opciót aktiválta, a Bot leáll, miután az összes visszaállítási művelet megtörtént.
Ez a leállítás pontosan úgy működik, mint a normál 'leállítás' paraméter. Ez azt jelenti, hogy a Bot nem nem indul el az 'ellenőrző' paraméterrel.
A Ranksystem Bot elindításához használja az 'indítás' vagy 'újraindítás' funkciót.";
+$lang['wihladm4'] = "Felhasználó törlése";
+$lang['wihladm4desc'] = "Válasszon ki egy vagy több felhasználót, hogy törölje őket a Ranksystem adatbázisból. A teljes felhasználó eltávolításra kerül, és minden mentett információban, például az összegyűjtött időkben.
A törlés nem érinti a TeamSpeak szervert. Ha a felhasználó még mindig létezik a TS adatbázisban, akkor ez a funkció nem törli.";
+$lang['wihladm41'] = "Tényleg törölni szeretné a következő felhasználót?";
+$lang['wihladm42'] = "Figyelem: Nem állíthatók vissza!";
+$lang['wihladm43'] = "Igen, törlés";
+$lang['wihladm44'] = "%s felhasználó (UUID: %s; DBID: %s) néhány másodperc alatt eltávolításra kerül a Ranksystem adatbázisból (nézze meg a Ranksystem naplóját).";
+$lang['wihladm45'] = "%s felhasználó (UUID: %s; DBID: %s) törölve lett a RankSystem adatbázisából.";
+$lang['wihladm46'] = "Admin funkció kérésére.";
$lang['wihladmex'] = "Adatbázis-exportálás";
$lang['wihladmex1'] = "Az adatbázis-exportáló feladat sikeresen létrehozva.";
$lang['wihladmex2'] = "Megjegyzés: %s A ZIP-tároló jelszava az aktuális TS3 Query-Jelszó:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Becsült idő a munka befejezéséig";
$lang['wihladmrs12'] = "Biztos benne, hogy továbbra is vissza szeretné állítani a rendszert?";
$lang['wihladmrs13'] = "Igen, indítsa el az alaphelyzetbe állítást";
-$lang['wihladmrs14'] = "Nem, törölje a visszaállítást";
+$lang['wihladmrs14'] = "Nem, törölje";
$lang['wihladmrs15'] = "Kérjük, válasszon legalább egy lehetőséget!";
$lang['wihladmrs16'] = "engedélyezve";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "folyamatban..";
$lang['wihladmrs3'] = "hibás (hibával véget ért!)";
$lang['wihladmrs4'] = "befejezve";
@@ -504,7 +563,7 @@
$lang['wiimpaddrdesc'] = "Írja be ide nevét és címét. Például:
Max Mustermann<br> Musterstrasse 13<br> 05172 Musterhausen<br> Germany
";
$lang['wiimpaddrurl'] = "Imprint URL";
$lang['wiimpaddrurldesc'] = "Adjon meg egy URL-t a saját impresszum webhelyéhez.
Például:
https://site.url/imprint/
Üresítse ki ezt a mezőt, hogy a többi mező használatával megjelenítse az impresszumot a Ranksystem stats webhelyen.";
-$lang['wiimpemail'] = "E-Mail Address";
+$lang['wiimpemail'] = "E-Mail cím";
$lang['wiimpemaildesc'] = "Ide írja be e-mail címét. Például:
info@example.com
";
$lang['wiimpnotes'] = "További információ";
$lang['wiimpnotesdesc'] = "Adjon ide további információkat, például felelősség kizárását. Hagyja üresen a mezőt, hogy ez a szakasz ne jelenjen meg. HTML-kód a formázás megengedett.";
@@ -529,7 +588,7 @@
$lang['winav11'] = "Kérjük, definiáljon egy Bot-Rendszergazdát, aki a Ranksystem adminisztrátora legyen (TeamSpeak -> Bot-Admin). Ez nagyon fontos abban az esetben, ha elvesztette a webes felület bejelentkezési adatait.";
$lang['winav12'] = "Kiegészítők";
$lang['winav13'] = "Általános (Stat.)";
-$lang['winav14'] = "You have disabled the navbar of the statistics page. You might want to embed the statistic page with an IFrame into another website? Then have a look in this FAQ:";
+$lang['winav14'] = "Letiltotta a statisztikai oldal navigációs sávját. Érdemes beágyaznia a statisztikai oldalt egy IFrame kerettel egy másik webhelybe? Akkor nézze meg ezt a GYIK-ot:";
$lang['winav2'] = "Adatbázis";
$lang['winav3'] = "Alapvető paraméterek";
$lang['winav4'] = "Egyéb";
@@ -575,8 +634,8 @@
$lang['wishcolhadesc'] = "A TeamSpeak 3 szerver tárolja az egyes ügyfelek IP-címét. Erre szükségünk van a Ranksystem számára, hogy a statisztikai oldal webhelyének használóját a kapcsolódó TeamSpeak felhasználóval kösse.
Ezzel a funkcióval aktiválhatja a TeamSpeak felhasználók IP-címeinek titkosítását / kivonását. Ha engedélyezve van, csak a kivonatolt érték kerül az adatbázisba, ahelyett, hogy egyszerű szövegben tárolná. Erre bizonyos esetekben szükség van az adatvédelmi törvényekre; különösen az EU-GDPR miatt szükséges.
fast hashing (alapértelmezett): Az IP-címek kivágásra kerülnek. A só az egyes rangsorrendszer-példányoknál eltérő, de a kiszolgálón lévő összes felhasználó esetében azonos. Ez gyorsabbá, ugyanakkor gyengébbé teszi a 'biztonságos kivonást' is.
secure hashing: Az IP-címek kivágásra kerülnek. Minden felhasználó megkapja a saját sóját, ami megnehezíti az IP visszafejtését (= biztonságos). Ez a paraméter megfelel az EU-GDPR-nek. Kontra: Ez a variáció befolyásolja a teljesítményt, különösen a nagyobb TeamSpeak szervereknél, ez nagyon lelassítja a statisztikai oldalt az első webhely betöltésekor. Emellett feltárja a szükséges erőforrásokat.
disable hashing: Ha ezt a funkciót letiltja, a felhasználó IP-címét egyszerű szövegben tárolja. Ez a leggyorsabb lehetőség, amely a legkevesebb erőforrást igényli.
Minden változatban a felhasználók IP-címét csak addig tároljuk, amíg a felhasználó csatlakozik a TS3 szerverhez (kevesebb adatgyűjtés - EU-GDPR).
A felhasználók IP-címét csak akkor tárolják, amikor a felhasználó csatlakozik a TS3 szerverhez. Ennek a funkciónak a megváltoztatásakor a felhasználónak újból csatlakoznia kell a TS3 szerverhez, hogy ellenőrizhesse a Ranksystem weboldalt.";
$lang['wishcolot'] = "online idő";
$lang['wishdef'] = "Alapértelmezett oszloprendezés";
-$lang['wishdef2'] = "2nd column sort";
-$lang['wishdef2desc'] = "Define the second sorting level for the List Rankup page.";
+$lang['wishdef2'] = "2. oszlop rendezés";
+$lang['wishdef2desc'] = "Határozza meg a második rendezési szintet a Lista rangsorolása oldalhoz.";
$lang['wishdefdesc'] = "Adja meg az alapértelmezett rendezési oszlopot a Lista rangsorolása oldalhoz.";
$lang['wishexcld'] = "Kivételezett kliens";
$lang['wishexclddesc'] = "Az ügyfelek megjelenítése a list_rankup.php fájlban, amelyek kizártak, és ezért nem vesznek részt a rangrendszerben.";
@@ -593,8 +652,8 @@
$lang['wishnav'] = "Webhely-navigáció mutatása";
$lang['wishnavdesc'] = "Mutassa meg a weblap navigációját a 'statisztika /' oldalon.
Ha ezt a lehetőséget deaktiválja a statisztikai oldalon, akkor a webhely navigációja rejtve marad. Ezután elfoglalhatja az egyes webhelyeket, pl. 'stats / list_rankup.php', és ágyazza be ezt keretként a meglévő webhelyére vagy a hirdetőtáblába.";
$lang['wishsort'] = "Alapértelmezett rendezési sorrend";
-$lang['wishsort2'] = "2nd sorting order";
-$lang['wishsort2desc'] = "This will define the order for the second level sorting.";
+$lang['wishsort2'] = "2. rendezési sorrend";
+$lang['wishsort2desc'] = "Ez meghatározza a második szintű rendezés sorrendjét.";
$lang['wishsortdesc'] = "Adja meg az alapértelmezett rendezési sorrendet a Lista rangsorolása oldalhoz.";
$lang['wistcodesc'] = "Adja meg a szükséges kiszolgáló-összeköttetések számát az eredmény eléréséhez.";
$lang['wisttidesc'] = "Adja meg az eléréshez szükséges időt (órákban).";
diff --git a/languages/core_it_Italiano_it.php b/languages/core_it_Italiano_it.php
index d6a7478..cc17562 100644
--- a/languages/core_it_Italiano_it.php
+++ b/languages/core_it_Italiano_it.php
@@ -4,6 +4,53 @@
$lang['adduser'] = "L'utente %s ( Client-ID: %s; Client-database-ID %s) non è presente nel database -> L'utente è stato aggiunto al sistema.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascending";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot is stopped.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "ripetere";
$lang['resettime'] = "Resetta il tempo online e in idle dell'utente %s (Client-ID univico: %s; Client-database-ID %s), perchè è stato rimmosso perchè escluso.";
$lang['sccupcount'] = "Active time of %s seconds for the unique Client-ID (%s) will be added in a few seconds (have a look to the Ranksystem log).";
-$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s); requested about admin function.";
+$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s).";
$lang['setontime'] = "aggiungi tempo";
$lang['setontime2'] = "remove time";
$lang['setontimedesc'] = "Aggiungi tempo online agli utenti precedentemente selezionati. Ogni utente avrà questo tempo addizionale aggiunto al loro vecchio tempo online.
Il tempo online digitato sarà considerato per l'aumento di rank e avrà effetto immediato.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "La nuova password non corrisponde. Riprova.";
$lang['wichpw3'] = "La password è stata cambiata con successo. Connettiti con le credenziali su IP %s.";
$lang['wichpw4'] = "Cambia Password";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "C'è un errore nella configurazione del RankSystem. Vai nell'interfaccia web i sistema le Impostazioni rank!";
$lang['widaform'] = "Formato data";
$lang['widaformdesc'] = "scegli il formato della data.
Esempio: %a Giorni, %h Ore, %i Min, %s Sec";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "enabled";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "in progress..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "finished";
diff --git a/languages/core_nl_Nederlands_nl.php b/languages/core_nl_Nederlands_nl.php
index 7dda3c3..2c39bb0 100644
--- a/languages/core_nl_Nederlands_nl.php
+++ b/languages/core_nl_Nederlands_nl.php
@@ -4,6 +4,53 @@
$lang['adduser'] = "Gebruiker %s (unieke Client-ID: %s; Client-database-ID %s) is onbekend -> zojuist toegevoegd aan ranksysteem.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascending";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot is stopped.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "herhalen";
$lang['resettime'] = "Reset the online and idle time of user %s (unique Client-ID: %s; Client-database-ID %s) to zero, cause user got removed out of exception.";
$lang['sccupcount'] = "Active time of %s seconds for the unique Client-ID (%s) will be added in a few seconds (have a look to the Ranksystem log).";
-$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s); requested about admin function.";
+$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s).";
$lang['setontime'] = "voeg tijd toe";
$lang['setontime2'] = "remove time";
$lang['setontimedesc'] = "Voeg online tijd toe aan de hiervoor geselecteerde clients. Elke gebruiker zal de tijd erbij krijgen op hun oude online tijd.
De ingevoerde online tijd zal onmiddelijk plaatsvinden en de servergroepen zullen meteen worden toegevoegd.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "The new passwords dismatch. Please try again.";
$lang['wichpw3'] = "The password of the webinterface has been successfully changed. Request from IP %s.";
$lang['wichpw4'] = "Change Password";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "There is an error in the configuration of the Ranksystem. Please go to the webinterface and correct the rank settings!";
$lang['widaform'] = "Date format";
$lang['widaformdesc'] = "Choose the showing date format.
Example: %a days, %h hours, %i mins, %s secs";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "enabled";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "in progress..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "finished";
diff --git a/languages/core_pl_polski_pl.php b/languages/core_pl_polski_pl.php
index b1de754..8dcfa17 100644
--- a/languages/core_pl_polski_pl.php
+++ b/languages/core_pl_polski_pl.php
@@ -4,6 +4,53 @@
$lang['adduser'] = "Użytkownik %s (unique Client-ID: %s; Client-database-ID %s) jest nieznany -> dodany do Ranksystemu teraz.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascending";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot nie działa.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "Powtórz";
$lang['resettime'] = "Zresetuj czas online i czas bezczynnosci użytkownika %s (unique Client-ID: %s; Client-database-ID %s) na zero, poniewaz uzytkownik został usuniety z wyjątku.";
$lang['sccupcount'] = "Active time of %s seconds for the unique Client-ID (%s) will be added in a few seconds (have a look to the Ranksystem log).";
-$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s); requested about admin function.";
+$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s).";
$lang['setontime'] = "Dodaj czas";
$lang['setontime2'] = "Usuń czas";
$lang['setontimedesc'] = "Dodaj czas online do poprzednio wybranych klientów. Każdy użytkownik otrzyma dodatkowy czas na swój stary czas online.
Wprowadzony czas online zostanie uwzględniony w rankingu i powinień natychmiast obowiązywać.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "Nowe hasła się psują. Prosze sprobuj ponownie.";
$lang['wichpw3'] = "Hasło interfejsu WWW zostało pomyslnie zmienione. Żądanie z adresu IP %s.";
$lang['wichpw4'] = "Zmień hasło";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "Wystąpił błąd w konfiguracji systemu Ranksystem. Przejdz do interfejsu sieciowego i popraw ustawienia podstawowe. Szczegolnie sprawdz konfiguracje 'rank up'!";
$lang['widaform'] = "Format daty";
$lang['widaformdesc'] = "Wybierz format daty wyświetlania.
Przykład: %a days, %h hours, %i mins, %s secs";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Proszę wybrać co najmniej jedną opcję!";
$lang['wihladmrs16'] = "enabled";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "w toku..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "finished";
diff --git "a/languages/core_pt_Portugu\303\252s_pt.php" "b/languages/core_pt_Portugu\303\252s_pt.php"
index d750c71..595ff05 100644
--- "a/languages/core_pt_Portugu\303\252s_pt.php"
+++ "b/languages/core_pt_Portugu\303\252s_pt.php"
@@ -4,6 +4,53 @@
$lang['adduser'] = "O usuário %s (ID-Ùnica: %s; Cliente-banco de dados-ID %s) é desconhecido -> adicionado ao sistema de ranking agora.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascendente";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot está parado.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "repetir";
$lang['resettime'] = "Redefinir o tempo de inatividade e tempo livre do usuário %s (ID-Ùnica: %s; Cliente-database-ID %s) para zero, porque o usuário foi removido fora da exceção.";
$lang['sccupcount'] = "Tempo ativo de %s segundos para o Client-ID única(%s) será adicionado em alguns segundos (dê uma olhada no log do Ranksystem).";
-$lang['sccupcount2'] = "Adicionado um tempo ativo de %s segundos para o Client-ID única (%s); solicitado sobre a função de administrador.";
+$lang['sccupcount2'] = "Adicionado um tempo ativo de %s segundos para o Client-ID única (%s).";
$lang['setontime'] = "tempo extra";
$lang['setontime2'] = "remover tempo";
$lang['setontimedesc'] = "Adicione tempo online aos clientes selecionados. Cada usuário obterá esse tempo adicional ao seu antigo tempo online.
O tempo online estabelecido será considerado para o ranking e deverá entrar em vigor imediatamente.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "As novas senhas são incompatíveis. Por favor, tente novamente.";
$lang['wichpw3'] = "A senha da interface web foi alterada com sucesso. Pedido do IP %s.";
$lang['wichpw4'] = "Mudar senha";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "Há um erro na configuração do Sistema de ranking. Acesse a interface da web e corrija as Configurações do núcleo. Especialmente verifique o config 'Classificações'!!";
$lang['widaform'] = "Formato de data";
$lang['widaformdesc'] = "Escolha o formato da data de exibição.
Exemplo: %a Dias, %h horas, %i minutos, %s segundos";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "iniciar redefinição";
$lang['wihladm36'] = "parar o Bot depois";
$lang['wihladm36desc'] = "Esta opção está ativada, o bot irá parar depois que todas as redefinições forem feitas.
O Bot irá parar após todas as tarefas de redefinição serem feitas. Essa parada está funcionando exatamente como o parâmetro normal 'parar'. Significa que o Bot não começará com o parâmetro 'checar'.
Para iniciar o sistema de ranking, use o parâmetro 'iniciar' ou 'reiniciar'.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Solicitado sobre a função de administrador.";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Tem certeza de que ainda deseja redefinir o sistema?";
$lang['wihladmrs13'] = "Sim, inicie a redefinição";
-$lang['wihladmrs14'] = "Não, cancelar redefinição";
+$lang['wihladmrs14'] = "Não, cancelar";
$lang['wihladmrs15'] = "Por favor, escolha pelo menos uma opção!";
$lang['wihladmrs16'] = "ativado";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "em progresso..";
$lang['wihladmrs3'] = "falhou (terminou com erros!)";
$lang['wihladmrs4'] = "terminou";
diff --git "a/languages/core_ro_Rom\303\242n\304\203_ro.php" "b/languages/core_ro_Rom\303\242n\304\203_ro.php"
index 174de13..81cd018 100644
--- "a/languages/core_ro_Rom\303\242n\304\203_ro.php"
+++ "b/languages/core_ro_Rom\303\242n\304\203_ro.php"
@@ -4,6 +4,53 @@
$lang['adduser'] = "Userul %s (unique Client-ID: %s; Client-database-ID %s) este necunoscut -> adaugat la Sistem Rank acum.";
$lang['api'] = "API";
$lang['apikey'] = "API Key";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "ascending";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Bot is stopped.";
@@ -121,7 +168,7 @@
$lang['repeat'] = "reptere";
$lang['resettime'] = "Reset timp online si idle pentru userul: %s (ID: %s; ID baza de date %s), motiv: a fost sters din lista de exceptie.";
$lang['sccupcount'] = "Ai adaugat cu succes timp online: %s pentru userul cu ID(%s)";
-$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s); requested about admin function.";
+$lang['sccupcount2'] = "Add an active time of %s seconds for the unique Client-ID (%s).";
$lang['setontime'] = "adauga timp";
$lang['setontime2'] = "remove time";
$lang['setontimedesc'] = "Add online time to the previous selected clients. Each user will get this time additional to their old online time.
The entered online time will be considered for the rank up and should take effect immediately.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "The new passwords dismatch. Please try again.";
$lang['wichpw3'] = "The password of the webinterface has been successfully changed. Request from IP %s.";
$lang['wichpw4'] = "Schimba parola";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "There is an error in the configuration of the Ranksystem. Please go to the webinterface and correct the rank settings!";
$lang['widaform'] = "Format data";
$lang['widaformdesc'] = "Choose the showing date format.
Example: %a days, %h hours, %i mins, %s secs";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "start reset";
$lang['wihladm36'] = "stop Bot afterwards";
$lang['wihladm36desc'] = "Is this option activated, the Bot will stop after all reset things are done.
This stop is exactly working like the normal 'stop' parameter. Means, the Bot will not start with the 'check' parameter.
To start the Ranksystem Bot use the 'start' or 'restart' parameter.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Are you sure, you still want to reset the system?";
$lang['wihladmrs13'] = "Yes, start reset";
-$lang['wihladmrs14'] = "No, cancel reset";
+$lang['wihladmrs14'] = "No, cancel";
$lang['wihladmrs15'] = "Please choose at least one option!";
$lang['wihladmrs16'] = "enabled";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "in progress..";
$lang['wihladmrs3'] = "faulted (ended with errors!)";
$lang['wihladmrs4'] = "finished";
diff --git "a/languages/core_ru_P\321\203\321\201\321\201\320\272\320\270\320\271_ru.php" "b/languages/core_ru_P\321\203\321\201\321\201\320\272\320\270\320\271_ru.php"
index f5b410a..a53186b 100644
--- "a/languages/core_ru_P\321\203\321\201\321\201\320\272\320\270\320\271_ru.php"
+++ "b/languages/core_ru_P\321\203\321\201\321\201\320\272\320\270\320\271_ru.php"
@@ -4,6 +4,53 @@
$lang['adduser'] = "Пользователь %s (UID: %s; DBID: %s) неизвестен и был успешно добавлен в базу данных системы рангов.";
$lang['api'] = "API";
$lang['apikey'] = "Ключ API";
+$lang['addonchch'] = "Channel";
+$lang['addonchchdesc'] = "Select a channel where you want to set the channel description.";
+$lang['addonchdesc'] = "Channel description";
+$lang['addonchdescdesc'] = "Define here the description, which should be set to the channel, you defined above. The definite description will overwrite the full description, which is currently set in the channel.
You can use all BB-Codes, which are valid inside TeamSpeak.
The following list of variables could be used to set variable values, like a client nickname. Replace '_XXX}' with a sequential number of the TeamSpeak user (between 1 and 10), like '_1}' or '_10}'.
Example:
{$CLIENT_NICKNAME_1}
";
+$lang['addonchdesc2desc'] = "Advanced Options
It is also possible to set an if condition to show some text only, when the condition is true.
All options to change a variable value, are documentated here: %s All possible functions are documentated here: %s";
+$lang['addonchdescdesc00'] = "Variable Name";
+$lang['addonchdescdesc01'] = "Collected active time since ever (all time).";
+$lang['addonchdescdesc02'] = "Collected active time in the last month.";
+$lang['addonchdescdesc03'] = "Collected active time in the last week.";
+$lang['addonchdescdesc04'] = "Collected online time since ever (all time).";
+$lang['addonchdescdesc05'] = "Collected online time in the last month.";
+$lang['addonchdescdesc06'] = "Collected online time in the last week.";
+$lang['addonchdescdesc07'] = "Collected idle time since ever (all time).";
+$lang['addonchdescdesc08'] = "Collected idle time in the last month.";
+$lang['addonchdescdesc09'] = "Collected idle time in the last week.";
+$lang['addonchdescdesc10'] = "Channel database ID, where the user is currently in.";
+$lang['addonchdescdesc11'] = "Channel name, where the user is currently in.";
+$lang['addonchdescdesc12'] = "The variable ending part of the URL of the Group Icon. Set the URL of your Ranksystem in front.";
+$lang['addonchdescdesc13'] = "Group database ID of the current rank group.";
+$lang['addonchdescdesc14'] = "Group name of the current rank group.";
+$lang['addonchdescdesc15'] = "Time, when the user got the last rank up.";
+$lang['addonchdescdesc16'] = "Needed time, to the next rank up.";
+$lang['addonchdescdesc17'] = "Current rank position of all user.";
+$lang['addonchdescdesc18'] = "Country Code by the ip address of the TeamSpeak user.";
+$lang['addonchdescdesc20'] = "Time, when the user has the first connect to the TS.";
+$lang['addonchdescdesc22'] = "Client database ID.";
+$lang['addonchdescdesc23'] = "Client description on the TS server.";
+$lang['addonchdescdesc24'] = "Time, when the user was last seen on the TS server.";
+$lang['addonchdescdesc25'] = "Current/last nickname of the client.";
+$lang['addonchdescdesc26'] = "Status of the user. Output 'Online' or 'Offline'";
+$lang['addonchdescdesc27'] = "Platform Code of the TeamSpeak user.";
+$lang['addonchdescdesc28'] = "Count of the connections to the server.";
+$lang['addonchdescdesc29'] = "Public unique Client ID.";
+$lang['addonchdescdesc30'] = "Client Version of the TeamSpeak user.";
+$lang['addonchdescdesc31'] = "Current time on updating the channel description.";
+$lang['addonchdelay'] = "Delay";
+$lang['addonchdelaydesc'] = "Define a delay, how often the channel description should be updated.
Unless the result (description) has changed, it will not be updated even if the defined time span is exceeded.
Use the variable %LAST_UPDATE_TIME% to force the update when the delay (time span) is reached.";
+$lang['addonchmo'] = "Mode";
+$lang['addonchmo1'] = "Top Week - active time";
+$lang['addonchmo2'] = "Top Week - online time";
+$lang['addonchmo3'] = "Top Month - active time";
+$lang['addonchmo4'] = "Top Month - online time";
+$lang['addonchmo5'] = "Top All Time - active time";
+$lang['addonchmo6'] = "Top All Time - online time";
+$lang['addonchmodesc'] = "Select a mode, which toplist should be set to the channel.
You can choose from a period of a week, a month or since ever (all time). You can also choose by active or online time.";
+$lang['addonchtopl'] = "Channelinfo Toplist";
+$lang['addonchtopldesc'] = "With the 'Channelinfo Toplist' function you always have the current list of top user directly on your TeamSpeak server. It writes the current list in a channel description.
You define, which channel should be used and which statistics should be shown (monthly or weekly and active or online time).
The description is fully customizeable with variables.
TS Permission needed: b_channel_modify_description";
$lang['asc'] = "по возрастанию";
$lang['autooff'] = "autostart is deactivated";
$lang['botoff'] = "Бот остановлен.";
@@ -405,6 +452,8 @@
$lang['wichpw2'] = "Новые пароли не совпадают. Пожалуйста, повторите ввод заново.";
$lang['wichpw3'] = "Пароль для веб-панели успешно изменён. IP инициировавший сброс: IP %s.";
$lang['wichpw4'] = "Изменить пароль";
+$lang['wicmdlinesec'] = "Commandline Check";
+$lang['wicmdlinesecdesc'] = "The Ranksystem bot has a security check to be able to start the bot only via command line. This method will be used by default when starting the bot about the Ranksystem webinterface.
On some system environments it is needed to disable this feature to be able to start the Ranksystem bot. In this case you need to secure your environment yourself to prevent bot starts from outside (via URL jobs/bot.php)
Do NOT disable this function, when the bot is running on your system!";
$lang['wiconferr'] = "Есть ошибка в конфигурации системы рангов. Пожалуйста, выполните вход в панель управления и проверьте настройки раздела 'Настройка системы рангов'. Особенно тщательно проверьте 'Ранги'!";
$lang['widaform'] = "Формат даты";
$lang['widaformdesc'] = "Выберите формат показа даты.
Пример: %a дней, %h часов, %i минут, %s секунд";
@@ -470,6 +519,14 @@
$lang['wihladm35'] = "Начать сброс";
$lang['wihladm36'] = "Остановить систему после завершения";
$lang['wihladm36desc'] = "Если эта опция активна - система рангов выключится после завершения сброса.
Команда остановки отработает точно так же как и обычная команда. Это значит что система рангов не запустится заново через параметр запуска 'check'.
После завершения систему рангов необходимо запустить используя команду 'start' или 'restart'.";
+$lang['wihladm4'] = "Delete user";
+$lang['wihladm4desc'] = "Choose one or multiple user to delete them out of the Ranksystem database. The fully user will be removed and within all saved information, like the collected times.
The deletion doesn't effect the TeamSpeak server. If the user still exists in the TS database, it will not be deleted due this function.";
+$lang['wihladm41'] = "You really want to delete the following user?";
+$lang['wihladm42'] = "Attention: They cannot be restored!";
+$lang['wihladm43'] = "Yes, delete";
+$lang['wihladm44'] = "User %s (UUID: %s; DBID: %s) will be removed out of the Ranksystem database in a few seconds (have a look to the Ranksystem log).";
+$lang['wihladm45'] = "Removed user %s (UUID: %s; DBID: %s) out of the Ranksystem database.";
+$lang['wihladm46'] = "Requested about admin function";
$lang['wihladmex'] = "Database Export";
$lang['wihladmex1'] = "Database Export Job successfully created.";
$lang['wihladmex2'] = "Note:%s The password of the ZIP container is your current TS3 Query-Password:";
@@ -486,9 +543,11 @@
$lang['wihladmrs11'] = "Estimated time until completion the job";
$lang['wihladmrs12'] = "Вы уверены что хотите продолжить? Вся статистика системы рангов будет сброшена!";
$lang['wihladmrs13'] = "Да, начать сброс";
-$lang['wihladmrs14'] = "Нет, отменить сброс";
+$lang['wihladmrs14'] = "Нет, отменить";
$lang['wihladmrs15'] = "Пожалуйста, выберите как минимум один из вариантов!";
$lang['wihladmrs16'] = "включено";
+$lang['wihladmrs17'] = "Press %s Cancel %s to cancel the job.";
+$lang['wihladmrs18'] = "Job(s) was successfully canceled by request!";
$lang['wihladmrs2'] = "в процессе..";
$lang['wihladmrs3'] = "неудачно (завершено с ошибками!)";
$lang['wihladmrs4'] = "успешно";
diff --git a/libs/combined_wi.css b/libs/combined_wi.css
index 69bc57b..3771b48 100644
--- a/libs/combined_wi.css
+++ b/libs/combined_wi.css
@@ -9,5 +9,5 @@ html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:1
/* Flag-Icon 3.5.0 */
.flag-icon-background{background-size:contain;background-position:50%;background-repeat:no-repeat}.flag-icon{background-size:contain;background-position:50%;background-repeat:no-repeat;position:relative;display:inline-block;width:1.33333333em;line-height:1em}.flag-icon:before{content:'\00a0'}.flag-icon-arab{background-image:url(../libs/flags/arab.svg)}.flag-icon-ptbr{background-image:url(../libs/flags/ptbr.svg)}.flag-icon-ad{background-image:url(../libs/flags/ad.svg)}.flag-icon-ae{background-image:url(../libs/flags/ae.svg)}.flag-icon-af{background-image:url(../libs/flags/af.svg)}.flag-icon-ag{background-image:url(../libs/flags/ag.svg)}.flag-icon-ai{background-image:url(../libs/flags/ai.svg)}.flag-icon-al{background-image:url(../libs/flags/al.svg)}.flag-icon-am{background-image:url(../libs/flags/am.svg)}.flag-icon-ao{background-image:url(../libs/flags/ao.svg)}.flag-icon-aq{background-image:url(../libs/flags/aq.svg)}.flag-icon-ar{background-image:url(../libs/flags/ar.svg)}.flag-icon-as{background-image:url(../libs/flags/as.svg)}.flag-icon-at{background-image:url(../libs/flags/at.svg)}.flag-icon-au{background-image:url(../libs/flags/au.svg)}.flag-icon-aw{background-image:url(../libs/flags/aw.svg)}.flag-icon-ax{background-image:url(../libs/flags/ax.svg)}.flag-icon-az{background-image:url(../libs/flags/az.svg)}.flag-icon-ba{background-image:url(../libs/flags/ba.svg)}.flag-icon-bb{background-image:url(../libs/flags/bb.svg)}.flag-icon-bd{background-image:url(../libs/flags/bd.svg)}.flag-icon-be{background-image:url(../libs/flags/be.svg)}.flag-icon-bf{background-image:url(../libs/flags/bf.svg)}.flag-icon-bg{background-image:url(../libs/flags/bg.svg)}.flag-icon-bh{background-image:url(../libs/flags/bh.svg)}.flag-icon-bi{background-image:url(../libs/flags/bi.svg)}.flag-icon-bj{background-image:url(../libs/flags/bj.svg)}.flag-icon-bl{background-image:url(../libs/flags/bl.svg)}.flag-icon-bm{background-image:url(../libs/flags/bm.svg)}.flag-icon-bn{background-image:url(../libs/flags/bn.svg)}.flag-icon-bo{background-image:url(../libs/flags/bo.svg)}.flag-icon-bq{background-image:url(../libs/flags/bq.svg)}.flag-icon-br{background-image:url(../libs/flags/br.svg)}.flag-icon-bs{background-image:url(../libs/flags/bs.svg)}.flag-icon-bt{background-image:url(../libs/flags/bt.svg)}.flag-icon-bv{background-image:url(../libs/flags/bv.svg)}.flag-icon-bw{background-image:url(../libs/flags/bw.svg)}.flag-icon-by{background-image:url(../libs/flags/by.svg)}.flag-icon-bz{background-image:url(../libs/flags/bz.svg)}.flag-icon-ca{background-image:url(../libs/flags/ca.svg)}.flag-icon-cc{background-image:url(../libs/flags/cc.svg)}.flag-icon-cd{background-image:url(../libs/flags/cd.svg)}.flag-icon-cf{background-image:url(../libs/flags/cf.svg)}.flag-icon-cg{background-image:url(../libs/flags/cg.svg)}.flag-icon-ch{background-image:url(../libs/flags/ch.svg)}.flag-icon-ci{background-image:url(../libs/flags/ci.svg)}.flag-icon-ck{background-image:url(../libs/flags/ck.svg)}.flag-icon-cl{background-image:url(../libs/flags/cl.svg)}.flag-icon-cm{background-image:url(../libs/flags/cm.svg)}.flag-icon-cn{background-image:url(../libs/flags/cn.svg)}.flag-icon-co{background-image:url(../libs/flags/co.svg)}.flag-icon-cr{background-image:url(../libs/flags/cr.svg)}.flag-icon-cu{background-image:url(../libs/flags/cu.svg)}.flag-icon-cv{background-image:url(../libs/flags/cv.svg)}.flag-icon-cw{background-image:url(../libs/flags/cw.svg)}.flag-icon-cx{background-image:url(../libs/flags/cx.svg)}.flag-icon-cy{background-image:url(../libs/flags/cy.svg)}.flag-icon-cz{background-image:url(../libs/flags/cz.svg)}.flag-icon-de{background-image:url(../libs/flags/de.svg)}.flag-icon-dj{background-image:url(../libs/flags/dj.svg)}.flag-icon-dk{background-image:url(../libs/flags/dk.svg)}.flag-icon-dm{background-image:url(../libs/flags/dm.svg)}.flag-icon-do{background-image:url(../libs/flags/do.svg)}.flag-icon-dz{background-image:url(../libs/flags/dz.svg)}.flag-icon-ec{background-image:url(../libs/flags/ec.svg)}.flag-icon-ee{background-image:url(../libs/flags/ee.svg)}.flag-icon-eg{background-image:url(../libs/flags/eg.svg)}.flag-icon-eh{background-image:url(../libs/flags/eh.svg)}.flag-icon-er{background-image:url(../libs/flags/er.svg)}.flag-icon-es{background-image:url(../libs/flags/es.svg)}.flag-icon-et{background-image:url(../libs/flags/et.svg)}.flag-icon-fi{background-image:url(../libs/flags/fi.svg)}.flag-icon-fj{background-image:url(../libs/flags/fj.svg)}.flag-icon-fk{background-image:url(../libs/flags/fk.svg)}.flag-icon-fm{background-image:url(../libs/flags/fm.svg)}.flag-icon-fo{background-image:url(../libs/flags/fo.svg)}.flag-icon-fr{background-image:url(../libs/flags/fr.svg)}.flag-icon-ga{background-image:url(../libs/flags/ga.svg)}.flag-icon-gb{background-image:url(../libs/flags/gb.svg)}.flag-icon-gd{background-image:url(../libs/flags/gd.svg)}.flag-icon-ge{background-image:url(../libs/flags/ge.svg)}.flag-icon-gf{background-image:url(../libs/flags/gf.svg)}.flag-icon-gg{background-image:url(../libs/flags/gg.svg)}.flag-icon-gh{background-image:url(../libs/flags/gh.svg)}.flag-icon-gi{background-image:url(../libs/flags/gi.svg)}.flag-icon-gl{background-image:url(../libs/flags/gl.svg)}.flag-icon-gm{background-image:url(../libs/flags/gm.svg)}.flag-icon-gn{background-image:url(../libs/flags/gn.svg)}.flag-icon-gp{background-image:url(../libs/flags/gp.svg)}.flag-icon-gq{background-image:url(../libs/flags/gq.svg)}.flag-icon-gr{background-image:url(../libs/flags/gr.svg)}.flag-icon-gs{background-image:url(../libs/flags/gs.svg)}.flag-icon-gt{background-image:url(../libs/flags/gt.svg)}.flag-icon-gu{background-image:url(../libs/flags/gu.svg)}.flag-icon-gw{background-image:url(../libs/flags/gw.svg)}.flag-icon-gy{background-image:url(../libs/flags/gy.svg)}.flag-icon-hk{background-image:url(../libs/flags/hk.svg)}.flag-icon-hm{background-image:url(../libs/flags/hm.svg)}.flag-icon-hn{background-image:url(../libs/flags/hn.svg)}.flag-icon-hr{background-image:url(../libs/flags/hr.svg)}.flag-icon-ht{background-image:url(../libs/flags/ht.svg)}.flag-icon-hu{background-image:url(../libs/flags/hu.svg)}.flag-icon-id{background-image:url(../libs/flags/id.svg)}.flag-icon-ie{background-image:url(../libs/flags/ie.svg)}.flag-icon-il{background-image:url(../libs/flags/il.svg)}.flag-icon-im{background-image:url(../libs/flags/im.svg)}.flag-icon-in{background-image:url(../libs/flags/in.svg)}.flag-icon-io{background-image:url(../libs/flags/io.svg)}.flag-icon-iq{background-image:url(../libs/flags/iq.svg)}.flag-icon-ir{background-image:url(../libs/flags/ir.svg)}.flag-icon-is{background-image:url(../libs/flags/is.svg)}.flag-icon-it{background-image:url(../libs/flags/it.svg)}.flag-icon-je{background-image:url(../libs/flags/je.svg)}.flag-icon-jm{background-image:url(../libs/flags/jm.svg)}.flag-icon-jo{background-image:url(../libs/flags/jo.svg)}.flag-icon-jp{background-image:url(../libs/flags/jp.svg)}.flag-icon-ke{background-image:url(../libs/flags/ke.svg)}.flag-icon-kg{background-image:url(../libs/flags/kg.svg)}.flag-icon-kh{background-image:url(../libs/flags/kh.svg)}.flag-icon-ki{background-image:url(../libs/flags/ki.svg)}.flag-icon-km{background-image:url(../libs/flags/km.svg)}.flag-icon-kn{background-image:url(../libs/flags/kn.svg)}.flag-icon-kp{background-image:url(../libs/flags/kp.svg)}.flag-icon-kr{background-image:url(../libs/flags/kr.svg)}.flag-icon-kw{background-image:url(../libs/flags/kw.svg)}.flag-icon-ky{background-image:url(../libs/flags/ky.svg)}.flag-icon-kz{background-image:url(../libs/flags/kz.svg)}.flag-icon-la{background-image:url(../libs/flags/la.svg)}.flag-icon-lb{background-image:url(../libs/flags/lb.svg)}.flag-icon-lc{background-image:url(../libs/flags/lc.svg)}.flag-icon-li{background-image:url(../libs/flags/li.svg)}.flag-icon-lk{background-image:url(../libs/flags/lk.svg)}.flag-icon-lr{background-image:url(../libs/flags/lr.svg)}.flag-icon-ls{background-image:url(../libs/flags/ls.svg)}.flag-icon-lt{background-image:url(../libs/flags/lt.svg)}.flag-icon-lu{background-image:url(../libs/flags/lu.svg)}.flag-icon-lv{background-image:url(../libs/flags/lv.svg)}.flag-icon-ly{background-image:url(../libs/flags/ly.svg)}.flag-icon-ma{background-image:url(../libs/flags/ma.svg)}.flag-icon-mc{background-image:url(../libs/flags/mc.svg)}.flag-icon-md{background-image:url(../libs/flags/md.svg)}.flag-icon-me{background-image:url(../libs/flags/me.svg)}.flag-icon-mf{background-image:url(../libs/flags/mf.svg)}.flag-icon-mg{background-image:url(../libs/flags/mg.svg)}.flag-icon-mh{background-image:url(../libs/flags/mh.svg)}.flag-icon-mk{background-image:url(../libs/flags/mk.svg)}.flag-icon-ml{background-image:url(../libs/flags/ml.svg)}.flag-icon-mm{background-image:url(../libs/flags/mm.svg)}.flag-icon-mn{background-image:url(../libs/flags/mn.svg)}.flag-icon-mo{background-image:url(../libs/flags/mo.svg)}.flag-icon-mp{background-image:url(../libs/flags/mp.svg)}.flag-icon-mq{background-image:url(../libs/flags/mq.svg)}.flag-icon-mr{background-image:url(../libs/flags/mr.svg)}.flag-icon-ms{background-image:url(../libs/flags/ms.svg)}.flag-icon-mt{background-image:url(../libs/flags/mt.svg)}.flag-icon-mu{background-image:url(../libs/flags/mu.svg)}.flag-icon-mv{background-image:url(../libs/flags/mv.svg)}.flag-icon-mw{background-image:url(../libs/flags/mw.svg)}.flag-icon-mx{background-image:url(../libs/flags/mx.svg)}.flag-icon-my{background-image:url(../libs/flags/my.svg)}.flag-icon-mz{background-image:url(../libs/flags/mz.svg)}.flag-icon-na{background-image:url(../libs/flags/na.svg)}.flag-icon-nc{background-image:url(../libs/flags/nc.svg)}.flag-icon-ne{background-image:url(../libs/flags/ne.svg)}.flag-icon-nf{background-image:url(../libs/flags/nf.svg)}.flag-icon-ng{background-image:url(../libs/flags/ng.svg)}.flag-icon-ni{background-image:url(../libs/flags/ni.svg)}.flag-icon-nl{background-image:url(../libs/flags/nl.svg)}.flag-icon-no{background-image:url(../libs/flags/no.svg)}.flag-icon-np{background-image:url(../libs/flags/np.svg)}.flag-icon-nr{background-image:url(../libs/flags/nr.svg)}.flag-icon-nu{background-image:url(../libs/flags/nu.svg)}.flag-icon-nz{background-image:url(../libs/flags/nz.svg)}.flag-icon-om{background-image:url(../libs/flags/om.svg)}.flag-icon-pa{background-image:url(../libs/flags/pa.svg)}.flag-icon-pe{background-image:url(../libs/flags/pe.svg)}.flag-icon-pf{background-image:url(../libs/flags/pf.svg)}.flag-icon-pg{background-image:url(../libs/flags/pg.svg)}.flag-icon-ph{background-image:url(../libs/flags/ph.svg)}.flag-icon-pk{background-image:url(../libs/flags/pk.svg)}.flag-icon-pl{background-image:url(../libs/flags/pl.svg)}.flag-icon-pm{background-image:url(../libs/flags/pm.svg)}.flag-icon-pn{background-image:url(../libs/flags/pn.svg)}.flag-icon-pr{background-image:url(../libs/flags/pr.svg)}.flag-icon-ps{background-image:url(../libs/flags/ps.svg)}.flag-icon-pt{background-image:url(../libs/flags/pt.svg)}.flag-icon-pw{background-image:url(../libs/flags/pw.svg)}.flag-icon-py{background-image:url(../libs/flags/py.svg)}.flag-icon-qa{background-image:url(../libs/flags/qa.svg)}.flag-icon-re{background-image:url(../libs/flags/re.svg)}.flag-icon-ro{background-image:url(../libs/flags/ro.svg)}.flag-icon-rs{background-image:url(../libs/flags/rs.svg)}.flag-icon-ru{background-image:url(../libs/flags/ru.svg)}.flag-icon-rw{background-image:url(../libs/flags/rw.svg)}.flag-icon-sa{background-image:url(../libs/flags/sa.svg)}.flag-icon-sb{background-image:url(../libs/flags/sb.svg)}.flag-icon-sc{background-image:url(../libs/flags/sc.svg)}.flag-icon-sd{background-image:url(../libs/flags/sd.svg)}.flag-icon-se{background-image:url(../libs/flags/se.svg)}.flag-icon-sg{background-image:url(../libs/flags/sg.svg)}.flag-icon-sh{background-image:url(../libs/flags/sh.svg)}.flag-icon-si{background-image:url(../libs/flags/si.svg)}.flag-icon-sj{background-image:url(../libs/flags/sj.svg)}.flag-icon-sk{background-image:url(../libs/flags/sk.svg)}.flag-icon-sl{background-image:url(../libs/flags/sl.svg)}.flag-icon-sm{background-image:url(../libs/flags/sm.svg)}.flag-icon-sn{background-image:url(../libs/flags/sn.svg)}.flag-icon-so{background-image:url(../libs/flags/so.svg)}.flag-icon-sr{background-image:url(../libs/flags/sr.svg)}.flag-icon-ss{background-image:url(../libs/flags/ss.svg)}.flag-icon-st{background-image:url(../libs/flags/st.svg)}.flag-icon-sv{background-image:url(../libs/flags/sv.svg)}.flag-icon-sx{background-image:url(../libs/flags/sx.svg)}.flag-icon-sy{background-image:url(../libs/flags/sy.svg)}.flag-icon-sz{background-image:url(../libs/flags/sz.svg)}.flag-icon-tc{background-image:url(../libs/flags/tc.svg)}.flag-icon-td{background-image:url(../libs/flags/td.svg)}.flag-icon-tf{background-image:url(../libs/flags/tf.svg)}.flag-icon-tg{background-image:url(../libs/flags/tg.svg)}.flag-icon-th{background-image:url(../libs/flags/th.svg)}.flag-icon-tj{background-image:url(../libs/flags/tj.svg)}.flag-icon-tk{background-image:url(../libs/flags/tk.svg)}.flag-icon-tl{background-image:url(../libs/flags/tl.svg)}.flag-icon-tm{background-image:url(../libs/flags/tm.svg)}.flag-icon-tn{background-image:url(../libs/flags/tn.svg)}.flag-icon-to{background-image:url(../libs/flags/to.svg)}.flag-icon-tr{background-image:url(../libs/flags/tr.svg)}.flag-icon-tt{background-image:url(../libs/flags/tt.svg)}.flag-icon-tv{background-image:url(../libs/flags/tv.svg)}.flag-icon-tw{background-image:url(../libs/flags/tw.svg)}.flag-icon-tz{background-image:url(../libs/flags/tz.svg)}.flag-icon-ua{background-image:url(../libs/flags/ua.svg)}.flag-icon-ug{background-image:url(../libs/flags/ug.svg)}.flag-icon-um{background-image:url(../libs/flags/um.svg)}.flag-icon-us{background-image:url(../libs/flags/us.svg)}.flag-icon-uy{background-image:url(../libs/flags/uy.svg)}.flag-icon-uz{background-image:url(../libs/flags/uz.svg)}.flag-icon-va{background-image:url(../libs/flags/va.svg)}.flag-icon-vc{background-image:url(../libs/flags/vc.svg)}.flag-icon-ve{background-image:url(../libs/flags/ve.svg)}.flag-icon-vg{background-image:url(../libs/flags/vg.svg)}.flag-icon-vi{background-image:url(../libs/flags/vi.svg)}.flag-icon-vn{background-image:url(../libs/flags/vn.svg)}.flag-icon-vu{background-image:url(../libs/flags/vu.svg)}.flag-icon-wf{background-image:url(../libs/flags/wf.svg)}.flag-icon-ws{background-image:url(../libs/flags/ws.svg)}.flag-icon-ye{background-image:url(../libs/flags/ye.svg)}.flag-icon-yt{background-image:url(../libs/flags/yt.svg)}.flag-icon-za{background-image:url(../libs/flags/za.svg)}.flag-icon-zm{background-image:url(../libs/flags/zm.svg)}.flag-icon-zw{background-image:url(../libs/flags/zw.svg)}.flag-icon-es-ca{background-image:url(../libs/flags/es-ca.svg)}.flag-icon-es-ga{background-image:url(../libs/flags/es-ga.svg)}.flag-icon-eu{background-image:url(../libs/flags/eu.svg)}.flag-icon-gb-eng{background-image:url(../libs/flags/gb-eng.svg)}.flag-icon-gb-nir{background-image:url(../libs/flags/gb-nir.svg)}.flag-icon-gb-sct{background-image:url(../libs/flags/gb-sct.svg)}.flag-icon-gb-wls{background-image:url(../libs/flags/gb-wls.svg)}.flag-icon-un{background-image:url(../libs/flags/un.svg)}.flag-icon-xk{background-image:url(../libs/flags/xk.svg)}
/* custom */
-.required-field-block{position:relative}.required-field-block .required-icon{display:inline-block;vertical-align:middle;margin:-0.25em .25em 0;background-color:#ccc;border-color:#ccc;padding:0;color:rgba(0,0,0,0.65);text-transform:uppercase;font-weight:normal;border-radius:.325em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;font-size:75%}.required-field-block .required-icon{background-color:transparent;position:absolute;top:0;right:0;z-index:10;margin:0;width:20px;height:20px;padding:0;text-align:center;-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.required-field-block .required-icon:after{position:absolute;content:"";right:16px;top:1px;z-index:-1;width:0;height:0;border-top:0 solid transparent;border-right:20px solid transparent;border-bottom:20px solid transparent;border-left:0 solid transparent;border-right-color:inherit;-webkit-transition:border-color .2s ease;-moz-transition:border-color .2s ease;transition:border-color .2s ease}.required-field-block .required-icon .text{color:#FFF;font-size:25px;margin:-5px 0 0 -22px}.required-field-block{position:relative}.required-field-block-spin .required-icon{display:inline-block;vertical-align:middle;margin:0 21px 0 0;background-color:#ccc;border-color:#ccc;padding:0;color:rgba(0,0,0,0.65);text-transform:uppercase;font-weight:normal;border-radius:.325em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;font-size:75%}.required-field-block-spin .required-icon{background-color:transparent;position:absolute;top:0;right:0;z-index:10;margin:0 21px 0 0;width:20px;height:20px;padding:0;text-align:center;-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.required-field-block-spin .required-icon:after{position:absolute;content:"";right:16px;top:1px;z-index:-1;width:0;height:0;border-top:0 solid transparent;border-right:20px solid transparent;border-bottom:20px solid transparent;border-left:0 solid transparent;border-right-color:inherit;-webkit-transition:border-color .2s ease;-moz-transition:border-color .2s ease;transition:border-color .2s ease}.required-field-block-spin .required-icon .text{color:#FFF;font-size:25px;margin:-5px 0 0 -22px}.divider{height:1px;width:100%;display:block;margin:5px 0;overflow:hidden;background-color:#111111}.help-hover{display:none}.form-group:hover .help-hover{display:inline;cursor:pointer;margin:0 -19px 0 5px}.affix{top:50px;width:calc(100% - 275px);color:#000;background-color:#fff!important;position:fixed;}.tophuge{font-size:200%;white-space:nowrap;overflow:hidden}.dropdown-menu{min-width:180px!important;}.glyphicon{position:relative;top:1px;display:inline-block;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:url('../tsicons/check.png')}.form-control-danger{border:1px solid red!important;box-shadow: 0px 0px 5px 3px rgba(255,0,0,0.2);}
-body{margin-top:100px;background-color:#222}#wrapper{padding-left:0}#page-wrapper{width:100%;padding:0;background-color:#fff}.huge{line-height:normal;font-size:40px}@media(min-width:768px){body{margin-top:50px}#wrapper{padding-left:225px}#page-wrapper{padding:10px}}.top-nav{padding:0 15px}.top-nav>li{display:inline-block;float:left}.top-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px;color:#999}.top-nav>.open>a,.top-nav>.open>a:focus,.top-nav>.open>a:hover,.top-nav>li>a:focus,.top-nav>li>a:hover{color:#fff;background-color:#000}.top-nav>.open>.dropdown-menu{float:left;position:absolute;margin-top:0;border:1px solid rgba(0,0,0,.15);border-top-left-radius:0;border-top-right-radius:0;background-color:#fff;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.top-nav>.open>.dropdown-menu>li>a{white-space:normal}ul.message-dropdown{padding:0;max-height:250px;overflow-x:hidden;overflow-y:auto}li.message-preview{width:275px;border-bottom:1px solid rgba(0,0,0,.15)}li.message-preview>a{padding-top:15px;padding-bottom:15px}li.message-footer{margin:5px 0}ul.alert-dropdown{width:200px}@media(min-width:768px){.side-nav,.side-nav>li>a{width:225px}.side-nav{position:fixed;top:51px;left:225px;margin-left:-225px;border:none;border-radius:0;overflow-y:auto;background-color:#222;bottom:0;overflow-x:hidden;padding-bottom:40px}.side-nav li a:focus,.side-nav li a:hover{outline:0;background-color:#000!important}}.side-nav>li>ul{padding:0}.side-nav>li>ul>li>a{display:block;padding:10px 15px 10px 38px;text-decoration:none;color:#999}.side-nav>li>ul>li>a:hover{color:#fff}.flot-chart{display:block;height:400px}.flot-chart-content{width:100%;height:100%}.panel-green{border-color:#5cb85c}.panel-green>.panel-heading{border-color:#5cb85c;color:#fff;background-color:#5cb85c}.panel-green>a{color:#5cb85c}.panel-green>a:hover{color:#3d8b3d}.panel-red{border-color:#d9534f}.panel-red>.panel-heading{border-color:#d9534f;color:#fff;background-color:#d9534f}.panel-red>a{color:#d9534f}.panel-red>a:hover{color:#b52b27}.panel-yellow{border-color:#f0ad4e}.panel-yellow>.panel-heading{border-color:#f0ad4e;color:#fff;background-color:#f0ad4e}.panel-yellow>a{color:#f0ad4e}.panel-yellow>a:hover{color:#df8a13}.required{background:#ffffe6}.alertbot{padding:14px;margin-bottom:20px;border:1px solid transparent;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent;text-shadow:0 -1px 1px #FFFFFF,0 1px 1px #a4c89f;}
\ No newline at end of file
+.required-field-block{position:relative}.required-field-block .required-icon{display:inline-block;vertical-align:middle;margin:-0.25em .25em 0;background-color:#ccc;border-color:#ccc;padding:0;color:rgba(0,0,0,0.65);text-transform:uppercase;font-weight:normal;border-radius:.325em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;font-size:75%}.required-field-block .required-icon{background-color:transparent;position:absolute;top:0;right:0;z-index:10;margin:0;width:20px;height:20px;padding:0;text-align:center;-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.required-field-block .required-icon:after{position:absolute;content:"";right:16px;top:1px;z-index:-1;width:0;height:0;border-top:0 solid transparent;border-right:20px solid transparent;border-bottom:20px solid transparent;border-left:0 solid transparent;border-right-color:inherit;-webkit-transition:border-color .2s ease;-moz-transition:border-color .2s ease;transition:border-color .2s ease}.required-field-block .required-icon .text{color:#FFF;font-size:25px;margin:-5px 0 0 -22px}.required-field-block{position:relative}.required-field-block-spin .required-icon{display:inline-block;vertical-align:middle;margin:0 21px 0 0;background-color:#ccc;border-color:#ccc;padding:0;color:rgba(0,0,0,0.65);text-transform:uppercase;font-weight:normal;border-radius:.325em;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:background .1s linear;-moz-transition:background .1s linear;transition:background .1s linear;font-size:75%}.required-field-block-spin .required-icon{background-color:transparent;position:absolute;top:0;right:0;z-index:10;margin:0 21px 0 0;width:20px;height:20px;padding:0;text-align:center;-webkit-transition:color .2s ease;-moz-transition:color .2s ease;transition:color .2s ease}.required-field-block-spin .required-icon:after{position:absolute;content:"";right:16px;top:1px;z-index:-1;width:0;height:0;border-top:0 solid transparent;border-right:20px solid transparent;border-bottom:20px solid transparent;border-left:0 solid transparent;border-right-color:inherit;-webkit-transition:border-color .2s ease;-moz-transition:border-color .2s ease;transition:border-color .2s ease}.required-field-block-spin .required-icon .text{color:#FFF;font-size:25px;margin:-5px 0 0 -22px}.divider{height:1px;width:100%;display:block;margin:5px 0;overflow:hidden;background-color:#111111}.help-hover{display:none}.form-group:hover .help-hover{display:inline;cursor:pointer;margin:0 -19px 0 5px}.affix{top:50px;width:calc(100% - 275px);color:#000;background-color:#fff!important;position:fixed}.tophuge{font-size:200%;white-space:nowrap;overflow:hidden}.dropdown-menu{min-width:180px!important}.glyphicon{position:relative;top:1px;display:inline-block;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-ok:before{content:url('../tsicons/check.png')}.form-control-danger{border:1px solid red!important;box-shadow: 0px 0px 5px 3px rgba(255,0,0,0.2)}.tsspacer{color:#666!important;line-height:1!important}li.active .tsspacer{color:#fff!important}.labelcid{position:absolute;left:82%;margin-left:5px}.filter-option-inner-inner .labelcid{display:none}.labelcid2{position:absolute;left:82%;min-width:16%;margin-left:5px;text-align:right}.filter-option-inner-inner .labelcid2{display:none}.margincid{min-width:400px;margin-right:120px}.arrowtree{position:absolute;left:20px}.filter-option-inner-inner .arrowtree{display:none}.tsspacer1{background-image:url(../tsicons/spacer_1.png)}.tsspacer2{background-image:url(../tsicons/spacer_2.png)}.tsspacer3{background-image:url(../tsicons/spacer_3.png)}.tsspacer4{background-image:url(../tsicons/spacer_4.png)}.tsspacer5{background-image:url(../tsicons/spacer_5.png)}.tsspacercolor{filter: invert(46%) sepia(0%) saturate(2103%) hue-rotate(246deg) brightness(86%) contrast(97%)}.tsspacercolor{filter: invert(46%) sepia(0%) saturate(2103%) hue-rotate(246deg) brightness(86%) contrast(97%)}li.active .tsspacercolor{filter: invert(97%) sepia(3%) saturate(12%) hue-rotate(71deg) brightness(103%) contrast(103%)}.tsspacerimg{width:calc(82% - 50px);height:100%;background-repeat:repeat-x;position:absolute;}.modal-lg{width:1200px!important}
+body{margin-top:100px;background-color:#222}#wrapper{padding-left:0}#page-wrapper{width:100%;padding:0;background-color:#fff}.huge{line-height:normal;font-size:40px}@media(min-width:768px){body{margin-top:50px}#wrapper{padding-left:225px}#page-wrapper{padding:10px}}.top-nav{padding:0 15px}.top-nav>li{display:inline-block;float:left}.top-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px;color:#999}.top-nav>.open>a,.top-nav>.open>a:focus,.top-nav>.open>a:hover,.top-nav>li>a:focus,.top-nav>li>a:hover{color:#fff;background-color:#000}.top-nav>.open>.dropdown-menu{float:left;position:absolute;margin-top:0;border:1px solid rgba(0,0,0,.15);border-top-left-radius:0;border-top-right-radius:0;background-color:#fff;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.top-nav>.open>.dropdown-menu>li>a{white-space:normal}ul.message-dropdown{padding:0;max-height:250px;overflow-x:hidden;overflow-y:auto}li.message-preview{width:275px;border-bottom:1px solid rgba(0,0,0,.15)}li.message-preview>a{padding-top:15px;padding-bottom:15px}li.message-footer{margin:5px 0}ul.alert-dropdown{width:200px}@media(min-width:768px){.side-nav,.side-nav>li>a{width:225px}.side-nav{position:fixed;top:51px;left:225px;margin-left:-225px;border:none;border-radius:0;overflow-y:auto;background-color:#222;bottom:0;overflow-x:hidden;padding-bottom:40px}.side-nav li a:focus,.side-nav li a:hover{outline:0;background-color:#000!important}}.side-nav>li>ul{padding:0}.side-nav>li>ul>li>a{display:block;padding:10px 15px 10px 38px;text-decoration:none;color:#999}.side-nav>li>ul>li>a:hover{color:#fff}.flot-chart{display:block;height:400px}.flot-chart-content{width:100%;height:100%}.panel-green{border-color:#5cb85c}.panel-green>.panel-heading{border-color:#5cb85c;color:#fff;background-color:#5cb85c}.panel-green>a{color:#5cb85c}.panel-green>a:hover{color:#3d8b3d}.panel-red{border-color:#d9534f}.panel-red>.panel-heading{border-color:#d9534f;color:#fff;background-color:#d9534f}.panel-red>a{color:#d9534f}.panel-red>a:hover{color:#b52b27}.panel-yellow{border-color:#f0ad4e}.panel-yellow>.panel-heading{border-color:#f0ad4e;color:#fff;background-color:#f0ad4e}.panel-yellow>a{color:#f0ad4e}.panel-yellow>a:hover{color:#df8a13}.required{background:#ffffe6}.alertbot{padding:14px;margin-bottom:20px;border:1px solid transparent;border-top-color:transparent;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent;text-shadow:0 -1px 1px #FFFFFF,0 1px 1px #a4c89f}
\ No newline at end of file
diff --git a/libs/smarty/Autoloader.php b/libs/smarty/Autoloader.php
new file mode 100644
index 0000000..1673ce2
--- /dev/null
+++ b/libs/smarty/Autoloader.php
@@ -0,0 +1,106 @@
+ 'Smarty.class.php');
+
+ /**
+ * Registers Smarty_Autoloader backward compatible to older installations.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not.
+ */
+ public static function registerBC($prepend = false)
+ {
+ /**
+ * register the class autoloader
+ */
+ if (!defined('SMARTY_SPL_AUTOLOAD')) {
+ define('SMARTY_SPL_AUTOLOAD', 0);
+ }
+ if (SMARTY_SPL_AUTOLOAD
+ && set_include_path(get_include_path() . PATH_SEPARATOR . SMARTY_SYSPLUGINS_DIR) !== false
+ ) {
+ $registeredAutoLoadFunctions = spl_autoload_functions();
+ if (!isset($registeredAutoLoadFunctions[ 'spl_autoload' ])) {
+ spl_autoload_register();
+ }
+ } else {
+ self::register($prepend);
+ }
+ }
+
+ /**
+ * Registers Smarty_Autoloader as an SPL autoloader.
+ *
+ * @param bool $prepend Whether to prepend the autoloader or not.
+ */
+ public static function register($prepend = false)
+ {
+ self::$SMARTY_DIR = defined('SMARTY_DIR') ? SMARTY_DIR : dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ self::$SMARTY_SYSPLUGINS_DIR = defined('SMARTY_SYSPLUGINS_DIR') ? SMARTY_SYSPLUGINS_DIR :
+ self::$SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR;
+ spl_autoload_register(array(__CLASS__, 'autoload'), true, $prepend);
+ }
+
+ /**
+ * Handles auto loading of classes.
+ *
+ * @param string $class A class name.
+ */
+ public static function autoload($class)
+ {
+ if ($class[ 0 ] !== 'S' || strpos($class, 'Smarty') !== 0) {
+ return;
+ }
+ $_class = strtolower($class);
+ if (isset(self::$rootClasses[ $_class ])) {
+ $file = self::$SMARTY_DIR . self::$rootClasses[ $_class ];
+ if (is_file($file)) {
+ include $file;
+ }
+ } else {
+ $file = self::$SMARTY_SYSPLUGINS_DIR . $_class . '.php';
+ if (is_file($file)) {
+ include $file;
+ }
+ }
+ return;
+ }
+}
diff --git a/libs/smarty/Smarty.class.php b/libs/smarty/Smarty.class.php
new file mode 100644
index 0000000..a4840b7
--- /dev/null
+++ b/libs/smarty/Smarty.class.php
@@ -0,0 +1,1397 @@
+
+ * @author Uwe Tews
+ * @author Rodney Rehm
+ * @package Smarty
+ */
+/**
+ * set SMARTY_DIR to absolute path to Smarty library files.
+ * Sets SMARTY_DIR only if user application has not already defined it.
+ */
+if (!defined('SMARTY_DIR')) {
+ /**
+ *
+ */
+ define('SMARTY_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+}
+/**
+ * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins.
+ * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it.
+ */
+if (!defined('SMARTY_SYSPLUGINS_DIR')) {
+ /**
+ *
+ */
+ define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DIRECTORY_SEPARATOR);
+}
+if (!defined('SMARTY_PLUGINS_DIR')) {
+ /**
+ *
+ */
+ define('SMARTY_PLUGINS_DIR', SMARTY_DIR . 'plugins' . DIRECTORY_SEPARATOR);
+}
+if (!defined('SMARTY_MBSTRING')) {
+ /**
+ *
+ */
+ define('SMARTY_MBSTRING', function_exists('mb_get_info'));
+}
+/**
+ * Load Smarty_Autoloader
+ */
+if (!class_exists('Smarty_Autoloader')) {
+ include dirname(__FILE__) . '/bootstrap.php';
+}
+/**
+ * Load always needed external class files
+ */
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_data.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_extension_handler.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_templatebase.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_template.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_resource.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_variable.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_source.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_template_resource_base.php';
+require_once SMARTY_SYSPLUGINS_DIR . 'smarty_internal_resource_file.php';
+
+/**
+ * This is the main Smarty class
+ *
+ * @package Smarty
+ *
+ * The following methods will be dynamically loaded by the extension handler when they are called.
+ * They are located in a corresponding Smarty_Internal_Method_xxxx class
+ *
+ * @method int clearAllCache(int $exp_time = null, string $type = null)
+ * @method int clearCache(string $template_name, string $cache_id = null, string $compile_id = null, int $exp_time = null, string $type = null)
+ * @method int compileAllTemplates(string $extension = '.tpl', bool $force_compile = false, int $time_limit = 0, $max_errors = null)
+ * @method int compileAllConfig(string $extension = '.conf', bool $force_compile = false, int $time_limit = 0, $max_errors = null)
+ * @method int clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
+ */
+class Smarty extends Smarty_Internal_TemplateBase
+{
+ /**
+ * smarty version
+ */
+ const SMARTY_VERSION = '4.0.0-rc.0';
+ /**
+ * define variable scopes
+ */
+ const SCOPE_LOCAL = 1;
+ const SCOPE_PARENT = 2;
+ const SCOPE_TPL_ROOT = 4;
+ const SCOPE_ROOT = 8;
+ const SCOPE_SMARTY = 16;
+ const SCOPE_GLOBAL = 32;
+ /**
+ * define caching modes
+ */
+ const CACHING_OFF = 0;
+ const CACHING_LIFETIME_CURRENT = 1;
+ const CACHING_LIFETIME_SAVED = 2;
+ /**
+ * define constant for clearing cache files be saved expiration dates
+ */
+ const CLEAR_EXPIRED = -1;
+ /**
+ * define compile check modes
+ */
+ const COMPILECHECK_OFF = 0;
+ const COMPILECHECK_ON = 1;
+ const COMPILECHECK_CACHEMISS = 2;
+ /**
+ * define debug modes
+ */
+ const DEBUG_OFF = 0;
+ const DEBUG_ON = 1;
+ const DEBUG_INDIVIDUAL = 2;
+
+ /**
+ * filter types
+ */
+ const FILTER_POST = 'post';
+ const FILTER_PRE = 'pre';
+ const FILTER_OUTPUT = 'output';
+ const FILTER_VARIABLE = 'variable';
+ /**
+ * plugin types
+ */
+ const PLUGIN_FUNCTION = 'function';
+ const PLUGIN_BLOCK = 'block';
+ const PLUGIN_COMPILER = 'compiler';
+ const PLUGIN_MODIFIER = 'modifier';
+ const PLUGIN_MODIFIERCOMPILER = 'modifiercompiler';
+
+ /**
+ * assigned global tpl vars
+ */
+ public static $global_tpl_vars = array();
+
+ /**
+ * Flag denoting if Multibyte String functions are available
+ */
+ public static $_MBSTRING = SMARTY_MBSTRING;
+
+ /**
+ * The character set to adhere to (e.g. "UTF-8")
+ */
+ public static $_CHARSET = SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1';
+
+ /**
+ * The date format to be used internally
+ * (accepts date() and strftime())
+ */
+ public static $_DATE_FORMAT = '%b %e, %Y';
+
+ /**
+ * Flag denoting if PCRE should run in UTF-8 mode
+ */
+ public static $_UTF8_MODIFIER = 'u';
+
+ /**
+ * Flag denoting if operating system is windows
+ */
+ public static $_IS_WINDOWS = false;
+
+ /**
+ * auto literal on delimiters with whitespace
+ *
+ * @var boolean
+ */
+ public $auto_literal = true;
+
+ /**
+ * display error on not assigned variables
+ *
+ * @var boolean
+ */
+ public $error_unassigned = false;
+
+ /**
+ * look up relative file path in include_path
+ *
+ * @var boolean
+ */
+ public $use_include_path = false;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_templateDirNormalized = false;
+
+ /**
+ * joined template directory string used in cache keys
+ *
+ * @var string
+ */
+ public $_joined_template_dir = null;
+
+ /**
+ * flag if config_dir is normalized
+ *
+ * @var bool
+ */
+ public $_configDirNormalized = false;
+
+ /**
+ * joined config directory string used in cache keys
+ *
+ * @var string
+ */
+ public $_joined_config_dir = null;
+
+ /**
+ * default template handler
+ *
+ * @var callable
+ */
+ public $default_template_handler_func = null;
+
+ /**
+ * default config handler
+ *
+ * @var callable
+ */
+ public $default_config_handler_func = null;
+
+ /**
+ * default plugin handler
+ *
+ * @var callable
+ */
+ public $default_plugin_handler_func = null;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_compileDirNormalized = false;
+
+ /**
+ * flag if plugins_dir is normalized
+ *
+ * @var bool
+ */
+ public $_pluginsDirNormalized = false;
+
+ /**
+ * flag if template_dir is normalized
+ *
+ * @var bool
+ */
+ public $_cacheDirNormalized = false;
+
+ /**
+ * force template compiling?
+ *
+ * @var boolean
+ */
+ public $force_compile = false;
+
+ /**
+ * use sub dirs for compiled/cached files?
+ *
+ * @var boolean
+ */
+ public $use_sub_dirs = false;
+
+ /**
+ * allow ambiguous resources (that are made unique by the resource handler)
+ *
+ * @var boolean
+ */
+ public $allow_ambiguous_resources = false;
+
+ /**
+ * merge compiled includes
+ *
+ * @var boolean
+ */
+ public $merge_compiled_includes = false;
+
+ /*
+ * flag for behaviour when extends: resource and {extends} tag are used simultaneous
+ * if false disable execution of {extends} in templates called by extends resource.
+ * (behaviour as versions < 3.1.28)
+ *
+ * @var boolean
+ */
+ public $extends_recursion = true;
+
+ /**
+ * force cache file creation
+ *
+ * @var boolean
+ */
+ public $force_cache = false;
+
+ /**
+ * template left-delimiter
+ *
+ * @var string
+ */
+ public $left_delimiter = "{";
+
+ /**
+ * template right-delimiter
+ *
+ * @var string
+ */
+ public $right_delimiter = "}";
+
+ /**
+ * array of strings which shall be treated as literal by compiler
+ *
+ * @var array string
+ */
+ public $literals = array();
+
+ /**
+ * class name
+ * This should be instance of Smarty_Security.
+ *
+ * @var string
+ * @see Smarty_Security
+ */
+ public $security_class = 'Smarty_Security';
+
+ /**
+ * implementation of security class
+ *
+ * @var Smarty_Security
+ */
+ public $security_policy = null;
+
+ /**
+ * controls if the php template file resource is allowed
+ *
+ * @var bool
+ */
+ public $allow_php_templates = false;
+
+ /**
+ * debug mode
+ * Setting this to true enables the debug-console.
+ *
+ * @var boolean
+ */
+ public $debugging = false;
+
+ /**
+ * This determines if debugging is enable-able from the browser.
+ *
+ *
NONE => no debugging control allowed
+ *
URL => enable debugging when SMARTY_DEBUG is found in the URL.
+ *
+ *
+ * @var string
+ */
+ public $debugging_ctrl = 'NONE';
+
+ /**
+ * Name of debugging URL-param.
+ * Only used when $debugging_ctrl is set to 'URL'.
+ * The name of the URL-parameter that activates debugging.
+ *
+ * @var string
+ */
+ public $smarty_debug_id = 'SMARTY_DEBUG';
+
+ /**
+ * Path of debug template.
+ *
+ * @var string
+ */
+ public $debug_tpl = null;
+
+ /**
+ * When set, smarty uses this value as error_reporting-level.
+ *
+ * @var int
+ */
+ public $error_reporting = null;
+
+ /**
+ * Controls whether variables with the same name overwrite each other.
+ *
+ * @var boolean
+ */
+ public $config_overwrite = true;
+
+ /**
+ * Controls whether config values of on/true/yes and off/false/no get converted to boolean.
+ *
+ * @var boolean
+ */
+ public $config_booleanize = true;
+
+ /**
+ * Controls whether hidden config sections/vars are read from the file.
+ *
+ * @var boolean
+ */
+ public $config_read_hidden = false;
+
+ /**
+ * locking concurrent compiles
+ *
+ * @var boolean
+ */
+ public $compile_locking = true;
+
+ /**
+ * Controls whether cache resources should use locking mechanism
+ *
+ * @var boolean
+ */
+ public $cache_locking = false;
+
+ /**
+ * seconds to wait for acquiring a lock before ignoring the write lock
+ *
+ * @var float
+ */
+ public $locking_timeout = 10;
+
+ /**
+ * resource type used if none given
+ * Must be an valid key of $registered_resources.
+ *
+ * @var string
+ */
+ public $default_resource_type = 'file';
+
+ /**
+ * caching type
+ * Must be an element of $cache_resource_types.
+ *
+ * @var string
+ */
+ public $caching_type = 'file';
+
+ /**
+ * config type
+ *
+ * @var string
+ */
+ public $default_config_type = 'file';
+
+ /**
+ * check If-Modified-Since headers
+ *
+ * @var boolean
+ */
+ public $cache_modified_check = false;
+
+ /**
+ * registered plugins
+ *
+ * @var array
+ */
+ public $registered_plugins = array();
+
+ /**
+ * registered objects
+ *
+ * @var array
+ */
+ public $registered_objects = array();
+
+ /**
+ * registered classes
+ *
+ * @var array
+ */
+ public $registered_classes = array();
+
+ /**
+ * registered filters
+ *
+ * @var array
+ */
+ public $registered_filters = array();
+
+ /**
+ * registered resources
+ *
+ * @var array
+ */
+ public $registered_resources = array();
+
+ /**
+ * registered cache resources
+ *
+ * @var array
+ */
+ public $registered_cache_resources = array();
+
+ /**
+ * autoload filter
+ *
+ * @var array
+ */
+ public $autoload_filters = array();
+
+ /**
+ * default modifier
+ *
+ * @var array
+ */
+ public $default_modifiers = array();
+
+ /**
+ * autoescape variable output
+ *
+ * @var boolean
+ */
+ public $escape_html = false;
+
+ /**
+ * start time for execution time calculation
+ *
+ * @var int
+ */
+ public $start_time = 0;
+
+ /**
+ * required by the compiler for BC
+ *
+ * @var string
+ */
+ public $_current_file = null;
+
+ /**
+ * internal flag to enable parser debugging
+ *
+ * @var bool
+ */
+ public $_parserdebug = false;
+
+ /**
+ * This object type (Smarty = 1, template = 2, data = 4)
+ *
+ * @var int
+ */
+ public $_objType = 1;
+
+ /**
+ * Debug object
+ *
+ * @var Smarty_Internal_Debug
+ */
+ public $_debug = null;
+
+ /**
+ * template directory
+ *
+ * @var array
+ */
+ protected $template_dir = array('./templates/');
+
+ /**
+ * flags for normalized template directory entries
+ *
+ * @var array
+ */
+ protected $_processedTemplateDir = array();
+
+ /**
+ * config directory
+ *
+ * @var array
+ */
+ protected $config_dir = array('./configs/');
+
+ /**
+ * flags for normalized template directory entries
+ *
+ * @var array
+ */
+ protected $_processedConfigDir = array();
+
+ /**
+ * compile directory
+ *
+ * @var string
+ */
+ protected $compile_dir = './templates_c/';
+
+ /**
+ * plugins directory
+ *
+ * @var array
+ */
+ protected $plugins_dir = array();
+
+ /**
+ * cache directory
+ *
+ * @var string
+ */
+ protected $cache_dir = './cache/';
+
+ /**
+ * removed properties
+ *
+ * @var string[]
+ */
+ protected $obsoleteProperties = array(
+ 'resource_caching', 'template_resource_caching', 'direct_access_security',
+ '_dir_perms', '_file_perms', 'plugin_search_order',
+ 'inheritance_merge_compiled_includes', 'resource_cache_mode',
+ );
+
+ /**
+ * List of private properties which will call getter/setter on a direct access
+ *
+ * @var string[]
+ */
+ protected $accessMap = array(
+ 'template_dir' => 'TemplateDir', 'config_dir' => 'ConfigDir',
+ 'plugins_dir' => 'PluginsDir', 'compile_dir' => 'CompileDir',
+ 'cache_dir' => 'CacheDir',
+ );
+
+ /**
+ * PHP7 Compatibility mode
+ * @var bool
+ */
+ private $isMutingUndefinedOrNullWarnings = false;
+
+ /**
+ * Initialize new Smarty object
+ */
+ public function __construct()
+ {
+ $this->_clearTemplateCache();
+ parent::__construct();
+ if (is_callable('mb_internal_encoding')) {
+ mb_internal_encoding(Smarty::$_CHARSET);
+ }
+ $this->start_time = microtime(true);
+ if (isset($_SERVER[ 'SCRIPT_NAME' ])) {
+ Smarty::$global_tpl_vars[ 'SCRIPT_NAME' ] = new Smarty_Variable($_SERVER[ 'SCRIPT_NAME' ]);
+ }
+ // Check if we're running on windows
+ Smarty::$_IS_WINDOWS = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
+ // let PCRE (preg_*) treat strings as ISO-8859-1 if we're not dealing with UTF-8
+ if (Smarty::$_CHARSET !== 'UTF-8') {
+ Smarty::$_UTF8_MODIFIER = '';
+ }
+ }
+
+ /**
+ * Check if a template resource exists
+ *
+ * @param string $resource_name template name
+ *
+ * @return bool status
+ * @throws \SmartyException
+ */
+ public function templateExists($resource_name)
+ {
+ // create source object
+ $source = Smarty_Template_Source::load(null, $this, $resource_name);
+ return $source->exists;
+ }
+
+ /**
+ * Loads security class and enables security
+ *
+ * @param string|Smarty_Security $security_class if a string is used, it must be class-name
+ *
+ * @return Smarty current Smarty instance for chaining
+ * @throws \SmartyException
+ */
+ public function enableSecurity($security_class = null)
+ {
+ Smarty_Security::enableSecurity($this, $security_class);
+ return $this;
+ }
+
+ /**
+ * Disable security
+ *
+ * @return Smarty current Smarty instance for chaining
+ */
+ public function disableSecurity()
+ {
+ $this->security_policy = null;
+ return $this;
+ }
+
+ /**
+ * Add template directory(s)
+ *
+ * @param string|array $template_dir directory(s) of template sources
+ * @param string $key of the array element to assign the template dir to
+ * @param bool $isConfig true for config_dir
+ *
+ * @return Smarty current Smarty instance for chaining
+ */
+ public function addTemplateDir($template_dir, $key = null, $isConfig = false)
+ {
+ if ($isConfig) {
+ $processed = &$this->_processedConfigDir;
+ $dir = &$this->config_dir;
+ $this->_configDirNormalized = false;
+ } else {
+ $processed = &$this->_processedTemplateDir;
+ $dir = &$this->template_dir;
+ $this->_templateDirNormalized = false;
+ }
+ if (is_array($template_dir)) {
+ foreach ($template_dir as $k => $v) {
+ if (is_int($k)) {
+ // indexes are not merged but appended
+ $dir[] = $v;
+ } else {
+ // string indexes are overridden
+ $dir[ $k ] = $v;
+ unset($processed[ $key ]);
+ }
+ }
+ } else {
+ if ($key !== null) {
+ // override directory at specified index
+ $dir[ $key ] = $template_dir;
+ unset($processed[ $key ]);
+ } else {
+ // append new directory
+ $dir[] = $template_dir;
+ }
+ }
+ return $this;
+ }
+
+ /**
+ * Get template directories
+ *
+ * @param mixed $index index of directory to get, null to get all
+ * @param bool $isConfig true for config_dir
+ *
+ * @return array|string list of template directories, or directory of $index
+ */
+ public function getTemplateDir($index = null, $isConfig = false)
+ {
+ if ($isConfig) {
+ $dir = &$this->config_dir;
+ } else {
+ $dir = &$this->template_dir;
+ }
+ if ($isConfig ? !$this->_configDirNormalized : !$this->_templateDirNormalized) {
+ $this->_normalizeTemplateConfig($isConfig);
+ }
+ if ($index !== null) {
+ return isset($dir[ $index ]) ? $dir[ $index ] : null;
+ }
+ return $dir;
+ }
+
+ /**
+ * Set template directory
+ *
+ * @param string|array $template_dir directory(s) of template sources
+ * @param bool $isConfig true for config_dir
+ *
+ * @return \Smarty current Smarty instance for chaining
+ */
+ public function setTemplateDir($template_dir, $isConfig = false)
+ {
+ if ($isConfig) {
+ $this->config_dir = array();
+ $this->_processedConfigDir = array();
+ } else {
+ $this->template_dir = array();
+ $this->_processedTemplateDir = array();
+ }
+ $this->addTemplateDir($template_dir, null, $isConfig);
+ return $this;
+ }
+
+ /**
+ * Add config directory(s)
+ *
+ * @param string|array $config_dir directory(s) of config sources
+ * @param mixed $key key of the array element to assign the config dir to
+ *
+ * @return Smarty current Smarty instance for chaining
+ */
+ public function addConfigDir($config_dir, $key = null)
+ {
+ return $this->addTemplateDir($config_dir, $key, true);
+ }
+
+ /**
+ * Get config directory
+ *
+ * @param mixed $index index of directory to get, null to get all
+ *
+ * @return array configuration directory
+ */
+ public function getConfigDir($index = null)
+ {
+ return $this->getTemplateDir($index, true);
+ }
+
+ /**
+ * Set config directory
+ *
+ * @param $config_dir
+ *
+ * @return Smarty current Smarty instance for chaining
+ */
+ public function setConfigDir($config_dir)
+ {
+ return $this->setTemplateDir($config_dir, true);
+ }
+
+ /**
+ * Adds directory of plugin files
+ *
+ * @param null|array|string $plugins_dir
+ *
+ * @return Smarty current Smarty instance for chaining
+ */
+ public function addPluginsDir($plugins_dir)
+ {
+ if (empty($this->plugins_dir)) {
+ $this->plugins_dir[] = SMARTY_PLUGINS_DIR;
+ }
+ $this->plugins_dir = array_merge($this->plugins_dir, (array)$plugins_dir);
+ $this->_pluginsDirNormalized = false;
+ return $this;
+ }
+
+ /**
+ * Get plugin directories
+ *
+ * @return array list of plugin directories
+ */
+ public function getPluginsDir()
+ {
+ if (empty($this->plugins_dir)) {
+ $this->plugins_dir[] = SMARTY_PLUGINS_DIR;
+ $this->_pluginsDirNormalized = false;
+ }
+ if (!$this->_pluginsDirNormalized) {
+ if (!is_array($this->plugins_dir)) {
+ $this->plugins_dir = (array)$this->plugins_dir;
+ }
+ foreach ($this->plugins_dir as $k => $v) {
+ $this->plugins_dir[ $k ] = $this->_realpath(rtrim($v, '/\\') . DIRECTORY_SEPARATOR, true);
+ }
+ $this->_cache[ 'plugin_files' ] = array();
+ $this->_pluginsDirNormalized = true;
+ }
+ return $this->plugins_dir;
+ }
+
+ /**
+ * Set plugins directory
+ *
+ * @param string|array $plugins_dir directory(s) of plugins
+ *
+ * @return Smarty current Smarty instance for chaining
+ */
+ public function setPluginsDir($plugins_dir)
+ {
+ $this->plugins_dir = (array)$plugins_dir;
+ $this->_pluginsDirNormalized = false;
+ return $this;
+ }
+
+ /**
+ * Get compiled directory
+ *
+ * @return string path to compiled templates
+ */
+ public function getCompileDir()
+ {
+ if (!$this->_compileDirNormalized) {
+ $this->_normalizeDir('compile_dir', $this->compile_dir);
+ $this->_compileDirNormalized = true;
+ }
+ return $this->compile_dir;
+ }
+
+ /**
+ *
+ * @param string $compile_dir directory to store compiled templates in
+ *
+ * @return Smarty current Smarty instance for chaining
+ */
+ public function setCompileDir($compile_dir)
+ {
+ $this->_normalizeDir('compile_dir', $compile_dir);
+ $this->_compileDirNormalized = true;
+ return $this;
+ }
+
+ /**
+ * Get cache directory
+ *
+ * @return string path of cache directory
+ */
+ public function getCacheDir()
+ {
+ if (!$this->_cacheDirNormalized) {
+ $this->_normalizeDir('cache_dir', $this->cache_dir);
+ $this->_cacheDirNormalized = true;
+ }
+ return $this->cache_dir;
+ }
+
+ /**
+ * Set cache directory
+ *
+ * @param string $cache_dir directory to store cached templates in
+ *
+ * @return Smarty current Smarty instance for chaining
+ */
+ public function setCacheDir($cache_dir)
+ {
+ $this->_normalizeDir('cache_dir', $cache_dir);
+ $this->_cacheDirNormalized = true;
+ return $this;
+ }
+
+ /**
+ * creates a template object
+ *
+ * @param string $template the resource handle of the template file
+ * @param mixed $cache_id cache id to be used with this template
+ * @param mixed $compile_id compile id to be used with this template
+ * @param object $parent next higher level of Smarty variables
+ * @param boolean $do_clone flag is Smarty object shall be cloned
+ *
+ * @return \Smarty_Internal_Template template object
+ * @throws \SmartyException
+ */
+ public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null, $do_clone = true)
+ {
+ if ($cache_id !== null && (is_object($cache_id) || is_array($cache_id))) {
+ $parent = $cache_id;
+ $cache_id = null;
+ }
+ if ($parent !== null && is_array($parent)) {
+ $data = $parent;
+ $parent = null;
+ } else {
+ $data = null;
+ }
+ if (!$this->_templateDirNormalized) {
+ $this->_normalizeTemplateConfig(false);
+ }
+ $_templateId = $this->_getTemplateId($template, $cache_id, $compile_id);
+ $tpl = null;
+ if ($this->caching && isset(Smarty_Internal_Template::$isCacheTplObj[ $_templateId ])) {
+ $tpl = $do_clone ? clone Smarty_Internal_Template::$isCacheTplObj[ $_templateId ] :
+ Smarty_Internal_Template::$isCacheTplObj[ $_templateId ];
+ $tpl->inheritance = null;
+ $tpl->tpl_vars = $tpl->config_vars = array();
+ } elseif (!$do_clone && isset(Smarty_Internal_Template::$tplObjCache[ $_templateId ])) {
+ $tpl = clone Smarty_Internal_Template::$tplObjCache[ $_templateId ];
+ $tpl->inheritance = null;
+ $tpl->tpl_vars = $tpl->config_vars = array();
+ } else {
+ /* @var Smarty_Internal_Template $tpl */
+ $tpl = new $this->template_class($template, $this, null, $cache_id, $compile_id, null, null);
+ $tpl->templateId = $_templateId;
+ }
+ if ($do_clone) {
+ $tpl->smarty = clone $tpl->smarty;
+ }
+ $tpl->parent = $parent ? $parent : $this;
+ // fill data if present
+ if (!empty($data) && is_array($data)) {
+ // set up variable values
+ foreach ($data as $_key => $_val) {
+ $tpl->tpl_vars[ $_key ] = new Smarty_Variable($_val);
+ }
+ }
+ if ($this->debugging || $this->debugging_ctrl === 'URL') {
+ $tpl->smarty->_debug = new Smarty_Internal_Debug();
+ // check URL debugging control
+ if (!$this->debugging && $this->debugging_ctrl === 'URL') {
+ $tpl->smarty->_debug->debugUrl($tpl->smarty);
+ }
+ }
+ return $tpl;
+ }
+
+ /**
+ * Takes unknown classes and loads plugin files for them
+ * class name format: Smarty_PluginType_PluginName
+ * plugin filename format: plugintype.pluginname.php
+ *
+ * @param string $plugin_name class plugin name to load
+ * @param bool $check check if already loaded
+ *
+ * @return string |boolean filepath of loaded file or false
+ * @throws \SmartyException
+ */
+ public function loadPlugin($plugin_name, $check = true)
+ {
+ return $this->ext->loadPlugin->loadPlugin($this, $plugin_name, $check);
+ }
+
+ /**
+ * Get unique template id
+ *
+ * @param string $template_name
+ * @param null|mixed $cache_id
+ * @param null|mixed $compile_id
+ * @param null $caching
+ * @param \Smarty_Internal_Template $template
+ *
+ * @return string
+ * @throws \SmartyException
+ */
+ public function _getTemplateId(
+ $template_name,
+ $cache_id = null,
+ $compile_id = null,
+ $caching = null,
+ Smarty_Internal_Template $template = null
+ ) {
+ $template_name = (strpos($template_name, ':') === false) ? "{$this->default_resource_type}:{$template_name}" :
+ $template_name;
+ $cache_id = $cache_id === null ? $this->cache_id : $cache_id;
+ $compile_id = $compile_id === null ? $this->compile_id : $compile_id;
+ $caching = (int)($caching === null ? $this->caching : $caching);
+ if ((isset($template) && strpos($template_name, ':.') !== false) || $this->allow_ambiguous_resources) {
+ $_templateId =
+ Smarty_Resource::getUniqueTemplateName((isset($template) ? $template : $this), $template_name) .
+ "#{$cache_id}#{$compile_id}#{$caching}";
+ } else {
+ $_templateId = $this->_joined_template_dir . "#{$template_name}#{$cache_id}#{$compile_id}#{$caching}";
+ }
+ if (isset($_templateId[ 150 ])) {
+ $_templateId = sha1($_templateId);
+ }
+ return $_templateId;
+ }
+
+ /**
+ * Normalize path
+ * - remove /./ and /../
+ * - make it absolute if required
+ *
+ * @param string $path file path
+ * @param bool $realpath if true - convert to absolute
+ * false - convert to relative
+ * null - keep as it is but
+ * remove /./ /../
+ *
+ * @return string
+ */
+ public function _realpath($path, $realpath = null)
+ {
+ $nds = array('/' => '\\', '\\' => '/');
+ preg_match(
+ '%^(?(?:[[:alpha:]]:[\\\\/]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?(.*))$%u',
+ $path,
+ $parts
+ );
+ $path = $parts[ 'path' ];
+ if ($parts[ 'root' ] === '\\') {
+ $parts[ 'root' ] = substr(getcwd(), 0, 2) . $parts[ 'root' ];
+ } else {
+ if ($realpath !== null && !$parts[ 'root' ]) {
+ $path = getcwd() . DIRECTORY_SEPARATOR . $path;
+ }
+ }
+ // normalize DIRECTORY_SEPARATOR
+ $path = str_replace($nds[ DIRECTORY_SEPARATOR ], DIRECTORY_SEPARATOR, $path);
+ $parts[ 'root' ] = str_replace($nds[ DIRECTORY_SEPARATOR ], DIRECTORY_SEPARATOR, $parts[ 'root' ]);
+ do {
+ $path = preg_replace(
+ array('#[\\\\/]{2}#', '#[\\\\/][.][\\\\/]#', '#[\\\\/]([^\\\\/.]+)[\\\\/][.][.][\\\\/]#'),
+ DIRECTORY_SEPARATOR,
+ $path,
+ -1,
+ $count
+ );
+ } while ($count > 0);
+ return $realpath !== false ? $parts[ 'root' ] . $path : str_ireplace(getcwd(), '.', $parts[ 'root' ] . $path);
+ }
+
+ /**
+ * Empty template objects cache
+ */
+ public function _clearTemplateCache()
+ {
+ Smarty_Internal_Template::$isCacheTplObj = array();
+ Smarty_Internal_Template::$tplObjCache = array();
+ }
+
+ /**
+ * @param boolean $use_sub_dirs
+ */
+ public function setUseSubDirs($use_sub_dirs)
+ {
+ $this->use_sub_dirs = $use_sub_dirs;
+ }
+
+ /**
+ * @param int $error_reporting
+ */
+ public function setErrorReporting($error_reporting)
+ {
+ $this->error_reporting = $error_reporting;
+ }
+
+ /**
+ * @param boolean $escape_html
+ */
+ public function setEscapeHtml($escape_html)
+ {
+ $this->escape_html = $escape_html;
+ }
+
+ /**
+ * Return auto_literal flag
+ *
+ * @return boolean
+ */
+ public function getAutoLiteral()
+ {
+ return $this->auto_literal;
+ }
+
+ /**
+ * Set auto_literal flag
+ *
+ * @param boolean $auto_literal
+ */
+ public function setAutoLiteral($auto_literal = true)
+ {
+ $this->auto_literal = $auto_literal;
+ }
+
+ /**
+ * @param boolean $force_compile
+ */
+ public function setForceCompile($force_compile)
+ {
+ $this->force_compile = $force_compile;
+ }
+
+ /**
+ * @param boolean $merge_compiled_includes
+ */
+ public function setMergeCompiledIncludes($merge_compiled_includes)
+ {
+ $this->merge_compiled_includes = $merge_compiled_includes;
+ }
+
+ /**
+ * Get left delimiter
+ *
+ * @return string
+ */
+ public function getLeftDelimiter()
+ {
+ return $this->left_delimiter;
+ }
+
+ /**
+ * Set left delimiter
+ *
+ * @param string $left_delimiter
+ */
+ public function setLeftDelimiter($left_delimiter)
+ {
+ $this->left_delimiter = $left_delimiter;
+ }
+
+ /**
+ * Get right delimiter
+ *
+ * @return string $right_delimiter
+ */
+ public function getRightDelimiter()
+ {
+ return $this->right_delimiter;
+ }
+
+ /**
+ * Set right delimiter
+ *
+ * @param string
+ */
+ public function setRightDelimiter($right_delimiter)
+ {
+ $this->right_delimiter = $right_delimiter;
+ }
+
+ /**
+ * @param boolean $debugging
+ */
+ public function setDebugging($debugging)
+ {
+ $this->debugging = $debugging;
+ }
+
+ /**
+ * @param boolean $config_overwrite
+ */
+ public function setConfigOverwrite($config_overwrite)
+ {
+ $this->config_overwrite = $config_overwrite;
+ }
+
+ /**
+ * @param boolean $config_booleanize
+ */
+ public function setConfigBooleanize($config_booleanize)
+ {
+ $this->config_booleanize = $config_booleanize;
+ }
+
+ /**
+ * @param boolean $config_read_hidden
+ */
+ public function setConfigReadHidden($config_read_hidden)
+ {
+ $this->config_read_hidden = $config_read_hidden;
+ }
+
+ /**
+ * @param boolean $compile_locking
+ */
+ public function setCompileLocking($compile_locking)
+ {
+ $this->compile_locking = $compile_locking;
+ }
+
+ /**
+ * @param string $default_resource_type
+ */
+ public function setDefaultResourceType($default_resource_type)
+ {
+ $this->default_resource_type = $default_resource_type;
+ }
+
+ /**
+ * @param string $caching_type
+ */
+ public function setCachingType($caching_type)
+ {
+ $this->caching_type = $caching_type;
+ }
+
+ /**
+ * Test install
+ *
+ * @param null $errors
+ */
+ public function testInstall(&$errors = null)
+ {
+ Smarty_Internal_TestInstall::testInstall($this, $errors);
+ }
+
+ /**
+ * Get Smarty object
+ *
+ * @return Smarty
+ */
+ public function _getSmartyObj()
+ {
+ return $this;
+ }
+
+ /**
+ * <> Generic getter.
+ * Calls the appropriate getter function.
+ * Issues an E_USER_NOTICE if no valid getter is found.
+ *
+ * @param string $name property name
+ *
+ * @return mixed
+ */
+ public function __get($name)
+ {
+ if (isset($this->accessMap[ $name ])) {
+ $method = 'get' . $this->accessMap[ $name ];
+ return $this->{$method}();
+ } elseif (isset($this->_cache[ $name ])) {
+ return $this->_cache[ $name ];
+ } elseif (in_array($name, $this->obsoleteProperties)) {
+ return null;
+ } else {
+ trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
+ }
+ return null;
+ }
+
+ /**
+ * <> Generic setter.
+ * Calls the appropriate setter function.
+ * Issues an E_USER_NOTICE if no valid setter is found.
+ *
+ * @param string $name property name
+ * @param mixed $value parameter passed to setter
+ *
+ */
+ public function __set($name, $value)
+ {
+ if (isset($this->accessMap[ $name ])) {
+ $method = 'set' . $this->accessMap[ $name ];
+ $this->{$method}($value);
+ } elseif (in_array($name, $this->obsoleteProperties)) {
+ return;
+ } elseif (is_object($value) && method_exists($value, $name)) {
+ $this->$name = $value;
+ } else {
+ trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE);
+ }
+ }
+
+ /**
+ * Normalize and set directory string
+ *
+ * @param string $dirName cache_dir or compile_dir
+ * @param string $dir filepath of folder
+ */
+ private function _normalizeDir($dirName, $dir)
+ {
+ $this->{$dirName} = $this->_realpath(rtrim($dir, "/\\") . DIRECTORY_SEPARATOR, true);
+ }
+
+ /**
+ * Normalize template_dir or config_dir
+ *
+ * @param bool $isConfig true for config_dir
+ */
+ private function _normalizeTemplateConfig($isConfig)
+ {
+ if ($isConfig) {
+ $processed = &$this->_processedConfigDir;
+ $dir = &$this->config_dir;
+ } else {
+ $processed = &$this->_processedTemplateDir;
+ $dir = &$this->template_dir;
+ }
+ if (!is_array($dir)) {
+ $dir = (array)$dir;
+ }
+ foreach ($dir as $k => $v) {
+ if (!isset($processed[ $k ])) {
+ $dir[ $k ] = $v = $this->_realpath(rtrim($v, "/\\") . DIRECTORY_SEPARATOR, true);
+ $processed[ $k ] = true;
+ }
+ }
+ $isConfig ? $this->_configDirNormalized = true : $this->_templateDirNormalized = true;
+ $isConfig ? $this->_joined_config_dir = join('#', $this->config_dir) :
+ $this->_joined_template_dir = join('#', $this->template_dir);
+ }
+
+ /**
+ * Activates PHP7 compatibility mode:
+ * - converts E_WARNINGS for "undefined array key" and "trying to read property of null" errors to E_NOTICE
+ *
+ * @void
+ */
+ public function muteUndefinedOrNullWarnings(): void {
+ $this->isMutingUndefinedOrNullWarnings = true;
+ }
+
+ /**
+ * Indicates if PHP7 compatibility mode is set.
+ * @bool
+ */
+ public function isMutingUndefinedOrNullWarnings(): bool {
+ return $this->isMutingUndefinedOrNullWarnings;
+ }
+
+}
diff --git a/libs/smarty/bootstrap.php b/libs/smarty/bootstrap.php
new file mode 100644
index 0000000..2c83046
--- /dev/null
+++ b/libs/smarty/bootstrap.php
@@ -0,0 +1,16 @@
+
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+/**
+ * Load and register Smarty Autoloader
+ */
+if (!class_exists('Smarty_Autoloader')) {
+ include dirname(__FILE__) . '/Autoloader.php';
+}
+Smarty_Autoloader::register(true);
diff --git a/libs/smarty/debug.tpl b/libs/smarty/debug.tpl
new file mode 100644
index 0000000..edc7bef
--- /dev/null
+++ b/libs/smarty/debug.tpl
@@ -0,0 +1,160 @@
+{capture name='_smarty_debug' assign=debug_output}
+
+
+
+ Smarty Debug Console
+
+
+
+
+