/** * {@inheritdoc} */ public function getComplexPerm(rex_user $user, $key) { if (isset($this->complexPerms[$key])) { return $this->complexPerms[$key]; } $perms = []; if (isset($this->complexPermParams[$key])) { $perms = $this->complexPermParams[$key] == rex_complex_perm::ALL ? rex_complex_perm::ALL : explode('|', trim($this->complexPermParams[$key], '|')); } $this->complexPerms[$key] = rex_complex_perm::get($user, $key, $perms); return $this->complexPerms[$key]; }
/** * Löscht eine Kategorie und reorganisiert die Prioritäten verbleibender Geschwister-Kategorien. * * @param int $category_id Id der Kategorie die gelöscht werden soll * * @throws rex_api_exception * * @return string Eine Statusmeldung */ public static function deleteCategory($category_id) { $clang = 1; $thisCat = rex_sql::factory(); $thisCat->setQuery('SELECT * FROM ' . rex::getTablePrefix() . 'article WHERE id=' . $category_id . ' and clang_id=' . $clang); // Prüfen ob die Kategorie existiert if ($thisCat->getRows() == 1) { $KAT = rex_sql::factory(); $KAT->setQuery('select * from ' . rex::getTablePrefix() . "article where parent_id='{$category_id}' and clang_id='{$clang}' and startarticle=1"); // Prüfen ob die Kategorie noch Unterkategorien besitzt if ($KAT->getRows() == 0) { $KAT->setQuery('select * from ' . rex::getTablePrefix() . "article where parent_id='{$category_id}' and clang_id='{$clang}' and startarticle=0"); // Prüfen ob die Kategorie noch Artikel besitzt (ausser dem Startartikel) if ($KAT->getRows() == 0) { $thisCat = rex_sql::factory(); $thisCat->setQuery('SELECT * FROM ' . rex::getTablePrefix() . 'article WHERE id=' . $category_id); $parent_id = $thisCat->getValue('parent_id'); $message = rex_article_service::_deleteArticle($category_id); foreach ($thisCat as $row) { $_clang = $row->getValue('clang_id'); // ----- PRIOR self::newCatPrio($parent_id, $_clang, 0, 1); // ----- EXTENSION POINT $message = rex_extension::registerPoint(new rex_extension_point('CAT_DELETED', $message, ['id' => $category_id, 'parent_id' => $parent_id, 'clang' => $_clang, 'name' => $row->getValue('catname'), 'priority' => $row->getValue('catpriority'), 'path' => $row->getValue('path'), 'status' => $row->getValue('status')])); } rex_complex_perm::removeItem('structure', $category_id); } else { throw new rex_api_exception(rex_i18n::msg('category_could_not_be_deleted') . ' ' . rex_i18n::msg('category_still_contains_articles')); } } else { throw new rex_api_exception(rex_i18n::msg('category_could_not_be_deleted') . ' ' . rex_i18n::msg('category_still_contains_subcategories')); } } else { throw new rex_api_exception(rex_i18n::msg('category_could_not_be_deleted')); } return $message; }
require_once rex_path::core('functions/function_rex_other.php'); // ----------------- VERSION rex::setProperty('version', '5.0.0-alpha7'); $cacheFile = rex_path::cache('config.yml.cache'); $configFile = rex_path::data('config.yml'); if (file_exists($cacheFile) && file_exists($configFile) && filemtime($cacheFile) >= filemtime($configFile)) { $config = rex_file::getCache($cacheFile); } else { $config = array_merge(rex_file::getConfig(rex_path::core('default.config.yml')), rex_file::getConfig($configFile)); rex_file::putCache($cacheFile, $config); } foreach ($config as $key => $value) { if (in_array($key, ['fileperm', 'dirperm'])) { $value = octdec($value); } rex::setProperty($key, $value); } date_default_timezone_set(rex::getProperty('timezone', 'Europe/Berlin')); if (!rex::isSetup()) { rex_error_handler::register(); } // ----------------- REX PERMS rex_complex_perm::register('clang', 'rex_clang_perm'); // ----- SET CLANG if (!rex::isSetup()) { rex_clang::setCurrentId(rex_request('clang', 'int', rex_clang::getStartId())); } if (isset($REX['LOAD_PAGE']) && $REX['LOAD_PAGE']) { unset($REX); require rex_path::core(rex::isBackend() ? 'backend.php' : 'frontend.php'); }
}; $registerImplicitePagePermissions(rex_be_controller::getPages()); foreach ([rex_perm::GENERAL, rex_perm::OPTIONS, rex_perm::EXTRAS] as $permgroup) { $field = $fieldContainer->addGroupedField($group, 'select', $permgroup); $field->setLabel(rex_i18n::msg('user_' . $permgroup)); $select = $field->getSelect(); $select->setMultiple(true); $perms = rex_perm::getAll($permgroup); $select->setSize(min(10, max(3, count($perms)))); $select->addArrayOptions($perms); } rex_extension::register('REX_FORM_INPUT_CLASS', function (rex_extension_point $ep) { return $ep->getParam('inputType') == 'perm_select' ? 'rex_form_perm_select_element' : null; }); $fieldIds = []; foreach (rex_complex_perm::getAll() as $key => $class) { $params = $class::getFieldParams(); if (!empty($params)) { $field = $fieldContainer->addGroupedField($group, 'perm_select', $key); $field->setLabel($params['label']); $field->setCheckboxLabel($params['all_label']); $fieldIds[] = $field->getAttribute('id'); if (rex_request('default_value', 'boolean')) { $field->setValue(rex_complex_perm::ALL); } if (isset($params['select'])) { $field->setSelect($params['select']); } $select = $field->getSelect(); $select->setMultiple(true); if (isset($params['options'])) {
/** * Konvertiert einen Artikel zum Startartikel der eigenen Kategorie. * * @param int $neu_id Artikel ID des Artikels, der Startartikel werden soll * * @return bool TRUE bei Erfolg, sonst FALSE */ public static function article2startarticle($neu_id) { $GAID = []; // neuen startartikel holen und schauen ob da $neu = rex_sql::factory(); $neu->setQuery('select * from ' . rex::getTablePrefix() . 'article where id=? and startarticle=0 and clang_id=?', [$neu_id, rex_clang::getStartId()]); if ($neu->getRows() != 1) { return false; } $neu_cat_id = $neu->getValue('parent_id'); // in oberster kategorie dann return if ($neu_cat_id == 0) { return false; } // alten startartikel $alt = rex_sql::factory(); $alt->setQuery('select * from ' . rex::getTablePrefix() . 'article where id=? and startarticle=1 and clang_id=?', [$neu_cat_id, rex_clang::getStartId()]); if ($alt->getRows() != 1) { return false; } $alt_id = $alt->getValue('id'); $parent_id = $alt->getValue('parent_id'); // cat felder sammeln. + $params = ['path', 'priority', 'catname', 'startarticle', 'catpriority', 'status']; $db_fields = rex_structure_element::getClassVars(); foreach ($db_fields as $field) { if (substr($field, 0, 4) == 'cat_') { $params[] = $field; } } // LANG SCHLEIFE foreach (rex_clang::getAllIds() as $clang) { // alter startartikel $alt->setQuery('select * from ' . rex::getTablePrefix() . "article where id={$neu_cat_id} and startarticle=1 and clang_id={$clang}"); // neuer startartikel $neu->setQuery('select * from ' . rex::getTablePrefix() . "article where id={$neu_id} and startarticle=0 and clang_id={$clang}"); // alter startartikel updaten $alt2 = rex_sql::factory(); $alt2->setTable(rex::getTablePrefix() . 'article'); $alt2->setWhere(['id' => $alt_id, 'clang_id' => $clang]); $alt2->setValue('parent_id', $neu_id); // neuer startartikel updaten $neu2 = rex_sql::factory(); $neu2->setTable(rex::getTablePrefix() . 'article'); $neu2->setWhere(['id' => $neu_id, 'clang_id' => $clang]); $neu2->setValue('parent_id', $alt->getValue('parent_id')); // austauschen der definierten paramater foreach ($params as $param) { $alt2->setValue($param, $neu->getValue($param)); $neu2->setValue($param, $alt->getValue($param)); } $alt2->update(); $neu2->update(); } // alle artikel suchen nach |art_id| und pfade ersetzen // alles artikel mit parent_id alt_id suchen und ersetzen $articles = rex_sql::factory(); $ia = rex_sql::factory(); $articles->setQuery('select * from ' . rex::getTablePrefix() . "article where path like '%|{$alt_id}|%'"); for ($i = 0; $i < $articles->getRows(); ++$i) { $iid = $articles->getValue('id'); $ipath = str_replace("|{$alt_id}|", "|{$neu_id}|", $articles->getValue('path')); $ia->setTable(rex::getTablePrefix() . 'article'); $ia->setWhere(['id' => $iid]); $ia->setValue('path', $ipath); if ($articles->getValue('parent_id') == $alt_id) { $ia->setValue('parent_id', $neu_id); } $ia->update(); $GAID[$iid] = $iid; $articles->next(); } $GAID[$neu_id] = $neu_id; $GAID[$alt_id] = $alt_id; $GAID[$parent_id] = $parent_id; foreach ($GAID as $gid) { rex_article_cache::delete($gid); } rex_complex_perm::replaceItem('structure', $alt_id, $neu_id); foreach (rex_clang::getAllIds() as $clang) { rex_extension::registerPoint(new rex_extension_point('ART_TO_STARTARTICLE', '', ['id' => $neu_id, 'id_old' => $alt_id, 'clang' => $clang])); } return true; }
/** * Returns the complex perm for the user. * * @param string $key Complex perm key * * @return rex_complex_perm Complex perm */ public function getComplexPerm($key) { if ($this->hasRole()) { return $this->role->getComplexPerm($this, $key); } return rex_complex_perm::get($this, $key); }
<?php /** * Page Content Addon. * * @author markus[dot]staab[at]redaxo[dot]de Markus Staab * * @package redaxo5 */ rex_perm::register('moveSlice[]', null, rex_perm::OPTIONS); rex_complex_perm::register('modules', 'rex_module_perm'); if (rex::isBackend()) { rex_extension::register('PAGE_CHECKED', function () { if (rex_be_controller::getCurrentPagePart(1) == 'content') { rex_be_controller::getPageObject('structure')->setIsActive(true); } }); if (rex_be_controller::getCurrentPagePart(1) == 'system') { rex_system_setting::register(new rex_system_setting_default_template_id()); } rex_extension::register('CLANG_DELETED', function (rex_extension_point $ep) { $del = rex_sql::factory(); $del->setQuery('delete from ' . rex::getTablePrefix() . "article_slice where clang_id='" . $ep->getParam('clang')->getId() . "'"); }); } else { rex_extension::register('FE_OUTPUT', function (rex_extension_point $ep) { $content = $ep->getSubject(); $article = new rex_article_content(); $article->setCLang(rex_clang::getCurrentId()); if ($article->setArticleId(rex_article::getCurrentId())) { $content .= $article->getArticleTemplate();
<?php /** * Mediapool Addon. * * @author jan[dot]kristinus[at]redaxo[dot]de Jan Kristinus * * @package redaxo5 * * @var rex_addon $this */ $mypage = 'mediapool'; rex_complex_perm::register('media', 'rex_media_perm'); if (rex::isBackend() && rex::getUser()) { require_once __DIR__ . '/functions/function_rex_mediapool.php'; rex_view::addJsFile($this->getAssetsUrl('mediapool.js')); rex_view::setJsProperty('imageExtensions', $this->getProperty('image_extensions')); }
* * @author markus[dot]staab[at]redaxo[dot]de Markus Staab * * @package redaxo5 * * @var rex_addon $this */ rex_perm::register('moveArticle[]', null, rex_perm::OPTIONS); rex_perm::register('moveCategory[]', null, rex_perm::OPTIONS); rex_perm::register('copyArticle[]', null, rex_perm::OPTIONS); rex_perm::register('copyContent[]', null, rex_perm::OPTIONS); rex_perm::register('publishArticle[]', null, rex_perm::OPTIONS); rex_perm::register('publishCategory[]', null, rex_perm::OPTIONS); rex_perm::register('article2startarticle[]', null, rex_perm::OPTIONS); rex_perm::register('article2category[]', null, rex_perm::OPTIONS); rex_complex_perm::register('structure', 'rex_structure_perm'); require_once __DIR__ . '/functions/function_rex_url.php'; if (rex_request('article_id', 'int') == 0) { rex::setProperty('article_id', rex::getProperty('start_article_id')); } else { $article_id = rex_request('article_id', 'int'); $article_id = rex_article::get($article_id) ? $article_id : rex::getProperty('notfound_article_id'); rex::setProperty('article_id', $article_id); } 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');