Herramientas de desarrollo · 2011-06-01 · Proyecto KOHA Grupo de desarrollo UNLP Introducción a...

98
Proyecto KOHA Grupo de desarrollo UNLP

Transcript of Herramientas de desarrollo · 2011-06-01 · Proyecto KOHA Grupo de desarrollo UNLP Introducción a...

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Equipo interdisciplinario

SIU y CESPI Javier Diacuteaz y Emiliano Marmonti

Biblioteca Puacuteblica Norma Mangiaterra y Lorena Miranda

LINTI Facultad de Informaacutetica Einar Lanfranco Matiacuteas Pagano Luciano Iglesias y Nahuel Lofeudo

Facultad de Ciencias Econoacutemicas Mariacutea Fernanda Pietroboni

Integrantes

Proyecto KOHAGrupo de desarrollo UNLP

Resumen del diacutea Koha

bull Introduccioacuten a Koha

bull Instalacioacuten en Linux

Herramientas de desarrollobull Mantis

bull Subversion

Perlbull Introduccioacuten a la programacioacuten

bull Koha Estructura y Ejemplos

Modificacionesbull Adicioacuten de Funcionalidades

bull Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Introduccioacuten a Koha

Sistema de Gestioacuten integral de Bibliotecas

Formado por

bull Interfaz Web para Administracioacuten

bull Interfaz Web para Acceso Puacuteblico

bull Bases de datos

bull Nuacutecleo del Sistema

Proyecto KOHAGrupo de desarrollo UNLP

Funcionamiento de KOHA

Intranet OPAC

NuacutecleoBases de Datos

InterfacesWeb

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten

Requerimientos

bull Sistema Operativo

bull Servidor Web

bull Base de Datos

bull Interprete Perl

bull Moacutedulos Perl

bull Koha

En este caso utilizaremos Sistema Operativo GNULinux Red-Hat Servidor Web Apache y Motor de Base de Datos MySQL

Proyecto KOHAGrupo de desarrollo UNLP

Perl Utilizaremos la versioacuten 508 de Perl

Moacutedulos requeridosndash DateManip

ndash DBDmysql

ndash DBI

ndash Gettext

ndash HTMLTemplate

ndash MailSendmail

ndash MarcRecord

ndash NetZ3950

ndash SetScalar

ndash TimeHires

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes necesarios

Posicionarse sobre nethomekohandash cd nethomekoha

Instalar y levantar el Apachendash rpm -ivh httpd-2040-8i386rpm

ndash service httpd start

Instalar y levantar el Mysqlndash ( ya instalado) rpm -ivh mysql-32352-3i386rpm

ndash rpm -ivh mysql-server-32352-3i386rpm

ndash rpm -ivh mysql-devel-32352-3i386rpm

ndash service mysqld start

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Equipo interdisciplinario

SIU y CESPI Javier Diacuteaz y Emiliano Marmonti

Biblioteca Puacuteblica Norma Mangiaterra y Lorena Miranda

LINTI Facultad de Informaacutetica Einar Lanfranco Matiacuteas Pagano Luciano Iglesias y Nahuel Lofeudo

Facultad de Ciencias Econoacutemicas Mariacutea Fernanda Pietroboni

Integrantes

Proyecto KOHAGrupo de desarrollo UNLP

Resumen del diacutea Koha

bull Introduccioacuten a Koha

bull Instalacioacuten en Linux

Herramientas de desarrollobull Mantis

bull Subversion

Perlbull Introduccioacuten a la programacioacuten

bull Koha Estructura y Ejemplos

Modificacionesbull Adicioacuten de Funcionalidades

bull Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Introduccioacuten a Koha

Sistema de Gestioacuten integral de Bibliotecas

Formado por

bull Interfaz Web para Administracioacuten

bull Interfaz Web para Acceso Puacuteblico

bull Bases de datos

bull Nuacutecleo del Sistema

Proyecto KOHAGrupo de desarrollo UNLP

Funcionamiento de KOHA

Intranet OPAC

NuacutecleoBases de Datos

InterfacesWeb

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten

Requerimientos

bull Sistema Operativo

bull Servidor Web

bull Base de Datos

bull Interprete Perl

bull Moacutedulos Perl

bull Koha

En este caso utilizaremos Sistema Operativo GNULinux Red-Hat Servidor Web Apache y Motor de Base de Datos MySQL

Proyecto KOHAGrupo de desarrollo UNLP

Perl Utilizaremos la versioacuten 508 de Perl

Moacutedulos requeridosndash DateManip

ndash DBDmysql

ndash DBI

ndash Gettext

ndash HTMLTemplate

ndash MailSendmail

ndash MarcRecord

ndash NetZ3950

ndash SetScalar

ndash TimeHires

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes necesarios

Posicionarse sobre nethomekohandash cd nethomekoha

