Top Banner
Programación en Programación en OpenACS OpenACS Pedro J. Muñoz Merino Pedro J. Muñoz Merino Pedro J. Muñoz Merino Pedro J. Muñoz Merino http://www.it.uc3m.es/pedmume http://www.it.uc3m.es/pedmume/ (Trasparencias basadas en la (Trasparencias basadas en la Documentación Documentación de OpenACS de OpenACS, en , en http://openacs.org/doc/) http://openacs.org/doc/)
56

Desarrollo en OpenACS

Mar 26, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Desarrollo en OpenACS

Programación en Programación en OpenACS OpenACS

Pedro J. Muñoz MerinoPedro J. Muñoz MerinoPedro J. Muñoz MerinoPedro J. Muñoz Merinohttp://www.it.uc3m.es/pedmumehttp://www.it.uc3m.es/pedmume//

(Trasparencias basadas en la (Trasparencias basadas en la Documentación Documentación de OpenACSde OpenACS , en , en

http://openacs.org/doc/)http://openacs.org/doc/)

Page 2: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas2

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 3: Desarrollo en OpenACS

Estructura de directorios

● ROOT/― bin/ : Ejecutables y scripts como por ejemplo para arrancar el

servidor

― content-repository-content-files/ : Contenido del servidor almacenado en un repositorio especial

― etc/ : Ficheros de configuración

― packages/ : Contiene un subdirectorio por cada paquete

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas3

― packages/ : Contiene un subdirectorio por cada paquete

― log/ : Logs de lo que pasa en el servidor, como ante diferentes tipos de errores o logs de acceso al servidor Web

― tcl/ : bootstrap code

― www/ : Páginas que no están en paquetes (contenido estático, páginas personalizadas, etc.)

Page 4: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas4

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 5: Desarrollo en OpenACS

Paquetes en OpenACS

● Cada paquete tiene un subdirectorio dentro del directorio “packages” (se facilita la distribución)

● Tipos de paquetes:

― Aplicaciones. Presentan un interfaz de usuario― Servicios. Son usados por otros paquetes para una

determinada función.

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas5

determinada función.� Ejemplos: Un portlet es un servicio que lo usa un portal,

notificación que es un servicio que brinda notificaciones

Page 6: Desarrollo en OpenACS

APM

● Es una herramienta para la gestión de paquetes― Registro de paquetes― Instalación de paquetes― Dependencias entre paquetes― Almacenar información de paquetes

● Sólo podemos instanciar paquetes que sean aplicaciones. De un paquete podemos tener tantas

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas6

aplicaciones. De un paquete podemos tener tantas instancias como queramos

● Las instancias de paquetes son independientes, guardan cosas distintas aunque el modelo de datos es el que defina el paquete.― Analogía con clase y objeto

Page 7: Desarrollo en OpenACS

Estructura de un paquete

● Dentro del paquete hay un fichero .info, que es un XML con la información del paquete (nombre, version, dependencias, etc.)

● Modelo de datos (.sql)(/sql/postgresql, /sql/oracle)― Crearlo (tablas, añadir y quitar filas). Terminan en –create.sql― Eliminarlo. Terminan en –drop.sql

● Librerías tcl (/tcl) (.tcl y .xql)

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas7

● Librerías tcl (/tcl) (.tcl y .xql)― Son la interfaz (API) con otros paquetes

● Interfaces de usuario (.tcl, .xql, .adp)― De administrador (/www/admin)― De usuario (/www)

● Documentación (/www/doc)

● Tests

Page 8: Desarrollo en OpenACS

Crear un paquete

● En el sitio concreto donde esté instalado OpenACS, vamos a /acs-admin/apm/package-add y rellenamos Key, name, plural, type, URL, etc.

● Los paquetes es una unidad que proporciona OpenACS y que no está en TCL o AOLServer― Estructuran el sitio

Permite la creación de sitios Web complejos donde hay muchas

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas8

― Permite la creación de sitios Web complejos donde hay muchas funcionalidades combinadas

― Se permiten varias instancias del mismo paquete― Permiten el modelo de componentes, donde también se pueden

reutilizar llamadas implementadas en un paquete

Page 9: Desarrollo en OpenACS

Mapa del sistio (/acs -admin/site -map)

● Debemos asociar lo que cuelga de /www con una URL, esto es montar nuestro paquete en el mapa del sitio

● Al añadir una entrada en el mapa del sitio estamos instanciando un paquete (un nuevo objeto) y asociándolo a una URL. La entrada será un nodo del sitio

● Esto da independencia del sistema de ficheros respecto

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas9

● Esto da independencia del sistema de ficheros respecto de la URL

● Podemos tener varias instancias de un mismo paquete (diversas URLs usan el mismo código). OACS sabe diferenciar cual es a través del procesador de peticiones y almacena cada instancia por separado

Page 10: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas10

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 11: Desarrollo en OpenACS

Modelar la información de una aplicación como datos

● Al igual que se ha visto en el modelado de datos, para cada aplicación concreta a desarrollar hay que:― Localizar las diferentes tablas de la aplicación― Ver la información requerida en cada tabla y describirla

adecuadamente― Ver las relaciones entre las diferentes tablas― Describir con diagramas de entidad relación o de clases el

modelo de datos de la aplicación

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas11

Describir con diagramas de entidad relación o de clases el modelo de datos de la aplicación

― Establecer las sentencias SQL adecuadas para crear las respectivas tablas establecidas en el modelado realizado

Page 12: Desarrollo en OpenACS

Ejemplo de tabla de datos para el paquete de notas

create table notes (

note_id integer primary key,

owner_id integer references users(user_id),

creation_user references(user_id) not null,

creation_date date not null,

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas12

creation_date date not null,

last_modified date not null,

title varchar(255) not null,

body varchar(1024)

)

Page 13: Desarrollo en OpenACS

Sistema de Objetos

● Para poder hacer uso de ciertos servicios en los datos de aplicación, recurrimos a hacer uso del sistema de objetos― Permisos― context-id― Comentarios de usuarios― Nuevos campos que creen los usuarios sobre la marcha― Reutilización en aplicaciones futuras

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas13

― Reutilización en aplicaciones futuras― Permite herencia de esos campos― Etc.

● Un objeto puede ser cualquier cosa del modelo de datos que necesite ser tratado por un servicio central de utilidades, que son las que proporciona el sistema de objetos de OpenACS; o bien que necesite ser reutilizado en el futuro por otras aplicaciones

Page 14: Desarrollo en OpenACS

Sistema de Objetos

● Cada objeto tiene una fila en una tabla especial que se crea durante la instalación de OpenACS que es la tabla acs_object que tiene entre otros los siguientes campos― id único― type― context_id― createdate

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas14

― createdate― createuser― create_ip

● Para hacer esta adición como fila en dicha tabla especial de objetos de OpenACS, se requiere hacer algo más en OpenACS que simplemente crear las tablas del modelo de datos

Page 15: Desarrollo en OpenACS

Declaración de un nuevo tipo de objeto

● Definimos tipos de objetos (tabla acs_object_types).― Se permite herencia. A lo que heredemos debemos añadir

atributos y métodos― Por cada tabla del modelo de datos, definir un tipo― El objeto de este tipo será una fila de la tabla acs_object

begin acs_object_type.create_type (

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas15

begin acs_object_type.create_type (

supertype => 'acs_object', object_type => 'note', pretty_name => 'Note', pretty_plural => 'Notes', table_name => 'NOTES', id_column => 'NOTE_ID' );

end; /

Page 16: Desarrollo en OpenACS

Añadir atributos a un tipo de objeto

declare attr_id

acs_attributes.attribute_id%TYPE;

attr_id := acs_attribute.create_attribute (

attr_id := acs_attribute.create_attribute ( object_type => 'note', attribute_name => 'BODY', pretty_name => 'Body', pretty_plural => 'Bodies', datatype => 'string'

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas16

acs_attribute.create_attribute ( object_type => 'note', attribute_name => 'TITLE', pretty_name => 'Title', pretty_plural => 'Titles', datatype => 'string‘

);

datatype => 'string'

);

Page 17: Desarrollo en OpenACS

Funciones de los tipos de objeto creados

● Debemos definir funciones para crear y borrar objetos y otras, y seguidamente ponerles código― Declaración de función― Cuerpo de las funciones para añadir, borrar, etc.― Llamar a oacs_object.new, oacs_object.del para interactuar con

esas tablas especiales. Resto de tablas de manera normal

● context_id es el identificador de un objeto que representa

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas17

● context_id es el identificador de un objeto que representa el dominio de seguridad por defecto al que un objeto pertenece. Si no se le dan permisos explícitamente a un objeto, entonces hereda los que marca su contexto

create table notes (

note_id integer references acs_objects(object_id) primary key, owner_id integer references users(user_id), title varchar(255) not null, body varchar(1024) )

Page 18: Desarrollo en OpenACS

Añadir comentarios

● Sobre todo objeto de OpenACS se pueden poner comentarios. Se hace uso del paquete de comentarios de OpenACS― general_comments_package_url ― general_comments_get_comments

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas18

Page 19: Desarrollo en OpenACS

Consejos generales de diseño

● Hacer uso del sistema de objetos, para instanciar objetos cuando necesitemos en ellos funciones generales del sistema o que proporcionen ciertos tipos de objetos de OACS ya creados (para heredarlos)

● Hacer uso del sistema de objetos, para instanciar objetos cuando dichos datos se vayan a necesitar en el sistema

● Lo que no necesite funciones del sistema como

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas19

● Lo que no necesite funciones del sistema como permisos, control de acceso, etc., ni ser utilizados por otros servicios, pueden ser sólo tablas SQL

● Regla de diseño: No utilizar los atributos de un objeto para propósitos de una aplicación. En especial no hacerlo con context_id

Page 20: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas20

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 21: Desarrollo en OpenACS

El procesador de peticiones

● AOLServer proporciona una serie de utilidades para recibir peticiones HTTP y poder extraer información de ellas. En OpenACS, se hace uso de TCL y las utilidades de AOLServer para desarrollar una serie de funcionalidades en el procesado de peticiones, las cuales son más complejas que las de los niveles inferiores, y por ejemplo incluye autenticación, autorización, extracción de cookies, tener en cuenta la estructura de paquetes que

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas21

cookies, tener en cuenta la estructura de paquetes que proporciona OpenACS, etc. Estas operaciones son usuales en cualquier petición― Comparación con J2EE y PHP

Page 22: Desarrollo en OpenACS

El procesador de peticiones

http://someserver.com/notes/somepage.adp.

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas22

Page 23: Desarrollo en OpenACS

El procesador de peticiones

● Search Site Map: Traducimos una URL a una instancia de paquete (objeto). Se almacena id del objeto, URL, package e instancia del package

● Authentication: Información de sesión la suele enviar el cliente vía cookies (las extrae y pone nuevas cookies)

● Authorization: La URL puede pedir objeto o una instancia del package que tiene marcados unos privilegios para el

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas23

del package que tiene marcados unos privilegios para el usuario que accede. Hay que ver si se le deja el acceso o no y con qué privilegios

● URL processing, File Search: Si no tiene extensión lo pedido busca extensión html, adp, tcl y vuh

● Con ad_con obtenemos información sobre la petición (user_id, session_id, url, file, package_id, etc.)

Page 24: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas24

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 25: Desarrollo en OpenACS

El API de acceso a la Base de Datos de OpenACS

● Para acceder a la base de datos podemos usar no sólo funciones PostgreSQL, también podemos usar API del AOLServer y API de OpenACS

● El API de OpenACS nos facilita las cosas a la hora de acceder a la base de datos― Funciones de más alto nivel para realizar cosas en la base de

datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas25

datos

― Se facilitan mucho las cosas a la hora de programar al acceder a la base de datos. Ejemplo: se simplifican bucles

― Previene errores, gestión de errores automática

― Más estructuración

― Gestiona transacciones de manera automática

― Bind variables: necesario hacer quoting de variables para insertarlas en SQL. Ventaja precompilación de SQL (no implementada) y evitamos problemas de seguridad

Page 26: Desarrollo en OpenACS

El API de acceso a la Base de Datos de OpenACS

● db_transaction code_block [ on_error { code_block } ]

● db_foreach statement-name sql [ -bind bind_set_id | -bind bind_value_list ] [ -column_array array_name | -column_set set_name ] code_block [ if_no_rows if_no_rows_block ]― Puede tener next y continue

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas26

● db_dml statement-name sql [ -bind bind_set_id | -bind bind_value_list ] [ -blobs blob_list | -clobs clob_list | -blob_files blob_file_list | -clob_files clob_file_list ]

● db_null

● db_abort_transaction

Page 27: Desarrollo en OpenACS

El API de acceso a la Base de Datos de OpenACS

● db_multirow [ -local ] [ -append ] [ -extend column_list ] var-name statement-name sql [ -bind bind_set_id | -bind bind_value_list ] code_block [ if_no_rows if_no_rows_block ]

● db_1row statement-name sql [ -bind bind_set_id | -bind bind_value_list ] [ -column_array array_name | -column_set set_name ]

● db_0or1row statement-name sql [ -bind bind_set_id | -bind bind_value_list ] [ -column_array array_name | -column_set

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas27

bind_value_list ] [ -column_array array_name | -column_set set_name ]

● db_nextval sequence-name

● db_list statement-name sql [ -bind bind_set_id | -bind bind_value_list]

● db_list_of_lists statement-name sql [ -bind bind_set_id | -bind bind_value_list ]

Page 28: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas28

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 29: Desarrollo en OpenACS

Templates

● OpenACS intenta simplificar la implementación del patrón de diseño MVC (Modelo Vista Control)

● En OACS se separan dos aspectos en su sistema de templates, que hace que por cada página visible, se deben escribirse dos ficheros para la:― Lógica de aplicación. Son los .tcl, manipulan bases de datos. Se

realizan querys a la base de datos. También implementan la

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas29

realizan querys a la base de datos. También implementan la mayoría de la lógica de negocio. Se hacen visibles ciertas variables para su fichero ADP correspondiente

― Lógica de diseño gráfico. Son los .adp, sirven para representar la información. Representación del estado de la aplicación. Es una combinación de:� 1)HTML

� 2)Templates (tags especiales y sustituciones de datos)

� 3) Variables de código TCL (@variable@)

Page 30: Desarrollo en OpenACS

Templates (Código TCL)

ad_page_contract {

Form to add a note in OpenACS Notes.

@author Jane Coder

@creation-date 11 Oct 2000

} -properties {

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas30

} -properties {

note_id:onevalue

submit_label:onevalue

target:onevalue

page_title:onevalue

} -query {

}

Page 31: Desarrollo en OpenACS

Templates (Código TCL)

set user_id [ad_conn user_id]

db_1row user_name {

select first_names || ' ' || last_name as user_name

from users

where forum_id = :user_id

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas31

where forum_id = :user_id

}

set page_title "Add a note for $user_name“

set submit_label "Add"

set target "note-add-2“

set note_id [db_nextval acs_object_id_seq]

ad_return_template "note-add"

Page 32: Desarrollo en OpenACS

Templates (Código ADP)

<master src="master"><propertyname="title">@page_title@</property> <property name="context_bar">@context_bar@</property> <form action=@target@><p>Title: <input type="text" name="title" value=""> </p> <p>Body:

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas32

<p>Body: <input type="text" name=“b" value=""></p> <p> <center> <input type=submit value="@submit_label@"> </center> </p></form> ESTO FUNCIONA PERO MEJOR USAR AD_FORM

Page 33: Desarrollo en OpenACS

Templates (Código ADP)

<%= [ad_header $title] %>

<h2>@title@</h2>

<%= [eval ad_context_bar $context_bar] %>

<hr>

<slave>

<br clear="all">

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas33

<br clear="all">

<%= [ad_footer] %>

No usar nunca código TCL dentro de las plantillas ADP (puesto que queremos separar código de la presentación). Como mucho usar sentencias de control ADP como <if condición></if>

Page 34: Desarrollo en OpenACS

Algunas Etiquetas importantes

● <multiple> : Sirve para recoger los valores de una variable de tipo multirow (equivalente a un dataset o recordset) pasando por todas sus filas. Atributos― name: El nombre de la variable a recorrer

― maxrows: Establece el máximo número de filas a recorrer

― startrow: Indica el número de la primera fila que se va a recorrer

delimiter: Añade ese string en cada fila por la que se pasa,

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas34

― delimiter: Añade ese string en cada fila por la que se pasa, excepto la fila final

● <if>, <elseif> <else>: Se procede a ejecutar una cierta porción de la template si y sólo si se cumple la condición especificada. Operadores:― eq, ne, lt, gt, le, ge

― in, between

― nil, defined, odd, even, true, false

― not

Page 35: Desarrollo en OpenACS

Algunas Etiquetas importantes

● <switch>, <case>, <default> : Sirve para establecer qué parte de template se realizará, en función del valor que tenga una determinada expresión

● <include> : Incluye otra plantilla en el lugar especificado. Atributos― src: Indica la ubicación de la plantilla

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas35

― attribute: Pueden haber varios, e indica los diferentes parámetros que se pasan a la subplantilla

● <property> : Sirve para establecer una variable con un valor de cierto código de la template

Page 36: Desarrollo en OpenACS

Algunas Templates importantes

● <master>, <slave> : Especifica la URL de otra template denominada master que sirve de frame para la template donde se pone esta etiqueta. Todos los contenidos de la template donde se pone esa etiqueta se insertan en la template master en una posición designada por la etiqueta <slave>

● <formtemplate> : Sirve para poner un formulario dinámico

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas36

● <formtemplate> : Sirve para poner un formulario dinámico en la template

● <listtemplate>, para incluir un listado de datos dinámico

Page 37: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas37

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 38: Desarrollo en OpenACS

Grupos, Personas y Parties

● En OpenACS, hay objetos que son parties, pero no todo objeto es una party

● Las parties pueden ser grupos o bien personas

● Dos tipos de relaciones― Group membership. Mapea grupos a parties. Dice las parties que

pertenecen a un grupo. Sirve para incluir genéricamente a un grupo dentro de otro. Pero los miembros de un grupo pueden ser

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas38

grupo dentro de otro. Pero los miembros de un grupo pueden ser tanto personas como otros grupos

― Group composition. Entre grupos. Para que todo miembro del grupo A sea miembro del grupo B

Page 39: Desarrollo en OpenACS

Permisos y Contextos

● Nos marca una party que privilegios tiene sobre los objetos

● Tipos de privilegios: ‘read’, ‘write’, ‘create’, ‘delete’. Se pueden combinar estos permisos básicos en uno más grande (por ejemplo ‘admin’)

● context_id: Es un número único que se relaciona con un

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas39

● context_id: Es un número único que se relaciona con un determinado objeto y sus privilegios. Varios objetos pueden apuntar al mismo context_id. Todos esos objetos tendrán los mismos permisos implícitos

Page 40: Desarrollo en OpenACS

Algoritmo de permisos

● 1) ¿Tiene este objeto permisos explícitamente definidos para una determinada party?― SÍ, entonces aplicarlos.

