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'];
?>
"/>