<?php

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

require_once "../include.php";

beginChairSession();

oc_addJS('chair/list_scores.js');

// Filter?
$filter = (isset($_SESSION[OCC_SESSION_VAR_NAME]['scoresfilter']) ? $_SESSION[OCC_SESSION_VAR_NAME]['scoresfilter'] : '');
if (isset($_POST['fsubmit']) && ($_POST['fsubmit'] == 'Filter')) {
	if (!isset($_POST['filter']) || empty($_POST['filter'])) {
		$filter = '';
	} elseif (($_POST['filter'] == 'Pending') || isset($OC_acceptanceColorAR[$_POST['filter']])) {
		$filter = $_POST['filter'];
	}
	$_SESSION[OCC_SESSION_VAR_NAME]['scoresfilter'] = $filter;
	session_write_close();
}

printHeader("Submission Scores",1);

if (isset($_POST['asubmit']) && ($_POST['asubmit'] == 'Go')) {
	if (isset($_POST['subs']) && !empty($_POST['subs']) && isset($_POST['subaction']) && (($_POST['subaction'] == 'Pending') || isset($OC_acceptanceColorAR[$_POST['subaction']]))) {
		if ($_POST['subaction'] == 'Pending') {
			$accepted = 'null';
		} else {
			$accepted = "'" . $_POST['subaction'] . "'";
		}
		foreach ($_POST['subs'] as $sid) {
			if (ctype_digit($sid)) {
				$q = "UPDATE `" . OCC_TABLE_PAPER . "` SET `accepted`=" . $accepted . " WHERE `paperid`='" . safeSQLstr($sid) . "' LIMIT 1";
				ocsql_query($q);
			}
		}
	} else {
		print '<p class="warn" style="text-align: center">Invalid change request.  Were submissions selected?</p>';
	}
}

// Get accept/reject/pending count
$r = ocsql_query("SELECT `accepted`, COUNT(*) AS `count` FROM `" . OCC_TABLE_PAPER . "` GROUP BY `accepted`") or err("Unable to get score count");
if (mysql_num_rows($r) == 0) { 
	warn('No submissions have been made yet.');
}
$accCountAR = array();
while ($l = mysql_fetch_array($r)) {
	if (empty($l['accepted'])) {
		$accCountAR['Pending'] = $l['count'];
	} else {
		$accCountAR[$l['accepted']] = $l['count'];
	}
}


// Get pending papers advocate recommendation counts 
$advcountTotal = 0;
$advCountAR = array();
if (isset($accCountAR['Pending']) && ($accCountAR['Pending'] > 0)) {
	$cq = "SELECT `adv_recommendation`, COUNT(`advocateid`) AS `count` FROM `" . OCC_TABLE_PAPER . "`, `" . OCC_TABLE_PAPERADVOCATE . "` WHERE `" . OCC_TABLE_PAPER . "`.`paperid`=`" . OCC_TABLE_PAPERADVOCATE . "`.`paperid` AND `" . OCC_TABLE_PAPER . "`.`accepted` IS NULL GROUP BY `adv_recommendation`";
	if ($cr = ocsql_query($cq)) {
		while ($cl = mysql_fetch_array($cr)) {
			if (empty($cl['adv_recommendation'])) {
				$advCountAR['Pending'] = $cl['count'];
			} else {
				$advCountAR[$cl['adv_recommendation']] = $cl['count'];
			}
			$advcountTotal += $cl['count'];
		}
	} 
}

