status_chk() != 1) { $remote_servers_offline[$rhost_id] = $remote_server; continue; } else { $jobs = $remote->scheduler_list_tasks(); if($jobs != -1) { foreach($jobs as $jobId => $job) { $parts = explode(" ", $job); $minute = $parts[0]; $hour = $parts[1]; $dayOfTheMonth = $parts[2]; $month = $parts[3]; $dayOfTheWeek = $parts[4]; unset($parts[0],$parts[1],$parts[2],$parts[3],$parts[4]); $command = implode(" ", $parts); $retval = preg_match_all("/^%ACTION=(start|restart|stop)\|%\|(.*)$/", $command, $job_info ); if($retval and !empty($job_info[1][0])) { //print_r($job_info); $action = $job_info[1][0]; $server_args = explode("|%|", $job_info[2][0]); switch ($action) { case 'start': list($home_id, $home_path, $server_exe, $run_dir, $startup_cmd, $port, $ip, $cpu, $nice) = $server_args; break; case 'restart': list($home_id, $ip, $port, $control_protocol, $control_password, $control_type, $home_path, $server_exe, $run_dir, $startup_cmd, $cpu, $nice) = $server_args; break; case 'stop': list($home_id, $ip, $port, $control_protocol, $control_password, $control_type, $home_path) = $server_args; break; } if(!isset($server_homes[$home_id."_".$ip."_".$port])) continue; if(!$getAllJobs && !hasAccessToCronjobHomeId($home_id)){ continue; } $jobsArray[$rhost_id][$jobId] = array( 'job' => $job, 'minute' => $minute, 'hour' => $hour, 'dayOfTheMonth' => $dayOfTheMonth, 'month' => $month, 'dayOfTheWeek' => $dayOfTheWeek, 'action' => $action, 'home_id' => $home_id, 'ip' => $ip, 'port' => $port); } else if(getURLParam("homeid=", $command) !== false){ $homeId = getURLParam("homeid=", $command); if(!$getAllJobs && !hasAccessToCronjobHomeId($homeId)){ continue; } $action = getURLParam("action=", $command); if($action == "autoUpdateSteamHome"){ $action = "steam_auto_update"; }else if($action == "stopServer"){ $action = "stop"; }else if($action == "startServer"){ $action = "start"; }else if($action == "restartServer"){ $action = "restart"; } $jobsArray[$rhost_id][$jobId] = array( 'job' => $job, 'minute' => $minute, 'hour' => $hour, 'dayOfTheMonth' => $dayOfTheMonth, 'month' => $month, 'dayOfTheWeek' => $dayOfTheWeek, 'command' => $command, 'action' => $action, 'home_id' => $homeId); } else { if(!$getAllJobs && !$db->isAdmin($_SESSION['user_id'])){ continue; } $jobsArray[$rhost_id][$jobId] = array( 'job' => $job, 'minute' => $minute, 'hour' => $hour, 'dayOfTheMonth' => $dayOfTheMonth, 'month' => $month, 'dayOfTheWeek' => $dayOfTheWeek, 'command' => $command); } } } } } return array($jobsArray, $remote_servers_offline); } function updateCronJobPasswords($db, $remote, $changedHomeId){ $homes = $db->getIpPorts(); foreach( $homes as $home ) { $id = $home['home_id']."_".$home['ip']."_".$home['port']; $server_homes[$id] = $home; $server_id = $home['remote_server_id']; $remote_servers[$server_id] = array("remote_server_id" => $home['remote_server_id'], "remote_server_name" => $home['remote_server_name'], "ogp_user" => $home['ogp_user'], "agent_ip" => $home['agent_ip'], "agent_port" => $home['agent_port'], "ftp_port" => $home['ftp_port'], "encryption_key" => $home['encryption_key'], "timeout" => $home['timeout'], "use_nat" => $home['use_nat'], "ftp_ip" => $home['ftp_ip']); } list($jobsArray, $remote_servers_offline) = reloadJobs($server_homes, $remote_servers); $homes = customShift($homes, "home_id", $changedHomeId); $homeIdStr = "homeid="; $actionStr = "action="; $cPassStr = "controlpass="; if(count($homes) > 0){ $home = $homes[0]; if($home["home_id"] == $changedHomeId){ $control_password = $home['control_password']; foreach( $jobsArray as $remote_server_id => $jobs ) { if($home['remote_server_id'] == $remote_server_id){ foreach($jobs as $jobId => $job) { $command = $job['command']; $homeId = getURLParam($homeIdStr, $command); $action = getURLParam($actionStr, $command); if($homeId !== false && $action !== false){ if($homeId == $changedHomeId){ $curPass = getURLParam($cPassStr, $command); if(stripos($curPass, '" --no-check-certificate') !== false){ $curPass = substr($curPass, 0, stripos($curPass, '" --no-check-certificate')); }else if(strrpos($curPass, '"') !== false){ $curPass = substr($curPass, 0, strrpos($curPass, '"')); } if($curPass != $control_password){ $command = str_replace($cPassStr . $curPass, $cPassStr . $control_password, $command); $minute = $job['minute']; $hour = $job['hour']; $dayOfTheMonth = $job['dayOfTheMonth']; $month = $job['month']; $dayOfTheWeek = $job['dayOfTheWeek']; $job = $minute." ". $hour ." ". $dayOfTheMonth." ". $month." ". $dayOfTheWeek." ". $command; $remote->scheduler_edit_task($jobId, $job); } } } } } } } } } function get_action_selector($action = false) { $server_actions = array('restart','stop','start','steam_auto_update'); $select_action = ''; } function get_server_selector($server_homes, $homeid_ip_port = FALSE, $onchange = FALSE, $includeRemoteName = false) { $onchange_this_form_submit = $onchange ? 'onchange="this.form.submit();"' : ''; $select_game = "\n"; } function get_remote_server_selector($r_servers, $remote_servers_offline, $remote_server_id = FALSE, $onchange = FALSE, $first_empty = FALSE ) { $onchange_this_form_submit = $onchange ? 'onchange="this.form.submit();"' : ''; $select_rserver = "\n"; } function checkCronInput($min, $hour, $day, $month, $dayOfWeek) { $blacklist = '"#$%^&()+=[]\';{}|:<>?~'; $returns = array(); $args = func_get_args(); foreach ($args as $k => $arg) { if (strlen($arg) == 0 || strpbrk($arg, $blacklist) || preg_match('/\\s/', $arg)) { $returns[$k] = false; } } return (empty($returns) ? true : false); } function hasAccessToCronjobHomeId($home_id){ global $db; $hasAccess = ($db->isAdmin($_SESSION['user_id'])) ? true : $db->getUserGameHome($_SESSION['user_id'], $home_id); return $hasAccess; } ?>