Actualizar las fotografías desde BD externa

Actualizar las fotografías desde BD externa

de Juan Ezeiza -
Número de respuestas: 25
Hola:
Tengo una base de datos en ACCESS que incluye las fotografías de todos mis alumnos. Al principio de curso genero un archivo de texto plano desde el que subo los perfiles a la plataforma y matriculo a los alumnos en los diferentes cursos.
Sin embargo, las fotografías las incluimos manualmente. ¿Alguien sabe si existe algún método para automatizar la inclusión de fotografías en los perfiles como un campo más?
Gracias de antemano. Saludos.

Juan Ezeiza
http://www.axular.net
http://www.axular.org
Promedio de valoraciones: -
En respuesta a Juan Ezeiza

Re: Actualizar las fotografías desde BD externa

de Raul Garcia Canet -
Hola Juan,

En principio no he visto nada al respecto, aunque hipotéticamente añadiendo el fichero de texto de usuarios un campo más llamado "picture" y con valor 1 debería funcionar, siermpre y cuando en la carpeta users de moodledata existiera una subcarpeta con el id del usuario y en su interior contuviera los ficheros f1.jpg y f2.jpg correspondientes a las fotografías del usuario

Es decir, las rutas hacia las fotografías no se almacenan en la base de datos sino que se construyen dinámicamente usando la ruta "moodledata/users/iduser/f1.jpg" y "moodledata/users/iduser/f2.jpg"

Aunque como te digo, esto es "hipotéticamente" ya que no he visto el códgio que se usa para ller el fichero y demás.
No obstante como es un tema que me interesa, le echaré un vistacillo en cuanto pueda.

Hasta pronto.
Salu2.
J. Raul (juagarc4) guay

P.D: hasta ahora lo hacía mediante un programa externo, pero como han cambiado las Tablas de Moodle ya no me sirve. así que..., me toca indagar gran sonrisa
En respuesta a Raul Garcia Canet

Er: Re: Actualizar las fotografías desde BD externa

de Juan Ezeiza -
Hola tocayo:
Al final, como "sólo" eran 335 fotografías, las he subido una a una Hilik.
De todos modos, gracias por la respuesta. Me has abierto una vía de investigación para seguir estudiando el tema y no tener que repetir la hazaña Begi-keinua
Saludos.

Juan Ezeiza

P.D. Si tus indagaciones llegan a buen puerto te agradecería que me tuvieras informado. Yo haré lo propio.
En respuesta a Juan Ezeiza

Re: Er: Re: Actualizar las fotografías desde BD externa

de Raul Garcia Canet -
Hola tocayo gran sonrisa,

Pues 335 fotitos no son moco de pavo asombro, menudo faenón.

Bueno, pues revisando la rutina de subida de usuarios he visto que no contiene el campo picture que comentaba antes.
Haré algunas pruebas para incluirlo y a ver si consigo que lo procese adecuadamente.

NOTA: El puntazo sería que fuese capaz de subir las fotos automáticamente, pero claro eso dependerá del nombre de la foto y de si hay alguna forma de indicarle qué foto es de qué usuario. (mmmm, pensativo, no se, no se). Todo se andará.

En fin, ya pensaré algo.
En cuanto tenga algo, no te procupes que lo postearé, y a ver si como dicen en mi tierra ("entre todos hacemos una, jejejeje")

Hasta pronto.
Salu2.
J.Raul (juagarc4) guay
En respuesta a Raul Garcia Canet

Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Bueno, pues revisando la rutina de subida de usuarios he visto que no contiene el campo picture que comentaba antes.

Por lo que he visto, existe un campo en la tabla mdl_user que se llama picture. Si el campo tiene el valor '0' es que el usuario no tiene foto y se usa la foto por defecto.

Basta con cambiar el valor de esa columna a '1' y Moodle irá a buscar las fotoso a .../moodledata/users/id-usuario/f1.jpg y f2.jpg. El valor por defecto de esa columna es '0', pero si se cambia a '1', automáticamente todos los nuevos usuarios tendrán foto asignada (siempre que la subamos, claro está guiño, sino se imprimirá la foto por defecto).

