server/onyx/include/common/Team.class.php
2013-10-26 21:44:19 +02:00

210 lines
4.1 KiB
PHP

<?php
if(!defined('ONYX')) exit;
function cmp_team_pts($i1, $i2)
{
if ($i1->get_pts() == $i2->get_pts()){
return 0;
}
else{
return ($i1->get_pts() < $i2->get_pts()) ? 1 : -1;
}
}
class Team
{
var $id = null;
var $team_name;
var $key_hash;
var $auth_level;
var $slogan;
var $members = array();
var $points = null;
// Constructor
function Team ($id=null)
{
if (!empty($id))
{
$db = new BDD();
$res = $db->unique_query("SELECT id, team_name, key_hash, slogan, auth_level
FROM teams WHERE id=" . intval($id)) or die($db->erreur());
if (!empty($res))
{
$this->id = $res['id'];
$this->team_name = $res['team_name'];
$this->key_hash = $res['key_hash'];
$this->slogan = $res['slogan'];
$this->auth_level = $res['auth_level'];
}
$db->deconnexion();
}
}
// Class methods
function update()
{
$key_hash = $this->key_hash;
$auth_level = intval($this->auth_level);
$slogan = $this->slogan;
$company = $this->company;
$team_name = $this->team_name;
$db = new BDD();
$db->escape($key_hash);
$db->escape($slogan);
$db->escape($team_name);
if (empty($this->id))
{
$db->query("INSERT INTO teams
VALUES (NULL, '".$key_hash."', ".$auth_level.", '".$slogan."')");
$this->id = $db->insert_id();
$aff = ($this->id > 0);
}
else
{
$db->query("UPDATE teams
SET team_name = '".$team_name."', auth_level = ".$auth_level.", key_hash = '".$key_hash."', company = '".$slogan."'
WHERE id = ".intval($this->id));
$aff = $db->affected();
}
$db->deconnexion();
return ($aff == 1);
}
function get_id() {
return $this->id;
}
function get_slogan() {
return $this->slogan;
}
function get_name() {
return $this->team_name;
}
function get_auth_level() {
return $this->auth_level;
}
function get_members()
{
if(count($this->members) == 0)
{
$db = new BDD();
$res = $db->query("SELECT id FROM team_members
WHERE id_team = " . intval($this->id));
$db->deconnexion();
foreach($res as $member)
$this->members[] = new Member($member["id"], $this);
}
return $this->members;
}
function get_pts()
{
if(!isset($this->points))
{
$db = new BDD();
$res = $db->unique_query("SELECT e.id, s.id_user, SUM(e.points) as sum_points
FROM exercices e
LEFT OUTER JOIN solved s ON e.id = s.id_exercice
WHERE s.id_user = " . $this->id . "
GROUP BY s.id_user");
$db->deconnexion();
if (!empty($res))
$this->points = $res['sum_points'];
else
$this->points = 0;
}
return $this->points;
}
function get_groupIds()
{
$db = new BDD();
$res = $db->query("SELECT `id` FROM `users`");
$db->deconnexion();
return $res['id'];
}
function get_rank()
{
$teams = Team::get_top();
for ($i = 0; $i < 10; $i++){
$tid = $teams[$i]->get_id();
if ($tid == $this->id)
return $i;
}
return 0;
}
function get_nbResExercisesByTheme($id_theme)
{
$db = new BDD();
$res = $db->unique_query("SELECT e.id_theme AS theme, count( s.id ) AS solved
FROM solved AS s
RIGHT OUTER JOIN exercices AS e ON e.id = s.id_exercice
AND s.id_user = ".$this->id."
AND e.id_theme = ".$id_theme);
$db->deconnexion();
return $res['solved'];
}
function authenticate($certificate)
{
//TODO
}
// Static methods
public static function get_teams()
{
$db = new BDD();
$ids = $db->query("SELECT `id` FROM `teams`");
$db->deconnexion();
$array = array();
foreach ($ids as $id){
$array[] = new Team($id['id']);
}
return $array;
}
public static function get_top()
{
$teams = Team::get_teams();
usort($teams, "cmp_team_pts");
return $teams;
}
public static function get_nbTeams()
{
$db = new BDD();
$res = $db->unique_query("SELECT COUNT(id) as count_teams FROM teams");
$db->deconnexion();
return $res['count_teams'];
}
}