Plugin Coppermine "Graphic_Keywords_Editor"

Me gusta mucho la galería de fotos Coppermine, considero que es una gran herramienta para poder gestionar todas las fotos que hago, tanto con la cámara como con el móvil. Lo genial de esta aplicación es que las fotos las tengo siempre disponibles en mi servidor, y no sólo eso, sino que familia y amigos también pueden acceder a las fotos, comentarlas y bajárselas si las desean usar; pero todo ello desde una plataforma que este controlada y donde la autoría y propiedad de las fotos siga siendo mía, al contrario que con Facebook que al subir las fotos, estas automáticamente les pasan a pertenecer a ellos. Quizás podría ser interesante utilizar herramientas tipo Flickr, DevianArt o Picasa, pero aunque algunas las he probado, me gusta más mi Coppermine ;-).
Con Coppermine, no pretendo evitar que me copien y/o utilicen las fotos sin consentimiento, simplemente me aseguro no estar "regalándoselas" a ninguna empresa. Además, el hecho es que las fotos en su mayoría, las tengo puestas en galerías de libre acceso, es decir que cualquier persona puede acceder y verlas o bajarlas (y por lo tanto usarlas). Eso no es algo que me preocupe, es más me alegraría saber que alguna persona le gustara tanto alguna de mis fotos que quiera utilizarla, si se da el caso estaría muy agradecido de que me dijera donde la ha utilizado para verlo.
Y por estos motivos, cuando veo algo que echo en falta en Coppermine, pienso si podría haberlo programado alguien, o si no, si podría hacerlo yo y colaborar de esa forma al crecimiento de la herramienta.
Este es uno de esos casos, a mi siempre me ha parecido genial la idea de etiquetar las fotos, porque facilita la tarea de encontrar luego fotos de personas, lugares o las fotos de un viaje concreto. Pero la forma de etiquetar en Coppermine es horrible, ya que hay que ir etiquetando las fotos de una en una, es tedioso, arduo y lo peor es que a menudo se comenten errores (unas veces utilizas una etiqueta con espacios para una persona, y otras veces sin espacios) y luego tienes varias fotos de una misma persona con varias etiquetas diferentes, por lo tanto pierdes la potencia de las etiquetas para localizar las fotos de esa persona.

Por estos motivos he implementado un pequeño plugin que me facilita la tarea de etiquetar mis fotos en Coppermine. Etiquetar las fotos en Coppermine ahora es más fácil y eficiente. Las características que cumple el plugin son las siguientes:

  • Se pueden seleccionar varias fotos simultáneamente para etiquetarlas.
  • Se pueden aplicar varias etiquetas simultáneamente a una o varias fotos.
  • La selección de fotos a etiquetar se realiza con el ratón y de manera similar a como se trabaja en un explorador de archivos en el PC; es decir se pueden seleccionar fotos pinchando y arrastrando, se pueden añadir fotos a la selección usando la tecla "control" (Ctrl), se puede de-seleccionar fotos haciendo clic nuevamente en ellas, etc. En cualquier caso aunque el funcionamiento se ha intentado que sea lo más similar posible al del explorador de archivos, hay algunas funcionalidades que no son iguales por limitaciones de la librería utilizada (JQuery v1.9)
  • Ver las etiquetas de cada foto al pasar el ratón por encima de la misma.
  • Ofrecer una lista de las etiquetas utilizadas anteriormente al escribir la etiqueta (el típico autocompletar).
  • Permitir operaciones de añadir etiquetas a una foto, eliminar etiquetas a la foto y reemplazar las etiquetas de una foto (esta última operación sustituye todas las etiquetas de golpe, quizás para una próxima versión mejore esta operación).
  • Cada usuario sólo puede editar las etiquetas de sus fotos; con excepción de administrador que puede etiquetar lo que quiera.
  • Permitir localizar todas las fotos SIN etiquetas; esto lo hace buscando todas las fotos con el campo de etiquetas vacio, y acto seguido les pone una etiqueta especial "_noKeywords_" de manera que se puedan localizar mediante la búsqueda normal de Coppermine.
  • Multilenguaje (actualmente español e inglés).

A continuación dejo un vídeo donde se ve el funcionamiento y la idea:

Limitaciones actuales:

  • Sólo funciona con el tema por defecto ("curve") de Coppermine; esto de debe a problemas con el hook para añadir botones.
  • En algunas tablet/móviles no funciona bien el autocompletar.

