Пример #1
0
 public static function restoreSnapshot($history_date, $article_id, $clang_id, $revision = 0)
 {
     self::checkTables();
     $sql = rex_sql::factory();
     $slices = $sql->getArray('select id from ' . self::getTable() . ' where article_id=? and clang_id=? and revision=? and history_date=?', [$article_id, $clang_id, $revision, $history_date]);
     if (count($slices) == 0) {
         return false;
     }
     self::makeSnapshot($article_id, $clang_id, 'version set ' . $history_date, $revision);
     $sql = rex_sql::factory();
     $sql->setQuery('delete from ' . rex::getTable('article_slice') . ' where article_id=? and clang_id=? and revision=?', [$article_id, $clang_id, $revision]);
     $slices = rex_sql::factory();
     $slices = $slices->getArray('select * from ' . self::getTable() . ' where article_id=? and clang_id=? and revision=? and history_date=?', [$article_id, $clang_id, $revision, $history_date]);
     foreach ($slices as $slice) {
         $sql = rex_sql::factory();
         $sql->setTable(rex::getTable('article_slice'));
         $ignore_fields = ['id', 'slice_id', 'history_date', 'history_type'];
         foreach ($slice as $k => $v) {
             if (in_array($k, $ignore_fields)) {
             } else {
                 $sql->setValue($k, $v);
             }
         }
         $sql->insert();
     }
     rex_article_cache::delete($article_id, $clang_id);
     return true;
 }
Пример #2
0
 public static function copyContent($article_id, $clang, $from_revision_id, $to_revision_id)
 {
     if ($from_revision_id == $to_revision_id) {
         return false;
     }
     // clear the revision to which we will later copy all slices
     $dc = rex_sql::factory();
     // $dc->setDebug();
     $dc->setQuery('delete from ' . rex::getTablePrefix() . 'article_slice where article_id=' . $article_id . ' and clang_id=' . $clang . ' and revision=' . $to_revision_id);
     $gc = rex_sql::factory();
     $gc->setQuery('select * from ' . rex::getTablePrefix() . "article_slice where article_id='{$article_id}' and clang_id='{$clang}' and revision='{$from_revision_id}' ORDER by ctype_id, priority");
     $cols = rex_sql::factory();
     $cols->setquery('SHOW COLUMNS FROM ' . rex::getTablePrefix() . 'article_slice');
     foreach ($gc as $slice) {
         $ins = rex_sql::factory();
         // $ins->setDebug();
         $ins->setTable(rex::getTablePrefix() . 'article_slice');
         foreach ($cols as $col) {
             $colname = $col->getValue('Field');
             $ins->setValue($colname, $slice->getValue($colname));
         }
         $ins->setValue('id', 0);
         // trigger auto increment
         $ins->setValue('revision', $to_revision_id);
         $ins->addGlobalCreateFields();
         $ins->addGlobalUpdateFields();
         $ins->insert();
     }
     rex_article_cache::delete($article_id);
     return true;
 }
Пример #3
0
 public function handleSave(array $params, rex_sql $sqlFields)
 {
     if (rex_request_method() != 'post') {
         return $params;
     }
     $article = rex_sql::factory();
     // $article->setDebug();
     $article->setTable(rex::getTablePrefix() . 'article');
     $article->setWhere('id=:id AND clang_id=:clang', ['id' => $params['id'], 'clang' => $params['clang']]);
     parent::fetchRequestValues($params, $article, $sqlFields);
     // do the save only when metafields are defined
     if ($article->hasValues()) {
         $article->update();
     }
     // Artikel nochmal mit den zusätzlichen Werten neu generieren
     rex_article_cache::generateMeta($params['id'], $params['clang']);
     return $params;
 }
Пример #4
0
 protected function handleSave(array $params, rex_sql $sqlFields)
 {
     // Nur speichern wenn auch das MetaForm ausgefüllt wurde
     // z.b. nicht speichern wenn über be_search select navigiert wurde
     if (!rex_post('savemeta', 'boolean')) {
         return $params;
     }
     $article = rex_sql::factory();
     // $article->setDebug();
     $article->setTable(rex::getTablePrefix() . 'article');
     $article->setWhere('id=:id AND clang_id=:clang', ['id' => $params['id'], 'clang' => $params['clang']]);
     $article->setValue('name', rex_post('meta_article_name', 'string'));
     parent::fetchRequestValues($params, $article, $sqlFields);
     // do the save only when metafields are defined
     if ($article->hasValues()) {
         $article->update();
     }
     rex_article_cache::deleteMeta($params['id'], $params['clang']);
     rex_extension::registerPoint(new rex_extension_point('ART_META_UPDATED', '', $params));
     return $params;
 }
