Aller au contenu

Messagerie interne (besoin d'aide)


Sujets conseillés

Posté

Bonjour,

Aprés m"etre creuser la tete et fais de nombreuses recherche sur google

je me decide a poster car la je bloque :wacko:

mon script de messagerie interne fonctionne et cela sans probleme,

toutefois je me suis penché sur l'idee de mettre des pieces jointes avec

et la je bloque... je n'ai trouvé sur google aucun lien, sur les forums peu de chose

non plus voir meme rien du tout.

Ma table message contient msgID, fromUserID, titre, message, date, msg,ParID, piecejointe

si quelqu'un a vu passer ce genre de script ou a une idee je suis preneur

merci

Posté

bonjour,

heuu une idée rapide comme ça au passage :

pourquoi ne pas faire un dossier contenant les pièces jointes (que tu renommes avec un identifiant unique, et tu conserve le vrai nom dans ta BDD). Tu stockes aussi le nom généré dans ta base, et comme ça pour la retrouver, tu n'as plus qu'à aller voir dans ton repertoire de piece jointe, et chercher le fichier dont le nom correpond à celui de la base...

(j'ai pas cherché de script, donc y'a peut etre quelque chose de déjà fait qui fonctionne ;-) )

Question à part : à quoi sert ton champ parID dans ta table ?

Posté (modifié)

Bon deja quand on parle d'un script c mieux si on le pose :

edit

:blush: oups pardon ouais y manque des bouts a mon message

deja erreur de ma part c'est msgparid et pas msg, parid

Alors les pieces jointes doivent etre stocké dans un dossier a par et je pensais utiliser

l'Idmsg afin de lier la pj au message et de retrouver le msg dans une autre table avec en reference l'id du msg

function upload ($Userid, $userfile_size, $userfile_type, $msgID, $type, $defaut )



<?php

/*
***********************************************************</
*

Messages
Fonctions diverses
*
* Fonctions :
*
*
* - formulaireMessage($ref_dossier) :
*
*
/***********************************************************/


// $modeformulaire : creer - mode creation
// - voir : lecture - permet de repondre
// - relire : lecture sans bouton pour répondre ( cas d'un mssage envoyé)
// - repondre au message $ficheID

// $special = 'dossier' 'commande'
// La variable $special permet de préciser si le message est rattaché a un dossier par exemple
// $ref : précisera le numéro de dossier, ou le parametre a transmettre avec $special

