Los permisos ahora por default son para entregar y todos los metodos administrativos fueron
cerrados para admin. El Entregador solo puede listar y show y de esta forma puede bajar los
enunciados, ver las fechas de entrega, etc. Se ocultan columnas de las tablas que no son necesarias
y se sacan links cuando el usuario no es ADMIN.
#{{{ Controlador
class EjercicioController(controllers.Controller, identity.SecureResource):
"""Basic model admin interface"""
#{{{ Controlador
class EjercicioController(controllers.Controller, identity.SecureResource):
"""Basic model admin interface"""
- require = identity.has_permission('admin')
+ require = identity.has_permission('entregar')
entrega = EntregaController()
entrega = EntregaController()
return dict(records=r, name=name, namepl=namepl, parcial=autor)
@expose(template='kid:%s.templates.new' % __name__)
return dict(records=r, name=name, namepl=namepl, parcial=autor)
@expose(template='kid:%s.templates.new' % __name__)
+ @identity.require(identity.has_permission('admin'))
def new(self, **kw):
"""Create new records in model"""
return dict(name=name, namepl=namepl, form=form, values=kw)
@validate(form=form)
@error_handler(new)
def new(self, **kw):
"""Create new records in model"""
return dict(name=name, namepl=namepl, form=form, values=kw)
@validate(form=form)
@error_handler(new)
+ @identity.require(identity.has_permission('admin'))
@expose()
def create(self, **kw):
"""Save or create record to model"""
@expose()
def create(self, **kw):
"""Save or create record to model"""
raise redirect('list')
@expose(template='kid:%s.templates.edit' % __name__)
raise redirect('list')
@expose(template='kid:%s.templates.edit' % __name__)
+ @identity.require(identity.has_permission('admin'))
def edit(self, id, **kw):
"""Edit record in model"""
r = validate_get(id)
def edit(self, id, **kw):
"""Edit record in model"""
r = validate_get(id)
@validate(form=form)
@error_handler(edit)
@expose()
@validate(form=form)
@error_handler(edit)
@expose()
+ @identity.require(identity.has_permission('admin'))
def update(self, id, **kw):
"""Save or create record to model"""
r = validate_set(id, kw)
def update(self, id, **kw):
"""Save or create record to model"""
r = validate_set(id, kw)
return dict(name=name, namepl=namepl, record=r)
@expose()
return dict(name=name, namepl=namepl, record=r)
@expose()
+ @identity.require(identity.has_permission('admin'))
def delete(self, id):
"""Destroy record in model"""
validate_del(id)
def delete(self, id):
"""Destroy record in model"""
validate_del(id)
#{{{ Controlador
class EntregaController(controllers.Controller, identity.SecureResource):
"""Basic model admin interface"""
#{{{ Controlador
class EntregaController(controllers.Controller, identity.SecureResource):
"""Basic model admin interface"""
- require = identity.has_permission('admin')
+ require = identity.has_permission('entregar')
@expose(template='kid:%s.templates.list' % __name__)
@validate(validators=dict(ejercicio_id=V.Int))
@expose(template='kid:%s.templates.list' % __name__)
@validate(validators=dict(ejercicio_id=V.Int))
return dict(records=r, name=name, namepl=namepl, parcial=str(ejercicio_id))
@expose(template='kid:%s.templates.new' % __name__)
return dict(records=r, name=name, namepl=namepl, parcial=str(ejercicio_id))
@expose(template='kid:%s.templates.new' % __name__)
+ @identity.require(identity.has_permission('admin'))
def new(self, ejercicio_id, **kw):
"""Create new records in model"""
form.fields[6].attrs['value'] = ejercicio_id
def new(self, ejercicio_id, **kw):
"""Create new records in model"""
form.fields[6].attrs['value'] = ejercicio_id
@validate(form=form)
@error_handler(new)
@expose()
@validate(form=form)
@error_handler(new)
@expose()
+ @identity.require(identity.has_permission('admin'))
def create(self, ejercicio_id, **kw):
"""Save or create record to model"""
e = Ejercicio.get(ejercicio_id)
def create(self, ejercicio_id, **kw):
"""Save or create record to model"""
e = Ejercicio.get(ejercicio_id)
raise redirect('/ejercicio/entrega/'+str(e.id))
@expose()
raise redirect('/ejercicio/entrega/'+str(e.id))
@expose()
+ @identity.require(identity.has_permission('admin'))
def delete(self, id):
"""Destroy record in model"""
r = validate_get(id)
def delete(self, id):
"""Destroy record in model"""
r = validate_get(id)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?python from turbogears import identity ?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
py:extends="'../../../../templates/master.kid'">
<head>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
py:extends="'../../../../templates/master.kid'">
<head>
<td><span py:replace="record.activo">activa</span></td>
<td><span py:replace="record.observaciones">obs</span></td>
<td>
<td><span py:replace="record.activo">activa</span></td>
<td><span py:replace="record.observaciones">obs</span></td>
<td>
- <a href="${tg.url('/ejercicio/entrega/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
+ <a py:if="'admin' in identity.current.permissions" href="${tg.url('/ejercicio/entrega/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
</td>
</tr>
</table>
<br/>
</td>
</tr>
</table>
<br/>
-<a href="${tg.url('/ejercicio/entrega/new/'+parcial)}">Agregar</a>
+<a py:if="'admin' in identity.current.permissions" href="${tg.url('/ejercicio/entrega/new/'+parcial)}">Agregar</a>
<a href="${tg.url('/ejercicio/list')}">Volver a Ejericicios</a>
<div py:for="page in tg.paginate.pages">
<a href="${tg.url('/ejercicio/list')}">Volver a Ejericicios</a>
<div py:for="page in tg.paginate.pages">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?python from turbogears import identity ?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
py:extends="'../../../templates/master.kid'">
<head>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
py:extends="'../../../templates/master.kid'">
<head>
<table class="list">
<tr>
<table class="list">
<tr>
+ <th py:if="'admin' in identity.current.permissions">Curso</th>
<th>Numero</th>
<th>Enunciado</th>
<th>Es Grupal?</th>
<th>Operaciones</th>
</tr>
<tr py:for="record in records">
<th>Numero</th>
<th>Enunciado</th>
<th>Es Grupal?</th>
<th>Operaciones</th>
</tr>
<tr py:for="record in records">
- <td><a href="${tg.url('/curso/show/%d' % record.id)}"><span py:replace="record.curso.shortrepr()">curso</span></a></td>
+ <td py:if="'admin' in identity.current.permissions"><a href="${tg.url('/curso/show/%d' % record.id)}"><span py:replace="record.curso.shortrepr()">curso</span></a></td>
<td><span py:replace="record.numero">numero</span></td>
<td><a py:if="record.enunciadoID is not None"
href="${tg.url('/enunciado/show/%d' % record.enunciado.id)}"><span
<td><span py:replace="record.numero">numero</span></td>
<td><a py:if="record.enunciadoID is not None"
href="${tg.url('/enunciado/show/%d' % record.enunciado.id)}"><span
</td>
<td>
<a href="${tg.url('/ejercicio/entrega/%d' % record.id)}">Entregas</a>
</td>
<td>
<a href="${tg.url('/ejercicio/entrega/%d' % record.id)}">Entregas</a>
- <a href="${tg.url('/ejercicio/edit/%d' % record.id)}">Editar</a>
- <a href="${tg.url('/ejercicio/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
+ <a py:if="'admin' in identity.current.permissions" href="${tg.url('/ejercicio/edit/%d' % record.id)}">Editar</a>
+ <a py:if="'admin' in identity.current.permissions" href="${tg.url('/ejercicio/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
</td>
</tr>
</table>
<br/>
</td>
</tr>
</table>
<br/>
-<a href="${tg.url('/ejercicio/new')}">Agregar</a>
+<a py:if="'admin' in identity.current.permissions" href="${tg.url('/ejercicio/new')}">Agregar</a>
<a py:if="parcial" href="${tg.url('/ejercicio/list')}">Ver todo</a>
<div py:for="page in tg.paginate.pages">
<a py:if="parcial" href="${tg.url('/ejercicio/list')}">Ver todo</a>
<div py:for="page in tg.paginate.pages">
#{{{ Controlador
class EnunciadoController(controllers.Controller, identity.SecureResource):
"""Basic model admin interface"""
#{{{ Controlador
class EnunciadoController(controllers.Controller, identity.SecureResource):
"""Basic model admin interface"""
- require = identity.has_permission('admin')
+ require = identity.has_permission('entregar')
@expose()
def default(self, tg_errors=None):
@expose()
def default(self, tg_errors=None):
return dict(records=r, name=name, namepl=namepl, parcial=autor)
@expose(template='kid:%s.templates.new' % __name__)
return dict(records=r, name=name, namepl=namepl, parcial=autor)
@expose(template='kid:%s.templates.new' % __name__)
+ @identity.require(identity.has_permission('admin'))
def new(self, **kw):
"""Create new records in model"""
return dict(name=name, namepl=namepl, form=form, values=kw)
def new(self, **kw):
"""Create new records in model"""
return dict(name=name, namepl=namepl, form=form, values=kw)
@validate(form=form)
@error_handler(new)
@expose()
@validate(form=form)
@error_handler(new)
@expose()
+ @identity.require(identity.has_permission('admin'))
def create(self, archivo, **kw):
"""Save or create record to model"""
kw['archivo'] = archivo.file.read()
def create(self, archivo, **kw):
"""Save or create record to model"""
kw['archivo'] = archivo.file.read()
raise redirect('list')
@expose(template='kid:%s.templates.edit' % __name__)
raise redirect('list')
@expose(template='kid:%s.templates.edit' % __name__)
+ @identity.require(identity.has_permission('admin'))
def edit(self, id, **kw):
"""Edit record in model"""
r = validate_get(id)
def edit(self, id, **kw):
"""Edit record in model"""
r = validate_get(id)
@validate(form=form)
@error_handler(edit)
@expose()
@validate(form=form)
@error_handler(edit)
@expose()
+ @identity.require(identity.has_permission('admin'))
def update(self, id, **kw):
"""Save or create record to model"""
r = validate_set(id, kw)
def update(self, id, **kw):
"""Save or create record to model"""
r = validate_set(id, kw)
return dict(name=name, namepl=namepl, record=r)
@expose()
return dict(name=name, namepl=namepl, record=r)
@expose()
+ @identity.require(identity.has_permission('admin'))
def delete(self, id):
"""Destroy record in model"""
r = validate_get(id)
def delete(self, id):
"""Destroy record in model"""
r = validate_get(id)
return r.archivo
@expose("json")
return r.archivo
@expose("json")
+ @identity.require(identity.has_permission('admin'))
def de_curso(self, curso_id):
c = Curso.get(curso_id)
e = Enunciado.selectByCurso(c)
def de_curso(self, curso_id):
c = Curso.get(curso_id)
e = Enunciado.selectByCurso(c)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?python from turbogears import identity ?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
py:extends="'../../../templates/master.kid'">
<head>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"
py:extends="'../../../templates/master.kid'">
<head>
<th>Nombre</th>
<th>Descripción</th>
<th>Autor</th>
<th>Nombre</th>
<th>Descripción</th>
<th>Autor</th>
- <th title="Casos de Prueba">CP</th>
+ <th py:if="'admin' in identity.current.permissions" title="Casos de Prueba">CP</th>
<th>Operaciones</th>
</tr>
<tr py:for="record in records">
<th>Operaciones</th>
</tr>
<tr py:for="record in records">
<td><span py:replace="record.anio">descripción</span></td>
<td><a href="${tg.url('/enunciado/show/%d' % record.id)}"><span py:replace="record.nombre">nombre</span></a></td>
<td><span py:replace="tg.summarize(record.descripcion, 30)">descripción</span></td>
<td><span py:replace="record.anio">descripción</span></td>
<td><a href="${tg.url('/enunciado/show/%d' % record.id)}"><span py:replace="record.nombre">nombre</span></a></td>
<td><span py:replace="tg.summarize(record.descripcion, 30)">descripción</span></td>
- <td><a py:if="record.autorID is not None"
- href="${tg.url('/docente/show/%d' % record.autor.id)}"><span
- py:replace="tg.summarize(record.autor.shortrepr(), 30)">autor</span></a></td>
- <td><a py:if="len(record.casos_de_prueba)"
+ <td>
+ <a py:if="'admin' in identity.current.permissions and record.autorID is not None"
+ href="${tg.url('/docente/show/%d' % record.autor.id)}" py:content="tg.summarize(record.autor.shortrepr(), 30)">autor</a>
+ <span py:if="'admin' not in identity.current.permissions and record.autorID is not None"
+ py:replace="tg.summarize(record.autor.shortrepr(), 30)">autor</span>
+ </td>
+ <td py:if="'admin' in identity.current.permissions"><a py:if="len(record.casos_de_prueba)"
href="${tg.url('/caso_de_prueba/list', enunciado=record.id)}"><span
py:replace="len(record.casos_de_prueba)">cant</span></a></td>
<td>
href="${tg.url('/caso_de_prueba/list', enunciado=record.id)}"><span
py:replace="len(record.casos_de_prueba)">cant</span></a></td>
<td>
- <a href="${tg.url('/enunciado/edit/%d' % record.id)}">Editar</a>
- <a href="${tg.url('/enunciado/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
+ <a py:if="'admin' in identity.current.permissions" href="${tg.url('/enunciado/edit/%d' % record.id)}">Editar</a>
+ <a py:if="'admin' in identity.current.permissions" href="${tg.url('/enunciado/delete/%d' % record.id)}" onclick="if (confirm('${_(u'Estás seguro? Yo creo que no...')}')) { var f = document.createElement('form'); this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit(); };return false;">Eliminar</a>
<a py:if="record.archivo" href="${tg.url('/enunciado/files/%d' % record.id)}">Bajar Enunciado</a>
</td>
</tr>
</table>
<br/>
<a py:if="record.archivo" href="${tg.url('/enunciado/files/%d' % record.id)}">Bajar Enunciado</a>
</td>
</tr>
</table>
<br/>
-<a href="${tg.url('/enunciado/new')}">Agregar</a>
-<a py:if="parcial" href="${tg.url('/enunciado/list')}">Ver todo</a>
+<a py:if="'admin' in identity.current.permissions" href="${tg.url('/enunciado/new')}">Agregar</a>
<div py:for="page in tg.paginate.pages">
<a py:if="page != tg.paginate.current_page"
<div py:for="page in tg.paginate.pages">
<a py:if="page != tg.paginate.current_page"