Commit cdd6294b authored by Canek Peláez's avatar Canek Peláez
Browse files

Initial commit

parents
Loading
Loading
Loading
Loading
+83 −0
Original line number Original line Diff line number Diff line
<?php

require_once(ABSPATH . '/vendor/autoload.php');

class GAPageStats {

    private static $instance = null;

    private $view_id = null;
    private $analytics = null;

    protected function __construct() {
        $ga_options = get_option('ga_page_stats_options');
        $this->view_id = $ga_options['view_id'];

        $client = new Google_Client();
        $client->setApplicationName("Hello Analytics Reporting");
        $client->setAuthConfig($ga_options['key_file']);
        $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
        $this->analytics = new Google_Service_AnalyticsReporting($client);
    }

    protected function __clone() { }

    public function __wakeup() {
        throw new Exception("Cannot unserialize a singleton.");
    }

    protected static function getInstance(): GAPageStats {
        if (self::$instance == NULL)
            self::$instance = new static();
        return self::$instance;
    }

    public static function getPageStats($path) {
        $ga = self::getInstance();

        // Create the DateRange object.
        $dateRange = new Google_Service_AnalyticsReporting_DateRange();
        $dateRange->setStartDate("2012-11-01");
        $dateRange->setEndDate("today");

        // Create the page views metric.
        $pageViews = new Google_Service_AnalyticsReporting_Metric();
        $pageViews->setExpression("ga:pageviews");
        $pageViews->setAlias("Page Views");

        // Create the users metric.
        $users = new Google_Service_AnalyticsReporting_Metric();
        $users->setExpression("ga:users");
        $users->setAlias("Users");

        // Create the page path dimension.
        $pagePath = new Google_Service_AnalyticsReporting_Dimension();
        $pagePath->setName("ga:pagePath");

        // Create the ReportRequest object.
        $request = new Google_Service_AnalyticsReporting_ReportRequest();
        $request->setViewId($ga->view_id);
        $request->setDateRanges($dateRange);
        $request->setDimensions(array($pagePath));
        $request->setMetrics(array($pageViews, $users));
        $request->setFiltersExpression("ga:pagePath=~" . $path);

        $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
        $body->setReportRequests(array($request));
        $reports = $ga->analytics->reports->batchGet($body);

        if (count($reports) == 0)
            return [0, 0];

        $report = $reports[0];
        $rows = $report->getData()->getRows();

        if (count($rows) == 0)
            return [0, 0];

        $row = $rows[0];
        $metrics = $row->getMetrics();
        $values = $metrics[0]->getValues();
        return [ $values[0], $values[1] ];
    }
}
+58 −0
Original line number Original line Diff line number Diff line
<?php
/**
 * @package Google_Analytics_Page_Stats
 * @version 0.0.1
 */
/*
Plugin Name: Google Analytics Page Stats
Plugin URI: https://aztlan.fciencias.unam.mx/gitlab/google_analytics_page_stats/
Description: This plugin offers an object to get the page stats from Google Analytics; it needs configuration from a Google Analytics account.
Author: Canek Peláez
Version: 0.0.1
Author URI: https://aztlan.fciencias.unam.mx/~canek/
*/

define('GA_PAGE_STATS__PLUGIN_DIR', plugin_dir_path(__FILE__));
require_once(GA_PAGE_STATS__PLUGIN_DIR . 'class.ga-page-stats.php');

add_action('admin_menu', 'ga_page_stats_menu');
function ga_page_stats_menu() {
    add_options_page('Google Analytics', 'Google Analytics', 'manage_options',
                     'google-analytics-page-stats/options.php') ;
}

function ga_page_stats_content_filter($content) {
    if (!is_singular() || !current_user_can('administrator'))
        return $content;
    $r = GAPageStats::getPageStats($_SERVER['REQUEST_URI']);
    $spv = number_format($r[0]);
    $su = number_format($r[1]);
    return $content . '<span style="font-size:small;"><em>Vistas: ' . $spv . '</em> | ' .
        '<em>Usuarios: ' . $su . '</em> | </span>';
}

