Add analytics
[bus.git] / busui / owa / module.inc
blob:a/busui/owa/module.inc -> blob:b/busui/owa/module.inc
  <?php
   
  //
  // Open Web Analytics - An Open Source Web Analytics Framework
  //
  // Copyright 2008 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$
  //
   
  require_once('owa_env.php');
  require_once(OWA_BASE_CLASSES_DIR.'owa_php.php');
   
  /**
  * OWA Singleton.
  *
  * Creates instance of OWA that can be called from within Gallery.
  * All configuration taken from Gallery directly.
  */
  function owa_factory($params = array()) {
   
  static $owa;
   
  if(!empty($owa)):
  return $owa;
  else:
   
  // globals
  global $gallery;
   
  // init the configuration array for this caller
  $owa_config = $params;
   
  // OWA DATABASE CONFIGURATION
  // Will use Gallery config unless there is a config file present.
  // OWA uses this to setup it's own DB connection seperate from the one
  // that Gallery uses.
   
  //$gallery_base_url = $gallery->getConfig('galleryBaseUrl');
  $urlgenerator = $gallery->getUrlGenerator();
  $gallery_base_url = $urlgenerator->getCurrentUrlDir();
   
  // Gallery specific config overrides array
   
  $owa_config['report_wrapper'] = 'wrapper_gallery2.tpl';
  $owa_config['images_url'] = OWA_PUBLIC_URL.'i/';
  $owa_config['images_absolute_url'] = $owa_config['images_url'];
  $owa_config['main_url'] = $gallery_base_url.'main.php?g2_view=core.SiteAdmin&g2_subView=owa.owaGeneric';
  $owa_config['main_absolute_url'] = $owa_config['main_url'];
  $owa_config['action_url'] = $gallery_base_url.'main.php?g2_view=owa.owaAction&owa_specialAction';
  $owa_config['log_url'] = $gallery_base_url.'main.php?g2_view=owa.owaAction&owa_logAction=1';
  $owa_config['link_template'] = '%s&%s';
  //$owa_config['authentication'] = 'gallery';
  $owa_config['site_id'] = md5($gallery_base_url);
  $owa_config['query_string_filters'] = 'g2_fromNavId';
  $owa_config['is_embedded'] = 'true';
   
  $gallery->debug('hello from gallery owa plugin');
   
  // create owa instance
  $owa = new owa_php($owa_config);
  $gallery->debug('new owa instance created');
   
  return $owa;
   
  endif;
   
  }
   
  /**
  * Sets OWA priviledge info for current gallery user
  */
  function owa_set_priviledges() {
   
  global $gallery;
   
  // get Gallery's active user
  $u = $gallery->getActiveUser();
   
  // create instance of OWA
  $owa = owa_factory();
   
  //set user level. Needed for OWA's auth module.
   
  // check to see if user is a guest or not
  list ($ret, $user) = GalleryCoreApi::isAnonymousUser();
   
  if ($user == true):
   
  $level = 'everyone';
   
  else:
  // check to see if the user is a site admin. important becasue we might not want
  // to log such users activities.
  list ($ret, $admin) = GalleryCoreApi::isUserInSiteAdminGroup();
   
  if ($admin = true):
  $level = 'admin';
  else:
  $level = 'viewer';
  endif;
   
  endif;
   
  // preemptively set the current user info and mark as authenticated so that
  // downstream controllers don't have to authenticate
  $cu =&owa_coreAPI::getCurrentUser();
   
  // gallery gives all users a username of guest if there are not named users...
  if ($u->userName != 'guest'):
  $cu->setUserData('user_id', $u->userName);
  $cu->setUserData('email_address', $u->email);
  $cu->setUserData('real_name', $u->fullName);
  endif;
   
  $cu->setRole($level);
  $cu->setAuthStatus(true);
   
  return;
  }
   
  /**
  * OWA Gallery Module
  *
  * Integrates OWA with Gallery 2.2 or later
  *
  * @package owa
  * @author Peter Adams <peter@openwebanalytics.com>
  * @version $Revision$ $Date: $
  */
  class owaModule extends GalleryModule {
   
  function owaModule() {
  global $gallery;
   
  $this->setId('owa');
  $this->setName($gallery->i18n('Open Web Analytics for Gallery'));
  $this->setDescription($gallery->i18n('Adds web analytics capabilities to Gallery.'));
  $this->setVersion('1.0.0');
  $this->setGroup('OWA', $gallery->i18n('Open Web Analytics'));
  $this->setRequiredCoreApi(array(7, 18));
  $this->setRequiredModuleApi(array(3, 4));
  $this->setCallbacks('getSiteAdminViews|getSystemLinks');
   
  return;
  }
   
   
  /**
  * Main OWA logging method
  *
  * Using getSystemLinks as a callback because it is called on every request.
  */
  function getSystemLinks() {
   
  global $gallery;
   
   
  if (GalleryUtilities::hasRequestVariable('view')):
  $viewName = GalleryUtilities::getRequestVariables('view');
   
   
  // ensure this is not a Gallery admin screen
  if ($viewName == "core.SiteAdmin" || $viewName == "core.ItemAdmin"):
  return;
  else:
   
  // get instance of owa
  $owa = owa_factory();
   
  // set user priviledges of the request for OWA to log
  owa_set_priviledges();
   
  // Setup OWA request params
  $params = array();
   
  // get information on current view
  list ($ret, $view) = GalleryView::loadView($viewName);
  list ($ret, $page_type) = $view->getViewDescription();
  $params['page_type'] = $page_type;
   
  //Log request is for an item, get item details
  if (GalleryUtilities::hasRequestVariable('itemId')):
  //Lookup item from view
  list ($rest, $item) = $view->getItem();
  $params['page_title'] = $item->title;
  else:
  $params['page_title'] = $page_type;
  endif;
   
  // is RSS page type
   
  if (($viewName == "rss.Render") || ($viewName == "rss.SimpleRender")):
  $params['page_type'] = 'feed';
  $params['is_feedreader'] = true;
  $params['feed_format'] = $_GET['feed'];
  endif;
   
  // log request
   
  //print_r($owa->config);
   
  $owa->log($params);
  endif;
  endif;
   
  return;
   
  }
   
   
  /**
  * Check to see if OWA is installed and activated
  *
  */
  function owa_isActivated() {
   
  list ($ret, $params) = GalleryCoreApi::fetchAllPluginParameters('module', 'owa');
   
  if (!empty($params)):
  return true;
  else:
  return false;
  endif;
  }
   
   
  /**
  * @see GalleryModule::getSiteAdminViews
  */
  function getSiteAdminViews() {
   
  global $gallery;
   
  // this is needed becasue on the plugins page this callback is triggered
  // whether then plugin is active or not for some reason.
  //if ($this->owa_isActivated()):
  // get OWA instance
  // $owa = owa_factory();
  // set user priviledges of the request for OWA
  // owa_set_priviledges();
  //endif;
   
  $data = array(array('name' => $this->translate('Dashboard'), 'view' => 'owa.owaDashboard'),
  array('name' => $this->translate('Admin Settings'), 'view' => 'owa.owaOptions'));
  return array(null, $data);
  }
   
  /**
  * Module specific logic for install
  *
  * @see GalleryModule::install
  */
  function upgrade($currentVersion, $statusMonitor) {
   
  global $gallery;
   
  $owa_config = array();
  $owa_config['do_not_fetch_config_from_db'] = true;
  $owa = owa_factory($owa_config);
  // set user priviledges of the request for OWA to log
  owa_set_priviledges();
   
  //get the base gallery url
  $urlgenerator = $gallery->getUrlGenerator();
  $site_url = $urlgenerator->getCurrentUrlDir();
   
  //Config('galleryBaseUrl');
   
  $params = array('site_id' => md5($site_url),
  'name' => 'Gallery',
  'domain' => $site_url,
  'description' => '',
  'do' => 'base.installEmbedded');
   
  $page = $owa->handleRequest($params);
   
  return null;
  }
   
  /*
   
  // register event handlers
  function performFactoryRegistrations() {
   
  owa_coreAPI::debug("g2 factory regs");
  $ret = GalleryCoreApi::registerFactoryImplementation('GalleryEventListener', 'owaLoginEventHandler ', 'owa', __FILE__, 'owa', array('Gallery::Login'), null);
   
  $ret = GalleryCoreApi::registerFactoryImplementation('GalleryEventListener', 'owaLoginEventHandler ', 'owa', __FILE__, 'owa', array('Gallery::Logout'), null);
   
  //$listener = new owaLoginEventHandler();
  //$ret = GalleryCoreApi::registerEventListener('Gallery::Login', $listener, true);
  //$ret = GalleryCoreApi::registerEventListener('Gallery::Logout', $listener, true);
   
  if ($ret) {
  return $ret;
  }
   
  return null;
   
  }
   
  */
  }
   
  /**
  * OWA Gallery Views
  *
  * Enables OWA to be embedded as a Gallery's site admin screen
  */
  class owaOptionsView extends GalleryView {
   
  /**
  * @see GalleryView::loadTemplate
  */
  function loadTemplate(&$template, &$form) {
   
  $owa = owa_factory();
   
  owa_set_priviledges();
   
  $params = array();
   
  if (empty($owa->params['do'])):
  $params['do'] = 'base.optionsGeneral';
  endif;
   
  $page = $owa->handleRequest($params);
  $template->setVariable('owa', array('content' => $page));
  return array(null, array('body' => 'modules/owa/modules/base/templates/gallery.tpl'));
  }
   
  /**
  * Does this view change any data? Only controllers should change data, but AJAX and some
  * immediate views are handled in views in Gallery.
  * @return bool true if the view changes data
  */
  function isControllerLike() {
  return true;
  }
   
   
  }
   
  /**
  * OWA Gallery Views
  *
  *
  */
  class owaDashboardView extends GalleryView {
   
  /**
  * @see GalleryView::loadTemplate
  */
  function loadTemplate(&$template, &$form) {
   
  $owa = owa_factory();
   
  owa_set_priviledges();
   
  $params = array();
  //$params['view'] = 'base.report';
  $params['action'] = 'base.reportDashboard';
  $params['period'] = 'today';
  $page = $owa->handleRequest($params);
  $template->setVariable('owa', array('content' => $page));
  return array(null, array('body' => 'modules/owa/modules/base/templates/gallery.tpl'));
  }
   
  }
   
  class owaGenericView extends GalleryView {
   
  /**
  * @see GalleryView::loadTemplate
  */
  function loadTemplate(&$template, &$form) {
   
  $owa = owa_factory();
   
  owa_set_priviledges();
   
  $page = $owa->handleRequest();
  $t