arkilon
jeudi 31 août 2006 à 09:10
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 )
CODE
<?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>';
}
?>