function run(Contact $user, $qreq, $ssel) { global $Conf, $Opt; $q = $Conf->paperQuery($user, ["paperId" => $ssel->selection(), "topics" => true, "options" => true]); $result = Dbl::qe_raw($q); $pj = []; $ps = new PaperStatus($user, ["forceShow" => true, "hide_docids" => true]); if ($this->iszip) { $this->zipdoc = new ZipDocument($Opt["downloadPrefix"] . "data.zip"); $ps->add_document_callback([$this, "document_callback"]); } while ($prow = PaperInfo::fetch($result, $user)) { if ($user->can_administer($prow, true)) { $pj[$prow->paperId] = $ps->paper_json($prow); } else { $pj[$prow->paperId] = (object) ["pid" => $prow->paperId, "error" => "You don’t have permission to administer this paper."]; if ($this->iszip) { $this->zipdoc->warnings[] = "#{$prow->paperId}: You don’t have permission to administer this paper."; } } } $pj = array_values($ssel->reorder($pj)); if (count($pj) == 1) { $pj = $pj[0]; $pj_filename = $Opt["downloadPrefix"] . "paper" . $ssel->selection_at(0) . "-data.json"; } else { $pj_filename = $Opt["downloadPrefix"] . "data.json"; } if ($this->iszip) { $this->zipdoc->add(json_encode($pj, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n", $pj_filename); $this->zipdoc->download(); } else { header("Content-Type: application/json"); header("Content-Disposition: attachment; filename=" . mime_quote_string($pj_filename)); echo json_encode($pj, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . "\n"; } exit; }
if ($action == "final") { $adescription = "submit final version for"; } else { $adescription = $prow ? "update" : "register"; } Conf::msg_error(whyNotText($whyNot, $adescription)); } // If we get here, we failed to update. // Use the request unless the request failed because updates // aren't allowed. $useRequest = !$whyNot || !$prow || !($action != "final" && !$Me->can_update_paper($prow) && $Me->can_finalize_paper($prow)); } if ($Qreq->updatecontacts && check_post($Qreq) && $prow) { if ($Me->can_administer($prow) || $Me->act_author_view($prow)) { $ps = new PaperStatus($Me); $opj = $ps->paper_json($prow); $pj = PaperStatus::clone_json($opj); PaperSaver::replace_contacts($pj, $Qreq); if ($ps->save_paper_json($pj, $opj)) { redirectSelf(); } else { Conf::msg_error("<ul><li>" . join("</li><li>", $ps->error_html()) . "</li></ul>"); $Error = $ps->error_fields(); } } else { Conf::msg_error(whyNotText(array("permission" => 1), "update contacts for")); } // use request? $useRequest = true; } // delete action
<?php // test05.php -- HotCRP paper submission tests // HotCRP is Copyright (c) 2006-2016 Eddie Kohler and Regents of the UC // Distributed under an MIT-like license; see LICENSE global $ConfSitePATH; $ConfSitePATH = preg_replace(",/[^/]+/[^/]+\$,", "", __FILE__); require_once "{$ConfSitePATH}/test/setup.php"; $Conf->save_setting("sub_open", 1); $Conf->save_setting("sub_update", $Now + 100); $Conf->save_setting("sub_sub", $Now + 100); // load users $user_estrin = Contact::find_by_email("*****@*****.**"); // pc $user_nobody = new Contact(); $ps = new PaperStatus($user_estrin); $paper1a = $ps->paper_json(1); xassert_eqq($paper1a->title, "Scalable Timers for Soft State Protocols"); $ps->save_paper_json((object) ["id" => 1, "title" => "Scalable Timers? for Soft State Protocols"]); xassert(!$ps->nerrors); $paper1b = $ps->paper_json(1); xassert_eqq($paper1b->title, "Scalable Timers? for Soft State Protocols"); $paper1b->title = $paper1a->title; $paper1b->submitted_at = $paper1a->submitted_at; xassert_eqq(json_encode($paper1b), json_encode($paper1a)); $doc = Filer::file_upload_json(["error" => UPLOAD_ERR_OK, "name" => "amazing-sample.pdf", "tmp_name" => "{$ConfSitePATH}/src/sample.pdf", "tmp_name_safe" => true, "type" => "application/pdf"]); $ps->save_paper_json((object) ["id" => 1, "submission" => $doc]); xassert(!$ps->nerrors); $paper1c = $ps->paper_json(1); xassert_eqq($paper1c->submission->sha1, "2f1bccbf1e0e98004c01ef5b26eb9619f363e38e"); xassert_exit();