/wp-content/plugins/wp-piwik/classes/WP_Piwik/Request.php

https://github.com/AJenbo/ubuntudanmark.dk · PHP · 95 lines · 81 code · 14 blank · 0 comment · 30 complexity · ad57faca5fcbfffe8ab865a827a4eaef MD5 · raw file

  1. <?php
  2. namespace WP_Piwik;
  3. abstract class Request {
  4. protected static $wpPiwik, $settings, $debug, $lastError = '', $requests = array(), $results = array(), $isCacheable = array(), $piwikVersion;
  5. public function __construct($wpPiwik, $settings) {
  6. self::$wpPiwik = $wpPiwik;
  7. self::$settings = $settings;
  8. self::register('API.getPiwikVersion', array());
  9. }
  10. public function reset() {
  11. self::$debug = null;
  12. self::$requests = array();
  13. self::$results = array();
  14. self::$isCacheable = array();
  15. self::$piwikVersion = null;
  16. }
  17. public static function register($method, $parameter) {
  18. if ($method == 'API.getPiwikVersion')
  19. $id = 'global.getPiwikVersion';
  20. else
  21. $id = 'method='.$method.self::parameterToString($parameter);
  22. if (
  23. in_array( $method, array( 'API.getPiwikVersion', 'SitesManager.getJavascriptTag', 'SitesManager.getSitesWithAtLeastViewAccess', 'SitesManager.getSitesIdFromSiteUrl', 'SitesManager.addSite', 'SitesManager.updateSite', 'SitesManager.getSitesWithAtLeastViewAccess' ) ) ||
  24. !isset( $parameter['date'] ) ||
  25. !isset( $parameter['period'] ) ||
  26. substr($parameter['date'], 0, 4) == 'last' ||
  27. $parameter['date'] == 'today' ||
  28. ( $parameter['period'] == 'day' && $parameter['date'] == date('Ymd') ) ||
  29. ( $parameter['period'] == 'month' && $parameter['date'] == date('Ym') ) ||
  30. ( $parameter['period'] == 'week' && $parameter['date'] == date( 'Ymd', strtotime( "last Monday" ) ) )
  31. ) self::$isCacheable[$id] = false;
  32. else self::$isCacheable[$id] = $method.'-'.serialize($parameter);
  33. if (!isset(self::$requests[$id]))
  34. self::$requests[$id] = array('method' => $method, 'parameter' => $parameter);
  35. return $id;
  36. }
  37. private static function parameterToString($parameter) {
  38. $return = '';
  39. if (is_array($parameter))
  40. foreach ($parameter as $key => $value)
  41. $return .= '&'.$key.'='.$value;
  42. return $return;
  43. }
  44. public function perform($id) {
  45. if ( self::$settings->getGlobalOption('cache') && false !== ( $cached = get_transient( 'wp-piwik_c_'.md5(self::$isCacheable[$id] ) ) ) ) {
  46. if (!empty ( $cached ) && !(! empty ( $cached['result'] ) && $cached['result'] == 'error') ) {
  47. self::$wpPiwik->log("Deliver cached data: ".$id);
  48. return $cached;
  49. }
  50. }
  51. self::$wpPiwik->log("Perform request: ".$id);
  52. if (!isset(self::$requests[$id]))
  53. return array('result' => 'error', 'message' => 'Request '.$id.' was not registered.');
  54. elseif (!isset(self::$results[$id])) {
  55. $this->request($id);
  56. }
  57. if ( isset ( self::$results[$id] ) ) {
  58. if ( self::$settings->getGlobalOption('cache') && self::$isCacheable[$id] ) {
  59. set_transient( 'wp-piwik_c_'.md5(self::$isCacheable[$id]) , self::$results[$id], WEEK_IN_SECONDS );
  60. }
  61. return self::$results[$id];
  62. } else return false;
  63. }
  64. public function getDebug($id) {
  65. return isset( self::$debug[$id] )? self::$debug[$id] : false;
  66. }
  67. protected function buildURL($config, $urlDecode = false) {
  68. $url = 'method='.($config['method']).'&idSite='.self::$settings->getOption('site_id');
  69. foreach ($config['parameter'] as $key => $value)
  70. $url .= '&'.$key.'='.($urlDecode?urldecode($value):$value);
  71. return $url;
  72. }
  73. protected function unserialize($str) {
  74. self::$wpPiwik->log("Result string: ".$str);
  75. return ($str == json_decode(false, true) || @json_decode($str, true) !== false)?json_decode($str, true):array();
  76. }
  77. public static function getLastError() {
  78. return self::$lastError;
  79. }
  80. abstract protected function request($id);
  81. }