updated plugin Connect Matomo version 1.1.5

This commit is contained in:
2026-06-03 21:28:54 +00:00
committed by Gitium
parent 6e8ffa6f66
commit 1f3438440f
78 changed files with 13800 additions and 5314 deletions

View File

@ -1,95 +1,132 @@
<?php
namespace WP_Piwik;
namespace WP_Piwik;
abstract class Request {
protected static $wpPiwik, $settings, $debug, $lastError = '', $requests = array(), $results = array(), $isCacheable = array(), $piwikVersion;
public function __construct($wpPiwik, $settings) {
self::$wpPiwik = $wpPiwik;
self::$settings = $settings;
self::register('API.getPiwikVersion', array());
}
public function reset() {
self::$debug = null;
self::$requests = array();
self::$results = array();
self::$isCacheable = array();
self::$piwikVersion = null;
}
public static function register($method, $parameter) {
if ($method == 'API.getPiwikVersion')
$id = 'global.getPiwikVersion';
else
$id = 'method='.$method.self::parameterToString($parameter);
if (
in_array( $method, array( 'API.getPiwikVersion', 'SitesManager.getJavascriptTag', 'SitesManager.getSitesWithAtLeastViewAccess', 'SitesManager.getSitesIdFromSiteUrl', 'SitesManager.addSite', 'SitesManager.updateSite', 'SitesManager.getSitesWithAtLeastViewAccess' ) ) ||
!isset( $parameter['date'] ) ||
!isset( $parameter['period'] ) ||
substr($parameter['date'], 0, 4) == 'last' ||
$parameter['date'] == 'today' ||
( $parameter['period'] == 'day' && $parameter['date'] == date('Ymd') ) ||
( $parameter['period'] == 'month' && $parameter['date'] == date('Ym') ) ||
( $parameter['period'] == 'week' && $parameter['date'] == date( 'Ymd', strtotime( "last Monday" ) ) )
) self::$isCacheable[$id] = false;
else self::$isCacheable[$id] = $method.'-'.serialize($parameter);
if (!isset(self::$requests[$id]))
self::$requests[$id] = array('method' => $method, 'parameter' => $parameter);
return $id;
}
abstract class Request {
private static function parameterToString($parameter) {
$return = '';
if (is_array($parameter))
foreach ($parameter as $key => $value)
$return .= '&'.$key.'='.$value;
return $return;
}
/**
* @var \WP_Piwik
*/
protected static $wp_piwik;
public function perform($id) {
if ( self::$settings->getGlobalOption('cache') && false !== ( $cached = get_transient( 'wp-piwik_c_'.md5(self::$isCacheable[$id] ) ) ) ) {
if (!empty ( $cached ) && !(! empty ( $cached['result'] ) && $cached['result'] == 'error') ) {
self::$wpPiwik->log("Deliver cached data: ".$id);
return $cached;
}
/**
* @var Settings
*/
protected static $settings;
protected static $debug;
protected static $last_error = '';
protected static $requests = array();
protected static $results = array();
protected static $is_cacheable = array();
protected static $piwik_version;
public function __construct( $wp_piwik, $settings ) {
self::$wp_piwik = $wp_piwik;
self::$settings = $settings;
self::register( 'API.getPiwikVersion', array() );
}
public function reset() {
self::$debug = null;
self::$requests = array();
self::$results = array();
self::$is_cacheable = array();
self::$piwik_version = null;
}
public static function register( $method, $parameter ) {
if ( 'API.getPiwikVersion' === $method ) {
$id = 'global.getPiwikVersion';
} else {
$id = 'method=' . $method . self::parameter_to_string( $parameter );
}
if (
in_array( $method, array( 'API.getPiwikVersion', 'SitesManager.getJavascriptTag', 'SitesManager.getSitesWithAtLeastViewAccess', 'SitesManager.getSitesIdFromSiteUrl', 'SitesManager.addSite', 'SitesManager.updateSite', 'SitesManager.getSitesWithAtLeastViewAccess' ), true ) ||
! isset( $parameter['date'] ) ||
! isset( $parameter['period'] ) ||
'last' === substr( $parameter['date'], 0, 4 ) ||
'today' === $parameter['date'] ||
( 'day' === $parameter['period'] && gmdate( 'Ymd' ) === $parameter['date'] ) ||
( 'month' === $parameter['period'] && gmdate( 'Ym' ) === $parameter['date'] ) ||
( 'week' === $parameter['period'] && gmdate( 'Ymd', strtotime( 'last Monday' ) ) === $parameter['date'] )
) {
self::$is_cacheable[ $id ] = false;
} else {
// phpcs:ignore WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize
self::$is_cacheable[ $id ] = $method . '-' . serialize( $parameter );
}
if ( ! isset( self::$requests[ $id ] ) ) {
self::$requests[ $id ] = array(
'method' => $method,
'parameter' => $parameter,
);
}
return $id;
}
private static function parameter_to_string( $parameter ) {
$return = '';
if ( is_array( $parameter ) ) {
foreach ( $parameter as $key => $value ) {
$return .= '&' . $key . '=' . $value;
}
self::$wpPiwik->log("Perform request: ".$id);
if (!isset(self::$requests[$id]))
return array('result' => 'error', 'message' => 'Request '.$id.' was not registered.');
elseif (!isset(self::$results[$id])) {
$this->request($id);
}
if ( isset ( self::$results[$id] ) ) {
if ( self::$settings->getGlobalOption('cache') && self::$isCacheable[$id] ) {
set_transient( 'wp-piwik_c_'.md5(self::$isCacheable[$id]) , self::$results[$id], WEEK_IN_SECONDS );
}
return self::$results[$id];
} else return false;
}
public function getDebug($id) {
return isset( self::$debug[$id] )? self::$debug[$id] : false;
}
protected function buildURL($config, $urlDecode = false) {
$url = 'method='.($config['method']).'&idSite='.self::$settings->getOption('site_id');
foreach ($config['parameter'] as $key => $value)
$url .= '&'.$key.'='.($urlDecode?urldecode($value):$value);
return $url;
}
protected function unserialize($str) {
self::$wpPiwik->log("Result string: ".$str);
return ($str == json_decode(false, true) || @json_decode($str, true) !== false)?json_decode($str, true):array();
}
return $return;
}
public static function getLastError() {
return self::$lastError;
}
abstract protected function request($id);
}
public function perform( $id ) {
if ( self::$settings->get_global_option( 'cache' ) ) {
$cached = get_transient( 'wp-piwik_c_' . md5( self::$is_cacheable[ $id ] ) );
if ( ! empty( $cached ) && ! ( ! empty( $cached['result'] ) && 'error' === $cached['result'] ) ) {
self::$wp_piwik->log( 'Deliver cached data: ' . $id );
return $cached;
}
}
self::$wp_piwik->log( 'Perform request: ' . $id );
if ( ! isset( self::$requests[ $id ] ) ) {
return array(
'result' => 'error',
'message' => 'Request ' . $id . ' was not registered.',
);
} elseif ( ! isset( self::$results[ $id ] ) ) {
$this->request( $id );
}
if ( isset( self::$results[ $id ] ) ) {
if ( self::$settings->get_global_option( 'cache' ) && self::$is_cacheable[ $id ] ) {
set_transient( 'wp-piwik_c_' . md5( self::$is_cacheable[ $id ] ), self::$results[ $id ], WEEK_IN_SECONDS );
}
return self::$results[ $id ];
} else {
return false;
}
}
public function get_debug( $id ) {
return isset( self::$debug[ $id ] ) ? self::$debug[ $id ] : false;
}
protected function build_url( $config ) {
return http_build_query( $this->get_url_params( $config ), '', '&' );
}
protected function get_url_params( $config ) {
$params = [
'method' => $config['method'],
'idSite' => self::$settings->get_option( 'site_id' ),
];
$params = array_merge( $params, $config['parameter'] );
return $params;
}
protected function unserialize( $str ) {
self::$wp_piwik->log( 'Result string: ' . $str );
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
return ( json_decode( '', true ) === $str || false !== @json_decode( $str, true ) ) ? json_decode( $str, true ) : array();
}
public static function get_last_error() {
return self::$last_error;
}
abstract protected function request( $id );
}