mandar emails

mandar emails

de Miguel Manzano -
Número de respuestas: 7
¡Hola a todos! Estoy desarrollando un nuevo módulo y mi problema es el siguiente:
El administrador deberá mandar un mail a un usuario que será seleccionado desde un formulario si sólo tengo el id de dicho usuario como hago para utilizar la funcion:
email_to_user($user, $from, $subject, $message, $messagehtml, $attachment, $attachname);

Si necesito el $user y sólo tengo su id. ¿Qué puedo hacer para conseguir la clase usuario a partir de su id?

Promedio de valoraciones: -
En respuesta a Miguel Manzano

Re: mandar emails

de Antonio Piedras -
Miguel,
hay una función de la libreria moodlelib.php que se llama get_complete_user_data, que te permite recoger todos los datos de un usuario a partir de un campo de la base de datos de la tabla de usuarios y te devuelve una estructura con los datos.
p. e. : $user = get_complete_user_data('id', valor del id);

Ahora la estructura $user tendrá como atributos el nombre de los campos de la base de datos y su valor.

p.e. : $mail = $user->email;

Espero que te sea de ayuda.

Hasta pronto.
En respuesta a Antonio Piedras

Re: mandar emails

de Martín Langhoff -
Cuidado! get_complete_user_data() es para cuando el usuario hace login solamente -- cuando queremos ir a ver si tiene datos en algun sistema externo como LDAP/AD. Es un llamado caro y lleno de dependencias.

Lo que Miguel quiere es $USER, si el mail es al usuario actual, o get_record('user', 'id', $user->id);

Si vas a procesar muchos emails y necesitas escalabilidad, te conviene hacer un JOIN y extraer el usuario del JOIN.
En respuesta a Martín Langhoff

Re: mandar emails

de Miguel Manzano -
Buenas! no se si mi cuestión quedó clara viendo tu respuesta Martín.

El get_complete_user_data() me va bien aunque ya lo de las dependencias no lo he tenido en cuenta. A ver si me explico bien lo que quiero.

El administrador tiene que rellenar un formulario marcando un enable si ha cumplido unas condiciones el estudiante(se hace manualmente). Después se envia ese formulario. Y si ha cumplido las condicones(el enable esta marcado) entonces le mandará a dicho estudiante un email.
Entonces de ese formulario sólo tenemos el id del usuario al que se le quiere mandar el email. Y necesito toda la clase usuario porque la función email_to_user() lo requiere como parámetro.

Utilizando la función get_complete_user_data() que me indicó Antonio resolví el problema. Pero ya me quedo en duda si debo utilizarla o no.

Gracias.
En respuesta a Miguel Manzano

Re: mandar emails

de Eloy Lafuente (stronk7) -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodle HQ Imagen de Moodlers de gran ayuda Imagen de Testers
Hola Miguel,

el asunto es que, efectivamente, la función $user = get_complete_user_data() te sirve para obtener la información completa del usuario, pero a lo mejor obtiene más información de la necesaria para, simplemente, enviar correos (busca grupos, otras preferencias...).

De ahí que la alternativa $user = get_record('user', 'id', $id) sea más barata, ya que es un acceso directo a BD y devuelve la información necesaria para poder enviar un correo sin problemas.

Las dos te funcionarán, solo que la primera es más completa de lo necesario para enviar el correo (aunque personalmente, me gusta más). La segunda, por contra es más "barata".

Si vas a enviar los correos de uno en uno, no hay demasiada diferencia. Si vas a enviar los correos en tandas de muchos, definitivamente la segunda es mejor opción.

Ciao sonrisa
En respuesta a Miguel Manzano

Re: mandar emails

de David Monllaó -
Existe una variable $USER (en mayúsculas) que contiene toda la información de la tabla "mdl_user", puedes probar de usarla

Solo debes declararla como global en la función donde llames a email_to_user

global $USER;

email_to_user($USER, $from, $subject.....
:w