Instalar y levantar el Apachendash rpm -ivh httpd-2040-8i386rpm

ndash service httpd start

Instalar y levantar el Mysqlndash ( ya instalado) rpm -ivh mysql-32352-3i386rpm

ndash rpm -ivh mysql-server-32352-3i386rpm

ndash rpm -ivh mysql-devel-32352-3i386rpm

ndash service mysqld start

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Resumen del diacutea Koha

bull Introduccioacuten a Koha

bull Instalacioacuten en Linux

Herramientas de desarrollobull Mantis

bull Subversion

Perlbull Introduccioacuten a la programacioacuten

bull Koha Estructura y Ejemplos

Modificacionesbull Adicioacuten de Funcionalidades

bull Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Introduccioacuten a Koha

Sistema de Gestioacuten integral de Bibliotecas

Formado por

bull Interfaz Web para Administracioacuten

bull Interfaz Web para Acceso Puacuteblico

bull Bases de datos

bull Nuacutecleo del Sistema

Proyecto KOHAGrupo de desarrollo UNLP

Funcionamiento de KOHA

Intranet OPAC

NuacutecleoBases de Datos

InterfacesWeb

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten

Requerimientos

bull Sistema Operativo

bull Servidor Web

bull Base de Datos

bull Interprete Perl

bull Moacutedulos Perl

bull Koha

En este caso utilizaremos Sistema Operativo GNULinux Red-Hat Servidor Web Apache y Motor de Base de Datos MySQL

Proyecto KOHAGrupo de desarrollo UNLP

Perl Utilizaremos la versioacuten 508 de Perl

Moacutedulos requeridosndash DateManip

ndash DBDmysql

ndash DBI

ndash Gettext

ndash HTMLTemplate

ndash MailSendmail

ndash MarcRecord

ndash NetZ3950

ndash SetScalar

ndash TimeHires

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes necesarios

Posicionarse sobre nethomekohandash cd nethomekoha

Instalar y levantar el Apachendash rpm -ivh httpd-2040-8i386rpm

ndash service httpd start

Instalar y levantar el Mysqlndash ( ya instalado) rpm -ivh mysql-32352-3i386rpm

ndash rpm -ivh mysql-server-32352-3i386rpm

ndash rpm -ivh mysql-devel-32352-3i386rpm

ndash service mysqld start

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Introduccioacuten a Koha

Sistema de Gestioacuten integral de Bibliotecas

Formado por

bull Interfaz Web para Administracioacuten

bull Interfaz Web para Acceso Puacuteblico

bull Bases de datos

bull Nuacutecleo del Sistema

Proyecto KOHAGrupo de desarrollo UNLP

Funcionamiento de KOHA

Intranet OPAC

NuacutecleoBases de Datos

InterfacesWeb

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten

Requerimientos

bull Sistema Operativo

bull Servidor Web

bull Base de Datos

bull Interprete Perl

bull Moacutedulos Perl

bull Koha

En este caso utilizaremos Sistema Operativo GNULinux Red-Hat Servidor Web Apache y Motor de Base de Datos MySQL

Proyecto KOHAGrupo de desarrollo UNLP

Perl Utilizaremos la versioacuten 508 de Perl

Moacutedulos requeridosndash DateManip

ndash DBDmysql

ndash DBI

ndash Gettext

ndash HTMLTemplate

ndash MailSendmail

ndash MarcRecord

ndash NetZ3950

ndash SetScalar

ndash TimeHires

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes necesarios

Posicionarse sobre nethomekohandash cd nethomekoha

Instalar y levantar el Apachendash rpm -ivh httpd-2040-8i386rpm

ndash service httpd start

Instalar y levantar el Mysqlndash ( ya instalado) rpm -ivh mysql-32352-3i386rpm

ndash rpm -ivh mysql-server-32352-3i386rpm

ndash rpm -ivh mysql-devel-32352-3i386rpm

ndash service mysqld start

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Funcionamiento de KOHA

Intranet OPAC

NuacutecleoBases de Datos

InterfacesWeb

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten

Requerimientos

bull Sistema Operativo

bull Servidor Web

bull Base de Datos

bull Interprete Perl

bull Moacutedulos Perl

bull Koha

En este caso utilizaremos Sistema Operativo GNULinux Red-Hat Servidor Web Apache y Motor de Base de Datos MySQL

Proyecto KOHAGrupo de desarrollo UNLP

Perl Utilizaremos la versioacuten 508 de Perl

Moacutedulos requeridosndash DateManip

ndash DBDmysql

ndash DBI

ndash Gettext

ndash HTMLTemplate

ndash MailSendmail

ndash MarcRecord

ndash NetZ3950

ndash SetScalar

ndash TimeHires

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes necesarios

Posicionarse sobre nethomekohandash cd nethomekoha