― NO, entonces 2)

● 2) ¿Cual es el valor del flag security_inherit_p?― ‘f’, entonces uso los permisos del objeto security_context_root.

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas40

― ‘f’, entonces uso los permisos del objeto security_context_root.

― ‘t’ entonces 3)

● 3) Búsqueda automática a través del contexto. Mira el context_id que apunta al objeto del que heredamos el contexto. Vemos jerárquicamente de quien heredamos. Si no tocamos el context_id de un objeto por defecto apunta al default_context

Page 41: Desarrollo en OpenACS

Páginas de Administración

● Un administrador difiere de un usuario normal en cada paquete de OpenACS― Puede ver las páginas de un usuario normal, pero a veces

también otros enlaces que salen en las páginas

― Páginas especiales exclusivas de administradores. En packages/www/admin

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas41

Page 42: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas42

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 43: Desarrollo en OpenACS

Parties

● Grupos, personas, usuarios

● Para cada relación creada debemos definir una función que la cree y unos procedimientos que reflejarán las acciones que podemos hacer sobre esa relación (ban, aprove, reject, unapprove, deleted, delete)

● Views. Para visualizar:

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas43

● Views. Para visualizar:― Todas las relaciones de composition

― Todas las relaciones de membership

― Todas las relaciones membership aprovadas

