/** * Kopieren eines Artikels von einer Kategorie in eine andere * * @param $id ArtikelId des zu kopierenden Artikels * @param $to_cat_id KategorieId in die der Artikel kopiert werden soll */ function rex_copyArticle($id, $to_cat_id) { global $REX, $REX_USER; $id = (int) $id; $to_cat_id = (int) $to_cat_id; // Artikel in jeder Sprache kopieren foreach ($REX['CLANG'] as $clang => $clang_name) { // validierung der id & from_cat_id $from_sql = new sql(); $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 = new sql(); $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) { $art_sql = new sql(); $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_sql->getValue('id')); $art_sql->setValue('path', $to_sql->getValue('path') . $to_sql->getValue('id') . '|'); $art_sql->setValue('catname', $to_sql->getValue('name')); $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('createdate', time()); $art_sql->setValue('createuser', addslashes($REX_USER->getValue('login'))); $art_sql->setValue('startpage', 0); // schon gesetzte Felder nicht wieder überschreiben $dont_copy = array('id', 'pid', 're_id', 'catname', 'path', 'prior', 'status', 'createdate', 'createuser', 'startpage'); foreach (array_diff($to_sql->getFieldnames(), $dont_copy) as $fld_name) { $art_sql->setValue($fld_name, $from_sql->getValue($fld_name)); } $art_sql->setValue("clang", $clang); $art_sql->insert(); // ArticleSlices kopieren rex_copyContent($id, $new_id, $clang, $clang); // Prios neu berechnen rex_newArtPrio($to_cat_id, $clang, 1, 0); } else { return false; } } else { return false; } } // Generated des Artikels neu erzeugen rex_generateArticle($id, false); // Generated der Kategorien neu erzeugen, da sich derin befindliche Artikel geändert haben rex_generateArticle($to_cat_id, false); return $new_id; }
/** * Löscht einen Artikel und reorganisiert die Prioritäten verbleibender Geschwister-Artikel * * @param int $article_id Id des Artikels die gelöscht werden soll * * @return array Ein Array welches den status sowie eine Fehlermeldung beinhaltet */ function rex_deleteArticleReorganized($article_id) { global $REX; $return = array(); $return['state'] = false; $return['message'] = ''; $Art = rex_sql::factory(); $Art->setQuery('select * from ' . $REX['TABLE_PREFIX'] . 'article where id=' . $article_id . ' and startpage=0'); if ($Art->getRows() == count($REX['CLANG'])) { $return = rex_deleteArticle($article_id); $re_id = $Art->getValue('re_id'); foreach ($REX['CLANG'] as $clang => $clang_name) { // ----- PRIOR rex_newArtPrio($Art->getValue('re_id'), $clang, 0, 1); // ----- EXTENSION POINT $return = rex_register_extension_point('ART_DELETED', $return, array('id' => $article_id, 'clang' => $clang, 're_id' => $re_id, 'name' => $Art->getValue('name'), 'status' => $Art->getValue('status'), 'prior' => $Art->getValue('prior'), 'path' => $Art->getValue('path'), 'template_id' => $Art->getValue('template_id'))); $Art->next(); } } return array($return['state'], $return['message']); }
$EA->update(); // ----- PRIOR rex_newArtPrio($category_id, $clang, $Position_Article, $thisArt->getValue("prior")); rex_generateArticle($article_id); // ----- EXTENSION POINT $message = rex_register_extension_point('ART_UPDATED', $message, array("id" => $article_id, "status" => $thisArt->getValue("status"), "name" => $article_name, "clang" => $clang, "re_id" => $category_id, "prior" => $Position_Article, "path" => $KATPATH, "template_id" => $template_id)); } elseif (isset($function) and $function == "delete_article" && $article_id != "" && $KATPERM && !$REX_USER->isValueOf("rights", "editContentOnly[]")) { // --------------------- ARTIKEL DELETE $message = rex_deleteArticle($article_id); $re_id = $thisArt->getValue("re_id"); // ----- PRIO $CL = $REX['CLANG']; reset($CL); for ($j = 0; $j < count($CL); $j++) { $mlang = key($CL); rex_newArtPrio($thisArt->getValue("re_id"), $mlang, 0, 1); next($CL); } // ----- EXTENSION POINT $message = rex_register_extension_point('ART_DELETED', $message, array("id" => $article_id, "re_id" => $re_id)); } } } // --------------------------------------------- KATEGORIE LISTE if ($KATPERM && !$REX_USER->isValueOf("rights", "editContentOnly[]")) { $addc = '<a href="index.php?page=structure&category_id=' . $category_id . '&function=add_cat&clang=' . $clang . '"><img src="pics/folder_plus.gif" width="16" height="16" border="0" alt="' . $I18N->msg("add_category") . '" title="' . $I18N->msg("add_category") . '"></a>'; } else { $addc = " "; } echo "<table class=rex style=table-layout:auto; cellpadding=5 cellspacing=1>\r\n <tr>\r\n <th class=icon>{$addc}</th>"; if ($REX_USER->isValueOf("rights", "advancedMode[]")) {
/** * 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 boolean TRUE bei Erfolg, sonst FALSE */ function rex_moveArticle($id, $from_cat_id, $to_cat_id) { global $REX; $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'] as $clang => $clang_name) { // validierung der id & from_cat_id $from_sql = rex_sql::factory(); $from_sql->setQuery('select * from ' . $REX['TABLE_PREFIX'] . 'article where clang="' . $clang . '" and startpage<>1 and id="' . $id . '" and re_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['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) { $re_id = $to_sql->getValue('id'); $path = $to_sql->getValue('path') . $to_sql->getValue('id') . '|'; $catname = $to_sql->getValue('catname'); } else { // In RootEbene $re_id = 0; $path = '|'; $catname = $from_sql->getValue('name'); } $art_sql = rex_sql::factory(); //$art_sql->debugsql = 1; $art_sql->setTable($REX['TABLE_PREFIX'] . 'article'); $art_sql->setValue('re_id', $re_id); $art_sql->setValue('path', $path); $art_sql->setValue('catname', $art_sql->escape($catname)); // Artikel als letzten Artikel in die neue Kat einfügen $art_sql->setValue('prior', '99999'); // Kopierter Artikel offline setzen $art_sql->setValue('status', $from_sql->getValue('status')); $art_sql->addGlobalUpdateFields(); $art_sql->setWhere('clang="' . $clang . '" and startpage<>1 and id="' . $id . '" and re_id="' . $from_cat_id . '"'); $art_sql->update(); // Prios neu berechnen rex_newArtPrio($to_cat_id, $clang, 1, 0); rex_newArtPrio($from_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($from_cat_id); rex_deleteCacheArticle($to_cat_id); return true; }