} 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 if ($Qreq->delete && check_post()) { if ($newPaper) {
public function apply(Contact $user, $pj, $opj, $qreq, $action) { global $Conf; // Title, abstract, collaborators foreach (array("title", "abstract", "collaborators") as $k) { if (isset($qreq[$k])) { $pj->{$k} = $qreq[$k]; } } // Authors $bad_author = ["name" => "Name", "email" => "Email", "aff" => "Affiliation"]; $authors = array(); foreach ($qreq as $k => $v) { if (preg_match('/\\Aau(name|email|aff)(\\d+)\\z/', $k, $m) && ($v = simplify_whitespace($v)) !== "" && $v !== $bad_author[$m[1]]) { $au = $authors[$m[2]] = get($authors, $m[2]) ?: (object) array(); $x = $m[1] == "aff" ? "affiliation" : $m[1]; $au->{$x} = $v; } } if (!empty($authors)) { ksort($authors, SORT_NUMERIC); $pj->authors = array_values($authors); } // Contacts if ($qreq->setcontacts || $qreq->has_contacts) { PaperSaver::replace_contacts($pj, $qreq); } else { if (!$opj) { $pj->contacts = array($user); } } // Status if ($action === "submit") { $pj->submitted = true; } else { if ($action === "final") { $pj->final_submitted = true; } else { $pj->submitted = false; } } // Paper upload if ($qreq->_FILES->paperUpload) { if ($action === "final") { $pj->final = Filer::file_upload_json($qreq->_FILES->paperUpload); } else { if ($action === "update" || $action === "submit") { $pj->submission = Filer::file_upload_json($qreq->_FILES->paperUpload); } } } // Blindness if ($action !== "final" && $Conf->subBlindOptional()) { $pj->nonblind = !$qreq->blind; } // Topics if ($qreq->has_topics) { $pj->topics = (object) array(); foreach ($Conf->topic_map() as $tid => $tname) { if (+$qreq["top{$tid}"] > 0) { $pj->topics->{$tname} = true; } } } // Options if (!isset($pj->options)) { $pj->options = (object) []; } foreach (PaperOption::option_list() as $o) { if ($qreq["has_opt{$o->id}"] && (!$o->final || $action === "final")) { $okey = $o->abbr; $pj->options->{$okey} = $o->parse_request(get($pj->options, $okey), $qreq, $user, $pj); } } if (!count(get_object_vars($pj->options))) { unset($pj->options); } // PC conflicts if ($Conf->setting("sub_pcconf") && ($action !== "final" || $user->privChair) && $qreq->has_pcconf) { $cmax = $user->privChair ? CONFLICT_CHAIRMARK : CONFLICT_MAXAUTHORMARK; $pj->pc_conflicts = (object) array(); foreach (pcMembers() as $pcid => $pc) { $ctype = cvtint($qreq["pcc{$pcid}"], 0); $ctype = max(min($ctype, $cmax), 0); if ($ctype) { $email = $pc->email; $pj->pc_conflicts->{$email} = Conflict::$type_names[$ctype]; } } } }