Exemplo n.º 1
0
 public function __construct($name, $mountId, $startId, $notfoundId, array $clangs = null, $startClang = 1, $title = '', $description = '', $robots = '')
 {
     $this->name = $name;
     $this->mountId = $mountId;
     $this->startId = $startId;
     $this->notfoundId = $notfoundId;
     $this->clangs = is_null($clangs) ? rex_clang::getAllIds() : $clangs;
     $this->startClang = $startClang;
     $this->title = $title;
     $this->description = $description;
     $this->robots = $robots;
 }
Exemplo n.º 2
0
 /**
  * Löscht die gecachten Content-Dateien eines Artikels. Wenn keine clang angegeben, wird
  * der Artikel in allen Sprachen gelöscht.
  *
  * @param int $id    ArtikelId des Artikels
  * @param int $clang ClangId des Artikels
  *
  * @return bool True on success, False on errro
  */
 public static function deleteContent($id, $clang = null)
 {
     // sanity check
     if ($id < 0) {
         return false;
     }
     $cachePath = rex_path::addonCache('structure');
     foreach (rex_clang::getAllIds() as $_clang) {
         if ($clang !== null && $clang != $_clang) {
             continue;
         }
         rex_file::delete($cachePath . $id . '.' . $_clang . '.content');
     }
     return true;
 }
Exemplo n.º 3
0
 public function __construct($name, $scheme, $path, $mountId, $startId, $notfoundId, array $clangs = null, $startClang = 1, $title = '', $description = '', $robots = '')
 {
     $this->name = $name;
     $this->path = $path;
     $scheme = $scheme ?: (rex_yrewrite::isHttps() ? 'https' : 'http');
     $this->url = $scheme . '://' . $name . $path;
     $this->mountId = $mountId;
     $this->startId = $startId;
     $this->notfoundId = $notfoundId;
     $this->clangs = is_null($clangs) ? rex_clang::getAllIds() : $clangs;
     $this->startClang = $startClang;
     $this->title = $title;
     $this->description = $description;
     $this->robots = $robots;
 }
Exemplo n.º 4
0
 /**
  * Speichert das Formular.
  *
  * Übernimmt die Werte aus den FormElementen in die Datenbank.
  *
  * Gibt true zurück wenn alles ok war, false bei einem allgemeinen Fehler,
  * einen String mit einer Fehlermeldung oder den von der Datenbank gelieferten ErrorCode.
  *
  * @return bool
  */
 protected function save()
 {
     $sql = rex_sql::factory();
     $sql->setDebug($this->debug);
     $sql->setTable($this->tableName);
     $values = [];
     foreach ($this->getSaveElements() as $fieldsetName => $fieldsetElements) {
         foreach ($fieldsetElements as $element) {
             // read-only-fields nicht speichern
             if (strpos($element->getAttribute('class'), 'form-control-static') !== false) {
                 continue;
             }
             $fieldName = $element->getFieldName();
             $fieldValue = $element->getSaveValue();
             // Callback, um die Values vor dem Speichern noch beeinflussen zu können
             $fieldValue = $this->preSave($fieldsetName, $fieldName, $fieldValue, $sql);
             $values[$fieldName] = $fieldValue;
         }
     }
     try {
         if ($this->isEditMode()) {
             $sql->setValues($values);
             $sql->setWhere($this->whereCondition);
             $sql->update();
         } else {
             if (count($this->languageSupport)) {
                 foreach (rex_clang::getAllIds() as $clang_id) {
                     $sql->setTable($this->tableName);
                     $sql->addGlobalCreateFields();
                     $sql->addGlobalUpdateFields();
                     if (!isset($id)) {
                         $id = $sql->setNewId($this->languageSupport['id']);
                     } else {
                         $sql->setValue($this->languageSupport['id'], $id);
                     }
                     $sql->setValue($this->languageSupport['clang'], $clang_id);
                     $sql->setValues($values);
                     $sql->insert();
                 }
             } else {
                 $sql->setValues($values);
                 $sql->insert();
             }
         }
         $saved = true;
     } catch (rex_sql_exception $e) {
         $saved = false;
     }
     // ----- EXTENSION POINT
     if ($saved) {
         $saved = rex_extension::registerPoint(new rex_extension_point('REX_FORM_SAVED', $saved, ['form' => $this, 'sql' => $sql]));
     } else {
         $saved = $sql->getErrno();
     }
     return $saved;
 }
