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; }