Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

EventsManager + NMS + (CMSMS)events
#1

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.3
#~ Url du site :
#~ Hébergeur / Soft : lighttpd debian squeeze
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.11.3
#~ Installed Modules:
#~ CMSMailer: 5.2.1
#~ CMSPrinting: 1.0.3
#~ FileManager: 1.4.2
#~ MenuManager: 1.8.4
#~ MicroTiny: 1.2.4
#~ ModuleManager: 1.5.5
#~ News: 2.12.10
#~ Search: 1.7.7
#~ ThemeManager: 1.1.7
#~ Gallery: 1.6
#~ CGExtensions: 1.31.2
#~ FrontEndUsers: 1.21
#~ Captcha: 0.4.5
#~ SelfRegistration: 1.7.2
#~ CustomContent: 1.8.3
#~ FormBuilder: 0.7.3
#~ CMSForms: 1.0.1
#~ CGCalendar: 1.10.0.1
#~ Uploads: 1.14.3
#~ AireLibs: 1.3.2
#~ EventsManager: 1.2.7
#~ CGJobMgr: 1.2.11
#~ NMS: 2.7
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template:
#~ output_compression:
#~ max_upload_size: 10000000
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.3.3-7+squeeze3
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ E_DEPRECATED: 0
#~ memory_limit: 128M
#~ max_execution_time: 60
#~ output_buffering: 4096
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 10M
#~ upload_max_filesize: 10M
#~ session_save_path: /var/lib/php5 (1733)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ Server Information:
#~ Server Api: cgi-fcgi
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.1.49
#~ Server Db Grants: Trouvé un privilège "GRANT ALL" qui semble être adapté
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~

Bonjour,

Dans l'onglet "Examples and tips" de la doc du module EventsManager, il est précisé qu'il est possible d'envoyer un email à toutes les personne inscrites a un evenement.

Mon besoin est légèrement différent: je voudrais envoyer un email à une liste de diffusion issue d'un groupe FEU lorsqu'un nouvel événement est créé.

Voila ou j'en suis:
- l'extension gestion des évenements inclus dans CMSMS permet de déclencher une action sur un événement
- l'événement "EventsManagerEventAdded" correspond à la création d'un nouvel événement
- J'ai créé une liste de diffusion dans NMS récupérée de FEU
- J'ai créé un message dans NMS
- J'ai essayé d'ajouter une ligne NMS dans la gestion de l'événement "EventsManagerEventAdded" sans résultat
- J'ai cru comprendre qu'il fallait créer un UDT, mais je ne sais pas quoi mettre dedans pour lacer une tache NMS

Bref, je bloque sur l’exécution d'un tache NMS sur l'événement "EventsManagerEventAdded" du module EventsManager.

Quelqu'un peut-il m'aider la dessus ?
Répondre
#2

Tu peux t'inspirer de cette udt qui sert à envoyer des mails lors de la déconnexion d'un utilisateur :
Code :
[== Indéfini ==]
global $smarty;
$db = cmsms()->GetDb();
$dateformat = '%x %X';          
$limit = 5;// nombre de lignes à afficher
$username = "admin";  // nom d'utilisateur à éviter
$destinataire = "dest@domaine.fr";
$expediteur = "exp@domaine.fr";
$result = $db->Execute("SELECT * FROM ".cms_db_prefix()."adminlog ORDER BY timestamp DESC LIMIT $limit");
if ($result && $result->fields["username"] != $username){  
    $output = "<html><head></head><body>";
    $output .= "<table border>";
    $output .= "<thead>";
    $output .= "<tr>";
    $output .= "<th>Utilisateur</th>";
    $output .= "<th>id de l'item </th>";
    $output .= "<th>nom de l'item</th>";
    $output .= "<th>action</th>";
    $output .= "<th>date</th>";
    $output .= "</tr>";
    $output .= "</thead>";
    $output .= "<tbody>";
    $currow = "row1";
    while ($row = $result->FetchRow()) {
        $output .= "<tr class=\"$currow\">";
        $output .= "<td>".$row["username"]."</td>";
        $output .= "<td>".($row["item_id"]!=-1?$row["item_id"]:" ")."</td>";
        $output .= "<td>".$row["item_name"]."</td>";
        $output .= "<td>".$row["action"]."</td>";
        $output .= "<td>".strftime($dateformat,$row['timestamp'])."</td>";
        $output .= "</tr>";
        ($currow == "row1"?$currow="row2":$currow="row1");
    }      
    $output .= '</tbody>';
    $output .= '</table>';
    $output .= '</body></html>';

    $cmsmailer = cms_utils::get_module('CMSMailer');
    $cmsmailer->AddAddress($destinataire);
    $cmsmailer->SetFrom($expediteur);
    $cmsmailer->SetBody($output);
    $cmsmailer->IsHTML(true);
    $cmsmailer->SetSubject('Compte-rendu après connexion d\'un utilisateur sur le site');
    $cmsmailer->Send();
}
Cette udt s'appelle "connexion" et est raccordée à l'événement "LogoutPost"
Répondre
#3