Comentarios útiles para desarrolladores:
La idea inicial del plugin era que simplemente permitiera seleccionar varias fotos con el ratón pinchando y arrastrando, esto fue más o menos sencillo de implementar con la funcionalidad "selectable" de JQuery UI; el problema vino al intentar utilizar la librería JQuery en Coppermine porque ya tiene una versión de la misma, pero es antigua (1.3 creo) y para usar el "selectable" necesitaba la 1.9 (la que había usado en las pruebas), tras investigar me encontré que una posible solución era cambiar el nombre de la función JQuery, el conocido "dollar" $(' ... '); para ello utilicé la función "noConflict":

Mediante "noConflict", podemos utilizar varias versiones de JQuery en una misma aplicación sin que se estorben unas a otras, básicamente lo que hace es que a cada versión de JQuery a utilizar le asigna un nombre diferente, en mi caso utilicé "jQuery19" como puedes ver. Esa línea la tienes que poner al final de la declaración de la librería de JQuery; y cada vez que en tu código quieras utilizar esa versión de JQuery simplemente llamas a JQuery con el nombre en cuestión en lugar del dollar, como puedes ver en el siguiente ejemplo:

Una vez que logré hacer funcionar la selección de imágenes en Coppermine sin problemas de conflictos entre versiones de JQuery, tenía otro problema, que fue el CSS necesario para que las fotos seleccionadas se vieran destacadas. El problema era que las etiquetas CSS que yo daba a las imágenes destacadas se veían sobrescritas por el CSS propio del Coppermine, por lo que no tenían efecto. Esta tontería me costo unas pocas horas de repaso de teoría del HTML, HTML5 y de las Hojas de Estilo en Cascada (no hay mal que por bien no venga) hasta que recordé que en CSS para conseguir sobrescribir una propiedad que está declarada después de la tuya, lo que puedes hacer es ser más específico en el selector. Resumiendo, que tenía que utilizar "td.ui-selected" en vez de ".ui-selected" en el selector para darle las propiedades a la foto seleccionada (si te quedan dudas, ya sabes, a recordar la teoría del CSS ;-)). Y por fin fui capaz de seleccionar fotos...

Selección de fotos con el mi plugin para Coppermine

Selección de fotos con mi plugin para Coppermine

Después implementé las funciones que añadían o eliminaban etiquetas en el servidor. No fue complicado pues hay bastante documentación para conocer el funcionamiento de los plugins en Coppermine, su BD, tablas y la forma de acceder y tocar en la BD.

Llegado a este punto tenía una primera versión funcional, pero al utilizarla me di cuenta que carecía de cosas importantes para que me fuera realmente útil, entre ellas:

  • La posibilidad de ver las etiquetas que tenía cada foto que estaba etiquetando
  • Ver las etiquetas previas que había utilizado con anterioridad en otras fotos (autocompletar).

La primera cuestión se solucionó más o menos rápido, pero para la segunda, después de investigar, encontré la librería "select2" basada en JQuery, pero no se puede decir que tenga mucha documentación (a día de hoy poco más de 3 ejemplos), y me costo lo suyo hacer que funcionara (mucho buscar en Internet y prueba y error). Cuando conseguí que funcionaran las pruebas, resultó que al añadir el código al plugin del Coppermine no funcionaba nada, tras más quebraderos de cabeza, resultó que me estaba pillando (lógicamente) la JQuery del Coppermine en vez de la mía (la 1.9); tenía que modificar la librería para que usara la versión nueva, para ello sustituí todas las llamadas a la función JQuery en la librería Select2 por la llamada a la mía ("jQuery19"); esto implicaba sustituir todos los "dollar", todas las definiciones de nuevas funciones y todas las llamadas (así dicho parece fácil, que lo es, pero la dificultad estuvo en darse cuenta del fallo y después en encontrar todas esas llamadas). Cuando todo funcionó ya tenía el autocompletar de las etiquetas, y al utilizarlo, ya sí empezaba a resultarme un plugin útil.

Muestra del autocompletar del plugin para Coppermine

Muestra del autocompletar del plugin para Coppermine

Con esta versión he organizado bien mis fotos, he realizado pruebas en la tablet y también funciona, pero con el uso, me han surgido nuevas necesidades. Concretamente la de localizar todas las fotos SIN etiquetas. Esto ha sido fácil de implementar, apenas me ha llevado una tarde. De esta forma ya puedo localizar rápidamente todas las fotos que aún no les he dado una etiqueta.

