protected function addCatOptions() { if ($this->add_homepage) { $this->addOption('Homepage', 0); } if ($this->rootId !== null) { if (is_array($this->rootId)) { foreach ($this->rootId as $rootId) { if ($rootCat = rex_category::get($rootId, $this->clang)) { $this->addCatOption($rootCat, 0); } } } else { if ($rootCat = rex_category::get($this->rootId, $this->clang)) { $this->addCatOption($rootCat, 0); } } } else { if (!$this->check_perms || rex::getUser()->getComplexPerm('structure')->hasCategoryPerm(0)) { if ($rootCats = rex_category::getRootCategories($this->ignore_offlines, $this->clang)) { foreach ($rootCats as $rootCat) { $this->addCatOption($rootCat); } } } elseif (rex::getUser()->getComplexPerm('structure')->hasMountpoints()) { $mountpoints = rex::getUser()->getComplexPerm('structure')->getMountpoints(); foreach ($mountpoints as $id) { $cat = rex_category::get($id, $this->clang); if ($cat && !rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($cat->getParentId())) { $this->addCatOption($cat, 0); } } } } }
public static function getCategoryValue($id, $field, $clang = null) { if ($clang === null) { $clang = rex_clang::getCurrentId(); } $cat = rex_category::get($id, $clang); if ($cat) { return htmlspecialchars($cat->getValue($field)); } }
public function hasCategoryPerm($category_id) { if ($this->hasAll() || in_array($category_id, $this->perms)) { return true; } if ($c = rex_category::get($category_id)) { foreach ($c->getPathAsArray() as $k) { if (in_array($k, $this->perms)) { return true; } } } return false; }
protected function buildFilterCondition(array $params) { $s = ''; if (!empty($params['id'])) { $OOCat = rex_category::get($params['id'], $params['clang']); // Alle Metafelder des Pfades sind erlaubt foreach ($OOCat->getPathAsArray() as $pathElement) { if ($pathElement != '') { $s .= ' OR `p`.`restrictions` LIKE "%|' . $pathElement . '|%"'; } } // Auch die Kategorie selbst kann Metafelder haben $s .= ' OR `p`.`restrictions` LIKE "%|' . $params['id'] . '|%"'; } $restrictionsCondition = 'AND (`p`.`restrictions` = "" OR `p`.`restrictions` IS NULL ' . $s . ')'; return $restrictionsCondition; }
public function execute() { // check if a new category was folded $category_id = rex_request('toggle_category_id', 'int', -1); $category_id = rex_category::get($category_id) ? $category_id : -1; /** * @var rex_user */ $user = rex::getUser(); if (!$user->getComplexPerm('structure')->hasCategoryPerm($category_id)) { throw new rex_api_exception('user has no permission for this category!'); } $context = rex_context::fromGet(); $categoryTree = new rex_sitemap_category_tree($context); $tree = $categoryTree->getTree($category_id); $result = new rex_api_result(true); return $result; }
protected function _getNavigation($category_id, $depth = 1) { if ($category_id < 1) { $nav_obj = rex_category::getRootCategories(); } else { $nav_obj = rex_category::get($category_id)->getChildren(); } $return = ''; if (count($nav_obj) > 0) { $return .= '<ul class="rex-navi' . ($depth + 1) . '">'; } $lis = []; foreach ($nav_obj as $nav) { $li = []; $a = []; $li['class'] = []; $a['class'] = []; $a['href'] = [$nav->getUrl()]; if ($this->checkFilter($nav, $depth) && $this->checkCallbacks($nav, $depth, $li, $a)) { $li['class'][] = 'rex-article-' . $nav->getId(); // classes abhaengig vom pfad if ($nav->getId() == $this->current_category_id) { $li['class'][] = 'rex-current'; $a['class'][] = 'rex-current'; } elseif (in_array($nav->getId(), $this->path)) { $li['class'][] = 'rex-active'; $a['class'][] = 'rex-active'; } else { $li['class'][] = 'rex-normal'; } if (isset($this->linkclasses[$depth - 1])) { $a['class'][] = $this->linkclasses[$depth - 1]; } if (isset($this->classes[$depth - 1])) { $li['class'][] = $this->classes[$depth - 1]; } $li_attr = []; foreach ($li as $attr => $v) { $li_attr[] = $attr . '="' . implode(' ', $v) . '"'; } $a_attr = []; foreach ($a as $attr => $v) { $a_attr[] = $attr . '="' . implode(' ', $v) . '"'; } $l = '<li ' . implode(' ', $li_attr) . '>'; $l .= '<a ' . implode(' ', $a_attr) . '>' . htmlspecialchars($nav->getName()) . '</a>'; ++$depth; if (($this->open || $nav->getId() == $this->current_category_id || in_array($nav->getId(), $this->path)) && ($this->depth >= $depth || $this->depth < 0)) { $l .= $this->_getNavigation($nav->getId(), $depth); } --$depth; $l .= '</li>'; $lis[] = $l; } } if (count($lis) > 0) { return '<ul class="rex-navi' . $depth . ' rex-navi-depth-' . $depth . ' rex-navi-has-' . count($lis) . '-elements">' . implode('', $lis) . '</ul>'; } return ''; }
/** * Get an array of all parentCategories. * Returns an array of rex_structure_element objects. * * @return rex_category[] */ public function getParentTree() { $return = []; if ($this->path) { if ($this->isStartArticle()) { $explode = explode('|', $this->path . $this->id . '|'); } else { $explode = explode('|', $this->path); } if (is_array($explode)) { foreach ($explode as $var) { if ($var != '') { $return[] = rex_category::get($var, $this->clang_id); } } } } return $return; }
/** * Erstellt eine neue Kategorie. * * @param int $category_id KategorieId in der die neue Kategorie erstellt werden soll * @param array $data Array mit den Daten der Kategorie * * @throws rex_api_exception * * @return string Eine Statusmeldung */ public static function addCategory($category_id, array $data) { $message = ''; if (!is_array($data)) { throw new rex_api_exception('Expecting $data to be an array!'); } self::reqKey($data, 'catpriority'); self::reqKey($data, 'catname'); // parent may be null, when adding in the root cat $parent = rex_category::get($category_id); if ($parent) { $path = $parent->getPath(); $path .= $parent->getId() . '|'; } else { $path = '|'; } if ($data['catpriority'] <= 0) { $data['catpriority'] = 1; } if (!isset($data['name'])) { $data['name'] = $data['catname']; } if (!isset($data['status'])) { $data['status'] = 0; } $contentAvailable = rex_plugin::get('structure', 'content')->isAvailable(); if ($contentAvailable) { $startpageTemplates = []; if ($category_id != '') { // TemplateId vom Startartikel der jeweiligen Sprache vererben $sql = rex_sql::factory(); // $sql->setDebug(); $sql->setQuery('select clang_id,template_id from ' . rex::getTablePrefix() . "article where id={$category_id} and startarticle=1"); for ($i = 0; $i < $sql->getRows(); $i++, $sql->next()) { $startpageTemplates[$sql->getValue('clang_id')] = $sql->getValue('template_id'); } } // Alle Templates der Kategorie $templates = rex_template::getTemplatesForCategory($category_id); } $user = rex::isBackend() ? null : 'frontend'; // Kategorie in allen Sprachen anlegen $AART = rex_sql::factory(); foreach (rex_clang::getAllIds() as $key) { if ($contentAvailable) { $template_id = rex_template::getDefaultId(); if (isset($startpageTemplates[$key]) && $startpageTemplates[$key] != '') { $template_id = $startpageTemplates[$key]; } // Wenn Template nicht vorhanden, dann entweder erlaubtes nehmen // oder leer setzen. if (!isset($templates[$template_id])) { $template_id = 0; if (count($templates) > 0) { $template_id = key($templates); } } } $AART->setTable(rex::getTablePrefix() . 'article'); if (!isset($id)) { $id = $AART->setNewId('id'); } else { $AART->setValue('id', $id); } $AART->setValue('clang_id', $key); $AART->setValue('template_id', $template_id); $AART->setValue('name', $data['name']); $AART->setValue('catname', $data['catname']); $AART->setValue('catpriority', $data['catpriority']); $AART->setValue('parent_id', $category_id); $AART->setValue('priority', 1); $AART->setValue('path', $path); $AART->setValue('startarticle', 1); $AART->setValue('status', $data['status']); $AART->addGlobalUpdateFields($user); $AART->addGlobalCreateFields($user); try { $AART->insert(); // ----- PRIOR if (isset($data['catpriority'])) { self::newCatPrio($category_id, $key, 0, $data['catpriority']); } $message = rex_i18n::msg('category_added_and_startarticle_created'); rex_article_cache::delete($id, $key); // ----- EXTENSION POINT // Objekte clonen, damit diese nicht von der extension veraendert werden koennen $message = rex_extension::registerPoint(new rex_extension_point('CAT_ADDED', $message, ['category' => clone $AART, 'id' => $id, 'parent_id' => $category_id, 'clang' => $key, 'name' => $data['catname'], 'priority' => $data['catpriority'], 'path' => $path, 'status' => $data['status'], 'article' => clone $AART, 'data' => $data])); } catch (rex_sql_exception $e) { throw new rex_api_exception($e); } } return $message; }
/** * Returns the parent category. * * @return rex_category */ public function getCategory() { return rex_category::get($this->getCategoryId(), $this->getClang()); }
/** * Returns an array containing all templates which are available for the given category_id. * if the category_id is non-positive all templates in the system are returned. * if the category_id is invalid an empty array is returned. * * @param int $category_id * @param bool $ignore_inactive * * @return array */ public static function getTemplatesForCategory($category_id, $ignore_inactive = true) { $ignore_inactive = $ignore_inactive ? 1 : 0; $templates = []; $t_sql = rex_sql::factory(); $t_sql->setQuery('select id,name,attributes from ' . rex::getTablePrefix() . 'template where active=' . $ignore_inactive . ' order by name'); if ($category_id < 1) { // Alle globalen Templates foreach ($t_sql as $row) { $attributes = $row->getArrayValue('attributes'); $categories = isset($attributes['categories']) ? $attributes['categories'] : []; if (!is_array($categories) || $categories['all'] == 1) { $templates[$row->getValue('id')] = $row->getValue('name'); } } } else { if ($c = rex_category::get($category_id)) { $path = $c->getPathAsArray(); $path[] = $category_id; foreach ($t_sql as $row) { $attributes = $row->getArrayValue('attributes'); $categories = isset($attributes['categories']) ? $attributes['categories'] : []; // template ist nicht kategoriespezifisch -> includen if (!is_array($categories) || $categories['all'] == 1) { $templates[$row->getValue('id')] = $row->getValue('name'); } else { // template ist auf kategorien beschraenkt.. // nachschauen ob eine davon im pfad der aktuellen kategorie liegt foreach ($path as $p) { if (in_array($p, $categories)) { $templates[$row->getValue('id')] = $row->getValue('name'); break; } } } } } } return $templates; }
public function getList($category_id) { $isRoot = $category_id === 0; $mountpoints = rex::getUser()->getComplexPerm('structure')->getMountpoints(); if ($isRoot && count($mountpoints) == 0) { $articles = rex_article::getRootArticles(); } else { $articles = rex_category::get($category_id)->getArticles(); } return self::renderList($articles, $category_id); }
window.opener.document.getElementById("' . $opener_input_field_name . '").value = name; self.close();'; } // ------------------------ Print JS Functions ?> <script type="text/javascript"> function insertLink(link,name){ <?php echo $func_body . "\n"; ?> } </script> <?php $isRoot = $category_id === 0; $category = rex_category::get($category_id); $navigation = []; if ($category) { foreach ($category->getParentTree() as $parent) { $n = []; $n['title'] = str_replace(' ', ' ', htmlspecialchars($parent->getName())); $n['href'] = $context->getUrl(['category_id' => $parent->getId()]); $navigation[] = $n; } } echo rex_view::title('Linkmap'); $title = '<a href="' . $context->getUrl(['category_id' => 0]) . '"><i class="rex-icon rex-icon-sitestartarticle"></i> ' . rex_i18n::msg('homepage') . '</a>'; $fragment = new rex_fragment(); $fragment->setVar('title', $title, false); $fragment->setVar('items', $navigation, false); echo $fragment->parse('core/navigations/breadcrumb.php');
<input type="hidden" name="edit_id" value="' . $edit_id . '" />'; } // --------------------- PRINT CATS/SUBCATS $echo .= ' <table class="table table-striped table-hover"> <thead> <tr> <th class="rex-table-icon">' . $add_category . '</th> <th class="rex-table-id">' . rex_i18n::msg('header_id') . '</th> <th>' . rex_i18n::msg('header_category') . '</th> <th class="rex-table-priority">' . rex_i18n::msg('header_priority') . '</th> <th class="rex-table-action" colspan="3">' . rex_i18n::msg('header_status') . '</th> </tr> </thead> <tbody>'; if ($category_id != 0 && ($category = rex_category::get($category_id))) { $echo .= ' <tr> <td class="rex-table-icon"><i class="rex-icon rex-icon-open-category"></i></td> <td class="rex-table-id">-</td> <td data-title="' . rex_i18n::msg('header_category') . '"><a href="' . $context->getUrl(['category_id' => $category->getParentId()]) . '">..</a></td> <td class="rex-table-priority" data-title="' . rex_i18n::msg('header_priority') . '"> </td> <td class="rex-table-action" colspan="3"> </td> </tr>'; } // --------------------- KATEGORIE ADD FORM if ($function == 'add_cat' && $KATPERM) { $meta_buttons = rex_extension::registerPoint(new rex_extension_point('CAT_FORM_BUTTONS', '', ['id' => $category_id, 'clang' => $clang])); $add_buttons = ' <input type="hidden" name="rex-api-call" value="category_add" /> <input type="hidden" name="parent-category-id" value="' . $category_id . '" /> <button class="btn btn-save" type="submit" name="category-add-button"' . rex::getAccesskey(rex_i18n::msg('add_category'), 'save') . '>' . rex_i18n::msg('add_category') . '</button>';
} if (rex::isBackend() && rex::getUser()) { rex_view::addJsFile($this->getAssetsUrl('linkmap.js')); rex_extension::register('PAGE_SIDEBAR', function () { $category_id = rex_request('category_id', 'int'); $article_id = rex_request('article_id', 'int'); $clang = rex_request('clang', 'int'); $ctype = rex_request('ctype', 'int'); $category_id = rex_category::get($category_id) ? $category_id : 0; $article_id = rex_article::get($article_id) ? $article_id : 0; $clang = rex_clang::exists($clang) ? $clang : rex_clang::getStartId(); // TODO - CHECK PERM $context = new rex_context(['page' => 'structure', 'category_id' => $category_id, 'article_id' => $article_id, 'clang' => $clang, 'ctype' => $ctype]); // check if a new category was folded $category_id = rex_request('toggle_category_id', 'int', -1); $category_id = rex_category::get($category_id) ? $category_id : -1; $tree = ''; $tree .= '<div id="rex-sitemap">'; // TODO remove container (just their to get some linkmap styles) $tree .= '<div id="rex-linkmap">'; $categoryTree = new rex_sitemap_category_tree($context); $tree .= $categoryTree->getTree($category_id); $tree .= '</div>'; $tree .= '</div>'; return $tree; }); if (rex_be_controller::getCurrentPagePart(1) == 'system') { rex_system_setting::register(new rex_system_setting_article_id('start_article_id')); rex_system_setting::register(new rex_system_setting_article_id('notfound_article_id')); } }
static function getListValue($params) { $return = array(); foreach (explode(',', $params['value']) as $id) { if ($cat = rex_category::get($id, (int) $params['params']['field']['clang'])) { $return[] = $cat->getName(); } } return implode('<br />', $return); }
/** * Erstellt einen neuen Artikel. * * @param array $data Array mit den Daten des Artikels * * @throws rex_api_exception * * @return string Eine Statusmeldung */ public static function addArticle($data) { if (!is_array($data)) { throw new rex_api_exception('Expecting $data to be an array!'); } self::reqKey($data, 'category_id'); self::reqKey($data, 'priority'); self::reqKey($data, 'name'); if ($data['priority'] <= 0) { $data['priority'] = 1; } // parent may be null, when adding in the root cat $parent = rex_category::get($data['category_id']); if ($parent) { $path = $parent->getPath(); $path .= $parent->getId() . '|'; } else { $path = '|'; } if (rex_plugin::get('structure', 'content')->isAvailable()) { $templates = rex_template::getTemplatesForCategory($data['category_id']); // Wenn Template nicht vorhanden, dann entweder erlaubtes nehmen // oder leer setzen. if (!isset($templates[$data['template_id']])) { $data['template_id'] = 0; if (count($templates) > 0) { $data['template_id'] = key($templates); } } } $message = rex_i18n::msg('article_added'); $AART = rex_sql::factory(); unset($id); foreach (rex_clang::getAllIds() as $key) { // ------- Kategorienamen holen $category = rex_category::get($data['category_id'], $key); $categoryName = ''; if ($category) { $categoryName = $category->getName(); } $AART->setTable(rex::getTablePrefix() . 'article'); if (!isset($id) || !$id) { $id = $AART->setNewId('id'); } else { $AART->setValue('id', $id); } $AART->setValue('name', $data['name']); $AART->setValue('catname', $categoryName); $AART->setValue('clang_id', $key); $AART->setValue('parent_id', $data['category_id']); $AART->setValue('priority', $data['priority']); $AART->setValue('path', $path); $AART->setValue('startarticle', 0); $AART->setValue('status', 0); $AART->setValue('template_id', $data['template_id']); $AART->addGlobalCreateFields(); $AART->addGlobalUpdateFields(); try { $AART->insert(); // ----- PRIOR self::newArtPrio($data['category_id'], $key, 0, $data['priority']); } catch (rex_sql_exception $e) { throw new rex_api_exception($e); } rex_article_cache::delete($id, $key); // ----- EXTENSION POINT $message = rex_extension::registerPoint(new rex_extension_point('ART_ADDED', $message, ['id' => $id, 'clang' => $key, 'status' => 0, 'name' => $data['name'], 'parent_id' => $data['category_id'], 'priority' => $data['priority'], 'path' => $path, 'template_id' => $data['template_id'], 'data' => $data])); } return $message; }
<?php /** * Regelt die Rechte an den einzelnen Kategorien und gibt den Pfad aus * Kategorien = Startartikel und Bezüge. * * @package redaxo5 */ $KATout = ''; // Variable definiert und vorbelegt wenn nicht existent $KAToutARR = []; // Variable definiert und vorbelegt wenn nicht existent $navigation = []; $ooCat = rex_category::get($category_id, $clang); if ($ooCat) { foreach ($ooCat->getParentTree() as $parent) { $catid = $parent->getId(); if (rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($catid)) { $n = []; $n['title'] = str_replace(' ', ' ', htmlspecialchars($parent->getName())); $n['href'] = rex_url::backendPage('structure', ['category_id' => $catid, 'clang' => $clang]); $navigation[] = $n; } } } $title = '<a href="' . rex_url::backendPage('structure', ['category_id' => 0, 'clang' => $clang]) . '"><i class="rex-icon rex-icon-sitestartarticle"></i> ' . rex_i18n::msg('homepage') . '</a>'; $fragment = new rex_fragment(); $fragment->setVar('title', $title, false); $fragment->setVar('items', $navigation, false); echo $fragment->parse('core/navigations/breadcrumb.php'); unset($fragment);