Files
TSN-Ranksystem/jobs/addon_channelinfo_toplist.php
Newcomer1989 575e215e0b release 1.3.19
2021-12-21 20:40:13 +01:00

145 lines
9.1 KiB
PHP

<?PHP
function addon_channelinfo_toplist(&$addons_config,$ts3,$mysqlcon,$cfg,$dbname,$lang,&$db_cache) {
$sqlexec = '';
$nowtime = time();
$smarty = new Smarty();
$smarty->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;
}
?>