示例#1
0
 /**
  *
  * @param      $extensionName
  * @param      $moduleFilename
  * @param      $modulePath
  * @param null $config
  */
 protected function _addModule($extensionName, $moduleFilename, $modulePath, $config = null)
 {
     //one extension can contain many modules - so they share a config file
     //but each module needs different settings
     //so we got this trickery to enables per-module-config
     //everything within the config key "config->module->$modulename" will be made toplevel config
     if (isset($config->modules)) {
         $moduleName = strtolower(substr($moduleFilename, 0, strlen($moduleFilename) - strlen(OntoWiki_Module_Registry::MODULE_FILE_POSTFIX)));
         if (isset($config->modules->{$moduleName})) {
             //dont touch the original config (seen also by components etc)
             $config = unserialize(serialize($config));
             $config->merge($config->modules->{$moduleName});
             //pull this config up!
         }
     }
     //read context(s)
     if (isset($config->context) && is_string($config->context)) {
         $contexts = array($config->context);
     } else {
         if (isset($config->context) && is_object($config->context)) {
             $contexts = $config->context->toArray();
         } else {
             if (isset($config->contexts) && is_object($config->contexts)) {
                 $contexts = $config->contexts->toArray();
             } else {
                 $contexts = array(OntoWiki_Module_Registry::DEFAULT_CONTEXT);
             }
         }
     }
     // register for context(s)
     foreach ($contexts as $context) {
         $this->_moduleRegistry->register($extensionName, $moduleFilename, $context, $config);
     }
 }
示例#2
0
 public static function reset()
 {
     if (null !== self::$_instance) {
         self::$_instance->resetInstance();
     }
     self::$_instance = null;
 }
 public function onAfterInitController($event)
 {
     //this extension should only run if no explicit model is given via request parameter "m"
     $request = new Zend_Controller_Request_Http();
     if ($request->get("m")) {
         return;
     }
     $config = $this->_privateConfig->toArray();
     $efApp = Erfurt_App::getInstance();
     // disable model box if config value is true and modelmanangement isn't allowed
     if ($config['modelsHide'] && !$efApp->getAc()->isActionAllowed($config['modelsExclusiveRight'])) {
         $registry = OntoWiki_Module_Registry::getInstance();
         $registry->disableModule('modellist', 'main.sidewindow');
     }
     //only do this once (so if the model is changed later, this plugin will not prevent it)
     if ($config['setOnce'] && isset($_SESSION['defaultModelHasBeenSet']) && $_SESSION['defaultModelHasBeenSet']) {
         return;
     }
     $_SESSION['defaultModelHasBeenSet'] = true;
     require_once 'OntoWiki/Module/Registry.php';
     $owApp = OntoWiki::getInstance();
     $efStore = $efApp->getStore();
     $availableModels = $efStore->getAvailableModels();
     if (array_key_exists('modelUri', $config) && array_key_exists($config['modelUri'], $availableModels)) {
         $modelUri = $config['modelUri'];
     } elseif (count($availableModels) === 1) {
         $modelUri = current(array_keys($availableModels));
     } else {
         $modelUri = false;
     }
     // set default model if it could be determined
     if ($modelUri && !$efApp->getAc()->isActionAllowed($config['modelsExclusiveRight'])) {
         if (!($owApp->selectedModel && $modelUri == $owApp->selectedModel->getModelUri())) {
             $owApp->selectedModel = $efStore->getModel($modelUri);
             return;
         }
         if ($config['setSelectedResource']) {
             $owApp->selectedResource = $modelUri;
         }
     }
 }
 /**
  * Menu Action to generate JSON serializations of OntoWiki_Menu for context-, module-, component-menus
  */
 public function menuAction()
 {
     $module = $this->_request->getParam('module');
     $resource = $this->_request->getParam('resource');
     $model = $this->_request->getParam('model');
     $translate = $this->_owApp->translate;
     // create empty menu first
     $menuRegistry = OntoWiki_Menu_Registry::getInstance();
     if (!empty($resource)) {
         $menu = $menuRegistry->getMenu('resource', $resource);
     } else {
         if (!empty($model)) {
             $menu = $menuRegistry->getMenu('model', $model);
         }
     }
     if (!empty($module)) {
         $moduleRegistry = OntoWiki_Module_Registry::getInstance();
         $menu = $moduleRegistry->getModule($module)->getContextMenu();
     }
     // Fire a event;
     $event = new Erfurt_Event('onCreateMenu');
     $event->menu = $menu;
     $event->resource = $resource;
     if (!empty($model)) {
         $event->isModel = true;
         $event->model = $model;
     } else {
         $event->model = $this->_owApp->selectedModel;
     }
     $event->trigger();
     echo $menu->toJson();
 }
示例#5
0
 public function setUp()
 {
     $this->_registry = OntoWiki_Module_Registry::getInstance();
 }
