Сборка REDL: панель на PHP 8, капча-тумблер, закрытые уязвимости, установщики в один клик
- панель работает на PHP 8.4 (оригинал под PHP 7.0): elFinder utf8_encode, apache_get_modules, warnings - капча выключена и управляется из админки (флаг captcha_enable + блок настроек) - закрыты две SQL-инъекции без авторизации (createAuthLog: пароль из POST и CF-Connecting-IP) - убрано хранение паролей в открытом виде в authlog, XSS в поле ref - установщики install-panel.sh и install-node.sh (оригинальный затирал sources.list репозиториями Debian 9) - современный Dockerfile (оригинальный на debian:stretch больше не собирается) - планировщик и автозапуск работают без systemd - брендинг REDL.IO, год 2026, ссылки на redl.io - документация на русском: ИЗМЕНЕНИЯ, БЕЗОПАСНОСТЬ, ИНСТРУКЦИЯ
This commit is contained in:
@@ -0,0 +1,428 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
class accController extends Controller {
|
||||
public function index() {
|
||||
$this->data['vk_id'] = $this->config->vk_id;
|
||||
$this->data['url'] = $this->config->url;
|
||||
|
||||
if(!$this->user->isLogged()) {
|
||||
$this->response->redirect($this->config->url . 'account/login');
|
||||
}
|
||||
if($this->user->getAccessLevel() < 0) {
|
||||
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
|
||||
$this->response->redirect($this->config->url);
|
||||
}
|
||||
|
||||
$this->data['logged'] = true;
|
||||
$this->data['user_email'] = $this->user->getEmail();
|
||||
$this->data['user_id'] = $this->user->getId();
|
||||
$this->data['user_firstname'] = $this->user->getFirstname();
|
||||
$this->data['user_lastname'] = $this->user->getLastname();
|
||||
$this->data['user_balance'] = $this->user->getBalance();
|
||||
$this->data['user_img'] = $this->user->getUser_img();
|
||||
$this->data['user_balance'] = $this->user->getBalance();
|
||||
|
||||
$this->load->model('waste');
|
||||
$this->load->model('tickets');
|
||||
$this->load->model('users');
|
||||
$this->load->model('servers');
|
||||
|
||||
$userid = $this->user->getId();
|
||||
|
||||
$waste = $this->wasteModel->getWaste(array('user_id' => (int)$userid), array(), array('waste_date_add' => 'DESC'), array('start' => 0,'limit' => 10));
|
||||
$this->data['waste'] = $waste;
|
||||
|
||||
$this->data['user'] = array('firstname' => $this->user->getFirstname(), 'lastname' => $this->user->getLastname(), 'user_email' => $this->user->getEmail());
|
||||
$users = $this->usersModel->getUserById($userid, array(), array(), array());
|
||||
$this->data['users'] = $users;
|
||||
|
||||
$userg = $this->usersModel->getUsers(array('servers'), array(), array());
|
||||
$this->data['userg'] = $userg;
|
||||
|
||||
$visitors = $this->usersModel->getAuthLog($userid);
|
||||
$this->data['visitors'] = $visitors;
|
||||
|
||||
$auths = $this->usersModel->getAuths(array('user_id' => $userid), array(), array('auth_id' => 'DESC'));
|
||||
$this->data['auths'] = $auths;
|
||||
|
||||
$servers = $this->serversModel->getServers(array('user_id' => (int)$userid), array('games', 'locations'), array(), array());
|
||||
$this->data['servers'] = $servers;
|
||||
|
||||
$tickets = $this->ticketsModel->getTickets(array('user_id' => (int)$userid), array(), array(), array());
|
||||
$this->data['tickets'] = $tickets;
|
||||
|
||||
$row['date'] = strtotime($users['user_date_reg']);
|
||||
$now = time();
|
||||
$seconds = $now - $row['date'];
|
||||
$days = floor($seconds / (24*60*60));
|
||||
$this->data['user_date_reg'] = $days;
|
||||
$res = $this->pluralForm($days, 'день', 'дней', 'дня');
|
||||
$this->data['user_date'] = $res;
|
||||
|
||||
$this->getChild(array('common/header', 'common/footer'));
|
||||
return $this->load->view('main/acc', $this->data);
|
||||
}
|
||||
|
||||
public function action($action = null) {
|
||||
if(!$this->user->isLogged()) {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Вы не авторизированы!";
|
||||
return json_encode($this->data);
|
||||
}
|
||||
if($this->user->getAccessLevel() < 1) {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "У вас нет доступа к данному разделу!";
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
$userid = $this->user->getId();
|
||||
|
||||
$this->load->model('users');
|
||||
$this->load->model('waste');
|
||||
|
||||
switch($action) {
|
||||
case 'setVk': {
|
||||
if($this->request->post['auth']){
|
||||
$Uid = $this->request->post['response']['session']['user']['id'];
|
||||
|
||||
if($this->usersModel->getTotalUsers(array('user_vk_id' => $Uid))) {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Данный профиль уже привязан к другому аккаунту!";
|
||||
} else {
|
||||
if (!$this->user->getUser_vk_id()) {
|
||||
$this->usersModel->updateUser($userid, array('user_vk_id' => $Uid));
|
||||
|
||||
$this->data['status'] = "success";
|
||||
$this->data['success'] = "Профиль привязан!";
|
||||
} else {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Данный аккаунт уже привязан!";
|
||||
}
|
||||
}
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
if($this->request->post['auth_vk']) {
|
||||
if($user = @file_get_contents("https://api.vk.com/method/users.get?uids={$this->session->data['auth_vk']}&fields=uid,first_name,last_name,screen_name,sex,bdate,photo_big"))
|
||||
$this->data['user'] = json_decode($user, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'unsetVk': {
|
||||
if ($this->user->getUser_vk_id()) {
|
||||
$this->usersModel->updateUser($userid, array('user_vk_id' => 0));
|
||||
$this->data['status'] = "success";
|
||||
$this->data['success'] = "Вы успешно отвязали VK!";
|
||||
} else {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "На данный момент у Вас не привязан VK!";
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'closeSession': {
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
$auth_id = $this->request->post['auth_id'];
|
||||
$auths = $this->usersModel->getAuths(array('auth_id' => $auth_id, 'user_id' => $userid));
|
||||
if(empty($auths)) {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Сеанс не найден!";
|
||||
} else {
|
||||
$auth = $auths[0];
|
||||
|
||||
if($auth['auth_key'] != @$_COOKIE['uid']) {
|
||||
$this->usersModel->deleteAuth($auth['auth_id']);
|
||||
|
||||
$this->data['status'] = "success";
|
||||
$this->data['success'] = "Сеанс успешно завершён!";
|
||||
} else {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Вы не можете завершить текущий сеанс!";
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Вы выбрали несуществующее действие!";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
public function ajax() {
|
||||
if(!$this->user->isLogged()) {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Вы не авторизированы!";
|
||||
return json_encode($this->data);
|
||||
}
|
||||
if($this->user->getAccessLevel() < 1) {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "У вас нет доступа к данному разделу!";
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
$this->load->model('users');
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
$errorPOST = $this->validatePOST();
|
||||
if(!$errorPOST) {
|
||||
$lastname = @$this->request->post['lastname'];
|
||||
$firstname = @$this->request->post['firstname'];
|
||||
$editpassword = @$this->request->post['editpassword'];
|
||||
$password = @$this->request->post['password'];
|
||||
|
||||
$userid = $this->user->getId();
|
||||
|
||||
if (@$firstname) {
|
||||
$firstname = @strtoupper($firstname[0]) . substr($firstname, 1);
|
||||
}
|
||||
|
||||
if (@$lastname) {
|
||||
$lastname = @strtoupper($lastname[0]) . substr($lastname, 1);
|
||||
}
|
||||
|
||||
$userData = array(
|
||||
'user_firstname' => $firstname,
|
||||
'user_lastname' => $lastname
|
||||
);
|
||||
|
||||
if($editpassword) {
|
||||
$userData['user_password'] = md5($password);
|
||||
}
|
||||
|
||||
$this->usersModel->updateUser($userid, $userData);
|
||||
|
||||
$this->data['status'] = "success";
|
||||
$this->data['success'] = "Изменения сохранены!";
|
||||
} else {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = $errorPOST;
|
||||
}
|
||||
}
|
||||
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
public function change_email() {
|
||||
if (!$this->user->isLogged()) {
|
||||
$this->data['status'] = 'error';
|
||||
$this->data['error'] = 'Вы не авторизированы!';
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
if ($this->user->getAccessLevel() < 1) {
|
||||
$this->data['status'] = 'error';
|
||||
$this->data['error'] = 'У вас нет доступа к данному разделу!';
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
if ($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
$errorPOST_email = $this->validatePOST_email();
|
||||
|
||||
if (!$errorPOST_email) {
|
||||
$email = @$this->request->post['email'];
|
||||
$userid = $this->user->getId();
|
||||
$this->load->model('users');
|
||||
|
||||
if ($this->usersModel->getTotalUsers(array('user_email' => $email))) {
|
||||
$this->data['status'] = 'error';
|
||||
$this->data['error'] = 'Указанный E-Mail уже используется!';
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
$random = md5(uniqid(rand(), true));
|
||||
$this->usersModel->updateUser($userid, array('user_new_email' => $email . '|' . $random));
|
||||
$user = $this->usersModel->getUserById($userid);
|
||||
|
||||
$this->load->library('mail');
|
||||
|
||||
$mailLib = new mailLibrary();
|
||||
$mailLib->setFrom($this->config->mail_from);
|
||||
$mailLib->setSender($this->config->mail_sender);
|
||||
$mailLib->setTo($user['user_email']);
|
||||
$mailLib->setSubject("Смена E-Mail");
|
||||
$mailData = array();
|
||||
$mailData['firstname'] = $user['user_firstname'];
|
||||
$mailData['lastname'] = $user['user_lastname'];
|
||||
$mailData['email'] = $user['user_email'];
|
||||
$mailData['new_email'] = $email;
|
||||
$mailData['userid'] = $userid;
|
||||
$mailData['key'] = $random;
|
||||
$mailData['url'] = $this->config->url;
|
||||
$mailData['title'] = $this->config->title;
|
||||
$text = $this->load->view('mail/account/change_email', $mailData);
|
||||
|
||||
$mailLib->setText($text);
|
||||
$mailLib->send();
|
||||
|
||||
$this->data['status'] = 'success';
|
||||
$this->data['success'] = 'На текущий E-Mail \'' . $user['user_email'] . '\' Отправлена инструкция с дальнейшими действиями!';
|
||||
}
|
||||
else {
|
||||
$this->data['status'] = 'error';
|
||||
$this->data['error'] = $errorPOST_email;
|
||||
}
|
||||
}
|
||||
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
public function change_email_verifity($userid = null, $key = null)
|
||||
{
|
||||
if (!$userid || !$key) {
|
||||
$this->session->data['error'] = 'Ошибка! Повторите действие.';
|
||||
$this->response->redirect('/main/index');
|
||||
return null;
|
||||
}
|
||||
|
||||
$this->load->model('users');
|
||||
$user = @$this->usersModel->getUserById($userid);
|
||||
if ($user && (@explode('|', $user['user_new_email'])[1] == $key)) {
|
||||
if ($this->usersModel->getTotalUsers(array('user_email' => @explode('|', $user['user_new_email'])[0]))) {
|
||||
exit('Указанный E-Mail уже используется!');
|
||||
}
|
||||
|
||||
$this->usersModel->updateUser($userid, array('user_new_email' => null, 'user_email' => @explode('|', $user['user_new_email'])[0]));
|
||||
$this->session->data['success'] = 'E-Mail Сменен!';
|
||||
} else {
|
||||
$this->session->data['error'] = 'Ошибка! Повторите действие.';
|
||||
}
|
||||
|
||||
$this->response->redirect('/account/login');
|
||||
}
|
||||
|
||||
public function img() {
|
||||
if(!$this->user->isLogged()) {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Вы не авторизированы!";
|
||||
return json_encode($this->data);
|
||||
}
|
||||
if($this->user->getAccessLevel() < 1) {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "У вас нет доступа к данному разделу!";
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
$this->load->model('users');
|
||||
|
||||
if($this->request->server['REQUEST_METHOD'] == 'POST') {
|
||||
$uploaddir = 'tmp/avatar/';
|
||||
$apend=date('YmdHis').rand(100,1000).'.jpg';
|
||||
$uploadfile = "$uploaddir$apend";
|
||||
|
||||
if(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
|
||||
if($_FILES['userfile']['type'] == 'image/gif' || $_FILES['userfile']['type'] == 'image/jpeg' || $_FILES['userfile']['type'] == 'image/png') {
|
||||
if($_FILES['userfile']['size'] != 0 and $_FILES['userfile']['size'] <= 512000) {
|
||||
$size = getimagesize($uploadfile);
|
||||
if ($size[0] <= 512 && $size[1] <= 512) {
|
||||
$userid = $this->user->getId();
|
||||
$this->usersModel->updateUser($userid, array('user_img' => $uploadfile));
|
||||
$this->data['status'] = "success";
|
||||
$this->data['success'] = "Аватар успешно был загружен!";
|
||||
} else {
|
||||
$this->data['error'] = 'Загружаемое изображение превышает допустимые нормы!';
|
||||
$this->data['status'] = "error";
|
||||
unlink($uploadfile);
|
||||
}
|
||||
} else {
|
||||
$this->data['error'] = 'Размер изображения не должено превышать 512Кб';
|
||||
$this->data['status'] = "error";
|
||||
}
|
||||
} else {
|
||||
$this->data['status'] = "error";
|
||||
$this->data['error'] = "Можно загружать только изображения в форматах jpg, jpeg и png";
|
||||
}
|
||||
} else {
|
||||
$this->data['error'] = 'Изображение не загружено!';
|
||||
$this->data['status'] = "error";
|
||||
}
|
||||
}
|
||||
return json_encode($this->data);
|
||||
}
|
||||
|
||||
private function validatePOST() {
|
||||
|
||||
$this->load->library('validate');
|
||||
|
||||
$validateLib = new validateLibrary();
|
||||
|
||||
$result = null;
|
||||
|
||||
$lastname = @$this->request->post['lastname'];
|
||||
$firstname = @$this->request->post['firstname'];
|
||||
$editpassword = @$this->request->post['editpassword'];
|
||||
$password = @$this->request->post['password'];
|
||||
$password2 = @$this->request->post['password2'];
|
||||
|
||||
if (@$firstname) {
|
||||
$firstname = @strtoupper($firstname[0]) . substr($firstname, 1);
|
||||
}
|
||||
|
||||
if (@$lastname) {
|
||||
$lastname = @strtoupper($lastname[0]) . substr($lastname, 1);
|
||||
}
|
||||
|
||||
if(!$validateLib->check_for_number($lastname)) {
|
||||
$result = "Укажите свою реальную фамилию!";
|
||||
}
|
||||
elseif(!$validateLib->check_for_number($firstname)) {
|
||||
$result = "Укажите свое реальное имя!";
|
||||
}
|
||||
elseif($editpassword) {
|
||||
if(!$validateLib->password($password)) {
|
||||
$result = "Пароль должен содержать от 6 до 32 латинских букв, цифр и знаков <i>,.!?_-</i>!";
|
||||
}
|
||||
elseif($password != $password2) {
|
||||
$result = "Введенные вами пароли не совпадают!";
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function validatePOST_email()
|
||||
{
|
||||
$this->load->library('validate');
|
||||
$validateLib = new validateLibrary();
|
||||
$result = NULL;
|
||||
$email = @$this->request->post['email'];
|
||||
|
||||
if (!$validateLib->email($email)) {
|
||||
$result = 'Укажите свой реальный E-Mail!';
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function validatePOST_VK() {
|
||||
$this->load->library('validate');
|
||||
|
||||
$validateLib = new validateLibrary();
|
||||
|
||||
$result = null;
|
||||
|
||||
$id = @strtolower($this->request->post['id']);
|
||||
|
||||
if($this->usersModel->getTotalUsers(array('user_vk_id' => $id))) {
|
||||
$result = "Указанный ID-".$id." уже привязан!";
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function pluralForm($n, $form1, $form2,$form5) {
|
||||
$n = abs($n) % 100;
|
||||
$n1 = $n % 10;
|
||||
if ($n1 >= 5 && $n1 <= 4) return $form2;
|
||||
if ($n >= 10 && $n <= 20) return $form2;
|
||||
if ($n1 >= 2 && $n1 <= 4) return $form5;
|
||||
if ($n1 == 1) return $form1;
|
||||
if ($n == 0) return $form2;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,661 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
class cronController extends Controller {
|
||||
public function index() {
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$this->load->library('mail');
|
||||
$this->load->library('ssh2');
|
||||
$this->load->model('webhost');
|
||||
$this->load->model('servers');
|
||||
$this->load->model('invoices');
|
||||
|
||||
$mailLib = new mailLibrary();
|
||||
$mailLib->setFrom($this->config->mail_from);
|
||||
$mailLib->setSender($this->config->mail_sender);
|
||||
|
||||
$servers = $this->serversModel->getServers(array(), array('users'));
|
||||
$webhosts = $this->webhostModel->getWebhosts(array(), array('users'));
|
||||
|
||||
$datenow = date_create('now');
|
||||
|
||||
foreach($servers as $item) {
|
||||
$operation = false;
|
||||
$serverid = $item['server_id'];
|
||||
$dateend = date_create($item['server_date_end']);
|
||||
$diff = date_diff($datenow, $dateend);
|
||||
|
||||
if($diff->invert) {
|
||||
if($diff->days >= 1) {
|
||||
if($this->serversModel->action($serverid, 'delete')["status"] != "success") {
|
||||
$operation = true;
|
||||
echo "Игровой сервер: gs" . $serverid . " - удаление не удалось.". PHP_EOL;
|
||||
}
|
||||
|
||||
if(!$operation) {
|
||||
if($item['server_mysql'] == 1 || $item['server_mysql'] == 2) {
|
||||
$this->serversModel->action($serverid, "delete_mysql");
|
||||
}
|
||||
$this->serversModel->deleteServer($serverid);
|
||||
$this->serversModel->deleteServerStats($serverid);
|
||||
$this->serversModel->deleteserverOwners($serverid);
|
||||
$this->serversModel->deleteLog($serverid);
|
||||
|
||||
$firewall = $this->serversModel->getFirewallsById($serverid);
|
||||
|
||||
if ($firewall) {
|
||||
foreach ($firewall as $item2) {
|
||||
$ssh2Lib = new ssh2Library();
|
||||
$link = $ssh2Lib->connect($item['location_ip'], $item['location_user'], $item['location_password']);
|
||||
|
||||
$ssh2Lib->execute($link, "iptables -D INPUT -s ".$item2['server_ip']." -p udp -d ".$item['location_ip']." --dport ".$item['server_port']." -j DROP;");
|
||||
$ssh2Lib->execute($link, "iptables -D INPUT -s ".$item2['server_ip']." -p tcp -d ".$item['location_ip']." --dport ".$item['server_port']." -j DROP;");
|
||||
|
||||
$ssh2Lib->disconnect($link);
|
||||
|
||||
$this->serversModel->deleteFirewallDB($item2['firewall_id']);
|
||||
}
|
||||
}
|
||||
|
||||
$mailLib->setTo($item['user_email']);
|
||||
$mailLib->setSubject("Удаление сервера #$serverid");
|
||||
|
||||
$mailData = array();
|
||||
$mailData['firstname'] = $item['user_firstname'];
|
||||
$mailData['lastname'] = $item['user_lastname'];
|
||||
$mailData['serverid'] = $serverid;
|
||||
|
||||
$text = $this->load->view('mail/servers/deleted', $mailData);
|
||||
|
||||
$mailLib->setText($text);
|
||||
$mailLib->send();
|
||||
|
||||
echo "Игровой сервер: gs" . $serverid . " - удален.". PHP_EOL;
|
||||
}
|
||||
} else if($item['server_status'] != 0) {
|
||||
if($this->serversModel->action($serverid, "stop")["status"] == "success") {
|
||||
$this->serversModel->updateServer($serverid, array('server_status' => 0));
|
||||
$this->serversModel->action($serverid, "block");
|
||||
} else {
|
||||
$operation = true;
|
||||
echo "Игровой сервер: gs" . $serverid . " - блокировка не удалась.". PHP_EOL;
|
||||
}
|
||||
|
||||
if(!$operation) {
|
||||
$mailLib->setTo($item['user_email']);
|
||||
$mailLib->setSubject("Блокировка сервера #$serverid");
|
||||
|
||||
$mailData = array();
|
||||
$mailData['firstname'] = $item['user_firstname'];
|
||||
$mailData['lastname'] = $item['user_lastname'];
|
||||
$mailData['serverid'] = $serverid;
|
||||
|
||||
$text = $this->load->view('mail/servers/lock', $mailData);
|
||||
|
||||
$mailLib->setText($text);
|
||||
$mailLib->send();
|
||||
|
||||
echo "Игровой сервер: gs" . $serverid . " - заблокирован.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if($diff->days < 3) {
|
||||
$mailLib->setTo($item['user_email']);
|
||||
$mailLib->setSubject("Завершение оплаченного периода сервера #$serverid");
|
||||
|
||||
$mailData = array();
|
||||
$mailData['firstname'] = $item['user_firstname'];
|
||||
$mailData['lastname'] = $item['user_lastname'];
|
||||
$mailData['serverid'] = $serverid;
|
||||
$mailData['days'] = $diff->days;
|
||||
|
||||
$text = $this->load->view('mail/servers/needPay', $mailData);
|
||||
|
||||
$mailLib->setText($text);
|
||||
$mailLib->send();
|
||||
|
||||
echo "Игровой сервер: gs" . $serverid . " - отправлено уведомление.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach($webhosts as $item) {
|
||||
$operation = false;
|
||||
$webid = $item['web_id'];
|
||||
$dateend = date_create($item['web_date_end']);
|
||||
$diff = date_diff($datenow, $dateend);
|
||||
|
||||
if($diff->invert) {
|
||||
if($diff->days >= 3) {
|
||||
$this->webhostModel->unblockWebhost($webid);
|
||||
$this->webhostModel->deleteWebhost($webid);
|
||||
|
||||
$mailLib->setTo($item['user_email']);
|
||||
$mailLib->setSubject("Удаление веб-хостинга #$webid");
|
||||
|
||||
$mailData = array();
|
||||
$mailData['firstname'] = $item['user_firstname'];
|
||||
$mailData['lastname'] = $item['user_lastname'];
|
||||
$mailData['webid'] = $webid;
|
||||
|
||||
$text = $this->load->view('mail/webhost/deleted', $mailData);
|
||||
|
||||
$mailLib->setText($text);
|
||||
$mailLib->send();
|
||||
|
||||
echo "Веб-хостинг: ws" . $webid . " - удален.". PHP_EOL;
|
||||
} else if($item['web_status'] != 0) {
|
||||
$this->webhostModel->blockWebhost($webid);
|
||||
|
||||
$mailLib->setTo($item['user_email']);
|
||||
$mailLib->setSubject("Блокировка веб-хостинга #$webid");
|
||||
|
||||
$mailData = array();
|
||||
$mailData['firstname'] = $item['user_firstname'];
|
||||
$mailData['lastname'] = $item['user_lastname'];
|
||||
$mailData['webid'] = $webid;
|
||||
|
||||
$text = $this->load->view('mail/webhost/lock', $mailData);
|
||||
|
||||
$mailLib->setText($text);
|
||||
$mailLib->send();
|
||||
|
||||
echo "Веб-хостинг: ws" . $webid . " - заблокирован.". PHP_EOL;
|
||||
}
|
||||
} else {
|
||||
if($diff->days < 3) {
|
||||
$mailLib->setTo($item['user_email']);
|
||||
$mailLib->setSubject("Завершение оплаченного периода веб-хостинга #$webid");
|
||||
|
||||
$mailData = array();
|
||||
$mailData['firstname'] = $item['user_firstname'];
|
||||
$mailData['lastname'] = $item['user_lastname'];
|
||||
$mailData['webid'] = $webid;
|
||||
$mailData['days'] = $diff->days;
|
||||
|
||||
$text = $this->load->view('mail/webhost/needPay', $mailData);
|
||||
|
||||
$mailLib->setText($text);
|
||||
$mailLib->send();
|
||||
|
||||
echo "Веб-хостинг: ws" . $webid . " - отправлено уведомление.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$invoices = $this->invoicesModel->getInvoices(array('invoice_status' => 0), array(), array(), array());
|
||||
foreach($invoices as $item) {
|
||||
$this->invoicesModel->deleteInvoice($item['invoice_id']);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function gameServers() {
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$this->load->model('servers');
|
||||
$servers = $this->serversModel->getServers(array(), array('games', 'users', 'locations'));
|
||||
|
||||
foreach($servers as $item) {
|
||||
$serverid = $item['server_id'];
|
||||
if($item['server_status'] == 3 AND $item['server_work'] == 1) {
|
||||
$this->serversModel->updateServer($serverid, array('server_work' => 0));
|
||||
$result = $this->serversModel->action($serverid, "install");
|
||||
if($result['status'] == "success") {
|
||||
echo "Игровой сервер: gs" . $serverid . " - успешная установка.". PHP_EOL;
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => 'Успешная установка сервера.',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
} else {
|
||||
echo "Игровой сервер: gs" . $serverid . " - неудачная установка.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
if($item['server_status'] == 4 AND $item['server_work'] == 1) {
|
||||
$this->serversModel->updateServer($serverid, array('server_work' => 0));
|
||||
$result = $this->serversModel->action($serverid, "reinstall");
|
||||
if($result['status'] == "success") {
|
||||
echo "Игровой сервер: gs" . $serverid . " - успешная переустановка.". PHP_EOL;
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => 'Успешная переустановка сервера.',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
} else {
|
||||
echo "Игровой сервер: gs" . $serverid . " - неудачная переустановка.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
if($item['server_status'] == 5 AND $item['server_work'] == 1) {
|
||||
$this->serversModel->updateServer($serverid, array('server_work' => 0));
|
||||
$result = $this->serversModel->action($serverid, 'createbackup');
|
||||
if($result['status'] == "success") {
|
||||
echo "Игровой сервер: gs" . $serverid . " - успешный бекап сервера.". PHP_EOL;
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => 'Успешное создание BackUP.',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
} else {
|
||||
echo "Игровой сервер: gs" . $serverid . " - неудачный бекап сервера.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
if($item['server_status'] == 6 AND $item['server_work'] == 1) {
|
||||
$this->serversModel->updateServer($serverid, array('server_work' => 0));
|
||||
$result = $this->serversModel->action($serverid, "installbackup");
|
||||
if($result['status'] == "success") {
|
||||
echo "Игровой сервер: gs" . $serverid . " - успешное восстановление из бекапа.". PHP_EOL;
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => 'Успешное восстановление из BackUP.',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
} else {
|
||||
echo "Игровой сервер: gs" . $serverid . " - неудачное восстановление из бекапа.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
if($item['server_status'] == 7 AND $item['server_work'] == 1) {
|
||||
if($item['game_code'] == 'mine' || $item['game_code'] == 'mcpe') {
|
||||
$this->serversModel->updateServer($serverid, array('server_work' => 0));
|
||||
$result = $this->serversModel->action($serverid, 'sendcommand', array('command' => 'installNewCore'));
|
||||
if($result['status'] == "success") {
|
||||
echo "Игровой сервер: gs" . $serverid . " - успешная смена ядра.". PHP_EOL;
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => 'Успешная смена ядра.',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
} else {
|
||||
echo "Игровой сервер: gs" . $serverid . " - неудачная смена ядра.". PHP_EOL;
|
||||
}
|
||||
} else if($item['game_code'] == 'cs') {
|
||||
$this->serversModel->updateServer($serverid, array('server_work' => 0));
|
||||
$result = $this->serversModel->action($serverid, 'sendcommand', array('command' => 'installNewBuild'));
|
||||
if($result['status'] == "success") {
|
||||
echo "Игровой сервер: gs" . $serverid . " - успешная смена билда.". PHP_EOL;
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => 'Успешная смена билда.',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
} else {
|
||||
echo "Игровой сервер: gs" . $serverid . " - неудачная смена билда.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function updateStatsLocations() {
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$this->load->model('locations');
|
||||
$locations = $this->locationsModel->getLocations(array());
|
||||
|
||||
foreach($locations as $item) {
|
||||
$today = date("Y-m-d H:i:s");
|
||||
if($item['location_status'] == 1) {
|
||||
$this->load->library('ssh2');
|
||||
$ssh2Lib = new ssh2Library();
|
||||
$link = $ssh2Lib->connect($item['location_ip'], $item['location_user'], $item['location_password']);
|
||||
|
||||
$cpu = (int) $ssh2Lib->execute($link, 'echo $[100-$(vmstat 1 2|tail -1|awk \'{print $15}\')]');
|
||||
|
||||
$hdd_used = (int) $ssh2Lib->execute($link, 'df -h -B 1M $HOME | grep dev | awk \'{print $3}\'');
|
||||
$hdd_all = (int) $ssh2Lib->execute($link, 'df -h -B 1M $HOME | grep dev | awk \'{print $2}\'');
|
||||
|
||||
$ram_all = (int) $ssh2Lib->execute($link, 'cat /proc/meminfo | grep MemTotal | awk \'{print $2}\'');
|
||||
$ram_free = (int) $ssh2Lib->execute($link, 'cat /proc/meminfo | grep MemAvailable | awk \'{print $2}\'');
|
||||
$ram_used = (int) $ram_all - (int) $ram_free;
|
||||
|
||||
$swap_all = (int) $ssh2Lib->execute($link, 'cat /proc/meminfo | grep SwapTotal | awk \'{print $2}\'');
|
||||
$swap_free = (int) $ssh2Lib->execute($link, 'cat /proc/meminfo | grep SwapFree | awk \'{print $2}\'');
|
||||
$swap_used = (int) $swap_all - (int) $swap_free;
|
||||
|
||||
$ssh2Lib->disconnect($link);
|
||||
|
||||
$cpu = $cpu > 100 ? 100 : round($cpu);
|
||||
$ram_used = round($ram_used * 0.000977, 0);
|
||||
$ram_all = round($ram_all * 0.000977, 0);
|
||||
$swap_used = round($swap_used * 0.000977, 0);
|
||||
$swap_all = round($swap_all * 0.000977, 0);
|
||||
|
||||
$hdd_end = (($hdd_used * 100) / $hdd_all);
|
||||
$hdd_end = $hdd_end > 100 ? 100 : round($hdd_end);
|
||||
|
||||
$ram_swap_save = ((($ram_used + $swap_used) * 100) / ($ram_all + $swap_all));
|
||||
$ram_swap_save = $ram_swap_save > 100 ? 100 : round($ram_swap_save);
|
||||
|
||||
$locationData = array(
|
||||
'location_cpu' => $cpu,
|
||||
'location_ram' => $ram_swap_save,
|
||||
'location_hdd' => $hdd_end,
|
||||
'location_upd' => $today
|
||||
);
|
||||
$this->locationsModel->updateLocation($item['location_id'], $locationData);
|
||||
|
||||
echo "Статистика игровой локации #". $item['location_id'] ." успешно обновлена (CPU: ".$cpu."%, RAM: ".$ram_swap_save."%, SSD: ".$hdd_end."%)" . PHP_EOL;
|
||||
} else {
|
||||
$locationData = array(
|
||||
'location_cpu' => 0,
|
||||
'location_ram' => 0,
|
||||
'location_hdd' => 0,
|
||||
'location_upd' => $today
|
||||
);
|
||||
$this->locationsModel->updateLocation($item['location_id'], $locationData);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function updateStats() {
|
||||
$this->load->library('query');
|
||||
$this->load->model('servers');
|
||||
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$servers = $this->serversModel->getServers(array(), array('games', 'locations'));
|
||||
|
||||
$this->serversModel->clearServersStats();
|
||||
|
||||
foreach($servers as $item) {
|
||||
$serverid = $item['server_id'];
|
||||
|
||||
if($item['server_status'] == 2) {
|
||||
$queryLib = new queryLibrary($item['game_query']);
|
||||
$queryLib->connect($item['location_ip'], $item['server_port']);
|
||||
$query = $queryLib->getInfo();
|
||||
$queryLib->disconnect();
|
||||
|
||||
$sysload = $this->serversModel->getServerSystemLoad($serverid);
|
||||
$ssd = round($sysload['ssd']);
|
||||
$ssd_all = $item['game_ssd'];
|
||||
$ssd_end = (int)(($ssd * 100) / $ssd_all);
|
||||
$cpu = $sysload['cpu'] > 100 ? 100 : round($sysload['cpu']);
|
||||
$ram = $sysload['ram'] > 100 ? 100 : round($sysload['ram']);
|
||||
|
||||
$this->serversModel->createServerStats(array(
|
||||
'server_id' => $serverid,
|
||||
'server_stats_players' => $query['players'],
|
||||
'server_stats_cpu' => $cpu,
|
||||
'server_stats_ram' => $ram,
|
||||
'server_stats_hdd' => $ssd_end
|
||||
));
|
||||
echo "Статистика игрового сервера gs" . $serverid . " успешно сохранена (CPU: ".$cpu."%, RAM: ".$ram."%, SSD: ".$ssd_end."%)" . PHP_EOL;
|
||||
}
|
||||
|
||||
if($item['server_status'] == 1) {
|
||||
$ssd = $this->serversModel->getHDD($serverid);
|
||||
$ssd = round($ssd);
|
||||
$ssd_all = $item['game_ssd'];
|
||||
$ssd_end = (int)(($ssd * 100) / $ssd_all);
|
||||
|
||||
$this->serversModel->createServerStats(array(
|
||||
'server_id' => $serverid,
|
||||
'server_stats_players' => 0,
|
||||
'server_stats_cpu' => 0,
|
||||
'server_stats_ram' => 0,
|
||||
'server_stats_hdd' => $ssd_end
|
||||
));
|
||||
echo "Статистика игрового сервера gs" . $serverid . " успешно сохранена (CPU: 0%, RAM: 0%, SSD: ".$ssd_end."%)" . PHP_EOL;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function stopServers() {
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$this->load->model('servers');
|
||||
|
||||
$servers = $this->serversModel->getServers(array(), array('games', 'locations'));
|
||||
|
||||
foreach($servers as $item) {
|
||||
$serverid = $item['server_id'];
|
||||
|
||||
if($item['server_status'] == 2) {
|
||||
$hdd = $this->serversModel->getHDD($serverid);
|
||||
$hdd = round($hdd);
|
||||
if($hdd > $item['game_ssd']){
|
||||
$connect = $this->serversModel->action($serverid, 'stop');
|
||||
if($connect['status'] == "success") {
|
||||
$this->serversModel->deleteTask(array('task_name' => 'restart', 'server_id' => $serverid));
|
||||
$this->serversModel->deleteTask(array('task_name' => 'enable', 'server_id' => $serverid));
|
||||
$this->serversModel->deleteTask(array('task_name' => 'disable', 'server_id' => $serverid));
|
||||
$this->serversModel->updateServer($serverid, array('server_status' => 1));
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => "Остановка сервера: OVERLOAD-ssd = ".$hdd."/".$item['game_ssd']."МБ",
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
echo "Остановка сервера: OVERLOAD-ssd = ".$hdd."/".$item['game_ssd']."МБ" . PHP_EOL;
|
||||
} else {
|
||||
echo "Ошибка остановки сервера gs$item[server_id]" . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function stopServersQuery() {
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$this->load->library('query');
|
||||
$this->load->model('servers');
|
||||
|
||||
$servers = $this->serversModel->getServers(array(), array('games', 'locations'));
|
||||
|
||||
foreach($servers as $item) {
|
||||
$serverid = $item['server_id'];
|
||||
|
||||
if($item['server_status'] == 2) {
|
||||
$queryLib = new queryLibrary($item['game_query']);
|
||||
$queryLib->connect($item['location_ip'], $item['server_port']);
|
||||
$query = $queryLib->getInfo();
|
||||
$queryLib->disconnect();
|
||||
|
||||
if($query['players'] > ($item['server_slots']+1)){
|
||||
$connect = $this->serversModel->action($serverid, 'stop');
|
||||
if($connect['status'] == "success") {
|
||||
$this->serversModel->deleteTask(array('task_name' => 'restart', 'server_id' => $serverid));
|
||||
$this->serversModel->deleteTask(array('task_name' => 'enable', 'server_id' => $serverid));
|
||||
$this->serversModel->deleteTask(array('task_name' => 'disable', 'server_id' => $serverid));
|
||||
$this->serversModel->updateServer($serverid, array('server_status' => 1));
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => "Остановка сервера: Чрезмерное кол.во игроков на сервере, игроков ".$query['players']." слотов ".$item['server_slots']."",
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
echo "Остановка сервера: Чрезмерное кол.во игроков на сервере, игроков ".$query['players']." слотов ".$item['server_slots']."" . PHP_EOL;
|
||||
} else {
|
||||
echo "Ошибка остановки сервера gs$item[server_id]" . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function serverReloader() {
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$this->load->model('servers');
|
||||
$this->load->model('locations');
|
||||
|
||||
$locations = $this->locationsModel->getLocations(array());
|
||||
|
||||
foreach($locations as $location) {
|
||||
echo PHP_EOL . 'Локация ('.$location['location_id'].') '.$location['location_name'].'' . PHP_EOL;
|
||||
$servers = $this->serversModel->getServers(array('server_status' => '2', 'location_id' => $location['location_id']));
|
||||
if($servers){
|
||||
foreach($servers as $item) {
|
||||
$serverid = $item['server_id'];
|
||||
$result_status = $this->serversModel->action($serverid, 'server_status');
|
||||
|
||||
if($result_status == 1) {
|
||||
$result = $this->serversModel->action($serverid, 'restart');
|
||||
if($result["status"] == "success") {
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => 'Сервер был восcтановлен после падения',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
echo "Игровой сервер gs$item[server_id] - Поднят.". PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private $deletedTasks = array();
|
||||
|
||||
public function tasks() {
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$this->load->model('servers');
|
||||
$tasks = $this->serversModel->getTasks(array(), array('servers'));
|
||||
$datenow = date_create('now');
|
||||
|
||||
foreach($tasks as $item) {
|
||||
$serverid = $item['server_id'];
|
||||
|
||||
if(!in_array($item['task_name'], $this->deletedTasks)) {
|
||||
if(strtotime($item['task_lead_time']) <= strtotime(date("Y-m-d H:i:s"))) {
|
||||
if($item['task_name'] == "enable") {
|
||||
if($item['server_status'] == 1) {
|
||||
$result = $this->serversModel->action($serverid, "start");
|
||||
if($result["status"] == "success") {
|
||||
$this->serversModel->updateServer($serverid, array("server_status" => 2));
|
||||
array_push($this->deletedTasks, 'enable');
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => '[Планировщик] Успешный запуск сервера',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
echo 'Задача ' . $item['task_name'] . ' для сервера #' . $item['server_id'] . ' выполнена!' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
$this->serversModel->deleteTask(array('task_id' => $item['task_id']));
|
||||
} else if($item['task_name'] == "disable") {
|
||||
if($item['server_status'] == 2) {
|
||||
$result = $this->serversModel->action($serverid, "stop");
|
||||
if($result["status"] == "success") {
|
||||
$this->serversModel->updateServer($serverid, array("server_status" => 1));
|
||||
array_push($this->deletedTasks, 'disable');
|
||||
array_push($this->deletedTasks, 'restart');
|
||||
array_push($this->deletedTasks, 'enable');
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => '[Планировщик] Успешное выключение сервера',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
echo 'Задача ' . $item['task_name'] . ' для сервера #' . $item['server_id'] . ' выполнена!' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
$this->serversModel->deleteTask(array('task_id' => $item['task_id']));
|
||||
} else if($item['task_name'] == "restart") {
|
||||
if($item['server_status'] == 2) {
|
||||
$result = $this->serversModel->action($serverid, "restart");
|
||||
if($result["status"] == "success") {
|
||||
array_push($this->deletedTasks, 'enable');
|
||||
$logData = array(
|
||||
'server_id' => $serverid,
|
||||
'reason' => '[Планировщик] Успешный перезапуск сервера',
|
||||
'status' => 1
|
||||
);
|
||||
$this->serversModel->createLog($logData);
|
||||
echo 'Задача ' . $item['task_name'] . ' для сервера #' . $item['server_id'] . ' выполнена!' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
if($item['task_type'] == 'single') {
|
||||
$this->serversModel->deleteTask(array('task_id' => $item['task_id']));
|
||||
} else {
|
||||
if($item['task_time'] == '15min') {
|
||||
$lead_time = date('Y-m-d H:i:s', strtotime("+15 minutes"));
|
||||
} else if($item['task_time'] == '30min') {
|
||||
$lead_time = date('Y-m-d H:i:s', strtotime("+30 minutes"));
|
||||
} else if($item['task_time'] == '1hour') {
|
||||
$lead_time = date('Y-m-d H:i:s', strtotime("+1 hour"));
|
||||
} else if($item['task_time'] == '12hours') {
|
||||
$lead_time = date('Y-m-d H:i:s', strtotime("+12 hours"));
|
||||
} else if($item['task_time'] == '24hours') {
|
||||
$lead_time = date('Y-m-d H:i:s', strtotime("+1 day"));
|
||||
}
|
||||
$this->serversModel->updateTask($item['task_id'], array('task_lead_time' => $lead_time));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function clearLogs() {
|
||||
$token = @$this->request->get['token'];
|
||||
if($this->config->token != $token) {
|
||||
return "Access Denied";
|
||||
}
|
||||
|
||||
$this->load->model('servers');
|
||||
|
||||
$serverLogs = $this->serversModel->getLogs();
|
||||
|
||||
$datenow = date_create('now');
|
||||
|
||||
foreach($serverLogs as $item) {
|
||||
$diff = date_diff($datenow, date_create($item['date']));
|
||||
|
||||
if($diff->invert) {
|
||||
if($diff->days >= 7) {
|
||||
$this->serversModel->deleteLog($item['log_id']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko (https://vk.com/id00v)
|
||||
*/
|
||||
class indexController extends Controller {
|
||||
private $limit = 5;
|
||||
public function index($page = 1) {
|
||||
$this->document->setActiveSection('main');
|
||||
$this->document->setActiveItem('index');
|
||||
$this->data['public'] = $this->config->public;
|
||||
|
||||
if(!$this->user->isLogged()) {
|
||||
$this->response->redirect($this->config->url . 'account/login');
|
||||
}
|
||||
if($this->user->getAccessLevel() < 0) {
|
||||
$this->session->data['error'] = "У вас нет доступа к данному разделу!";
|
||||
$this->response->redirect($this->config->url);
|
||||
}
|
||||
|
||||
$this->load->library('pagination');
|
||||
$this->load->model('news');
|
||||
|
||||
$sort = array(
|
||||
'news_date_add' => 'DESC'
|
||||
);
|
||||
|
||||
$options = array(
|
||||
'start' => ($page - 1) * $this->limit,
|
||||
'limit' => $this->limit
|
||||
);
|
||||
|
||||
$total = $this->newsModel->getTotalNews();
|
||||
$news = $this->newsModel->getNews(array(), array(), $sort, $options);
|
||||
|
||||
$paginationLib = new paginationLibrary();
|
||||
|
||||
$paginationLib->total = $total;
|
||||
$paginationLib->page = $page;
|
||||
$paginationLib->limit = $this->limit;
|
||||
$paginationLib->url = $this->config->url . 'news/index/index/{page}';
|
||||
|
||||
$pagination = $paginationLib->render();
|
||||
$this->data['news'] = $news;
|
||||
$this->data['pagination'] = $pagination;
|
||||
|
||||
$this->getChild(array('common/header', 'common/footer'));
|
||||
return $this->load->view('main/index', $this->data);
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user