Instalar y levantar el Apachendash rpm -ivh httpd-2040-8i386rpm

ndash service httpd start

Instalar y levantar el Mysqlndash ( ya instalado) rpm -ivh mysql-32352-3i386rpm

ndash rpm -ivh mysql-server-32352-3i386rpm

ndash rpm -ivh mysql-devel-32352-3i386rpm

ndash service mysqld start

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten

Requerimientos

bull Sistema Operativo

bull Servidor Web

bull Base de Datos

bull Interprete Perl

bull Moacutedulos Perl

bull Koha

En este caso utilizaremos Sistema Operativo GNULinux Red-Hat Servidor Web Apache y Motor de Base de Datos MySQL

Proyecto KOHAGrupo de desarrollo UNLP

Perl Utilizaremos la versioacuten 508 de Perl

Moacutedulos requeridosndash DateManip

ndash DBDmysql

ndash DBI

ndash Gettext

ndash HTMLTemplate

ndash MailSendmail

ndash MarcRecord

ndash NetZ3950

ndash SetScalar

ndash TimeHires

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes necesarios

Posicionarse sobre nethomekohandash cd nethomekoha

Instalar y levantar el Apachendash rpm -ivh httpd-2040-8i386rpm

ndash service httpd start

Instalar y levantar el Mysqlndash ( ya instalado) rpm -ivh mysql-32352-3i386rpm

ndash rpm -ivh mysql-server-32352-3i386rpm

ndash rpm -ivh mysql-devel-32352-3i386rpm

ndash service mysqld start

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Perl Utilizaremos la versioacuten 508 de Perl

Moacutedulos requeridosndash DateManip

ndash DBDmysql

ndash DBI

ndash Gettext

ndash HTMLTemplate

ndash MailSendmail

ndash MarcRecord

ndash NetZ3950

ndash SetScalar

ndash TimeHires

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes necesarios

Posicionarse sobre nethomekohandash cd nethomekoha

Instalar y levantar el Apachendash rpm -ivh httpd-2040-8i386rpm

ndash service httpd start

Instalar y levantar el Mysqlndash ( ya instalado) rpm -ivh mysql-32352-3i386rpm

ndash rpm -ivh mysql-server-32352-3i386rpm

ndash rpm -ivh mysql-devel-32352-3i386rpm

ndash service mysqld start

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes necesarios

Posicionarse sobre nethomekohandash cd nethomekoha

Instalar y levantar el Apachendash rpm -ivh httpd-2040-8i386rpm

ndash service httpd start

Instalar y levantar el Mysqlndash ( ya instalado) rpm -ivh mysql-32352-3i386rpm

ndash rpm -ivh mysql-server-32352-3i386rpm

ndash rpm -ivh mysql-devel-32352-3i386rpm

ndash service mysqld start

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Paquetes (cont)

Instalar el Perl ndash (ya instalado) rpm -ivh perl-580-55i386rpm

Dependencias de los moacutedulosndash rpm -ivh ncftp-313-6i386rpm

ndash rpm -ivh elinks-032-1i386rpm

ndash rpm -ivh zlib-devel-114-4i386rpm

ndash rpm -Uvh tcp_wrappers-76-34i386rpm

ndash rpm -ivh libyaz-2015-1i386rpm

ndash rpm -ivh libxml2-devel-2423-1i386rpm

ndash rpm -ivh libyaz-devel-2015-1i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten Moacutedulos (cont)

Moacutedulos Perl ndash cd modulos

Uno a uno por cada moacutedulondash cd nombre_de_moacutedulo

ndash perl MakefilePL

ndash make

ndash make testndash make install

ndash cd

Atajo funciona en la misma liacutenea

perl MakefilePL make make test make install

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Instalacioacuten KOHA (cont)

KOHAbull cd koha-200

bull installerplndash Este script automaticaacutemente

raquo Copia los archivos de Koha

raquo Crea la Base de Datos

raquo Crea el archivo de Configuracioacuten

raquo Crea el adicional para el servidor web

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Configuracioacuten

Configurar Koha

bull Editar ndash etckoha-httpdconf

ndash y sacar el comentario () a la liacutenea

Listen 8080 En el caso que hayan elegido los puertos por defecto

Configurar y reiniciar Apachendash en el archivo etchttpdconfhttpdconf agregar la liacutenea

Include etckoha-httpdconfndash service httpd restart

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Herramientas de desarrollo

Reporte de bugs Mantis Reporte de fallos Caracteriacutesticas de los reportes

Control de versiones Subversion Clientes de liacutenea de comandos Clientes graacuteficos

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo concurrente

Problemas Comunicacioacuten

Usuario -gt desarrollador Desarrollador -gt desarrollador

Coordinacioacuten Asignacioacuten de tareas

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de vida de un error

Reporte

