Herramientas de desarrollo · 2011-06-01 · Proyecto KOHA Grupo de desarrollo UNLP Introducción a...
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
-