<a class="nonexistent" href="/wikicmat/AyudaDeContenidos">AyudaDeContenidos</a>
Proyecto Sancho
Para saber de que se trata el proyecto Sancho, mirar el documento: Subir nuevo adjunto "sancho.tex". Es lo más cercano que tenemos a la documentación inicial.
¿Quieren ayudar con el Sancho? Pueden consultar el SanchoToDo.
Le vamos a dar una nueva oportunidad al Zope, con el que habíamos hecho el proyecto Eureka. Las cosas viejas del Sancho sobre Quixote todavía pueden ser consultadas en ViejoSancho y SanchoEnApache2.
El laburo
Aca está la Zona de Discusión, en donde se plantean los problemas concretos de la base en ERW (por ahora).
Base inicial
Decidimos Nico y Alvaro, empezar con una base Postgres + Zope chica (solo con docentes y publicaciones por ahora) y eventualmente cuando se haga la base grande se trasladan los datos con algun script.
Codigo SQL
Create table CargosDocentes ( id_cargodocente serial not null, denominacion varchar(50) not null, # incluye profesor titular, adjunto, agregado, asistente, ayudante, profesor libre escalafon char(1), grado int2, primary key (id_cargodocente), unique (denominacion), ); Create table TipoCargos ( id_tipocargo serial, nombretipocargo varchar(20), # esto es efectivo, interino, invitado, becario, tecnico, proyecto ); Create table Docentes ( id_persona int4 not null, login varchar(10), fechaingreso date, id_sala int2, id_cargo int4, dt boolean default false, id_tipocargo int4, horascargo int2, iniciocargo date, fincargo date, id_area int4, primary key (id_persona), foreign key (id_persona) references Personas(id_persona), foreign key (id_cargodocente) references Cargos(id_cargodocente), foreign key (id_sala) references Salas(id_sala), foreign key (id_tipocargo) references TipoCargos(id_tipocargo), foreign key (id_area) references Areas(id_area), ); Create table Personas ( id_persona serial nombre varchar(50) not null, apellido varchar(50) not null, mail varchar(50), webpage varchar(50), telefono varchar(20), celular varchar(20), domicilio text, id_ciudad int4, id_institucion int4, primary key (id_persona), foreign key (id_ciudad) references Ciudades(id_ciudad), foreign key (id_institucion) references Instituciones(id_institucion), ); Create table Instituciones ( id_institucion serial, primernivel varchar(200), segundonivel varchar(200), tercernivel varchar(200), cuartonivel varchar(200), direccion varchar(200), id_ciudad int4, telefono varchar(20), fax varchar(20), mail varchar(30), webpage varchar(50), primary key (id_institucion) ); Create table Salas ( id_sala int2, interno int2, piso int2, primary key (id_sala), ); Create table Ciudades ( id_ciudad serial, nombreciudad varchar(20), id_pais int4, primary key (id_ciudad), foreign key (id_pais) references Paises(id_pais), ); Create table Paises ( id_pais serial, nombrepais varchar(20), primary key (id_pais), ); Create table Areas ( id_area serial, nombrearea varchar(100) not null, # algebra, geometria algebraica, probabilidad y estadistica, analisis primary key (id_area), ); Create table Publicaciones ( id_publicacion serial, id_tipopub int4, id_revista int4, titulopublicacion varchar(200), # tambien capitulo libro titulolibro varchar(200), editorlibro varchar(200), editorial varchar(100), direccioneditorial varchar(200), anho int2, volumen int2, numero int2, serie varchar(10), paginas varchar(20), cantpaginas varchar(20), notas text, primary key (id_publicacion), foreign key (id_tipopub) references TipoPublicaciones(id_tipopub), foreign key (id_revista) references Revistas(id_revista), ); Create table Revistas ( id_revista serial, nombrerevista varchar(100) not null, nombrecorto varchar(20) not null, editorial varchar(20), primary key (id_revista), unique (nombrerevista), unique (nombrecorto), ); Create table TipoPublicaciones ( id_tipopub serial, nombretipopub varchar(50), primary key (id_tipopub), unique (nombretipopub), ); Create table PublicaroPerecer ( id_persona int4, id_publicacion int4, foreign key (id_persona) references Personas(id_persona), foreign key (id_publicacion) references Publicaciones(id_publicaciones), );
Arquitectura
Base de datos
A partir del código XML se pueden generar los diagramas sobre la estructura de la base: Subir nuevo adjunto "cmat.ps". (Hay que hacer un script que permita imprimir estos ps en páginas.)
XML y ERW
ERW
Pasos para actualizar el ERW:
Bajar la nueva versión en /usr/local/src y hacer un link desde /usr/local/src/ERW.
Copiar el contenido de /usr/local/src/ERW/php a /var/www/apache2-defaul/erw.
Aplicar el patch list.patch.
Pasos para generar código a partir del archivo XML:
Sea ERW=/var/www/apache2-default/erw. Ir a $ERW/xml.
Copiar cmat.sql a cmat.sql.old.
- Generar el SQL con
ertool --sql < cmat.xml > cmat.sql
y modificar la base de datos de acuerdo al archivo cmat.sql.
- Crear el codigo PHP con
ertool --defs-utf-8 < cmat.xml
y mover los archivos .php generados a $ERW/local/defs. Customizar los que se deseen y ubicarlos en $ERW/local/custom.
Importante: para las tablas que requieran varias "vistas" distintas, agregar la linea (por ejemplo, para la tabla 'personas'):
$D["persona"]["loadForm"] = "loadCustomForm.php";
en el archivo $ERW/local/custom/persona.php.
Generar las formas por defecto con ertool --default-forms < cmat.xml. Customizar las que se deseen (por ejemplo persona.erf) y luego hacer
ertool --forms-utf-8 persona.erf < cmat.xml
y mover el archivo persona.php generado a $ERW/local/forms con un nombre adecuado (digamos miforma.php).
El link para invocar el ERW es:
<a ONCLICK="openServiceWindow('list.php?type=persona&useform=miforma', 'persona'); return false" HREF="empty.php">Persona</a>
El parametro useform indica el nombre de la forma definida en el punto anterior (atencion: hay que incluir el codigo Javascript necesario, copiarlo de $ERW/index.php).
Zope
El Zope está atendiendo en http://www.cmat.edu.uy/sancho/manage.
Por ahora tenemos poca cosa hecha:
- Macros de navagacion (cajas de links laterales y navegacion respecto a las subcarpetas).
Agregamos con alvarito una propiedad webmaster para que la barra inferior la use, sino por defecto: webmaster@cmat.edu.uy
Agregue una propiedad a los folders para mostrarlos o no en la ruta se llama: ommit_from_nav.
- Un unico template (medio sobrecargado quizas)
- Esta mezclado en el template la version imprimible y la normal, capaz se podrian separar.
- Agregue la posibilidad de redefinir el titulo dinamicamente. No me gusta del todo, pero sirve para las paginas multilanguage y usar adquisition.
- La FAQ es lo unico que usa el ERW, que por cierto ahora pide un password no se porque...
Lo de la password era solo de prueba, si se fijan en authenticate.php en merlin, veran la password. Hay que insertar el mecanismo de authentificacion ahi. --walterm
- Esta empezando a haber una estructura de carpetas para Eventos, Seminarios y Cursos, aunque crece muy lento.
- Creo que podriamos empezar a manejarnos un poco con la base al menos para los cursos... siempre esta la posibilidad de migrar la informacion despues... podriamos usar restructuredtext (formato wiki) para la pagina principal, cronograma, programa.
Estuve haciendo unas pruebas con la cartelera de noticias (cmat/news) y no tenemos instalado el restructured_text en el zope, habria que bajar el producto (o hacer un upgrade al zope 2.7) me parece bastante practico tenerlo. - Con los seminarios lo mismo... si hubiera un formulario de ERW sencillo para subir las exposiciones creo que podria funcionar.
- La cartelera en cmat/news esta andando con permisos:
- Lo de los permisos es sencillo, aunque despues se podrian explotar y hacerlo mejor creando roles. La idea basica es revocar el permiso de view al script que agrega las noticias (darle solo permiso a los usuarios authenticados) y despues darle permisos de proxy para agregar objetos (para que cree las noticias).
Otra cosa que me convence bastante es crear un producto (una nuevo tipo de objeto) para representar las noticias que tenga sus propios metodos. Que tenga un metodo view() que ya la saque con formato (adentro de una cajita con <div class=cartelera>).
Capaz que esto deberia ir en la zona de discusion, en todo caso despues lo movemos.
Nico.
Tengo una propuesta:
SanchoEnZope por ahora son solo ideas...
