Ejemplo n.º 1
0
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();
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
$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()
{
Ejemplo n.º 4
0
function xassert_assign($who, $override, $what)
{
    $assignset = new AssignmentSet($who, $override);
    $assignset->parse($what);
    xassert($assignset->execute());
}
Ejemplo n.º 5
0
 public static function run($contact, $text, $forceShow = null)
 {
     $aset = new AssignmentSet($contact, $forceShow);
     $aset->parse($text);
     return $aset->execute();
 }
Ejemplo n.º 6
0
    } 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)
{
Ejemplo n.º 7
0
            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}");
    }
}
Ejemplo n.º 8
0
 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);
         }
     }
 }