add_filter('the_content', 'ga_page_stats_content_filter');

register_activation_hook(__FILE__, 'ga_page_stats_activation');
function ga_page_stats_activation($network_wide) {
	// Add Options
	$option_name = 'ga_page_stats_options';
	$option = array('view_id' => '', 'key_file' => '');

	if (is_multisite() && $network_wide) {
		$ms_sites = function_exists('get_sites') ? get_sites() : wp_get_sites();

		if (0 < count($ms_sites)) {
			foreach ($ms_sites as $ms_site) {
				$blog_id = isset($ms_site['blog_id']) ?
                    $ms_site['blog_id'] : $ms_site->blog_id;
				switch_to_blog($blog_id);
				add_option($option_name, $option);
			}
		}

		restore_current_blog();
	} else {
		add_option($option_name, $option);
	}
}

index.php

0 → 100644
+2 −0
Original line number Original line Diff line number Diff line
<?php
# Silence is golden.
 No newline at end of file

options.php

0 → 100644
+64 −0
Original line number Original line Diff line number Diff line
<?php
if(!empty($_POST['Submit'])) {
    check_admin_referer('ga-page-stats_options');

    $ga_options = array();
    $ga_options['view_id']  = !empty($_POST['view_id_text']) ?
        addslashes(trim(wp_filter_kses($_POST['view_id_text']))) : '';
    $ga_options['key_file'] = !empty($_POST['key_file_text']) ?
        addslashes(trim(wp_filter_kses($_POST['key_file_text']))) : '';

    $update_ga_queries = array();
    $update_ga_text = array();
    $update_ga_queries[] = update_option('ga_page_stats_options', $ga_options);
    $update_ga_text[] = 'Estadísticas de página con Google Analytics';
    $i = 0;
    $text = '';
    foreach ($update_ga_queries as $update_ga_query) {
        if ($update_ga_query) {
            $text .= '<p style="color: green;">' . $update_ga_text[$i] .
                ' ' . 'Actualizado' . '</p>';
        }
        $i++;
    }
    if (empty($text)) {
        $text = '<p style="color: red;">' . 'Ninguna opción actualizada' . '</p>';
    }
}

$ga_options = get_option('ga_page_stats_options');

if (!empty($text)) {
    echo '<!-- Last Action --><div id="message" ' .
        'class="updated fade"><p>' . $text . '</p></div>';
}
?>
<form method="post" action="<?php echo admin_url('admin.php?page='.plugin_basename(__FILE__)); ?>">
  <?php wp_nonce_field('ga-page-stats_options'); ?>
  <div class="wrap">
    <h2>Estadísticas de página con Google Analytics</h2>
    <table class="form-table">
      <tr>
        <th scope="row" valign="top">Identificador de vista</th>
        <td>
          <input type="text" name="view_id_text"
                 value="<?php echo stripslashes($ga_options['view_id']); ?>"
                 size="30" />
        </td>
      </tr>
      <tr>
        <th scope="row" valign="top">Archivo con llave</th>
          <td>
            <input type="text" name="key_file_text"
                   value="<?php echo stripslashes($ga_options['key_file']); ?>"
                   size="30" />
          </td>
        </tr>
      <tr>
    </table>
    <p class="submit">
      <input type="submit" name="Submit" class="button"
             value="Salvar cambios" />
    </p>
  </div>
</form>

uninstall.php

0 → 100644
+22 −0
Original line number Original line Diff line number Diff line
<?php
if (!defined('WP_UNINSTALL_PLUGIN'))
    exit();

$option_name = 'ga_page_stats_options';

if (is_multisite()) {
    $ms_sites = function_exists('get_sites') ? get_sites() : wp_get_sites();

    if (0 < sizeof($ms_sites)) {
        foreach ($ms_sites as $ms_site) {
            $blog_id = isset($ms_site['blog_id']) ?
                $ms_site['blog_id'] : $ms_site->blog_id;
            switch_to_blog($blog_id);
            delete_option($option_name);
        }
    }

    restore_current_blog();
} else {
    delete_option($option_name);
}