<?php

// +----------------------------------------------------------------------+
// | OpenConf                                                             |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2014 Zakon Group LLC.  All Rights Reserved.       |
// +----------------------------------------------------------------------+
// | This source file is subject to the OpenConf License, available on    |
// | the OpenConf web site: www.OpenConf.com                              |
// +----------------------------------------------------------------------+

$hdr = 'Export Settings';
$hdrfn = 1;

$excludeSettingsAR = array('OC_chair_pwd', 'OC_chair_uname', 'OC_chairChangePassword', 'OC_chairFailedSignIn', 'OC_confirmmail', 'OC_confName', 'OC_confNameFull', 'OC_confURL', 'OC_pcemail', 'OC_version', 'OC_versionLatest');

require_once '../include.php';

beginChairSession();

if (isset($_POST['submit']) && ($_POST['submit'] == 'Export Settings')) {
	// Check for valid submission
	if (!validToken('chair')) {
			warn('Invalid submission');
	}

	$settings = array(
		'options' => array(),
		'configuration' => array(),
		'license' => ((OCC_LICENSE == 'Public') ? 'Public' : 'Pro'),
		'modules' => array()
	);
	
	// Module prep
	if (oc_hookSet('settings-export-prep')) {
		foreach ($OC_hooksAR['settings-export-prep'] as $f) {
			require_once $f;
		}
	}
	
	// Check for selected settings
	if (!isset($_POST['settings']) || (!is_array($_POST['settings'])) || (count($_POST['settings']) == 0)) {
		warn('No settings selected', $hdr, $hdrfn);
		exit;
	}

	// Configuration settings
	$settings['options'][] = 'configuration';
	$r = ocsql_query("SELECT `module`, `setting`, `value` FROM `" . OCC_TABLE_CONFIG . "` ORDER BY `module`, `setting`");
	while ($l = ocsql_fetch_assoc($r)) {
		if (((in_array('configuration', $_POST['settings']) && ($l['module'] == 'OC')) || isset($settings['modules'][$l['module']]))
			&& !in_array($l['setting'], $excludeSettingsAR)
		) {
			$settings['configuration'][$l['module'] . ':' . $l['setting']] = $l['value'];
		}
	}

	// Topics
	if (in_array('topics', $_POST['settings'])) {
		$settings['options'][] = 'topics';
		$r = ocsql_query("SELECT * FROM `" . OCC_TABLE_TOPIC . "` ORDER BY `topicid`");
		$settings['topics'] = array();
		while ($l = ocsql_fetch_assoc($r)) {
			$settings['topics'][$l['topicid']] = array(
				'topicname' => $l['topicname'],
				'short' => $l['short']
			);
		}
	}

	// Reviewers
	if (in_array('reviewers', $_POST['settings'])) {
		$settings['options'][] = 'reviewers';
		$r = ocsql_query("SELECT * FROM `" . OCC_TABLE_REVIEWER . "` ORDER BY `reviewerid`");
		$settings['reviewers'] = array();
		while ($l = ocsql_fetch_assoc($r)) {
			foreach ($l as $k => $v) {
				$settings['reviewers'][$l['reviewerid']][$k] = $v;
			}
		}
		
		// Reviewer Topics
		if (in_array('topics', $_POST['settings'])) {
			$settings['options'][] = 'reviewertopics';
			$r = ocsql_query("SELECT * FROM `" . OCC_TABLE_REVIEWERTOPIC . "` ORDER BY `reviewerid`, `topicid`");
			$settings['reviewertopics'] = array();
			while ($l = ocsql_fetch_assoc($r)) {
				if (!isset($settings['reviewertopics'][$l['reviewerid']])) {
					$settings['reviewertopics'][$l['reviewerid']] = array($l['topicid']);
				} else {
					$settings['reviewertopics'][$l['reviewerid']][] = $l['topicid'];
				}
			}
		}
	}

	// Templates
	if (in_array('templates', $_POST['settings'])) {
		$settings['options'][] = 'templates';
		$r = ocsql_query("SELECT * FROM `" . OCC_TABLE_TEMPLATE . "`");
		$settings['templates'] = array();
		while ($l = ocsql_fetch_assoc($r)) {
			if (($l['module'] == 'OC') || isset($settings['modules'][$l['module']])) {
				foreach ($l as $k => $v) {
					$settings['templates'][$l['templateid']][$k] = $v;
				}
			}
		}
	}
	
	// Module settings
	if (oc_hookSet('settings-export-process')) {
		foreach ($OC_hooksAR['settings-export-process'] as $f) {
			require_once $f;
		}
	}

	// Output file
	oc_sendNoCacheHeaders();
	$fileName = 'openconf-settings';
	if (preg_match("/^\w+$/", $GLOBALS['OC_configAR']['OC_confName'])) {
        $fileName .= '-' . $GLOBALS['OC_configAR']['OC_confName'];
	}
	$fileName .= '.oc';
	header('Content-Type: application/binary');
	header('Content-Disposition: attachment; filename="' . $fileName . '"');
	print json_encode($settings);
	exit;	
}

printHeader($hdr, $hdrfn);

print '
<p>In order to save your settings for use in another OpenConf installation, select what you would like exported below, then click the <i>Export Settings</i> button.  A file dialog box will open up for you to save the settings file on your computer.</p>

<script language="javascript" type="text/javascript">
<!--
function checkAllBoxes() {
	var boxObj = document.getElementsByName(\'settings[]\');
	for (var i=0; i<boxObj.length; i++) {
			boxObj[i].checked = true;
	}
}
document.write(\'<p><span style="margin-left: 25px; cursor: pointer; padding: 1px 3px; background-color: #eee; color: #00f; text-decoration: underline;" onclick="checkAllBoxes();">check all</span></p>\');
// -->
</script>

<form method="post" action="settings-export.php">
<input type="hidden" name="token" value="' . $_SESSION[OCC_SESSION_VAR_NAME]['chairtoken'] . '" />

<label><input type="checkbox" name="settings[]" value="configuration" checked /> Configuration</label><br />
<p />

<label><input type="checkbox" name="settings[]" value="topics" /> Topics</label><br />
<label><input type="checkbox" name="settings[]" value="reviewers" /> Reviewers</label><br />
<label><input type="checkbox" name="settings[]" value="templates" /> Templates</label><br />
';

// Module settings
if (oc_hookSet('settings-export-options')) {
        foreach ($OC_hooksAR['settings-export-options'] as $f) {
                require_once $f;
        }
}

print '
<p />

<input type="submit" name="submit" value="Export Settings" />
</form>
';


printFooter();
?>