function EditerMessage($modeformulaire, $ficheID = '0',$special='',$ref=0)
{
global $sessid, $sesscode;
global $uid;

// 3 modes d'affichages
// Creer, Modifer, voir
// Affichage : on affiche le formulaire, mais tous les champs sont marqués en READONLY
if ($modeformulaire == 'voir') $readonly = 'readonly';
else $readonly = '';

switch ($modeformulaire) {
case 'creer':
$contactID = 'creation';
$titre = stripslashes($_POST['titre']);
$message = stripslashes($_POST['message']);
$destinataire = $_POST['destinataire'];
break;

case 'voir' :
case 'relire':
// tester si c'est le destinataire


case 'repondre':

case 'modifier' :
// $requeteFiche="Select * from $TABLE_rubrique WHERE rubriqueID=\"$rubriqueID\"";
// $fiche=DB_RequeteBase($requeteFiche);
$reqMsg=MCI_safe_query("SELECT * FROM MCI_msgtable WHERE msgID=\"$ficheID\"");
$fichemessage=mysql_fetch_array($reqMsg);

// on cherche a savoir si l'utilisateur qui lit est bien le destinataire
$reqUser=MCI_safe_query("SELECT date_lecture FROM MCI_msgsend WHERE msgID=\"$ficheID\" AND toUserID=\"$uid\"");
if ( list($date_lecture)=mysql_fetch_array($reqUser) )
{
if ($date_lecture=='0000-00-00 00:00:00') {
// 1ere lecture - Mettre a jour la fiche
$rightnow=date("Y-m-d H:i:s");
$lecture=MCI_safe_query("UPDATE MCI_msgsend SET date_lecture=\"$rightnow\" WHERE msgID=\"$ficheID\" AND toUserID=\"$uid\"");
}

}

// Cas d'un message systeme
// on verif qu'il s'agit d'un message systeme
// si oui, on insere une entrée dans msgsend pour indiquer l'heure de lecture par l'utilisateur en cours
$reqMsgSys=MCI_safe_query("SELECT date_lecture FROM MCI_msgSystem AS sys LEFT JOIN MCI_msgsend AS lu ON (lu.msgID=sys.msgID) WHERE sys.msgID=\"$ficheID\" ");
if ( list($msgID)=mysql_fetch_array($reqMsgSys) )
{
// si date_lecture est vide, alors le message n'a pas encore été lu par l'utilisateur
if ($date_lecture=='') {
$rightnow=date("Y-m-d H:i:s");
$lecture=MCI_safe_query("INSERT INTO MCI_msgsend SET date_lecture=\"$rightnow\" , msgID=\"$ficheID\" , toUserID=\"$uid\"");
}
}


$msgID = $ficheID;
$fromUserID= $fichemessage['fromUserID'];
$titre = stripslashes($fichemessage['titre']);
$message = stripslashes($fichemessage['message']);
$date_envoi= $fichemessage['date'];
$piece_jointe_id = stripslashes($fichemessage['piecejoinjte']);
$msgParID = $fichemessage['msgParID'];



$readonly='readonly';
break;

default:
}

if ($modeformulaire=='repondre') {
$message_origine=$message;
$message="";

$titre="Re : ".$titre;
$destinataire=$fromUserId;
$readonly='';
}

$disp = '';
$disp .= "<form name='formContact' action='$PHPSELF' method=POST>";

// $disp .= '<a href="#p1" class="toggle">Infos</a> | <a href="#p2" class="toggle">Commentaires</a> | <a href="#p3" class="toggle">Appels</a> | <a href="#p4" class="toggle">Groupes</a>';

$disp .= '<div id="skform">';

$disp .= session_form();

// Indiquer le destinataire
if ($modeformulaire=='creer') {

$disp.= '<div class="row">';
$disp .= "<label class='col1'></label>";
$disp.= '<span class="col2"><b>Nouveau message</b></span>';
$disp.= '</div>';

//$disp .= '<div style="float:left;margin-left:50px;margin-right:20px;">';
$disp.= '<div class="row">';
$disp .= "<label class='col1'>Destinataire :</label>";
$boite_select='<br><select name="destinataire[]" '.$readonly.' multiple size=\'15\'><option value="-1">-------------</option>';
$utilisateurs=MCI_safe_query("SELECT uid,login,nom,prenom FROM MCI_utilisateur WHERE type!='Profil' ORDER BY nom");
while(list($user_id,$login,$nom,$prenom)=mysql_fetch_array($utilisateurs)){
$boite_select.="<option value='$user_id'>$nom $prenom</option>";
} // while
$boite_select.='</select>';
$disp .= "<span class='col2'>$boite_select</span>";
$disp .= "</div>\n";

//$disp.='<div style="float:right;">';
}

if ($modeformulaire=='repondre'){
$utilisateurs=MCI_safe_query("SELECT uid,login,nom,prenom FROM MCI_utilisateur WHERE uid=\"$fromUserID\"");
list($user_id,$login,$nom,$prenom)=mysql_fetch_array($utilisateurs);
$disp .= '<div class="row">';
$disp .= "<label class='col1'>Destinataire :</label>";
$disp .= "<span class='col2'>$nom $prenom </span>";
$disp .= "</div>\n";
mysql_free_result($utilisateurs);

// transmettre la valeur du destinataire
// transmis comme un tableau ( meme si le destinataire est ici unique)
// ( pour n'avoir qu'un seul code de traitement)
$disp .= "<input type='hidden' name='destinataire[]' value=\"$fromUserID\">";


}

// Si message rattaché à un dossier
// transmettre en champ caché le dossier

// Si on est dans le cas d'une réponse, on regarde si le message parent est un message deja rattaché
// a un dossier. Si c'est le cas , on recupere les infos.
$attachDossier=MCI_safe_query("Select ref_dossier from MCI_msgdossiers WHERE msgID=\"$ficheID\"");
if (list($ref_dossier)=mysql_fetch_array($attachDossier)) {
$special='dossier'; // on passe dans le cas dossier
$ref=$ref_dossier;
}

if ($special=='dossier') {

if ($modeformulaire=='creer') $titre="Dossier $ref : ".$titre;

// indiquez si public ou privé
if ($modeformulaire=='creer') {
$disp_mode='<select name="prive" style="font-family : monospace; font-size : 7pt"><option value="0">public</option><option value="1">privé</option></select>';
} else {
// on hérite du message parent
list($prive)=mysql_fetch_array(MCI_safe_query("SELECT prive FROM MCI_msgdossiers WHERE msgID=\"$ficheID\""));
$disp.="<input type='hidden'name='prive' value='$prive'>";
if ($prive==0) $disp_mode='public';
else $disp_mode='privé';
}

$disp .= "<input type='hidden' name='dossier' value='$ref'>";
$disp .= '<div class="row">';
$disp .= "<label class='col1'></label>";
$disp .= "<span class='col2'>Message $disp_mode rattaché au dossier $ref</span>";
$disp .= "</div>\n";
}

// Sujet du message
$disp .= '<div class="row">';
$disp .= "<label class='col1'>Sujet :</label>";
if ($modeformulaire!='voir') $disp .= "<span class='col2'><input name='titre' value=\"$titre\" size='50' $readonly></span>";
else $disp.="<span class='col2'><b>$titre</b></span>";
$disp .= "</div>\n";

if ($modeformulaire=='voir') {

$utilisateurs=MCI_safe_query("SELECT uid,login,nom,prenom FROM MCI_utilisateur WHERE uid=\"$fromUserID\"");
list($user_id,$login,$nom,$prenom)=mysql_fetch_array($utilisateurs);
$disp .= '<div class="row">';
$disp .= "<label class='col1'>Exp. :</label>";
$disp .= "<span class='col2'>$nom $prenom - $date_envoi</span>";
$disp .= "</div>\n";

// reafficher le destinataire - pour impression
$utilisateurs=MCI_safe_query("SELECT uid,login,nom,prenom FROM MCI_utilisateur WHERE uid=\"$uid\"");
list($user_id,$login,$nom,$prenom)=mysql_fetch_array($utilisateurs);
$disp .= '<div class="row">';
$disp .= "<label class='col1'>Dest. :</label>";
$disp .= "<span class='col2'>$nom $prenom </span>";
$disp .= "</div>\n";
mysql_free_result($utilisateurs);

}

// Message
$disp .= '<div class="row">';
$disp .= "<label class='col1'>Message :</label>";
if ($modeformulaire!='voir')$disp .= "<span class='col2'><textarea name='message' cols='60' rows='10' $readonly>$message</textarea></span>";
else $disp.='<span class="col2">'.nl2br($message).'</span>';
$disp .= "</div>\n";


// rappeler message d'origine et transmettre le numéro d'ID parent
if ($modeformulaire=='repondre') {
$disp .= '<div class="row">';
$disp .= "<label class='col1'></label>";
$disp .= "<span class='col2'><b>Rappel du message reçu : </b><br>$message_origine</span>";
$disp .= "</div>\n";
$disp.="<input type='hidden' name='msgParID' value='$ficheID'>";
}

// afficher les boutons d'action
if ($modeformulaire == 'voir') {

// Transmettre en hidden le numero du message Parent
$disp .= "<input type='hidden' name='msgID' value='$ficheID'>";

// Inclure le bouton Répondre
$disp .= '<div class="row">';
$disp .= "<label class='col1'></label>";
$disp .= "<span class='col2'><input type='submit' name='bouton' value='répondre'></span>";
$disp .= "<span class='col2'><input type='hidden' name='action' value='lire'></span>";
$disp .= "<span class='col2'><input type='hidden' name='sousaction' value='repondre'></span>";
$disp .= "</div>\n";

}

if ($modeformulaire == 'creer' ) {
$disp .= '<div class="row">';
$disp .= "<label class='col1'></label>";
$disp .= "<span class='col2'><input type='submit' name='bouton' value='envoyer'></span>";
$disp .= "<span class='col2'><input type='hidden' name='action' value='creer'></span>";
$disp .= "<span class='col2'><input type='hidden' name='sousaction' value='envoyer'></span>";
$disp .= "</div>\n";
}

if ($modeformulaire == 'repondre' ) {
$disp .= '<div class="row">';
$disp .= "<label class='col1'></label>";
$disp .= "<span class='col2'><input type='submit' name='bouton' value='envoyer'></span>";
$disp .= "<span class='col2'><input type='hidden' name='action' value='lire'></span>";
$disp .= "<span class='col2'><input type='hidden' name='sousaction' value='validerrepondre'></span>";
$disp .= "</div>\n";
}


//if ($modeformulaire=='creer') $disp.='</div>';

$disp .= '<div class="row">';
$disp .= "<label class='col1'></label>";
$disp .= "<span class='col2'><br><br><a href='java script:history.back()'>Retour Page précédente</a></span>";
$disp .= "</div>\n";

$disp .= '</div>'; // fin div id=skform
$disp .= '</form>';

echo $disp;
}