― Todos los miembros de un grupo, incluyendo relaciones directas de membership como indirectas propiciadas por la composition

Page 44: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas44

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 45: Desarrollo en OpenACS

Programación con el servidor AOLServer

● Dos espacios globales― Server-global: Variables pueden ser accedidas por cualquier

thread

― Script-global: Global a un script (ADP,TCL, etc.). Sólo durante la ejecución actual del script no durante todo el thread

● Cada nueva petición HTTP se renuevan valores de las variables del SCRIPT

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas45

variables del SCRIPT

Page 46: Desarrollo en OpenACS

Programación con el servidor AOLServer

● Thread and Scheduled procedures― En caso de necesitar ejecutar código en un momento dado

podemos ejecutar un hilo posteriormente (ad_schedule_proc)

● Using return― TCL. Con return vuelvo a la función que llamó

― 1 SCRIPT es un conjunto de procedimientos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas46

― 1 SCRIPT es un conjunto de procedimientos

― ad_script_abort. Abortamos un thread

● Para que una función devuelva más de un valor― TCL no soporta constantes. Magic numbers

― Métodos para que una función devuelva más de un valor (lista formada de array_get, usando arrays y pasando por referencia)

Page 47: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas47

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 48: Desarrollo en OpenACS

Utilización de formularios HTML

