Esempio n. 1
0
 /**
  * {@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];
 }
Esempio n. 2
0
 /**
  * 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;
 }
Esempio n. 3
0
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');
}
Esempio n. 4
0
 };
 $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'])) {
Esempio n. 5
0
 /**
  * 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;
 }
Esempio n. 6
0
 /**
  * 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);
 }
Esempio n. 7
0
<?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();
Esempio n. 8
0
<?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'));
}
Esempio n. 9
0
 *
 * @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');