function ValiderMessage($modeformulaire)
{
global $sessid, $sesscode;
global $uid;

if ((!isset($_POST["destinataire"])) || $_POST['destinataire'] == "")
$erreurs[] = "Indiquez un destinataire";

if ((!isset($_POST["titre"])) || $_POST['titre'] == "")
$erreurs[] = "Merci de donner un titre à votre message";

if ((!isset($_POST["message"])) || $_POST['message'] == "")
$erreurs[] = "Votre message est vide";



if (!count($erreurs)) {
// Champs communs pour une insertion ou une modification
$date_rightnow = date("Y-m-d H:i:s");

$requeteSQL = "
fromUserID=\"$uid\",
titre = '" . FORM_FormateEntree($_POST['titre']) . "',
message = '" . FORM_FormateEntree($_POST['message']) . "',
date=\"$date_rightnow\"
";


// Creation de la requete SQL en entier
switch ($modeformulaire) {
case 'creer':

// Ajout des champs complétmentaires
//$requeteSQL = "date_inscription='$date_today'," . $requeteSQL;
// Creation de la commande d'insertion
$requeteSQL = "INSERT into MCI_msgtable SET " . $requeteSQL;

break;

case 'repondre':
// ajouter le message parent
$requeteSQL = "msgParID='" . $_POST['msgParID'] . "'," . $requeteSQL;
$requeteSQL = "INSERT into MCI_msgtable SET " . $requeteSQL;
break;


case 'modifier':
$requeteSQL = "UPDATE MCI_msgtable SET " . $requeteSQL;
$requeteSQL .= "WHERE contactID='{$_POST['ficheID']}'";
break;
} // Fin switch



$resultDB = MCI_safe_query($requeteSQL);

if ($modeformulaire=='creer' || $modeformulaire=='repondre') $ficheID = mysql_insert_id();
else $ficheID=$_POST['ficheID'];

// Remplir la table des destinataires

$destinataires=$_POST['destinataire'];
if ($destinataires){
foreach ($destinataires as $destID){
$requeteEnvoi="INSERT INTO MCI_msgsend SET
msgID=\"$ficheID\",
toUserID='" . $destID . "'
";

$envoi=MCI_safe_query($requeteEnvoi);
}
}


// traiter les cas spéciaux
// message d'un dossier
if (isset($_POST["dossier"])){
$requeteEnvoi="INSERT INTO MCI_msgdossiers SET
msgID=\"$ficheID\",
ref_dossier='" . $_POST['dossier'] . "',
prive='" . $_POST['prive'] . "'
";

$envoi=MCI_safe_query($requeteEnvoi);

}



echo ".....Message envoyé";

// Envoyer une notification au destinataire
// si le champ notification est a oui
$requete_notification=MCI_safe_query("SELECT notification,email FROM MCI_utilisateur WHERE uid=\"$destID\" ");
if ( list($notification,$email)=mysql_fetch_array($requete_notification) )
{
if ($notification=='oui') {

$expediteur=MCI_safe_query("SELECT nom, prenom FROM MCI_utilisateur WHERE uid=\"$uid\" ");
list($nom,$prenom)=mysql_fetch_array($expediteur);

$to_email=$email;
$from_email='arkilon_AT_yahoo.fr;
$reply_email='no-reply_AT_free.fr;
$sujet="Intra : ".$_POST['titre'];


$signature_email="\n\n\n==========================================\n\n==========================================\n\n\n";

$message="Vous avez reçu un nouveau message dans l'intranet.\n\n";
$message.="\n Copie du message :\n";
$message.="\n -------------------------------------------------------";
$message.="\nExpéditeur : $prenom $nom\n\n";
$message.=$_POST['message'];
$message.="\n -------------------------------------------------------";
$message.="\n Merci d'utiliser l'intranet pour répondre à ce message";

$entetedate = date("D, j M Y H:i:s -0000"); // avec offset horaire -0600 decalage 6 heures
$entetemail = "From: $from_email \n"; // Adresse expéditeur

$entetemail .= "Reply-To: $reply_email \n"; // Adresse de retour - Par defaut sur l'email fourni par l'internaute repondant

$entetemail .= "X-Mailer: MaxChaoulProd/" . phpversion() . "\n" ;
$entetemail .= "Date: $entetedate";

mail($to_email,$sujet,$message,$entetemail);

echo "<br>..... Notification envoyée.";
}
}

listing();


} else {
foreach($erreurs as $val) {
echo "<LI><div class='erreur'>$val</div></LI>";
}
EditerMessage($modeformulaire, $_POST['ficheID']);
} // fin else

}



