/** * This action renders the template used by the splash screen popup */ public function splash() { //the list of extensions the splash provides an explanation for. $defaultExtIds = array('items', 'tests', 'TestTaker', 'groups', 'delivery', 'results'); //check if the user is a noob $this->setData('firstTime', TaoCe::isFirstTimeInTao()); //load the extension data $defaultExtensions = array(); $additionalExtensions = array(); foreach (MenuService::getPerspectivesByGroup(Perspective::GROUP_DEFAULT) as $i => $perspective) { if (in_array((string) $perspective->getId(), $defaultExtIds)) { $defaultExtensions[strval($perspective->getId())] = array('id' => $perspective->getId(), 'name' => $perspective->getName(), 'extension' => $perspective->getExtension(), 'description' => $perspective->getDescription()); } else { $additionalExtensions[$i] = array('id' => $perspective->getId(), 'name' => $perspective->getName(), 'extension' => $perspective->getExtension()); } //Test if access $access = false; foreach ($perspective->getChildren() as $section) { if (tao_models_classes_accessControl_AclProxy::hasAccess($section->getAction(), $section->getController(), $section->getExtensionId())) { $access = true; break; } } if (in_array((string) $perspective->getId(), $defaultExtIds)) { $defaultExtensions[strval($perspective->getId())]['enabled'] = $access; } else { $additionalExtensions[$i]['enabled'] = $access; } } $this->setData('extensions', array_merge($defaultExtensions, $additionalExtensions)); $this->setData('defaultExtensions', $defaultExtensions); $this->setData('additionalExtensions', $additionalExtensions); $this->setView('splash.tpl'); }
/** * Test the taoService methods, the extensions loading * @see tao_models_classes_TaoService::getLoadedExtensions */ public function testTaoServiceExtention() { foreach (MenuService::getAllPerspectives() as $perspective) { $this->assertTrue(strlen($perspective->getExtension()) > 0); $this->assertTrue(strlen($perspective->getId()) > 0); foreach ($perspective->getChildren() as $section) { $this->assertTrue(strlen($section->getName()) > 0); $this->assertTrue(strlen($section->getUrl()) > 0); } } }
public function getEntryPoints() { $entryPoints = array(); foreach (MenuService::getEntryPoints() as $entry) { $entryPoints[$entry->getId()] = $entry; } foreach ($this->getMap() as $entry) { $entryPoints[$entry->getId()] = $entry; } return $entryPoints; }
/** * returns the root classes to index * * @return array */ protected static function getIndexedClasses() { $classes = array(); foreach (MenuService::getAllPerspectives() as $perspective) { foreach ($perspective->getChildren() as $structure) { foreach ($structure->getTrees() as $tree) { if (!is_null($tree->get('rootNode'))) { $classes[$tree->get('rootNode')] = new \core_kernel_classes_Class($tree->get('rootNode')); } } } } return array_values($classes); }
/** * Get the sections of the current extension's structure * * @param string $shownExtension * @param string $shownStructure * @return array the sections */ private function getSections($shownExtension, $shownStructure) { $sections = array(); $user = common_Session_SessionManager::getSession()->getUser(); $structure = MenuService::getPerspective($shownExtension, $shownStructure); if (!is_null($structure)) { foreach ($structure->getChildren() as $section) { $resolver = new ActionResolver($section->getUrl()); if (FuncProxy::accessPossible($user, $resolver->getController(), $resolver->getAction())) { foreach ($section->getActions() as $action) { $resolver = new ActionResolver($action->getUrl()); if (!FuncProxy::accessPossible($user, $resolver->getController(), $resolver->getAction())) { $section->removeAction($action); } } $sections[] = $section; } } } return $sections; }
/** * Get the sections of the current extension's structure * * @param string $shownExtension * @param string $shownStructure * @return array the sections */ private function getSections($shownExtension, $shownStructure) { $sections = array(); $user = common_Session_SessionManager::getSession()->getUser(); $structure = MenuService::getPerspective($shownExtension, $shownStructure); if (!is_null($structure)) { foreach ($structure->getChildren() as $section) { if (tao_models_classes_accessControl_AclProxy::hasAccess($section->getAction(), $section->getController(), $section->getExtensionId())) { foreach ($section->getActions() as $action) { $resolver = ActionResolver::getByControllerName($action->getController(), $action->getExtensionId()); if (!FuncProxy::accessPossible($user, $resolver->getController(), $action->getAction())) { $section->removeAction($action); } } $sections[] = $section; } } } return $sections; }
/** * Add permission information to the tree structure * * @param array $tree * @return array */ protected function addPermissions($tree) { $user = \common_Session_SessionManager::getSession()->getUser(); $section = MenuService::getSection($this->getRequestParameter('extension'), $this->getRequestParameter('perspective'), $this->getRequestParameter('section')); $actions = array(); foreach ($section->getActions() as $index => $action) { try { $actions[$index] = array('resolver' => new ActionResolver($action->getUrl()), 'id' => $action->getId(), 'context' => $action->getContext()); } catch (\ResolverException $re) { common_Logger::d('do not handle permissions for action : ' . $action->getName() . ' ' . $action->getUrl()); } } //then compute ACL for each node of the tree $treeKeys = array_keys($tree); if (is_int($treeKeys[0])) { foreach ($tree as $index => $treeNode) { $tree[$index] = $this->computePermissions($actions, $user, $treeNode); } } else { $tree = $this->computePermissions($actions, $user, $tree); } return $tree; }
/** * Add translations as translation units found in a structure.xml manifest * a given PO file. * * @access public * @author Joel Bout, <*****@*****.**> * @param tao_helpers_translation_POFile $poFile * @throws Exception * @return void */ public function addManifestsTranslations(tao_helpers_translation_POFile $poFile) { $this->outVerbose("Adding all manifests messages to extension '" . $this->options['extension'] . "'"); $rootDir = dirname(__FILE__) . '/../../'; $directories = scandir($rootDir); $exceptions = array('generis', 'tao', '.*'); if (false === $directories) { $this->err("The TAO root directory is not readable. Please check permissions on this directory.", true); } else { foreach ($directories as $dir) { if (is_dir($rootDir . $dir) && !in_array($dir, $exceptions)) { // Maybe it should be read. if (in_array('.*', $exceptions) && $dir[0] == '.') { continue; } else { // Is this a TAO extension ? $file = MenuService::getStructuresFilePath($this->options['extension']); if (!is_null($file)) { $structureExtractor = new tao_helpers_translation_StructureExtractor(array($file)); $structureExtractor->extract(); $poFile->addTranslationUnits($structureExtractor->getTranslationUnits()); $this->outVerbose("Manifest of extension '" . $dir . "' added to extension '" . $this->options['extension'] . "'"); } } } } } }
/** * Enables an extension */ public function enable() { $extId = $this->getRequestParameter('id'); \common_ext_ExtensionsManager::singleton()->setEnabled($extId, true); MenuService::flushCache(); echo json_encode(array('success' => true, 'message' => __('Disabled %s', $this->getRequestParameter('id')))); }
/** * Renders json data from the current ontology root class. * * The possible request parameters are the following: * * * labelFilter: A filter string to be used. The returned hierarchy will be a single root class, with children without class hierarchy. * * uniqueNode: A URI indicating the returned hiearchy will be a single class, with a single children corresponding to the URI. * * browse: * * hideInstances: * * chunk: * * offset: * * limit: * * subclasses: * * classUri: * * @return void */ public function getOntologyData() { if (!tao_helpers_Request::isAjax()) { throw new common_exception_IsAjaxAction(__FUNCTION__); } $options = array('subclasses' => true, 'instances' => true, 'highlightUri' => '', 'labelFilter' => '', 'chunk' => false, 'offset' => 0, 'limit' => 0); if ($this->hasRequestParameter('filter')) { $options['labelFilter'] = $this->getRequestParameter('filter'); } if ($this->hasRequestParameter('loadNode')) { $options['uniqueNode'] = $this->getRequestParameter('loadNode'); } if ($this->hasRequestParameter("selected")) { $options['browse'] = array($this->getRequestParameter("selected")); } if ($this->hasRequestParameter('hideInstances')) { if ((bool) $this->getRequestParameter('hideInstances')) { $options['instances'] = false; } } if ($this->hasRequestParameter('classUri')) { $clazz = $this->getCurrentClass(); $options['chunk'] = !$clazz->equals($this->getRootClass()); } else { $clazz = $this->getRootClass(); } if ($this->hasRequestParameter('offset')) { $options['offset'] = $this->getRequestParameter('offset'); } if ($this->hasRequestParameter('limit')) { $options['limit'] = $this->getRequestParameter('limit'); } if ($this->hasRequestParameter('subclasses')) { $options['subclasses'] = $this->getRequestParameter('subclasses'); } //generate the tree from the given parameters $tree = $this->service->toTree($clazz, $options); //load the user URI from the session $user = common_Session_SessionManager::getSession()->getUser(); //Get the requested section $section = MenuService::getSection($this->getRequestParameter('extension'), $this->getRequestParameter('perspective'), $this->getRequestParameter('section')); //Get the actions from the section and bind them an ActionResolver that helps getting controller/action from action URL. $actions = array(); foreach ($section->getActions() as $index => $action) { try { $actions[$index] = array('resolver' => new ActionResolver($action->getUrl()), 'id' => $action->getId(), 'context' => $action->getContext()); } catch (\ResolverException $re) { common_Logger::d('do not handle permissions for action : ' . $action->getName() . ' ' . $action->getUrl()); } } //then compute ACL for each node of the tree $treeKeys = array_keys($tree); if (is_int($treeKeys[0])) { foreach ($tree as $index => $treeNode) { $tree[$index] = $this->computePermissions($actions, $user, $treeNode); } } else { $tree = $this->computePermissions($actions, $user, $tree); } //expose the tree $this->returnJson($tree); }