Artiphp - CMS open source et gratuit
Vous êtes ici » Accueil/Forum
Saisissez votre recherche
RechercherRechercher   Liste des MembresListe des Membres   S'enregistrerS'enregistrer    ProfilProfil 
Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 


Amélioration de la messagerie interne

 
Ce forum est verrouillé; vous ne pouvez pas poster, ni répondre, ni éditer les sujets.   Ce sujet est verrouillé; vous ne pouvez pas éditer les messages ou faire de réponses.    Artiloo.com Index du Forum -> Artiphp 3 Velocity
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
DenisG



Inscrit le: 07 Aoû 2005
Messages: 25
Localisation: Région parisienne

MessagePosté le: Mar 11 Juil 2006 19:06    Sujet du message: Amélioration de la messagerie interne Répondre en citant

Bonjour à tous

Avec la messagerie d'Artiphp 3, j'aimerais pouvoir envoyer un message à plusieurs destinataires en même temps, est-ce facilement faisable en bidouillant un peu le code? Quelqu'un s'y est déjà penché?
J'aimerais aussi pouvoir envoyer des pièces jointes, mêmes questions?...
Merci pour toute aide
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
jimro



Inscrit le: 07 Oct 2004
Messages: 6918

MessagePosté le: Mar 11 Juil 2006 19:48    Sujet du message: Répondre en citant

Bonjour,

Alors penche-toi sur htmlMimeMail de Richard Heyes. La version 1.4 est fournie avec ArtiNewsletter, mais il en existe des versions plus récentes.

jimro
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
DenisG



Inscrit le: 07 Aoû 2005
Messages: 25
Localisation: Région parisienne

MessagePosté le: Mar 11 Juil 2006 20:47    Sujet du message: Répondre en citant

Je me suis mal exprimé, je ne parlais pas d'email mais de la messagerie interne d'Artiphp, pour envoyer le même message privé à plusieurs destinataires, ou un message privé avec pièce jointe.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
jimro



Inscrit le: 07 Oct 2004
Messages: 6918

MessagePosté le: Mer 12 Juil 2006 10:35    Sujet du message: Répondre en citant

DenisG a écrit:
... je ne parlais pas d'email mais de la messagerie interne d'Artiphp, pour envoyer le même message privé à plusieurs destinataires, ou un message privé avec pièce jointe.

Désolé, je n'avais pas bien compris.

La possibilité d'envoyer un message interne à tous les membres (ou tous les auteurs) existe déjà pour les utilisateurs ayant le statut de 'artadmin'.
Etendre cette possibilité aux auteurs qualifiés (statut auteurqal), à la limite aux auteurs simples (statut auteur) est envisageable, mais la donner également à tous les membres ne me semble pas raisonnable (sécurité, spam...)
Ne pas oublier que ce type de messages (à tous les membres ou à tous les auteurs) est très particulier puisqu'il ne s'agit que d'un message commun visible par l'ensemble des destinataires.
Autrement dit, il n'appartient pas à un destinataire en particulier ; si un admin le supprime, il sera donc supprimé pour tout le monde, mais pour les destinataires qui ne l'auraient pas encore lu.

Pour donner cette possibilité aussi aux auteurs qualifiés par exemple, dans le fichier messagerie/afficher.php, vers la ligne 82, modifie ainsi :
Code:
      if ($_SESSION['SESSION_STATUT']=="artadmin" || $_SESSION['SESSION_STATUT']=="auteurqal") {
      $listechoix.="<option value=\"-1\">$LG_MESALLMEM</option>\n";
      $listechoix.="<option value=\"-2\">$LG_MESALLAUT</option>\n";
      }


