Пример #1
0
    echo '</div>';
}
if (isset($update['stat'])) {
    echo '<div id=stat>';
    $noq = $db->getValue("select NoQ from oes_Exam where ID = {$exam}");
    $result = $db->query("select\n\t\t\t\tT.ID as Test,\n\t\t\t\tIDCode,\n\t\t\t\tLastName,\n\t\t\t\tFirstName,\n\t\t\t\tDoB,\n\t\t\t\tT.TimeSpent,\n\t\t\t\t(select count(distinct ID) from oes_Answer join oes_TQ on ID = TQ\n\t\t\t\t\t\twhere Test = T.ID)\n\t\t\t\t\t\tas Done\n\t\t\tfrom oes_Student join\n\t\t\t\t(select * from oes_Test where Exam = {$exam}) as T\n\t\t\t\ton T.Student = oes_Student.ID");
    $nor = mysql_num_rows($result);
    if ($nor == 0) {
        echo "<div id=sum>Chưa có bài dự thi nào</div>";
    } else {
        echo "<div id=sum>Tổng số {$nor} bài dự thi</div>";
        echo '<table class=examtable cellspacing="0"><tr>';
        echo '<th>MSV<th>Họ tên<th>NS<th>Hết<th>Làm<th>Đúng<th>XS<th>Điểm';
        $c = 0;
        while ($row = mysql_fetch_array($result)) {
            echo $c++ & 1 ? "<tr class=alt>" : "<tr>";
            $correct = getCorrectCount($db, $row['Test']);
            echo '<td>' . $row['IDCode'];
            echo '<td>' . $row['LastName'] . ' ' . $row['FirstName'];
            echo '<td>' . $row['DoB'];
            echo '<td align=right>' . $row['TimeSpent'] . ' phút';
            echo '<td align=right>' . $row['Done'] . ' câu';
            echo '<td align=right>' . $correct . ' câu';
            echo '<td align=right>' . ($row['Done'] ? round(100 * $correct / $row['Done']) . '%' : '---');
            echo '<td align=right>' . round(round(40 * $correct / $noq) / 4, 2);
        }
        echo '</table>';
    }
    echo '</div>';
    mysql_free_result($result);
}
Пример #2
0
function getData($code, $connection)
{
    if (!isTokenUser()) {
        $code = 4;
    }
    switch ($code) {
        //////////////////////CASE -1/////////////////////////////////////
        //Si entra aqui es porque ningun dato de S_POST coincide con una acción valida. Ya que el $dataCode por defecto es -1
        case -1:
            $response = array("error" => 1030, "description" => "Error no se ejecuto ninguna acción, verifica los parametros de entrada.");
            break;
            //////////////////////CASE 0/////////////////////////////////////
            //Obtenemos las opciones a mostrar de un pregunta y las devolvemos en un array en formato json
        //////////////////////CASE 0/////////////////////////////////////
        //Obtenemos las opciones a mostrar de un pregunta y las devolvemos en un array en formato json
        case 0:
            if ($connection) {
                $id_pregunta = $_POST["id_pregunta"];
                $dataOptions = $connection->query("SELECT * FROM " . TABLE_PREFIX . TABLE_OPCIONES . " where id_pregunta = " . $id_pregunta);
                $data;
                /*
                 * obtenemos los datos de la base de datos en un array asociativo.
                 */
                while ($fila = $dataOptions->fetch_assoc()) {
                    $data[] = $fila;
                }
                //dado que los valores de la base de datos vienen en codificacion utf-8, hay que transformar aquellas columnas con campos de texto.
                $dataResponse = codificationArray($data, "m_option");
                //para la variable m_option de la tabla n_opciones se codifica en utf-8
                $response = $dataResponse;
            } else {
                $response = array("error" => 1020, "description" => "Error conexión no establecida");
            }
            break;
            //////////////////////CASE 1/////////////////////////////////////
            //Devolvemos la pregunta dado una paginacion ( con un LIMIT en la select filtramos la paginación)			.
        //////////////////////CASE 1/////////////////////////////////////
        //Devolvemos la pregunta dado una paginacion ( con un LIMIT en la select filtramos la paginación)			.
        case 1:
            if (!isTokenTest()) {
                createTokenTest(getTokenUser());
            } else {
                if (isTokenTest() && isset($_POST["isFirstSelectedTest"]) && $_POST["isFirstSelectedTest"] == "true") {
                    //$response = array("error" => 1200, "Error token desincronizado");
                    $response = array("error" => 1200, "desError" => "Test desincronizado", "page" => getPage(), "category" => getCategory(), "token_test" => getTokenTest(), "token_user" => getTokenUser());
                    break;
                }
            }
            //sincronizamos el avanze de paginas
            if (!isPage()) {
                createPage(intval($_POST["pagination"]));
            } else {
                if (isset($_SESSION["is_page_refresh"]) && $_SESSION["is_page_refresh"] && getPage() < intval($_POST["pagination"])) {
                    createPage(intval(getPage()) + 1);
                } else {
                    if (isset($_SESSION["is_page_refresh"]) && $_SESSION["is_page_refresh"]) {
                        createPage(intval(getPage()));
                    } else {
                        createPage(intval(getPage()) + 1);
                    }
                }
            }
            if (!isCategory()) {
                //si no esta sincroniada la categoria se sincroniza
                createCategory(intval($_POST["id"]));
            }
            if ($connection) {
                $pagination = getPage();
                //numero de pagina.
                $id = $_POST["id"];
                //id categoria: 1- ingles, 2- aleman...
                $result = $connection->query("SELECT * FROM " . TABLE_PREFIX . TABLE_PREGUNTAS . " where id_title = " . $id . " LIMIT " . $pagination . ",1");
                $countLengthData = $connection->query("SELECT count(id) as count FROM " . TABLE_PREFIX . TABLE_PREGUNTAS . " where id_title = " . $id);
                $data = array();
                while ($fila = $result->fetch_assoc()) {
                    $data[] = $fila;
                }
                $dataResponse = codificationArray($data, "question");
                //para la variable question de la tabla n_preguntas se codifica en utf-8
                $dataLength = $countLengthData->fetch_assoc();
                $dataResponse[1] = $dataLength;
                //numero de preguntas para la categoria actual
                if (!isCountQuestion()) {
                    createCountQuestion($dataLength);
                }
                $dataResponse[2] = getTokenTest();
                $dataResponse[3] = getTokenUser();
                $response = $dataResponse;
            } else {
                $response = array("error" => 1020, "description" => "Error conexión no establecida");
            }
            break;
            //////////////////////CASE 2/////////////////////////////////////
            // Actualizamos el progresso del cliente.
        //////////////////////CASE 2/////////////////////////////////////
        // Actualizamos el progresso del cliente.
        case 2:
            if (isPage()) {
                $canContinue = false;
                if (isset($_POST["pageUpdate"]) && $_POST["pageUpdate"]) {
                    if (intval(getPage()) == intval($_POST["pageUpdate"])) {
                        $canContinue = true;
                    } else {
                        $canContinue = false;
                    }
                } else {
                    $canContinue = true;
                }
                if ($canContinue === true) {
                    if (isset($_SESSION["u_email"])) {
                        $emailClient = $_SESSION["u_email"];
                        $id_question = $_POST["id_question"];
                        $id_option = $_POST["id_option"];
                        if ($connection) {
                            if (!isset($_SESSION["id_cliente"])) {
                                $resultQueryClientes = $connection->query("select id from " . TABLE_PREFIX . TABLE_CLIENTES . " WHERE email = '{$emailClient}'");
                                $responseQueryClientes = $resultQueryClientes->fetch_assoc();
                                $_SESSION["id_cliente"] = $responseQueryClientes["id"];
                            }
                            $query = "SELECT count(o.id) as count\n\t\t\t\t\t\t\t\t\t\t  FROM " . TABLE_PREFIX . TABLE_PREGUNTAS . " p inner join " . TABLE_PREFIX . TABLE_OPCIONES . " o\n\t\t\t\t\t\t\t\t\t\t  on o.id_pregunta = p.id\n\t\t\t\t\t\t\t\t\t\t  where {$id_option}. = (select id_opcion from " . TABLE_PREFIX . TABLE_RESPUESTA . " where id_pregunta = {$id_question})";
                            $resultCountCorrect = $connection->query($query);
                            $countCorrectOption = $resultCountCorrect->fetch_assoc();
                            $codeTemp = getTokenTest();
                            $id_client = $_SESSION["id_cliente"];
                            $id_category = getCategory();
                            $date_update = date("Y-m-d H:i:s");
                            $insert = $connection->query("INSERT INTO " . TABLE_PREFIX . TABLE_HISTORY_TEST . " (id_client,id_option,id_question,id_title,code_validation,m_date) VALUES({$id_client},{$id_option},{$id_question},{$id_category},'{$codeTemp}','{$date_update}')");
                            //obtenemos el numero de preguntas de esta categoria.
                            $countQuestionResult = $connection->query("SELECT count(id) as count FROM " . TABLE_PREFIX . TABLE_PREGUNTAS . " where id_title = " . $id_category);
                            $countQuestionTemp = $countQuestionResult->fetch_assoc();
                            $countQuestion = $countQuestionTemp["count"];
                            if (intval($countCorrectOption["count"] > 0)) {
                                //si es mayor que cero significa que es la que tenemos marcada como buena en la base de datos.
                                if (!isset($_SESSION["correctCount"])) {
                                    //si el correctCount no está creado aún lo creamos con valor a 1 porque yá tenemos una respuesta correcta.
                                    $_SESSION["correctCount"] = 1;
                                } else {
                                    //si ya estaba activo, solo incrementamos su valor en 1.
                                    $_SESSION["correctCount"] = intval($_SESSION["correctCount"]) + 1;
                                }
                                $dataUpdate = array("check" => $_SESSION['correctCount']);
                            } else {
                                $dataUpdate = array("check" => -1);
                                //editamos el mensaje de respuesta.
                            }
                        } else {
                            $dataUpdate = array("error" => 1020, "description" => "Error conexión no establecida");
                        }
                    } else {
                        $dataUpdate = array("error" => 1050, "description" => "Error de session, la sessión ha expirado.");
                    }
                } else {
                    $dataUpdate = array("error" => 1200, "desError" => "Test desincronizado", "page" => getPage(), "category" => getCategory(), "token_test" => getTokenTest(), "token_user" => getTokenUser());
                }
                $response = $dataUpdate;
                break;
            } else {
                $response = array("error" => 1050, "description" => "Error de session, la sessión ha expirado.");
                break;
            }
        case 3:
            //aqui el cliente a finalizado el test y mostramos el detalle de los resultados.
            $id_client = $_SESSION["id_cliente"];
            $date_update = date("Y-m-d H:i:s");
            $id_category = getCategory();
            $puntuacion = $_SESSION["correctCount"];
            $token_test = getTokenTest();
            $result = $connection->query("INSERT INTO " . TABLE_PREFIX . TABLE_HISTORY . " (id_client,id_title,code_validation,m_date,points) VALUES ({$id_client},{$id_category},'{$token_test}','{$date_update}',{$puntuacion})");
            if ($result) {
                $response = array("check" => "register inserted.", "data" => array("num_question" => getCountQuestion(), "correctCount" => getCorrectCount()));
            } else {
                $response = array("error" => $connection->error);
            }
            $dataEndTest = isEndTest($id_category, $token_test, $connection);
            if ($dataEndTest) {
                $_SESSION["end_test"] = true;
                sendResult($_SESSION["u_email"], "Resultado del Test en GRUPOIOE", showResume($dataEndTest, $connection));
            }
            break;
        case 4:
            //aqui no existe el token de usuario, la sesion posiblemente haya expirado.
            $response = array("error" => 1100, "description" => "Error token expirado");
            break;
        case 5:
            //aqui devolvemos si hay un test activo o no.
            $response = array("isTestActive" => isTokenTest());
            break;
        case 6:
            //aqui estamos devolviendo los datos desde la cache de la sesion.
            if (isTestFinished()) {
                $response = array("cache" => "get data from cache.", "data" => array("num_question" => getCountQuestion(), "correctCount" => getCorrectCount()));
            } else {
                $response = array("page" => getPage(), "category" => getCategory(), "token_test" => getTokenTest(), "token_user" => getTokenUser());
            }
            break;
            //////////////////////DEFAULT/////////////////////////////////////
            //cualquier accion no contemplada entrara aqui.
        //////////////////////DEFAULT/////////////////////////////////////
        //cualquier accion no contemplada entrara aqui.
        default:
            $response = array("error" => 1040, "description" => "Error de PHP, error inesperado");
            break;
    }
    $connection->close();
    echo json_encode($response);
}