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();
    }
}
Пример #2
0
 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);
 }