Example #1
0
// set interesting user
$User = null;
if (isset($_REQUEST["u"]) && !($User = ContactView::prepare_user($_REQUEST["u"]))) {
    redirectSelf(array("u" => null));
}
if (!$Me->isPC || !$User) {
    $User = $Me;
}
// check problem set openness
$max_pset = $Conf->setting("pset_forwarded");
foreach ($Conf->psets() as $pset) {
    if (Contact::student_can_see_pset($pset) && $pset->id > $max_pset && !$pset->gitless) {
        Contact::forward_pset_links($pset->id);
    }
}
if (!$Me->is_empty() && ($Me === $User || $Me->isPC) && $Qreq->set_username && check_post() && ($repoclass = RepositorySite::$sitemap[$Qreq->reposite]) && in_array($repoclass, RepositorySite::site_classes($Conf))) {
    if ($repoclass::save_username($User, $Qreq->username)) {
        redirectSelf();
    }
}
if (!$Me->is_empty() && $Qreq->set_repo !== null) {
    ContactView::set_repo_action($User);
}
if ($Qreq->set_partner !== null) {
    ContactView::set_partner_action($User);
}
if ((isset($_REQUEST["set_drop"]) || isset($_REQUEST["set_undrop"])) && $Me->isPC && $User->is_student() && check_post()) {
    Dbl::qe("update ContactInfo set dropped=? where contactId=?", isset($_REQUEST["set_drop"]) ? $Now : 0, $User->contactId);
    redirectSelf();
}
// download
Example #2
0
 static function set_repo_action($user)
 {
     global $Conf, $Me, $ConfSitePATH;
     if (!($Me->has_database_account() && check_post() && ($pset = $Conf->pset_by_key(req("pset"))))) {
         return;
     }
     if (!$Me->can_set_repo($pset, $user)) {
         return Conf::msg_error("You can’t edit repository information for that problem set now.");
     }
     // clean up repo url
     $repo_url = trim(req("repo"));
     if ($pset->repo_guess_patterns) {
         for ($i = 0; $i + 1 < count($pset->repo_guess_patterns); $i += 2) {
             $x = preg_replace('`' . str_replace("`", "\\`", $pset->repo_guess_patterns[$i]) . '`s', $pset->repo_guess_patterns[$i + 1], $repo_url, -1, $nreplace);
             if ($x !== null && $nreplace) {
                 $repo_url = $x;
                 break;
             }
         }
     }
     // does it contain odd characters?
     if (preg_match('_[,;\\[\\](){}\\<>&#=\\000-\\027]_', $repo_url)) {
         return Conf::msg_error("That repository contains funny characters. Remove them.");
     }
     // record interested repositories
     $try_classes = [];
     foreach (RepositorySite::site_classes($user->conf) as $sitek) {
         $sniff = $sitek::sniff_url($repo_url);
         if ($sniff == 2) {
             $try_classes = [$sitek];
             break;
         } else {
             if ($sniff) {
                 $try_classes[] = $sitek;
             }
         }
     }
     if (empty($try_classes)) {
         return Conf::msg_error("Invalid repository URL “" . htmlspecialchars($repo_url) . "”.");
     }
     // check repositories
     $working = false;
     $ms = new MessageSet($user);
     foreach ($try_classes as $sitek) {
         $reposite = $sitek::make_url($repo_url, $user->conf);
         if ($reposite && $reposite->validate_working($ms) > 0) {
             $working = true;
             break;
         }
     }
     // if !working, complain
     if (!$working && !$ms->has_problems()) {
         return Conf::msg_error("Invalid repository URL “" . htmlspecialchars($repo_url) . "” (tried " . join(", ", array_map(function ($m) {
             return $m::global_friendly_siteclass();
         }, $try_classes)) . ").");
     } else {
         if (!$working) {
             $msgs = join("<br />", $ms->messages()) ?: "Repository unreachable at the moment.";
             return Conf::msg_error($msgs);
         }
     }
     // store repo
     $repo = Repository::find_or_create_url($reposite->url, $user->conf);
     $repo && $repo->check_open();
     if ($user->set_repo($pset, $repo)) {
         redirectSelf();
     }
 }