También comentar que NO he podido hacer que el botón que activa/desactiva la edición de las etiquetas se ponga mediante el uso del hook que Coopermine tiene para ello, el "sys_menu" ni con el "sub_menu". Desconozco porqué, pero cuando he tratado de buscar solución, toda la referencia que encuentro es para la creación de temas. En un futuro tengo que tratar de arreglar esto, porque tal y como está montado, el plugin sólo funciona con el Coppermine con el tema por defecto "curve"; si está usando otro tema, el botón de activar/desactivar no sale.

Después de todo esto, comentar que estoy abierto a nuevas ideas que puedan hacer de Coppermine un herramienta más útil aún :-).

Graphic Keywords Editor plugin for Coppermine
Graphic Keywords Editor plugin for Coppermine
graphic_keywords_editor.zip
Version: 1.0
244.9 KiB
50 Downloads
Details...

Plugin MultiPicFilmStrip para Coppermine Photo Gallery

En mi galería de fotos montada con Coppermine he realizado varios cambios y modificaciones, pero siempre me quedo con el amargo regusto de hacerlo deprisa y corriendo, sin dedicarle el tiempo que se merece, por ello hace un par de semanas me mire el sistema de plugins de esta galería de fotos. Me sorprendio, es fácil y sencillo, en escasos minutos tienes tu primer plugin de pruebas instalado, configurado y funcionando. Después de esa grata sorpresa monte un plugin que modifica ligeramente el comportamiento de la tira de fotos que sale debajo de la vista de imágenes.

El comportamiento por defecto de la tira de imágenes de Coppermine es avanzar una imagen por cada vez que hacemos clic en la flecha de avanzar o retroceder, y resulta un poco molesto para mi gusto tener que estar haciendo clics uno tras otro para moverme por varias imágenes. Con el plugin que he creado, esa tira de imágenes mostrará seis nuevas imágenes cada vez que hagamos clic en la flecha correspondiente.

Para hacer funcionar el plugin únicamente necesitas descargar el archivo, descomprimirlo y subir la carpeta "moveMultiplePicsOnFilmstrip" a la carpeta plugins de tu Coppermine. Después lo activaremos desde la configuración de plugins de Coppermine, no hay que configurar nada, y desde ese momento, las fotos de la tira de imágenes avanzará seis fotos por cada clic que realicemos. He creado un pequeño vídeo para ver el comportamiento antes y después de la activación del plugin.

Información para desarrolladores:

Hacer un plugin para Coppermine es extremadamente sencillo, me ha sorprendido gratamente, y si sueles meterle mano a tus aplicaciones web para que se comporten exactamente como tu quieres, en el caso de esta galería de fotos creo que merece la pena dedicarle unos minutos para entender el funcionamiento de su sistema de plugins y hacer que tus modificaciones sean reutilizables.

En mi caso tuve un pequeño problema, y es que el código Javascript que hace funcionar el comportamiento de la tira de imágenes o filmstrip, es el archivo "displayImage.js", y por algún motivo, este archivo siempre es el último en añadirse al array de códigos Javascript de la galería. Ello me provocaba que los cambios que yo hacia en el comportamiento de código Javascript se machacaran con el comportamiento original. Una primera solución evidente es tocar el archivo Javascript original, pero eso es una solución que requería de acciones extra aparte de la simple instalación y activación del plugin. Es decir era una solución poco elegante y bastante chapucera, por ese motivo, tras pensarlo un poco más se me ocurrió una solución mejor; lo que necesitaba era desactivar el handler de JQuery al evento clic de la flecha, pero para eso tenía que ejecutar el "unbind" después de que Coppermine cargara todos los Javascript. Esto lo solucione haciendo uso de una llamada a mi función con un delay no bloqueante como puede verse a continuación.

La función "nextPic(false)" es una copia de la función original que se ejecutaba con el clic, solo que modificada para que pueda llamarse varias veces seguidas. Concretamente la función se auto-llama a si misma cinco veces (más la llamada original, seis) provocando el avance consecutivo de seis fotos.

En un futuro realizaré una segunda versión de este código que en la activación del plugin pregunte el número de fotos a avanzar, de forma que se pueda configurar fácilmente si se desea que avancen más o menos fotos.

Por último comentar que un buen inicio para trabajar los plugins es ver como están creados otros plugins, puedes consultar muchos aquí. Y para comenzar el desarrollo puedes empezar con la propia documentación que ofrece Coppermine aquí.

Plugin Coppermine MoveMultiplePicsOnFilmStrip
Plugin Coppermine MoveMultiplePicsOnFilmStrip
moveMultiplePicsOnFilmstrip.zip
Version: 0.1
6.1 KiB
94 Downloads
Details...