function echo_editable_html(PaperOptionValue $ov, $reqv, PaperTable $pt) { $reqv = (string) ($reqv === null ? $ov->data : $reqv); $pt->echo_editable_option_papt($this); echo '<div class="papev">', Ht::textarea("opt{$this->id}", $reqv, ["class" => "papertext", "rows" => max($this->display_space, 1), "cols" => 60, "onchange" => "hiliter(this)", "spellcheck" => "true"]), "</div></div>\n\n"; }
echo " (<a class='q' href=\"" . hoturl("search", "q=pri:" . urlencode($pc->email)) . "\">{$numPrimary} primary</a>)"; } } echo "</div><hr class=\"c\" /></div></div>\n"; } echo "</div>\n", "<div class='aa' style='margin-bottom:0'>", Ht::submit("update", "Save assignments", array("class" => "bb")), " ", Ht::submit("cancel", "Cancel"), " <span id='assresult' style='padding-left:1em'></span></div>\n\n", '</div></form>'; } echo "</div></div>\n"; // add external reviewers echo Ht::form($loginUrl), '<div class="aahc revcard"><div class="revcard_head">', "<h3>Request an external review</h3>\n", "<div class='hint'>External reviewers get access to their assigned papers, including "; if (setting("extrev_view") >= 2) { echo "the other reviewers' identities and "; } echo "any eventual decision. Before requesting an external review,\n you should generally check personally whether they are interested."; if ($Me->allow_administer($prow)) { echo "\nTo create a review with no associated reviewer, leave Name and Email blank."; } echo '</div></div><div class="revcard_body">'; echo "<div class='f-i'><div class='f-ix'>\n <div class='f-c'>Name</div>\n <div class='f-e'><input type='text' name='name' value=\"", htmlspecialchars(defval($_REQUEST, "name", "")), "\" size='32' tabindex='1' /></div>\n</div><div class='f-ix'>\n <div class='f-c", isset($Error["email"]) ? " error" : "", "'>Email</div>\n <div class='f-e'><input type='text' name='email' value=\"", htmlspecialchars(defval($_REQUEST, "email", "")), "\" size='28' tabindex='1' /></div>\n</div><hr class=\"c\" /></div>\n\n"; // reason area $null_mailer = new HotCRPMailer(); $reqbody = $null_mailer->expand_template("requestreview", false); if (strpos($reqbody["body"], "%REASON%") !== false) { echo "<div class='f-i'>\n <div class='f-c'>Note to reviewer <span class='f-cx'>(optional)</span></div>\n <div class='f-e'>", Ht::textarea("reason", @$_REQUEST["reason"], array("class" => "papertext", "rows" => 2, "cols" => 60, "tabindex" => 1, "spellcheck" => "true")), "</div><hr class=\"c\" /></div>\n\n"; } echo "<div class='f-i'>\n", Ht::submit("add", "Request review", array("tabindex" => 2)), "</div>\n\n"; if ($Me->can_administer($prow)) { echo "<div class='f-i'>\n ", Ht::checkbox("override"), " ", Ht::label("Override deadlines and any previous refusal"), "\n</div>\n"; } echo "</div></div></form>\n"; $Conf->footer();
private function echo_message_base($name, $description, $hint, $class) { global $Conf; $si = $this->si($name); $rows = $si ? $si->size : 0 ?: 10; $default = $Conf->message_default_html($name); $current = $this->curv($name, $default); $description = '<a class="q" href="#" onclick="return foldup(this,event)">' . expander(null, 0) . $description . '</a>'; echo '<div class="fold', $current == $default ? "c" : "o", '" data-fold="true">', '<div class="', $class, ' childfold" onclick="return foldup(this,event)">', $this->label($name, $description), ' <span class="f-cx fx">(HTML allowed)</span></div>', $hint, Ht::textarea($name, $current, $this->sjs($name, array("class" => "fx", "rows" => $rows, "cols" => 80))), '</div><div class="g"></div>', "\n"; }
if (!@$_REQUEST["newrev_since"] && ($t = $Conf->setting("pcrev_informtime"))) { $_REQUEST["newrev_since"] = $Conf->parseableTime($t, true); } echo 'Assignments since: ', Ht::entry("newrev_since", @$_REQUEST["newrev_since"], array("placeholder" => "(all)", "size" => 30)), '</div>'; echo '<div class="fx9 g"></div></div>'; $Conf->footerScript("setmailpsel(\$\$(\"recipients\"))"); echo "</td></tr>\n"; // ** CC, REPLY-TO if ($Me->is_manager()) { foreach (Mailer::$email_fields as $lcfield => $field) { if ($lcfield !== "to" && $lcfield !== "bcc") { $xfield = $lcfield == "reply-to" ? "replyto" : $lcfield; $ec = isset($Error[$xfield]) ? " error" : ""; echo " <tr><td class='mhnp{$ec} nw'>{$field}:</td><td class='mhdp{$ec}'>", "<input type='text' class='textlite-tt' name='{$xfield}' value=\"", htmlspecialchars($_REQUEST[$xfield]), "\" size='64' />", $xfield == "replyto" ? "<div class='g'></div>" : "", "</td></tr>\n\n"; } } } // ** SUBJECT echo " <tr><td class='mhnp nw'>Subject:</td><td class='mhdp'>", "<tt>[", htmlspecialchars(Conf::$gShortName), "] </tt><input type='text' class='textlite-tt' name='subject' value=\"", htmlspecialchars($_REQUEST["subject"]), "\" size='64' /></td></tr>\n\n <tr><td></td><td class='mhb'>\n", Ht::textarea("emailBody", $_REQUEST["emailBody"], array("class" => "tt", "rows" => 20, "cols" => 80, "spellcheck" => "true")), "</td></tr>\n</table></div>\n\n"; if ($Me->privChair) { $result = $Conf->qe("select * from MailLog order by mailId desc limit 18"); if (edb_nrows($result)) { echo "<div style='padding-top:12px'>", "<strong>Recent mails:</strong>\n"; while ($row = edb_orow($result)) { echo "<div class='mhdd'><div style='position:relative;overflow:hidden'>", "<div style='position:absolute;white-space:nowrap'><a class='q' href=\"", hoturl("mail", "fromlog=" . $row->mailId), "\">", htmlspecialchars($row->subject), " – <span class='dim'>", htmlspecialchars($row->emailBody), "</span></a></div>", "<br /></div></div>\n"; } echo "</div>\n\n"; } } echo "<div class='aa' style='clear:both'>\n", Ht::submit("Prepare mail"), " <span class='hint'>You’ll be able to review the mails before they are sent.</span>\n</div>\n\n\n<div id='mailref'>Keywords enclosed in percent signs, such as <code>%NAME%</code> or <code>%REVIEWDEADLINE%</code>, are expanded for each mail. Use the following syntax:\n<div class='g'></div>\n<table>\n<tr><td class='plholder'><table>\n<tr><td class='lxcaption'><code>%URL%</code></td>\n <td class='llentry'>Site URL.</td></tr>\n<tr><td class='lxcaption'><code>%LOGINURL%</code></td>\n <td class='llentry'>URL for recipient to log in to the site.</td></tr>\n<tr><td class='lxcaption'><code>%NUMSUBMITTED%</code></td>\n <td class='llentry'>Number of papers submitted.</td></tr>\n<tr><td class='lxcaption'><code>%NUMACCEPTED%</code></td>\n <td class='llentry'>Number of papers accepted.</td></tr>\n<tr><td class='lxcaption'><code>%NAME%</code></td>\n <td class='llentry'>Full name of recipient.</td></tr>\n<tr><td class='lxcaption'><code>%FIRST%</code>, <code>%LAST%</code></td>\n <td class='llentry'>First and last names, if any, of recipient.</td></tr>\n<tr><td class='lxcaption'><code>%EMAIL%</code></td>\n <td class='llentry'>Email address of recipient.</td></tr>\n<tr><td class='lxcaption'><code>%REVIEWDEADLINE%</code></td>\n <td class='llentry'>Reviewing deadline appropriate for recipient.</td></tr>\n</table></td><td class='plholder'><table>\n<tr><td class='lxcaption'><code>%NUMBER%</code></td>\n <td class='llentry'>Paper number relevant for mail.</td></tr>\n<tr><td class='lxcaption'><code>%TITLE%</code></td>\n <td class='llentry'>Paper title.</td></tr>\n<tr><td class='lxcaption'><code>%TITLEHINT%</code></td>\n <td class='llentry'>First couple words of paper title (useful for mail subject).</td></tr>\n<tr><td class='lxcaption'><code>%OPT(AUTHORS)%</code></td>\n <td class='llentry'>Paper authors (if recipient is allowed to see the authors).</td></tr>\n<tr><td><div class='g'></div></td></tr>\n<tr><td class='lxcaption'><code>%REVIEWS%</code></td>\n <td class='llentry'>Pretty-printed paper reviews.</td></tr>\n<tr><td class='lxcaption'><code>%COMMENTS%</code></td>\n <td class='llentry'>Pretty-printed paper comments, if any.</td></tr>\n<tr><td class='lxcaption'><code>%COMMENTS(TAG)%</code></td>\n <td class='llentry'>Comments tagged #TAG, if any.</td></tr>\n<tr><td><div class='g'></div></td></tr>\n<tr><td class='lxcaption'><code>%IF(SHEPHERD)%...%ENDIF%</code></td>\n <td class='llentry'>Include text only if a shepherd is assigned.</td></tr>\n<tr><td class='lxcaption'><code>%SHEPHERD%</code></td>\n <td class='llentry'>Shepherd name and email, if any.</td></tr>\n<tr><td class='lxcaption'><code>%SHEPHERDNAME%</code></td>\n <td class='llentry'>Shepherd name, if any.</td></tr>\n<tr><td class='lxcaption'><code>%SHEPHERDEMAIL%</code></td>\n <td class='llentry'>Shepherd email, if any.</td></tr>\n<tr><td class='lxcaption'><code>%TAGVALUE(t)%</code></td>\n <td class='llentry'>Value of paper’s tag <code>t</code>.</td></tr>\n</table></td></tr>\n</table></div>\n\n</div></form>\n"; $Conf->footer();
function render($sv) { global $Conf, $Opt; echo "<h3 class=\"settings\">Abstract and PDF</h3>\n"; echo Ht::select("sub_noabstract", [0 => "Abstract required", 2 => "Abstract optional", 1 => "No abstract"], opt_yes_no_optional("noAbstract")); echo " <span class=\"barsep\">·</span> ", Ht::select("sub_nopapers", array(0 => "PDF upload required", 2 => "PDF upload optional", 1 => "No PDF"), opt_yes_no_optional("noPapers")); if (is_executable("src/banal")) { echo "<div class='g'></div>", Ht::hidden("has_sub_banal", 1), "<table id='foldbanal' class='", $sv->curv("sub_banal") ? "foldo" : "foldc", "'>"; $sv->echo_checkbox_row("sub_banal", "PDF format checker<span class='fx'>:</span>", "void fold('banal',!this.checked)"); echo '<tr class="fx"><td></td><td class="top"><table class="secondary-settings"><tbody>'; $bsetting = explode(";", preg_replace("/>.*/", "", $Conf->setting_data("sub_banal", ""))); foreach (["papersize", "pagelimit", "columns", "textblock", "bodyfontsize", "bodyleading"] as $i => $name) { $val = get($bsetting, $i, ""); $sv->set_oldv("sub_banal_{$name}", $val == "" ? "N/A" : $val); } $sv->echo_entry_row("sub_banal_papersize", "Paper size", "Examples: “letter”, “A4”, “8.5in x 14in”,<br />“letter OR A4”"); $sv->echo_entry_row("sub_banal_pagelimit", "Page limit"); $sv->echo_entry_row("sub_banal_textblock", "Text block", "Examples: “6.5in x 9in”, “1in margins”"); echo '</tbody></table></td>', '<td><span class="sep"></span></td>', '<td class="top"><table class="secondary-settings"><tbody>'; $sv->echo_entry_row("sub_banal_bodyfontsize", "Minimum body font size", null, " pt"); $sv->echo_entry_row("sub_banal_bodyleading", "Minimum leading", null, " pt"); $sv->echo_entry_row("sub_banal_columns", "Columns"); echo "</tbody></table></td></tr></table>"; } echo "<h3 class=\"settings\">Conflicts & collaborators</h3>\n", "<table id=\"foldpcconf\" class=\"fold", $sv->curv("sub_pcconf") ? "o" : "c", "\">\n"; $sv->echo_checkbox_row("sub_pcconf", "Collect authors’ PC conflicts", "void fold('pcconf',!this.checked)"); echo "<tr class='fx'><td></td><td>"; $conf = array(); foreach (Conflict::$type_descriptions as $n => $d) { if ($n) { $conf[] = "“{$d}”"; } } $sv->echo_checkbox("sub_pcconfsel", "Require conflict descriptions (" . commajoin($conf, "or") . ")"); echo "</td></tr>\n"; $sv->echo_checkbox_row("sub_collab", "Collect authors’ other collaborators as text"); echo "</table>\n"; echo "<h3 class=\"settings\">Submission options</h3>\n"; echo "Options are selected by authors at submission time. Examples have included “PC-authored paper,” “Consider this paper for a Best Student Paper award,” and “Allow the shadow PC to see this paper.” The “option name” should be brief (“PC paper,” “Best Student Paper,” “Shadow PC”). The optional description can explain further and may use XHTML. "; echo "Add options one at a time.\n"; echo "<div class='g'></div>\n", Ht::hidden("has_options", 1); $sep = ""; $all_options = array_merge(PaperOption::nonfixed_option_list()); // get our own iterator foreach ($all_options as $o) { echo $sep; $this->render_option($sv, $o); $sep = "\n<div style=\"margin-top:3em\"></div>\n"; } echo $sep; $this->render_option($sv, null); // Topics // load topic interests $qinterest = $Conf->query_topic_interest(); $result = $Conf->q("select topicId, if({$qinterest}>0,1,0), count(*) from TopicInterest where {$qinterest}!=0 group by topicId, {$qinterest}>0"); $interests = array(); $ninterests = 0; while ($row = edb_row($result)) { if (!isset($interests[$row[0]])) { $interests[$row[0]] = array(); } $interests[$row[0]][$row[1]] = $row[2]; $ninterests += $row[2] ? 1 : 0; } echo "<h3 class=\"settings g\">Topics</h3>\n"; echo "Enter topics one per line. Authors select the topics that apply to their papers; PC members use this information to find papers they'll want to review. To delete a topic, delete its name.\n"; echo "<div class='g'></div>", Ht::hidden("has_topics", 1), "<table id='newtoptable' class='", $ninterests ? "foldo" : "foldc", "'>"; echo "<tr><th colspan='2'></th><th class='fx'><small>Low</small></th><th class='fx'><small>High</small></th></tr>"; $td1 = '<td class="lcaption">Current</td>'; foreach ($Conf->topic_map() as $tid => $tname) { if ($sv->use_req() && isset($sv->req["top{$tid}"])) { $tname = $sv->req["top{$tid}"]; } echo '<tr>', $td1, '<td class="lentry">', Ht::entry("top{$tid}", $tname, array("size" => 40, "style" => "width:20em")), '</td>'; $tinterests = defval($interests, $tid, array()); echo '<td class="fx rpentry">', get($tinterests, 0) ? '<span class="topic-2">' . $tinterests[0] . "</span>" : "", "</td>", '<td class="fx rpentry">', get($tinterests, 1) ? '<span class="topic2">' . $tinterests[1] . "</span>" : "", "</td>"; if ($td1 !== "<td></td>") { // example search echo "<td class='llentry' style='vertical-align:top' rowspan='40'><div class='f-i'>", "<div class='f-c'>Example search</div>"; $oabbrev = strtolower($tname); if (strstr($oabbrev, " ") !== false) { $oabbrev = "\"{$oabbrev}\""; } echo "“<a href=\"", hoturl("search", "q=topic:" . urlencode($oabbrev)), "\">", "topic:", htmlspecialchars($oabbrev), "</a>”", "<div class='hint'>Topic abbreviations are also allowed.</div>"; if ($ninterests) { echo "<a class='hint fn' href=\"#\" onclick=\"return fold('newtoptable')\">Show PC interest counts</a>", "<a class='hint fx' href=\"#\" onclick=\"return fold('newtoptable')\">Hide PC interest counts</a>"; } echo "</div></td>"; } echo "</tr>\n"; $td1 = "<td></td>"; } echo '<tr><td class="lcaption top">New<br><span class="hint">Enter one topic per line.</span></td><td class="lentry top">', Ht::textarea("topnew", $sv->use_req() ? get($sv->req, "topnew") : "", array("cols" => 40, "rows" => 2, "style" => "width:20em")), '</td></tr></table>'; }
if (isset($_REQUEST["saveassignment"]) && check_post() && isset($_POST["file"]) && get($_POST, "assignment_size_estimate") >= 1000) { complete_assignment("keep_browser_alive"); finish_browser_alive(); } echo Ht::form_div(hoturl_post("bulkassign", "upload=1"), array("divstyle" => "margin-top:1em")); // Upload echo '<div class="f-contain"><div class="f-i"><div class="f-e">', Ht::textarea("bulkentry", req_s("bulkentry"), ["rows" => 1, "cols" => 80, "placeholder" => "Enter assignments"]), '</div></div></div>'; echo '<div class="g"><strong>OR</strong> ', '<input type="file" name="bulk" accept="text/plain,text/csv" size="30" /></div>'; echo '<div id="foldoptions" class="lg foldc fold2o">', 'By default, assign ', Ht::select("default_action", array("primary" => "primary reviews", "secondary" => "secondary reviews", "pcreview" => "optional PC reviews", "review" => "external reviews", "conflict" => "PC conflicts", "lead" => "discussion leads", "shepherd" => "shepherds", "tag" => "add tags", "settag" => "replace tags", "preference" => "reviewer preferences"), defval($_REQUEST, "default_action", "primary"), array("id" => "tsel", "onchange" => "fold(\"options\",this.value!=\"review\");fold(\"options\",!/^(?:primary|secondary|(?:pc)?review)\$/.test(this.value),2)")); $rev_rounds = $Conf->round_selector_options(); if (count($rev_rounds) > 1) { echo '<span class="fx2"> in round ', Ht::select("rev_roundtag", $rev_rounds, $_REQUEST["rev_roundtag"] ?: "unnamed"), '</span>'; } else { if (!get($rev_rounds, "unnamed")) { echo '<span class="fx2"> in round ', $Conf->current_round_name(), '</span>'; } } echo '<div class="g"></div>', "\n"; $requestreview_template = $null_mailer->expand_template("requestreview"); echo Ht::hidden("requestreview_subject", $requestreview_template["subject"]); if (isset($_REQUEST["requestreview_body"])) { $t = $_REQUEST["requestreview_body"]; } else { $t = $requestreview_template["body"]; } echo "<table class='fx'><tr><td>", Ht::checkbox("requestreview_notify", 1, true), " </td><td>", Ht::label("Send email to external reviewers:"), "</td></tr>\n<tr><td></td><td>", Ht::textarea("requestreview_body", $t, array("class" => "tt", "cols" => 80, "rows" => 20, "spellcheck" => "true")), "</td></tr></table>\n"; echo '<div class="g"></div><div class="aa">', Ht::submit("Prepare assignments"), " <span class='hint'>You’ll be able to check the assignment before it is saved.</span></div>\n"; echo '<div style="margin-top:1.5em"><a href="', hoturl_post("search", "t=manager&q=&get=pcassignments&p=all"), '">Download current PC assignments</a></div>'; echo "</div></form>\n\n<hr style='margin-top:1em' />\n\n<div class='helppagetext'>\n<h3>Instructions</h3>\n\n<p>Upload a comma-separated value file to prepare an assignment of reviews,\nconflicts, leads, shepherds, and tags. HotCRP calculates the minimal changes\nbetween the current state and the requested assignment; you’ll confirm those\nchanges before they are committed.</p>\n\n<p>A simple example:</p>\n\n<pre class='entryexample'>paper,assignment,email\n1,primary,man@alice.org\n2,secondary,slugger@manny.com\n1,primary,slugger@manny.com</pre>\n\n<p>This assigns PC members man@alice.org and slugger@manny.com as primary\nreviewers for paper #1, and slugger@manny.com as a secondary\nreviewer for paper #2. Errors will be reported if those users aren’t PC\nmembers, or if they have conflicts with their assigned papers.</p>\n\n<p>A more complex example:</p>\n\n<pre class='entryexample'>paper,assignment,email,round\nall,clearreview,all,R2\n1,primary,man@alice.org,R2\n10,primary,slugger@manny.com,R2\n#manny OR #ramirez,primary,slugger@manny.com,R2</pre>\n\n<p>The first assignment line clears all review assignments in\nround R2. (Review assignments in other rounds are left alone.) The next\nlines assign man@alice.org as a primary reviewer for paper #1, and slugger@manny.com\nas a primary reviewer for paper #10. The last line assigns slugger@manny.com\nas a primary reviewer for all papers tagged #manny or #ramirez.</p>\n\n<p>Assignment types are:</p>\n\n<dl class=\"spaced\">\n<dt><code>review</code></dt>\n\n<dd>Assign a review. The <code>email</code> and/or <code>name</code> columns\nlocate the user. (<code>first</code> and <code>last</code> columns may be used\nin place of <code>name</code>.) The <code>reviewtype</code> column sets the\nreview type; it can be <code>primary</code>, <code>secondary</code>,\n<code>pcreview</code> (optional PC review), or <code>external</code>, or\n<code>clear</code> to unassign the review. The optional\n<code>round</code> column sets the review round.\n\n<p>Only PC members can be assigned primary, secondary, and optional PC\nreviews. Accounts will be created for new external reviewers as necessary. The\n<code>clear</code> action doesn’t delete reviews that have already been\nentered.</p>\n\n<p>Assignments can create new reviews or change existing reviews. Use\n“<code>any</code>” or “old:new” syntax in the <code>round</code> and/or\n<code>reviewtype</code> columns to restrict assignments to existing reviews.\nFor example, to create a new assignment or modify an existing review:</p>\n\n<pre class=\"entryexample\">paper,assignment,email,reviewtype,round\n1,review,drew@harvard.edu,primary,R2</pre>\n\n<p>To modify an existing review’s round (“<code>any</code>” restricts the\nassignment to existing reviews):</p>\n\n<pre class=\"entryexample\">paper,assignment,email,reviewtype,round\n1,review,drew@harvard.edu,any,R2</pre>\n\n<p>To change an existing review from round R1 to round R2:</p>\n\n<pre class=\"entryexample\">paper,assignment,email,reviewtype,round\n1,review,drew@harvard.edu,any,R1:R2</pre>\n\n<p>To change all round-R1 primary reviews to round R2:</p>\n\n<pre class=\"entryexample\">paper,assignment,email,reviewtype,round\nall,review,all,primary,R1:R2</pre>\n\n</dd>\n\n<dt><code>primary</code>, <code>secondary</code>, <code>pcreview</code>,\n<code>external</code>, <code>clearreview</code></dt>\n<dd>Like <code>review</code>, assign a primary, secondary, optional PC, or\nexternal review, or clear existing reviews.</dd>\n\n<dt><code>unsubmitreview</code></dt>\n<dd>Unsubmit a submitted review. The <code>email</code>, <code>name</code>,\n<code>reviewtype</code>, and <code>round</code> columns locate the review.</dd>\n\n<dt><code>lead</code></dt>\n<dd>Set the discussion lead. The <code>email</code>, <code>name</code>,\nand/or <code>user</code> columns locate the PC user. To clear the discussion lead,\nuse email <code>none</code> or assignment type <code>clearlead</code>.</dd>\n\n<dt><code>shepherd</code></dt>\n<dd>Set the shepherd. The <code>email</code>, <code>name</code>,\nand/or <code>user</code> columns locate the PC user. To clear the shepherd,\nuse email <code>none</code> or assignment type <code>clearshepherd</code>.</dd>\n\n<dt><code>conflict</code></dt>\n<dd>Mark a PC conflict. The <code>email</code>, <code>name</code>,\nand/or <code>user</code> columns locate the PC user. To clear a conflict,\nuse assignment type <code>clearconflict</code>.</dd>\n\n<dt><code>tag</code></dt>\n<dd>Add a tag. The <code>tag</code> column names the tag and the optional\n<code>value</code> column sets the tag value.\nTo clear a tag, use assignment type <code>cleartag</code> or value <code>none</code>.</dd>\n\n<dt><code>preference</code></dt>\n<dd>Set reviewer preference and expertise. The <code>preference</code> column\ngives the preference value.</dd>\n</dl>\n\n</div>\n"; $Conf->footerScript('$("#tsel").trigger("change");$("textarea").autogrow()'); $Conf->footer();
foreach ($buttons as $b) { $x = is_array($b) ? $b[1] : ""; echo " <td class='ptb_explain'>", $x, "</td>\n"; } echo " </tr>\n </table></div>\n"; echo "</div>\n", "</div>\n", "</form>\n"; if ($newProfile) { echo '</div><div class="fx9">'; echo Ht::form(hoturl_post("profile", join("&", $form_params)), array("id" => "accountform", "autocomplete" => "off")), "<div class='profiletext aahc", $UserStatus->nerrors ? " alert" : "", "'>\n", Ht::password("chromefooler", "", array("style" => "display:none")); create_modes(true); $bulkentry = @$_REQUEST["bulkentry"]; if ($bulkentry === null && ($session_bulkentry = $Conf->session("profile_bulkentry")) && is_array($session_bulkentry) && $session_bulkentry[0] > $Now - 5) { $bulkentry = $session_bulkentry[1]; $Conf->save_session("profile_bulkentry", null); } echo '<div class="f-contain"><div class="f-i"><div class="f-e">', Ht::textarea("bulkentry", $bulkentry, ["rows" => 1, "cols" => 80, "placeholder" => "Enter users one per line"]), '</div></div></div>'; echo '<div class="g"><strong>OR</strong> ', '<input type="file" name="bulk" size="30" /></div>'; echo '<div>', Ht::submit("bulkregister", "Save accounts"), '</div>'; echo "<p>Enter or upload CSV user data, including a header to explain your format. For example:</p>\n", '<pre class="entryexample"> name,email,affiliation,roles John Adams,john@earbox.org,UC Berkeley,pc "Adams, John Quincy",quincy@whitehouse.gov </pre>', "\n", '<p>Or just enter an email address per line.</p>', '<p>Supported CSV fields include:</p><table>', '<tr><td class="lmcaption"><code>name</code></td>', '<td>User name</td></tr>', '<tr><td class="lmcaption"><code>first</code></td>', '<td>First name</td></tr>', '<tr><td class="lmcaption"><code>last</code></td>', '<td>Last name</td></tr>', '<tr><td class="lmcaption"><code>affiliation</code></td>', '<td>Affiliation</td></tr>', '<tr><td class="lmcaption"><code>roles</code></td>', '<td>User roles: blank, “<code>pc</code>”, “<code>chair</code>”, or “<code>sysadmin</code>”</td></tr>', '<tr><td class="lmcaption"><code>tags</code></td>', '<td>PC tags (space-separated)</td></tr>', '<tr><td class="lmcaption"><code>add_tags</code>, <code>remove_tags</code></td>', '<td>PC tags to add or remove</td></tr>', '<tr><td class="lmcaption"><code>collaborators</code></td>', '<td>Collaborators</td></tr>', '<tr><td class="lmcaption"><code>follow</code></td>', '<td>Email notification: blank, “<code>reviews</code>”, “<code>allreviews</code>”</td></tr>', "</table>\n"; echo '</div></form></div></div>'; } if ($newProfile) { $Conf->footerScript('if(/bulk/.test(location.hash))fold("bulk",false,9)'); } $Conf->footerScript('hiliter_children("#accountform");$("textarea").autogrow()'); $Conf->footerScript('crpfocus("account")'); $Conf->footer();
private function _review_buttons($prow, $rrow, $type, $reviewPostLink) { global $Conf, $Me; $buttons = array(); // refuse? if ($type == "top" && $rrow && !$rrow->reviewModified && $rrow->reviewType < REVIEW_SECONDARY) { $buttons[] = Ht::submit("accept", "Accept review", array("class" => "b")); $buttons[] = Ht::button("Decline review", array("class" => "b", "onclick" => "popup(this,'ref',0)")); // Also see $_REQUEST["refuse"] case in review.php. $Conf->footerHtml("<div id='popup_ref' class='popupc'>" . Ht::form_div($reviewPostLink) . Ht::hidden("refuse", "refuse") . "<p style='margin:0 0 0.3em'>Select “Decline review” to decline this review. Thank you for keeping us informed.</p>" . Ht::textarea("reason", null, array("id" => "refusereviewreason", "rows" => 3, "cols" => 40, "placeholder" => "Optional explanation", "spellcheck" => "true")) . '<div class="popup_actions">' . Ht::js_button("Cancel", "popup(null,'ref',1)") . Ht::submit("Decline review", array("class" => "bb")) . "</div></div></form></div>", "declinereviewform"); $buttons[] = ""; } $submitted = $rrow && $rrow->reviewSubmitted; if (!$Conf->time_review($rrow, $Me->act_pc($prow, true), true)) { $whyNot = array("deadline" => $rrow && $rrow->reviewType < REVIEW_PC ? "extrev_hard" : "pcrev_hard"); $override_text = whyNotText($whyNot, "review"); if (!$submitted) { $buttons[] = array(Ht::js_button("Submit review", "override_deadlines(this)", array("class" => "bb", "data-override-text" => $override_text, "data-override-submit" => "submitreview")), "(admin only)"); $buttons[] = array(Ht::js_button("Save as draft", "override_deadlines(this)", array("data-override-text" => $override_text, "data-override-submit" => "savedraft")), "(admin only)"); } else { $buttons[] = array(Ht::js_button("Save changes", "override_deadlines(this)", array("class" => "bb", "data-override-text" => $override_text, "data-override-submit" => "submitreview")), "(admin only)"); } } else { if (!$submitted) { $buttons[] = Ht::submit("submitreview", "Submit review", array("class" => "bb")); $buttons[] = Ht::submit("savedraft", "Save as draft"); } else { $buttons[] = Ht::submit("submitreview", "Save changes", array("class" => "bb")); } } if ($rrow && $type == "bottom" && $Me->allow_administer($prow)) { $buttons[] = ""; if ($submitted) { $buttons[] = array(Ht::submit("unsubmitreview", "Unsubmit review"), "(admin only)"); } $buttons[] = array(Ht::js_button("Delete review", "popup(this,'d',0)"), "(admin only)"); $Conf->footerHtml("<div id='popup_d' class='popupc'>\n <p>Be careful: This will permanently delete all information about this\n review assignment from the database and <strong>cannot be\n undone</strong>.</p>\n " . Ht::form_div($reviewPostLink, array("divclass" => "popup_actions")) . Ht::js_button("Cancel", "popup(null,'d',1)") . Ht::submit("deletereview", "Delete review", array("class" => "bb")) . "</div></form></div>"); } return $buttons; }
confHeader(); $Conf->footer(); exit; } if (isset($_REQUEST["refuse"]) || isset($_REQUEST["decline"])) { if (!$paperTable->editrrow || !$Me->is_my_review($paperTable->editrrow) && !$Me->can_administer($prow)) { Conf::msg_error("This review was not assigned to you, so you can’t decline it."); } else { if ($paperTable->editrrow->reviewType >= REVIEW_SECONDARY) { Conf::msg_error("PC members can’t decline their primary or secondary reviews. Contact the PC chairs directly if you really cannot finish this review."); } else { if ($paperTable->editrrow->reviewSubmitted) { Conf::msg_error("This review has already been submitted; you can’t decline it now."); } else { if (defval($_REQUEST, "refuse") == "1" || defval($_REQUEST, "decline") == "1") { $Conf->confirmMsg("<p>Select “Decline review” to decline this review (you may enter a brief explanation, if you’d like). Thank you for telling us that you cannot complete your review.</p><div class='g'></div><form method='post' action=\"" . hoturl_post("review", "p=" . $paperTable->prow->paperId . "&r=" . $paperTable->editrrow->reviewId) . "\" enctype='multipart/form-data' accept-charset='UTF-8'><div class='aahc'>" . Ht::hidden("refuse", "refuse") . " " . Ht::textarea("reason", "", array("rows" => 3, "cols" => 40, "spellcheck" => "true")) . "\n <span class='sep'></span>" . Ht::submit("Decline review") . "</div></form>"); } else { refuseReview(); Dbl::qe_raw("unlock tables"); loadRows(); } } } } } if (isset($_REQUEST["accept"])) { if (!$paperTable->editrrow || !$Me->is_my_review($paperTable->editrrow) && !$Me->can_administer($prow)) { Conf::msg_error("This review was not assigned to you, so you cannot confirm your intention to write it."); } else { if ($paperTable->editrrow->reviewModified <= 0) { Dbl::qe_raw("update PaperReview set reviewModified=1 where reviewId=" . $paperTable->editrrow->reviewId . " and coalesce(reviewModified,0)<=0");