public function __construct(Curry_Backend_Page $backend, PageRevision $pageRevision, $langcode = "") { $this->pageRevision = $pageRevision; $this->langcode = $langcode; parent::__construct('PageModule', array('title' => 'Content', 'maxPerPage' => 0, 'columns' => array('name' => array('sortable' => false, 'action' => 'edit', 'callback' => function ($wrapper) { return $wrapper->getName(); }), 'target' => array('sortable' => false, 'callback' => function ($wrapper) { return $wrapper->getTarget(); }), 'type' => array('sortable' => false, 'escape' => false, 'callback' => function ($wrapper) { return Html::tag('span', array('title' => $wrapper->getClassName()), basename(str_replace('_', '/', $wrapper->getClassName()))); })), 'addDefaultActions' => false, 'actions' => array('edit' => array('single' => true, 'class' => 'inline', 'action' => array($this, 'showEdit'))), 'sortable' => array($this, 'sortItems'))); $user = User::getUser(); $this->pagePermission = $backend->getPagePermission($pageRevision->getPage()); if ($user->hasAccess('Curry_Backend_Template')) { $this->addColumn('template', array('sortable' => false, 'escape' => false, 'callback' => function ($wrapper) { if (!$wrapper->getTemplate()) { return 'None'; } $templateUrl = url('', array('module' => 'Curry_Backend_Template', 'view' => 'Edit', 'file' => $wrapper->getTemplate())); return Html::tag('a', array('href' => $templateUrl, 'title' => $wrapper->getTemplate()), basename($wrapper->getTemplate())); })); } if ($this->pagePermission[PageAccessPeer::PERM_MODULES]) { $this->addColumn('info', array('sortable' => false, 'escape' => false, 'callback' => array($this, 'getInfo'), 'order' => 1)); $this->addAction('properties', array('single' => true, 'class' => 'dialog', 'action' => array($this, 'showProperties'))); $this->addAction('inheritance', array('label' => 'Inheritance details', 'general' => true, 'class' => 'dialog', 'action' => array($this, 'showInheritance'))); } if ($this->pagePermission[PageAccessPeer::PERM_CREATE_MODULE]) { $this->addAction('new', array('general' => true, 'label' => 'New content', 'class' => 'dialog', 'href' => (string) url('', array('module' => 'Curry_Backend_Page', 'page_id' => $this->pageRevision->getPageId(), 'view' => 'NewModule')))); $this->addAction('delete', array('single' => true, 'class' => 'inline modelview-delete', 'action' => array($this, 'showDelete'))); } }
/** * Save new module. * * @todo Set module position. * * @param PageRevision $pageRevision * @param array $values * @return PageModule */ public static function saveNewModule(PageRevision $pageRevision, array $values) { $pageModule = new PageModule(); $pageModule->setUid(Helper::getUniqueId()); $pageModule->setPageId($pageRevision->getPageId()); if (ctype_digit($values['module_class'])) { $module = ModuleQuery::create()->findPk($values['module_class']); $pageModule->setModuleClass($module->getModuleClass()); $pageModule->setName($values['name']); $pageModule->setTarget($values['target']); $pageModule->setContentVisibility($module->getContentVisibility()); $pageModule->setSearchVisibility($module->getSearchVisibility()); $template = $module->getTemplate(); } else { $template = null; if ($values['template'] == 'new' && $values['template_name']) { $className = $values['module_class']; $predefinedTemplates = call_user_func(array($className, 'getPredefinedTemplates')); $root = \Curry\App::getInstance()['template.root']; $template = $values['template_name']; $templateFile = $root . DIRECTORY_SEPARATOR . $template; if (!file_exists($templateFile)) { $dir = dirname($templateFile); if (!is_dir($dir)) { mkdir($dir, 0777, true); } $code = $predefinedTemplates[$values['predefined_template']]; file_put_contents($templateFile, (string) $code); } } else { if ($values['template']) { $template = $values['template']; } } $target = ''; if (!empty($values['target'])) { $target = $values['target']; } else { if (!empty($values['target_name'])) { $target = $values['target_name']; } } if (empty($target)) { throw new Exception('Module target not set'); } $pageModule = new PageModule(); $pageModule->setUid(Helper::getUniqueId()); $pageModule->setPageId($pageRevision->getPageId()); $pageModule->setModuleClass($values['module_class']); $pageModule->setName($values['name']); $pageModule->setTarget($target); $pageModule->setContentVisibility($values['content_visibility']); $pageModule->setSearchVisibility($values['search_visibility']); } $pageModule->save(); $revisionModule = new RevisionModule(); $revisionModule->setPageModule($pageModule); $revisionModule->setPageRevision($pageRevision); $revisionModule->save(); $moduleData = new ModuleData(); $moduleData->setPageRevision($pageRevision); $moduleData->setPageModule($pageModule); $moduleData->setEnabled(true); $moduleData->setTemplate($template); $moduleData->save(); // create default data $wrapper = new PageModuleWrapper($pageModule, $pageRevision, null); $wrapper->createData(); return $pageModule; }