Las fotos tienen que estar en formato JPG y ser de los tamaños siguientes:

  • f1.jpg: 100x100 pixeles.

  • f2.jpg: 35x35 pixeles.

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Juan Ezeiza -
Gracias por la información, Iñaki, aunque no sé si trae más cuenta crear 335 carpetas, redimensionar 670 imágenes, introducirlas en las carpetas con el id adecuado y subirlas al servidor... o hacerlo de forma manual.
En cualquier caso, está bien saber cómo funciona la asignación de fotografías.
Eskerrik asko. Un saludo.

Juan
En respuesta a Juan Ezeiza

Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda
Si usas Unix/Linux en tu servidor, todo eso se puede automatizar con un pequeño script que lo haga del tirón, a condición de tener algunas utilidades instaladas (imagemagick) y los ficheros de las fotos nombrados con el 'id' de los usuarios.

Si estás interesado, estoy seguro de que en unos pocos minutos podemos tenerlo en marcha sonrisa

Saludos. Iñaki.
En respuesta a Iñaki Arenaza

Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Juan Ezeiza -
Como ya decía en un mensaje anterior, esta vez he subido las fotos una por una a mano, pero por supuesto que me interesaría automatizar el proceso para el curso que viene.
Las fotos las tengo actualmente nombradas con el nombre de usuario, pero eso es lo de menos. El problema es que tenemos Moodle alojado en un servidor dedicado al que accedo a través de un panel de control que no sé si me permitiría realizar lo que dices.
En cualquier caso, te agradezco el ofrecimiento y te tomo la palabra para el año próximo. Muchas gracias.
Saludos.

Juan Ezeiza
En respuesta a Juan Ezeiza

Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda
Si puedes subir un zip con todas las fotos al servidor, el script se puede hacer en PHP y hacer que éste use el nombre del usuario para obtener su id y después haga todo el trabajo "sucio" con Moodle.

No deberían ser más de 30-50 líneas y menos de 1 hora de trabajo.

Saludos. Iñaki.
En respuesta a Iñaki Arenaza

Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de juan carlos monterrubio -
Hola que tal:
He estado leyendo su discucion y ya pude extraer las fotos por alumno con su id (matricula) de mi BD actual. Ya que no conozco mucho de Linux les agradecería que crearan dicho script por cierto en moodle 1.8 donde esta moodledata?
también mi servidor es externo y compartido por lo que solo puedo entrar al área de public_html.
Saludos y de antemano muchaaas gracias.
En respuesta a juan carlos monterrubio

Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Sebastian Bergerot -
la carpeta con las fotos si o si tiene que estar dentro de moodledata?
ya que tego una BD con legajos, nombres, apellidos, nombre de foto, y demas
pero las fotos la tengo en otro servidor.
es posible hacer alguna modificacion para que las busque en el otro

gracias
En respuesta a Sebastian Bergerot

Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de juan carlos monterrubio -
al parecer la nueva versión busca las imágenes en la carpeta:

uploaddata/users/

también creando una carpeta con el numero de usuario.
En respuesta a juan carlos monterrubio

Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda
El nombre uploaddata es el que usa la versión de Moodle que viene con Fantástico o alguno de esos sistemas integrados que ofrecen ciertos proveedores de servicios, pero es el mismo directorio.

De hecho, para estar seguro de que se usa el directorio correcto, lo suyo es usar el valor de la variable $CFG->dataroot del fichero config.php, ya que es exactamente lo que usa Moodle internamente.

Saludos. Iñaki.
En respuesta a Iñaki Arenaza

Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Bueno, han sido más de 1 hora de trabajo (alrededor de 3) pero porque lo he querido dejar 'bonito' y lo más integrado en Moodle.

Así que he hecho una nueva página de adminstración (pero sin integrarla en el menú, ya que eso implicaría modificar código estándar y eso quería evitarlo a toda costa). Para usarla hay que:

  • subir el fichero adjunto a la carpeta .../admin de Moodle. Yo le he llamado al script uploadpictures.php, pero el nombre es lo de menos.
  • iniciar sesión como administrador en Moodle
  • ir a la dirección http://tu.sitio.moodle/admin/uploadpictures.php
  • Escoger el fichero Zip con las fotos de los usuarios, darle a 'Subir' y dejarle trabajar.

