--- a/busui/owa/owa_caller.php +++ b/busui/owa/owa_caller.php @@ -1,1 +1,314 @@ - + + * @copyright Copyright © 2006 Peter Adams + * @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')); + } + } + } + + + /* 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(); + } + + /* 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')) { + + $tag = owa_coreAPI::getJsTrackerTag( $this->getSiteId(), $options ); + + 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() { + + echo '...'; + } + +} + +?>