Exemplo n.º 5
0
 /**
  * Verschieben einer Kategorie in eine andere.
  *
  * @param int $from_cat KategorieId der Kategorie, die verschoben werden soll (Quelle)
  * @param int $to_cat   KategorieId der Kategorie, IN die verschoben werden soll (Ziel)
  *
  * @return bool TRUE bei Erfolg, sonst FALSE
  */
 public static function moveCategory($from_cat, $to_cat)
 {
     $from_cat = (int) $from_cat;
     $to_cat = (int) $to_cat;
     if ($from_cat == $to_cat) {
         // kann nicht in gleiche kategroie kopiert werden
         return false;
     } else {
         // kategorien vorhanden ?
         // ist die zielkategorie im pfad der quellkategeorie ?
         $fcat = rex_sql::factory();
         $fcat->setQuery('select * from ' . rex::getTablePrefix() . 'article where startarticle=1 and id=? and clang_id=?', [$from_cat, rex_clang::getStartId()]);
         $tcat = rex_sql::factory();
         $tcat->setQuery('select * from ' . rex::getTablePrefix() . 'article where startarticle=1 and id=? and clang_id=?', [$to_cat, rex_clang::getStartId()]);
         if ($fcat->getRows() != 1 or $tcat->getRows() != 1 && $to_cat != 0) {
             // eine der kategorien existiert nicht
             return false;
         } else {
             if ($to_cat > 0) {
                 $tcats = explode('|', $tcat->getValue('path'));
                 if (in_array($from_cat, $tcats)) {
                     // zielkategorie ist in quellkategorie -> nicht verschiebbar
                     return false;
                 }
             }
             // ----- folgende cats regenerate
             $RC = [];
             $RC[$fcat->getValue('parent_id')] = 1;
             $RC[$from_cat] = 1;
             $RC[$to_cat] = 1;
             if ($to_cat > 0) {
                 $to_path = $tcat->getValue('path') . $to_cat . '|';
             } else {
                 $to_path = '|';
             }
             $from_path = $fcat->getValue('path') . $from_cat . '|';
             $gcats = rex_sql::factory();
             // $gcats->setDebug();
             $gcats->setQuery('select * from ' . rex::getTablePrefix() . 'article where path like ? and clang_id=?', [$from_path . '%', rex_clang::getStartId()]);
             $up = rex_sql::factory();
             // $up->setDebug();
             for ($i = 0; $i < $gcats->getRows(); ++$i) {
                 // make update
                 $new_path = $to_path . $from_cat . '|' . str_replace($from_path, '', $gcats->getValue('path'));
                 $icid = $gcats->getValue('id');
                 // path aendern und speichern
                 $up->setTable(rex::getTablePrefix() . 'article');
                 $up->setWhere("id={$icid}");
                 $up->setValue('path', $new_path);
                 $up->update();
                 // cat in gen eintragen
                 $RC[$icid] = 1;
                 $gcats->next();
             }
             // ----- clang holen, max catprio holen und entsprechen updaten
             $gmax = rex_sql::factory();
             $up = rex_sql::factory();
             // $up->setDebug();
             foreach (rex_clang::getAllIds() as $clang) {
                 $gmax->setQuery('select max(catpriority) from ' . rex::getTablePrefix() . "article where parent_id={$to_cat} and clang_id=" . $clang);
                 $catpriority = (int) $gmax->getValue('max(catpriority)');
                 $up->setTable(rex::getTablePrefix() . 'article');
                 $up->setWhere("id={$from_cat} and clang_id={$clang} ");
                 $up->setValue('path', $to_path);
                 $up->setValue('parent_id', $to_cat);
                 $up->setValue('catpriority', $catpriority + 1);
                 $up->update();
             }
             // ----- generiere artikel neu - ohne neue inhaltsgenerierung
             foreach ($RC as $id => $key) {
                 rex_article_cache::delete($id);
             }
             foreach (rex_clang::getAllIds() as $clang) {
                 self::newCatPrio($fcat->getValue('parent_id'), $clang, 0, 1);
             }
         }
     }
     return true;
 }
