public function getRanksHelper($user, $prob, $owner) { $db = contestDB::get_zend_db(); if (empty($owner)) { $owner = webconfig::$getContestId(); } $res = $db->select()->from(array("s" => "submissionqueue"))->join(array("t" => "users"), 's.uid = t.uid')->where("s.score > 0")->where('t.isadmin is null or t.isadmin = \'false\''); if (!empty($user) && is_numeric($user)) { $res->where("s.uid = ?", $user); } else { if (!empty($user)) { $res->where("t.username = ?", $user); } } if (!empty($prob)) { $res->where("problemid = ?", $prob); } $res->where("owner = ?", $owner); $res = $res->query(); $ret = array(); $scores = array(); /* build the score object */ $all = $res->fetchAll(); foreach ($all as $entry) { if (!array_key_exists($entry->username, $ret)) { $ret[$entry->username] = array("team" => $entry->username); } $prob = $entry->problemid; if (!isset($ret[$entry->username][$prob])) { $ret[$entry->username][$prob] = array("score" => 0, "time" => 0); } if ($entry->score == $ret[$entry->username][$prob]['score']) { $ret[$entry->username][$prob]['time'] = min($ret[$entry->username][$prob]['time'], $entry->time); } else { if ($entry->score > $ret[$entry->username][$prob]['score']) { $ret[$entry->username][$prob]['score'] = $entry->score; $ret[$entry->username][$prob]['time'] = $entry->time; } } } foreach ($ret as &$team) { $score = 0; $time = 0; foreach ($team as $problem) { if (!is_array($problem)) { continue; } $score += $problem['score']; //$time = max($problem['time'], $time) ; if ($time < $problem['time']) { $time = $problem['time']; } } $team['score'] = $score; $team['time'] = $time; } usort($ret, "myrankssort"); return $ret; }
public function getUserList() { $db = contestDB::get_zend_db(); $res = $db->select()->from("users")->query()->fetchAll(); $ret = array(); foreach ($res as $elem) { array_push($ret, $elem->username); } return $ret; }
public function testBasicProblemDescription () { global $general_contest_problem; /* tricky, I don't know which problem to use at this point */ $db = contestDB::get_zend_db(); $this->dispatch ("/problems/$general_contest_problem"); $this->assertNotRedirect(); $this->assertController ("problems"); $this->assertAction ("view"); }
public function tearDown () { contestDB::get_zend_db ()->closeConnection(); $datadir = get_file_name ("data/"); /* let's move our log file somewhere */ /* close the logger. */ Logger::flush (); $logfile = "$datadir/logs/" . posix_getuid () . ".log"; if (is_file ($logfile)) { $contents = file_get_contents ($logfile); file_put_contents ("logs/" . posix_getuid () . ".log", $contents, FILE_APPEND); } safeSystem ("fusermount -zu $datadir"); }
public function indexAction() { $offset = (int) $this->_request->get("offset"); $limit = (int) $this->_request->get("limit"); if (empty($offset)) { $offset = 0; } if (empty($limit)) { $limit = 100; } $user = $this->_request->get("user"); $uid = $this->_request->get("uid"); $problem = $this->_request->get("problem"); $state = $this->_request->get("state"); if (webconfig::getContest()->isQueuePrivate()) { $auth = Zend_Auth::getInstance(); if (!$auth->hasIdentity()) { $this->_forward("login", "error", NULL, array()); } else { $userobj = User::factory($auth->getIdentity()); if (!$userobj->isAdmin() and !isset($uid)) { $this->_forward("privacy", "error", NULL, array()); } } } Zend_Loader::loadClass("Zend_Paginator"); Zend_Loader::loadClass("Zend_Paginator_Adapter_DbSelect"); $db = contestDB::get_zend_db(); $query = $db->select()->from('submissionqueue')->join("users", "submissionqueue.uid = users.uid")->where("owner = ?", webconfig::getContestId())->order("id desc"); if (!empty($user)) { $query = $query->where("users.username = ?", $user); } if (!empty($uid)) { $query = $query->where("users.uid = ?", $uid); } if (!empty($problem)) { $query = $query->where("submissionqueue.problemid = ?", $problem); } if (!empty($state)) { $query = $query->where("submissionqueue.state = ?", $state); } $adapter = new Zend_Paginator_Adapter_DbSelect($query); $this->view->paginator = new Zend_Paginator($adapter); $this->view->paginator->setCurrentPageNumber($this->_getParam('page')); $this->view->paginator->setItemCountPerPage(50); }
/** * @dataProvider provider */ public function testSubmission ($a, $b, $c) { $cwd = realpath(getcwd()); $sub = SubmissionTable::get_submission ($a); if (is_file ($sub->getXmlFile())) $oldResult = file_get_contents ($sub->getXmlFile ()); else $oldResult = ""; SubmissionTable::set_score($a, 23); $sp = new SubmissionProcessor(); $sp->process ($a); $db = contestDB::get_zend_db (); $res = $db->select()->from("submissionqueue")->where("id=$a")->query(); $row = $res->fetch(); $this->assertEquals (array ($b, $c), array ($row->score, $row->state)); $sub = SubmissionTable::get_submission ($a); $this->assertNotEquals ($oldResult, file_get_contents ($sub->getXmlFile ())); $sub->validateResultXML (); }
/** * @dataProvider provider */ public function testUpload ($user, $prob, $lang, $source, $owner, $score, $result) { ob_start (); $a = UploadSubmission::upload ($user, $prob, $lang, $source, $owner); ob_end_clean (); $this->assertGreaterThan (0, $a); $b = $score; ob_start (); $sp = new SubmissionProcessor(); $sp->process ($a); ob_end_clean (); $db = contestDB::get_zend_db (); $res = $db->select()->from("submissionqueue")->where("id=$a")->query(); $row = $res->fetch(); $this->assertEquals (array($b, $result), array($row->score, $row->state)); $sub = SubmissionTable::get_submission ($a); $this->assertNotEquals ($sub, NULL); $this->assertTrue ($sub->validateResultXML ()); }
if (strcasecmp(config::$DB_Adapter, "Pdo_Sqlite") != 0) { if ( config::$DB_Name == "" or config::$DB_Password == "" or config::$DB_User == "" or config::$DB_Hostname == "" ) { echo ("You have not provided complete database information. Edit ./local_config.inc\n") ; exit(1) ; } } else { if (empty(config::$DB_Name)) { echo "Sqlite db name not provided. Edit ./local_config.inc\n"; exit (1); } } /* the next function call will cause the script to die with 0 return value if it fails */ $db = contestDB::get_zend_db () ; $db->getConnection(); echo "Database Check successful\n"; exit(0) ; } system( "./install_database.php --check | grep -q 'Database Check successful'", $return_var); if ( $return_var == 0 ) { echo "Database check successful.\n" ; exit (0) ; } else { echo "ERROR: Database check failed. Update ./local_config.inc\n" ; exit(1) ; }
#!/usr/bin/php <? chdir(dirname(__FILE__)); require_once "../config.inc" ; require_once "lib/db.inc" ; if (strcasecmp(config::$DB_Adapter, "Pdo_Pgsql") == 0) $sql = file_get_contents("./schema.pg") ; else if (strcasecmp(config::$DB_Adapter, "Pdo_Sqlite") == 0) $sql = file_get_contents("./schema.sqlite"); else if (strcasecmp(config::$DB_Adapter, "Pdo_Mysql") ==0) $sql = file_get_contents("./schema.mysql"); else { echo "Unable to recognize database adapter\n"; exit (1); } try { contestDB::get_zend_db()->getConnection()->exec("$sql"); } catch (Exception $e) { echo "Notice: database tables are already installed from previous make\n"; }
function indexAction() { /* build query */ $db = contestDB::get_zend_db(); $this->view->title = "Problems"; $curuser = Zend_Auth::getInstance()->getIdentity(); if (empty($curuser)) { $this->view->problems = ProblemTable::get_problem_list(webconfig::getContestId(), 0, 100); return; } /* case 2: build a complex query */ $query = "select distinct p.rowid as rowid,p.id as id,p.nickname as nickname,s.state as state from problemdata as p left join (select * from submissionqueue where uid = ? and state='Accepted') as s on p.id = s.problemid where p.owner=? group by p.rowid,p.id,p.nickname,s.state order by rowid;"; $this->view->problems = $db->fetchAll($query, array($curuser, webconfig::getContestId())); }
* GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * @file dump-to-sqlite.php * @author Arnold Noronha <*****@*****.**> */ require_once "../config.inc"; require_once "Zend/Loader.php"; require_once "lib/db.inc"; Zend_Loader::loadClass("Zend_Db"); /* dump the current database into an sqlite3 with the schema.sqlite */ $db = Zend_Db::factory("Pdo_Sqlite", array('dbname' => $argv[1])); $old = contestDB::get_zend_db(); $schema = file_get_contents("../setup/schema.sqlite"); $db->getConnection()->exec($schema); $old->setFetchMode(Zend_Db::FETCH_ASSOC); /* problemdata */ $res = $old->query("select id,rowid,numcases,nickname,state,owner,submissionlimit,resourcelimits from problemdata"); $all = $res->fetchAll(); foreach ($all as $row) { $db->insert("problemdata", $row); } $res = $old->query("select uid,username,isadmin,username as password from users"); $all = $res->fetchAll(); foreach ($all as $row) { $db->insert("users", $row); } $res = $old->query("select id,uid,problemid,owner,lang,state,score,time,notcounted,hash from submissionqueue");
public function indexAction() { /* duh, do it untidyly */ $db = contestDB::get_zend_db(); $res = $db->select()->where("isadmin != ?", false)->order("username"); }