} $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);
<?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">
/** * @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); }