public function getArticle($curctype = -1) { // bc if ($this->viasql) { return parent::getArticle($curctype); } $this->ctype = $curctype; if (!$this->getSlice && $this->article_id != 0) { // ----- start: article caching ob_start(); ob_implicit_flush(0); $article_content_file = rex_path::addonCache('structure', $this->article_id . '.' . $this->clang . '.content'); if (!file_exists($article_content_file)) { $generated = rex_content_service::generateArticleContent($this->article_id, $this->clang); if ($generated !== true) { // fehlermeldung ausgeben echo $generated; } } if (file_exists($article_content_file)) { require $article_content_file; } // ----- end: article caching $CONTENT = ob_get_contents(); ob_end_clean(); } else { // Inhalt ueber sql generierens $CONTENT = parent::getArticle($curctype); } $CONTENT = rex_extension::registerPoint(new rex_extension_point('ART_CONTENT', $CONTENT, ['ctype' => $curctype, 'article' => $this])); return $CONTENT; }
public function execute() { $article_id = rex_request('article_id', 'int'); $clang = rex_request('clang', 'int'); $slice_id = rex_request('slice_id', 'int'); $direction = rex_request('direction', 'string'); $ooArt = rex_article::get($article_id, $clang); if (!$ooArt instanceof rex_article) { throw new rex_api_exception('Unable to find article with id "' . $article_id . '" and clang "' . $clang . '"!'); } $category_id = $ooArt->getCategoryId(); /** * @var rex_user */ $user = rex::getUser(); // check permissions if (!$user->hasPerm('moveSlice[]')) { throw new rex_api_exception(rex_i18n::msg('no_rights_to_this_function')); } if (!$user->getComplexPerm('structure')->hasCategoryPerm($category_id)) { throw new rex_api_exception(rex_i18n::msg('no_rights_to_this_function')); } // modul und rechte vorhanden ? $CM = rex_sql::factory(); $CM->setQuery('select * from ' . rex::getTablePrefix() . 'article_slice left join ' . rex::getTablePrefix() . 'module on ' . rex::getTablePrefix() . 'article_slice.module_id=' . rex::getTablePrefix() . 'module.id where ' . rex::getTablePrefix() . "article_slice.id='{$slice_id}' and clang_id={$clang}"); if ($CM->getRows() != 1) { throw new rex_api_exception(rex_i18n::msg('module_not_found')); } else { $module_id = (int) $CM->getValue(rex::getTablePrefix() . 'article_slice.module_id'); // ----- RECHTE AM MODUL ? if ($user->getComplexPerm('modules')->hasPerm($module_id)) { $message = rex_content_service::moveSlice($slice_id, $clang, $direction); } else { throw new rex_api_exception(rex_i18n::msg('no_rights_to_this_function')); } } $result = new rex_api_result(true, $message); return $result; }
// drücken der Entertaste übermittelt if (rex_post('btn_save', 'string')) { $function = ''; } } } } } // ------------------------------------------ END: Slice add/edit/delete // ------------------------------------------ START: COPY LANG CONTENT if (rex_post('copycontent', 'boolean')) { $clang_a = rex_post('clang_a', 'int'); $clang_b = rex_post('clang_b', 'int'); $user = rex::getUser(); if ($user->hasPerm('copyContent[]') && $user->getComplexPerm('clang')->hasPerm($clang_a) && $user->getComplexPerm('clang')->hasPerm($clang_b)) { if (rex_content_service::copyContent($article_id, $article_id, $clang_a, $clang_b, $slice_revision)) { $info = rex_i18n::msg('content_contentcopy'); } else { $warning = rex_i18n::msg('content_errorcopy'); } } else { $warning = rex_i18n::msg('no_rights_to_this_function'); } } // ------------------------------------------ END: COPY LANG CONTENT // ------------------------------------------ START: MOVE ARTICLE if (rex_post('movearticle', 'boolean') && $category_id != $article_id) { $category_id_new = rex_post('category_id_new', 'int'); if (rex::getUser()->hasPerm('moveArticle[]') && rex::getUser()->getComplexPerm('structure')->hasCategoryPerm($category_id_new)) { if (rex_article_service::moveArticle($article_id, $category_id, $category_id_new)) { $info = rex_i18n::msg('content_articlemoved');
/** * Kopieren eines Artikels von einer Kategorie in eine andere. * * @param int $id ArtikelId des zu kopierenden Artikels * @param int $to_cat_id KategorieId in die der Artikel kopiert werden soll * * @return bool FALSE bei Fehler, sonst die Artikel Id des neue kopierten Artikels */ public static function copyArticle($id, $to_cat_id) { $id = (int) $id; $to_cat_id = (int) $to_cat_id; $new_id = ''; // Artikel in jeder Sprache kopieren foreach (rex_clang::getAllIds() as $clang) { // validierung der id & from_cat_id $from_sql = rex_sql::factory(); $qry = 'select * from ' . rex::getTablePrefix() . 'article where clang_id="' . $clang . '" and id="' . $id . '"'; $from_sql->setQuery($qry); 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) { $path = $to_sql->getValue('path') . $to_sql->getValue('id') . '|'; $catname = $to_sql->getValue('catname'); } else { // In RootEbene $path = '|'; $catname = $from_sql->getValue('name'); } $art_sql = rex_sql::factory(); $art_sql->setTable(rex::getTablePrefix() . 'article'); if ($new_id == '') { $new_id = $art_sql->setNewId('id'); } $art_sql->setValue('id', $new_id); // neuen auto_incrment erzwingen $art_sql->setValue('parent_id', $to_cat_id); $art_sql->setValue('catname', $catname); $art_sql->setValue('catpriority', 0); $art_sql->setValue('path', $path); $art_sql->setValue('name', $from_sql->getValue('name') . ' ' . rex_i18n::msg('structure_copy')); $art_sql->setValue('priority', 99999); // Artikel als letzten Artikel in die neue Kat einfügen $art_sql->setValue('status', 0); // Kopierter Artikel offline setzen $art_sql->setValue('startarticle', 0); $art_sql->addGlobalUpdateFields(); $art_sql->addGlobalCreateFields(); // schon gesetzte Felder nicht wieder überschreiben $dont_copy = ['id', 'pid', 'parent_id', 'catname', 'name', 'catpriority', 'path', 'priority', 'status', 'updatedate', 'updateuser', 'createdate', 'createuser', 'startarticle']; foreach (array_diff($from_sql->getFieldnames(), $dont_copy) as $fld_name) { $art_sql->setValue($fld_name, $from_sql->getValue($fld_name)); } $art_sql->setValue('clang_id', $clang); $art_sql->insert(); // TODO Doublecheck... is this really correct? $revisions = rex_sql::factory(); $revisions->setQuery('select revision from ' . rex::getTablePrefix() . "article_slice where priority=1 AND ctype_id=1 AND article_id='{$id}' AND clang_id='{$clang}'"); foreach ($revisions as $rev) { // FIXME this dependency is very ugly! // ArticleSlices kopieren rex_content_service::copyContent($id, $new_id, $clang, $clang, $rev->getValue('revision')); } // Prios neu berechnen self::newArtPrio($to_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($to_cat_id); return $new_id; }