/** * Get a list of all available modules. * * @return array */ public static function getModuleList() { if (self::$modules) { return self::$modules; } // find all backend directories $dirs = glob(Curry_Util::path(Curry_Core::$config->curry->projectPath, 'include', '*', 'Module'), GLOB_ONLYDIR); if (!$dirs) { $dirs = array(); } $dirs[] = Curry_Util::path(Curry_Core::$config->curry->basePath, 'include', 'Curry', 'Module'); // find all php files in the directories self::$modules = array(); foreach ($dirs as $dir) { $it = new Curry_FileFilterIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir)), '/\\.php$/'); foreach ($it as $file) { $path = realpath($file->getPathname()); $pos = strrpos($path, DIRECTORY_SEPARATOR . "include" . DIRECTORY_SEPARATOR); if ($pos !== FALSE) { $className = str_replace(DIRECTORY_SEPARATOR, '_', substr($path, $pos + 9, -4)); self::$modules[$className] = $className; } } } ksort(self::$modules); return self::$modules; }
/** {@inheritdoc} */ public function showMain() { $modules = array(); foreach (Curry_Module::getModuleList() as $className) { $parts = explode("_", str_replace("_Module_", "_", $className)); $package = array_shift($parts); $modules[$package][$className] = join(" / ", $parts); } $templates = array('' => "[ None ]") + Curry_Backend_Template::getTemplateSelect(); $form = new Curry_Form_ModelForm('Module', array('columnElements' => array('module_class' => array('select', array('multiOptions' => $modules)), 'content_visibility' => array('select', array('multiOptions' => PageModulePeer::$contentVisiblityOptions)), 'template' => array('select', array('multiOptions' => $templates))))); $list = new Curry_ModelView_List('Module', array('modelForm' => $form)); $list->show($this); }
/** {@inheritdoc} */ public function showFront(Curry_Twig_Template $template = null) { return $template ? parent::showFront($template) : $this->content; }
/** {@inheritdoc} */ public function saveBack(Zend_Form_SubForm $form) { $values = $form->getValues(true); $this->flash = $values['embed']['flash']; $this->method = $values['embed']['method']; $this->width = $values['embed']['width']; $this->height = $values['embed']['height']; $this->target = $values['embed']['target']; $this->version = $values['embed']['version']; $this->expressInstall = $values['embed']['express_install']; $this->addToFlashvars = (array) $values['embed']['add_to_flashvars']; $this->alternativeContent = $values['embed']['alternative_content']; $this->attributes = self::filterEmpty($values['attributes']); $this->params = self::filterEmpty($values['params']); $this->flashvars = (array) $values['flashvars']; $this->className = $values['emodule']['class_name']; $this->template = $values['emodule']['template']; $this->moduleFlashvar = $values['emodule']['flashvar']; // Create module instance if ($this->className) { if (!$this->module instanceof $this->className) { $this->module = new $this->className(); } } else { $this->module = null; } $subform = $form->getSubForm('submodule'); if ($this->module && $subform) { $this->module->setModuleDataId(false); $this->module->saveBack($subform); } }
public function showRoles() { if (!$this->hasPermission(self::PERMISSION_ROLES)) { throw new Exception('You dont have permission to access this view.'); } $this->addMenu(); $user = User::getUser(); $backendModules = Curry_Backend::getBackendList(); $disable = array(); $backend = array("*" => "All"); if (!$user->hasAccess('*')) { $disable[] = '*'; } foreach ($backendModules as $backendClass => $backendName) { $backend[$backendClass] = $backendName; $permissions = method_exists($backendClass, 'getPermissions') ? call_user_func(array($backendClass, 'getPermissions')) : array(); foreach ($permissions as $permission) { $backend[$backendClass . "/" . $permission] = Curry_Core::SELECT_TREE_PREFIX . $permission; if (!$user->hasAccess($backendClass . "/" . $permission)) { $disable[] = $backendClass . "/" . $permission; } } if (!$user->hasAccess($backendClass)) { $disable[] = $backendClass; } } $content = array(); $contentAccess = array("*" => "All") + Curry_Module::getModuleList(); $allContentAccess = $user->hasAccess('Curry_Backend_Content/*'); foreach ($contentAccess as $k => $v) { $content['Curry_Backend_Content/' . $k] = $v; if (!$allContentAccess && !$user->hasAccess('Curry_Backend_Content/' . $k)) { $disable[] = 'Curry_Backend_Content/' . $k; } } $form = new Curry_ModelView_Form('UserRole', array('elements' => array('backend' => array('multiselect', array('label' => 'Backend access', 'multiOptions' => $backend, 'size' => 10, 'order' => 1, 'disable' => $disable, 'validators' => array(array('InArray', true, array(array_diff(array_keys($backend), $disable)))))), 'content' => array('multiselect', array('label' => 'Content access', 'multiOptions' => $content, 'size' => 10, 'order' => 2, 'disable' => $disable, 'validators' => array(array('InArray', true, array(array_diff(array_keys($content), $disable))))))), 'onFillForm' => function (UserRole $role, $form) { $access = UserRoleAccessQuery::create()->filterByUserRole($role)->select('Module')->find()->getArrayCopy(); $form->backend->setValue($access); $form->content->setValue($access); }, 'onFillModel' => function (UserRole $role, $form, $values) { $access = array_merge((array) $values['backend'], (array) $values['content']); $collection = new PropelObjectCollection(); $collection->setModel('UserRoleAccess'); foreach ($access as $a) { $ura = new UserRoleAccess(); $ura->setModule($a); $collection->append($ura); } $role->setUserRoleAccesss($collection); })); $q = UserRoleQuery::create(); $list = new Curry_ModelView_List($q, array('modelForm' => $form)); $list->addAction('file_permissions', array('action' => $this->getFileAccessList(), 'class' => 'inline', 'single' => true)); $list->show($this); }
/** * Get unique name for storing module cache. * * @param Curry_PageModuleWrapper $pageModuleWrapper * @param Curry_Module $module * @return string */ private function getModuleCacheName(Curry_PageModuleWrapper $pageModuleWrapper, Curry_Module $module) { $params = array('_moduleDataId' => $pageModuleWrapper->getModuleDataId(), '_template' => $pageModuleWrapper->getTemplate()); $cp = $module->getCacheProperties(); if ($cp !== null) { $params = array_merge($params, $cp->getParams()); } return __CLASS__ . '_Module_' . md5(serialize($params)); }
/** * Create new module form. * * @param PageRevision $pageRevision * @param string $moduleClass * @return Curry_Form */ public static function getNewModuleForm($pageRevision, $moduleClass, $target) { $valid = array(); $modules = array(); foreach (ModuleQuery::create()->orderByTitle()->find() as $module) { $inTargets = in_array($target, $module->getTargets()); if (!$target || ($module->getTargetsExclude() ? !$inTargets : $inTargets)) { $modules[$module->getModuleId()] = $module->getTitle(); $valid[] = $module->getModuleId(); } } $user = User::getUser(); $modulePermission = $user->hasPagePermission($pageRevision->getPage(), PageAccessPeer::PERM_MODULES); if ($modulePermission) { $modules = array('Predefined' => $modules); foreach (Curry_Module::getModuleList() as $className) { $parts = explode("_", str_replace("_Module_", "_", $className)); $package = array_shift($parts); $modules[$package][$className] = join(" / ", $parts); $valid[] = $className; } } if (!$moduleClass || !in_array($moduleClass, $valid)) { $form = new Curry_Form(array('action' => url('', $_GET), 'method' => 'post', 'class' => isAjax() ? 'dialog-form' : '', 'elements' => array('module_class' => array('select', array('label' => 'Type', 'multiOptions' => $modules, 'required' => true)), 'next' => array('submit', array('label' => 'Next'))))); return $form; } else { // Fetch template targets $targets = array(); try { $template = $pageRevision->getInheritedProperty('Template'); if ($template) { $template = Curry_Twig_Template::loadTemplate($template); } while ($template) { $targets = array_merge($targets, $template->getPlaceholders()); $template = $template->getParent(array()); } } catch (Exception $e) { trace_warning('Error in template: ' . $e->getMessage()); } if (count($targets)) { $targets = array_combine(array_values($targets), array_values($targets)); } // Check for predefined module creation if (ctype_digit($moduleClass)) { $module = ModuleQuery::create()->findPk($moduleClass); $form = new Curry_Form(array('action' => url('', $_GET), 'method' => 'post', 'class' => isAjax() ? 'dialog-form' : '', 'elements' => array('pid_newmodule' => array('hidden', array('value' => 1)), 'module_class' => array('hidden', array('value' => $moduleClass)), 'name' => array('text', array('label' => 'Name', 'required' => true, 'description' => 'A descriptive name of the module.', 'value' => $module->getName()))))); if (!$target) { // Show only acceptable targets... $form->addElement('select', 'target', array('label' => 'Target', 'description' => 'Specifies what placeholder/variable in the page-template to attach this module to.', 'multiOptions' => $targets)); } else { $form->addElement('hidden', 'target', array('value' => $target)); $form->setCsrfCheck(false); $_POST = $form->getValues(); } $form->addElement('submit', 'add', array('label' => 'Add module')); return $form; } if (!class_exists($moduleClass)) { throw new Exception('Class \'' . $moduleClass . '\' could not be loaded, please check the path and classname.'); } $defaultName = substr($moduleClass, strrpos($moduleClass, '_') + 1); $targets[''] = '[ Custom ]'; asort($targets); $templates = array('' => "[ None ]", 'new' => "[ Create new ]") + Curry_Backend_Template::getTemplateSelect(); $defaultTemplateName = 'Modules/' . $defaultName . '.html'; $defaultTemplate = ''; if ($moduleClass !== 'Curry_Module_Article' && call_user_func(array($moduleClass, 'hasTemplate'))) { $defaultTemplate = array_key_exists($defaultTemplateName, $templates) ? $defaultTemplateName : 'new'; } $predefinedTemplates = call_user_func(array($moduleClass, 'getPredefinedTemplates')); $predefinedTemplates = count($predefinedTemplates) ? array_combine(array_keys($predefinedTemplates), array_keys($predefinedTemplates)) : array(); $predefinedTemplates = array('' => '[ Empty ]') + $predefinedTemplates; $form = new Curry_Form(array('action' => url('', $_GET), 'method' => 'post', 'class' => isAjax() ? 'dialog-form' : '', 'elements' => array('pid_newmodule' => array('hidden'), 'module_class' => array('hidden', array('value' => $moduleClass)), 'module_class_display' => array('rawHtml', array('label' => 'Type', 'value' => '<input type="text" value="' . $moduleClass . '" disabled="disabled" />')), 'name' => array('text', array('label' => 'Name', 'required' => true, 'description' => 'A descriptive name of the module.', 'value' => $defaultName)), 'target' => array('select', array('label' => 'Target', 'description' => 'Specifies what placeholder/variable in the page-template to attach this module to.', 'value' => isset($_GET['target']) ? $_GET['target'] : null, 'multiOptions' => $targets, 'class' => 'trigger-change', 'onchange' => "\$('#target_name-label, #target_name-element').toggle(\$(this).val() == '');")), 'target_name' => array('text', array('label' => 'Target Name')), 'template' => array('select', array('class' => 'trigger-change', 'label' => 'Template', 'multiOptions' => $templates, 'value' => $defaultTemplate, 'onchange' => "\$('#template_name-label, #template_name-element, #predefined_template-label, #predefined_template-element').toggle(\$(this).val() == 'new');")), 'template_name' => array('text', array('label' => 'Name', 'value' => $defaultTemplateName)), 'predefined_template' => array('select', array('label' => 'Predefined template', 'multiOptions' => $predefinedTemplates)), 'content_visibility' => array('select', array('label' => 'Content Visibility', 'description' => 'Set the visibility of this module in the Content backend module.', 'multiOptions' => PageModulePeer::$contentVisiblityOptions, 'value' => PageModulePeer::CONTENT_VISIBILITY_ALWAYS, 'required' => true)), 'search_visibility' => array('checkbox', array('label' => 'Search Visibility', 'description' => 'If this module should be rendered when indexing pages.', 'value' => true, 'required' => true))))); $form->addDisplayGroup(array('position', 'content_visibility', 'search_visibility'), 'advanced', array('class' => 'advanced', 'legend' => 'Advanced')); $form->addElement('submit', 'add', array('label' => 'Add module')); } return $form; }