Skip to content

Commit d196dfb

Browse files
committed
release 1.3.9
1 parent 2336177 commit d196dfb

62 files changed

Lines changed: 3718 additions & 4198 deletions

Some content is hidden

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

api/index.php

Lines changed: 229 additions & 43 deletions
Large diffs are not rendered by default.

install.php

Lines changed: 60 additions & 45 deletions
Large diffs are not rendered by default.

jobs/addon_assign_groups.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<?PHP
2-
function addon_assign_groups($addons_config,$ts3,$cfg,$dbname,$allclients,$select_arr) {
2+
function addon_assign_groups($addons_config,$ts3,$cfg,$dbname,$allclients,&$db_cache) {
33
$sqlexec = '';
44

5-
if(isset($select_arr['addon_assign_groups']) && count($select_arr['addon_assign_groups']) != 0) {
6-
foreach($select_arr['addon_assign_groups'] as $uuid => $value) {
5+
if(isset($db_cache['addon_assign_groups']) && count($db_cache['addon_assign_groups']) != 0) {
6+
foreach($db_cache['addon_assign_groups'] as $uuid => $value) {
77
$cld_groups = explode(',', $value['grpids']);
88
foreach($cld_groups as $group) {
99
foreach ($allclients as $client) {
@@ -30,15 +30,15 @@ function addon_assign_groups($addons_config,$ts3,$cfg,$dbname,$allclients,$selec
3030
usleep($cfg['teamspeak_query_command_delay']);
3131
$ts3->serverGroupClientAdd($group, $cldbid);
3232
enter_logfile($cfg,6,"Added servergroup $group from user $nickname (UID: $uid), requested by Add-on 'Assign Servergroups'");
33-
}
34-
catch (Exception $e) {
33+
} catch (Exception $e) {
3534
enter_logfile($cfg,2,"addon_assign_groups:".$e->getCode().': '."Error while adding group: ".$e->getMessage());
3635
}
3736
}
3837
}
3938
}
4039
}
41-
$sqlexec .= "DELETE FROM `$dbname`.`addon_assign_groups`; ";
40+
$sqlexec .= "DELETE FROM `$dbname`.`addon_assign_groups`;\n";
41+
unset($db_cache['addon_assign_groups']);
4242
}
4343
return $sqlexec;
4444
}

jobs/bot.php

Lines changed: 116 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
$memory_limit = "{none set}";
1414
}
1515
set_time_limit(0);
16-
error_reporting(0);
1716

1817
function shutdown($mysqlcon = NULL,$cfg,$loglevel,$reason,$nodestroypid = TRUE) {
1918
if($nodestroypid === TRUE) {
@@ -33,26 +32,13 @@ function enter_logfile($cfg,$loglevel,$logtext,$norotate = false) {
3332
if($loglevel!=9 && $loglevel > $cfg['logs_debug_level']) return;
3433
$file = $cfg['logs_path'].'ranksystem.log';
3534
switch ($loglevel) {
36-
case 1:
37-
$loglevel = " CRITICAL ";
38-
break;
39-
case 2:
40-
$loglevel = " ERROR ";
41-
break;
42-
case 3:
43-
$loglevel = " WARNING ";
44-
break;
45-
case 4:
46-
$loglevel = " NOTICE ";
47-
break;
48-
case 5:
49-
$loglevel = " INFO ";
50-
break;
51-
case 6:
52-
$loglevel = " DEBUG ";
53-
break;
54-
default:
55-
$loglevel = " NONE ";
35+
case 1: $loglevel = " CRITICAL "; break;
36+
case 2: $loglevel = " ERROR "; break;
37+
case 3: $loglevel = " WARNING "; break;
38+
case 4: $loglevel = " NOTICE "; break;
39+
case 5: $loglevel = " INFO "; break;
40+
case 6: $loglevel = " DEBUG "; break;
41+
default:$loglevel = " NONE ";
5642
}
5743
$loghandle = fopen($file, 'a');
5844
fwrite($loghandle, DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''))->setTimeZone(new DateTimeZone($cfg['logs_timezone']))->format("Y-m-d H:i:s.u ").$loglevel.$logtext."\n");
@@ -103,6 +89,8 @@ function enter_logfile($cfg,$loglevel,$logtext,$norotate = false) {
10389
require_once(substr(__DIR__,0,-4).'jobs/get_avatars.php');
10490
require_once(substr(__DIR__,0,-4).'jobs/update_groups.php');
10591
require_once(substr(__DIR__,0,-4).'jobs/calc_serverstats.php');
92+
require_once(substr(__DIR__,0,-4).'jobs/server_usage.php');
93+
require_once(substr(__DIR__,0,-4).'jobs/calc_user_snapshot.php');
10694
require_once(substr(__DIR__,0,-4).'jobs/calc_userstats.php');
10795
require_once(substr(__DIR__,0,-4).'jobs/clean.php');
10896
require_once(substr(__DIR__,0,-4).'jobs/check_db.php');
@@ -221,8 +209,8 @@ function run_bot() {
221209
enter_logfile($cfg,2," Error due getting TS3 server version - ".$e->getCode().': '.$e->getMessage());
222210
}
223211

224-
if(version_compare($ts3version['version'],'3.6.9','=<')) {
225-
enter_logfile($cfg,3," Your TS3 server is outdated, please update it.. also to be ready for TS5!");
212+
if(version_compare($ts3version['version'],'3.11.9','<=')) {
213+
enter_logfile($cfg,3," Your TS3 server is outdated, please update it!");
226214
}
227215

228216
enter_logfile($cfg,9," Select virtual server...");
@@ -304,7 +292,7 @@ function run_bot() {
304292
$loglevel = "6 - DEBUG";
305293
break;
306294
default:
307-
$loglevel = "UNKOWN";
295+
$loglevel = "UNKNOWN";
308296
}
309297
enter_logfile($cfg,9," Log Level: ".$loglevel);
310298
enter_logfile($cfg,6," Serverside config 'max_execution_time' (PHP.ini): ".$max_execution_time." sec.");
@@ -348,11 +336,12 @@ function run_bot() {
348336

349337
$serverinfo = $ts3server->serverInfo();
350338
$select_arr = array();
351-
$sqlexec2 .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr,1);
339+
$db_cache = array();
340+
$sqlexec2 .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$db_cache,1);
352341
if($mysqlcon->exec($sqlexec2) === false) {
353342
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
354343
}
355-
unset($sqlexec2,$select_arr,$groupslist,$serverinfo,$ts3version);
344+
unset($sqlexec2,$select_arr,$db_cache,$groupslist,$serverinfo,$ts3version);
356345
$errcnf = 0;
357346
enter_logfile($cfg,4," Downloading of servergroups finished. Recheck the config.");
358347

@@ -402,115 +391,144 @@ function run_bot() {
402391
}
403392
}
404393
}
405-
394+
406395
if($cfg['webinterface_fresh_installation'] == 1) {
407396
if($mysqlcon->exec("UPDATE `$dbname`.`cfg_params` SET `value`=0 WHERE `param`='webinterface_fresh_installation'") === false) {
408397
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
409398
}
410399
}
411-
400+
412401
unset($groupslist,$errcnf,$checkgroups,$lastupdate,$updcld,$loglevel,$whoami,$ts3host,$max_execution_time,$memory_limit,$memory_limit);
413402
enter_logfile($cfg,9,"Config check [done]");
414403

415404
enter_logfile($cfg,9,"Bot starts now his work!");
416405
$looptime = $cfg['temp_count_laps'] = $cfg['temp_whole_laptime'] = $cfg['temp_count_laptime'] = 0; $cfg['temp_last_laptime'] = '';
417406
usleep(3000000);
418407

408+
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) {
409+
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
410+
}
411+
412+
$count_select = 0;
413+
$db_cache = array();
414+
while($single_select = $get_db_data) {
415+
$fetched_array = $single_select->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
416+
$count_select++;
417+
418+
switch ($count_select) {
419+
case 1:
420+
$db_cache['all_user'] = $fetched_array;
421+
break;
422+
case 2:
423+
$db_cache['max_timestamp_server_usage'] = $fetched_array;
424+
break;
425+
case 3:
426+
$db_cache['job_check'] = $fetched_array;
427+
break;
428+
case 4:
429+
$db_cache['groups'] = $fetched_array;
430+
break;
431+
case 5:
432+
$db_cache['addon_assign_groups'] = $fetched_array;
433+
break;
434+
case 6:
435+
$db_cache['admin_addtime'] = $fetched_array;
436+
break 2;
437+
}
438+
$get_db_data->nextRowset();
439+
}
440+
unset($get_db_data,$fetched_array,$single_select);
441+
442+
$addons_config = load_addons_config($mysqlcon,$lang,$cfg,$dbname);
443+
419444
while(1) {
420445
$sqlexec = '';
421446
$starttime = microtime(true);
422-
423-
if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`user`; SELECT `version`, COUNT(`version`) AS `count` FROM `$dbname`.`user` GROUP BY `version` ORDER BY `count` DESC; SELECT MAX(`timestamp`) AS `timestamp` FROM `$dbname`.`server_usage`; SELECT * FROM `$dbname`.`job_check`; SELECT `uuid` FROM `$dbname`.`stats_user`; SELECT * FROM `$dbname`.`groups`; SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`; ")) === false) {
424-
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
425-
}
426447

427-
$count_select = 0;
428-
$select_arr = array();
429-
while($single_select = $get_db_data) {
430-
$fetched_array = $single_select->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
431-
$count_select++;
448+
unset($db_cache['job_check']);
449+
if(($db_cache['job_check'] = $mysqlcon->query("SELECT * FROM `$dbname`.`job_check`")->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC)) === false) {
450+
enter_logfile($cfg,3," Select on DB failed for job check: ".print_r($mysqlcon->errorInfo(), true));
451+
}
452+
453+
if($db_cache['job_check']['reload_trigger']['timestamp'] == 1) {
454+
unset($db_cache['addon_assign_groups'],$db_cache['admin_addtime']);
455+
if(($get_db_data = $mysqlcon->query("SELECT * FROM `$dbname`.`addon_assign_groups`; SELECT * FROM `$dbname`.`admin_addtime`;")) === false) {
456+
shutdown($mysqlcon,$cfg,1,"Select on DB failed: ".print_r($mysqlcon->errorInfo(), true));
457+
}
432458

433-
switch ($count_select) {
434-
case 1:
435-
$select_arr['all_user'] = $fetched_array;
436-
break;
437-
case 2:
438-
$select_arr['count_version_user'] = $fetched_array;
439-
break;
440-
case 3:
441-
$select_arr['max_timestamp_server_usage'] = $fetched_array;
442-
break;
443-
case 4:
444-
$select_arr['job_check'] = $fetched_array;
445-
break;
446-
case 5:
447-
$select_arr['uuid_stats_user'] = $fetched_array;
448-
break;
449-
case 6:
450-
$select_arr['groups'] = $fetched_array;
451-
break;
452-
case 7:
453-
$select_arr['addon_assign_groups'] = $fetched_array;
454-
break;
455-
case 8:
456-
$select_arr['admin_addtime'] = $fetched_array;
457-
break 2;
459+
$count_select = 0;
460+
while($single_select = $get_db_data) {
461+
$fetched_array = $single_select->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
462+
$count_select++;
463+
464+
switch ($count_select) {
465+
case 1:
466+
$db_cache['addon_assign_groups'] = $fetched_array;
467+
break;
468+
case 2:
469+
$db_cache['admin_addtime'] = $fetched_array;
470+
break 2;
471+
}
472+
$get_db_data->nextRowset();
458473
}
459-
$get_db_data->nextRowset();
474+
unset($get_db_data,$fetched_array,$single_select,$count_select);
475+
$db_cache['job_check']['reload_trigger']['timestamp'] = 0;
476+
$sqlexec .= "UPDATE `$dbname`.`job_check` SET `timestamp`=0 WHERE `job_name`='reload_trigger';\n";
460477
}
461-
unset($get_db_data,$fetched_array,$single_select);
462-
enter_logfile($cfg,6,"SQL select needs: ".(number_format(round((microtime(true) - $starttime), 5),5)));
478+
479+
enter_logfile($cfg,6,"SQL Select needs: ".(number_format(round((microtime(true) - $starttime), 5),5)));
463480

464481
check_shutdown($cfg);
465-
$addons_config = load_addons_config($mysqlcon,$lang,$cfg,$dbname);
482+
466483
$ts3server->clientListReset();
467-
usleep($cfg['teamspeak_query_command_delay']);
468-
$allclients = $ts3server->clientList();
484+
$allclients = $ts3server->clientListtsn("-uid -groups -times -info -country");
469485
usleep($cfg['teamspeak_query_command_delay']);
470486
$ts3server->serverInfoReset();
471-
usleep($cfg['teamspeak_query_command_delay']);
472487
$serverinfo = $ts3server->serverInfo();
473-
$sqlexec .= calc_user($ts3server,$mysqlcon,$lang,$cfg,$dbname,$allclients,$phpcommand,$select_arr);
474-
get_avatars($ts3server,$cfg);
475-
$sqlexec .= clean($ts3server,$mysqlcon,$lang,$cfg,$dbname,$select_arr);
476-
$sqlexec .= calc_serverstats($ts3server,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$select_arr,$phpcommand,$lang);
477-
$sqlexec .= calc_userstats($ts3server,$mysqlcon,$cfg,$dbname,$select_arr);
478-
$sqlexec .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$select_arr);
488+
usleep($cfg['teamspeak_query_command_delay']);
489+
490+
$sqlexec .= calc_user($ts3server,$mysqlcon,$lang,$cfg,$dbname,$allclients,$phpcommand,$db_cache);
491+
$sqlexec .= calc_userstats($ts3server,$mysqlcon,$cfg,$dbname,$db_cache);
492+
$sqlexec .= get_avatars($ts3server,$cfg,$dbname,$db_cache);
493+
$sqlexec .= clean($ts3server,$mysqlcon,$lang,$cfg,$dbname,$db_cache);
494+
$sqlexec .= calc_serverstats($ts3server,$mysqlcon,$cfg,$dbname,$dbtype,$serverinfo,$db_cache,$phpcommand,$lang);
495+
$sqlexec .= server_usage($mysqlcon,$cfg,$dbname,$serverinfo,$db_cache);
496+
$sqlexec .= calc_user_snapshot($cfg,$dbname,$db_cache);
497+
$sqlexec .= update_groups($ts3server,$mysqlcon,$lang,$cfg,$dbname,$serverinfo,$db_cache);
479498

480499
if($addons_config['assign_groups_active']['value'] == '1') {
481-
if($cfg['temp_addon_assign_groups'] == "disabled") {
482-
enter_logfile($cfg,5,"Loading new addon...");
483-
enter_logfile($cfg,5," Addon: 'assign_groups' [ON]");
484-
if(!function_exists('addon_assign_groups')) {
485-
include(substr(__DIR__,0,-4).'jobs/addon_assign_groups.php');
486-
}
487-
$cfg['temp_addon_assign_groups'] = "enabled";
488-
enter_logfile($cfg,5,"Loading new addon [done]");
489-
}
490-
$sqlexec .= addon_assign_groups($addons_config,$ts3server,$cfg,$dbname,$allclients,$select_arr);
491-
} elseif ($cfg['temp_addon_assign_groups'] == "enabled") {
492-
enter_logfile($cfg,5,"Disable addon...");
493-
enter_logfile($cfg,5," Addon: 'assign_groups' [OFF]");
494-
$cfg['temp_addon_assign_groups'] = "disabled";
495-
enter_logfile($cfg,5,"Disable addon [done]");
500+
$sqlexec .= addon_assign_groups($addons_config,$ts3server,$cfg,$dbname,$allclients,$db_cache);
496501
}
497-
502+
498503
$startsql = microtime(true);
499-
if($mysqlcon->exec($sqlexec) === false) {
500-
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
501-
}
502-
enter_logfile($cfg,6,"SQL exections needs: ".(number_format(round((microtime(true) - $startsql), 5),5)));
503504
if($cfg['logs_debug_level'] > 5) {
505+
$sqlexec = substr($sqlexec, 0, -1);
506+
$sqlarr = explode(";\n", $sqlexec);
507+
foreach($sqlarr as $singlesql) {
508+
if(strpos($singlesql, 'UPDATE') !== false || strpos($singlesql, 'INSERT') !== false || strpos($singlesql, 'DELETE') !== false || strpos($singlesql, 'SET') !== false) {
509+
if($mysqlcon->exec($singlesql) === false) {
510+
enter_logfile($cfg,4,"Executing SQL: ".$singlesql);
511+
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
512+
}
513+
} elseif(strpos($singlesql, ' ') === false) {
514+
enter_logfile($cfg,2,"Command not recognized as SQL: ".$singlesql);
515+
}
516+
}
504517
$sqlfile = $cfg['logs_path'].'temp_sql_dump.sql';
505518
$sqldump = fopen($sqlfile, 'wa+');
506-
fwrite($sqldump, DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''))->setTimeZone(new DateTimeZone($cfg['logs_timezone']))->format("Y-m-d H:i:s.u ").' SQL: '.$sqlexec."\n");
519+
fwrite($sqldump, DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''))->setTimeZone(new DateTimeZone($cfg['logs_timezone']))->format("Y-m-d H:i:s.u ")." SQL:\n".$sqlexec);
507520
fclose($sqldump);
521+
} else {
522+
if($mysqlcon->exec($sqlexec) === false) {
523+
enter_logfile($cfg,2,"Executing SQL commands failed: ".print_r($mysqlcon->errorInfo(), true));
524+
}
508525
}
526+
enter_logfile($cfg,6,"SQL executions needs: ".(number_format(round((microtime(true) - $startsql), 5),5)));
509527

510-
reset_rs($ts3server,$mysqlcon,$lang,$cfg,$dbname,$select_arr);
528+
reset_rs($ts3server,$mysqlcon,$lang,$cfg,$dbname,$db_cache);
511529

512530
unset($sqlexec,$select_arr,$sqldump);
513-
531+
514532
$looptime = microtime(true) - $starttime;
515533
$cfg['temp_whole_laptime'] = $cfg['temp_whole_laptime'] + $looptime;
516534
$cfg['temp_count_laptime']++;

0 commit comments

Comments
 (0)