///////////////////////////////////////////////////////////
// function listing()
//
// ////////////////////////////////////////////////////////
function listing()
{
global $uid;





// Afficher la liste des messages recus

$msgRecus=MCI_safe_query("SELECT msg.msgID,titre,date,date_lecture,fromUserID,nom,prenom FROM MCI_msgsend AS send
LEFT JOIN MCI_msgtable AS msg ON (msg.msgID=send.msgID)
LEFT JOIN MCI_utilisateur AS user ON (user.uid=msg.fromUserID)
WHERE toUserID=\"$uid\" AND fromUserID<>'0'
ORDER BY date DESC LIMIT 200");

//AND msgParID='0'

$disp_recus='<div id="p1">';
$disp_recus.='<b>Messages recus</b>';
$disp_recus.='<ul class="listeMessages">';
while( list($msgID,$titre,$date,$date_lecture,$fromUserID,$nom,$prenom)=mysql_fetch_array($msgRecus))
{
$titre=stripslashes($titre);
$nom=stripslashes($nom);
$prenom=stripslashes($prenom);
$url= session_url("messages.php?action=lire&msgID=".$msgID);

if ($date_lecture=='0000-00-00 00:00:00') {
$disp_recus=$disp_recus."<li><b><a href='$url'>$titre</a> - $nom $prenom - $date - Non Lu</b></li>";
} else
$disp_recus=$disp_recus."<li><a href='$url'>$titre</a> - $nom $prenom - $date - Lu :$date_lecture</li>";
}

$disp_recus.='</ul>';
$disp_recus.='</div>';



// Messages envoyés
// Afficher la liste des messages envoyés
$msgRecus=MCI_safe_query("SELECT msg.msgID,titre,date,date_lecture,fromUserID,nom,prenom FROM MCI_msgsend AS send
LEFT JOIN MCI_msgtable AS msg ON (msg.msgID=send.msgID)
LEFT JOIN MCI_utilisateur AS user ON (user.uid=send.toUserID)
WHERE fromUserID=\"$uid\"
ORDER BY date DESC LIMIT 200");

$disp_envoyes='<div id="p2">';
$disp_envoyes.='<b>Messages Envoyés</b>';
$disp_envoyes.='<ul class="listeMessages">';
while( list($msgID,$titre,$date,$date_lecture,$fromUserID,$nom,$prenom)=mysql_fetch_array($msgRecus))
{
$titre=stripslashes($titre);
$nom=stripslashes($nom);
$prenom=stripslashes($prenom);
$url= session_url("messages.php?action=relire&msgID=".$msgID);
if ($date_lecture=='0000-00-00 00:00:00') {
$disp_envoyes=$disp_envoyes."<li><b><a href='$url'>$titre</a> - $nom $prenom - $date - Non Lu</b></li>";
} else
$disp_envoyes=$disp_envoyes."<li><a href='$url'>$titre</a> - $nom $prenom - $date - Lu :$date_lecture</li>";
}

$disp_envoyes.='</ul>';
$disp_envoyes.='</div>';


// Messages Systemes
$id_menu_msgSystem = MCI_ValeurChampSimpleCle("MCI_menu", 'id_menu', 'url', 'matieres.php?action=msgSystem' , "silence");
if (check_niveau_acces($uid, $id_menu_msgSystem)) {

$msgSys=MCI_safe_query("SELECT send.msgID,titre,date,toUserID,date_lecture FROM MCI_msgSystem AS msgSys
LEFT JOIN MCI_msgtable AS send ON (msgSys.msgID=send.msgID)
LEFT JOIN MCI_msgsend AS lu ON (msgSys.msgID=lu.msgID)
WHERE fromUserID=\"0\"
ORDER BY date DESC LIMIT 300");

$disp_system='<div id="p3">';
$disp_system.='<b>Messages Système</b>';
$disp_system.='<ul class="listeMessages">';
while( list($msgID,$titre,$date,$toUserID,$date_lecture)=mysql_fetch_array($msgSys))
{
$titre=stripslashes($titre);
$nom='System';
$prenom='Neosys';
$url= session_url("messages.php?action=lire&msgID=".$msgID);

// on teste dans MCI_msgsend s'il existe un enregistrement de lecture pour l'utilisateur en cours
// sinon la fiche n'existe pas'
if ($toUserID='' || ($toUserID!=$uid) ) {
$disp_system=$disp_system."<li><b><a href='$url'>$titre</a> - $nom $prenom - $date - Non Lu</b></li>";
} else
$disp_system=$disp_system."<li><a href='$url'>$titre</a> - $nom $prenom - $date - Lu : $date_lecture</li>";

}

$disp_system.='</ul>';
$disp_system.='</div>';
} // fin panel msg System



$url= session_url("messages.php?action=creer");
$disp_entete="<a href='$url'>Créer un message</a><br><br>";

$disp_entete.='<ul class="onglets">
<li><a href="#p1" class="toggle">Messages reçus</a></li>
<li><a href="#p2" class="toggle">Messages envoyés</a></li>';
if (check_niveau_acces($uid, $id_menu_msgSystem))
$disp_entete.='<li><a href="#p3" class="toggle">Messages Système</a></li>';
$disp_entete.='</ul>';

echo '<blockquote>';
echo $disp_entete;
echo $disp_recus;
echo $disp_envoyes;
echo $disp_system;
echo '</blockquote>';



}







?>

Modifié par arkilon
Posté

Je pense que les modérateurs ne vont pas trop aprécier ton message, et ce, pour deux raisons :

* Quand tu mets un long code, mets une balise "code" autour, c'est plus propre ;-)

* As-tu un début de recherche, une idée sur la manière dont tu veux envoyer stocker, joindre, retrouver les pièces jointes ??? Ce n'est pas en postant des lignes et des lignes de codes que tu obtiendras une réponse je pense...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...