]> git.llucax.com Git - software/sercom.git/blobdiff - sercom/subcontrollers/ejercicio/__init__.py
vuelvo a poner en el widget el tip
[software/sercom.git] / sercom / subcontrollers / ejercicio / __init__.py
index f0b0157f78651493b25b4fa6d6ff7f15a1d67ff7..d04dde1583f160b37d4becd7198a5b0669ca0e16 100644 (file)
@@ -11,6 +11,9 @@ from docutils.core import publish_parts
 from sercom.subcontrollers import validate as val
 from sercom.model import Ejercicio, Curso, Enunciado
 from cherrypy import request, response
 from sercom.subcontrollers import validate as val
 from sercom.model import Ejercicio, Curso, Enunciado
 from cherrypy import request, response
+
+from entrega import  *
+
 #}}}
 
 #{{{ Configuración
 #}}}
 
 #{{{ Configuración
@@ -74,8 +77,71 @@ def validate_new(data):
 def get_options():
     return [(0, _(u'--'))] + [(fk.id, fk.shortrepr()) for fk in fkcls.select()]
 
 def get_options():
     return [(0, _(u'--'))] + [(fk.id, fk.shortrepr()) for fk in fkcls.select()]
 
-def get_options1():
-    return [(0, _(u'--'))] + [(fk1.id, fk1.shortrepr()) for fk1 in fk1cls.select()]
+# Un poco de ajax para llenar los cursos
+ajax = """
+    function showHint()
+    {
+        MochiKit.DOM.showElement('hint')
+    }
+
+    function hideHint()
+    {
+        MochiKit.DOM.hideElement('hint')
+    }
+
+    function clearEnunciados ()
+    {
+        l = MochiKit.DOM.getElement('form_enunciadoID');
+        l.options.length = 0;
+        l.disabled = true;
+    }
+
+    function mostrarEnunciados (res)
+    {
+        clearEnunciados();
+        for(i in res.enunciados) {
+            id = res.enunciados[i].id;
+            label = res.enunciados[i].nombre;
+            MochiKit.DOM.appendChildNodes("form_enunciadoID", OPTION({"value":id}, label))
+        }
+        l.disabled = false;
+        hideHint();
+    }
+
+    function err (err)
+    {
+        alert("The metadata for MochiKit.Async could not be fetched :(");
+        hideHint();
+    }
+
+    function actualizar_enunciados ()
+    {
+        l = MochiKit.DOM.getElement('form_cursoID');
+        id = l.options[l.selectedIndex].value;
+        if (id == 0) {
+            clearEnunciados();
+            return;
+        }
+
+        url = "/enunciado/de_curso?curso_id="+id;
+        var d = loadJSONDoc(url);
+        d.addCallbacks(mostrarEnunciados, err);
+        showHint();
+    }
+
+    function prepare()
+    {
+        connect('form_cursoID', 'onchange', actualizar_enunciados);
+        hideHint();
+        clearEnunciados();
+        actualizar_enunciados();
+        if (select_enunciado) {
+            wait(0.1).addCallback(function (res) { return select_enunciado() });
+        }
+    }
+
+    MochiKit.DOM.addLoadEvent(prepare)
+"""
 
 class EjercicioForm(W.TableForm):
     class Fields(W.WidgetsList):
 
 class EjercicioForm(W.TableForm):
     class Fields(W.WidgetsList):
@@ -85,10 +151,10 @@ class EjercicioForm(W.TableForm):
             help_text=_(u'Requerido.'),
             validator=V.Int(not_empty=True))
         fk1 = W.SingleSelectField(name=fk1name+'ID', label=_(fk1name.capitalize()),
             help_text=_(u'Requerido.'),
             validator=V.Int(not_empty=True))
         fk1 = W.SingleSelectField(name=fk1name+'ID', label=_(fk1name.capitalize()),
-            options=get_options1, validator=V.Int(not_empty=True))
+            validator=V.Int(not_empty=True))
         grupal = W.CheckBox(name='grupal', label=_(u"Grupal?"))
     fields = Fields()
         grupal = W.CheckBox(name='grupal', label=_(u"Grupal?"))
     fields = Fields()
-    javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_nombre');")]
+    javascript = [W.JSSource("MochiKit.DOM.focusOnLoad('form_nombre');"), W.JSSource(ajax)]
 
 form = EjercicioForm()
 #}}}
 
 form = EjercicioForm()
 #}}}
@@ -98,6 +164,8 @@ class EjercicioController(controllers.Controller, identity.SecureResource):
     """Basic model admin interface"""
     require = identity.has_permission('admin')
 
     """Basic model admin interface"""
     require = identity.has_permission('admin')
 
+    entrega = EntregaController()
+
     @expose()
     def default(self, tg_errors=None):
         """handle non exist urls"""
     @expose()
     def default(self, tg_errors=None):
         """handle non exist urls"""
@@ -148,10 +216,6 @@ class EjercicioController(controllers.Controller, identity.SecureResource):
     def show(self,id, **kw):
         """Show record in model"""
         r = validate_get(id)
     def show(self,id, **kw):
         """Show record in model"""
         r = validate_get(id)
-        if r.descripcion is None:
-            r.desc = ''
-        else:
-            r.desc = publish_parts(r.descripcion, writer_name='html')['html_body']
         return dict(name=name, namepl=namepl, record=r)
 
     @expose()
         return dict(name=name, namepl=namepl, record=r)
 
     @expose()