public function testNuevaEjecucion() { // Crear un usuario e iniciar sesion $nick = "p" . time(); $uarg = array("nombre" => "problem tester", "email" => $nick . "@example.net", "password" => "foobar23123", "nick" => $nick, "user" => $nick, "ubicacion" => "celaya"); $result = c_usuario::nuevo($uarg); $result = c_sesion::login($uarg); // Crear un nuevo problema $contents = $titulo = "prob" . time(); for ($i = 0; $i < 100; $i++) { $contents .= "lorem ipsum"; } $arg = array("titulo" => $titulo, "problema" => $contents, "tiempoLimite" => 3456, "entrada" => "1 1\n1 2\n100 100\n", "salida" => "2\n3\n200\n"); $result = c_problema::nuevo($arg); // Crear un nuevo envio $arg = array("id_problema" => $result["probID"], "lang" => "java", "plain_source" => "import java.io.*;\n\t\t\t\t\tclass Main{ public static void main(String []a) throws Exception{\n\t\t\t\t\tBufferedReader br = new BufferedReader(new FileReader(\"data.in\"));\n\t\t\t\t\tPrintWriter pw = new PrintWriter((\"data.out\"));\n\t\t\t\t\tString s;\n\t\t\t\t\twhile((s=br.readLine()) != null){\n\t\t\t\t\t\t\tpw.println(Integer.parseInt(s.split(\" \")[0]) + Integer.parseInt(s.split(\" \")[1]) );\n\t\t\t\t\t}\n\t\t\t\t\tpw.flush(); pw.close();\n\t\t\t\t\t} }"); $result = c_ejecucion::nuevo($arg); //Revisar el estado del run hasta que no sea waiting... $detalles = c_ejecucion::details($result); $retry = 0; while ($retry < 5 && ($detalles["run"]["status"] == "WAITING" || $detalles["run"]["status"] == "JUDGING")) { $retry++; sleep(1); $detalles = c_ejecucion::details($result); } $this->assertEquals($detalles["run"]["status"], "OK"); }
public static function Nuevo($request) { try { self::ProblemaValido($request); } catch (InvalidArgumentException $e) { Logger::warn("imposible crear nuevo problema:" . $e->getMessage()); return array("result" => "error", "reason" => $e->getMessage()); } $usuarioActual = c_sesion::usuarioActual(); if (!SUCCESS($usuarioActual)) { Logger::error("no hay permiso para crear nuevo problema"); return array("result" => "error", "reason" => "No tienes permiso de hacer esto."); } $sql = "insert into Problema (titulo, problema, tiempoLimite, usuario_redactor) values (?,?,?,?)"; $inputarray = array($request["titulo"], $request["problema"], $request["tiempoLimite"], $usuarioActual["userID"]); global $db; $res = $db->Execute($sql, $inputarray); if ($res === false) { Logger::error("TEDDY:" . $db->ErrorNo() . " " . $db->ErrorMsg()); return array("result" => "error", "reason" => "Error interno."); } $id = $db->Insert_ID(); if (!file_exists(PATH_TO_CASOS)) { Logger::error("TEDDY: " . PATH_TO_CASOS . " no existe"); return array("result" => "error", "reason" => "Error interno."); } file_put_contents(PATH_TO_CASOS . "/" . $id . ".in", $request["entrada"]); file_put_contents(PATH_TO_CASOS . "/" . $id . ".out", $request["salida"]); Logger::info("Nuevo problema creado. ProbID: " . $id . " Titulo: " . $request["titulo"]); return array("result" => "ok", "probID" => $id); }
public function testNuevoProblemaCorrecto() { $titulo = "a" . time(); $rlistaprobs = array("public" => "NO"); $res = c_problema::lista($rlistaprobs); $probs = $res["problemas"]; $found = false; for ($i = 0; $i < sizeof($probs); $i++) { if ($probs[$i]["titulo"] == $titulo) { $found = true; break; } } $this->assertTrue(!$found); $contents = ""; for ($i = 0; $i < 100; $i++) { $contents .= "a"; } $arg = array("titulo" => $titulo, "problema" => $contents, "tiempoLimite" => 3456, "entrada" => "1 1\n1 2\n100 100\n", "salida" => "2\n3\n200\n"); // crear un usuario e iniciar sesion $nick = "p" . time(); $uarg = array("nombre" => "problem tester", "email" => $nick . "@example.net", "password" => "foobar23123", "nick" => $nick, "user" => $nick, "ubicacion" => "celaya"); $result = c_usuario::nuevo($uarg); $result = c_sesion::login($uarg); $result = c_problema::nuevo($arg); $this->assertTrue(SUCCESS($result)); $this->assertTrue(SUCCESS($result), "Crear un nuevo problema correctamente"); $rlistaprobs = array("public" => "NO"); $res = c_problema::lista($rlistaprobs); $probs = $res["problemas"]; $found = false; $found_prob = null; for ($i = 0; $i < sizeof($probs); $i++) { if ($probs[$i]["titulo"] == $titulo) { $found = true; $found_prob = $probs[$i]; break; } } $this->assertTrue($found); $this->assertEquals($found_prob["titulo"], $arg["titulo"]); $this->assertEquals($found_prob["problema"], $arg["problema"]); $this->assertEquals($found_prob["tiempoLimite"], $arg["tiempoLimite"]); $this->assertEquals($found_prob["usuario_redactor"], $argu["user"]); }
<?php if (!c_sesion::isAdmin()) { $result = c_sesion::usuarioActual(); if (SUCCESS($result)) { Logger::warn($result["userID"] . " quiso entrar a admin y no es admin"); } ?> <div class="post_blanco"> Necesitas ser administrador . </div> <?php include_once "post_footer.php"; exit; }
<?php if (c_sesion::isLoggedIn()) { ?> <div class="post"> <div class="navcenter" align=center> <table border=0 style="width:100%"> <tr class="navcenter"> <td colspan=1> <a href="runs.php?user=<?php echo $_SESSION['userID']; ?> "> <img id="avatar" src="https://secure.gravatar.com/avatar/<?php $res = c_sesion::usuarioActual(); if (SUCCESS($res)) { $user = $res["user"]; echo md5($user['mail']); } ?> ?s=140" alt="" width="20" height="20" /> <b><?php echo $_SESSION['userID']; ?> </b> !<br> </a> </td> <td> <a href="editprofile.php"><img src="img/71.png" > Editar tu perfil</a> </td> <td id="mailbox_menu">
public static function ResetPassword($request) { $user = c_sesion::usuarioActual(); if (SUCCESS($user) && !is_null($user["user"])) { $request["user"] = $user["user"]["userID"]; } $sql = "update Usuario set pswd = ? where userID = ?"; $inputarray = array(crypt($request["password"]), $request["user"]); global $db; $res = $db->Execute($sql, $inputarray); return array("result" => "ok"); }
} $res = c_usuario::problemasIntentados($user); if (SUCCESS($res)) { $intentados = $res["problemas"]; } } if (SUCCESS($result)) { $problemas = $result["problemas"]; for ($i = 0; $i < sizeof($problemas); $i++) { $prob = $problemas[$i]; if ($i % 2 == 0) { echo "<TR style='background:#e7e7e7;' align=center>"; } else { echo "<TR align=center>"; } if (c_sesion::isLoggedIn() || isset($_GET["userID"])) { echo "<TD >"; if (in_array($prob['probID'], $resueltos)) { echo "<img title=\"Problema resuelto\" src=\"img/10.png\">"; } elseif (in_array($prob['probID'], $intentados)) { echo "<img title=\"Problema intentado\" src=\"img/12.png\">"; } echo "</td>"; } echo "<TD align='center' >" . $prob['probID'] . "</TD>"; echo "<TD align='left' ><a href='verProblema.php?id=" . $prob['probID'] . "'>" . $prob['titulo'] . "</a> </TD>"; echo "<TD align='center' >" . $prob['vistas'] . " </TD>"; echo "<TD align='center' >" . $prob['aceptados'] . " </TD>"; echo "<TD align='center' >" . $prob['intentos'] . " </TD>"; if ($prob['intentos'] != 0) { printf("<TD align='center' >%2.2f%%</TD>", $prob['aceptados'] / $prob['intentos'] * 100);
/** * @param id_problema int el id del problema a resolver * @param id_concurso int el id del concurso si es que este run pertenece a un concurso * @param lang String el identificador del lenguaje ( c,cpp,java,py,php,pl) * @param plain_source String * * */ public static function nuevo($request) { if (!c_sesion::isLoggedIn()) { Logger::warn("Se intento enviar una ejecucion sin sesion"); return array("result" => "error", "reason" => "Debes iniciar sesion para poder enviar problemas."); } if (!(isset($request['id_problema']) && isset($request['lang']))) { return array("result" => "error", "reason" => "Faltan parametros (id_problema y lang)"); } if (empty($_FILES) && !isset($request["plain_source"])) { return array("result" => "error", "reason" => "No se envio el codigo fuente."); } $usuarioArray = c_sesion::usuarioActual(); $usuario = $usuarioArray["userID"]; $id_problema = stripslashes($request["id_problema"]); $lang = stripslashes($request["lang"]); if (isset($request["id_concurso"])) { $id_concurso = stripslashes($request["id_concurso"]); } else { $id_concurso = null; } // Revisar que pueda escribir el codigo fuente if (!is_dir(TEDDY_CODIGOS_PATH)) { return array("result" => "error", "reason" => "El directorio de codigos no existe."); } if (!is_writable(TEDDY_CODIGOS_PATH)) { return array("result" => "error", "reason" => "No se puede escribir en el directorio de codigos."); } global $db; $sql = "select probID from Problema where BINARY ( probID = ?) "; $inputarray = array($request["id_problema"]); $resultado = $db->Execute($sql, $inputarray); if ($resultado->RecordCount() == 0) { return array("result" => "error", "reason" => "El problema no existe."); } // si el concurso no es public, // solo un admin puede enviar problemas // $lang_desc = null; switch ($lang) { case "java": $lang_desc = "JAVA"; break; case "c": $lang_desc = "C"; break; case "cpp": $lang_desc = "C++"; break; case "py": $lang_desc = "Python"; break; case "cs": $lang_desc = "C#"; break; case "pl": $lang_desc = "Perl"; break; case "php": $lang_desc = "Php"; break; default: return array("result" => "error", "reason" => "\"" . $lang . "\" no es un lenguaje reconocido por Teddy."); } if (isset($_SERVER["REMOTE_ADDR"])) { $ip = $_SERVER["REMOTE_ADDR"]; } else { $ip = "0.0.0.0"; } /** * @todo * - vamos a ver si estoy en un concurso, y si estoy en un concurso, que ese problema pertenesca a ese concurso * - vamos a ver que no haya enviado hace menos de 5 min si esta en un concurso * - insertar un nuevo run y obtener el id insertado, como estado, hay que ponerle uploading **/ if ($id_concurso === null) { $sql = "INSERT INTO Ejecucion (`userID`, `status`, `probID` , `remoteIP`, `LANG`, `fecha` ) \n\t\t\t\t\t\t\t\t\tVALUES (?, 'WAITING', ?, ?, ?, ?);"; $inputarray = array($usuario, $id_problema, $ip, $lang_desc, date("Y-m-d H:i:s", mktime(date("H"), date("i")))); } else { $sql = "INSERT INTO Ejecucion (`userID` ,`status`, `probID` , `remoteIP`, `LANG`, `Concurso`, `fecha` ) \n\t\t\t\t\t\t\t\t\tVALUES (?, 'WAITING', ?, ?, ?, ?, ?);"; $inputarray = array($usuario, $id_problema, $ip, $lang_desc, $id_concurso, date("Y-m-d H:i:s", mktime(date("H"), date("i")))); } $result = $db->Execute($sql, $inputarray); // Si hacemos esto $execID = $db->Insert_ID( ); hay un Overflow porque los ids son muy grandes $sql = "select execID from Ejecucion where ( userId = ? ) order by fecha DESC LIMIT 1"; $inputarray = array($usuario); try { $resultado = $db->Execute($sql, $inputarray)->GetArray(); $execID = $resultado[0]["execID"]; } catch (exception $e) { Logger::error($e); return array("result" => "error", "reason" => "Error al hacer la consulta"); } if (!empty($_FILES)) { if (!move_uploaded_file($_FILES['Filedata']['tmp_name'], TEDDY_CODIGOS_PATH . $execID . "." . $lang)) { return array("result" => "error", "reason" => "Error al subir el archivo"); } } else { // Crear un archivo y escribir el contenido if (file_put_contents(TEDDY_CODIGOS_PATH . $execID . "." . $lang, $request['plain_source']) === false) { return array("result" => "error"); } } Logger::info("Nueva ejecucion " . $execID); return array("result" => "ok", "execID" => $execID); }
<?php // This script is included by every page // that requires a logged user if (!c_sesion::isLoggedIn()) { ?> <div class="post_blanco"> Necesitas iniciar sesion. </div> <?php include_once "post_footer.php"; exit; }
<?php require_once "../serverside/bootstrap.php"; define("PAGE_TITLE", "Editar perfil"); require_once "head.php"; require_once "require_login.php"; $respuesta = c_sesion::usuarioActual(); $datos = $respuesta["user"]; ?> <div class="post_blanco" > <form action="" method="post" onsubmit="return validate()" > <p> Aqui puedes cambiar los datos de tu perfil. </p> <label for="nick"> Usuario: </label> <input type="text" id="nick" name="nick" class="text" value="<?php echo $datos['userID']; ?> " DISABLED/> <label for="nombre" class="datos"> Nombre completo : </label> <input type="text" id="nombre" name="nombre" class="text datos" value="<?php echo $datos['nombre']; ?> "/>