Si encuentra cualquier tipo de problema, se queja según se los encuentra (en perfecto inglés, por si algún 'guiri' lo quiere usar más adelante). Y al final da un resumen de cuántos usuarios actualizados y cuantos no.

El fichero ZIP tiene que contener las fotos de los usuarios. Cada usuario, un fichero. Y el nombre del fichero tiene que coincidir exactamente con el nombre del usuario en Moodle (salvando la extensión, obviamente), y al descomprimir el zip los ficheros tienen que quedar en la misma carpeta que el propio zip (es decir, no se comprueban subdirectorios).

Por ejemplo, si hay tres usuarios llamados 'usuario1', 'usuario2' y 'usuario3', el fichero zip debería contener ficheros del estilo de 'usuario1.png', 'usuario2.jpg' y 'usuario3.gif' (valen cualquiera de los tipos de imágenes soportadas por Moodle, ya que usa las rutinas internas de éste).

Faltan añadir las cadenas de traducción del botón y de la cabecera de la página, pero lo dejo como ejercicio para el lector sonrisa

Espero que sea útil.

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Re: Actualizar las fotografías desde BD externa

de Raül Fernández -

Me quito el sombrero Iñaki, que gran trabajo. Me será de lo mas útil. Has pensado en añadirlo por defecto a la 1.9? O integrarlo dentro de la opcion de subida masiva de usuarios?

Muchas gracias.

En respuesta a Iñaki Arenaza

Er: Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Juan Ezeiza -
Muchas gracias, Iñaki. ¡Es exactamente lo que estaba buscando! Primeran
Dos preguntas:
  • ¿Funciona con las versiones 1.7 y 1.8?
  • Si el script se encuentra con que ya existen fotos para algunos usuarios, ¿las cambia?
Esto último lo pregunto porque solemos renovar las fotografías al principio de cada curso. De todos modos, si no es así tampoco pasa nada. No tengo más que borrar las viejas y lanzar el script.
Por cierto, Raúl tiene razón. Seguro que a bastantes más "moodleros" les gustaría encontrarse esta opción en la instalación estándar.
Gracias de nuevo. Te debo unas cañas... Begi-keinua

Juan
En respuesta a Juan Ezeiza

Re: Er: Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Lo he desarrollado en una 1.8.2+, así que funcionan 100% con 1.8. No lo he probado con una 1.7, pero lo hago en unos minutos y te comento. No debería dar problemas, porque usa código robado del propio Moodle, pero mejor asegurarse sonrisa

[Edición: efectivamente, funciona sin problemas en una 1.7.2+]

En cuanto a que pasa si ya existen las fotos, el script asigna siempre lo que se le pase en el zip. Si no había nada, pone la nueva. Si había una vieja, la sobrescribe. He supuesto que es el comportamiento más habitual, así que ni siquiera he previsto una casilla para poder elegir el comportamiento. En todo caso, debería ser bastante fácil añadir esa funcionalidad.

En cuanto a lo de incluirlo en el estándar, habría que pulirlo un poco más. En lugar de usar el código del propio para crear las imágenes f1 y f2 a partir de lo que se suba, lo he copiado y pegado directamente en el script, por un par de obstaculos técnicos que me he encontrado y a los que he dedicado casi una hora a intentar resolver, para al final dejarlo estar y usar el copiar y pegar.

Sin embargo en una integración como dios manda, habría que eliminar todo eso y hacerlo bien, pero para eso habría que tocar un poco las tripas de Moodle (concretamente la función save_profile_image() de gdlib.php, para separar la captura del fichero subido y la generación de las minuaturas), y era lo último que quería al hacer el script.

Ah, y el tema de las cadenas de caracteres para que sea traducible a otros idiomas.

No debería ser mucho trabajo más (otro par de horas, siendo optimista sonrisa), así que si alguien se anima guiño

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Re: Er: Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

