Files
Openconf/chair/search_submissions.php
T
2021-04-20 11:13:47 +05:30

182 lines
7.6 KiB
PHP

<?php
// +----------------------------------------------------------------------+
// | OpenConf |
// +----------------------------------------------------------------------+
// | Copyright (c) 2002-2020 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((isset($_POST['ocsubmit']) ? true : false));
require_once 'search.inc';
require_once OCC_SUBMISSION_INC_FILE;
$skipFieldTypeAR = array('password', 'file'); // field types to be skipped
$skipFieldIdAR = array('consent', 'contactid'); // field IDs to be skipped
$searchFieldNum = 3; // number of search fields to display
// Setup searchable fields
$fieldsAR = array();
$dateFieldsAR = array();
$intFieldsAR = array();
$decFieldsAR = array();
$fieldsAR['paperid'] = array(
'short' => 'Submission ID',
'type' => 'int',
'fieldset' => '',
);
$intFieldsAR[] = 'paperid';
setupFieldsAR($fieldsAR, $OC_submissionFieldSetAR, $OC_submissionFieldAR, $dateFieldsAR, $skipFieldTypeAR, $skipFieldIdAR);
$fieldsAR['submissiondate'] = array(
'short' => 'Submission Date',
'type' => 'date',
'fieldset' => 'Extras',
);
$dateFieldsAR[] = 'submissiondate';
$fieldsAR['lastupdate'] = array(
'short' => 'Last Updated',
'type' => 'date',
'fieldset' => 'Extras',
);
$dateFieldsAR[] = 'lastupdate';
$fieldsAR['accepted'] = array(
'short' => 'Acceptance Decision',
'type' => 'dropdown',
'fieldset' => 'Extras',
'values' => array()
);
// values also used for adv_recommendation below
foreach ($OC_acceptanceValuesAR as $acc) {
$fieldsAR['accepted']['values'][$acc['value']] = $acc['value'];
}
$fieldsAR['accepted']['values']['_NULL_'] = 'pending';
if ($OC_configAR['OC_paperAdvocates']) {
$fieldsAR['adv_recommendation'] = array(
'short' => 'Advocate Recommendation',
'type' => 'dropdown',
'fieldset' => 'Extras',
'values' => $fieldsAR['accepted']['values']
);
$fieldsAR['advocateid'] = array(
'short' => 'Advocate ID (assigned)',
'type' => 'int',
'fieldset' => 'Extras'
);
$intFieldsAR[] = 'advocateid';
}
$fieldsAR['reviewerid'] = array(
'short' => 'Reviewer ID (assigned)',
'type' => 'int',
'fieldset' => 'Extras'
);
$intFieldsAR[] = 'reviewerid';
$fieldsAR['score'] = array(
'short' => 'Reviews Score (average)',
'type' => 'int',
'fieldset' => 'Extras',
);
$decFieldsAR[] = 'score';
// Hooks
// -- Use 'Extras' for fieldset name
if (oc_hookSet('search-submissions')) {
foreach ($GLOBALS['OC_hooksAR']['search-submissions'] as $v) {
require_once $v;
}
}
// Search Submission POST
if (isset($_POST['ocsubmit']) && ($_POST['ocsubmit'] == 'Search')) {
displayResultsHeader();
// Check for valid submission
if (!validToken('chair')) {
print '<p class="warn">Invalid submission</p>';
} else {
$q = '';
$includeTopic = false;
$includeAdvocate = false;
$includeReviewer = false;
for ($i=1; $i <= $searchFieldNum; $i++) {
if (validateSearchFields($i, $fieldsAR, $intFieldsAR, $dateFieldsAR, $decFieldsAR)) {
$f = $_POST['searchfield'.$i];
$fval = $_POST['searchvalue'.$i];
if ($f == 'topics') {
$q .= " AND " . queryFieldWrapper(OCC_TABLE_PAPERTOPIC, 'topicid', 'dropdown', $fval, false);
$includeTopic = true;
} elseif ( ($f == 'accepted') && ($fval == '_NULL_') ) {
$q .= " AND `" . OCC_TABLE_PAPER . "`.`accepted` IS NULL";
} elseif ($OC_configAR['OC_paperAdvocates'] && ($f == 'adv_recommendation')) {
$q .= " AND " . queryFieldWrapper(OCC_TABLE_PAPERADVOCATE, 'adv_recommendation', 'dropdown', $fval, false);
$includeAdvocate = true;
} elseif ($OC_configAR['OC_paperAdvocates'] && ($f == 'advocateid')) {
$q .= " AND " . queryFieldWrapper(OCC_TABLE_PAPERADVOCATE, 'advocateid', 'int', $fval, $_POST['searchoperator'.$i]);
$includeAdvocate = true;
} elseif ($f == 'reviewerid') {
$q .= " AND " . queryFieldWrapper(OCC_TABLE_PAPERREVIEWER, 'reviewerid', 'int', $fval, $_POST['searchoperator'.$i]);
$includeReviewer = true;
} elseif ($f == 'score') {
$q .= " AND `" . OCC_TABLE_PAPER . "`.`paperid` IN (SELECT `" . OCC_TABLE_PAPERREVIEWER . "`.`paperid` FROM `" . OCC_TABLE_PAPERREVIEWER . "` GROUP BY `" . OCC_TABLE_PAPERREVIEWER . "`.`paperid` HAVING " . queryFieldWrapper(OCC_TABLE_PAPERREVIEWER, 'score', 'dropdown', $fval, $_POST['searchoperator'.$i], "AVG(`" . OCC_TABLE_PAPERREVIEWER . "`.`score`)") . ")";
} elseif (in_array($f, $OC_submissionFieldSetAR['fs_authors']['fields'])) {
$q .= " AND " . queryFieldWrapper(OCC_TABLE_AUTHOR, $f, $fieldsAR[$f]['type'], $fval, $_POST['searchoperator'.$i]);
} else {
$q .= " AND " . queryFieldWrapper(OCC_TABLE_PAPER, $f, $fieldsAR[$f]['type'], $fval, $_POST['searchoperator'.$i]);
}
}
}
// Display results
if (!empty($q)) {
$q = "SELECT `" . OCC_TABLE_PAPER . "`.`paperid`, `" . OCC_TABLE_PAPER . "`.`title`, `" . OCC_TABLE_PAPER . "`.`type`, CONCAT_WS(' ', `" . OCC_TABLE_AUTHOR . "`.`name_first`, `" . OCC_TABLE_AUTHOR . "`.`name_last`) AS `name`, `" . OCC_TABLE_AUTHOR . "`.`email` FROM `" . OCC_TABLE_PAPER . "`, `" . OCC_TABLE_AUTHOR . "`" . ($includeTopic ? (", `" . OCC_TABLE_PAPERTOPIC . "`") : '') . ($includeAdvocate ? (", `" . OCC_TABLE_PAPERADVOCATE . "`") : '') . ($includeReviewer ? (", `" . OCC_TABLE_PAPERREVIEWER . "`") : '') . " WHERE `" . OCC_TABLE_PAPER . "`.`paperid`=`" . OCC_TABLE_AUTHOR . "`.`paperid` AND `" . OCC_TABLE_PAPER . "`.`contactid`=`" . OCC_TABLE_AUTHOR . "`.`position` " . ($includeTopic ? ("AND `" . OCC_TABLE_PAPER . "`.`paperid`=`" . OCC_TABLE_PAPERTOPIC . "`.`paperid` ") : '') . ($includeAdvocate ? ("AND `" . OCC_TABLE_PAPER . "`.`paperid`=`" . OCC_TABLE_PAPERADVOCATE . "`.`paperid` ") : '') . ($includeReviewer ? ("AND `" . OCC_TABLE_PAPER . "`.`paperid`=`" . OCC_TABLE_PAPERREVIEWER . "`.`paperid` ") : '') . $q . " GROUP BY `paperid` ORDER BY `paperid`";
if ($r = ocsql_query($q)) {
if (($num = ocsql_num_rows($r)) > 0) {
print '
<p style="font-size: 0.9em">Matches: ' . safeHTMLstr($num) . '</p>
<table border="0" cellspacing="1" cellpadding="4" cols="4">
<tr class="rowheader"><th scope="col">ID</th><th scope="col">Title</th><th scope="col">Contact</th>' . (isset($fieldsAR['type']) ? '<th scope="col">Type</th>' : '') . '</tr>';
$emailAddresses = array();
$row = 1;
while ($l = ocsql_fetch_assoc($r)) {
print '<tr class="row' . $row . '"><td align="right">' . safeHTMLstr($l['paperid']) . '</td><td><a href="show_paper.php?pid=' . safeHTMLstr($l['paperid']) . '" target="_blank" title="open submission info page in new tab/window">' . safeHTMLstr($l['title']) . '</a></td><td>' . safeHTMLstr($l['name']) . '</td>' . (isset($fieldsAR['type']) ? ('<td>' . safeHTMLstr($l['type']) . '</td>') : '') . '</tr>';
if ($row==1) { $row=2; } else { $row=1; }
$emailAddresses[] = $l['paperid'] . '/' . $l['email'];
}
print '
</table>
';
displayEmailForm($emailAddresses, 'authors_all', 'Email Contact Author(s)');
} else {
print '<p class="warn">No matches found</p>';
}
} else {
print '<p class="warn">Error encoutered while searching</p>';
}
} else {
print '<p class="warn">Missing or invalid search parameters</p>';
}
}
displayResultsFooter();
exit;
}
// Display search form
printHeader('Submissions Search', 1);
displaySearchForm($fieldsAR, $dateFieldsAR, $intFieldsAR, $decFieldsAR, $searchFieldNum);
printFooter();
?>