● El uso de formularios con ad_form, al ser Model-View-Controller (MVC) nos facilita enormemente la recogida y modificación de datos.― http://openacs.org/api-doc/proc-view?proc=ad_form

― http://rubick.com:8002/openacs/ad_form

● En lugar de escribir todo el código HTML para un formulario, llamamos a un procedimiento denominado

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas48

formulario, llamamos a un procedimiento denominado ad_form que nos generará el formulario por nosotros, chequeará errores, etc.

Page 49: Desarrollo en OpenACS

Ejemplo de formulario HTMLad_page_contract {

Simple add/edit form

} {my_table_key:optional

}

ad_form -name form_name -export {foo {bar none}} -form {

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas49

my_table_key:key(my_table_sequence)

{value:text(textarea) {label "Enter text"}{html {rows 4 cols 50}}}

} -select_query {select value from my_table where my_table_key = :my_table_key

} -validate {{value{[string length $value] >= 3}"\"value\" must be a string containing three or more characters"}

Page 50: Desarrollo en OpenACS

Ejemplo de formulario HTML

} -new_data {db_dml do_insert "

insert into my_table(my_table_key, value)

values(:key, :value)"

ad_returnredirect "somewhere"ad_script_abort

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas50

ad_script_abort} -edit_data {

db_dml do_update "update my_tableset value = :valuewhere my_table_key = :key"

ad_returnredirect "somewhere"ad_script_abort

}

