2016-01-26 1 views
0

Je voudrais envoyer des emails uniquement aux utilisateurs qui ont suivi un cours spécifique et ajouter un fichier pdf (un certificat pour compléter le cours) en pièce jointe à l'email, et le faire à un moment précis en utilisant moodle cron.Email en utilisant cron et en incluant la pièce jointe à l'email de moodle

J'ai regardé quelques plugins pour savoir comment c'est fait, mais je ne suis toujours pas sûr de savoir exactement comment je devrais le faire.

J'ai besoin: 1.
savoir comment j'ajouter une pièce jointe à un e-mail (et qui l'API à utiliser),
2. comment j'utiliser cron pour envoyer les e-mails au groupe désiré à un certain time,
3. comment récupérer les utilisateurs qui ont terminé le cours afin que je puisse leur envoyer des courriels (avec pièce jointe).

Merci d'avance.

(j'utilise la version 3.0 moodle)

Répondre

1

Voici un aperçu.

  1. Créez d'abord un plugin local. Par exemple /local/yourplugin

https://docs.moodle.org/dev/Local_plugins

  1. ensuite mis en place un fournisseur de messages

https://docs.moodle.org/dev/Message_API

défini ('MOODLE_INTERNAL') || mourir();

dans local/yourplugin/db/messages.php

$messageproviders = array (
    'coursecompleted' => array (
    ), 
  1. Ensuite, ajoutez un observateur d'événements - vous voulez répondre à l'événement course_completed

https://docs.moodle.org/dev/Event_2

dans /local/yourpluginname/db/events.php

avoir quelque chose de lik e

$observers = array(

    array(
     'eventname' => '\core\event\course_completed', 
     'callback' => 'local_yourplugin_observer::course_completed', 
    ), 

); 
  1. Maintenant, ajoutez le code de message

Ajouter quelque chose comme ça à '/local/message/classes/observer.php'

defined('MOODLE_INTERNAL') || die(); 

class local_yourplugin_observer { 

    /** 
    * Triggered when 'course_completed' event is triggered. 
    * 
    * @param \core\event\course_completed $event 
    * @return bool 
    */ 
    public static function course_completed(\core\event\course_completed $event) { 

     // Your code here. 

     $message = new \core\message\message(); 
     $message->component = 'local_yourplugin'; // Name of your local plugin. 
     $message->name = 'coursecompleted'; // Name of message provider. 
     $message->userfrom = $USER; 
     $message->userto = $user; 
     $message->subject = 'message subject 1'; 
     $message->fullmessage = 'message body'; 
     $message->fullmessageformat = FORMAT_MARKDOWN; 
     $message->fullmessagehtml = '<p>message body</p>'; 
     $message->smallmessage = 'small message'; 
     $message->notification = '0'; 
     $message->contexturl = 'http://GalaxyFarFarAway.com'; 
     $message->contexturlname = 'Context name'; 
     $message->replyto = "[email protected]"; 
     $content = array('*' => array('header' => ' test ', 'footer' => ' test ')); // Extra content for specific processor 
     $message->set_additional_content('email', $content); 

     // Create a file instance. 
     $usercontext = context_user::instance($user->id); 
     $file = new stdClass; 
     $file->contextid = $usercontext->id; 
     $file->component = 'user'; 
     $file->filearea = 'private'; 
     $file->itemid = 0; 
     $file->filepath = '/'; 
     $file->filename = '1.txt'; 
     $file->source = 'test'; 

     $fs = get_file_storage(); 
     $file = $fs->create_file_from_string($file, 'file1 content'); 
     $message->attachment = $file; 

     $messageid = message_send($message); 
    } 
} 
+0

Merci pour la réponse, mais je venais de réaliser que c'est la messagerie à l'utilisateur plutôt que d'envoyer un email. Comment envoyer un e-mail à l'utilisateur à son adresse e-mail avec une pièce jointe de moodle? – Javascriptonian

+0

Oh, ce n'est pas seulement de la messagerie, il envoie aussi un e-mail à l'utilisateur, c'est la bonne façon d'envoyer des emails/messages dans Moodle. Cela donne à l'utilisateur un peu plus de contrôle sur la façon dont il reçoit le message - il y a des options dans les paramètres de mon profil -> messagerie –

+0

Vous êtes génial. Merci beaucoup! – Javascriptonian