Exemplo n.º 6
0
 /**
  * Generiert den Artikel-Cache des Artikelinhalts.
  *
  * @param int $article_id Id des zu generierenden Artikels
  * @param int $clang      ClangId des Artikels
  *
  * @return bool TRUE bei Erfolg, FALSE wenn eine ungütlige article_id übergeben wird, sonst eine Fehlermeldung
  */
 public static function generateArticleContent($article_id, $clang = null)
 {
     foreach (rex_clang::getAllIds() as $_clang) {
         if ($clang !== null && $clang != $_clang) {
             continue;
         }
         $CONT = new rex_article_content_base();
         $CONT->setCLang($_clang);
         $CONT->setEval(false);
         // Content nicht ausführen, damit in Cachedatei gespeichert werden kann
         if (!$CONT->setArticleId($article_id)) {
             return false;
         }
         // --------------------------------------------------- Artikelcontent speichern
         $article_content_file = rex_path::addonCache('structure', "{$article_id}.{$_clang}.content");
         $article_content = $CONT->getArticle();
         // ----- EXTENSION POINT
         $article_content = rex_extension::registerPoint(new rex_extension_point('GENERATE_FILTER', $article_content, ['id' => $article_id, 'clang' => $_clang, 'article' => $CONT]));
         if (rex_file::put($article_content_file, $article_content) === false) {
             return rex_i18n::msg('article_could_not_be_generated') . ' ' . rex_i18n::msg('check_rights_in_directory') . rex_path::addonCache('structure');
         }
     }
     return true;
 }
Exemplo n.º 7
0
 /**
  * Verschieben eines Artikels von einer Kategorie in eine Andere.
  *
  * @param int $id          ArtikelId des zu verschiebenden Artikels
  * @param int $from_cat_id KategorieId des Artikels, der Verschoben wird
  * @param int $to_cat_id   KategorieId in die der Artikel verschoben werden soll
  *
  * @return bool TRUE bei Erfolg, sonst FALSE
  */
 public static function moveArticle($id, $from_cat_id, $to_cat_id)
 {
     $id = (int) $id;
     $to_cat_id = (int) $to_cat_id;
     $from_cat_id = (int) $from_cat_id;
     if ($from_cat_id == $to_cat_id) {
         return false;
     }
     // Artikel in jeder Sprache verschieben
     foreach (rex_clang::getAllIds() as $clang) {
         // validierung der id & from_cat_id
         $from_sql = rex_sql::factory();
         $from_sql->setQuery('select * from ' . rex::getTablePrefix() . 'article where clang_id="' . $clang . '" and startarticle<>1 and id="' . $id . '" and parent_id="' . $from_cat_id . '"');
         if ($from_sql->getRows() == 1) {
             // validierung der to_cat_id
             $to_sql = rex_sql::factory();
             $to_sql->setQuery('select * from ' . rex::getTablePrefix() . 'article where clang_id="' . $clang . '" and startarticle=1 and id="' . $to_cat_id . '"');
             if ($to_sql->getRows() == 1 || $to_cat_id == 0) {
                 if ($to_sql->getRows() == 1) {
                     $parent_id = $to_sql->getValue('id');
                     $path = $to_sql->getValue('path') . $to_sql->getValue('id') . '|';
                     $catname = $to_sql->getValue('catname');
                 } else {
                     // In RootEbene
                     $parent_id = 0;
                     $path = '|';
                     $catname = $from_sql->getValue('name');
                 }
                 $art_sql = rex_sql::factory();
                 //$art_sql->setDebug();
                 $art_sql->setTable(rex::getTablePrefix() . 'article');
                 $art_sql->setValue('parent_id', $parent_id);
                 $art_sql->setValue('path', $path);
                 $art_sql->setValue('catname', $catname);
                 // Artikel als letzten Artikel in die neue Kat einfügen
                 $art_sql->setValue('priority', '99999');
                 // Kopierter Artikel offline setzen
                 $art_sql->setValue('status', $from_sql->getValue('status'));
                 $art_sql->addGlobalUpdateFields();
                 $art_sql->setWhere('clang_id="' . $clang . '" and startarticle<>1 and id="' . $id . '" and parent_id="' . $from_cat_id . '"');
                 $art_sql->update();
                 // Prios neu berechnen
                 self::newArtPrio($to_cat_id, $clang, 1, 0);
                 self::newArtPrio($from_cat_id, $clang, 1, 0);
             } else {
                 return false;
             }
         } else {
             return false;
         }
     }
     // Caches des Artikels löschen, in allen Sprachen
     rex_article_cache::delete($id);
     // Caches der Kategorien löschen, da sich derin befindliche Artikel geändert haben
     rex_article_cache::delete($from_cat_id);
     rex_article_cache::delete($to_cat_id);
     return true;
 }