Page 51: Desarrollo en OpenACS

Programación en OpenACS: Indice

● Estructura de directorios

● Paquetes

● Modelo de Datos y el Sistema de Objetos

● Procesador de peticiones

● API de la Base de Datos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas51

● Template

● Content Permisions

● Parties

● Programación con el servidor AOLserver

● Formularios HTML

● Otros aspectos

Page 52: Desarrollo en OpenACS

Paquete de notificaciones

● El hecho de recibir notificaciones, al igual que añadir notas, establecer permisos, etc. es una acción típica no de un paquete específico sino de muchos. Por ello, el paquete de notificaciones se pueden utilizar sus métodos en muchos paquetes― Notificaciones foros, chat, blogs, wikis, email, etc.

● Para integrar un paquete con el de notificaciones

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas52

● Para integrar un paquete con el de notificaciones― Crear los tipos de notificaciones en la base de datos con script

― Crear script de borrado de notificaciones en la base de datos

― Establecer la creación de la notificación. Con notification::new

― Establecer el proceso de suscripción de notificaciones

Page 53: Desarrollo en OpenACS

Visualización de paquetes concretos

● Desde el API Browser, http://openacs.org/api-doc/

● Desde allí se puede entrar en cada paquete concreto y también hacer uso del buscador, donde se puede buscar por:― Documentación de OpenACS

