예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /** {@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);
 }
예제 #3
0
파일: Text.php 프로젝트: varvanin/currycms
 /** {@inheritdoc} */
 public function showFront(Curry_Twig_Template $template = null)
 {
     return $template ? parent::showFront($template) : $this->content;
 }
예제 #4
0
파일: Flash.php 프로젝트: varvanin/currycms
 /** {@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);
     }
 }
예제 #5
0
파일: Users.php 프로젝트: varvanin/currycms
 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);
 }
예제 #6
0
 /**
  * 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));
 }
예제 #7
0
 /**
  * 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;
 }