Exemplo n.º 8
0
 public function getClangs()
 {
     return $this->hasAll() ? rex_clang::getAllIds() : $this->perms;
 }
Exemplo n.º 9
0
$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();
// --------------------------------------------- Mountpoints
$mountpoints = rex::getUser()->getComplexPerm('structure')->getMountpoints();
if (count($mountpoints) == 1 && $category_id == 0) {
    // Nur ein Mointpoint -> Sprung in die Kategory
    $category_id = current($mountpoints);
}
// --------------------------------------------- Rechte prüfen
$KATPERM = rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($category_id);
$stop = false;
if (rex_clang::count() > 1) {
    if (!rex::getUser()->getComplexPerm('clang')->hasPerm($clang)) {
        $stop = true;
        foreach (rex_clang::getAllIds() as $key) {
            if (rex::getUser()->getComplexPerm('clang')->hasPerm($key)) {
                $clang = $key;
                $stop = false;
                break;
            }
        }
        if ($stop) {
            echo rex_view::error('You have no permission to this area');
            exit;
        }
    }
} else {
    $clang = rex_clang::getStartId();
}
$context = new rex_context(['page' => 'structure', 'category_id' => $category_id, 'article_id' => $article_id, 'clang' => $clang]);
Exemplo n.º 10
0
 public static function generatePathFile($params)
 {
     $setDomain = function (rex_yrewrite_domain &$domain, &$path, rex_structure_element $element) {
         $id = $element->getId();
         $clang = $element->getClang();
         if (isset(rex_yrewrite::$domainsByMountId[$id][$clang])) {
             $domain = rex_yrewrite::$domainsByMountId[$id][$clang];
             $path = rex_yrewrite::$scheme->getClang($clang, $domain);
         }
     };
     $setPath = function (rex_yrewrite_domain $domain, $path, rex_article $art) use($setDomain) {
         $setDomain($domain, $path, $art);
         if (($redirection = rex_yrewrite::$scheme->getRedirection($art, $domain)) instanceof rex_structure_element) {
             rex_yrewrite::$paths['redirections'][$art->getId()][$art->getClang()] = ['id' => $redirection->getId(), 'clang' => $redirection->getClang()];
             unset(rex_yrewrite::$paths['paths'][$domain->getName()][$art->getId()][$art->getClang()]);
             return;
         }
         unset(rex_yrewrite::$paths['redirections'][$art->getId()][$art->getClang()]);
         $url = rex_yrewrite::$scheme->getCustomUrl($art, $domain);
         if (!is_string($url)) {
             $url = rex_yrewrite::$scheme->appendArticle($path, $art, $domain);
         }
         rex_yrewrite::$paths['paths'][$domain->getName()][$art->getId()][$art->getClang()] = ltrim($url, '/');
     };
     $generatePaths = function (rex_yrewrite_domain $domain, $path, rex_category $cat) use(&$generatePaths, $setDomain, $setPath) {
         $path = rex_yrewrite::$scheme->appendCategory($path, $cat, $domain);
         $setDomain($domain, $path, $cat);
         foreach ($cat->getChildren() as $child) {
             $generatePaths($domain, $path, $child);
         }
         foreach ($cat->getArticles() as $art) {
             $setPath($domain, $path, $art);
         }
     };
     $ep = isset($params['extension_point']) ? $params['extension_point'] : '';
     switch ($ep) {
         // clang and id specific update
         case 'CAT_DELETED':
         case 'ART_DELETED':
             foreach (self::$paths['paths'] as $domain => $c) {
                 unset(self::$paths['paths'][$domain][$params['id']]);
             }
             unset(self::$paths['redirections'][$params['id']]);
             if (0 == $params['re_id']) {
                 break;
             }
             $params['id'] = $params['re_id'];
             // no break
         // no break
         case 'CAT_ADDED':
         case 'CAT_UPDATED':
         case 'CAT_STATUS':
         case 'ART_ADDED':
         case 'ART_UPDATED':
         case 'ART_STATUS':
             rex_article_cache::delete($params['id']);
             $domain = self::$domainsByMountId[0][$params['clang']];
             $path = self::$scheme->getClang($params['clang'], $domain);
             $art = rex_article::get($params['id'], $params['clang']);
             $tree = $art->getParentTree();
             if ($art->isStartArticle()) {
                 $cat = array_pop($tree);
             }
             foreach ($tree as $parent) {
                 $path = self::$scheme->appendCategory($path, $parent, $domain);
                 $setDomain($domain, $path, $parent);
                 $setPath($domain, $path, rex_article::get($parent->getId(), $parent->getClang()));
             }
             if ($art->isStartArticle()) {
                 $generatePaths($domain, $path, $cat);
             } else {
                 $setPath($domain, $path, $art);
             }
             break;
             // update all
         // update all
         case 'CLANG_DELETED':
         case 'CLANG_ADDED':
         case 'CLANG_UPDATED':
             //case 'ALL_GENERATED':
         //case 'ALL_GENERATED':
         default:
             self::$paths = ['paths' => [], 'redirections' => []];
             foreach (rex_clang::getAllIds() as $clangId) {
                 $domain = self::$domainsByMountId[0][$clangId];
                 $path = self::$scheme->getClang($clangId, $domain);
                 foreach (rex_category::getRootCategories(false, $clangId) as $cat) {
                     $generatePaths($domain, $path, $cat);
                 }
                 foreach (rex_article::getRootArticles(false, $clangId) as $art) {
                     $setPath($domain, $path, $art);
                 }
             }
             break;
     }
     rex_file::putCache(self::$pathfile, self::$paths);
 }
Exemplo n.º 11
0
                } else {
                    $addWildcard->setValue('id', $id);
                }
                $addWildcard->setValue('clang_id', $clang_id);
                $addWildcard->setValue('wildcard', $wildcard_name);
                $addWildcard->setValue('replace', $wildcard_replaces[$clang_id]);
                $addWildcard->addGlobalUpdateFields();
                $addWildcard->addGlobalCreateFields();
                $addWildcard->insert();
            }
        }
        $func = '';
    } else {
        $success = $this->i18n('wildcard_edited');
        $editWildcard = rex_sql::factory();
        foreach (rex_clang::getAllIds() as $clang_id) {
            if (isset($wildcard_replaces[$clang_id])) {
                $editWildcard->setTable(rex::getTable('sprog_wildcard'));
                $editWildcard->setWhere(['id' => $wildcard_id, 'clang_id' => $clang_id]);
                $editWildcard->setValue('wildcard', $wildcard_name);
                $editWildcard->setValue('replace', $wildcard_replaces[$clang_id]);
                $editWildcard->addGlobalUpdateFields();
                $editWildcard->update();
            }
        }
        $func = '';
        unset($wildcard_id);
    }
}
if ($success != '') {
    $message .= rex_view::success($success);