Beispiel #1
0
 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;
 }
Beispiel #2
0
 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;
 }
Beispiel #3
0
                 // 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');
Beispiel #4
0
 /**
  * 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;
 }