// Select sort order
$psort='<a href="'.$_SERVER['PHP_SELF'].'?s=paper">Submission ID. Title</a>';
$ssort='<a href="'.$_SERVER['PHP_SELF'].'?s=score">Score</a>';
$arsort='<a href="'.$_SERVER['PHP_SELF'].'?s=advrec">Adv&nbsp;Recom</a>';
$asort='<a href="'.$_SERVER['PHP_SELF'].'?s=advocate">Advocate</a>';
$pdsort='<a href="'.$_SERVER['PHP_SELF'].'?s=pcdecision">PC&nbsp;Decision</a>';
$stsort='<a href="'.$_SERVER['PHP_SELF'].'?s=subtype">Sub.&nbsp;Type</a>';
if (!isset($_GET['s'])) {
	$_GET['s'] = 'score';
}
switch ($_GET['s']) {
	case 'paper':
		$psort="Submission ID. Title<br />" . $OC_sortImg;
		$sort = "`paperid`";
		break;
	case 'advocate':
		$asort = "Advocate<br />" . $OC_sortImg;
		$sort = "`name_last`, `name_first`, `paperid`";
		break;
	case 'advrec':
		$arsort = "Adv&nbsp;Recom<br />" . $OC_sortImg;
		$sort = "`adv_recommendation`, `recavg` DESC, `paperid`";
		break;
	case 'pcdecision':
		$pdsort = "PC&nbsp;Decision<br />" . $OC_sortImg;
		$sort = "`accepted`, `recavg` DESC, `paperid`";
		break;
	case 'subtype':
		$stsort = "Sub.&nbsp;Type<br />" . $OC_sortImg;
		$sort = "`module_oc_subtype_type`, `recavg` DESC, `paperid`";
		break;
	case 'score':
	default:
		$ssort="Score<br />" . $OC_sortImg;
		$sort = "`recavg` DESC, `paperid`";
		$_GET['s'] = 'score';
		break;
}

// Display Filter
$aAR = array_keys($OC_acceptanceColorAR);
$aAR[] = 'Pending';
print '
<div style="text-align: center">
<form method="post" action="' . $_SERVER['PHP_SELF'] . '?s=' . safeHTMLstr($_GET['s']) . '">
Display: <select name="filter"><option value="">All</option>' . generateSelectOptions($aAR, $filter, false) . '</select>
<input type="submit" name="fsubmit" value="Filter" />
</form>
</div>
<p />
';

$extras = '';	// extra fields to retrieve from DB

if (oc_moduleActive('oc_subtype')) {
	$extras .= "`" . OCC_TABLE_PAPER . "`.`module_oc_subtype_type`, ";
}

// Get all papers and decisions
$q = "SELECT `" . OCC_TABLE_PAPER . "`.`paperid`, `" . OCC_TABLE_REVIEWER . "`.`username`, " . $extras . " CONCAT_WS(' ', `" . OCC_TABLE_REVIEWER . "`.`name_first`, `" . OCC_TABLE_REVIEWER . "`.`name_last`) AS `name`, COUNT(`" . OCC_TABLE_PAPERREVIEWER . "`.`reviewerid`) AS `cr`, COUNT(`recommendation`) AS `crec`, FORMAT(AVG(`recommendation`),2) AS `recavg`, MAX(`recommendation`) AS `recmax`, MIN(`recommendation`) AS `recmin`, `title`, `accepted`, `adv_recommendation`, MIN(`completed`) AS `reviewscomplete` FROM `" . OCC_TABLE_PAPER . "` LEFT JOIN `" . OCC_TABLE_PAPERREVIEWER . "` ON `" . OCC_TABLE_PAPERREVIEWER . "`.`paperid`=`" . OCC_TABLE_PAPER . "`.`paperid` LEFT JOIN `" . OCC_TABLE_PAPERADVOCATE . "` ON `" . OCC_TABLE_PAPERADVOCATE . "`.`paperid`=`" . OCC_TABLE_PAPER . "`.`paperid` LEFT JOIN `" . OCC_TABLE_REVIEWER . "` ON `" . OCC_TABLE_REVIEWER . "`.`reviewerid`=`" . OCC_TABLE_PAPERADVOCATE . "`.`advocateid` ";
switch($filter) {
	case '': 
		break;
	case 'Pending': 
		$q .= "WHERE (`accepted`='' OR `accepted` IS NULL) ";
		break;
	default:
		$q .= "WHERE `accepted`='" . safeHTMLstr($filter) . "' ";
		break;
}

