| 2 | ddelon | 1 | <?php
 | 
        
           | 290 | alexandre_ | 2 | // $Id: ezmlm-msgdisplay.php,v 1.9 2008-05-23 10:18:37 alexandre_tb Exp $
 | 
        
           | 2 | ddelon | 3 | //
 | 
        
           |  |  | 4 | // ezmlm-msgdisplay.php - ezmlm-php v2.0
 | 
        
           |  |  | 5 | // --------------------------------------------------------------
 | 
        
           |  |  | 6 | // Will parse a template (if specified) and display a message.
 | 
        
           |  |  | 7 | // Includes a default template.
 | 
        
           |  |  | 8 | // --------------------------------------------------------------
 | 
        
           |  |  | 9 |   | 
        
           |  |  | 10 | require_once("ezmlm.php");
 | 
        
           |  |  | 11 | require_once("Mail/mimeDecode.php") ;
 | 
        
           |  |  | 12 |   | 
        
           |  |  | 13 | class ezmlm_msgdisplay extends ezmlm_php {
 | 
        
           |  |  | 14 | 	// our template
 | 
        
           |  |  | 15 | 	var $msgtmpl;
 | 
        
           |  |  | 16 |     var $message_rendu ;
 | 
        
           |  |  | 17 |     var $_auth ;
 | 
        
           |  |  | 18 | 	// display: parses a message (using ezmlm_parser) and displays it
 | 
        
           |  |  | 19 | 	// using a template
 | 
        
           | 208 | neiluj | 20 |     var $msgfile;
 | 
        
           | 2 | ddelon | 21 |   | 
        
           | 208 | neiluj | 22 |     function display($msgfile) {
 | 
        
           | 2 | ddelon | 23 |         if (!is_file($msgfile)) {
 | 
        
           | 208 | neiluj | 24 |             if (is_file($this->listdir . "/" . $msgfile)) { $msgfile = $this->listdir . "/" . $msgfile; }
 | 
        
           |  |  | 25 | 		else if (is_file($this->listdir . "/archive/" . $msgfile)) { $msgfile = $this->listdir . "/archive/" . $msgfile; }
 | 
        
           |  |  | 26 | 		else { return FALSE; }
 | 
        
           |  |  | 27 | 	    }
 | 
        
           |  |  | 28 | 	$this->msgfile = $msgfile ;
 | 
        
           | 2 | ddelon | 29 |         $message = file_get_contents($msgfile) ;
 | 
        
           | 208 | neiluj | 30 | 	// En cours de codage
 | 
        
           |  |  | 31 | 	// La fonction display retourne tout simplement le source du mail
 | 
        
           | 290 | alexandre_ | 32 | 	// Il n'y a plus d'analyse a ce niveau
 | 
        
           | 208 | neiluj | 33 |   | 
        
           |  |  | 34 | 	return $message;
 | 
        
           | 2 | ddelon | 35 |         $mimeDecode = new Mail_mimeDecode($message) ;
 | 
        
           |  |  | 36 |         $mailDecode = $mimeDecode->decode(array('decode_bodies' => 'true', 'include_bodies' => 'true')) ;
 | 
        
           |  |  | 37 |   | 
        
           |  |  | 38 |         // $msg->msgfile contient le chemin du fichier du mail en partant de la racine
 | 
        
           | 290 | alexandre_ | 39 |         // Le point d'exclamation est le delimiteur de l'expression reguliere
 | 
        
           | 2 | ddelon | 40 | 		$relfile = preg_replace('!' . $this->listdir . '!', '', $msgfile);
 | 
        
           |  |  | 41 |   | 
        
           | 290 | alexandre_ | 42 | 		$a1 = preg_replace('!/archive/(.*)/.*$!', '\1', $relfile);  // $a1 contient le nom du repertoire
 | 
        
           | 2 | ddelon | 43 | 		$a2 = preg_replace('!/archive/.*/(.*)$!', '\1', $relfile);  // $a2 contient le nom du fichier
 | 
        
           |  |  | 44 | 		if (isset($mailDecode->headers['date'])) $msgtime = strtotime(preg_replace ('/CEST/', '', $mailDecode->headers['date']));
 | 
        
           |  |  | 45 |         $threadidx = date("Ym", $msgtime);
 | 
        
           |  |  | 46 |         if ($a2 <= 10) $numero_precedent = '0'.($a2 - 1) ; else $numero_precedent = ($a2 - 1) ;
 | 
        
           |  |  | 47 |         if ($a2 < 9) $numero_suivant = '0'.($a2 + 1) ; else $numero_suivant =  ($a2 + 1);
 | 
        
           |  |  | 48 |         // On teste si le message suivant existe
 | 
        
           |  |  | 49 |         $decoupe = explode ('/', $msgfile) ;
 | 
        
           |  |  | 50 |   | 
        
           |  |  | 51 |         // Les nom de fichiers sont du format :
 | 
        
           |  |  | 52 |         // archive/0/01
 | 
        
           |  |  | 53 |         // archive/0/02 ... 0/99 archive/1/01 ...
 | 
        
           |  |  | 54 |   | 
        
           |  |  | 55 |         $nom_fichier = $decoupe[count($decoupe)-1] ;
 | 
        
           |  |  | 56 |         $nom_repertoire = $decoupe[count($decoupe)-2] ;
 | 
        
           |  |  | 57 |         $repertoire_suivant = $nom_repertoire ; $repertoire_precedent = $nom_repertoire ;
 | 
        
           |  |  | 58 |         if ($nom_fichier > 8) {
 | 
        
           |  |  | 59 |             $fichier_suivant = $nom_fichier + 1 ;
 | 
        
           |  |  | 60 |             if ($nom_fichier == 99) {
 | 
        
           |  |  | 61 |                 $fichier_suivant = '01' ;
 | 
        
           |  |  | 62 |                 $repertoire_suivant = $nom_repertoire + 1 ;
 | 
        
           |  |  | 63 |             }
 | 
        
           |  |  | 64 |         } else {
 | 
        
           |  |  | 65 |             $fichier_suivant = '0'.($nom_fichier + 1) ;
 | 
        
           |  |  | 66 |         }
 | 
        
           |  |  | 67 |         if ($nom_fichier > 10) {
 | 
        
           |  |  | 68 |             $fichier_precedent = $nom_fichier - 1 ;
 | 
        
           |  |  | 69 |         } else {
 | 
        
           |  |  | 70 |             if ($nom_fichier == '01') {
 | 
        
           |  |  | 71 |                 $fichier_precedent = '99' ;
 | 
        
           |  |  | 72 |                 $repertoire_precedent = $nom_repertoire - 1 ;
 | 
        
           |  |  | 73 |             } else {
 | 
        
           |  |  | 74 |                 $fichier_precedent = '0'.($nom_fichier - 1) ;
 | 
        
           |  |  | 75 |             }
 | 
        
           |  |  | 76 |         }
 | 
        
           |  |  | 77 |         print $this->parse_entete_mail($mailDecode) ;
 | 
        
           |  |  | 78 | 		$this->parse_template($mailDecode, $a2, $a1);
 | 
        
           |  |  | 79 |         print $this->message_rendu;
 | 
        
           | 208 | neiluj | 80 |         //print '</div>' ;
 | 
        
           | 2 | ddelon | 81 | 	}
 | 
        
           |  |  | 82 |   | 
        
           |  |  | 83 |     /**
 | 
        
           | 208 | neiluj | 84 |      * Renvoie les infos des messages suivants
 | 
        
           |  |  | 85 |      *
 | 
        
           |  |  | 86 |      *
 | 
        
           |  |  | 87 |     */
 | 
        
           |  |  | 88 |     function getInfoSuivant() {
 | 
        
           |  |  | 89 | 		$relfile = preg_replace('!' . $this->listdir . '!', '', $this->msgfile);
 | 
        
           |  |  | 90 | 	 	$nom_repertoire = preg_replace('!/archive/(.*)/.*$!', '\1', $relfile);
 | 
        
           |  |  | 91 | 		$nom_fichier = preg_replace('!/archive/.*/(.*)$!', '\1', $relfile);
 | 
        
           |  |  | 92 |   | 
        
           |  |  | 93 | 		$repertoire_suivant = $nom_repertoire;
 | 
        
           |  |  | 94 |   | 
        
           |  |  | 95 | 		// a partir du nom du fichier
 | 
        
           |  |  | 96 | 		// et du nom du repertoire, on reconstitue
 | 
        
           |  |  | 97 | 		// le numero du message stocke dans le fichier d index
 | 
        
           |  |  | 98 | 		// le message 12 du repertoire 2 a le numero 112
 | 
        
           |  |  | 99 |   | 
        
           |  |  | 100 | 		if ($nom_repertoire == '0') {
 | 
        
           |  |  | 101 | 			$numero_message = $nom_fichier;
 | 
        
           |  |  | 102 | 		} else {
 | 
        
           |  |  | 103 | 			$numero_message = $nom_repertoire.$nom_fichier ;
 | 
        
           |  |  | 104 | 		}
 | 
        
           |  |  | 105 |   | 
        
           |  |  | 106 | 		// On ouvre le fichier d index
 | 
        
           |  |  | 107 | 		$fichier_index = fopen ($this->listdir.'/archive/'.$nom_repertoire.'/index', 'r');
 | 
        
           |  |  | 108 |   | 
        
           |  |  | 109 |   | 
        
           |  |  | 110 | 		$compteur_ligne = 1;
 | 
        
           |  |  | 111 | 		if (preg_match ('/0([1-9][0-9]*)/', $nom_fichier, $match)) {
 | 
        
           |  |  | 112 | 			$nom_fichier = $match[1];
 | 
        
           |  |  | 113 | 			$prefixe = '0' ;
 | 
        
           |  |  | 114 | 		} else {
 | 
        
           |  |  | 115 | 			$prefixe = '' ;
 | 
        
           |  |  | 116 | 		}
 | 
        
           |  |  | 117 | 		$prefixe = $this->prefixe_nom_message($nom_fichier);
 | 
        
           |  |  | 118 | 		//echo $numero_message;
 | 
        
           |  |  | 119 | 		// on cherche la ligne avec le numero du message
 | 
        
           |  |  | 120 | 		while (!feof($fichier_index)) {
 | 
        
           |  |  | 121 |   | 
        
           |  |  | 122 | 				$temp = fgets($fichier_index,4096);
 | 
        
           |  |  | 123 | 				list($num, $hash, $sujet) = split (':', $temp) ;
 | 
        
           |  |  | 124 |   | 
        
           |  |  | 125 | 				if ($num == $numero_message) {
 | 
        
           |  |  | 126 |   | 
        
           |  |  | 127 | 					$ligne_message_precedent = $compteur_ligne -2;
 | 
        
           |  |  | 128 | 					$temp = fgets($fichier_index, 4096);
 | 
        
           |  |  | 129 | 					$temp = fgets($fichier_index, 4096);
 | 
        
           |  |  | 130 | 					list ($fichier_suivant,$hash, $sujet) = split(':', $temp);
 | 
        
           |  |  | 131 |   | 
        
           |  |  | 132 | 					// Au cas ou est au dernier message du fichier d index
 | 
        
           |  |  | 133 | 					// il faut ouvrir le suivant
 | 
        
           |  |  | 134 | 					if (feof($fichier_index)) {
 | 
        
           |  |  | 135 | 						$repertoire_suivant++;
 | 
        
           |  |  | 136 | 						if (file_exists($this->listdir.'/archive/'.$repertoire_suivant.'/index')) {
 | 
        
           |  |  | 137 | 							$fichier_index_suivant = fopen($this->listdir.'/archive/'.$repertoire_suivant.'/index', 'r');
 | 
        
           |  |  | 138 | 							// on recupere le numero du premier message
 | 
        
           |  |  | 139 | 							list($fichier_suivant, $hash, $sujet) = split (':', fgets($fichier_index_suivant), 4096);
 | 
        
           |  |  | 140 | 							fclose ($fichier_index_suivant);
 | 
        
           |  |  | 141 | 						}
 | 
        
           |  |  | 142 | 					}
 | 
        
           |  |  | 143 |   | 
        
           |  |  | 144 | 					// Si le numero est > 100, il faut decouper et ne retenir
 | 
        
           |  |  | 145 | 					// que les dizaines et unites
 | 
        
           |  |  | 146 | 					if ($fichier_suivant >= 100) {
 | 
        
           |  |  | 147 | 						$decimal = (string) $fichier_suivant;
 | 
        
           |  |  | 148 | 						$numero = substr($decimal, -2) ;
 | 
        
           |  |  | 149 | 						$fichier_suivant = $numero ;
 | 
        
           |  |  | 150 | 					} else {
 | 
        
           | 249 | alexandre_ | 151 | 						if ($fichier_suivant <= 9)$fichier_suivant = '0'.$fichier_suivant;
 | 
        
           | 208 | neiluj | 152 | 					}
 | 
        
           |  |  | 153 |   | 
        
           |  |  | 154 | 					break;
 | 
        
           |  |  | 155 | 				}
 | 
        
           |  |  | 156 |   | 
        
           |  |  | 157 | 				// On avance d une ligne, la 2e ligne contient date hash auteur
 | 
        
           |  |  | 158 | 				$temp2 = fgets($fichier_index, 4096);
 | 
        
           |  |  | 159 | 				$compteur_ligne += 2;
 | 
        
           |  |  | 160 | 		}
 | 
        
           |  |  | 161 |   | 
        
           |  |  | 162 | 		// On utilise $ligne_message_precedent pour recupere le num du message precedent
 | 
        
           |  |  | 163 | 		// Si $ligne_precedent est negatif soit c le premier message de la liste
 | 
        
           |  |  | 164 | 		// soit il faut ouvrir le repertoire precedent
 | 
        
           |  |  | 165 |   | 
        
           |  |  | 166 | 		if ($ligne_message_precedent > 0) {
 | 
        
           |  |  | 167 | 			$compteur = 1;
 | 
        
           |  |  | 168 | 			rewind($fichier_index);
 | 
        
           |  |  | 169 | 			while (!feof($fichier_index)) {
 | 
        
           |  |  | 170 | 				$temp = fgets($fichier_index, 4096);
 | 
        
           |  |  | 171 | 				if ($ligne_message_precedent == $compteur) {
 | 
        
           |  |  | 172 | 					list ($fichier_precedent, $hash, $sujet) = split (':', $temp) ;
 | 
        
           |  |  | 173 | 				}
 | 
        
           |  |  | 174 | 				$compteur++;
 | 
        
           |  |  | 175 | 			}
 | 
        
           |  |  | 176 | 			// Le nom du repertoire precedent est le meme que le repertoire courant
 | 
        
           |  |  | 177 | 			$repertoire_precedent = $nom_repertoire ;
 | 
        
           |  |  | 178 | 		// Si $ligne_message_precedent est negatif, alors il faut ouvrir
 | 
        
           |  |  | 179 | 		// le fichier index du repertoire precedent
 | 
        
           |  |  | 180 | 		// si le nom du repertoire est 0, alors il n y a pas de repertoire precedent
 | 
        
           |  |  | 181 | 		// et donc pas de message precedent
 | 
        
           |  |  | 182 | 		} else {
 | 
        
           |  |  | 183 |   | 
        
           |  |  | 184 | 			if ($nom_repertoire != '0') {
 | 
        
           |  |  | 185 | 				$repertoire_precedent = $nom_repertoire -1 ;
 | 
        
           |  |  | 186 | 				// on ouvre le fichier d index et on extraie le numero
 | 
        
           |  |  | 187 | 				// du dernier message
 | 
        
           |  |  | 188 |   | 
        
           |  |  | 189 | 				$fichier_index_precedent = fopen ($this->listdir.'/archive/'.$repertoire_precedent.'/index', 'r') ;
 | 
        
           |  |  | 190 | 				while (!feof($fichier_index_precedent)) {
 | 
        
           |  |  | 191 | 					$temp = fgets($fichier_index_precedent,4096);
 | 
        
           |  |  | 192 | 					$ligne = split (':', $temp) ;
 | 
        
           |  |  | 193 | 					if ($ligne[0] != '') $fichier_precedent = $ligne[0];
 | 
        
           |  |  | 194 | 					$temp = fgets($fichier_index_precedent,4096);
 | 
        
           |  |  | 195 | 				}
 | 
        
           |  |  | 196 |   | 
        
           |  |  | 197 | 				fclose ($fichier_index_precedent);
 | 
        
           |  |  | 198 | 			// on se situe dans le repertoire 0 donc pas de message precedent
 | 
        
           |  |  | 199 | 			} else {
 | 
        
           |  |  | 200 | 				$fichier_precedent = null;
 | 
        
           |  |  | 201 | 				$repertoire_precedent = null;
 | 
        
           |  |  | 202 | 			}
 | 
        
           |  |  | 203 | 		}
 | 
        
           |  |  | 204 | 		if ($fichier_precedent > 100) {
 | 
        
           |  |  | 205 | 			$decimal = (string) $fichier_precedent;
 | 
        
           |  |  | 206 | 			$numero = substr($decimal, -2) ;
 | 
        
           |  |  | 207 | 			$fichier_precedent = $numero ;
 | 
        
           |  |  | 208 | 		} else {
 | 
        
           |  |  | 209 | 			if ($fichier_precedent < 10 )$fichier_precedent = '0'.$fichier_precedent;
 | 
        
           |  |  | 210 | 		}
 | 
        
           |  |  | 211 | 		fclose ($fichier_index);
 | 
        
           |  |  | 212 | 		//if ($fichier_precedent != null && $fichier_precedent < 10) $fichier_precedent = '0'.$fichier_precedent;
 | 
        
           |  |  | 213 |   | 
        
           |  |  | 214 | 		return array ('fichier_suivant' => $fichier_suivant,
 | 
        
           |  |  | 215 | 			      'repertoire_suivant' => $repertoire_suivant,
 | 
        
           |  |  | 216 | 			      'fichier_precedent' => $fichier_precedent,
 | 
        
           |  |  | 217 | 			      'repertoire_precedent' => $repertoire_precedent);
 | 
        
           |  |  | 218 | 	}
 | 
        
           |  |  | 219 |   | 
        
           |  |  | 220 |     /**
 | 
        
           |  |  | 221 |     *   analyse l'entete d'un mail pour en extraire les entête
 | 
        
           | 2 | ddelon | 222 |     *   to, from, subject, date
 | 
        
           |  |  | 223 |     *   met à jour la variable $this->msgtmpl
 | 
        
           |  |  | 224 |     *
 | 
        
           |  |  | 225 |     */
 | 
        
           |  |  | 226 |   | 
        
           |  |  | 227 |     function parse_entete_mail (&$mailDecode) {
 | 
        
           |  |  | 228 |         $startpos = strpos(strtolower($this->msgtmpl_entete), '<ezmlm-headers>');
 | 
        
           | 208 | neiluj | 229 |         $endpos = strpos(strtolower($this->msgtmpl_entete), '</ezmlm-headers>');
 | 
        
           | 2 | ddelon | 230 | 		$headers = substr($this->msgtmpl_entete,$startpos + 15,($endpos - $startpos - 15));
 | 
        
           |  |  | 231 |         $headers_replace = '' ;
 | 
        
           |  |  | 232 | 		for ($i = 0; $i < count($this->showheaders); $i++) {
 | 
        
           | 208 | neiluj | 233 | 		    $val = $this->showheaders[$i];
 | 
        
           |  |  | 234 | 		    $headers_replace .= $headers;
 | 
        
           |  |  | 235 | 		    $hnpos = strpos(strtolower($headers_replace), '<ezmlm-header-name>');
 | 
        
           |  |  | 236 | 		    $headers_replace = substr_replace($headers_replace, $this->header_en_francais[$val], $hnpos, 19);
 | 
        
           |  |  | 237 | 		    $hvpos = strpos(strtolower($headers_replace), '<ezmlm-header-value');
 | 
        
           |  |  | 238 |             $headers_replace = $this->decode_iso ($headers_replace) ;
 | 
        
           |  |  | 239 |             switch ($val) {
 | 
        
           |  |  | 240 |             	case 'date':
 | 
        
           |  |  | 241 |             	$headers_replace = substr_replace($headers_replace, $this->date_francaise($mailDecode->headers[strtolower($val)]), $hvpos, 20);
 | 
        
           |  |  | 242 |             	break;
 | 
        
           |  |  | 243 |             	case 'from':
 | 
        
           |  |  | 244 |             	if ($mailDecode->headers[strtolower($val)] == '') $from = $mailDecode->headers['return-path'] ;
 | 
        
           |  |  | 245 |             		else $from = $mailDecode->headers['from'];
 | 
        
           |  |  | 246 |             	$headers_replace = substr_replace($headers_replace, $this->protect_email($this->decode_iso($from)), $hvpos, 20);
 | 
        
           |  |  | 247 |             	//$headers_replace = htmlspecialchars($headers_replace);
 | 
        
           |  |  | 248 |             	break;
 | 
        
           |  |  | 249 |             	default:
 | 
        
           |  |  | 250 |             	$headers_replace = substr_replace($headers_replace, $this->protect_email($this->decode_iso($mailDecode->headers[strtolower($val)])), $hvpos, 20);
 | 
        
           | 2 | ddelon | 251 |             }
 | 
        
           |  |  | 252 | 		}
 | 
        
           | 208 | neiluj | 253 |         return substr_replace($this->msgtmpl_entete, $headers_replace, $startpos, (($endpos + 16) - $startpos));
 | 
        
           | 2 | ddelon | 254 |     }
 | 
        
           |  |  | 255 |   | 
        
           |  |  | 256 |   | 
        
           |  |  | 257 | 	function parse_template(&$mailDecode, $numero_mail, $numero_mois, $num_part = '') {
 | 
        
           |  |  | 258 |         static $profondeur = array();
 | 
        
           | 290 | alexandre_ | 259 |         if ($num_part != '') array_push ($profondeur, $num_part) ;
 | 
        
           | 2 | ddelon | 260 |         $corps = '' ;
 | 
        
           |  |  | 261 |   | 
        
           |  |  | 262 | 		if ($mailDecode->ctype_primary == 'multipart') {
 | 
        
           |  |  | 263 |             include_once PROJET_CHEMIN_CLASSES.'type_fichier_mime.class.php' ;
 | 
        
           |  |  | 264 | 			for ($i = 0; $i < count($mailDecode->parts); $i++) {
 | 
        
           |  |  | 265 |                 switch ($mailDecode->parts[$i]->ctype_secondary) {
 | 
        
           |  |  | 266 |                     case 'plain' :
 | 
        
           | 208 | neiluj | 267 |                     if ($mailDecode->parts[$i]->headers['content-transfer-encoding'] == '8bit') {
 | 
        
           |  |  | 268 |                     	$corps .= $this->_cte_8bit($mailDecode->parts[$i]->body);
 | 
        
           | 256 | alexandre_ | 269 |                     } else if ($mailDecode->parts[$i]->headers['content-transfer-encoding'] == 'quoted-printable') {
 | 
        
           |  |  | 270 |                     	if ($mailDecode->parts[$i]->ctype_parameters['charset'] == 'UTF-8') {
 | 
        
           |  |  | 271 |                     		$corps .= utf8_decode($mailDecode->parts[$i]->body);
 | 
        
           |  |  | 272 |                     	}
 | 
        
           | 208 | neiluj | 273 |                     }
 | 
        
           |  |  | 274 |                     break;
 | 
        
           | 290 | alexandre_ | 275 |                     case 'html' : $corps .= trim(strip_tags ($mailDecode->parts[$i]->body, '<p><a>'));
 | 
        
           | 2 | ddelon | 276 |                     break ;
 | 
        
           |  |  | 277 |                     case 'mixed' :
 | 
        
           |  |  | 278 |                     case 'rfc822' :
 | 
        
           |  |  | 279 |                     case 'alternative' :
 | 
        
           |  |  | 280 |                     case 'appledouble' :
 | 
        
           |  |  | 281 |                         $this->parse_template($mailDecode->parts[$i], $numero_mail, $numero_mois, $i) ;
 | 
        
           |  |  | 282 |                     break ;
 | 
        
           |  |  | 283 |                     case 'applefile' : continue ;
 | 
        
           |  |  | 284 |                     break ;
 | 
        
           |  |  | 285 |                     default :
 | 
        
           |  |  | 286 |   | 
        
           |  |  | 287 |                     if ($mailDecode->parts[$i]->ctype_secondary == 'octet-stream') {
 | 
        
           |  |  | 288 |                         $nom_piece_jointe = $mailDecode->parts[$i]->ctype_parameters['name'] ;
 | 
        
           |  |  | 289 |                         $tab = explode ('.', $nom_piece_jointe) ;
 | 
        
           |  |  | 290 |                         $extension = $tab[count ($tab) - 1] ;
 | 
        
           |  |  | 291 |                         $mimeType = type_fichier_mime::factory($extension, $GLOBALS['projet_db']);
 | 
        
           |  |  | 292 |                         $mimeType->setCheminIcone(PROJET_CHEMIN_ICONES) ;
 | 
        
           |  |  | 293 |                     } else {
 | 
        
           |  |  | 294 |                         $nom_piece_jointe = isset ($mailDecode->parts[$i]->d_parameters['filename']) ?
 | 
        
           |  |  | 295 |                                             $mailDecode->parts[$i]->d_parameters['filename'] : $mailDecode->parts[$i]->ctype_parameters['name'] ;
 | 
        
           |  |  | 296 |                         $mimeType = new type_fichier_mime($GLOBALS['projet_db'], $mailDecode->parts[$i]->ctype_primary.'/'.
 | 
        
           |  |  | 297 |                                             $mailDecode->parts[$i]->ctype_secondary, PROJET_CHEMIN_ICONES) ;
 | 
        
           |  |  | 298 |                     }
 | 
        
           |  |  | 299 |   | 
        
           | 256 | alexandre_ | 300 |                     $corps .= '<a href="'.PROJET_CHEMIN_APPLI.'fichier_attache.php?nom_liste='.$this->listname.
 | 
        
           | 2 | ddelon | 301 |                                     '&actionargs[]='.$numero_mois.
 | 
        
           |  |  | 302 |                                     '&actionargs[]='.$numero_mail;
 | 
        
           |  |  | 303 |   | 
        
           |  |  | 304 |                     if (count ($profondeur) > 0) {
 | 
        
           |  |  | 305 |                         array_shift($profondeur) ;
 | 
        
           |  |  | 306 |                         for ($j= 0; $j < count ($profondeur); $j++) $corps .= '&actionargs[]='.$profondeur[$j];
 | 
        
           |  |  | 307 |                     }
 | 
        
           |  |  | 308 |                     $corps .= '&actionargs[]='.$i ;
 | 
        
           |  |  | 309 |                     $corps .= '">'.'<img src="'.$mimeType->getCheminIcone().'" alt="'.$nom_piece_jointe.'" /> ' ;
 | 
        
           |  |  | 310 |                     $corps .= $nom_piece_jointe;
 | 
        
           |  |  | 311 |                     $corps .= '</a><br />' ;
 | 
        
           |  |  | 312 |                     break ;
 | 
        
           |  |  | 313 |                 }
 | 
        
           |  |  | 314 |             }
 | 
        
           |  |  | 315 |             $this->message_rendu .= preg_replace('/<ezmlm-body>/i', $this->cleanup_body($corps,TRUE), $this->msgtmpl);
 | 
        
           |  |  | 316 |   | 
        
           |  |  | 317 | 		} else if ($mailDecode->ctype_primary == 'message') {
 | 
        
           |  |  | 318 |   | 
        
           |  |  | 319 |             $this->message_rendu .= "\n".'<div class="message">'.$this->parse_entete_mail($mailDecode->parts[0]);
 | 
        
           |  |  | 320 |             $corps .= $this->parse_template($mailDecode->parts[0], $numero_mail, $numero_mois, 0) ;
 | 
        
           |  |  | 321 |             $this->message_rendu .= preg_replace('/<ezmlm-body>/i', $this->cleanup_body($corps,true), $this->msgtmpl).'</div>';
 | 
        
           |  |  | 322 |   | 
        
           |  |  | 323 |         } else if ($mailDecode->ctype_primary == 'application' || $mailDecode->ctype_primary == 'image'){
 | 
        
           |  |  | 324 |             if ($mailDecode->ctype_secondary == 'applefile') return ;
 | 
        
           |  |  | 325 |             $mimeType = new type_fichier_mime($GLOBALS['projet_db'], $mailDecode->ctype_primary.'/'.$mailDecode->ctype_secondary,PROJET_CHEMIN_ICONES) ;
 | 
        
           |  |  | 326 |   | 
        
           |  |  | 327 |             if ($mimeType->getIdType() != 12) {
 | 
        
           | 256 | alexandre_ | 328 |                 $corps .= '<a href="'.PROJET_CHEMIN_APPLI.'fichier_attache.php?nom_liste='.$this->listname.'&actionargs[]='.
 | 
        
           | 2 | ddelon | 329 |                                     $numero_mois.'&actionargs[]='.
 | 
        
           |  |  | 330 |                                     $numero_mail.'&actionargs[]='.$i.'">'.
 | 
        
           |  |  | 331 |                                     '<img src="'.$mimeType->getCheminIcone().'" alt="'.$mailDecode->ctype_parameters['name'].'" /> ' ;
 | 
        
           |  |  | 332 |                 $corps .= $mailDecode->ctype_parameters['name'].'</a><br />' ;
 | 
        
           |  |  | 333 |   | 
        
           |  |  | 334 |                 $this->message_rendu .= preg_replace('/<ezmlm-body>/i', $this->cleanup_body($corps,true), $this->msgtmpl);
 | 
        
           |  |  | 335 |             }
 | 
        
           |  |  | 336 |         } else {
 | 
        
           |  |  | 337 | 			if (preg_match('/html/i', $mailDecode->ctype_secondary)) {
 | 
        
           |  |  | 338 |                 $this->message_rendu .= preg_replace('/<ezmlm-body>/i', $this->cleanup_body($mailDecode->body,TRUE), $this->msgtmpl);
 | 
        
           |  |  | 339 |             } else {
 | 
        
           |  |  | 340 |                 if (isset ($mailDecode->ctype_parameters['charset']) && $mailDecode->ctype_parameters['charset'] == 'UTF-8') {
 | 
        
           |  |  | 341 |                     $this->message_rendu .= preg_replace('/<ezmlm-body>/i', '<pre>' . utf8_decode($this->cleanup_body($mailDecode->body,TRUE)) . '</pre>', $this->msgtmpl);
 | 
        
           |  |  | 342 |                 } else {
 | 
        
           |  |  | 343 |                     $this->message_rendu .= preg_replace('/<ezmlm-body>/i', '<pre>' . $this->cleanup_body($mailDecode->body,TRUE) . '</pre>', $this->msgtmpl);
 | 
        
           |  |  | 344 |                 }
 | 
        
           |  |  | 345 |             }
 | 
        
           |  |  | 346 | 		}
 | 
        
           | 290 | alexandre_ | 347 | 		array_pop ($profondeur);
 | 
        
           | 2 | ddelon | 348 | 	}
 | 
        
           |  |  | 349 |   | 
        
           |  |  | 350 | 	function ezmlm_msgdisplay() {
 | 
        
           |  |  | 351 | 		$this->ezmlm_php();
 | 
        
           |  |  | 352 | 		if (($this->msgtemplate != "") and (is_file($this->msgtemplate))) {
 | 
        
           |  |  | 353 | 			$fd = fopen($this->msgtemplate, "r");
 | 
        
           |  |  | 354 | 			while (!feof($fd)) { $this->msgtmpl .= fgets($fd,4096); }
 | 
        
           |  |  | 355 | 			fclose($fd);
 | 
        
           |  |  | 356 | 		} else {
 | 
        
           |  |  | 357 | 			$this->msgtmpl = '<pre>
 | 
        
           |  |  | 358 | <ezmlm-body>
 | 
        
           |  |  | 359 | </pre>
 | 
        
           |  |  | 360 |         ';
 | 
        
           |  |  | 361 | 		}
 | 
        
           |  |  | 362 |         $this->msgtmpl_entete = '<dl><ezmlm-headers>
 | 
        
           |  |  | 363 | <dt><ezmlm-header-name> :</dt>
 | 
        
           |  |  | 364 | <dd><ezmlm-header-value></dd>
 | 
        
           |  |  | 365 | </ezmlm-headers>
 | 
        
           |  |  | 366 | </dl>' ;
 | 
        
           |  |  | 367 | 	}
 | 
        
           | 253 | alexandre_ | 368 |   | 
        
           |  |  | 369 | 		// _cte_8bit: decode a content transfer encoding of 8bit
 | 
        
           |  |  | 370 | 	// NOTE: this function is a little bit special. Since the end result will be displayed in
 | 
        
           |  |  | 371 | 	// a web browser _cte_8bit decodes ASCII characters > 127 (the US-ASCII table) into the
 | 
        
           |  |  | 372 | 	// html ordinal equivilant, it also ensures that the messages content-type is changed
 | 
        
           |  |  | 373 | 	// to include text/html if it changes anything...
 | 
        
           |  |  | 374 | 	function _cte_8bit($data,$simple = FALSE) {
 | 
        
           |  |  | 375 | 		if ($simple) { return $data; }
 | 
        
           |  |  | 376 | 		$changed = FALSE;
 | 
        
           | 265 | alexandre_ | 377 | 		$out = '';
 | 
        
           | 253 | alexandre_ | 378 | 		$chars = preg_split('//',$data);
 | 
        
           |  |  | 379 | 		while (list($key,$val) = each($chars)) {
 | 
        
           |  |  | 380 | 			if (ord($val) > 127) { $out .= '&#' . ord($val) . ';'; $changed = TRUE; }
 | 
        
           |  |  | 381 | 			else { $out .= $val; }
 | 
        
           |  |  | 382 | 		}
 | 
        
           |  |  | 383 | 		if ($changed) { $this->headers['content-type'][1] = 'text/html'; }
 | 
        
           |  |  | 384 | 		return $out;
 | 
        
           |  |  | 385 | 	}
 | 
        
           | 2 | ddelon | 386 |   | 
        
           |  |  | 387 | }
 |