コード例 #1
0
ファイル: RanklistModel.php プロジェクト: rajatkhanduja/opc
 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;
 }
コード例 #2
0
ファイル: UserModel.php プロジェクト: rajatkhanduja/opc
 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;
 }
コード例 #3
0
	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");
	}
コード例 #4
0
ファイル: OpcDataTest.php プロジェクト: rajatkhanduja/opc
	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");
	} 
コード例 #5
0
ファイル: QueueController.php プロジェクト: rajatkhanduja/opc
 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);
 }
コード例 #6
0
ファイル: PreTest.php プロジェクト: rajatkhanduja/opc
	/**
	 * @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 ();
	}
コード例 #7
0
ファイル: UploadTest.php プロジェクト: rajatkhanduja/opc
	/**
	 * @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 ());
	}
コード例 #8
0
  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) ;
}
コード例 #9
0
#!/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";
}

コード例 #10
0
 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()));
 }
コード例 #11
0
ファイル: dump-to-sqlite.php プロジェクト: rajatkhanduja/opc
 * 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");
コード例 #12
0
 public function indexAction()
 {
     /* duh, do it untidyly */
     $db = contestDB::get_zend_db();
     $res = $db->select()->where("isadmin != ?", false)->order("username");
 }