$q .= "GROUP BY paperid ORDER BY $sort";
$r = ocsql_query($q) or err("Unable to get scores");
if (mysql_num_rows($r) == 0) {
	print '<span class="warn">No submissions available.</span><p>';
} else {
	print '
<table border="0" cellspacing="0" cellpadding="0"><tr><td valign="top">
<dl>
<dt><strong>Links:</strong></dt>
<dd><em>Score</em> &#8211; Show reviews and accept/reject submission</dd>
<dd><em>Submission ID. Title</em> &#8211; Show submission info</dd>
<p />
<dt><strong>Definitions:</strong></dt>
<dd><em>Score</em> = average reviewer recommendation score (if no score, ignored)</dd>
<dd><em>Weight</em> = Number of reviews with a recommendation score</dd>
<dd>Weight<strong>*</strong> = May include reviews marked as incomplete (<a href="list_reviews.php">unassign</a>)</dd>
<dd><em>Range</em> = Min - Max recommendation scores</dd>
';

	if ($OC_configAR['OC_paperAdvocates']) {
		print '
<dd><em>Adv Recom</em> = Advocate Recommendation</dd>
';
		if ($advcountTotal > 0) {
			print '
<p />
<dt><strong>Pending Submissions\' Advocate Recommendation Count:</strong></dt>
<dd><p />
';
			$c = 0;
			foreach ($OC_acceptanceValuesAR as $acc) {
				if ($c++ == 3) {
					print "<br />\n";
					$c = 0;
				}
				print '<nobr>' . safeHTMLstr($acc['value']) . ' - ' . (isset($advCountAR[$acc['value']]) ? $advCountAR[$acc['value']] : 0) . '</nobr> &nbsp; &nbsp; ';
			}
			print '
None - ' . (isset($advCountAR['Pending']) ? $advCountAR['Pending'] : 0) . '
</dd>
';
		}
	}

	print '
</dl>
</td><td><nobr> &nbsp; &nbsp; &nbsp; &nbsp; </nobr></td><td valign="top" style="border: 1px solid #333; padding: 3px;">
<strong>Legend:</strong><br />
<table border=0 cellspacing=10 cellpadding=0>
';

foreach ($OC_acceptanceValuesAR as $acc) {
	print '<tr><td style="background-color: #' . $acc['color'] . '" class="box"> &nbsp; &nbsp; </td><td>&nbsp; ' . safeHTMLstr($acc['value']) . ' (' . (isset($accCountAR[$acc['value']]) ? $accCountAR[$acc['value']] : 0) . ')</td></tr>';

}

	print '
<tr><td bgcolor="#eeeeee" class="box"> &nbsp; &nbsp; </td><td>&nbsp; Pending (' . (isset($accCountAR['Pending']) ? $accCountAR['Pending'] : 0) . ')</td></tr>
';

	if ($OC_configAR['OC_paperAdvocates']) {
		print '
<tr><td bgcolor="#ffffcc" class="box"> &nbsp; &nbsp; </td><td><nobr>&nbsp; Decision != Recomm.</nobr></td></tr>
';
	}

	print '
</table>
</td>
</tr></table>
<p />

<form method="post" action="' . $_SERVER['PHP_SELF'] . '?s=' . safeHTMLstr($_GET['s']) . '" name="scoresForm">
<input type="hidden" name="s" value="">
<input type="button" value="Select" onclick="selectBoxes()" /> 
<select name="boxselect" id="boxselect">
<option value="all">all submissions</option>
<option value="pending">all pending submissions</option>
<option value="gt">submissions with score &gt;=</option>
<option value="eq">submissions with score =</option>
<option value="lt">submissions with score &lt;=</option>
</select>
<input name="score" id="score" size="2" title="enter a score" onkeypress="return checkNumberFieldKeyPress(event)" />
<p />
<table border=0 cellspacing=1 cellpadding=3><tr class="rowheader"><th>&nbsp;</th><th>' . $pdsort . '</th>';

	if ($OC_configAR['OC_paperAdvocates']) {
		print '<th>' . $arsort . '</th>';
	}

	print '<th>' . $ssort . '</th><th>Weight</th><th>Range</th><th>' . $psort . '</th>';
	if (oc_moduleActive('oc_subtype')) {
		print '<th>' . $stsort . '</th>';
	}
	if ($OC_configAR['OC_paperAdvocates']) {
		print '<th>' . $asort . '</th>';
	}
	print '</tr>';
	while ($l = mysql_fetch_array($r)) {
		$advpcmatch = '';
		$scorelink = 'show_scores.php?pid=' . $l['paperid'] . '&s=' . safeHTMLstr($_GET['s']);
		print '<tr';
		if (!empty($l['accepted'])) {
			print ' bgcolor="#' . $OC_acceptanceColorAR[$l['accepted']] . '"><td style="background-color: #ccdddd"><input type="checkbox" name="subs[]" value="' . $l['paperid'] . '" id="subs' . $l['paperid'] . '" /></td><td align="center" onclick="document.location=\'' . $scorelink .'\'" id="decision' . $l['paperid'] . '">' . safeHTMLstr($l['accepted']) . '</td>'; 
			if (isset($l['adv_recommendation']) && !empty($l['adv_recommendation']) && ($l['adv_recommendation'] != $l['accepted'])) {
				$advpcmatch = ' bgcolor=#FFFFCC';
			}
		}
		else {
			print ' style="background-color: #eee"><td style="background-color: #ccdddd"><input type="checkbox" name="subs[]" value="' . $l['paperid'] . '" id="subs' . $l['paperid'] . '" /></td><td align="center" onclick="document.location=\'' . $scorelink .'\'" id="decision' . $l['paperid'] . '">&nbsp;</td>';
		}
		if (!empty($l['recavg'])) {
			$usescore = $l['recavg'];
			$useweight = $l['crec'];
			if ($l['reviewscomplete'] == 'F') { $useweight .= '*'; }
			else { $useweight .= '&nbsp;'; }
		} else {
			$usescore = '&#8211;';
			$useweight = '&nbsp;';
		}
		if ($l['recmin'] === $l['recmax']) { $userange = $l['recmin']; }
		else { $userange = $l['recmin'] . '-' . $l['recmax']; }
		if ($OC_configAR['OC_paperAdvocates']) {
			print '<td align="center"'. $advpcmatch . '>' . $l['adv_recommendation'] . '</td>';
		}
		print '<td align="center"><a href="show_scores.php?pid=' . $l['paperid'].'&s=' . safeHTMLstr($_GET['s']) . '" id="subscore' . $l['paperid'] . '">' . $usescore . '</a></td><td align="center">' . $useweight . '</td><td align="center">' . $userange . '</td><td align="left"><a href="show_paper.php?pid=' . $l['paperid'] . '">' . $l['paperid'] . '. ' . safeHTMLstr($l['title']) . '</a></td>';
		if (oc_moduleActive('oc_subtype')) {
			print '<td>' . safeHTMLstr($l['module_oc_subtype_type']) . '</td>';
		}
		if ($OC_configAR['OC_paperAdvocates']) {
			print '<td title="' . safeHTMLstr($l['username']) . '">' . safeHTMLstr($l['name']) . '</td>';
		}

		print "</tr>\n";
	}
	print '
<tr><td colspan="10"><br /><label>Change selected to <select name="subaction">';
	foreach ($OC_acceptanceValuesAR as $acc) {
		print '<option value="' . safeHTMLstr($acc['value']) . '">' . safeHTMLstr($acc['value']) . '</option>';
	}
	print '<option value="Pending">Pending</option></select></label> <input type="submit" name="asubmit" value="Go" /></td></tr>
</table>
</form>
';
}

printFooter();

?>