function stats() { $this->validateRights([USER_ADMIN]); if (isset($_REQUEST['top_articles'])) { if ($t = $this->db->fetch('SELECT views FROM articles ORDER BY views DESC LIMIT 5')) { $v = [0]; foreach ($t as $a) { $v[] = $a['views']; } unset($v[0]); $this->data['image'] = new GDImage(NULL, new Size(800, 500)); $g = new BarChart(new Boundary(0, 0, $this->data['image']->size()->width, $this->data['image']->size()->height)); $g->depth(15); $g->background(new Color(255, 144, 130, 127)); $g->values(['bgcolors' => [new Color(255, 102, 91), new Color(50, 255, 0), new Color(63, 168, 255), new Color(255, 220, 22), new Color(255, 112, 238)], 'labels' => TRUE, 'thickness' => 3]); $g->data($v); $g->title(['text' => 'Топ 5 публикаций', 'color' => new Color(255, 255, 255), 'font' => new Font(PATH_ROOT . '/css/fonts/OpenSans-Bold.ttf', 14), 'margin' => ['top' => 0, 'bottom' => 15]]); $g->axis(['font_x' => new Font(PATH_ROOT . '/css/fonts/OpenSans-Regular.ttf', 8), 'font_y' => new Font(PATH_ROOT . '/css/fonts/OpenSans-Regular.ttf', 8), 'bgcolor' => new Color(255, 255, 255, 100), 'fgcolor' => new Color(255, 255, 255), 'y_lines' => TRUE]); $g->max(50); $g->min(0); $g->draw($this->data['image']->getHandle()); } $this->data['subaction'] = 'image'; } else { if (isset($_REQUEST['storage_usage'])) { $this->validateArgs($_REQUEST, [['start_date', 'string'], ['end_date', 'string'], ['resolution', 'numeric']]); $s = $_REQUEST['start_date']; $e = $_REQUEST['end_date']; $r = $_REQUEST['resolution']; $v = []; if ($t = $this->db->call('show_storage_usage', [$s, $e, $r])) { $b = $t[0]['balance']; for ($i = 1; $i < count($t); $i++) { if ($r == 1) { $v[sprintf('%02d.%02d.%04d', $t[$i]['day'], $t[$i]['month'], $t[$i]['year'])] = round(($b += $t[$i]['balance']) / 1024 / 1024, 2); } else { if ($r == 2) { $v[sprintf('%02d.%04d', $t[$i]['month'], $t[$i]['year'])] = round(($b += $t[$i]['balance']) / 1024 / 1024, 2); } } } $this->data['image'] = new GDImage(NULL, new Size(800, 500)); $g = new LineChart(new Boundary(0, 0, $this->data['image']->size()->width, $this->data['image']->size()->height)); $g->depth(15); $g->background(new Color(255, 144, 130, 127)); $g->values(['bgcolors' => [new Color(0, 255, 0)], 'fgcolors' => [new Color(255, 255, 255)], 'font' => new Font(PATH_ROOT . '/css/fonts/OpenSans-Regular.ttf', 10), 'labels' => TRUE, 'thickness' => 2]); $g->data($v); $g->title(['text' => 'Использование хранилища', 'color' => new Color(255, 255, 255), 'font' => new Font(PATH_ROOT . '/css/fonts/OpenSans-Bold.ttf', 14), 'margin' => ['top' => 0, 'bottom' => 15]]); $g->axis(['font_x' => new Font(PATH_ROOT . '/css/fonts/OpenSans-Regular.ttf', 8, 90), 'font_y' => new Font(PATH_ROOT . '/css/fonts/OpenSans-Regular.ttf', 8), 'bgcolor' => new Color(255, 255, 255, 100), 'fgcolor' => new Color(255, 255, 255), 'y_lines' => TRUE]); $g->draw($this->data['image']->getHandle()); } $this->data['subaction'] = 'image'; } else { if ($t = $this->db->fetch('SELECT COUNT(*) AS total_users FROM users')) { $this->data['stats']['total_users'] = $t[0]['total_users']; } if ($t = $this->db->fetch('SELECT COUNT(*) AS total_admins FROM users WHERE is_admin=1')) { $this->data['stats']['total_admins'] = $t[0]['total_admins']; } if ($t = $this->db->fetch('SELECT id, login, DATE_FORMAT(reg_date, \'%e.%m.%Y %H:%i\') AS reg_date FROM users WHERE reg_date=(SELECT MAX(reg_date) FROM users)')) { $this->data['stats']['last_user'] = $t[0]; } if ($t = $this->db->fetch('SELECT SUM(file_size) AS total_size FROM storage')) { $this->data['stats']['storage_usage'] = round($t[0]['total_size'] / 1024 / 1024, 1) . ($this->app->config['storage']['max_size'] != -1 ? ' из ' . $this->app->config['storage']['max_size'] : '') . ' МБ'; } if ($t = $this->db->fetch('SELECT COUNT(*) AS total_sections FROM sections')) { $this->data['stats']['total_sections'] = $t[0]['total_sections']; } if ($t = $this->db->fetch('SELECT COUNT(*) AS total_articles FROM articles')) { $this->data['stats']['total_articles'] = $t[0]['total_articles']; } if ($t = $this->db->fetch('SELECT COUNT(*) AS total_unverified_articles FROM articles WHERE verifier_id IS NULL')) { $this->data['stats']['total_unverified_articles'] = $t[0]['total_unverified_articles']; } if ($t = $this->db->fetch('SELECT COUNT(*) AS total_comments FROM comments')) { $this->data['stats']['total_comments'] = $t[0]['total_comments']; } if ($t = $this->db->fetch('SELECT articles.id AS id, articles.title AS title, data_folder, users.id AS user_id, login FROM articles INNER JOIN sections ON articles.section_id=sections.id INNER JOIN users ON author_id=users.id ORDER BY views DESC LIMIT 5')) { foreach ($t as &$a) { $a['href'] = $this->app->config['path']['section'] . $a['data_folder'] . '/' . $a['id'] . '/'; } unset($a); $this->data['stats']['top_articles'] = $t; } } } }