Et vers la ligne 194 du même fichier :
Code:
// affichage des messages envoyés à tous les membres et/ou auteurs
//-----------------------------------------------------------------
if ($SESSION_STATUT=='artadmin' || $SESSION_STATUT=='auteurqal') {


En ce qui concerne l'implémentation d'une fonctionnalité "pièces jointes", cela demanderait de profonds changements dans le système, avec notamment une fonction d'upload, une attention particulière aux restrictions et permissions, et au final beaucoup de temps de développement, et... je ne le ferai donc pas


jimro

PS : Pour que ce soit plus explicite, j'ai modifié le titre du sujet.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
DenisG



Inscrit le: 07 Aoû 2005
Messages: 25
Localisation: Région parisienne

MessagePosté le: Mer 12 Juil 2006 13:26    Sujet du message: Répondre en citant

Merci Jimro

Citation:
Etendre cette possibilité aux auteurs qualifiés (statut auteurqal), à la limite aux auteurs simples...

J'avais déjà fait cette manip.
Mon idée ce serait plutôt de pouvoir choisir plusieurs destinataires dans une liste. Je t'explique: je suis prof et administrateur réseau dans un lycée, et avec artiphp j'ai fait un intranet pour le personnel du lycée (hébergé dans le lycée). Ce serait intéressant pour les profs d'envoyer un message à tous les profs d'une classe, par exemple, ou à tous les profs d'une même matière...
En décortiquant un peu ton code je vais voir si c'est possible. Je ne suis pas encore un grand codeur mais à force de farfouiller dans artiphp je commence à comprendre comment ça marche! Vive le reverse-engineering!

Citation:
En ce qui concerne l'implémentation d'une fonctionnalité "pièces jointes", cela demanderait de profonds changements dans le système, avec notamment une fonction d'upload, une attention particulière aux restrictions et permissions, et au final beaucoup de temps de développement, et... je ne le ferai donc pas

Bon pour ça on va attendre un peu...
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
jimro



Inscrit le: 07 Oct 2004
Messages: 6918

MessagePosté le: Mer 12 Juil 2006 22:31    Sujet du message: Répondre en citant

DenisG a écrit:
Vive le reverse-engineering!

Je dirais plutôt, vive le logiciel libre et open-source

Une gestion de groupes de membres serait effectivement super pour Artiphp (mais là gros boulot).

En attendant, voici au moins une solution pour des destinataires multiples

Dans le fichier messagerie/afficher.php, vers la ligne 80, modifie ainsi :
Code:
// liste des membres
//------------------
$SESSION_ID=$_SESSION['SESSION_ID'];
//+++++ MODIF jimro +++++ SELECT multiple - 12/07/2006
   $erreurchoix = empty($_GET['erreurchoix']) ? "" : "<span style=\"font-weight:bold; color:red;\">".htmlspecialchars(urldecode($_GET['erreurchoix']))."</span><br />";
   $listechoix="<select name=\"choixx[]\" id=\"choixx\" size=\"5\" multiple=\"multiple\">\n"; // size = hauteur de la liste de sélection multiple en nombre de lignes
   $requete="select id_utilisateur, loginUtilisateur from ".$extension."utilisateurs where id_utilisateur!='$SESSION_ID' and statutUtilisateur!='inscritatt' AND loginUtilisateur!='Anonyme' order by loginUtilisateur";
   $result=mysql_query($requete, $link);

Vois le commentaire dans le code pour modifier la hauteur de la liste de sélection multiple
Le truc c'est l'utilisation d'un tableau choixx[] pour récupérer les différentes valeurs sélectionnées (sous Windows, maintien de la touche Ctrl et clic droit de la souris)
Une gestion d'erreur de choix (minimaliste) est appliquée : il n'est pas possible de choisir comme destinataires "Tous les membres" ou "Tous les auteurs" et un membre en particulier, ni de dépasser le nombre maxi défini. Dans ces cas, la page afficher.php se réaffiche avec un message d'erreur (à améliorer).

et vers la ligne 150 :
Code:
//+++++ MODIF jimro +++++ select multiple - 12/07/2006
$milieu  ="$erreurchoix" . "$newmess";

$milieu .="<h1>$LG_MESRECU</h1>";



Dans le fichier messagerie/envoi.php, remplace le code existant (à partir de "Formulaire de saisie") par celui-ci :
Code:
//+++++ MODIF jimro +++++ script modifié pour destinataires multiples - 12/07/2006
// --------------------
// Formulaire de saisie
// --------------------

/* on efface les entrées automatiques */
if ($_POST['objet']==$LG_MESOBJ) {$_POST['objet']="";}
if ($_POST['texte']==$LG_MESMS) {$_POST['texte']="";}

$nbmax_dest = "10"; // nombre maxi de destinataires

if (!empty($_POST['choixx']) && sizeof($_POST['choixx'])>1) {
   if (in_array("-1", $_POST['choixx']) || in_array("-2", $_POST['choixx']) || sizeof($_POST['choixx'])>$nbmax_dest) {
      $erreurchoix = urlencode("ATTENTION ! Trop de destinataires ou destinataires incompatibles");
      header("Location: ../messagerie/afficher.php?erreurchoix=$erreurchoix");
      exit();
   }
}

/* si un champ n'est pas renseigné, message d'erreur */
if (! $_POST['choix'] || ! $_POST['texte'] || ! $_POST['objet']) {
   $meserreur="<span class=\"mess_error\">$LG_FORMERROR </span>";
   $objet = $_POST['objet'];
   $texte = $_POST['texte'];
   $choixx = $_POST['choix'];
   $SESSION_ID=$_SESSION['SESSION_ID'];
   $daterecu = $_POST['daterecu'];

//ajout des données
} else {
   $objet = addslashes($_POST['objet']);
   $texte = addslashes($_POST['texte']);
   $texte = htmlspecialchars($texte);
   $objet = htmlspecialchars($objet);
   $SESSION_ID=$_SESSION['SESSION_ID'];
   $texte = nl2br($texte);

   $choix = $_POST['choix'];

   foreach($choix as $id_dest) {
      $id_dest = htmlspecialchars($id_dest);

      $requete = "INSERT INTO ".$extension."message SET destinataire='$id_dest', message='$texte', objet='$objet', de='$SESSION_ID', daterecu='$daterecu'";
      $result = mysql_query($requete, $link);

      if ($id_dest!='-1' || $id_dest!='-2') {
         $requete2="select mailUtilisateur from ".$extension."utilisateurs where id_utilisateur='$id_dest'";
         $result2=mysql_query($requete2, $link);
         $maildest=mysql_fetch_object($result2);

         // envoi d'email au destinataire
         // -----------------------------
         $SESSION_USER=$_SESSION['SESSION_USER'];
         $SESSION_MAIL=$_SESSION['SESSION_MAIL'];

         if ($fonctionmail=='1') {
            $emailrecep="$maildest->mailUtilisateur";
            $sujet="".$LG_MESMLSUB." ".$SESSION_USER."";
            $message="".$LG_MESMLTXT." ".$votre_url.".\n\n";
            $message .="$LG_MESMLTXT2\n";
            $message .="".$votre_url."\n";
            $message2=stripslashes($message);
            $headers="From: ". $SESSION_MAIL ."\n";
            mail($emailrecep,$sujet,$message2,$headers);
         }
         if ($fonctionmail=='2'){
            $emailrecep="$maildest->mailUtilisateur";
            $sujet="".$LG_MESMLSUB." ".$SESSION_USER."";
            $message="".$LG_MESMLTXT." ".$votre_url.".\n\n";
            $message .="$LG_MESMLTXT2\n";
            $message .="".$votre_url."\n";
            $message2=stripslashes($message);
            $headers="From: ". $SESSION_MAIL ."\n";
            $emailFrom="Webmaster";
            email($emailFrom,$emailrecep,$sujet,$message2);
         }

      }

   }
   header("Location: ../messagerie/afficher.php");
   exit();
}

$daterecu = date ("y-m-d H:i:s");

if ($_POST['choix']) {$choixx=$_POST['choix']; } else { $choixx=$_POST['choixx'];}

if ($choixx[0]=='-1') {
   $milieu="<h1>".$LG_MESENVOI." ".$LG_MESALLMEM."</h1>\n";
} elseif ($choixx[0]=='-2') {
   $milieu="<h1>".$LG_MESENVOI." ".$LG_MESALLAUT."</h1>\n";
} else {
   $ajoutreq = "";
   foreach($choixx as $id_dest) {
      $ajoutreq .= "id_utilisateur='".$id_dest."' OR ";
   }
   $ajoutreq = substr($ajoutreq, 0, -4);
   $requete="SELECT loginUtilisateur FROM ".$extension."utilisateurs WHERE $ajoutreq";
   $result=mysql_query($requete, $link);

   $ajoutdestinataires = "";
   while($destinataires=mysql_fetch_object($result)) {
      $ajoutdestinataires .= $destinataires->loginUtilisateur . ", ";
   }
   $ajoutdestinataires = substr($ajoutdestinataires, 0, -2);

   $milieu="<h1>".$LG_MESENVOI." ".$ajoutdestinataires."</h1>\n";
}

$milieu .= "$meserreur<br /><br />";

$milieu .= "<form method=\"post\" action=\"envoi.php\"><div class=\"mess_form\">\n";

if (!$objet) {$preval="$LG_MESOBJ";} else {$preval="$objet";}
$milieu .="* <label for=\"objet\">$LG_MESOBJ</label><br /><input type=\"text\" id=\"objet\" name=\"objet\" size=\"30\" value=\"$preval\" onfocus=\"javascript:if(this.value=='$LG_MESOBJ') this.value='';\" /> <br /><br />\n";

if (!$texte) {$preval2="$LG_MESMS";} else {$preval2="$texte";}
$milieu .="* <label for=\"texte\">$LG_MESMS</label><br />\n";
$milieu .="<textarea name=\"texte\" id=\"texte\" cols=\"50\" rows=\"10\" onfocus=\"javascript:if(this.value=='$LG_MESMS') this.value='';\">$preval2</textarea><br />\n";

foreach($choixx as $id_dest) {
   $milieu .="<input type=\"hidden\" name=\"choix[]\" value=\"$id_dest\" />\n"; // le tableau PHP doit être regénéré sinon ça ne fonctionne pas ;-)
}
$milieu .="<input type=\"hidden\" name=\"daterecu\" value=\"$daterecu\" />\n";
$milieu .="<br /><input type=\"submit\" name=\"Submit\" value=\"$LG_FORMOK2\" />";

$milieu .="</div></form>\n";
$milieu .="<strong><a href=\"afficher.php\">$LG_MESRETOUR</a></strong>\n";

// Template
// --------
$SESSION_SKIN=$_SESSION['SESSION_SKIN'];
include("../templates/temp$SESSION_SKIN/temp.html");
echo $arti;
mysql_close();
?>

Définis le nombre maxi de destinataires avec $nbmax_dest (fixé ici arbitrairement à 10)

(testé et fonctionnel)

jimro
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
DenisG



Inscrit le: 07 Aoû 2005
Messages: 25
Localisation: Région parisienne

MessagePosté le: Jeu 13 Juil 2006 7:24    Sujet du message: Répondre en citant


Waouuu!
Merci beaucoup!
Tu avais ça sous le coude pour une prochaine version d'artiphp?
Je teste et je te donne mon avis
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
jimro



Inscrit le: 07 Oct 2004
Messages: 6918

MessagePosté le: Jeu 13 Juil 2006 9:16    Sujet du message: Répondre en citant

DenisG a écrit:
Tu avais ça sous le coude pour une prochaine version d'artiphp?

Non. Effectué hier pour tous les artinautes qui auraient besoin d'une telle fonctionnalité
Ca m'a permis d'apprendre encore qqs bricoles au passage, notamment au sujet de la portion suivante qui n'était pas évidente au premier abord :
Code:
foreach($choixx as $id_dest) {
   $milieu .="<input type=\"hidden\" name=\"choix[]\" value=\"$id_dest\" />\n"; // le tableau à poster doit être regénéré, sinon ça ne fonctionne pas ;-)
}



jimro
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
DenisG



Inscrit le: 07 Aoû 2005
Messages: 25
Localisation: Région parisienne

MessagePosté le: Jeu 13 Juil 2006 21:04    Sujet du message: Répondre en citant

Ca marche nickel, merci Jimro t'es le meilleur!
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Ce forum est verrouillé; vous ne pouvez pas poster, ni répondre, ni éditer les sujets.   Ce sujet est verrouillé; vous ne pouvez pas éditer les messages ou faire de réponses.    Artiloo.com Index du Forum -> Artiphp 3 Velocity Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com