function savePreferences($Qreq) { global $Conf, $Me, $OK, $reviewer, $incorrect_reviewer; if ($incorrect_reviewer) { Conf::msg_error("Preferences not saved."); return; } $setting = array(); $error = false; $pmax = 0; foreach ($Qreq as $k => $v) { if (strlen($k) > 7 && $k[0] == "r" && substr($k, 0, 7) == "revpref" && ($p = cvtint(substr($k, 7))) > 0) { if ($pref = parse_preference($v)) { $setting[$p] = $pref; $pmax = max($pmax, $p); } else { $error = true; } } } if ($error) { Conf::msg_error("Preferences must be small positive or negative integers."); } if ($pmax == 0 && !$error) { Conf::msg_error("No reviewer preferences to update."); } if ($pmax == 0) { return; } $deletes = array(); for ($p = 1; $p <= $pmax; $p++) { if (isset($setting[$p])) { $p0 = $p; while (isset($setting[$p + 1])) { ++$p; } if ($p0 == $p) { $deletes[] = "paperId={$p0}"; } else { $deletes[] = "paperId between {$p0} and {$p}"; } } } if (count($deletes)) { $Conf->qe("delete from PaperReviewPreference where contactId={$reviewer} and (" . join(" or ", $deletes) . ")"); } $q = array(); for ($p = 1; $p <= $pmax; $p++) { if (($pref = get($setting, $p)) && ($pref[0] || $pref[1] !== null)) { $q[] = array($p, $reviewer, $pref[0], $pref[1]); } } PaperActions::save_review_preferences($q); if ($OK) { $Conf->confirmMsg("Preferences saved."); redirectSelf(); } }
static function setpref_api($user, $qreq, $prow) { global $Conf; $cid = $user->contactId; if ($user->allow_administer($prow) && $qreq->reviewer && ($x = cvtint($qreq->reviewer)) > 0) { $cid = $x; } if ($v = parse_preference($qreq->pref)) { if (PaperActions::save_review_preferences([[$prow->paperId, $cid, $v[0], $v[1]]])) { $j = ["ok" => true, "response" => "Saved"]; } else { $j = ["ok" => false]; } $j["value"] = unparse_preference($v); } else { $j = ["ok" => false, "error" => "Bad preference"]; } json_exit($j); }