function rex_copyRevisionContent($article_id, $clang, $from_revision_id, $to_revision_id, $from_re_sliceid = 0, $to_revision_delete = FALSE) { global $REX; if ($to_revision_delete) { $dc = new rex_sql(); // $dc->debugsql = 1; $dc->setQuery('delete from ' . $REX['TABLE_PREFIX'] . 'article_slice where article_id=' . $article_id . ' and clang=' . $clang . ' and revision=' . $to_revision_id); } if ($from_revision_id == $to_revision_id) { return false; } $gc = new rex_sql(); // $gc->debugsql = 1; $gc->setQuery("select * from " . $REX['TABLE_PREFIX'] . "article_slice where re_article_slice_id='{$from_re_sliceid}' and article_id='{$article_id}' and clang='{$clang}' and revision='{$from_revision_id}'"); if ($gc->getRows() == 1) { // letzt slice_id des ziels holen .. $glid = new rex_sql(); // $glid->debugsql = 1; $glid->setQuery("\n\t\t\t\t\tselect \n\t\t\t\t\t\tr1.id, r1.re_article_slice_id\n\t from \n\t\t\t\t\t\t" . $REX['TABLE_PREFIX'] . "article_slice as r1\n\t\t\t\t\tleft join " . $REX['TABLE_PREFIX'] . "article_slice as r2 on r1.id = r2.re_article_slice_id\n\t where \n\t\t\t\t\t\tr1.article_id = {$article_id} and r1.clang = {$clang} and \n\t\t\t\t\t\tr2.id is NULL and \n\t\t\t\t\t\tr1.revision='{$to_revision_id}';"); if ($glid->getRows() == 1) { $to_last_slice_id = $glid->getValue("r1.id"); } else { $to_last_slice_id = 0; } $ins = new rex_sql(); // $ins->debugsql = 1; $ins->setTable($REX['TABLE_PREFIX'] . "article_slice"); $cols = new rex_sql(); $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 == "re_article_slice_id") { $value = $to_last_slice_id; } elseif ($colname == "revision") { $value = $to_revision_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 = $gc->getValue($colname); } if ($colname != "id") { $ins->setValue($colname, $ins->escape($value)); } } $ins->insert(); // id holen und als re setzen und weitermachen.. rex_copyRevisionContent($article_id, $clang, $from_revision_id, $to_revision_id, $gc->getValue("id")); return true; } rex_generateArticle($article_id); return true; }
function rex_copyRevisionContent($article_id, $clang, $from_revision_id, $to_revision_id, $from_re_sliceid = 0, $to_revision_delete = false) { global $REX; if ($to_revision_delete) { $dc = rex_sql::factory(); // $dc->debugsql = 1; $dc->setQuery('delete from ' . $REX['TABLE_PREFIX'] . 'article_slice where article_id=' . $article_id . ' and clang=' . $clang . ' and revision=' . $to_revision_id); } if ($from_revision_id == $to_revision_id) { return false; } $gc = rex_sql::factory(); // $gc->debugsql = 1; $gc->setQuery('select * from ' . $REX['TABLE_PREFIX'] . "article_slice where re_article_slice_id='{$from_re_sliceid}' and article_id='{$article_id}' and clang='{$clang}' and revision='{$from_revision_id}'"); if ($gc->getRows() == 1) { // letzt slice_id des ziels holen .. $glid = rex_sql::factory(); // $glid->debugsql = 1; $glid->setQuery(' select r1.id, r1.re_article_slice_id from ' . $REX['TABLE_PREFIX'] . 'article_slice as r1 left join ' . $REX['TABLE_PREFIX'] . "article_slice as r2 on r1.id = r2.re_article_slice_id\n where\n r1.article_id = {$article_id} and r1.clang = {$clang} and\n r2.id is NULL and\n r1.revision='{$to_revision_id}';"); if ($glid->getRows() == 1) { $to_last_slice_id = $glid->getValue('r1.id'); } else { $to_last_slice_id = 0; } $ins = rex_sql::factory(); // $ins->debugsql = 1; $ins->setTable($REX['TABLE_PREFIX'] . 'article_slice'); $cols = rex_sql::factory(); $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 == 're_article_slice_id') { $value = $to_last_slice_id; } elseif ($colname == 'revision') { $value = $to_revision_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 = $gc->getValue($colname); } if ($colname != 'id') { $ins->setValue($colname, $ins->escape($value)); } } $ins->insert(); // id holen und als re setzen und weitermachen.. rex_copyRevisionContent($article_id, $clang, $from_revision_id, $to_revision_id, $gc->getValue('id')); return true; } rex_generateArticle($article_id); return true; }
function rex_version_header($params) { global $REX, $I18N; $return = ""; $rex_version_article = $REX['LOGIN']->getSessionVar("rex_version_article"); if (!is_array($rex_version_article)) { $rex_version_article = array(); } $working_version_empty = TRUE; $gw = rex_sql::factory(); $gw->setQuery('select * from ' . $REX['TABLE_PREFIX'] . 'article_slice where article_id=' . $params['article_id'] . ' and clang=' . $params['clang'] . ' and revision=1 LIMIT 1'); if ($gw->getRows() > 0) { $working_version_empty = FALSE; } $revisions = array(); $revisions[0] = $I18N->msg("version_liveversion"); $revisions[1] = $I18N->msg("version_workingversion"); $version_id = rex_request("rex_set_version", "int", "-1"); if ($version_id === 0) { $rex_version_article[$params['article_id']] = 0; } elseif ($version_id == 1) { $rex_version_article[$params['article_id']] = 1; } elseif (!isset($rex_version_article[$params['article_id']])) { $rex_version_article[$params['article_id']] = 1; } $func = rex_request("rex_version_func", "string"); switch ($func) { case "copy_work_to_live": if ($working_version_empty) { $return .= rex_warning($I18N->msg("version_warning_working_version_to_live")); } else { if (!$REX['USER']->hasPerm('version[only_working_version]')) { require $REX['INCLUDE_PATH'] . '/addons/version/functions/function_rex_copyrevisioncontent.inc.php'; // rex_copyRevisionContent($article_id,$clang,$from_revision_id, $to_revision_id, $gc->getValue("id"),$delete_to_revision); rex_copyRevisionContent($params['article_id'], $params['clang'], 1, 0, 0, TRUE); $return .= rex_info($I18N->msg("version_info_working_version_to_live")); } } break; case "copy_live_to_work": require $REX['INCLUDE_PATH'] . '/addons/version/functions/function_rex_copyrevisioncontent.inc.php'; // rex_copyRevisionContent($article_id,$clang,$from_revision_id, $to_revision_id, $gc->getValue("id"),$delete_to_revision); rex_copyRevisionContent($params['article_id'], $params['clang'], 0, 1, 0, TRUE); $return .= rex_info($I18N->msg("version_info_live_version_to_working")); break; } if ($REX['USER']->hasPerm('version[only_working_version]')) { $rex_version_article[$params['article_id']] = 1; unset($revisions[0]); } $REX['LOGIN']->setSessionVar("rex_version_article", $rex_version_article); $link = 'index.php?page=' . $params['page'] . '&article_id=' . $params['article_id'] . '&clang=' . $params['clang']; $return .= ' <div id="rex-version-header" class="rex-toolbar rex-toolbar-has-form rex-version-revision-' . $rex_version_article[$params['article_id']] . '"> <div class="rex-toolbar-content rex-version-header"> <form action="index.php" method="post"> <fieldset> <input type="hidden" name="page" value="' . $params['page'] . '" /> <input type="hidden" name="mode" value="' . $params['mode'] . '" /> <input type="hidden" name="article_id" value="' . $params['article_id'] . '" /> <input type="hidden" name="clang" value="' . $params['clang'] . '" /> <input type="hidden" name="ctype" value="' . $params['ctype'] . '" /> '; $s = new rex_select(); foreach ($revisions as $k => $r) { $s->addOption($r, $k); } $s->setSelected($rex_version_article[$params['article_id']]); $s->setName('rex_set_version'); $s->setId('rex-select-version-id'); $s->setSize('1'); $s->setAttribute('onchange', 'this.form.submit();'); if ($REX['USER']->hasPerm('version[only_working_version]')) { $s->setDisabled(); } $return .= '<ul class="rex-display-inline">'; $return .= '<li class="rex-navi-first"><label for="rex-select-version-id">' . $I18N->msg('version') . ':</label> ' . $s->get() . '</li>'; if ($REX['USER']->hasPerm('version[only_working_version]')) { if ($rex_version_article[$params['article_id']] > 0) { $return .= '<li><a href="' . $link . '&rex_version_func=copy_live_to_work">' . $I18N->msg('version_copy_from_liveversion') . '</a></li>'; $return .= '<li><a href="/' . rex_getUrl($params['article_id'], $params['clang'], array("rex_version" => 1)) . '" target="_blank">' . $I18N->msg("version_preview") . '</a></li>'; } } else { if ($rex_version_article[$params['article_id']] > 0) { if (!$working_version_empty) { $return .= '<li><a href="' . $link . '&rex_version_func=copy_work_to_live">' . $I18N->msg('version_working_to_live') . '</a></li>'; } $return .= '<li><a href="../' . rex_getUrl($params['article_id'], $params['clang'], array("rex_version" => 1)) . '" target="_blank">' . $I18N->msg("version_preview") . '</a></li>'; } else { $return .= '<li><a href="' . $link . '&rex_version_func=copy_live_to_work" onclick="return confirm(\'' . $I18N->msg('version_confirm_copy_live_to_workingversion') . '\');">' . $I18N->msg('version_copy_live_to_workingversion') . '</a></li>'; } } $return .= '</ul>'; $return .= ' <noscript> <input type="submit" /> </noscript> </fieldset> </form> </div> <div class="rex-clearer"></div> <style type="text/css"> /* <![CDATA[ */ #rex-version-header label { font-weight: bold; } #rex-version-header li { margin-right: 15px; } div.rex-version-revision-0 { background-color:#bbddaa; } div.rex-version-revision-1 { background-color:#EFECD1; } /* ]]> */ </style> </div> '; $params['slice_revision'] = $rex_version_article[$params['article_id']]; return $return; }