Diario de mi Proyecto : PFC sobre Moodle

  Archivos
Jul 07 [2]
Jun 07 [12]
Mayo 07 [13]
Mar 07 [3]
Nov 06 [6]
Oct 06 [5]


Sindicación
Artículos
Comentarios


Enlaces
eGrupos
ZoomBlog

 
Inicio | Mi Perfil | Suscríbete al blog
 

Problema de Moodle al recoger texto

Enlace permanente 27 de Mayo, 2007, 21:22

Vaya tardecita que llevo... Casi tres horas con el mismo problema... Creo que está solucionado, aunque tendré que hacer más pruebas.

Resulta que esta tarde he estado programando la forma en que voy a capturar el texto introducido desde una de las consolas por un usuario y pasarlo a un archivo para así compilarlo y ejecutarlo. Pero antes de esto, he tendio otros dos problemas que he tardado en solucionar.

Primer problema

El botón ejecutar. Necesitaba que el botón fuera de acción y no de formulario, es decir, pulsar y que se lance el proceso de compilación y ejecución. Pues resulta que en PHP no existen los botones interactivos, tenía que hacerlo en JavaScript con lo que no podía utilizar las funciones ya desarrolladas en PHP.
Investigando un poco encontré el siguiente código para "engañar" a PHP y que se produzca la acción deseada:

<?php
if( $_POST['ActBack']  == "1" && isset($_POST['ActBack'])){
              REMOTERUNNING_running($result,$text);
            }
?>

El código anterior se declara al comienzo de la página, y dentro del formulario:

<input type="hidden" name="ActBack" value="0">   
      <input type="submit" name="btnBack "value="Ejecutar" onClick = "eval('ActBack.value=1')">

Con lo anterior, el botón funciona perfectamente y al pulsarlo se ejecuta la función REMOTERUNNING_running();

Segundo problema

La ejecución de los programas los realizaré mediante la consola del sistema, pero los mensajes de error y warnings del compilador he preferido mostrarlos en la interfaz del módulo. Para representar un cuadro donde mostrar los mensajes utilicé la función print_textarea() para mostrar texto, pero al pasarle una variable con la información, aparecía todo seguido, sin retornos de carro.

Para solucionar esto, creé un pequeño FRAME dentro de la misma página, pero no conseguía pasarle el texto de ninguna forma así que he optado por crear una tabla con "Scroll" y css, es decir, que si los errores sobrepasan el tamaño de la ventana, se visualizará un scroll para navegar y ver toda la información.

Esto lo he conseguido con el siguiente código:

<style type="text/css">
            td.scroll
            {
                width: 420px;
                height: 260px;
                font-family: verdana;
                font-size: 11px;
                color: #ccddee;
                background-color: #203b59;
                scrollbar-base-color: #203b59;
                scrollbar-3d-light-color: #a0bbd9;
                scrollbar-arrow-color: #a0bbd9;
                scrollbar-darkshadow-color: #203b59;
                scrollbar-face-color: #203b59;
                scrollbar-highlight-color: #809bb9;
                scrollbar-shadow-color: #809bb9;
                scrollbar-track-color: #203b59;
                }
        </style>
...

<td><table width="420" height="260"><tr><td class="scroll"><div style="width: 100%; height: 100%; overflow: auto;"><p aling="left"><?php echo $result; ?></p></div></td></tr></table></td>


















Tercer problema

La propia captura del texto... Esto me ha dado muchísimos problemas. La solución ha sido sencilla, aunque estoy investigando alguna más.

Resulta que a la hora de capturar texto del usuario, Moodle posee un sistema de seguridad para no ejecutar código sql malicioso. Resulta que si se añade dobles comillas (" ") a un texto en un formulario, Moodle introduce barras invertidas para desactivar posibles instrucciones sql. Si introducimos texto como printf("Hola mundo"), Moodle lo convierte en printf(\"Hola mundo\") con lo cual se producen errores de compilación.

Por ahora no es posible desactivar esta medida de seguridad, pero lo que he realizado es tratar la cadena como un todo y sustituir esas \" por " o "\ por " de la siguiente manera:

$text= str_replace(' \" ',' " ',$text);
$text= str_replace(' "\ ',' " ',$text);


Con la solución de los problemas anteriores ya tengo el módulo muy avanzado con la funcionalidad que se marcó en los objetivos del proyecto. A partir de este momento, me centraré en la programación de las opciones, de los distintos lenguajes y puliré el código adaptándolo a las normas de estilo de Moodle.

Bye


Comentarios 20 ~ Comentar | Referencias (0)



Blog alojado en ZoomBlog.com

 

 

<<   Mayo 2007  >>
LMMiJVSD
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31    

Categorías
General [41] Sindicar categoría