File Manager

Current Directory: /home/astoriaah/www/old15/administrator/components/com_sh404sef/classes
Viewing File: /home/astoriaah/www/old15/administrator/components/com_sh404sef/classes/baseanalytics.php
<?php /** * sh404SEF - SEO extension for Joomla! * * @author Yannick Gaultier * @copyright (c) Yannick Gaultier 2014 * @package sh404SEF * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL * @version 4.4.4.1791 * @date 2014-07-01 */ // Security check to ensure this file is being included by a parent file. if (!defined('_JEXEC')) die('Direct Access to this location is not allowed.'); /** * Implement analytics handling * * @author shumisha * */ class Sh404sefClassBaseanalytics { // default end point for the analytics service protected $_endPoint = ''; // default authorization url protected $_authPoint = ''; // application key protected $_appKeys = array(); // account list protected $_accounts = array(); // SEF configuration protected $_config = null; // options for current request (ie account id, format protected $_options = null; // authorization token, to be cached protected $_Auth = ''; public function fetchAnalytics($config, $options) { // store parameters $this->_config = $config; $this->_options = $options; // prepare a default response object $response = new stdClass(); $response->status = true; $response->statusMessage = JText::_('COM_SH404SEF_CLICK_TO_CHECK_ANALYTICS'); $response->note = ''; // connect to server and fetch data try { $rawResponse = $this->_fetchData(); } catch (Exception $e) { $response->status = false; $response->statusMessage = $e->getMessage(); return $response; } // return response $response->analyticsData = $rawResponse; // attach html select list or input boxes to response, to allow user to filter the data viewed $response->filters = $this->_prepareFilters(); // update date/time display $response->statusMessage = JText::sprintf('COM_SH404SEF_UPDATED_ON', strftime('%c')); return $response; } protected function _fetchData() { // first try to connect, if we don't already have a token $this->_getAuthToken(); // get the http client $hClient = Sh404sefHelperAnalytics::getHttpClient(); // fetch account list from supplier $this->_fetchAccountsList(); // and find about which one to use (use first one is none selected from a previous request //if (empty($this->_options['accountId'])) //{ $this->_options['accountId'] = Sh404sefHelperAnalytics::getDefaultAccountId($this->_accounts); //} // check in case we don' have valid account ID if (empty($this->_options['accountId'])) { throw new Sh404sefExceptionDefault('Empty account ID to query analytics API. Contact admin.'); } // create a report object $className = 'Sh404sefAdapterAnalytics' . strtolower($this->_config->analyticsType) . 'report' . strtolower($this->_options['report']); $report = new $className(); // ask it to perform API requests as needed, $dataResponse = $report->fetchData($this->_config, $this->_options, $this->_Auth, $this->_endPoint, $this->_getAppKey()); // return data response for further processing return $dataResponse; } /** * Fetch list of accounts, to be overloaded */ protected function _fetchAccountsList() { } /** * Cache authorization token */ protected function _getAuthToken() { // create cache Id and get cache object $cacheId = md5($this->_config->analyticsPassword . $this->_config->analyticsUser . 'sdfhk546548-(}=])))'); $cache = JFactory::getCache('sh404sef_analytics_auth'); $cache->setLifetime(10080); // cache result for 7 days $cache->setCaching(1); // force caching on $this->_Auth = $cache->get(array($this, 'doGetAuthToken'), $args = array(), $cacheId); } /** * performs actuall request to get token */ public function doGetAuthToken() { $this->_prepareConnectRequest(); $connectReponse = $this->_connect(); $this->_handleConnectResponse($connectReponse); return $this->_Auth; } /** * Connects to analytics supplier * * Meant to be overloaded by adapter * * @param $config , sef config object, holding connecton parameters */ protected function _connect() { // get the http client $hClient = Sh404sefHelperAnalytics::getHttpClient(); // establish connection with available methods $adapters = array('Zendshl_Http_Client_Adapter_Curl', 'Zendshl_Http_Client_Adapter_Socket'); $rawResponse = null; // perform connect request foreach ($adapters as $adapter) { try { $hClient->setAdapter($adapter); $rawResponse = $hClient->request(); break; } catch (Exception $e) { // we failed, let's try another method } } // return if error if (empty($rawResponse)) { $msg = 'unknown code'; ShlSystem_Log::debug( 'sh404sef', '%s::%s::%d: %s', __CLASS__, __METHOD__, __LINE__, JText::sprintf('COM_SH404SEF_ERROR_CHECKING_ANALYTICS', $msg)); throw new Sh404sefExceptionDefault(JText::sprintf('COM_SH404SEF_ERROR_CHECKING_ANALYTICS', $msg)); } if (!is_object($rawResponse) || $rawResponse->isError()) { $msg = method_exists($rawResponse, 'getStatus') ? $rawResponse->getStatus() : 'unknown code'; ShlSystem_Log::debug( 'sh404sef', '%s::%s::%d: %s', __CLASS__, __METHOD__, __LINE__, JText::sprintf('COM_SH404SEF_ERROR_CHECKING_ANALYTICS', $msg)); throw new Sh404sefExceptionDefault(JText::sprintf('COM_SH404SEF_ERROR_CHECKING_ANALYTICS', $msg)); } // success, return response return $rawResponse; } /** * Set client object to perform request * for connection to analytics service * * To be oveloaded */ protected function _prepareConnectRequest() { return true; } /** * Handle response from connect request * * To be overloaded * */ protected function _handleConnectResponse($response) { return true; } /** * Check if user set parameters and request * data allow inserting tracking snippet */ protected function _shouldInsertSnippet() { // get config $config = &Sh404sefFactory::getConfig(); // check if we have a tracking code, no need to insert snippet if no tracking code if (empty($config->analyticsId) && ($config->analyticsEdition == 'ga' || $config->analyticsEdition == 'ga_and_uga')) { return false; } if (empty($config->analyticsUgaId) && ($config->analyticsEdition == 'uga' || $config->analyticsEdition == 'ga_and_uga')) { return false; } if (empty($config->analyticsGtmId) && $config->analyticsEdition == 'gtm') { return false; } // check if we are set to include tracking code for current user if (!sh404sefHelperGeneral::isInGroupList(JAccess::getGroupsByUser(JFactory::getUser()->id, $recursive = true), $config->analyticsUserGroups)) { return false; } // check if current IP is on exclusion list if (!empty($config->analyticsExcludeIP)) { $ip = empty($_SERVER['REMOTE_ADDR']) ? '' : $_SERVER['REMOTE_ADDR']; $exclude = Sh404sefHelperGeneral::checkIPList($ip, $config->analyticsExcludeIP); if ($exclude) { return false; } } return true; } protected function _prepareCommonHeaders() { } /** * prepare html filters to allow user to select the way she likes * to view reports */ protected function _prepareFilters() { // array to hold various filters $filters = array(); return $filters; } protected function _getAppKey() { static $_key = null; if (is_null($_key)) { $remoteConfig = Sh404sefHelperUpdates::getRemoteConfig($forced = false); $keys = empty($remoteConfig->config['google_analytics_api_keys']) ? $this->_appKeys : $remoteConfig->config['google_analytics_api_keys']; $_key = $keys[mt_rand(0, count($keys) - 1)]; } return $_key; } }