Forum CMS Made Simple FR

Version complète : [Résolu] UDT (balise utilisateurs) avec include().
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.13
#~ Url du site : http://www.dell-arte.fr/veloclub/
#~ Hébergeur / Soft : ovh
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.11.13
#~ Installed Modules:
#~ CMSMailer: 5.2.2
#~ CMSPrinting: 1.0.5
#~ FileManager: 1.4.5
#~ MenuManager: 1.8.6
#~ MicroTiny: 1.2.9
#~ ModuleManager: 1.5.8
#~ News: 2.14.1
#~ Search: 1.7.12
#~ ThemeManager: 1.1.8
#~ TemplateExternalizer: 2.1.6
#~ TinyMCE: 2.9.12
#~ Album: 1.10.3
#~ Gallery: 2.0.1
#~ CGExtensions: 1.45
#~ CGSimpleSmarty: 1.7.4
#~ CGCalendar: 1.14.6
#~ FormBuilder: 0.8.1.1
#~ FrontEndUsers: 1.26
#~ CustomContent: 1.10
#~ CGSmartImage: 1.17.2
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template:
#~ max_upload_size: 64000000
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale: fr_FR.utf-8
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.4.38
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 2048
#~ E_DEPRECATED: 8192
#~ memory_limit: 512M
#~ max_execution_time: 300
#~ output_buffering: 4096
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 64M
#~ upload_max_filesize: 64M
#~ session_save_path: /tmp (0700)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ Server Information:
#~ Server Api: fpm-fcgi
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.1.73
#~ Server Db Grants: Impossible de trouver un privilège "GRANT ALL". Cela peut signifier que vous pourriez avoir des problèmes pour installer ou retirer des modules, ou encore l 'ajout et la suppression d'éléments, y compris les pages.
#~ Server Time Diff: Aucune différence de date du système de fichiers trouvées
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour,

Pour le site d'un club de cyclistes, j'essaye de faire en sorte qu'à chaque nouvel article posté (que ce soit via l'admin ou via FEU), un mail de notification soit envoyé à chaque adhérent.

J'utilise pour ça deux UDT (l'une pour l'ajout, l'autre pour la modification d'un article) et le gestionnaire d'évènements - NewsArticleAdded et NewsArticleEdited - et ça marche très bien (merci jissey).

Ca marche si on écrit en dur les adresses mail dans les udt. Peu pratique. J'essaye alors de passer par un fichier externe au moyen d'un include, et là, ça ne marche plus.

J'ai pensé à une erreur de chemin, et j'ai donc créé une udt test avec un echo sur une variable pêchée au moyen d'un include dans un fichier extérieur, et ça marche. Cette udt est incluse dans une page du site, et le chemin se fait au départ de la racine du site.

Lorsque j'utilise le même chemin pour l'include des udt qui envoient les mails, ça ne marche pas.
Je me dis que si la page du site qui appelle l'udt test sert de référence pour trouver le chemin vers le fichier à inclure, c'est le gestionnaire d'évènements qui sert de référence pour établir ce chemin dans l'udt de notification.
Et là je ne sais plus quoi faire. Au moyen d'un __DIR__ inséré dans l'udt test et dans l'udt notification, le même chemin m'est renvoyé, mais ça ne m'aide pas :

/home/dellartedu/www/veloclub/lib/classes

le répertoire veloclub renfermant cms Made Simple.

Comment trouver le bon chemin ?

Ci-dessous, le script de l'udt appelé dans une page du site, qui renvoie les résultats attendus :

Code :
[== PHP ==]
include('uploads/soumission/date_heure.php');
include('uploads/soumission/liste_mail.php');

// Affiche le chemin /home/dellartedu/www/veloclub/lib/classes
echo __DIR__ . '<br />';

// Donne la date et l'heure trouvée dans date_heure.php
echo'Nous sommes le ' . $date_w . ' et il est ' . $heure_w . ' !<br />';

// Donne la liste de toutes les adresses mail présentes dans liste_mail.php
echo $to;

Ci-dessous, le script de l'udt de notification appelé par le gestionnaire d'évènements, qui marche (adresses mail en dur) :

Code :
[== PHP ==]
// Plusieurs destinataires
    $to  = '[email protected]' . ', ';
    $to .= '[email protected]' . ', ';
    $to .= '[email protected]' . ', ';
    $to .= '[email protected]' . ', ';
    $to .= '[email protected]';
$subject = 'Essai envoi';
$message = "Envoi mail lors de la publication d'un nouveau message backend. R&eacute;pertoire : " . __DIR__;

// fonction
mail($to, $subject, $message);

Ci-dessous, le même script avec include pour les adresses mail, qui ne marche pas :

Code :
[== PHP ==]
include('uploads/soumission/liste_mail.php');