Asignacioacuten

Confirmacioacuten

Resolucioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Reporte de errores

Usuario Proyecto Descripcioacuten Reproducibilidad

Pasos para reproducir el error Prioridad Severidad

Funcionalidad lt-gt Bloqueo Comentarios

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Reproducible

Siempre A veces Aleatorio No se ha intentado No es posible duplicar No se sabe

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Gravedad

Funcionalidad Personalizacioacuten Trivial Texto Ajuste Menor Mayor Cuelgue Bloqueo

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Prioridad

Ninguna Baja Normal Alta Urgente Inmediata

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Estado de un reporte

Nuevo Se necesitan maacutes datos Aceptado Confirmado Asignado Resuelto Cerrado

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten de un error Abierto Arreglado Reabierto No se pudo duplicar No es corregible Duplicado No es bug Suspendido No se arreglaraacute

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Confirmacioacuten

Un desarrollador comprueba que el error exista

Si se pudo reproducir se asigna Si no se puede reproducir

Se deja marcado

NUNCA se borran reportes

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Facilidades

Notificacioacuten por e-mail Al asignarse un error

Desarrollador Al cambiar el estado de un reporte

Desarrollador Informador

Monitorizar error Re-abrir error

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de reporte

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Desarrollo colaborativo

Potencialmente miles de archivos Muacuteltiples desarrolladores Fiacutesicamente distribuiacutedos Poca comunicacioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Uacutenica copia global

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer modificaciones

AB

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Solucioacuten Subversion

Repositorio central Uacutenica versioacuten ldquooficialrdquo Los cambios forman un historial

Una copia para cada desarrollador Los cambios de los desarrolladores

pueden mezclarse

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Caracteriacutesticas de SVN

Repositorio versionado Transacciones atoacutemicas Muacuteltiples protocolos de acceso Muacuteltiples tipos de clientes

Linux Unix Consola GUI

Windows Faacutecil de usar Seguro

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Operaciones

Check-Out (co) Commit (ci) Actualizacioacuten (update) Operaciones de archivosdirectorios

ABM de archivosdirectorios Meta-informacioacuten

Informacioacuten administrativa (info) Historial de operaciones (log)

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ciclo de trabajo Check-out

export LANG=en_USUTF-8 (soacutelo si es necesario) svn co httpbugslintiunlpeduarsvnrepos kohaA kohalogA kohaopacA kohaopachtdocsA kohaopachtdocsjoinhtmlA kohaopachtdocsindexhtmlA kohaopachtdocsopac-tmplA kohaopachtdocsopac-tmpldefault[]A kohaintranetcgi-bindetailplA kohaintranetcgi-binjmemberentryplChecked out revision 1

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

El directorio svn

Guarda informacioacuten administrativa Sirve para saber queacute se cambioacute Existe uno en cada directorio

NO SE DEBETOCAR

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Commit

Transmite los cambios al repositorio Crea una nueva revisioacuten Soacutelo para usuarios autorizados Sintaxissvn ci [-m ldquomensajerdquo]

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Update

Sincroniza la copia local con el rep El maacutes simple de todos svn update Acciones

U -gt Updated A -gt Added D -gt Deleted R -gt Replaced G -gt merGed C -gt Conflict

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Original

Andrea

Pablo

Conflictos

main() printf (ldquoholardquo)

main() printf (ldquoholardquo)printf (ldquomundordquo)

main() printf (ldquoholardquo)printf (ldquoplanetardquo)

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Al hacer el checkin

Pablo svn ci U maincUpdated to revision 2

Andrea svn ciC maincUpdated to revision 3

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten Archivo mainc

main() printf (ldquoholardquo)ltltltltltltltltltltltlt mineprintf (ldquomundordquo) ============printf (ldquoplanetardquo)gtgtgtgtgtgtgtgtgtgtgtgt r2

Copia local (maincmine) Copia de la versioacuten anterior (maincr1) Copia de la versioacuten actual en SVN

(maincr2)

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Resolucioacuten (cont)

Revertir los cambios svn revert

Sobreescribir el mainc Resolver el conflicto manualmente En cualquier caso

svn resolved mainc

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Comandos miscelaacuteneos

svn log--------------------------------------------------------------------r1 | nlofeudo | ltfecha horagt (Fri 28 May 2004) | 1 lineimport inicial--------------------------------------------------------------------r2 | einar | ltfecha horagt (Fri 28 May 2004) | 1 lineCorregido bug 2--------------------------------------------------------------------

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Clientes graacuteficos RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

RapidSVN

Interfaz graacutefica Multiplataforma

Windows GNULinux Mac OS 9x Mac OS X

Soporta todas las operaciones de SVN

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Integracioacuten con el shell de windows Marca los archivoscarpetas

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

TortoiseSVN

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN Para la versioacuten actual se requieren los

