function account_value($sv, $si) { if ($si->internal) { return; } $xname = str_replace(".", "_", $si->name); if ($si->parser) { $has_value = truthy(get($sv->req, "has_{$xname}")); } else { $has_value = isset($sv->req[$xname]) || ($si->type === "cdate" || $si->type === "checkbox") && truthy(get($sv->req, "has_{$xname}")); } if (!$has_value) { return; } if ($si->disabled || $si->novalue || !$si->type || $si->type === "none") { /* ignore changes to disabled/novalue settings */ } else { if ($si->parser) { $p = $sv->parser($si); if ($p->parse($sv, $si)) { $sv->save_callbacks[$si->name] = $si; } } else { $v = parse_value($sv, $si->name, $si); if ($v === null) { return; } if (is_int($v) && $v <= 0 && $si->type !== "radio" && $si->type !== "zint") { $v = null; } $sv->save($si->name, $v); if ($si->ifnonempty) { $sv->save($si->ifnonempty, $v === null ? null : 1); } } } }
function get_db_values($sql, $values_before, $shown_symbols = 0) { global $db; $values = array(); $db_list = new VA_SQL(); $db_list->DBType = $db->DBType; $db_list->DBDatabase = $db->DBDatabase; $db_list->DBUser = $db->DBUser; $db_list->DBPassword = $db->DBPassword; $db_list->DBHost = $db->DBHost; $db_list->DBPort = $db->DBPort; $db_list->DBPersistent = $db->DBPersistent; $i = 0; if (is_array($values_before)) { for ($j = 0; $j < sizeof($values_before); $j++) { $value_desciption = get_translation($values_before[$j][1]); $value_desciption = parse_value($value_desciption); if ($shown_symbols > 0 && strlen($value_desciption) > $shown_symbols) { $value_desciption = substr($value_desciption, 0, $shown_symbols) . "..."; } $values[$i][0] = $values_before[$j][0]; $values[$i][1] = $value_desciption; $i++; } } $db_list->query($sql); if ($db_list->next_record()) { do { $value_desciption = get_translation($db_list->f(1)); $value_desciption = parse_value($value_desciption); if ($shown_symbols > 0 && strlen($value_desciption) > $shown_symbols) { $value_desciption = substr($value_desciption, 0, $shown_symbols) . "..."; } $values[$i][0] = $db_list->f(0); $values[$i][1] = $value_desciption; $i++; } while ($db_list->next_record()); } return $values; }
function parse($sv, $si) { global $Conf; if (!$sv->newv("resp_active")) { return false; } $old_roundnames = $Conf->resp_round_list(); $roundnames = array(1); $roundnames_set = array(); if (isset($sv->req["resp_roundname"])) { $rname = trim(get_s($sv->req, "resp_roundname")); if ($rname === "" || $rname === "none" || $rname === "1") { /* do nothing */ } else { if ($rerror = Conf::resp_round_name_error($rname)) { $sv->set_error("resp_roundname", $rerror); } else { $roundnames[0] = $rname; $roundnames_set[strtolower($rname)] = 0; } } } for ($i = 1; isset($sv->req["resp_roundname_{$i}"]); ++$i) { $rname = trim(get_s($sv->req, "resp_roundname_{$i}")); if ($rname === "" && get($old_roundnames, $i)) { $rname = $old_roundnames[$i]; } if ($rname === "") { continue; } else { if ($rerror = Conf::resp_round_name_error($rname)) { $sv->set_error("resp_roundname_{$i}", $rerror); } else { if (get($roundnames_set, strtolower($rname)) !== null) { $sv->set_error("resp_roundname_{$i}", "Response round name “" . htmlspecialchars($rname) . "” has already been used."); } else { $roundnames[] = $rname; $roundnames_set[strtolower($rname)] = $i; } } } } foreach ($roundnames_set as $i) { $isuf = $i ? "_{$i}" : ""; if (($v = parse_value($sv, "resp_open{$isuf}", Si::get("resp_open"))) !== null) { $sv->save("resp_open{$isuf}", $v <= 0 ? null : $v); } if (($v = parse_value($sv, "resp_done{$isuf}", Si::get("resp_done"))) !== null) { $sv->save("resp_done{$isuf}", $v <= 0 ? null : $v); } if (($v = parse_value($sv, "resp_grace{$isuf}", Si::get("resp_grace"))) !== null) { $sv->save("resp_grace{$isuf}", $v <= 0 ? null : $v); } if (($v = parse_value($sv, "resp_words{$isuf}", Si::get("resp_words"))) !== null) { $sv->save("resp_words{$isuf}", $v < 0 ? null : $v); } if (($v = parse_value($sv, "msg.resp_instrux{$isuf}", Si::get("msg.resp_instrux"))) !== null) { $sv->save("msg.resp_instrux{$isuf}", $v); } } if (count($roundnames) > 1 || $roundnames[0] !== 1) { $sv->save("resp_rounds", join(" ", $roundnames)); } else { $sv->save("resp_rounds", null); } return false; }
function parse($sv, $si) { global $Conf; if (!isset($sv->req["rev_roundtag"])) { $sv->save("rev_roundtag", null); return false; } // round names $roundnames = $roundnames_set = array(); $roundname0 = $round_deleted = null; for ($i = 0; isset($sv->req["roundname_{$i}"]) || isset($sv->req["deleteround_{$i}"]) || !$i; ++$i) { $rname = trim(get_s($sv->req, "roundname_{$i}")); if ($rname === "(no name)" || $rname === "default" || $rname === "unnamed") { $rname = ""; } if ((get($sv->req, "deleteround_{$i}") || $rname === "") && $i) { $roundnames[] = ";"; if (Dbl::fetch_ivalue("select reviewId from PaperReview where reviewRound={$i} limit 1")) { $this->rev_round_changes[] = array($i, 0); } if ($round_deleted === null && !isset($sv->req["roundname_0"]) && $i < $sv->req["oldroundcount"]) { $round_deleted = $i; } } else { if ($rname === "") { /* ignore */ } else { if ($rerror = Conf::round_name_error($rname)) { $sv->set_error("roundname_{$i}", $rerror); } else { if ($i == 0) { $roundname0 = $rname; } else { if (get($roundnames_set, strtolower($rname))) { $roundnames[] = ";"; $this->rev_round_changes[] = array($i, $roundnames_set[strtolower($rname)]); } else { $roundnames[] = $rname; $roundnames_set[strtolower($rname)] = $i; } } } } } } if ($roundname0 && !get($roundnames_set, strtolower($roundname0))) { $roundnames[] = $roundname0; $roundnames_set[strtolower($roundname0)] = count($roundnames); } if ($roundname0) { array_unshift($this->rev_round_changes, array(0, $roundnames_set[strtolower($roundname0)])); } // round deadlines foreach ($Conf->round_list() as $i => $rname) { $suffix = $i ? "_{$i}" : ""; foreach (Conf::$review_deadlines as $k) { $sv->save($k . $suffix, null); } } $rtransform = array(); if ($roundname0 && ($ri = $roundnames_set[strtolower($roundname0)]) && !isset($sv->req["pcrev_soft_{$ri}"])) { $rtransform[0] = "_{$ri}"; $rtransform[$ri] = false; } if ($round_deleted) { $rtransform[$round_deleted] = ""; if (!isset($rtransform[0])) { $rtransform[0] = false; } } for ($i = 0; $i < count($roundnames) + 1; ++$i) { if ((isset($rtransform[$i]) || ($i ? $roundnames[$i - 1] !== ";" : !isset($sv->req["deleteround_0"]))) && get($rtransform, $i) !== false) { $isuffix = $i ? "_{$i}" : ""; if (($osuffix = get($rtransform, $i)) === null) { $osuffix = $isuffix; } $ndeadlines = 0; foreach (Conf::$review_deadlines as $k) { $v = parse_value($sv, $k . $isuffix, Si::get($k)); $sv->save($k . $osuffix, $v <= 0 ? null : $v); $ndeadlines += $v > 0; } if ($ndeadlines == 0 && $osuffix) { $sv->save("pcrev_soft{$osuffix}", 0); } foreach (array("pcrev_", "extrev_") as $k) { list($soft, $hard) = ["{$k}soft{$osuffix}", "{$k}hard{$osuffix}"]; list($softv, $hardv) = [$sv->savedv($soft), $sv->savedv($hard)]; if (!$softv && $hardv) { $sv->save($soft, $hardv); } else { if ($hardv && $softv > $hardv) { $desc = $i ? ", round " . htmlspecialchars($roundnames[$i - 1]) : ""; $sv->set_error($soft, Si::get("{$k}soft", "short_description") . $desc . ": Must come before " . Si::get("{$k}hard", "short_description") . "."); $sv->set_error($hard); } } } } } // round list (save after deadlines processing) while (count($roundnames) && $roundnames[count($roundnames) - 1] === ";") { array_pop($roundnames); } $sv->save("tag_rounds", join(" ", $roundnames)); // default round $t = trim($sv->req["rev_roundtag"]); $sv->save("rev_roundtag", null); if (preg_match('/\\A(?:|\\(none\\)|\\(no name\\)|default|unnamed)\\z/i', $t)) { /* do nothing */ } else { if ($t === "#0") { if ($roundname0) { $sv->save("rev_roundtag", $roundname0); } } else { if (preg_match('/^#[1-9][0-9]*$/', $t)) { $rname = get($roundnames, substr($t, 1) - 1); if ($rname && $rname !== ";") { $sv->save("rev_roundtag", $rname); } } else { if (!($rerror = Conf::round_name_error($t))) { $sv->save("rev_roundtag", $t); } else { $sv->set_error("rev_roundtag", $rerror); } } } } if (count($this->rev_round_changes)) { $sv->need_lock["PaperReview"] = true; return true; } else { return false; } }