示例#6
0
 /**
  * Module view helper.
  *
  * Returns an OntoWiki module either rendered or from cache.
  *
  * Fetches the module from the module registry and renders it into the
  * window template. If a rendering exists in the local module cache it
  * is used instead.
  *
  * @param string $moduleName
  * @param array  $moduleOptions An associative array or and instance of
  *                              Zend_config with module options.
  *                              The following keys can be used:
  *                              enabled  – whether the module is enabled or disabled
  *                              title    – the module window's title
  *                              caching  – whether the module should be cached
  *                              priority – priority of the module in the module contexts
  *                              lower number means higher priority
  *                              classes  – string of css classes for the module window
  *                              id       – a css id for the module window
  *
  * @return string
  */
 public function module($moduleName, $renderOptions = null, $context = OntoWiki_Module_Registry::DEFAULT_CONTEXT)
 {
     $moduleRegistry = OntoWiki_Module_Registry::getInstance();
     // allow old-style array config
     if (is_array($renderOptions)) {
         $renderOptions = new Zend_Config($renderOptions);
     }
     // get default options from the registry
     $defaultModuleOptions = $moduleRegistry->getModuleConfig($moduleName);
     if ($defaultModuleOptions == null) {
         $moduleOptions = $renderOptions;
     } else {
         if ($renderOptions != null) {
             $moduleOptions = $defaultModuleOptions->merge($renderOptions);
         } else {
             $moduleOptions = $defaultModuleOptions;
         }
     }
     $cssClasses = isset($moduleOptions->classes) ? $moduleOptions->classes : '';
     $cssId = isset($moduleOptions->id) ? $moduleOptions->id : '';
     $module = $moduleRegistry->getModule($moduleName, $context);
     // no module found
     if (null == $module) {
         return '';
     }
     $module->setOptions($moduleOptions);
     if ($module->shouldShow()) {
         // init module view
         if (null == $this->_moduleView) {
             $this->_moduleView = clone $this;
         }
         $this->_moduleView->clearVars();
         // query module's title
         $this->_moduleView->title = $module->getTitle();
         // does the module have a message
         // TODO: allow multiple messages
         if (method_exists($module, 'getMessage')) {
             if ($message = $module->getMessage()) {
                 $this->_moduleView->messages = array($message);
             }
         }
         // does the module have a menu?
         if (method_exists($module, 'getMenu')) {
             $menu = $module->getMenu();
             $this->_moduleView->menu = $menu->toArray(false, false);
         }
         // does the module have a context menu?
         if (method_exists($module, 'getContextMenu')) {
             $contextMenu = $module->getContextMenu();
             if ($contextMenu instanceof OntoWiki_Menu) {
                 $contextMenu = $contextMenu->toArray();
             }
             $this->_moduleView->contextmenu = $contextMenu;
         }
         // is caching enabled
         if ($this->_moduleCache && $module->allowCaching()) {
             // get cache id
             $cacheId = md5($module->getCacheId() . $cssClasses . $this->_config->languages->locale);
             // cache hit?
             if (!($moduleContent = $this->_moduleCache->load($cacheId))) {
                 // render (expensive) contents
                 $pre = microtime(true);
                 $moduleContent = $module->getContents();
                 $post = (microtime(true) - $pre) * 1000;
                 // $this->_owApp->logger->info("Rendering module '$moduleName': $post ms (cache miss)");
                 // save to cache
                 $this->_moduleCache->save($moduleContent, $cacheId, array('module', $moduleName), $module->getCacheLivetime());
             }
         } else {
             // caching disabled
             $pre = microtime(true);
             $moduleContent = $module->getContents();
             $post = (microtime(true) - $pre) * 1000;
             // $this->_owApp->logger->info("Rendering module '$moduleName': $post ms (caching disabled)");
         }
         // implement tabs
         if (is_array($moduleContent)) {
             // TODO: tabs
             $navigation = array();
             $content = array();
             $i = 0;
             foreach ($moduleContent as $key => $content) {
                 $navigation[$key] = array('active' => $i++ == 0 ? 'active' : '', 'url' => '#' . $key, 'name' => $this->_($key));
             }
             $this->_moduleView->navigation = $navigation;
             $this->_moduleView->content = $moduleContent;
         } else {
             if (is_string($moduleContent)) {
                 $this->_moduleView->content = $moduleContent;
             }
         }
         // set variables
         $this->_moduleView->cssClasses = $cssClasses;
         $this->_moduleView->cssId = $cssId;
         if (isset($moduleOptions->noChrome) && (bool) $moduleOptions->noChrome) {
             // render without window chrome
             $moduleWindow = $this->_moduleView->render('partials/module.phtml');
         } else {
             // render with window chrome
             $moduleWindow = $this->_moduleView->render('partials/window.phtml');
         }
         return $moduleWindow;
     }
 }