Пример #5
0
 public static function regenerateArticle($slice_id = false, $clang = false, $module_id = false)
 {
     if (!$slice_id) {
         $slice_id = rex_get('slice_id');
     }
     if (!$article_id) {
         $article_id = rex_get('article_id');
     }
     if (!$clang) {
         $clang = rex_get('clang');
     }
     if (!$module_id) {
         $module_id = rex_get('module_id');
     }
     if (!$ctype) {
         $ctype = rex_get('ctype');
     }
     $newsql = rex_sql::factory();
     $action = new rex_article_action($module_id, $function, $newsql);
     $action->setRequestValues();
     $action->exec(rex_article_action::PRESAVE);
     // ----- artikel neu generieren
     $EA = rex_sql::factory();
     $EA->setTable(rex::getTablePrefix() . 'article');
     $EA->setWhere(['id' => $article_id, 'clang_id' => $clang]);
     $EA->addGlobalUpdateFields();
     $EA->update();
     rex_article_cache::delete($article_id, $clang);
     rex_extension::registerPoint(new rex_extension_point('ART_CONTENT_UPDATED', '', ['id' => $article_id, 'clang' => $clang]));
     // ----- POST SAVE ACTION [ADD/EDIT/DELETE]
     $action->exec(rex_article_action::POSTSAVE);
     if ($messages = $action->getMessages()) {
         $info .= '<br />' . implode('<br />', $messages);
     }
     if (rex_post('btn_save', 'string')) {
         $function = '';
     }
 }
Пример #6
0
                 $UMOD->setWhere(['id' => $module_id]);
                 $UMOD->setValue('name', $mname);
                 $UMOD->setValue('input', $eingabe);
                 $UMOD->setValue('output', $ausgabe);
                 $UMOD->addGlobalUpdateFields();
                 $UMOD->update();
                 $success = rex_i18n::msg('module_updated') . ' | ' . rex_i18n::msg('articel_updated');
                 $new_ausgabe = $ausgabe;
                 if ($old_ausgabe != $new_ausgabe) {
                     // article updaten - nur wenn ausgabe sich veraendert hat
                     $gc = rex_sql::factory();
                     $gc->setQuery('SELECT DISTINCT(' . rex::getTablePrefix() . 'article.id) FROM ' . rex::getTablePrefix() . 'article
                             LEFT JOIN ' . rex::getTablePrefix() . 'article_slice ON ' . rex::getTablePrefix() . 'article.id=' . rex::getTablePrefix() . 'article_slice.article_id
                             WHERE ' . rex::getTablePrefix() . "article_slice.module_id='{$module_id}'");
                     for ($i = 0; $i < $gc->getRows(); ++$i) {
                         rex_article_cache::delete($gc->getValue(rex::getTablePrefix() . 'article.id'));
                         $gc->next();
                     }
                 }
             }
         }
     } catch (rex_sql_exception $e) {
         $error = $e->getMessage();
     }
     if ($goon != '') {
         $save = '0';
     } else {
         $function = '';
     }
 }
 if ($save != '1') {
Пример #7
0
 /**
  * @param int    $parentId
  * @param string $listType
  * @param bool   $ignoreOfflines
  * @param int    $clang
  *
  * @return static[]
  */
 protected static function getChildElements($parentId, $listType, $ignoreOfflines = false, $clang = null)
 {
     $parentId = (int) $parentId;
     // for $parentId=0 root elements will be returned, so abort here for $parentId<0 only
     if (0 > $parentId) {
         return [];
     }
     if (!$clang) {
         $clang = rex_clang::getCurrentId();
     }
     $class = get_called_class();
     return static::getInstanceList([$parentId, $listType], function ($id) use($class, $ignoreOfflines, $clang) {
         if ($instance = $class::get($id, $clang)) {
             return !$ignoreOfflines || $instance->isOnline() ? $instance : null;
         }
         return null;
     }, function ($parentId, $listType) {
         $listFile = rex_path::addonCache('structure', $parentId . '.' . $listType);
         if (!file_exists($listFile)) {
             rex_article_cache::generateLists($parentId);
         }
         return rex_file::getCache($listFile);
     });
 }
Пример #8
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;
 }