siguientes moacutedulos extrasndash ExtutilsAutoinstall

ndash Perl-LDAP

ndash Convert-ASN1

El orden de instalacioacuten es importante

Y los siguientes rpms para el SVNndash apr-095-02i386rpm

ndash apr-util-095-01i386rpm

ndash Neon-0246-1i386rpm

ndash subversion-105-1rh80i386rpm

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Actualizacioacuten mediante SVN

Para realizar la actualizacioacuten

ndashPosicionarse en el directorio usrlocalraquocd usrlocal

ndashHacer el checkout svn co httpbugslintiunlpeduarsvnreposkoha

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

PERL

Introduccioacuten

iquestCoacutemo esta escrito Koha

Ejemplos en Koha

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Definir el concepto de moacutedulo su alcance y utilizacioacuten

Introducir elementos de POO en Perl

Mostrar ejemplos de uso de moacutedulos tiacutepicos

Crear nuevos moacutedulos

Expandir las capacidades de la herramienta de programacioacuten (Instalacioacuten de moacutedulos existentes)

Introduccioacuten Objetivos

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Formato de libreriacutea de coacutedigo Reusabilidad Claridad Simpleza Extensibilidad

Caracteriacutesticas de OO al lenguaje

Identificados externamente con la extensioacuten pm

Identificados internamente con la palabra reservada package ltNombregt

package Matematico

Moacutedulos Perl

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl

Hay dos formas de poner disponible los un moacutedulo para los programas

1) Exportando Siacutembolos

2) Mediante llamadas a Meacutetodos (OO)

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplopackage Matematico

require Exporter

our ISA = qw(Exporter)

our EXPORT = qw(suma)

sub suma

($a$b) = _

$res= $a + $b

return($res)

sub producto

my ($a$b) = _

return($a$b)

1

Moacutedulos Perl

Comienzo

Exporta siacutembolo

Procedimientos Funciones

Variables

Fin

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Moacutedulos Perl usrbinperl

use Matematico

print suma(28)n

Salida

10

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Variables usadas como punteros Ejemplo 1 - Referencia sobre una variable

$nombre = gabrielEstablecer una referencia$ref = $nombreMostrar valoresprint El valor de $nombre es $nombre nprint El valor de $ref es $ref nprint El valor de la variable referenciada es $$ref n

SalidaEl valor de $nombre es gabrielEl valor de $ref es SCALAR(0x1c256f0)

El valor de la variable referenciada es gabriel

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 2 - Referencia sobre un arreglo

mascotas = (perro gato canario chancho)Establecer una referencia para el arreglo$ref = mascotasMostrar valoresprint El valor de $ref es $ref nprint El valor del primer elemento del arreglo es $$ref[0]rdquo

print El valor del segundo elemento del arreglo es $$ref[1]

SalidaEl valor de $ref es ARRAY(0x1c231bc) El valor del primer elemento del arreglo es perro El valor del segundo elemento del arreglo es gato

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo 3 - Referencia sobre un hash (arreglos que se acceden por clave)

Asignar un hash con pares atributo=gtvalormascotas = (Scooby=gtperro Silvestre=gtgato Tweety=gtcanario)

Establecer una referencia para el arreglo$ref = mascotas

Mostrar valoresprint El valor de $ref es $ref nprint rdquoEl valor para la clavede la clave Scooby es $$refScoobyn

SalidaEl valor de $ref es HASH(0x1c231ec) El valor para la clave Scooby es perro

Referencias

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Perl no es un lenguaje OO (Orientado a Objetos)

Solo soporta algunas caracteriacutesticas (como extensiones al lenguaje)

Clase Moacutedulo o paquete con las definiciones de variables y procedimientos

Objeto Referencia a un moacutedulo o paquete utilizada en un programa

Atributo Datos en una variable un arreglo o hash que forma un objeto Lo que seriacutea una variable de instancia

Meacutetodo Subrutina en el moacutedulo o paquete

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Clase rarr Moacutedulo (package)

Objeto rarr Referencia a un package

Los moacutedulos utilizados en POO requieren de un meacutetodo constructor (new)

use Auto

$t = new Auto

o$t = new Auto

o$t = Autonew()

Moacutedulos y POO

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

La clase Auto (Ejemplo de POO)usrbinperlpackage Auto

sub new Obtiene un referencia anoacutenima a un hashmy($esteObj) =

my ($mar $col $pre) = _$esteObj-gtmarca = $mar

$esteObj-gtcolor = $col $esteObj-gtprecio = $pre return $esteObj

Ejemplo Moacutedulo Autopm

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

sub verPropiedades

my($esteObj) = _

print $esteObj-gtmarca t

print $esteObj-gtcolor t

print $esteObj-gtprecio n

sub asignarValor

my($esteObj $propiedad $valor) = _

