Bon deja quand on parle d'un script c mieux si on le pose :
edit
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>'; } ?>