server/onyx/include/common/Exercice.class.php

221 lines
4.8 KiB
PHP
Raw Normal View History

<?php
2013-10-26 18:54:15 +00:00
//TODO: get the exercice number
if(!defined('ONYX')) exit;
2013-10-10 02:47:02 +00:00
class Exercice
{
2013-10-10 03:52:48 +00:00
var $id = null;
var $number;
2013-10-10 02:47:02 +00:00
var $theme;
var $require;
var $level;
var $points;
var $statement;
2013-10-10 03:52:48 +00:00
var $files = array();
var $keys = array();
2013-10-10 02:47:02 +00:00
function Exercice($id=null)
{
if (!empty($id))
{
$db = new BDD();
2013-10-26 18:54:15 +00:00
// TODO escape id ?
2013-10-10 02:47:02 +00:00
$res = $db->unique_query("SELECT `id`, `id_theme`, `require`, `level`, `points`, `statement`
2013-10-10 03:52:48 +00:00
FROM exercices
2013-10-26 18:54:15 +00:00
WHERE id= '$id'");
2013-10-10 02:47:02 +00:00
if (!empty($res))
{
$this->files = $db->query("SELECT `id`, `path`, `name`, `sha1`
2013-10-10 02:47:02 +00:00
FROM exercice_files
2013-10-26 18:54:15 +00:00
WHERE id_exercice = '$id'");
2013-10-10 02:47:02 +00:00
$this->keys = $db->query("SELECT `id`, `format`, `value`
FROM exercice_keys
2013-10-26 18:54:15 +00:00
WHERE id_exercice = '$id'");
$db->deconnexion();
$this->id = $res['id'];
$this->theme = new Theme($res['id_theme']);
$this->require = $res['require'];
$this->level = $res['level'];
$this->points = $res['points'];
$this->statement = $res['statement'];
$this->set_number();
}
else
{
$db->deconnexion();
2013-10-10 02:47:02 +00:00
}
}
}
// retourne le nombre d'equipes qui ont résolues l'exercice
// trié par date
function get_solved()
{
$db = new BDD();
// TODO rename time by date in db ?
$res = $db->query("SELECT `id_team`, `time` FROM solved
WHERE id_exercice= '$this->id'
ORDER BY time");
$db->deconnexion();
return $res;
}
function set_number()
{
if ($this->require == "")
$this->number = 1;
2013-11-05 03:41:50 +00:00
$db = new BDD();
$exo = $this->id;
$ret = 0;
$checked = array();
do
{
2013-11-05 03:41:50 +00:00
array_push($checked, $exo);
$res = $db->unique_query("SELECT `require` FROM exercices WHERE id = ".intval($exo));
$exo = $res['require'];
$ret++;
2013-11-05 03:41:50 +00:00
} while ($exo != "" && !in_array($exo, $checked));
$this->number = $ret;
}
2013-10-10 02:47:02 +00:00
function update($create)
{
$id = $this->id;
$theme = intval($this->theme->get_id());
$require = $this->require;
$level = intval($this->level);
$points = intval($this->points);
$statement = $this->statement;
$files = $this->files;
$keys = $this->keys;
$db = new BDD();
$db->escape($id);
$db->escape($theme);
$db->escape($require);
$db->escape($statement);
if ($create)
{
$db->query("INSERT INTO exercices
VALUES ('".$id."', '".$theme."', '".$require."', '".$level."', '".$points."','".$statement."');");
}
else
{
$db->query("UPDATE exercices
SET `theme` = '".$theme."', `require` = '".$require."', `level` = '".$level."', `point` = '".$point."', `statement` = '".$statement."'
2013-10-26 18:54:15 +00:00
WHERE id = '$id'");
2013-10-10 02:47:02 +00:00
$aff = $db->affected();
}
foreach ($this->keys as $k => $key)
{
$format = $key['format'];
$value = $key['value'];
if (isset($key['id']))
2013-10-10 03:52:48 +00:00
$kid = intval($key['id']);
2013-10-10 02:47:02 +00:00
else
2013-10-10 03:52:48 +00:00
$kid = 0;
2013-10-10 02:47:02 +00:00
$db->escape($format);
$db->escape($value);
if (empty($kid))
{
2013-10-10 03:52:48 +00:00
$db->query("INSERT INTO exercice_keys
VALUES (NULL, '".$this->id."', '".$format."', UNHEX('".strhex($value)."'))");
2013-10-10 02:47:02 +00:00
2013-10-10 03:52:48 +00:00
$this->keys[$k]['id'] = $db->insert_id();
2013-10-10 02:47:02 +00:00
}
else
{
2013-10-10 03:52:48 +00:00
$db->query("UPDATE exercice_keys
2013-10-10 02:47:02 +00:00
SET `format` = '".$format."', `value` = UNHEX('".strhex($value).")')
WHERE id = ".$kid);
}
}
foreach ($this->files as $k => $file)
{
$path = $file['path'];
$name = $file['name'];
2013-10-10 03:11:40 +00:00
$sha1 = $file['sha1'];
2013-10-10 02:47:02 +00:00
if (isset($file['id']))
2013-10-10 03:52:48 +00:00
$fid = intval($file['id']);
2013-10-10 02:47:02 +00:00
$db->escape($path);
$db->escape($name);
2013-10-10 03:11:40 +00:00
$db->escape($sha1);
2013-10-10 02:47:02 +00:00
if (!isset($file['id']))
{
2013-10-10 03:52:48 +00:00
$db->query("INSERT INTO exercice_files
2013-10-10 03:11:40 +00:00
VALUES (NULL, '".$id."', '".$path."', '".$name."', '".$sha1."');");
2013-10-10 02:47:02 +00:00
2013-10-10 03:52:48 +00:00
$this->files[$k]['id'] = $db->insert_id();
2013-10-10 02:47:02 +00:00
}
else
{
2013-10-10 03:52:48 +00:00
$db->query("UPDATE exercice_files
SET `path` = '".$path."', `name` = '".$name."', `sha1` = '".$sha1."'
WHERE id = ".$fid);
2013-10-10 02:47:02 +00:00
}
}
$db->deconnexion();
//FIXME
return 1;
}
function create()
{
update(true);
}
function add_key($format, $value)
{
2013-10-10 03:52:48 +00:00
$this->keys[] = array(
"format" => $format,
"value" => $value
);
2013-10-10 02:47:02 +00:00
}
2013-10-10 03:11:40 +00:00
function add_file($path, $name, $sha1)
2013-10-10 02:47:02 +00:00
{
2013-10-10 03:52:48 +00:00
$this->files[] = array(
"path" => $path,
"name" => $name,
"sha1" => $sha1
);
2013-10-10 02:47:02 +00:00
}
2013-11-05 04:15:18 +00:00
public static function get_nbExoMax()
{
$db = new BDD();
$res = $db->unique_query("SELECT count(id) AS max FROM exercices
GROUP BY id_theme
ORDER BY max DESC
LIMIT 1");
$db->deconnexion();
return $res['max'];
}
2013-10-26 18:54:15 +00:00
}