<?php /** * Plugin Name: ai-simplesitestats * Plugin URI: https://git.autistici.org/noblogs/ai-simplesitestats-plugin * Description: Show simple site statistics * Version: 0.0.1 * Author: Autistici/Inventati * Author URI: https://www.autistici.org/ * License: MIT * License URI: http://opensource.org/licenses/MIT */ if (!defined('SIMPLESITESTATS_URL')) { define('SIMPLESITESTATS_URL', 'http://analytics.investici.org:3389'); } namespace AI_SSS; class StatisticsPage { private $resolutions = array( "day", "month", "year", ); private $metrics = array( "page", "browser", "device", ); public function __construct($aisss) { self::$aiSSS = $aisss; } public function show() { $metric = 'browser'; if (isset($_GET['sss_metric'])) { $metric = $_GET['sss_metric']; } $resolution = 'day'; if (isset($_GET['sss_resolution'])) { $resolution = $_GET['sss_resolution']; } $site_name = preg_replace("(^https?://)", "", site_url()); $timeseriesJSON = $this->getTimeseriesJSON($site_name, $metric, $resolution); echo '<div id="ai-sss-container" class="wrap">'; echo '<h2>Statistics for ' . $site_name . '</h2>'; // Output the chart element along with the data. echo '<div style="width:100%;"><canvas id="sssChart" class="simplesitestats-chart" data-timeseries-element-id="sssChartData"></canvas></div>'; echo '<div style="display:none;" id="sssChartData">' . $timeseriesJSON . '</div>'; // Form to control chart parameters. echo '<form method="get" action="?page=' . htmlentities($_GET['page']) . '">'; wp_nonce_field('simplesitestats_settings'); // Show chart controls. $this->showSelectControl("sss_metric", "Metric", $this->metrics, $metric); $this->showSelectControl("sss_resolution", "Resolution", $this->resolutions, $resolution); echo '<button type="submit">Update</button>'; echo '</form>'; echo '</div>'; } public function adminScripts() { wp_enqueue_script('ai-simplesitestats', self::$aiSSS->getPluginURL() . 'js/simplesitestats.js', array(), self::$aiSSS->getPluginVersion(), true); } public function adminStyles() { } function showSelectControl($name, $label, $choices, $value) { echo '<div>'; echo '<label for="'. $name . '_field">' . $label . '</label>'; echo '<select name="' . $name . '" id="' . $name . '_field">'; for ($i = 0; $i < len($choices); $i++) { echo '<option value="' . $choices[$i] . '"'; if ($choices[$i] === $value) { echo ' selected'; } echo '>' . $choices[$i] . '</option>'; } echo '</select></div>'; } function getTimeseriesJSON($site, $metric, $resolution) { $url = SIMPLESITESTATS_URL . '/query?' . http_build_query(array( 'site' => $site, 'metric' => $metric, 'level' => $resolution, )); $response = wp_remote_get($url); if ((is_wp_error($response)) || (200 !== wp_remote_retrieve_response_code($response))) { return null; } return $response['body']; } } class AiSSS { private $version = '0.0.1', $blog_id; public function __construct() { global $blog_id; self::$blog_id = $blog_id; $this->addStatsPage(); } public function addStatsPage() { $statsPage = new AI_SSS\Statistics($this); $statsPageId = add_dashboard_page( __('Statistics', 'ai-simplesitestats'), 'Stats', '', // cap 'ai-sss_stats', array($statsPage, 'show')); add_action('admin_print_scripts-' . $statsPageId, array($statsPage, 'adminScripts')); add_action('admin_print_styles-' . $statsPageId, array($statsPage, 'adminStyles')); } public function getPluginURL() { return trailingslashit(plugin_dir_url(dirname(__FILE__))); } public function getPluginVersion() { return self::$version; } }