Пример #9
0
 /**
  * Kopiert die Inhalte eines Artikels in einen anderen Artikel.
  *
  * @param int $from_id    ArtikelId des Artikels, aus dem kopiert werden (Quell ArtikelId)
  * @param int $to_id      ArtikelId des Artikel, in den kopiert werden sollen (Ziel ArtikelId)
  * @param int $from_clang ClangId des Artikels, aus dem kopiert werden soll (Quell ClangId)
  * @param int $to_clang   ClangId des Artikels, in den kopiert werden soll (Ziel ClangId)
  * @param int $revision
  *
  * @return bool TRUE bei Erfolg, sonst FALSE
  */
 public static function copyContent($from_id, $to_id, $from_clang = 1, $to_clang = 1, $revision = 0)
 {
     if ($from_id == $to_id && $from_clang == $to_clang) {
         return false;
     }
     $gc = rex_sql::factory();
     $gc->setQuery('select * from ' . rex::getTablePrefix() . "article_slice where article_id='{$from_id}' and clang_id='{$from_clang}' and revision='{$revision}'");
     if ($gc->getRows() > 0) {
         $ins = rex_sql::factory();
         //$ins->setDebug();
         $ctypes = [];
         $cols = rex_sql::factory();
         //$cols->setDebug();
         $cols->setquery('SHOW COLUMNS FROM ' . rex::getTablePrefix() . 'article_slice');
         foreach ($gc as $slice) {
             foreach ($cols as $col) {
                 $colname = $col->getValue('Field');
                 if ($colname == 'clang_id') {
                     $value = $to_clang;
                 } elseif ($colname == 'article_id') {
                     $value = $to_id;
                 } else {
                     $value = $slice->getValue($colname);
                 }
                 // collect all affected ctypes
                 if ($colname == 'ctype_id') {
                     $ctypes[$value] = $value;
                 }
                 if ($colname != 'id') {
                     $ins->setValue($colname, $value);
                 }
             }
             $ins->addGlobalUpdateFields();
             $ins->addGlobalCreateFields();
             $ins->setTable(rex::getTablePrefix() . 'article_slice');
             $ins->insert();
         }
         foreach ($ctypes as $ctype) {
             // reorg slices
             rex_sql_util::organizePriorities(rex::getTable('article_slice'), 'priority', 'article_id=' . $to_id . ' AND clang_id=' . $to_clang . ' AND ctype_id=' . $ctype . ' AND revision=' . $revision, 'priority, updatedate');
         }
         rex_article_cache::deleteContent($to_id, $to_clang);
         return true;
     }
     return false;
 }
Пример #10
0
    $select_changefreq[] = rex_i18n::msg('yrewrite_changefreq_' . $changefreq) . '=' . $changefreq;
}
$index_setting = [];
$index_setting[] = rex_i18n::msg('yrewrite_index_status') . '=0';
$index_setting[] = rex_i18n::msg('yrewrite_index_index') . '=1';
$index_setting[] = rex_i18n::msg('yrewrite_index_noindex') . '=-1';
$yform = new rex_yform();
$yform->setObjectparams('form_action', rex_url::backendController(['page' => 'content/edit', 'article_id' => $article_id, 'clang' => $clang, 'ctype' => $ctype], false));
$yform->setObjectparams('form_id', 'yrewrite-seo');
$yform->setObjectparams('form_name', 'yrewrite-seo');
$yform->setHiddenField('yrewrite_func', 'seo');
$yform->setObjectparams('form_showformafterupdate', 1);
$yform->setObjectparams('main_table', rex::getTable('article'));
$yform->setObjectparams('main_id', $article_id);
$yform->setObjectparams('main_where', 'id=' . $article_id . ' and clang_id=' . $clang);
$yform->setObjectparams('getdata', true);
$yform->setValueField('text', ['yrewrite_title', rex_i18n::msg('yrewrite_seotitle')]);
$yform->setValueField('textarea', ['yrewrite_description', rex_i18n::msg('yrewrite_seodescription'), '', '', 'short']);
$yform->setValueField('select', ['yrewrite_changefreq', rex_i18n::msg('yrewrite_changefreq'), implode(',', $select_changefreq), '', rex_yrewrite_seo::$changefreq_default]);
$yform->setValueField('select', ['yrewrite_priority', rex_i18n::msg('yrewrite_priority'), implode(',', $select_priority), '', rex_yrewrite_seo::$priority_default]);
$yform->setValueField('select', ['yrewrite_index', rex_i18n::msg('yrewrite_index'), implode(',', $index_setting), '', rex_yrewrite_seo::$index_setting_default]);
$yform->setActionField('db', [rex::getTable('article'), 'id=' . $article_id . ' and clang_id=' . $clang]);
$yform->setObjectparams('submit_btn_label', $addon->i18n('update_seo'));
$form = $yform->getForm();
if ($yform->objparams['actions_executed']) {
    $form = rex_view::success(rex_i18n::msg('yrewrite_seoupdated')) . $form;
    rex_article_cache::delete($article_id, $clang);
} else {
}
$form = '<section id="rex-page-sidebar-yrewrite-seo" data-pjax-container="#rex-page-sidebar-yrewrite-seo" data-pjax-no-history="1">' . $form . '</section>';
return $form;
Пример #11
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;
 }
Пример #12
0
 public static function regenerateArticle($slice_id = false, $clang = false, $module_id = false, $ctype = false, $article_id = false)
 {
     if (!$slice_id) {
         $slice_id = rex_get('slice_id');
     }
     if (!$article_id) {
         $article_id = rex_get('article_id');
     }
     if (!$clang) {
         $clang = rex_get('clang');
     }
     if (!$module_id) {
         $module_id = rex_get('module_id');
     }
     if (!$ctype) {
         $ctype = rex_get('ctype');
     }
     // ----- artikel neu generieren
     $EA = rex_sql::factory();
     $EA->setTable(rex::getTablePrefix() . 'article');
     $EA->setWhere(['id' => $article_id, 'clang_id' => $clang]);
     $EA->addGlobalUpdateFields();
     $EA->update();
     rex_article_cache::delete($article_id, $clang);
     if (rex_post('btn_save', 'string')) {
         $function = '';
     }
 }
Пример #13
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);
 }