public function handlePostProcessing($theme) { // process user defined templates and their stylesheets $template = $theme->getTemplate(); $siteTag = new SystemSiteTag(); $search = array('tree_id' => $this->tree->getCurrentId()); $list = $siteTag->getList($search); foreach ($list['data'] as $item) { $theme->replaceTag($item['parent_tag'], $item['child_tags'], $item['template'], $item['remove_container']); // skip the rest if no stylesheet is set if (!$item['stylesheet']) { continue; } // parse stylesheet to set variables $theme->addStylesheet($theme->fetchFile($item['stylesheet'])); // save stylesheet to a file and then inlcude it in the theme headers /*$filename = strtolower($siteTag->getClassname()."_{$item['tree_id']}_{$item['parent_tag']}.css"); $stylesheet = $theme->createFile($filename, $item['stylesheet']); $theme->addHeader('<link href="'.$stylesheet.'" rel="stylesheet" type="text/css" media="screen" />');*/ } }
/** * Returns protected var $oberserver. * @param string observer key * @return array */ public function getTagList($param) { $id = $param['id']; $tree_id = $param['tree_id']; $url_edit = new Url(); $url_del = new Url(); $url_edit->fromString($param['href_edit_theme_tag']); $url_del->fromString($param['href_del_theme_tag']); try { $siteTag = new SystemSiteTag(); $theme = $this->director->themeManager->getThemeFromId(array('id' => $id)); $usedTags = $siteTag->getTagList(array('tree_id' => $tree_id)); $taglist = $theme->getTagList(); foreach ($taglist as &$item) { $item['userdefined'] = array_key_exists($item['id'], $usedTags) ? join(', ', $usedTags[$item['id']]) : ''; $url_edit->setParameter('parent_tag', $item['id']); $url_del->setParameter('parent_tag', $item['id']); $item['href_edit'] = $url_edit->getUrl(); $item['href_del'] = $item['userdefined'] ? $url_del->getUrl() : ''; } return array_values($taglist); } catch (Exception $e) { return $e->getMessage(); } }
/** * handle pre update checks and additions * eg. check for uniqueness of set default values * * @param array filtered values for insertion * @param array filtered values for insertion * @return void * @see DbConnector::handlePreInsert */ protected function handlePreUpdate($id, $values) { if ($values['tree_root_id'] > 0) { throw new Exception("Root node must be smaller than 1"); } $sqlParser = clone $this->sqlParser; $sqlParser->addCriteria(new SqlCriteria('grp_name', $values['name'])); $sqlParser->addCriteria(new SqlCriteria('grp_language', $values['language'])); $sqlParser->addCriteria(new SqlCriteria('grp_id', $id['id'], '<>')); $query = $sqlParser->getSql(SqlParser::PKEY); $db = $this->getDb(); $res = $db->query($query); if ($db->isError($res)) { throw new Exception($res->getDebugInfo()); } if ($res->numRows() > 0) { throw new Exception('Website already exists.'); } // only 1 default selected theme can exist if (array_key_exists('startpage', $values) && $values['startpage']) { $this->deselect(); } // rearrange tree $current = $this->getDetail($id); if ($current['tree_root_id'] != $values['tree_root_id']) { // check if current id is shared with others. if so, skip theme, tag and plugin move $sqlParser = clone $this->sqlParser; $sqlParser->addCriteria(new SqlCriteria('grp_tree_root_id', $current['tree_root_id'])); $sqlParser->addCriteria(new SqlCriteria('grp_id', $id['id'], '<>')); $query = $sqlParser->getSql(SqlParser::PKEY); $res = $db->query($query); if ($db->isError($res)) { throw new Exception($res->getDebugInfo()); } if ($res->numRows() < 1) { // move theme to new parent $siteTheme = new SystemSiteTheme(); $siteTheme->changeNode($current['tree_root_id'], $values['tree_root_id']); // move tag to new parent $siteTag = new SystemSiteTag(); $siteTag->changeNode($current['tree_root_id'], $values['tree_root_id']); // move plugins to new parent $sitePlugin = $this->director->siteManager->systemSite->getSitePlugin(); $sitePlugin->changeNode($current['tree_root_id'], $values['tree_root_id']); // move acl to new parent $acl = new Acl(); $acl->changeNode($current['tree_root_id'], $values['tree_root_id']); } // move child nodes $site = new SystemSite(); $site->moveToNode($current['tree_root_id'], $id['id'], $values['tree_root_id']); // clear cache $cache = Cache::getInstance(); $cache->clear(); } }