function load_pset_info() { global $ConfSitePATH, $Conf, $PsetInfo, $PsetOverrides, $Opt; // read initial messages Messages::$main = new Messages(); $x = json_decode(file_get_contents("{$ConfSitePATH}/src/messages.json")); foreach ($x as $j) { Messages::$main->add($j); } // read psets $PsetInfo = load_psets_json(false); // parse psets foreach ($PsetInfo as $pk => $p) { if (!is_object($p) || !isset($p->psetid)) { continue; } object_merge_recursive($p, $PsetInfo->_defaults); try { $pset = new Pset($pk, $p); Pset::register($pset); } catch (Exception $exception) { // Want to give a good error message, so discover where the error is. // - create pset landmark object $locinfo = (object) array(); foreach (psets_json_data(false) as $fname => $data) { $x = Json::decode_landmarks($data, $fname); object_replace_recursive($locinfo, $x); } $locp = $locinfo->{$pk}; if (isset($locinfo->_defaults)) { object_merge_recursive($locp, $locinfo->_defaults); } // - lookup exception path in landmark object $path = $exception instanceof PsetConfigException ? $exception->path : array(); for ($pathpos = 0; $pathpos < count($path) && $locp && !is_string($locp); ++$pathpos) { $component = $path[$pathpos]; $locp = is_array($locp) ? $locp[$component] : $locp->{$component}; } // - report error if (is_object($locp) && @$locp->__LANDMARK__) { $locp = $locp->__LANDMARK__; } else { if (!is_string($locp)) { $locp = $locinfo->{$pk}->__LANDMARK__; } } Multiconference::fail_message($locp . ": Configuration error: " . $exception->getMessage()); } } // read message data if (!@$PsetInfo->_messagedefs) { $PsetInfo->_messagedefs = (object) array(); } if (!@$PsetInfo->_messagedefs->SYSTEAM) { $PsetInfo->_messagedefs->SYSTEAM = "cs61-staff"; } foreach ($PsetInfo->_messagedefs as $k => $v) { Messages::$main->define($k, $v); } // also create log/ and repo/ directories foreach (array("{$ConfSitePATH}/log", "{$ConfSitePATH}/repo") as $d) { if (!is_dir($d) && !mkdir($d, 02770, true)) { $e = error_get_last(); Multiconference::fail_message("`{$d}` missing and cannot be created (" . $e["message"] . ")."); } if (!file_exists("{$d}/.htaccess") && ($x = file_get_contents("{$ConfSitePATH}/src/.htaccess")) !== false && file_put_contents("{$d}/.htaccess", $x) != strlen($x)) { Multiconference::fail_message("Error creating `{$d}/.htaccess`"); } } // if any anonymous problem sets, create anonymous usernames foreach (Pset::$all as $p) { if (!$p->disabled && $p->anonymous) { while ($row = Dbl::fetch_first_row(Dbl::qe("select contactId from ContactInfo where anon_username is null limit 1"))) { Dbl::q("update ContactInfo set anon_username='******' where contactId=?", $row[0]); } } } }
if (PHP_MAJOR_VERSION >= 7) { xassert_eqq(substr("", 0, 1), ""); } else { xassert_eqq(substr("", 0, 1), false); } $s = ""; xassert_eqq(@$s[0], ""); // Json tests xassert_eqq(json_encode(Json::decode("{}")), "{}"); xassert_eqq(json_encode(Json::decode('"\\u0030"')), '"0"'); xassert_eqq(Json::encode("\n"), '"\\n"'); xassert_eqq(Json::encode(""), '"\\u0007"'); xassert_eqq(json_encode(Json::decode('{"1":"1"}')), '{"1":"1"}'); $x = Json::decode_landmarks('{ "a": ["b", "c"], "b": { "c": "d" } }', "x.txt"); xassert_match($x->a[0], ",^x.txt:2(?::|\$),"); xassert_match($x->a[1], ",^x.txt:2(?::|\$),"); xassert_match($x->b->c, ",^x.txt:4(?::|\$),"); xassert_match($x->b->__LANDMARK__, ",^x.txt:3(?::|\$),"); // obscure_time tests $t = $Conf->parse_time("1 Sep 2010 00:00:01"); $t0 = $Conf->obscure_time($t); xassert_eqq($Conf->unparse_time_obscure($t0), "1 Sep 2010"); xassert_eqq($Conf->printableTime($t0), "1 Sep 2010 12pm EDT"); $t = $Conf->parse_time("1 Sep 2010 23:59:59"); $t0 = $Conf->obscure_time($t); xassert_eqq($Conf->unparse_time_obscure($t0), "1 Sep 2010"); xassert_eqq($Conf->printableTime($t0), "1 Sep 2010 12pm EDT");