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; }
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; }
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 = ''; } }
$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') {
/** * 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; }
$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;
/** * 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; }
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 = ''; } }
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); }