Merci pour cet exemple:


L'algorithme que j'imagine serait le suivant:

===========

Je créé un email suivant l'exemple udt connexion.

Récupérer la liste des utilisateurs d'un groupe:
{$feu_smarty->get_users_by_groupname($groupname,$assign)}

Pour chaque utilisateur utilisateur

Récupérer l'adresse email:
{$feu_smarty->get_user_properties($uid,$assign)}

Envoie l'email a l'adresse de l'utilisateur avec cmsmailer


Reboucle

===========================

Il ne me reste plus qu'a apprendre langage php...
Répondre
#4

bonne lecture pidou46 Smile

il y a aussi le site du zéro qui est très bien pour démarrer le php
Répondre
#5

Merci pour la literature

En analysant le "udt_to_nms" j'ai vu qu'on faisait appel a la fonction AddUser de NMS

Code :
[== Indéfini ==]
$nms->AddUser($feu->GetUserPropertyFull('email', $params['id']), array(1), $feu_user[1]['username'],0

Si je pouvait appeler la fonction NMS qui exécute une tache j'aurais résolu mon problème de manière plus simple encore qu'avec mon algorithme.

Ou est-ce que je peut trouver les informations sur le fonctions de NMS ? code source sur la forge ?
Répondre
#6

Je n'ai pas trouvé une fonction pour exécuter une tache dans le code de NMS mais j'ai trouvé une fonction qui envoie un message (NMS) a une liste d'adresses email.

Code :
[== PHP ==]
/*---------------------------------------------------------
   SendMessageToExternalUsers
   -
   Send a specified message to a supplied list of
   email addresses.
   ---------------------------------------------------------*/
  function SendMessageToExternalUsers($id,$messageid,$addresses)
  {
    // destrow
    //   email
    //   uniqueid
    //   username

    $db = $this->GetDb();
    $query = 'SELECT * FROM '.NMS_MESSAGES_TABLE.' WHERE messageid = ?';
    $message = $db->GetRow($query,array($messageid));
    if( !$message ) return false;
    if( !is_array($addresses) ) return false;

    foreach( $addresses as $email ) {
      $tmp = array();
      $tmp['email'] = $email;
      $this->_ProcessOneEmail($id,$message,$tmp);
    }
  }

Maintenant il me faut trouver un moyen de récupérer la liste des adresses email d'un groupe FEU
Répondre
#7

Suivant le paramétrage :
$query = "SELECT `username` FROM `cms_module_feusers_users`";
Répondre
#8

Bonsoir,

En effet, je n'ai pas prévu de fonction pour écrire à une liste FEU dans EventsManager Wink

Regarde du côté du fonctionnement de CGJobMgr qui est le nouveau module sur lequel se repose NMS à présent.

Bon courage Smile
Répondre
#9

Bonsoir a tous,

Bon, j'essaie de m'y remettre maintenant que mon site est en ligne.

Premierement: j'ai rempli une demande de feature sur la forge... oui je sais c'est un peut facile, j'ai honte Rolleyes

Deuxiemement: je sais que je peux créer un UDT et récupérer l'objet événement qui vient d'être créé (j'ai vu ça dans l'aide de l'événement "EventsManagerEventAdded".)

De cette façon j'espere récuperer URL de la page d'inscription pour la mettre dans l'email a envoyer.

Ensuite il me faudrait créer un job NMS y associer une liste de diffusion (que j'ai déjà crée grace a l'export CSV entre les modules) et l'executer.

Et la je cale...
Répondre
#10

Bonsoir,

Pas de soucis pour la demande de fonction, c'est plus simple de faire comme ça, cela me permet de toutes les avoir au même endroit quand je bosserai dessus Wink

Pour ton problème, as-tu absolument besoin d'utiliser NMS ? Est-ce qu'un envoi via un UDT ne ferait pas l'affaire ?
Répondre
#11

Un envoi via UDT ferait tout à fait l'affaire pour moi, si c'est plus simple à mettre en œuvre.

Je pense avoir à peut prêt toutes les briques pour construire cet UDT, sauf la maitrise de php/smarty...

Merci pour votre aide
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)