Skip to content

Commit ee25765

Browse files
author
Julian Merkle
committed
Merge branch 'develop'
2 parents 9750be7 + dd8f4ba commit ee25765

File tree

239 files changed

+33225
-327
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

239 files changed

+33225
-327
lines changed

api/index.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,6 @@
147147
"mode_desc" => $modedesc
148148
);
149149
$count = 0;
150-
krsort($sql['rankup_definition']);
151150
foreach (explode(',', $sql['rankup_definition']) as $entry) {
152151
list($key, $value) = explode('=>', $entry);
153152
$addnewvalue1[$count] = array(

install.php

Lines changed: 68 additions & 8 deletions
Large diffs are not rendered by default.

jobs/addon_channelinfo_toplist.php

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
<?PHP
2+
function addon_channelinfo_toplist(&$addons_config,$ts3,$mysqlcon,$cfg,$dbname,$lang,&$db_cache) {
3+
$sqlexec = '';
4+
$nowtime = time();
5+
6+
$smarty = new Smarty();
7+
8+
$smarty->setTemplateDir($cfg['logs_path'].'smarty/templates');
9+
$smarty->setCompileDir($cfg['logs_path'].'smarty/templates_c');
10+
$smarty->setCacheDir($cfg['logs_path'].'smarty/cache');
11+
$smarty->setConfigDir($cfg['logs_path'].'smarty/configs');
12+
13+
if(isset($addons_config['channelinfo_toplist_active']['value']) && $addons_config['channelinfo_toplist_active']['value'] == '1') {
14+
if($addons_config['channelinfo_toplist_lastupdate']['value'] < ($nowtime - $addons_config['channelinfo_toplist_delay']['value'])) {
15+
16+
switch($addons_config['channelinfo_toplist_modus']['value']) {
17+
case 1: $filter = "ORDER BY (`count_week`-`idle_week`)"; break;
18+
case 2: $filter = "ORDER BY `count_week`"; break;
19+
case 3: $filter = "ORDER BY (`count_month`-`idle_month`)"; break;
20+
case 4: $filter = "ORDER BY `count_month`"; break;
21+
case 5: $filter = "ORDER BY (`count`-`idle`)"; break;
22+
case 6: $filter = "ORDER BY `count`"; break;
23+
default: $filter = "ORDER BY (`count_week`-`idle_week`)";
24+
}
25+
26+
$notinuuid = '';
27+
if($cfg['rankup_excepted_unique_client_id_list'] != NULL) {
28+
foreach($cfg['rankup_excepted_unique_client_id_list'] as $uuid => $value) {
29+
$notinuuid .= "'".$uuid."',";
30+
}
31+
$notinuuid = substr($notinuuid, 0, -1);
32+
} else {
33+
$notinuuid = "'0'";
34+
}
35+
36+
$notingroup = '';
37+
$andnotgroup = '';
38+
if($cfg['rankup_excepted_group_id_list'] != NULL) {
39+
foreach($cfg['rankup_excepted_group_id_list'] as $group => $value) {
40+
$notingroup .= "'".$group."',";
41+
$andnotgroup .= " AND `user`.`cldgroup` NOT LIKE ('".$group.",%') AND `user`.`cldgroup` NOT LIKE ('%,".$group.",%') AND `user`.`cldgroup` NOT LIKE ('%,".$group."')";
42+
}
43+
$notingroup = substr($notingroup, 0, -1);
44+
} else {
45+
$notingroup = '0';
46+
}
47+
48+
$filter = " AND `user`.`uuid` NOT IN ($notinuuid) AND `user`.`cldgroup` NOT IN ($notingroup) $andnotgroup ".$filter;
49+
#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");
50+
51+
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) {
52+
enter_logfile($cfg,2,'addon_channelinfo1: '.print_r($mysqlcon->errorInfo(), true));
53+
}
54+
55+
$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")));
56+
57+
for ($nr = 0; $nr < 10; $nr++) {
58+
$smarty->assign('CLIENT_UNIQUE_IDENTIFIER_'.($nr + 1),$userdata[$nr]['uuid']);
59+
$smarty->assign('CLIENT_DATABASE_ID_'.($nr + 1),$userdata[$nr]['cldbid']);
60+
$smarty->assign('CLIENT_NICKNAME_'.($nr + 1),$userdata[$nr]['name']);
61+
62+
if($userdata[$nr]['firstcon'] == 0) {
63+
$smarty->assign('CLIENT_CREATED_'.($nr + 1),$lang['unknown']);
64+
} else {
65+
$smarty->assign('CLIENT_CREATED_'.($nr + 1),date('Y-m-d H:i:s',$userdata[$nr]['firstcon']));
66+
}
67+
$smarty->assign('CLIENT_LAST_SEEN_'.($nr + 1),date('Y-m-d H:i:s',$userdata[$nr]['lastseen']));
68+
$smarty->assign('CLIENT_TOTAL_CONNECTIONS_'.($nr + 1),$userdata[$nr]['total_connections']);
69+
$smarty->assign('CLIENT_DESCRIPTION_'.($nr + 1),$userdata[$nr]['client_description']);
70+
$smarty->assign('CLIENT_CURRENT_CHANNEL_ID_'.($nr + 1),$userdata[$nr]['cid']);
71+
if(isset($db_cache['channel'][$userdata[$nr]['cid']]['channel_name'])) {
72+
$smarty->assign('CLIENT_CURRENT_CHANNEL_NAME_'.($nr + 1),substr($db_cache['channel'][$userdata[$nr]['cid']]['channel_name'],1,-1));
73+
} else {
74+
$smarty->assign('CLIENT_CURRENT_CHANNEL_NAME_'.($nr + 1),$lang['unknown']);
75+
}
76+
$smarty->assign('CLIENT_VERSION_'.($nr + 1),$userdata[$nr]['version']);
77+
$smarty->assign('CLIENT_PLATFORM_'.($nr + 1),$userdata[$nr]['platform']);
78+
$smarty->assign('CLIENT_COUNTRY_'.($nr + 1),$userdata[$nr]['nation']);
79+
80+
if($userdata[$nr]['grpsince'] == 0) {
81+
$smarty->assign('CLIENT_LAST_RANKUP_TIME_'.($nr + 1),$lang['unknown']);
82+
} else {
83+
$smarty->assign('CLIENT_LAST_RANKUP_TIME_'.($nr + 1),date('Y-m-d H:i:s',$userdata[$nr]['grpsince']));
84+
}
85+
$smarty->assign('CLIENT_RANK_POSITION_'.($nr + 1),$userdata[$nr]['rank']);
86+
if($userdata[$nr]['online'] == 1) {
87+
$smarty->assign('CLIENT_ONLINE_STATUS_'.($nr + 1),$lang['stix0024']);
88+
} else {
89+
$smarty->assign('CLIENT_ONLINE_STATUS_'.($nr + 1),$lang['stix0025']);
90+
}
91+
92+
$smarty->assign('CLIENT_NEXT_RANKUP_TIME_'.($nr + 1),$userdata[$nr]['nextup']);
93+
94+
$smarty->assign('CLIENT_CURRENT_RANK_GROUP_ID_'.($nr + 1),$userdata[$nr]['grpid']);
95+
if(isset($db_cache['groups'][$userdata[$nr]['grpid']]['sgidname'])) {
96+
$smarty->assign('CLIENT_CURRENT_RANK_GROUP_NAME_'.($nr + 1),substr($db_cache['groups'][$userdata[$nr]['grpid']]['sgidname'],1,-1));
97+
} else {
98+
$smarty->assign('CLIENT_CURRENT_RANK_GROUP_NAME_'.($nr + 1),'unknown_group');
99+
}
100+
if(isset($db_cache['groups'][$userdata[$nr]['grpid']]['iconid']) && isset($db_cache['groups'][$userdata[$nr]['grpid']]['ext'])) {
101+
$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']);
102+
} else {
103+
$smarty->assign('CLIENT_CURRENT_RANK_GROUP_ICON_URL_'.($nr + 1),'file_not_found');
104+
}
105+
$active_all = round($userdata[$nr]['count']) - round($userdata[$nr]['idle']);
106+
$smarty->assign('CLIENT_ACTIVE_TIME_ALL_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".$active_all))->format($cfg['default_date_format'])));
107+
$smarty->assign('CLIENT_ONLINE_TIME_ALL_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".round($userdata[$nr]['count'])))->format($cfg['default_date_format'])));
108+
$smarty->assign('CLIENT_IDLE_TIME_ALL_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".round($userdata[$nr]['idle'])))->format($cfg['default_date_format'])));
109+
$active_week = round($userdata[$nr]['count_week']) - round($userdata[$nr]['idle_week']);
110+
$smarty->assign('CLIENT_ACTIVE_TIME_LAST_WEEK_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".$active_week))->format($cfg['default_date_format'])));
111+
$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'])));
112+
$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'])));
113+
$active_month = round($userdata[$nr]['count_month']) - round($userdata[$nr]['idle_month']);
114+
$smarty->assign('CLIENT_ACTIVE_TIME_LAST_MONTH_'.($nr + 1),((new DateTime("@0"))->diff(new DateTime("@".$active_month))->format($cfg['default_date_format'])));
115+
$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'])));
116+
$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'])));
117+
}
118+
119+
try {
120+
$toplist_desc = $smarty->fetch('string:'.$addons_config['channelinfo_toplist_desc']['value']);
121+
if ($addons_config['channelinfo_toplist_lastdesc']['value'] != $toplist_desc) {
122+
try {
123+
$ts3->channelGetById($addons_config['channelinfo_toplist_channelid']['value'])->modify(array('cid='.$addons_config['channelinfo_toplist_channelid']['value'], 'channel_description='.$toplist_desc));
124+
$addons_config['channelinfo_toplist_lastdesc']['value'] = $toplist_desc;
125+
$addons_config['channelinfo_toplist_lastupdate']['value'] = $nowtime;
126+
$toplist_desc = $mysqlcon->quote($toplist_desc, ENT_QUOTES);
127+
$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";
128+
enter_logfile($cfg,5,' Addon: \'channelinfo_toplist\' writing new channelinfo toplist to channel description.');
129+
} catch (Exception $e) {
130+
enter_logfile($cfg,2,'addon_channelinfo2: ['.$e->getCode().']: '.$e->getMessage());
131+
}
132+
}
133+
} catch (Exception $e) {
134+
$errmsg = str_replace('"', '\'', $e->getMessage());
135+
$addons_config['channelinfo_toplist_lastupdate']['value'] = $nowtime;
136+
$sqlexec .= "INSERT IGNORE INTO `$dbname`.`addons_config` (`param`,`value`) VALUES ('channelinfo_toplist_lastupdate','{$nowtime}') ON DUPLICATE KEY UPDATE `value`=VALUES(`value`);\n";
137+
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);
138+
}
139+
}
140+
}
141+
142+
unset($smarty);
143+
return $sqlexec;
144+
}
145+
?>

jobs/bot.php

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626

2727
require_once(substr(__DIR__,0,-4).'other/phpcommand.php');
2828

29-
if(isset($_SERVER['HTTP_HOST']) || isset($_SERVER['REMOTE_ADDR'])) {
29+
if((isset($_SERVER['HTTP_HOST']) || isset($_SERVER['REMOTE_ADDR'])) && isset($cfg_params['default_cmdline_sec_switch']) && $cfg_params['default_cmdline_sec_switch'] == 1) {
3030
shutdown($mysqlcon,$cfg,1,"Request to start the Ranksystem from ".$_SERVER['REMOTE_ADDR'].". It seems the request came not from the command line!");
3131
}
3232
if(version_compare(PHP_VERSION, '5.5.0', '<')) {
@@ -52,6 +52,7 @@
5252
require_once(substr(__DIR__,0,-4).'libs/ts3_lib/TeamSpeak3.php');
5353
require_once(substr(__DIR__,0,-4).'jobs/calc_user.php');
5454
require_once(substr(__DIR__,0,-4).'jobs/get_avatars.php');
55+
require_once(substr(__DIR__,0,-4).'jobs/update_channel.php');
5556
require_once(substr(__DIR__,0,-4).'jobs/update_groups.php');
5657
require_once(substr(__DIR__,0,-4).'jobs/calc_serverstats.php');
5758
require_once(substr(__DIR__,0,-4).'jobs/server_usage.php');
@@ -64,6 +65,7 @@
6465
// require_once(substr(__DIR__,0,-4).'jobs/update_rs.php');
6566
require_once(substr(__DIR__,0,-4).'jobs/reset_rs.php');
6667
require_once(substr(__DIR__,0,-4).'jobs/db_ex_imp.php');
68+
require_once(substr(__DIR__,0,-4).'libs/smarty/Smarty.class.php');
6769

6870
enter_logfile($cfg,9,"Running on OS: ".php_uname("s")." ".php_uname("r"));
6971
enter_logfile($cfg,9,"Using PHP Version: ".PHP_VERSION);
@@ -97,20 +99,28 @@
9799
enter_logfile($cfg,4,"Loading addons...");
98100
require_once(substr(__DIR__,0,-4).'other/load_addons_config.php');
99101
$addons_config = load_addons_config($mysqlcon,$lang,$cfg,$dbname);
100-
if($addons_config['assign_groups_active']['value'] == '1') {
101-
enter_logfile($cfg,4," Addon: 'assign_groups' [ON]");
102-
include(substr(__DIR__,0,-4).'jobs/addon_assign_groups.php');
103-
$cfg['temp_addon_assign_groups'] = "enabled";
104-
} else {
105-
enter_logfile($cfg,4," Addon: 'assign_groups' [OFF]");
106-
$cfg['temp_addon_assign_groups'] = "disabled";
107-
}
102+
if($addons_config['assign_groups_active']['value'] == '1') {
103+
enter_logfile($cfg,4," Addon: 'assign_groups' [ON]");
104+
include(substr(__DIR__,0,-4).'jobs/addon_assign_groups.php');
105+
$cfg['temp_addon_assign_groups'] = "enabled";
106+
} else {
107+
enter_logfile($cfg,4," Addon: 'assign_groups' [OFF]");
108+
$cfg['temp_addon_assign_groups'] = "disabled";
109+
}
110+
if($addons_config['channelinfo_toplist_active']['value'] == '1') {
111+
enter_logfile($cfg,4," Addon: 'channelinfo_toplist' [ON]");
112+
include(substr(__DIR__,0,-4).'jobs/addon_channelinfo_toplist.php');
113+
$cfg['temp_addon_channelinfo_toplist'] = "enabled";
114+
} else {
115+
enter_logfile($cfg,4," Addon: 'channelinfo_toplist' [OFF]");
116+
$cfg['temp_addon_channelinfo_toplist'] = "disabled";
117+
}
108118
enter_logfile($cfg,4,"Loading addons [done]");
109119

110120
function run_bot(&$cfg) {
111121
global $mysqlcon, $db, $dbname, $dbtype, $lang, $phpcommand, $addons_config, $max_execution_time, $memory_limit, $ts3server;
112122

113-
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)."\").");
123+
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)."').");
114124

115125
try {
116126
if($cfg['temp_ts_no_reconnection'] != 1) {
@@ -327,7 +337,7 @@ function run_bot(&$cfg) {
327337
$looptime = $cfg['temp_count_laps'] = $cfg['temp_whole_laptime'] = $cfg['temp_count_laptime'] = 0; $cfg['temp_last_laptime'] = '';
328338
usleep(3000000);
329339

330-
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) {
340+
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) {
331341
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
332342
}
333343

@@ -351,9 +361,12 @@ function run_bot(&$cfg) {
351361
$db_cache['groups'] = $fetched_array;
352362
break;
353363
case 5:
354-
$db_cache['addon_assign_groups'] = $fetched_array;
364+
$db_cache['channel'] = $fetched_array;
355365
break;
356366
case 6:
367+
$db_cache['addon_assign_groups'] = $fetched_array;
368+
break;
369+
case 7:
357370
$db_cache['admin_addtime'] = $fetched_array;
358371
break 2;
359372
}
@@ -374,7 +387,7 @@ function run_bot(&$cfg) {
374387

375388
if($db_cache['job_check']['reload_trigger']['timestamp'] == 1) {
376389
unset($db_cache['addon_assign_groups'],$db_cache['admin_addtime']);
377-
if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`; SELECT * FROM `$dbname`.`groups`;")) === false) {
390+
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) {
378391
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
379392
}
380393

@@ -392,6 +405,9 @@ function run_bot(&$cfg) {
392405
break;
393406
case 3:
394407
$db_cache['groups'] = $fetched_array;
408+
break;
409+
case 4:
410+
$db_cache['channel'] = $fetched_array;
395411
break 2;
396412
}
397413
$get_db_data->nextRowset();
@@ -420,10 +436,14 @@ function run_bot(&$cfg) {
420436
$sqlexec .= server_usage($mysqlcon,$cfg,$dbname,$serverinfo,$db_cache);
421437
$sqlexec .= calc_user_snapshot($cfg,$dbname,$db_cache);
422438
$sqlexec .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$db_cache);
439+
$sqlexec .= update_channel($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$db_cache);
423440

424441
if($addons_config['assign_groups_active']['value'] == '1') {
425442
$sqlexec .= addon_assign_groups($addons_config,$ts3server,$cfg,$dbname,$allclients,$db_cache);
426443
}
444+
if($addons_config['channelinfo_toplist_active']['value'] == '1') {
445+
$sqlexec .= addon_channelinfo_toplist($addons_config,$ts3server,$mysqlcon,$cfg,$dbname,$lang,$db_cache);
446+
}
427447

428448
$startsql = microtime(true);
429449
if($cfg['logs_debug_level'] > 5) {

0 commit comments

Comments
 (0)