No debería ser mucho trabajo más (otro par de horas, siendo optimista sonrisa, así que si alguien se anima guiño

Al final me he animado yo. Resulta que me ha tocado usarlo este curso (antes nunca habíamos subido las fotos de los usuarios, pero este curso han creído que era buena idea, y 850 fotos son muchas fotos guiño)

Así que he creado un parche que lo integra completamente en Moodle. Añade la entrada correspondiente en el menú de adminstración, el idioma es configurable, tiene comprobaciones de seguridad por todas partes, y he tocado las tripas para separar la captura del fichero subido de la generación de las minuaturas, como mencionaba en mi anterior mensaje.

Así que adjunto el fichero zip con el parche. Lo he hecho en una 1.8.2+ y para aplicarlo hace falta usar la herramienta 'patch', por la razón que menciono arriba: he tocado las tripas.

En todo caso, si alguien tiene una 1.7.x donde quiera usarlo, o una 1.8.x donde el parche no se aplique correctamente, o no sepa usar patch, que me lo diga y sabiendo que versión exacta de Moodle tiene le puedo generar unos ficheros "completos" a medida. De esta forma, con sobrescribir (previa copia de seguridad guiño) los ficheros existentes con los que yo le genere debería funcionar 100%.

Hay que aplicar los parches en orden: primero el 0001-xxx..., y luego el 0002-yyy...

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Er: Re: Er: Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Juan Ezeiza -
En todo caso, si alguien tiene una 1.7.x donde quiera usarlo, o una 1.8.x donde el parche no se aplique correctamente, o no sepa usar patch, que me lo diga...
Pues es mi caso y doblemente: no sé usar patch Lotsatuta y tengo una versión 1.8.3+
Si puedes pasarme los ficheros te lo agradeceré. Si no, seguiré funcionando directamente con el uploadpictures.php, que va perfectamente.
Un saludo.

Juan
En respuesta a Juan Ezeiza

Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Bueno, pues ahí van los ficheros válidos para la 1.8.3+ a día de hoy (2007.12.01).

Hay que retocar los ficheros lib/gdlib.php, admin/settings/users.php, lang/en_utf8/admin.php y lib/moodlelib.php, además de añadir el nuevo fichero admin/uploadpicture.php.

Los cambios de los ficheros de moodle estándar son mínimos pero necesarios. La pega de usar ficheros completos en vez de parches es que en cada actualización de Moodle hay que volver a pedirmelos. No me importa gran sonrisa, pero siempre es un engorro porque igual en ese momento estoy liado y te dejo "colgado" unos días.

En todo caso ahí van en el .tar.gz adjunto al mensaje en el foro.

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Er: Re: Actualizar las fotografías desde BD externa

de Juan Ezeiza -
Gracias por los ficheros. Voy a tener que aprender a usar patch Lotsatuta, aunque quizás lo mejor sería que esta funcionalidad pasase a la versión estándar Barrea
El caso es que vamos a realizar una nueva instalación de Moodle y me canso sólo de recordar lo que me costó subir 335 fotografías la última vez que lo hice.
Saludos.

Juan
En respuesta a Juan Ezeiza

Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Bueno, aprender a usar patch es fácil. Ahí van los pasos:

1.- Descargar e instalar patch para Windows desde http://gnuwin32.sourceforge.net/packages/patch.htm. Yo lo suelo poner en C:\bin\patch.exe (para que sea corto de teclear aunque no esté en el path, y no tenga espacio en blanco que den problemas).

2.- Descargar el parche (o parches) desde la red, y colocarlos en la raíz de la carpeta de Moodle (vamos, en $CFG->wwwroot). Descomprimirlos si están comprimidos.

3.- Como los parches que yo genero están en ficheros con formato de fin de línea Unix y la versión de patch para Windows no se lleva bien con ello, yo suelo abrir el fichero del parche con Wordpad (importante, notepad no sirve), y lo guardo como 'Documento de Texto - Formato MS-DOS' para que haga la conversión de fin de línea al formato de MS-DOS/Windows.

4.- Desde una ventana de comandos DOS, ir al directorio raíz de Moodle (para el ejemplo supondré que es C:\moodle-183\htdocs) y ejecutar:

c:
cd \\moodle-183
c:\\bin\\patch.exe -p1 < nombre-del-fichero-del-parche.diff

5.- Deberíamos obtener una salida de texto similar a la siguiente (los nombres de ficheros y números son completamente ficticios, es sólo para mostrar la pinta de lo que deberíamos obtener):

patching file admin/settings/user.php
patching file lib/moodlelib.php
patching file user/edit.php

Puede que también aparezcan algunas líneas como estas:

Hunk #1 succeeded at 430 (offset 2 lines).

en ese caso quiere decir que el parche se ha aplicado bien, aunque no coincidía exactamente con la versión que teníamos instalada. Sin embargo, si nos aparece algo del estilo de:

Hunk #1 FAILED at 1019.
x out of y hunks FAILED -- saving rejects to file XXXXX.rej

es que parte (o todo) el parche no se ha podido aplicar bien, y ha generado lo que se denomina un 'rechazo'. Esto es Malo(Tm) y no debería pasar sonrisa

Por si acaso, yo antes de aplicar los parches hago una copia de seguridad de todos los ficheros de código. Así, si el parche falla en uno de los ficheros (pero no en los otros), siempre puedo dejarlo como estaba. Una vez que he visto que el parche se aplica bien, suelo deshacerme de la copia de seguridad.

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Re: Er: Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de José de Jesús -

Paz y Bien.

Iñaki:

De antemano, Felicidades por el buen trabajo que has estado haciendo. Puedes ayudarme con el fichero para la versión 1.5.3 que estoy utilizando, en sistema operativo linux. Gracias.

Saludos.

José de Jesús.

En respuesta a José de Jesús

Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Hummmm, 1.5.3 es una versión bastante antigua. Convertir el fichero a esa versión ha llevado algo de tiempo y el parche que voy a publicar aquí no se aplica limpiamente a la 1.5.4+ (que es la versión estable actual de la rama 1.5). Así que si alguien lo necesita para la 1.5.4+ que lo diga (para ahorrarme el esfuerzo si nadie lo necesita guiño

Como hay que tocar unos cuantos ficheros para que todo funcione, es este caso no hay más remedio que usar patch para aplicar los cambios. En este mismo hilo he publicado unas pequeñas instrucciones sobre como usar patch para aplicar los cambios, así que no debería ser mucho problema guiño

Bueno, ahí va el fichero con el parche.

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Carlos Acosta Montejo -
Hola Iñaki he utilizado el script que usted programo, en la version 1.8.2+ para actualizar la foto de alrededor 15000 usuarios y hasta hora estaba funcionando perfectamente pero migre a la 1.8.6 y me dejo de actualizar la foto de los usuarios de nuevo ingreso en el sistema, habra cambiado la forma de actualizar la foto para esta version si pudiera ayudarme le estaria agradecido.

Gracias de antemano.
En respuesta a Carlos Acosta Montejo

Re: Er: Re: Er: Re: Er: Re: Actualizar las fotografías desde BD externa

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Hola Carlos,

perdón por responder tan tarde, pero no me paso por los foros tan a menudo como me gustaría (cosas del trabajo y tal).

En algún punto de la rama 1.8 se cambió la estructura de directorios de los ficheros de usuarios (incluidas las imágenes), y el parche que está publicado anteriormente en este mismo hilo ya no sirve, puesto que usa la estructura antigua.

Sin embargo hace pocos días actualicé el parche para la versión 1.8.7 (aunque debería aplicarse sin problemas sobre la 1.8.6) y lo adjunte en el bug original: http://tracker.moodle.org/browse/MDL-11752 . Basta con ir allí y descargarse la versión más reciente del parche para la versión 1.8.x (en el momento de escribir esto es el fichero llamado "mass-upload-user-pictures-1.8.7.diff") y aplicarlo según las instrucciones de esta página: http://docs.moodle.org/en/Development:How_to_apply_a_patch

Con eso debería funcionar.

Saludos. Iñaki.