― PostgreSQL

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas53

― PostgreSQL

― TCL

― API de AOLServer

― API de OpenACS

● De cada paquete se pueden ver sus páginas (TCL+ADP), sus procedimientos, lo relacionado con la parte del modelo de datos, y las librerías con funciones reutilizables por otros paquetes― Ver si librerías de un paquete nos sirve en otro y aplicarlas

Page 54: Desarrollo en OpenACS

Visualización de paquetes concretos

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas54

Page 55: Desarrollo en OpenACS

Trabajo propio del alumno asociado a la sesión

● Capítulos 1, 8, 10, y 14 de la Documentación de OpenACS, http://openacs.org/doc/index.html

● Del capítulo 9 sobre “Advanced Topics”, sólamente las secciones de

― “Adding comments”

“Admin pages”

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas55

― “Admin pages”

― “Notifications”

● Templates Markup Reference, etiquetas multiple, if, master, slave, switch, include, property, form http://openacs.org/doc/acs-templating/tagref/

Page 56: Desarrollo en OpenACS

Referencias Extra

● OpenACS

― http://openacs.org/

― http://openacs.org/doc/

― http://openacs.org/doc/openacs-HEAD/index.html

― http://openacs.org/api-doc/ (TCL, PGSQL, OpenACS, AOLserver)

― http://openacs.org/education/psets/ (Ejercicios)

― http://openacs.org/bugtracker/openacs/ (BUGS)

― http://rubick.com:8002/openacs/ad_form

dotLRN

Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas56

● dotLRN

― http://dotlrn.org/

― http://openacs.org/projects/dotlrn/

― http://dotlrn.collaboraid.net/ (DEMO)

● Tcl for Web Nerds

― http://philip.greenspun.com/tcl/

● SQL for Web Nerds

― http://philip.greenspun.com/sql/

● AOLserver

― http://www.aolserver.com/docs/