$subject = 'Essai envoi';
$message = "Envoi mail lors de la publication d'un nouveau message backend. R&eacute;pertoire : " . __DIR__;

// fonction
mail($to, $subject, $message);');

Pour ce script, j'ai aussi essayé à tout hasard le chemin - ../../uploads/soumission/liste_mail.php - en référence à ce que me renvoie __DIR__, sans succès.

Si quelqu'un a une idée...

Un grand merci !
Bonjour,
essaie ceci :
Code :
[== Indéfini ==]
include $_SERVER['DOCUMENT_ROOT'].'/uploads/soumission/liste_mail.php'
Mas je ne comprends pas bien ta logique :
Tes adhérents sont des utilisateurs FEU?
Pourquoi ne pas aller les chercher dans la base plutôt que de maintenir un fichier "a la main"?
Bonsoir jissey et merci pour ta réponse.

La majorité des destinataires des notifications sont en effet des adhérents du club inscrits dans la bdd, mais pas que... et j'ai effectivement pensé à l'accès à la base de données pour aller chercher le gros des adresses dans la table des utilisateurs du frontend. J'ai essayé dans l'udt un script de connexion du type :
Code :
[== PHP ==]
$db = new PDO('mysql:host=xxx;dbname=yyy', $user, $mdp);
mais ça m'a renvoyé une erreur SQL sur le mot de passe alors que le même script en dehors du cms marche bien vers mon serveur. Je n'ai pas eu le temps d'investiguer plus loin. Je pense qu'il vaut mieux passer par l'API de cmsms
Code :
[== PHP ==]
$db = cmsms()->GetDb();
mais il faut que je teste tout ça, y compris ta proposition $_SERVER. Je suis actuellement en déplacement et la connexion à l'hôtel est quasi inexistante, juste les mails et encore... et je ne suis pas sûr de pouvoir travailler sur mon problème dans de bonnes conditions avant quatre ou cinq jours. Désolé de ce contretemps. Je reprendrai cette discussion dès que j'aurai de meilleures conditions de travail.

Merci encore.
Salut,
quand tu seras revenu, tu essaieras avec un code comme ceci :
Code :
[== PHP ==]
$feu = cmsms()->GetModuleInstance('FrontEndUsers');
$users = $FEU->GetUsers(); //pas sûr que ça soit cette méthode, à verifier
foreach($users as $user) {
.....
.......
}
il faut passer par le module et non pas attaquer la bdd dans ce cas.
Bonjour,

J'ai enfin pu travailler un peu, et l'include de $_SERVER['DOCUMENT_ROOT'] .'...' fonctionne nickel.

Par contre, pas moyen de tirer quelque chose de la proposition d'accéder aux tables de FEU. Je ne sais pas trop où vérifier la bonne méthode, GetUsers() ne fonctionne pas et si j'essaye autre chose que GetUserName() ou GetUserId(), la page sort sans le <head> et ça montre un peu n'importe quoi. J'ai essayé ceci :
Code :
[== PHP ==]
$gCms = cmsms();
$feu = $gCms->GetModuleInstance('FrontEndUsers');
$users = $feu->GetUserName(); // et aussi GetUserId()
foreach($users as $user) {
   echo '$user';
}
sans résultat.

J'ai été voir du côté des fonctions smarty citées dans l'aide du module, mais je n'arrive pas à les faire marcher. Tout au plus j'obtiens "1" quand je tente d'afficher quelque chose. Je ne suis pas sûr de comprendre les exemples...

Voilà où j'en suis pour le moment. Au moins, l'écriture dans un fichier externe facilitera un peu la chose, même si ce n'est pas très clean comme façon de procéder.

Merci pour le coup de main.
bonjour,
la liste des méthodes des modules se trouve dans...le code source...et oui, il faut aller à la pêche, c'est pour ça que je ne t'ai pas donné la méthode exacte.
essaie avec
Code :
[== Indéfini ==]
$users = $feu->GetUsersInGroup();
Bingo, ça brûle. J'avais déjà été fureter un peu dans le code source du module, mais je m'y suis perdu très vite et je me suis découragé ne sachant pas si c'était la bonne piste (GetUserInfo, GetUserProperties,...) je suis loins d'être un as du php.
La partie suivante me renvoie un tableau d'où je pourrai tirer ce dont j'ai besoin :
Code :
[== PHP ==]
$gCms = cmsms();

$feu = $gCms->GetModuleInstance('FrontEndUsers');

$users = $feu->GetUsersInGroup();
foreach($users as $user) {
    print_r ($user);
}

La seule référence que j'ai trouvée à cette méthode (après ta solution) se trouve dans function.admin_usertab.php.

Je me demande comment je pourrai m'en sortir la prochaine fois que j'aurai un problème similaire...

Encore merci, jissey.
la prochaine fois, fait encore appel au forum et petit à petit, tu y arriveras tout seul. Cool