$esteObj-gt$propiedad = $valor

1

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Uso del moacutedulo Autopmusrbinperluse Auto

$t = new Auto(Renault Verde 10000)print Auto t $t-gtverPropiedadesrdquo

$r = new Auto(Mercedes Plata 231000)print Auto r $r-gtverPropiedades$t-gtasignarValor(marca Chevrolet)$r-gtasignarValor(precio 553000)

print Auto r $r-gtverPropiedades

Moacutedulo Autopm (cont)

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

La clase AutoDeCarrerapm derivada de Autousrbinperl

package AutoDeCarrera

require Auto

ISA = Auto

sub new

my $este = shift

$clase =

bless($clase $este) return($clase)

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Meacutetodos nuevossub hacerRuido

print rrr rrr rrrrrrn

sub hacerMuchoRuido

print rrr rrr rrrrrrt

print rrr rrr rrrrrrt

print rrr rrr rrrrrrn

1

Herencia AutoDeCarrerapm

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Pragmaacuteticos (pragmas) Operan como directivas de compilador Afectan el comportamiento del programa

use ltmoacutedulogt no ltmoacutedulogt

Ejemplosstrict Exige declaraciones

integer Realiza caacutelculos enteros (en vez de doble)

constant Declara constantes

diagnostics Fuerza diagnoacutesticos en modo debug

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Estaacutendard

Permiten extender la funcionalidad del lenguaje

Ejemplos

CGI Implementa manejo de CGI

file Manejo de archivos (copia comparacioacuten path)

IO Front-end a otros moacutedulos de IO (por ejemplo IOSocket)

MathTrig Funciones trigonomeacutetricas

Shell Permite correr comandos del SO de forma transparente

Tipos de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

CPAN - Comprehensive Perl Archive Network wwwcpanorg

ftpcpanifuspbrpubmirrorCPAN Brasil

ftpsunsitedccuchileclpubLangPERL Chile

Moacutedulos (En general coacutedigo fuente rarr Se requiere un compilador C)

Documentacioacuten Guiacuteas de estilo Tips Distribuciones

Repositorio de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

En general el proceso completo requiere Descomprimir el archivo (gzip zip) Desempaquetar (tar) Compilar (Build) - En Unix

perl MakeFilePL make make test

Instalar (Build) - En Unix make install

Instalacioacuten de Moacutedulos CPAN

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Disentildeo de clases Una clase es un package Un objeto es una referencia (blessed) Un meacutetodo es una subrutina Una propiedad es una estructura de datos

(generalmente un hash) Herencia

ISA Constructor

new

Creacioacuten de Nuevos Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Perl dispone de la directiva use ltnombregt

El inteacuterprete ldquobuscardquoen los directorios listados en INC

use File Usar el moacutedulo Filepm

El indica subdirectoriouse FileBasename Usar el moacutedulo

FileBasenamepm

Uso de Moacutedulos

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Koha Estructura

ndash Coacutemo esta escrito Koha

Tres tipos de Archivos

ndash Los scripts perl (pl) forman el Nuacutecleo de Koha

ndash Los templates (tmpl) tienen la forma del html que se retorna al cliente

ndash Los moacutedulos perl (pm) reunen funcionalidad comuacuten a diversas partes del sistema

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

ndash iquestCoacutemo funciona Koha

ndash Los usuario invocan a los scripts pl a traveacutes del webserver y contestan esas invocaciones apoyaacutendose en las funciones que les proveen los pm y se muestran al usuario mediante los tmpl

ndash En el siguiente graacutefico se ilustra esta interoperabilidad

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

Coacutedigo Perl (pl)

Moacutedulo Perl (pm)

Template (tmpl)

Coacutedigo

HTML

Requerimiento

Cliente

Servidor

Server MySql

DB

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Koha Funcionamiento

En las siguientes diapositivas se muestra este esquema de

funcionamiento

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (mainpagepl)

usrbinperluse HTMLTemplateuse strictrequire Exporteruse C4Databaseuse C4Output contains gettemplateuse C4InterfaceCGIOutputuse CGIuse C4Auth my $query = new CGImy ($template $loggedinuser $cookie) = get_template_and_user(template_name =gt intranet-maintmpl query =gt $query type =gt intranet authnotrequired =gt 0 flagsrequired =gt catalogue =gt 1 circulate =gt 1 parameters =gt 1 borrowers =gt 1 permissions =gt1 reserveforothers=gt1 borrow =gt 1 reserveforself =gt 1 editcatalogue =gt 1 updatecharges =gt 1 debug =gt 1 ) my $marc_p = C4Context-gtboolean_preference(marc)$template-gtparam(NOTMARC =gt $marc_p) output_html_with_http_headers $query $cookie $template-gtoutput

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo(intranet-maintmpl)

