exit;
         } else {
             $warning = $I18N->msg('content_toarticle_failed');
         }
     } else {
         $warning = $I18N->msg('no_rights_to_this_function');
     }
 }
 // ------------------------------------------ END: CATEGORY2ARTICLE
 // ------------------------------------------ START: COPY LANG CONTENT
 if (rex_post('copycontent', 'boolean')) {
     $clang_perm = $REX['USER']->getClangPerm();
     $clang_a = rex_post('clang_a', 'rex-clang-id');
     $clang_b = rex_post('clang_b', 'rex-clang-id');
     if ($REX['USER']->isAdmin() || $REX['USER']->hasPerm('copyContent[]') && count($clang_perm) > 0 && in_array($clang_a, $clang_perm) && in_array($clang_b, $clang_perm)) {
         if (rex_copyContent($article_id, $article_id, $clang_a, $clang_b, 0, $slice_revision)) {
             $info = $I18N->msg('content_contentcopy');
         } else {
             $warning = $I18N->msg('content_errorcopy');
         }
     } else {
         $warning = $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', 'rex-category-id');
     if ($REX['USER']->isAdmin() || $REX['USER']->hasPerm('moveArticle[]') && $REX['USER']->hasCategoryPerm($category_id_new)) {
         if (rex_moveArticle($article_id, $category_id, $category_id_new)) {
             $info = $I18N->msg('content_articlemoved');
 if (rex_post('article2startpage', 'string')) {
     if ($REX_USER->hasPerm('admin[]') || $REX_USER->hasPerm('article2startpage[]')) {
         if (rex_article2startpage($article_id)) {
             $message = $I18N->msg('content_tostartarticle_ok');
             header("Location:index.php?page=content&mode=meta&clang={$clang}&ctype={$ctype}&article_id={$article_id}&message=" . urlencode($message));
             exit;
         } else {
             $message = $I18N->msg('content_tostartarticle_failed');
         }
     }
 }
 // ------------------------------------------ END: COPY LANG CONTENT
 // ------------------------------------------ START: COPY LANG CONTENT
 if (rex_post('copycontent', 'string')) {
     if ($REX_USER->hasPerm('admin[]') || $REX_USER->hasPerm('copyContent[]')) {
         if (rex_copyContent($article_id, $article_id, $clang_a, $clang_b)) {
             $message = $I18N->msg('content_contentcopy');
         } else {
             $message = $I18N->msg('content_errorcopy');
         }
     }
 }
 // ------------------------------------------ END: COPY LANG CONTENT
 // ------------------------------------------ START: MOVE ARTICLE
 if (rex_post('movearticle', 'string') && $category_id != $article_id) {
     $category_id_new = rex_post('category_id_new', 'int');
     if ($REX_USER->hasPerm('admin[]') || $REX_USER->hasPerm('moveArticle[]') && ($REX_USER->hasPerm('csw[0]') || $REX_USER->hasPerm('csw[' . $category_id_new . ']'))) {
         if (rex_moveArticle($article_id, $category_id, $category_id_new)) {
             $message = $I18N->msg('content_articlemoved');
             ob_end_clean();
             header('Location: index.php?page=content&article_id=' . $article_id . '&mode=meta&clang=' . $clang . '&ctype=' . $ctype . '&message=' . urlencode($message));
/**
 * Kopiert die Inhalte eines Artikels in einen anderen Artikel
 * 
 * @param $from_id           ArtikelId des Artikels, aus dem kopiert werden (Quell ArtikelId)
 * @param $to_id             ArtikelId des Artikel, in den kopiert werden sollen (Ziel ArtikelId)
 * @param [$from_clang]      ClangId des Artikels, aus dem kopiert werden soll (Quell ClangId)
 * @param [$to_clang]        ClangId des Artikels, in den kopiert werden soll (Ziel ClangId)
 * @param [$from_re_sliceid] Id des Slices, bei dem begonnen werden soll
 */
function rex_copyContent($from_id, $to_id, $from_clang = 0, $to_clang = 0, $from_re_sliceid = 0)
{
    global $REX, $REX_USER;
    if ($from_id == $to_id && $from_clang == $to_clang) {
        return false;
    }
    $gc = new sql();
    $gc->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article_slice where re_article_slice_id='{$from_re_sliceid}' and article_id='{$from_id}' and clang='{$from_clang}'");
    if ($gc->getRows() == 1) {
        // letzt slice_id des ziels holen ..
        $glid = new sql();
        $glid->setQuery("select r1.id, r1.re_article_slice_id\r\n                     from " . $REX['TABLE_PREFIX'] . "article_slice as r1 \r\n                     left join " . $REX['TABLE_PREFIX'] . "article_slice as r2 on r1.id=r2.re_article_slice_id \r\n                     where r1.article_id={$to_id} and r1.clang={$to_clang} and r2.id is NULL;");
        if ($glid->getRows() == 1) {
            $to_last_slice_id = $glid->getValue("r1.id");
        } else {
            $to_last_slice_id = 0;
        }
        $ins = new sql();
        // $ins->debugsql = 1;
        $ins->setTable($REX['TABLE_PREFIX'] . "article_slice");
        $cols = new sql();
        // $cols->debugsql = 1;
        $cols->setquery("SHOW COLUMNS FROM " . $REX['TABLE_PREFIX'] . "article_slice");
        for ($j = 0; $j < $cols->rows; $j++, $cols->next()) {
            $colname = $cols->getvalue("Field");
            if ($colname == "clang") {
                $value = $to_clang;
            } elseif ($colname == "re_article_slice_id") {
                $value = $to_last_slice_id;
            } elseif ($colname == "article_id") {
                $value = $to_id;
            } elseif ($colname == "createdate") {
                $value = time();
            } elseif ($colname == "updatedate") {
                $value = time();
            } elseif ($colname == "createuser") {
                $value = $REX_USER->getValue("login");
            } elseif ($colname == "updateuser") {
                $value = $REX_USER->getValue("login");
            } else {
                $value = addslashes($gc->getValue("{$colname}"));
            }
            if ($colname != "id") {
                $ins->setValue($colname, $value);
            }
        }
        $ins->insert();
        // id holen und als re setzen und weitermachen..
        rex_copyContent($from_id, $to_id, $from_clang, $to_clang, $gc->getValue("id"));
        return true;
    }
    rex_generateArticle($to_id);
    return true;
}
/**
 * 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 boolean FALSE bei Fehler, sonst die Artikel Id des neue kopierten Artikels
 */
function rex_copyArticle($id, $to_cat_id)
{
    global $REX, $I18N;
    $id = (int) $id;
    $to_cat_id = (int) $to_cat_id;
    $new_id = '';
    // Artikel in jeder Sprache kopieren
    foreach ($REX['CLANG'] as $clang => $clang_name) {
        // validierung der id & from_cat_id
        $from_sql = rex_sql::factory();
        $qry = 'select * from ' . $REX['TABLE_PREFIX'] . 'article where clang="' . $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['TABLE_PREFIX'] . 'article where clang="' . $clang . '" and startpage=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['TABLE_PREFIX'] . 'article');
                if ($new_id == '') {
                    $new_id = $art_sql->setNewId('id');
                }
                $art_sql->setValue('id', $new_id);
                // neuen auto_incrment erzwingen
                $art_sql->setValue('re_id', $to_cat_id);
                $art_sql->setValue('path', $path);
                $art_sql->setValue('name', $art_sql->escape($from_sql->getValue('name') . ' ' . $I18N->msg('content_copy')));
                $art_sql->setValue('catname', $art_sql->escape($catname));
                $art_sql->setValue('catprior', 0);
                $art_sql->setValue('prior', 99999);
                // Artikel als letzten Artikel in die neue Kat einfügen
                $art_sql->setValue('status', 0);
                // Kopierter Artikel offline setzen
                $art_sql->setValue('startpage', 0);
                $art_sql->addGlobalCreateFields();
                // schon gesetzte Felder nicht wieder überschreiben
                $dont_copy = array('id', 'pid', 're_id', 'name', 'catname', 'catprior', 'path', 'prior', 'status', 'createdate', 'createuser', 'startpage');
                foreach (array_diff($from_sql->getFieldnames(), $dont_copy) as $fld_name) {
                    $art_sql->setValue($fld_name, $art_sql->escape($from_sql->getValue($fld_name)));
                }
                $art_sql->setValue('clang', $clang);
                $art_sql->insert();
                $revisions = rex_sql::factory();
                $revisions->setQuery('select revision from ' . $REX['TABLE_PREFIX'] . "article_slice where re_article_slice_id='0' and article_id='{$id}' and clang='{$clang}'");
                for ($i = 0; $i < $revisions->getRows(); $i++) {
                    // ArticleSlices kopieren
                    rex_copyContent($id, $new_id, $clang, $clang, 0, $revisions->getValue('revision'));
                    $revisions->next();
                }
                // Prios neu berechnen
                rex_newArtPrio($to_cat_id, $clang, 1, 0);
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
    // Caches des Artikels löschen, in allen Sprachen
    rex_deleteCacheArticle($id);
    // Caches der Kategorien löschen, da sich derin befindliche Artikel geändert haben
    rex_deleteCacheArticle($to_cat_id);
    return $new_id;
}