first commit
This commit is contained in:
@@ -0,0 +1,455 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Domovoy
|
||||
* @author Dinox
|
||||
* @copyright Copyright (c) 2009 - 2021, Dinox. (https://opencartforum.com/)
|
||||
* @license GPL3
|
||||
* @link https://opencartforum.com/
|
||||
*/
|
||||
|
||||
class ControllerExtensionDashboardDomovoy extends Controller
|
||||
{
|
||||
private $error = array();
|
||||
|
||||
public function index()
|
||||
{
|
||||
$this->load->language('extension/dashboard/domovoy');
|
||||
|
||||
$this->document->setTitle($this->language->get('heading_h1'));
|
||||
|
||||
$this->load->model('setting/setting');
|
||||
|
||||
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
|
||||
|
||||
$this->model_setting_setting->editSetting('dashboard_domovoy', $this->request->post);
|
||||
|
||||
$this->session->data['success'] = $this->language->get('text_success');
|
||||
|
||||
$this->response->redirect($this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true));
|
||||
}
|
||||
|
||||
if (isset($this->error['warning'])) {
|
||||
$data['error_warning'] = $this->error['warning'];
|
||||
} else {
|
||||
$data['error_warning'] = '';
|
||||
}
|
||||
|
||||
$data['breadcrumbs'] = array();
|
||||
|
||||
$data['breadcrumbs'][] = array(
|
||||
'text' => $this->language->get('text_home'),
|
||||
'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'], true)
|
||||
);
|
||||
|
||||
$data['breadcrumbs'][] = array(
|
||||
'text' => $this->language->get('text_extension'),
|
||||
'href' => $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=dashboard', true)
|
||||
);
|
||||
|
||||
$data['breadcrumbs'][] = array(
|
||||
'text' => $this->language->get('heading_title'),
|
||||
'href' => $this->url->link('extension/dashboard/domovoy', 'user_token=' . $this->session->data['user_token'], true)
|
||||
);
|
||||
|
||||
$data['action'] = $this->url->link('extension/dashboard/domovoy', 'user_token=' . $this->session->data['user_token'], true);
|
||||
|
||||
$data['cancel'] = $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'] . '&type=dashboard', true);
|
||||
|
||||
$folders = array('logs' => array('dir' => DIR_STORAGE . 'logs'), 'cache' => array('dir' => DIR_CACHE), 'imagescache' => array('dir' => DIR_IMAGE . 'cache'));
|
||||
|
||||
foreach ($folders as $key => $folder) {
|
||||
|
||||
$data['folders'][$key]['name'] = $this->language->get('text_dir_' . $key);
|
||||
$data['folders'][$key]['key'] = $key;
|
||||
|
||||
if (isset($this->request->post["dashboard_domovoy_cron"])) {
|
||||
$cron = $this->request->post["dashboard_domovoy_cron"];
|
||||
} elseif ($this->config->get("dashboard_domovoy_cron")) {
|
||||
$cron = $this->config->get("dashboard_domovoy_cron");
|
||||
} else {
|
||||
$data['folders'][$key]['cron']['time'] = 30;
|
||||
$data['folders'][$key]['cron']['size'] = 100;
|
||||
}
|
||||
|
||||
if (isset($cron)) {
|
||||
$data['folders'][$key]['cron']['status'] = $cron[$key]['status'];
|
||||
$data['folders'][$key]['cron']['size'] = $cron[$key]['size'];
|
||||
$data['folders'][$key]['cron']['time'] = $cron[$key]['time'];
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($this->request->post['dashboard_domovoy_danger_funtions'])) {
|
||||
$data['dashboard_domovoy_danger_funtions'] = $this->request->post['dashboard_domovoy_danger_funtions'];
|
||||
} elseif ($this->config->get('dashboard_domovoy_danger_funtions')) {
|
||||
$data['dashboard_domovoy_danger_funtions'] = $this->config->get('dashboard_domovoy_danger_funtions');
|
||||
} else {
|
||||
$data['dashboard_domovoy_danger_funtions'] = "exec\r\npassthru\r\nini_get\r\nini_get_all\r\nparse_ini_file\r\nphp_uname\r\nsystem\r\nshell_exec\r\nshow_source\r\npcntl_exec\r\npcntl_exec\r\nexpect_popen\r\nproc_open\r\npopen";
|
||||
}
|
||||
|
||||
if (isset($this->request->post['dashboard_domovoy_warning_funtions'])) {
|
||||
$data['dashboard_domovoy_warning_funtions'] = $this->request->post['dashboard_domovoy_warning_funtions'];
|
||||
} elseif ($this->config->get('dashboard_domovoy_warning_funtions')) {
|
||||
$data['dashboard_domovoy_warning_funtions'] = $this->config->get('dashboard_domovoy_warning_funtions');
|
||||
} else {
|
||||
$data['dashboard_domovoy_warning_funtions'] = "diskfreespace\r\ndisk_total_space\r\ndisk_total_space\r\nfileperms\r\nfopen\r\nphpversion\r\nopendir\r\nposix_getpwuid\r\nposix_uname";
|
||||
}
|
||||
|
||||
if (isset($this->request->post['dashboard_domovoy_width'])) {
|
||||
$data['dashboard_domovoy_width'] = $this->request->post['dashboard_domovoy_width'];
|
||||
} else {
|
||||
$data['dashboard_domovoy_width'] = $this->config->get('dashboard_domovoy_width');
|
||||
}
|
||||
|
||||
if (isset($this->request->post['dashboard_domovoy_disk_free_space'])) {
|
||||
$data['dashboard_domovoy_disk_free_space'] = $this->request->post['dashboard_domovoy_disk_free_space'];
|
||||
} elseif($this->config->get('dashboard_domovoy_disk_free_space')) {
|
||||
$data['dashboard_domovoy_disk_free_space'] = $this->config->get('dashboard_domovoy_disk_free_space');
|
||||
} else {
|
||||
$data['dashboard_domovoy_disk_free_space'] = 500;
|
||||
}
|
||||
|
||||
if (isset($this->request->post['dashboard_domovoy_free_space_status'])) {
|
||||
$data['dashboard_domovoy_free_space_status'] = $this->request->post['dashboard_domovoy_free_space_status'];
|
||||
} else {
|
||||
$data['dashboard_domovoy_free_space_status'] = $this->config->get('dashboard_domovoy_free_space_status');
|
||||
}
|
||||
|
||||
|
||||
$data['columns'] = array();
|
||||
|
||||
for ($i = 3; $i <= 12; $i++) {
|
||||
$data['columns'][] = $i;
|
||||
}
|
||||
|
||||
if (isset($this->request->post['dashboard_domovoy_status'])) {
|
||||
$data['dashboard_domovoy_status'] = $this->request->post['dashboard_domovoy_status'];
|
||||
} else {
|
||||
$data['dashboard_domovoy_status'] = $this->config->get('dashboard_domovoy_status');
|
||||
}
|
||||
|
||||
|
||||
if (isset($this->request->post['dashboard_domovoy_sort_order'])) {
|
||||
$data['dashboard_domovoy_sort_order'] = $this->request->post['dashboard_domovoy_sort_order'];
|
||||
} else {
|
||||
$data['dashboard_domovoy_sort_order'] = $this->config->get('dashboard_domovoy_sort_order');
|
||||
}
|
||||
|
||||
$data['header'] = $this->load->controller('common/header');
|
||||
$data['column_left'] = $this->load->controller('common/column_left');
|
||||
$data['footer'] = $this->load->controller('common/footer');
|
||||
|
||||
$this->response->setOutput($this->load->view('extension/dashboard/domovoy_form', $data));
|
||||
}
|
||||
|
||||
protected function validate()
|
||||
{
|
||||
if (!$this->user->hasPermission('modify', 'extension/dashboard/domovoy')) {
|
||||
$this->error['warning'] = $this->language->get('error_permission');
|
||||
}
|
||||
|
||||
return !$this->error;
|
||||
}
|
||||
|
||||
public function dashboard()
|
||||
{
|
||||
$this->load->language('common/developer');
|
||||
$this->load->language('extension/dashboard/domovoy');
|
||||
|
||||
$this->document->addStyle('view/stylesheet/fork-awesome.css');
|
||||
|
||||
$data['user_token'] = $this->session->data['user_token'];
|
||||
|
||||
$data['developer_theme'] = $this->config->get('developer_theme');
|
||||
|
||||
$eval = false;
|
||||
|
||||
$eval = '$eval = true;';
|
||||
|
||||
eval($eval);
|
||||
|
||||
if ($eval === true) {
|
||||
$data['eval'] = true;
|
||||
} else {
|
||||
$this->load->model('setting/setting');
|
||||
|
||||
$this->model_setting_setting->editSetting('developer', array('developer_theme' => 1), 0);
|
||||
|
||||
$data['eval'] = false;
|
||||
}
|
||||
|
||||
$data['activities'] = array();
|
||||
|
||||
$folders = array('logs' => array('dir' => DIR_STORAGE . 'logs'), 'cache' => array('dir' => DIR_CACHE), 'imagescache' => array('dir' => DIR_IMAGE . 'cache'));
|
||||
|
||||
$data['setting'] = $this->url->link('extension/dashboard/domovoy', 'user_token=' . $this->session->data['user_token'], true);
|
||||
|
||||
$data['folders'] = array();
|
||||
|
||||
foreach ($folders as $key => $folder) {
|
||||
$data['folders'][$key]['name'] = $this->language->get('text_dir_' . $key);
|
||||
$data['folders'][$key]['key'] = $key;
|
||||
|
||||
if ($this->config->get("dashboard_domovoy_cron")) {
|
||||
$cron = $this->config->get("dashboard_domovoy_cron");
|
||||
$folder_size = $cron[$key]['size'] * pow(1024, 2);
|
||||
} else {
|
||||
$folder_size = 0;
|
||||
}
|
||||
|
||||
// Calc Cron
|
||||
|
||||
$cron_time = $cron[$key]['time'] * 60;
|
||||
|
||||
$cache = $this->config->get('domovoy_folders_' . $key);
|
||||
|
||||
if ($cache) {
|
||||
|
||||
$time = $this->date_diff(date('Y-m-d H:i'), $cache['date']);
|
||||
if ($cron[$key]['status'] && $time > $cron_time) {
|
||||
$this->calc($key);
|
||||
}
|
||||
|
||||
$data['folders'][$key]['size'] = sprintf($this->language->get('text_folder_size'), $cache['unit']['size'] . " " . $cache['unit']['unit']);
|
||||
if ($cache['size'] > $folder_size && $folder_size != 0) {
|
||||
$data['folders'][$key]['warning_size'] = sprintf($this->language->get('text_warning_size'), $cron[$key]['size']);
|
||||
} else {
|
||||
$data['folders'][$key]['warning_size'] = false;
|
||||
}
|
||||
$data['folders'][$key]['files'] = sprintf($this->language->get('text_folder_files'), $cache['files']) . " | " . $cache['date'];
|
||||
} else {
|
||||
$data['folders'][$key]['size'] = $this->language->get('text_check');
|
||||
}
|
||||
}
|
||||
|
||||
$data['phpversion'] = phpversion();
|
||||
|
||||
$reader = function & ($object, $property) {
|
||||
$value = &Closure::bind(function & () use ($property) {
|
||||
return $this->$property;
|
||||
}, $object, $object)->__invoke();
|
||||
return $value;
|
||||
};
|
||||
|
||||
$result = &$reader($this->db, 'adaptor');
|
||||
$result = &$reader($result, 'connection');
|
||||
|
||||
$data['database_version'] = $result->server_info;
|
||||
|
||||
|
||||
if (function_exists('ioncube_loader_version')) {
|
||||
$data['ioncube_version'] = ioncube_loader_version();
|
||||
}
|
||||
|
||||
if (function_exists('disk_free_space') && $this->config->get('dashboard_domovoy_free_space_status')) {
|
||||
$disk_space = disk_free_space("/");
|
||||
$data['disk_free_space'] = $this->format_size($disk_space);
|
||||
$space_limit = $this->config->get("dashboard_domovoy_disk_free_space");
|
||||
$folder_size = $space_limit * pow(1024, 2);
|
||||
if ($disk_space < $folder_size) {
|
||||
$data['disk_free_space_warning'] = sprintf($this->language->get('text_warning_free_space'), $space_limit);
|
||||
}
|
||||
}
|
||||
|
||||
$danger_funtions = explode("\r\n", $this->config->get('dashboard_domovoy_danger_funtions'));
|
||||
if (!empty($danger_funtions)) {
|
||||
$data['danger_funtions'] = $this->checkFunc($danger_funtions);
|
||||
} else {
|
||||
$data['danger_funtions'] = array();
|
||||
}
|
||||
|
||||
$warning_funtions = explode("\r\n", $this->config->get('dashboard_domovoy_warning_funtions'));
|
||||
if (!empty($warning_funtions)) {
|
||||
$data['warning_funtions'] = $this->checkFunc($warning_funtions);
|
||||
} else {
|
||||
$data['warning_funtions'] = array();
|
||||
}
|
||||
|
||||
return $this->load->view('extension/dashboard/domovoy_info', $data);
|
||||
}
|
||||
|
||||
public function clear($dir = false)
|
||||
{
|
||||
$this->load->language('extension/dashboard/domovoy');
|
||||
|
||||
$json = array();
|
||||
|
||||
if (!$this->user->hasPermission('modify', 'extension/dashboard/domovoy')) {
|
||||
$json['error'] = $this->language->get('error_permission');
|
||||
} else {
|
||||
if (isset($this->request->get['dir']) or $dir) {
|
||||
if ($dir) {
|
||||
$key = $dir;
|
||||
} else {
|
||||
$key = $this->request->get['dir'];
|
||||
}
|
||||
|
||||
$folders = array('logs' => array('dir' => DIR_STORAGE . 'logs/*'), 'cache' => array('dir' => DIR_CACHE . 'cache.*'), 'imagescache' => array('dir' => DIR_IMAGE . 'cache/*'));
|
||||
|
||||
$files = glob($folders[$key]['dir']);
|
||||
if (!empty($files)) {
|
||||
foreach ($files as $file) {
|
||||
$this->deldir($file);
|
||||
}
|
||||
}
|
||||
$json['success'] = sprintf($this->language->get('text_cache'), $this->language->get('text_clearfolder'));
|
||||
} else {
|
||||
$json['error'] = $this->language->get('error_folder');
|
||||
}
|
||||
}
|
||||
|
||||
if (!$dir) {
|
||||
$this->response->addHeader('Content-Type: application/json');
|
||||
$this->response->setOutput(json_encode($json));
|
||||
}
|
||||
}
|
||||
|
||||
public function calc($dir = false)
|
||||
{
|
||||
$this->load->language('extension/dashboard/domovoy');
|
||||
$this->load->model('setting/setting');
|
||||
|
||||
if (isset($this->request->get['dir']) or $dir) {
|
||||
|
||||
$folders = array('logs' => array('dir' => DIR_STORAGE . 'logs'), 'cache' => array('dir' => DIR_CACHE), 'imagescache' => array('dir' => DIR_IMAGE . 'cache'));
|
||||
|
||||
if ($dir) {
|
||||
$key = $dir;
|
||||
} else {
|
||||
$key = $this->request->get['dir'];
|
||||
}
|
||||
|
||||
|
||||
$folder = array();
|
||||
|
||||
$json = array();
|
||||
|
||||
if (!$this->user->hasPermission('modify', 'extension/dashboard/domovoy')) {
|
||||
$json['error'] = $this->language->get('error_permission');
|
||||
} else {
|
||||
$folder['size'] = $this->getFilesSize($folders[$key]['dir']);
|
||||
$folder['unit'] = $this->format_size($folder['size']);
|
||||
$folder['files'] = count(scandir($folders[$key]['dir'])) - 2;
|
||||
$folder['date'] = date("Y-m-d H:i:s");
|
||||
|
||||
$value = $this->model_setting_setting->getSettingValue('domovoy_folders_' . $key);
|
||||
if ($value) {
|
||||
$this->model_setting_setting->editSettingValue('domovoy', 'domovoy_folders_' . $key, $folder);
|
||||
} else {
|
||||
$settings = $this->model_setting_setting->getSetting('domovoy');
|
||||
$settings['domovoy_folders_' . $key] = $folder;
|
||||
$this->model_setting_setting->editSetting('domovoy', $settings);
|
||||
}
|
||||
|
||||
if ($this->config->get("dashboard_domovoy_cron")) {
|
||||
$cron = $this->config->get("dashboard_domovoy_cron");
|
||||
$folder_size = $cron[$key]['size'] * pow(1024, 2);
|
||||
} else {
|
||||
$folder_size = 0;
|
||||
}
|
||||
|
||||
if ($folder['size'] > $folder_size && $folder_size != 0) {
|
||||
$warning_size = sprintf($this->language->get('text_warning_size'), $cron[$key]['size']);
|
||||
} else {
|
||||
$warning_size = $this->language->get('text_normal');
|
||||
}
|
||||
|
||||
$json['success'] = sprintf($this->language->get('text_folder_size'), $folder['unit']['size'] . " " . $folder['unit']['unit']) . sprintf($this->language->get('text_folder_files'), $folder['files']) . " | " . $warning_size;
|
||||
}
|
||||
} else {
|
||||
$json['error'] = $this->language->get('error_folder');
|
||||
}
|
||||
|
||||
if (!$dir) {
|
||||
$this->response->addHeader('Content-Type: application/json');
|
||||
$this->response->setOutput(json_encode($json));
|
||||
}
|
||||
}
|
||||
|
||||
public function phpinfo()
|
||||
{
|
||||
|
||||
ob_start();
|
||||
phpinfo();
|
||||
$data['phpinfo'] = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
$data['phpinfo'] = preg_replace('@<style[^>]*?>.*?</style>@si', '', $data['phpinfo']);
|
||||
|
||||
$this->response->setOutput($this->load->view('extension/dashboard/phpinfo', $data));
|
||||
}
|
||||
|
||||
private function getFilesSize($path)
|
||||
{
|
||||
$fileSize = 0;
|
||||
$dir = scandir($path);
|
||||
|
||||
foreach ($dir as $file) {
|
||||
if (($file != '.') && ($file != '..'))
|
||||
if (is_dir($path . '/' . $file))
|
||||
$fileSize += $this->getFilesSize($path . '/' . $file);
|
||||
else
|
||||
$fileSize += filesize($path . '/' . $file);
|
||||
}
|
||||
|
||||
return $fileSize;
|
||||
}
|
||||
|
||||
private function format_size($size)
|
||||
{
|
||||
$this->load->language('extension/dashboard/domovoy');
|
||||
$metrics[0] = $this->language->get('text_metrics_bit');
|
||||
$metrics[1] = $this->language->get('text_metrics_kbit');
|
||||
$metrics[2] = $this->language->get('text_metrics_mbit');
|
||||
$metrics[3] = $this->language->get('text_metrics_gbit');
|
||||
$metrics[4] = $this->language->get('text_metrics_tbit');
|
||||
$metric = 0;
|
||||
|
||||
$ret = array();
|
||||
|
||||
while (floor($size / 1024) > 0) {
|
||||
++$metric;
|
||||
$size /= 1024;
|
||||
}
|
||||
$ret['size'] = round($size, 1);
|
||||
$ret['unit'] = isset($metrics[$metric]) ? $metrics[$metric] : '??';
|
||||
return $ret;
|
||||
}
|
||||
|
||||
private function checkFunc($functions)
|
||||
{
|
||||
$result = array();
|
||||
foreach ($functions as $function) {
|
||||
if (function_exists($function)) {
|
||||
$result[] = $function;
|
||||
}
|
||||
}
|
||||
|
||||
$result = implode(", ", $result);
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function deldir($dirname)
|
||||
{
|
||||
if (file_exists($dirname)) {
|
||||
if (is_dir($dirname)) {
|
||||
$dir = opendir($dirname);
|
||||
while (($filename = readdir($dir)) !== false) {
|
||||
if ($filename != "." && $filename != "..") {
|
||||
$file = $dirname . "/" . $filename;
|
||||
$this->deldir($file);
|
||||
}
|
||||
}
|
||||
closedir($dir);
|
||||
rmdir($dirname);
|
||||
} else {
|
||||
@unlink($dirname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function date_diff($date1, $date2)
|
||||
{
|
||||
$diff = strtotime($date2) - strtotime($date1);
|
||||
return abs($diff);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user