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