Es una pequentildea parte del archivo Fue agragado para permitir al usuario hacer el logout desde la paacutegina principal Imprime el nombre de usuario logueado

ltp align=left gt Ingresampoacute como lt-- TMPL_VAR NAME=loggedinusername --gt [lta href=cgi-binkohamainpagepllogoutx=1gtSalirltagt]ltpgt

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Coacutedigo del ejemplo (Authpm)

Sub get_template_and_user my $in = shift my $template = gettemplate($in-gttemplate_name $in-gttype) my ($user $cookie $sessionID $flags) = checkauth($in-gtquery $in-gtauthnotrequired $in-gtflagsrequired $in-gttype) my $borrowernumber if ($user) $template-gtparam(loggedinusername =gt $user) $template-gtparam(sessionID =gt $sessionID) $borrowernumber = getborrowernumber($user) my ($borr $flags) = getpatroninformation(undef $borrowernumber) my bordat $bordat[0] = $borr $template-gtparam(USER_INFO =gt bordat) return ($template $borrowernumber $cookie)

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Funciones Adicionales

ndash Seguridad

ndash LDAP

ndash Integracioacuten con SIU-Guaraniacute

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Seguridad Encriptacioacuten de la contrasentildea

ndash El usuario hace el request de la paacutegina de login y el servidor enviacutea un nuacutemero aleatorio dentro del cuerpo del html

ndash Utilizando coacutedigo javascript se hace un hash en md5 de la contrasentildea ingresada por el usuario de la siguiente forma md5(md5(contrasentildea)+nroAleatorio)

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

ndash Se hace el submit de la contrasentildea encriptada junto con el ID y el nuacutemero random

ndash Del lado del servidor se hace el mismo procedimiento y luego se compara contra lo enviado por el cliente

Seguridad Encriptacioacuten de la contrasentildea

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Utilizacioacuten de LDAP

ndash Requiere que ndash Los usuarios esteacuten cargados en una base de

datos LDAPndash Cada usuario en el LDAP tenga su

correspondiente usuario en la base de datos de koha con el mismo uid

ndash Configurar las siguientes variables de sistema ldapenabled (yes no) ldapinfos (ej dc=econo) ldappass (ej pepe) ldaproot (ej root) y ldapserver (ej koharedesinfounlpeduar)

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Koha con LDAP Funcionamiento

ndash Cuando el usuario hace el requerimiento al servidor eacuteste se conecta al servidor LDAP e intenta hacer un bind Si tiene eacutexito se considera al usuario autenticado

ndash Luego se recuperan los datos del usuario en la base de datos de koha a partir del uid y si existen queda terminado el proceso

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Koha con SIU-Guaraniacute

ndash Se puede configurar a Koha para que sea solo lector de los datos obtenidos de SIU-Guaraniacute o que tenga la posibilidad de modificar los datos de sus usuarios (por defecto)

ndash Para evitar que Koha modifique los datos de los usuarios debe setear la variable de sistema ChekUpdateDataEnabled=no

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Modificaciones

ndash Adicioacuten de Funcionalidades

ndash Solucioacuten de Bugs

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades

Hoy estamos utilizando la siguiente metodologiacutea Crear los directorios que alojaraacuten los nuevos moacutedulos

bullEl que contenga los archivos perl (pl)

bullEl que contenga los los templates (tmpl)

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Programar los nuevos moacutedulos en archivos que se colocaraacuten dentro de los directorios antes creados

Por ejemplo

bullLos pl dentro de usrlocalkohaintranetcgi-binnuevomodulo

bullLos tmpl dentro de usrlocalkohaintranethtdocsintranet-tmpldefaultennuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Si se crea un nuevo modulo pm para que sea utilizado por nuestros pl guardarlo dentro del directorio que contiene los moacutedulos C4 en el directorio AR

Por ejemplo usrlocalkohaintranetmodulesC4AR

La forma de invocar el moacutedulo Nuevomodulo desde nuestros pl es mediante la sentencia

use C4ARNuevomodulo

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)

Manejo de nuevos tmpl

Sugerencia Cuando se crea un nuevo template (tmpl) se recomienda terminar todo nombre de variable utilizado con mayuacutescula (por ej edicioN) para que estas puedan ser diferenciadas del simple texto que se va a mostrar

Esto es muy importante para simplificar el uso de herramientas automaacuteticas de traduccioacuten

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Adicioacuten de Funcionalidades (cont)Agregar un link dentro de KOHA apuntando al pl inicial de nuestro nuevo modulo

Por ejemplo lta href=cgi-binkohanuevomodulonuevomodulopl

parametrosinicialesgtNuevo Moacuteduloltagt

De esta forma la uacutenica diferencia con el proyecto KOHA original es la adicioacuten de un link que nos permite acceder a nuestro moacutedulo Esto facilitaraacute la futura integracioacuten con versiones venideras

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores

