--- a/busui/owa/module.inc +++ b/busui/owa/module.inc @@ -1,1 +1,523 @@ - +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 + * @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(); + $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; + } + +} + + +GalleryCoreApi::requireOnce('modules/core/classes/GalleryController.class'); +class owaControlController extends GalleryController { + + /** + * @see GalleryController::handleRequest + */ + function handleRequest($form) { + + $result = array('delegate' => array('view' => 'owa.owaGeneric'), + 'status' => 1, 'error' => ''); + return array(null, $result); + + } + +} + + +/** + * Handles OWA's special action requests + * + */ +class owaActionView extends GalleryView { + + + /** + * @see GalleryView::isImmediate + */ + function isImmediate() { + return true; + } + + /** + * Method called when view is set to render immeadiately. + * This will bypass Gallery's global templating allowing + * the view to send output directly to the browser. + */ + function renderImmediate($status, $error) { + + global $gallery; + $owa = owa_factory(); + + $gallery->debug('hello from owaAction'); + owa_set_priviledges(); + + $owa->handleSpecialActionRequest(); + + return null; + } + + +} + +/** + * Gallery Template Callback for OWA footer elements + * + * This class is packaged here for convienence only but could also be + * put in Callbacks.inc. + */ +class owaCallbacks { + + function callback($params, &$smarty, $callback, $userId=null) { + /* 1. Identify the exact callback */ + switch ($callback) { + case 'pagetags': + + $viewName = GalleryUtilities::getRequestVariables('view'); + // ensure this is not a Gallery admin screen + + if ($viewName == "core.SiteAdmin" || $viewName == "core.ItemAdmin"): + return; + else: + /* 2. Load the requested data */ + + $owa = owa_factory(); + $tags = $owa->placeHelperPageTags(false); + + /* 3. Assign the requested data to a template variable */ + $block =& $smarty->_tpl_vars['block']; + + /* By convention, put the data into $block[$moduleId] (in this case, moduleId is 'owa') */ + $block['owa']['pagetags'] = array('owaData' => $tags, + 'randomNumber' => rand()); // You can put any data into the template variable... + endif; + + break; + + case 'SomeOtherCallbackName': + ; + break; + default: + ; + } + + return null; + } +} + +class owaLoginEventHandler { + + function owaLoginEventHandler() { + return; + } + + function __construct() { + return; + } + + function handleEvent($event) { + global $gallery; + owa_coreAPI::debug("hello from login event handler ".print_r($event)); + return array(null, null); + } + +} + +?>