unique_query("SELECT `id`, `id_theme`, `require`, `level`, `points`, `statement` FROM exercices WHERE id= '$id'"); if (!empty($res)) { $this->files = $db->query("SELECT `id`, `path`, `name` FROM exercice_files WHERE id_exercice = '$id'"); $this->keys = $db->query("SELECT `id`, `format`, `value` FROM exercice_keys 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(); } } } // 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; $exo = $this; $ret = 1; do { $exo = new Exercice($exo->require); $ret++; } while ($exo->require != ""); $this->number = $ret; } 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."' WHERE id = '$id'"); $aff = $db->affected(); } foreach ($this->keys as $k => $key) { $format = $key['format']; $value = $key['value']; if (isset($key['id'])) $kid = intval($key['id']); else $kid = 0; $db->escape($format); $db->escape($value); if (empty($kid)) { $db->query("INSERT INTO exercice_keys VALUES (NULL, '".$this->id."', '".$format."', UNHEX('".strhex($value)."'))"); $this->keys[$k]['id'] = $db->insert_id(); } else { $db->query("UPDATE exercice_keys SET `format` = '".$format."', `value` = UNHEX('".strhex($value).")') WHERE id = ".$kid); } } foreach ($this->files as $k => $file) { $path = $file['path']; $name = $file['name']; $sha1 = $file['sha1']; if (isset($file['id'])) $fid = intval($file['id']); $db->escape($path); $db->escape($name); $db->escape($sha1); if (!isset($file['id'])) { $db->query("INSERT INTO exercice_files VALUES (NULL, '".$id."', '".$path."', '".$name."', '".$sha1."');"); $this->files[$k]['id'] = $db->insert_id(); } else { $db->query("UPDATE exercice_files SET `path` = '".$path."', `name` = '".$name."', `sha1` = '".$sha1."' WHERE id = ".$fid); } } $db->deconnexion(); //FIXME return 1; } function create() { update(true); } function add_key($format, $value) { $this->keys[] = array( "format" => $format, "value" => $value ); } function add_file($path, $name, $sha1) { $this->files[] = array( "path" => $path, "name" => $name, "sha1" => $sha1 ); } }