Pasos para la resolucioacuten de un errorReportarlo en MANTISDemarcar del aacutembito del errorEsta es el aacuterea dentro de la cual se ldquoesperardquo encontrarlo (Los pl pm tmpl involucrados)

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

IMPORTANTE Ver los errores en el navegador

Agregar al archivo CGIpm la liacutenea

use CGICarp fatalsToBrowser

Sin esta liacutenea soacutelo vemos en el navegador ldquo500 Internal Error Serverrdquo

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Antes de buscar el origen del error conviene dar un vistazo al servicio CVS de Sourceforge

httpcvssourceforgenetviewcvspykoha

Para ver si hay alguna versioacuten mas nueva de los archivos involucrados en la que ya este solucionado el error

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)

Ubicacioacuten del error dentro de su aacutembitoResolucioacuten del error en forma clara y siempre comentando las decisiones tomadasMarcarlo como solucionado en el MANTIS Realizando un breve resumen de la solucioacuten para que la misma pueda repetirse en caso de ser necesario

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Manejo de Errores (cont)Los errores maacutes comunes son

Entre la pagina y el PL

bullEnviacuteo de datos incorrectos

bullOmisioacuten de alguacuten paraacutemetroDentro del coacutedigo Perl (archivos PL y PM)

bullVariables no inicializadas

bullSentencias SQL malformadas (muy usual)

bullLimites de loops mal definidos

bullPasaje de paraacutemetros incorrectos

bullEtc

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error

Busqueda por Materia (subject) Este error fue solucionado recientemente por la

comunidad y es conocido como el bug 752 dentro del proyecto KOHA en wwwsourceforgenet

SIacuteNTOMASAl realizar una buacutesqueda por Materia (Subject) se produce un error 404 Not Found

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont)

BUacuteSQUEDA DEL ERROR Se comienza en searchpl donde se invoca a la

funcioacuten catalogsearch() del moacutedulo Searchpm Esta invoca a CatSearch() donde se arma la

sentencia SQL y se ejecuta Los resultados vuelven a searchplel cual los

pasa al template subjecttmpl para que sean mostrados

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

Ejemplo de solucioacuten de un error (cont) SOLUCIOacuteN

El Servidor MySql nunca realiza la consulta a causa de una sentencia SQL mal formada

select from bibliosubject biblioitems where (bibliosubjectbiblionumber = biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

order by subject group by subject

Linea 1229 del moacutedulo Searchpm $query = order by subject group by subject

por $query = group by subject order by subject

Con lo cual queda select from bibliosubject biblioitems where (bibliosubjectbiblionumber =

biblioitemsbiblionumber) and ( subject like matematicas or subject like matematicas or subject like (matematicas))

group by subject order by subject

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98

Proyecto KOHAGrupo de desarrollo UNLP

  • Slide 1
  • Slide 2
  • Slide 3
  • Slide 4
  • Slide 5
  • Slide 6
  • Slide 7
  • Slide 8
  • Slide 9
  • Slide 10
  • Slide 11
  • Slide 12
  • Slide 13
  • Slide 14
  • Slide 15
  • Slide 16
  • Slide 17
  • Slide 18
  • Slide 19
  • Slide 20
  • Slide 21
  • Slide 22
  • Slide 23
  • Slide 24
  • Slide 25
  • Slide 26
  • Slide 27
  • Slide 28
  • Slide 29
  • Slide 30
  • Slide 31
  • Slide 32
  • Slide 33
  • Slide 34
  • Slide 35
  • Slide 36
  • Slide 37
  • Slide 38
  • Slide 39
  • Slide 40
  • Slide 41
  • Slide 42
  • Slide 43
  • Slide 44
  • Slide 45
  • Slide 46
  • Slide 47
  • Slide 48
  • Slide 49
  • Slide 50
  • Slide 51
  • Slide 52
  • Slide 53
  • Slide 54
  • Slide 55
  • Slide 56
  • Slide 57
  • Slide 58
  • Slide 59
  • Slide 60
  • Slide 61
  • Slide 62
  • Slide 63
  • Slide 64
  • Slide 65
  • Slide 66
  • Slide 67
  • Slide 68
  • Slide 69
  • Slide 70
  • Slide 71
  • Slide 72
  • Slide 73
  • Slide 74
  • Slide 75
  • Slide 76
  • Slide 77
  • Slide 78
  • Slide 79
  • Slide 80
  • Slide 81
  • Slide 82
  • Slide 83
  • Slide 84
  • Slide 85
  • Slide 86
  • Slide 87
  • Slide 88
  • Slide 89
  • Slide 90
  • Slide 91
  • Slide 92
  • Slide 93
  • Slide 94
  • Slide 95
  • Slide 96
  • Slide 97
  • Slide 98