function saveTagIndexes($tag, $filename, &$settings, &$titles, &$linenos, &$errors) { global $Conf, $Me, $Error; $result = $Conf->qe($Conf->paperQuery($Me, array("paperId" => array_keys($settings)))); while ($row = PaperInfo::fetch($result, $Me)) { if ($settings[$row->paperId] !== null && !$Me->can_change_tag($row, $tag, null, 1)) { $errors[$linenos[$row->paperId]] = "You cannot rank paper #{$row->paperId}."; unset($settings[$row->paperId]); } else { if ($titles[$row->paperId] !== "" && strcmp($row->title, $titles[$row->paperId]) != 0 && strcasecmp($row->title, simplify_whitespace($titles[$row->paperId])) != 0) { $errors[$linenos[$row->paperId]] = "Warning: Title doesn’t match"; } } } if (!$tag) { defappend($Error["tags"], "No tag defined"); } else { if (count($settings)) { $x = array("paper,tag,lineno"); foreach ($settings as $pid => $value) { $x[] = "{$pid},{$tag}#" . ($value === null ? "clear" : $value) . "," . $linenos[$pid]; } $assigner = new AssignmentSet($Me); $assigner->parse(join("\n", $x) . "\n", $filename); $assigner->report_errors(); $assigner->execute(); } } $settings = $titles = $linenos = array(); }
function complete_assignment($callback) { global $Me; $assignset = new AssignmentSet($Me, false); $assignset->parse($_POST["file"], get($_POST, "filename"), assignment_defaults(), $callback); $SSel = SearchSelection::make(make_qreq(), $Me); $assignset->restrict_papers($SSel->selection()); return $assignset->execute(true); }
$review2e = save_review(2, $user_external, $revreq); $review2d = fetch_review(2, $user_mgbaker); xassert(!$review2d->reviewSubmitted); xassert($review2d->reviewNeedsSubmit == 0); xassert($user_mgbaker->can_view_review($paper2, $review2a, false)); xassert($user_mgbaker->can_view_review($paper2, $review2e, false)); // complex assignments assert_search_papers($user_chair, "2 AND re:4", "2"); assert_search_papers($user_chair, "re:mgbaker", "1 2 13 17"); assert_search_papers($user_chair, "re:sec:mgbaker", "2"); assert_search_papers($user_chair, "sec:mgbaker", "2"); assert_search_papers($user_chair, "re:pri:mgbaker", "1 13 17"); $assignset = new AssignmentSet($user_chair, null); $assignset->parse("action,paper,email,reviewtype\nreview,all,mgbaker@cs.stanford.edu,secondary:primary\n"); xassert_eqq(join("\n", $assignset->errors_text()), ""); xassert($assignset->execute()); xassert(AssignmentSet::run($user_chair, "action,paper,email,reviewtype\nreview,all,mgbaker@cs.stanford.edu,secondary:primary\n")); assert_search_papers($user_chair, "re:sec:mgbaker", ""); assert_search_papers($user_chair, "re:pri:mgbaker", "1 2 13 17"); $review2d = fetch_review(2, $user_mgbaker); xassert(!$review2d->reviewSubmitted); xassert($review2d->reviewNeedsSubmit == 1); xassert(AssignmentSet::run($user_chair, "action,paper,email,reviewtype\nreview,2,mgbaker@cs.stanford.edu,primary:secondary\n")); assert_search_papers($user_chair, "re:sec:mgbaker", "2"); assert_search_papers($user_chair, "re:pri:mgbaker", "1 13 17"); $review2d = fetch_review(2, $user_mgbaker); xassert(!$review2d->reviewSubmitted); xassert($review2d->reviewNeedsSubmit == 0); // uploading the current assignment makes no changes function get_pcassignment_csv() {
function xassert_assign($who, $override, $what) { $assignset = new AssignmentSet($who, $override); $assignset->parse($what); xassert($assignset->execute()); }
public static function run($contact, $text, $forceShow = null) { $aset = new AssignmentSet($contact, $forceShow); $aset->parse($text); return $aset->execute(); }
} else { if ($Acct->contactId == $Me->contactId) { Conf::msg_error("You aren’t allowed to delete yourself."); } else { if ($Acct->has_database_account()) { $tracks = databaseTracks($Acct->contactId); if (count($tracks->soleAuthor)) { Conf::msg_error("This user can’t be deleted since they are sole contact for " . pluralx($tracks->soleAuthor, "paper") . " " . textArrayPapers($tracks->soleAuthor) . ". You will be able to delete the user after deleting those papers or adding additional paper contacts."); } else { foreach (array("ContactInfo", "PaperComment", "PaperConflict", "PaperReview", "PaperReviewPreference", "PaperReviewRefused", "PaperWatch", "ReviewRating", "TopicInterest") as $table) { $Conf->qe("delete from {$table} where contactId={$Acct->contactId}"); } // delete twiddle tags $assigner = new AssignmentSet($Me, true); $assigner->parse("paper,tag\nall,{$Acct->contactId}~all#clear\n"); $assigner->execute(); // clear caches if ($Acct->isPC || $Acct->privChair) { $Conf->invalidateCaches(array("pc" => 1)); } // done $Conf->confirmMsg("Permanently deleted user " . htmlspecialchars($Acct->email) . "."); $Me->log_activity("Permanently deleted user " . htmlspecialchars($Acct->email) . " ({$Acct->contactId})"); go(hoturl("users", "t=all")); } } } } } function value($key, $value) {
exit; } } } if (isset($Qreq->assign) && isset($Qreq->a) && isset($Qreq->pctyp) && check_post()) { $ai = new AutoassignerInterface(); if ($ai->check()) { $ai->run(); } ensure_session(); } else { if ($Qreq->saveassignment && $Qreq->submit && isset($Qreq->assignment) && check_post()) { $assignset = new AssignmentSet($Me, true); $assignset->parse($Qreq->assignment); $assignset->restrict_papers($SSel->selection()); $assignset->execute(true); } } function doRadio($name, $value, $text, $extra = null) { global $Qreq; if ($checked = !isset($Qreq[$name]) || $Qreq[$name] === $value) { $Qreq[$name] = $value; } $extra = $extra ? $extra : array(); $extra["id"] = "{$name}_{$value}"; echo Ht::radio($name, $value, $checked, $extra), " "; if ($text !== "") { echo Ht::label($text, "{$name}_{$value}"); } }
static function settags_api($user, $qreq, $prow) { global $Conf; if ($qreq->cancelsettags) { json_exit(["ok" => true]); } if ($prow && !$user->can_view_paper($prow)) { json_exit(["ok" => false, "error" => "No such paper."]); } // save tags using assigner $x = array("paper,action,tag"); if ($prow) { if (isset($qreq->tags)) { $x[] = "{$prow->paperId},tag,all#clear"; foreach (TagInfo::split($qreq->tags) as $t) { $x[] = "{$prow->paperId},tag," . CsvGenerator::quote($t); } } foreach (TagInfo::split((string) $qreq->addtags) as $t) { $x[] = "{$prow->paperId},tag," . CsvGenerator::quote($t); } foreach (TagInfo::split((string) $qreq->deltags) as $t) { $x[] = "{$prow->paperId},tag," . CsvGenerator::quote($t . "#clear"); } } else { if (isset($qreq->tagassignment)) { $pids = []; $pid = -1; foreach (preg_split('/[\\s,]+/', $qreq->tagassignment) as $w) { if ($w !== "" && ctype_digit($w)) { $pid = intval($w); } else { if ($w !== "" && $pid > 0) { $x[] = "{$pid},tag," . CsvGenerator::quote($w); $pids[$pid] = true; } } } } } $assigner = new AssignmentSet($user, $user->is_admin_force()); $assigner->parse(join("\n", $x)); $error = join("<br />", $assigner->errors_html()); $ok = $assigner->execute(); // exit if ($ok && $prow) { $prow->load_tags(); $treport = self::tagreport($user, $prow); if ($treport->warnings) { $Conf->warnMsg(join("<br>", $treport->warnings)); } $taginfo = (object) ["ok" => true, "pid" => $prow->paperId]; $prow->add_tag_info_json($taginfo, $user); json_exit($taginfo, true); } else { if ($ok) { $p = []; $result = Dbl::qe_raw($Conf->paperQuery($user, ["paperId" => array_keys($pids), "tags" => true])); while ($prow = PaperInfo::fetch($result, $user)) { $p[$prow->paperId] = (object) []; $prow->add_tag_info_json($p[$prow->paperId], $user); } json_exit(["ok" => true, "p" => $p]); } else { json_exit(["ok" => false, "error" => $error], true); } } }