Permalink
Fetching contributors…
Cannot retrieve contributors at this time
333 lines (251 sloc) 8.75 KB
<?php
//
// Open Web Analytics - An Open Source Web Analytics Framework
//
// Copyright 2006 Peter Adams. All rights reserved.
//
// Licensed under GPL v2.0 http://www.gnu.org/copyleft/gpl.html
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// $Id$
//
include_once('owa_env.php');
require_once(OWA_BASE_DIR.'/owa_base.php');
require_once(OWA_BASE_DIR.'/owa_requestContainer.php');
require_once(OWA_BASE_DIR.'/owa_auth.php');
require_once(OWA_BASE_DIR.'/owa_coreAPI.php');
/**
* Abstract Caller class used to build application specific invocation classes
*
* @author Peter Adams <peter@openwebanalytics.com>
* @copyright Copyright &copy; 2006 Peter Adams <peter@openwebanalytics.com>
* @license http://www.gnu.org/copyleft/gpl.html GPL v2.0
* @category owa
* @package owa
* @version $Revision$
* @since owa 1.0.0
*/
class owa_caller extends owa_base {
/**
* Request Params from get or post
*
* @var array
*/
var $params;
var $start_time;
var $end_time;
var $update_required;
var $service;
var $site_id;
/**
* Constructor
*
* @param array $config
* @return owa_caller
*/
function __construct($config = array()) {
if (empty($config)) {
$config = array();
}
// Start time
$this->start_time = owa_lib::microtime_float();
/* SETUP CONFIGURATION AND ERROR LOGGER */
// Parent Constructor. Sets default config entity and error logger
parent::__construct();
// Log version debug
$this->e->debug(sprintf('*** Starting Open Web Analytics v%s. Running under PHP v%s (%s) ***', OWA_VERSION, PHP_VERSION, PHP_OS));
if ( array_key_exists('REQUEST_URI', $_SERVER ) ) {
owa_coreAPI::debug( 'Request URL: '.$_SERVER['REQUEST_URI'] );
}
if ( array_key_exists('HTTP_USER_AGENT', $_SERVER ) ) {
owa_coreAPI::debug( 'User Agent: '.$_SERVER['HTTP_USER_AGENT'] );
}
if ( array_key_exists('HTTP_HOST', $_SERVER ) ) {
owa_coreAPI::debug( 'Host: '.$_SERVER['HTTP_HOST'] );
}
//owa_coreAPI::debug('cookie domain in caller: '. owa_coreAPI::getSetting('base', 'cookie_domain'));
// Backtrace. handy for debugging who called OWA
//$bt = debug_backtrace();
//$this->e->debug($bt[4]);
// load config values from DB
// Applies config from db or cache
// check here is needed for installs when the configuration table does not exist.
if (!defined('OWA_INSTALLING')) {
if ($this->c->get('base', 'do_not_fetch_config_from_db') != true) {
if ($this->c->isConfigFilePresent()) {
$this->c->load( $this->c->get( 'base', 'configuration_id' ) );
}
}
}
// set timezone once config is loaded from DB.
$this->c->setTimezone();
/* APPLY CALLER CONFIGURATION OVERRIDES */
// overrides all default and user config values except defined in the config file
// must come after user overides are applied
// This will apply configuration overirdes that are specified by the calling application.
// This is usually used by plugins to setup integration specific configuration values.
$this->c->applyModuleOverrides('base', $config);
$this->e->debug('Caller configuration overrides applied.');
/* SET ERROR HANDLER */
// Sets the correct mode of the error logger now that final config values are in place
// This will flush buffered msgs that were thrown up untill this point
$this->e->setHandler($this->c->get('base', 'error_handler'));
/* PHP ERROR LOGGING */
/*
if (defined('OWA_LOG_PHP_ERRORS')) {
$this->e->logPhpErrors();
}
set_exception_handler( array($this->e, 'logException') );
*/
/* LOAD SERVICE LAYER */
$this->service = owa_coreAPI::serviceSingleton();
// initialize framework
$this->service->initializeFramework();
// notify handlers of 'init' action
$dispatch = owa_coreAPI::getEventDispatch();
$dispatch->notify($dispatch->makeEvent('init'));
/* SET SITE ID */
// needed in standalone installs where site_id is not set in config file.
// still needed??????
if (!empty($this->params['site_id'])) {
$this->c->set('base', 'site_id', $this->params['site_id']);
}
// re-fetch the array now that overrides have been applied.
// needed for backwards compatability
$this->config = $this->c->fetch('base');
/* SETUP REQUEST Params */
// still needed?????
$this->params = $this->service->request->getAllOwaParams();
}
function handleRequestFromUrl() {
//$this->params = owa_lib::getRequestParams();
return $this->handleRequest();
}
/**
* Returns a configured javascript tracker for inclusion in your web page.
* You can pass an options array to control what the tracker will log.
* The options array is a key/value pair format like:
*
* $options = array('do_not_log_pageview' => true);
*
* Option keys include: 'do_not_log_pageview', 'do_not_log_clicks', 'do_not_log_domstream'
*
* @param $echo bool if true the function will echo. if false the tracker is returned asa string.
* @param $options array an key value pair option array
* @return $tag string the tracker javascript.
*/
function placeHelperPageTags($echo = true, $options = array()) {
if( ! owa_coreAPI::getRequestParam( 'is_robot' ) ) {
if ( ! class_exists( 'owa_template' ) ) {
require_once(OWA_BASE_CLASSES_DIR.'owa_template.php');
}
$t = new owa_template();
$t->set_template('js_helper_tags.tpl');
$tracking_code = owa_coreAPI::getJsTrackerTag( $this->getSiteId(), $options );
$t->set('tracking_code', $tracking_code);
$tag = $t->fetch();
if ($echo == false) {
return $tag;
} else {
echo $tag;
}
}
}
// needed?
function handleHelperPageTagsRequest() {
$params = array();
$params['do'] = 'base.helperPageTags';
return $this->handleRequest($params);
}
/**
* Handles OWA internal page/action requests
*
* @return unknown
*/
function handleRequest($caller_params = null, $action = '') {
return owa_coreAPI::handleRequest($caller_params, $action);
}
function handleSpecialActionRequest() {
if(isset($_GET['owa_specialAction'])):
$this->e->debug("special action received");
echo $this->handleRequestFromUrl();
$this->e->debug("special action complete");
exit;
elseif(isset($_GET['owa_logAction'])):
$this->e->debug("log action received");
$this->config['delay_first_hit'] = false;
$this->c->set('base', 'delay_first_hit', false);
echo $this->logEventFromUrl();
exit;
elseif(isset($_GET['owa_apiAction'])):
$this->e->debug("api action received");
define('OWA_API', true);
// lookup method class
echo $this->handleRequest('', 'base.apiRequest');
exit;
else:
owa_coreAPI::debug('hello from special action request method in caller. no action to do.');
return;
endif;
}
function __destruct() {
$this->end_time = owa_lib::microtime_float();
$total_time = $this->end_time - $this->start_time;
$this->e->debug(sprintf('Total session time: %s',$total_time));
$this->e->debug("goodbye from OWA");
owa_coreAPI::profileDisplay();
return;
}
function setSetting($module, $name, $value) {
return owa_coreAPI::setSetting($module, $name, $value);
}
function getSetting($module, $name) {
return owa_coreAPI::getSetting($module, $name);
}
function setCurrentUser($role, $login_name = '') {
$cu = owa_coreAPI::getCurrentUser();
$cu->setRole($role);
$cu->setAuthStatus(true);
}
function makeEvent($type = '') {
$event = owa_coreAPI::supportClassFactory('base', 'event');
if ($type) {
$event->setEventType($type);
}
return $event;
}
function setSiteId($site_id) {
$this->site_id = $site_id;
}
function getSiteId() {
return $this->site_id;
}
function setErrorHandler($mode) {
$this->e->setHandler($mode);
}
function isOwaInstalled() {
$version = owa_coreAPI::getSetting('base', 'schema_version');
if ($version > 0) {
return true;
} else {
return false;
}
}
function isEndpointEnabled($file_name) {
if ( ! $this->getSetting('base', 'disableAllEndpoints') ) {
$disabled_endpoints = $this->getSetting('base', 'disabledEndpoints');
if ( ! in_array( $file_name, $disabled_endpoints ) ) {
return true;
}
}
}
function restInPeace() {
return false;
}
}
?>