[ Index ] |
|
Code source de e107 0.7.8 |
1 <?php 2 /* 3 + ----------------------------------------------------------------------------+ 4 | e107 website system 5 | 6 | ©Steve Dunstan 2001-2002 7 | http://e107.org 8 | jalist@e107.org 9 | 10 | Released under the terms and conditions of the 11 | GNU General Public License (http://gnu.org). 12 | 13 | $Source: /cvsroot/e107/e107_0.7/e107_plugins/pm/pm_class.php,v $ 14 | $Revision: 1.18 $ 15 | $Date: 2007/02/17 17:31:15 $ 16 | $Author: mcfly_e107 $ 17 +----------------------------------------------------------------------------+ 18 */ 19 20 if (!defined('e107_INIT')) { exit; } 21 22 class private_message 23 { 24 function pm_mark_read($pm_id, $pm_info) 25 { 26 $now = time(); 27 global $pm_prefs, $sql; 28 if($pm_prefs['read_delete']) 29 { 30 $this->del($pm_id); 31 } 32 else 33 { 34 $sql->db_Select_gen("UPDATE #private_msg SET pm_read = {$now} WHERE pm_id=".intval($pm_id)); 35 if(strpos($pm_info['pm_option'], "+rr") !== FALSE) 36 { 37 $this->pm_send_receipt($pm_info); 38 } 39 } 40 } 41 42 function pm_get($pmid) 43 { 44 global $sql; 45 $qry = " 46 SELECT pm.*, ut.user_image AS sent_image, ut.user_name AS sent_name, uf.user_image AS from_image, uf.user_name AS from_name, uf.user_email as from_email, ut.user_email as to_email FROM #private_msg AS pm 47 LEFT JOIN #user AS ut ON ut.user_id = pm.pm_to 48 LEFT JOIN #user AS uf ON uf.user_id = pm.pm_from 49 WHERE pm.pm_id='".intval($pmid)."' 50 "; 51 if ($sql->db_Select_gen($qry)) 52 { 53 $row = $sql->db_Fetch(); 54 return $row; 55 } 56 return FALSE; 57 } 58 59 function add($vars) 60 { 61 global $pm_prefs, $tp, $sql; 62 $vars['options'] = ""; 63 $pmsize = 0; 64 $attachlist = ""; 65 $pm_options = ""; 66 if(isset($vars['receipt']) && $vars['receipt']) {$pm_options .= "+rr+"; } 67 if(isset($vars['uploaded'])) 68 { 69 foreach($vars['uploaded'] as $u) 70 { 71 if(!isset($u['error'])) 72 { 73 $pmsize += $u['size']; 74 $a_list[] = $u['name']; 75 } 76 } 77 $attachlist = implode(chr(0), $a_list); 78 } 79 $pmsize += strlen($vars['pm_message']); 80 81 $pm_subject = $tp->toDB($vars['pm_subject']); 82 $pm_message = $tp->toDB($vars['pm_message']); 83 $sendtime = time(); 84 if(isset($vars['to_userclass']) || isset($vars['to_array'])) 85 { 86 if(isset($vars['to_userclass'])) 87 { 88 require_once(e_HANDLER."userclass_class.php"); 89 $toclass = r_userclass_name($vars['pm_userclass']); 90 $tolist = $this->get_users_inclass($vars['pm_userclass']); 91 $ret .= LAN_PM_38.": {$vars['to_userclass']}<br />"; 92 $class = TRUE; 93 } 94 else 95 { 96 $tolist = $vars['to_array']; 97 $class = FALSE; 98 } 99 foreach($tolist as $u) 100 { 101 set_time_limit(30); 102 if($pmid = $sql->db_Insert("private_msg", "0, '".intval($vars['from_id'])."', '".$tp -> toDB($u['user_id'])."', '".intval($sendtime)."', '0', '{$pm_subject}', '{$pm_message}', '1', '0', '".$tp -> toDB($attachlist)."', '".$tp -> toDB($pm_options)."', '".intval($pmsize)."'")) 103 { 104 if($class == FALSE) 105 { 106 $toclass .= $u['user_name'].", "; 107 } 108 if(check_class($pm_prefs['notify_class'], $u['user_class'])) 109 { 110 $vars['to_info'] = $u; 111 $this->pm_send_notify($u['user_id'], $vars, $pmid, count($a_list)); 112 } 113 } 114 else 115 { 116 $ret .= LAN_PM_39.": {$u['user_name']} <br />"; 117 } 118 } 119 if(!$pmid = $sql->db_Insert("private_msg", "0, '".intval($vars['from_id'])."', '".$tp -> toDB($toclass)."', '".intval($sendtime)."', '1', '{$pm_subject}', '{$pm_message}', '0', '0', '".$tp -> toDB($attachlist)."', '".$tp -> toDB($pm_options)."', '".intval($pmsize)."'")) 120 { 121 $ret .= LAN_PM_41."<br />"; 122 } 123 124 } 125 else 126 { 127 if($pmid = $sql->db_Insert("private_msg", "0, '".intval($vars['from_id'])."', '".$tp -> toDB($vars['to_info']['user_id'])."', '".intval($sendtime)."', '0', '{$pm_subject}', '{$pm_message}', '0', '0', '".$tp -> toDB($attachlist)."', '".$tp -> toDB($pm_options)."', '".intval($pmsize)."'")) 128 { 129 if(check_class($pm_prefs['notify_class'], $vars['to_info']['user_class'])) 130 { 131 set_time_limit(30); 132 $this->pm_send_notify($vars['to_info']['user_id'], $vars, $pmid, count($a_list)); 133 } 134 $ret .= LAN_PM_40.": {$vars['to_info']['user_name']}<br />"; 135 } 136 } 137 return $ret; 138 } 139 140 function del($pmid) 141 { 142 global $sql; 143 $ret = ""; 144 $del_pm = FALSE; 145 $newvals = ""; 146 if($sql->db_Select("private_msg", "*", "pm_id = ".intval($pmid)." AND (pm_from = ".USERID." OR pm_to = ".USERID.")")) 147 { 148 $row = $sql->db_Fetch(); 149 if($row['pm_to'] == USERID) 150 { 151 $newvals = "pm_read_del = 1"; 152 $ret .= LAN_PM_42."<br />"; 153 if($row['pm_sent_del'] == 1) { $del_pm = TRUE; } 154 } 155 if($row['pm_from'] == USERID) 156 { 157 if($newvals != "") { $del_pm = TRUE; } 158 $newvals = "pm_sent_del = 1"; 159 $ret .= LAN_PM_43."<br />"; 160 if($row['pm_read_del'] == 1) { $del_pm = TRUE; } 161 } 162 163 if(count($newvals) == 2 || $del_pm == TRUE) 164 { 165 // Delete any attachments and remove PM from db 166 $attachments = explode(chr(0), $row['pm_attachments']); 167 foreach($attachments as $a) 168 { 169 $filename = getcwd()."/attachments/{$a}"; 170 unlink($filename); 171 } 172 $sql->db_Delete("private_msg", "pm_id = ".intval($pmid)); 173 } 174 else 175 { 176 $sql->db_Update("private_msg", $newvals." WHERE pm_id = ".intval($pmid)); 177 } 178 return $ret; 179 } 180 } 181 182 function pm_send_notify($uid, $pminfo, $pmid, $attach_count = 0) 183 { 184 require_once(e_HANDLER."mail.php"); 185 global $PLUGINS_DIRECTORY; 186 $subject = LAN_PM_100.SITENAME; 187 $pmlink = SITEURL.$PLUGINS_DIRECTORY."pm/pm.php?show.{$pmid}"; 188 $txt = LAN_PM_101.SITENAME."\n\n"; 189 $txt .= LAN_PM_102.USERNAME."\n"; 190 $txt .= LAN_PM_103.$pminfo['pm_subject']."\n"; 191 if($attch_count > 0) 192 { 193 $txt .= LAN_PM_104.$attach_count."\n"; 194 } 195 $txt .= LAN_PM_105."\n".$pmlink."\n"; 196 sendemail($pminfo['to_info']['user_email'], $subject, $txt, $pminfo['to_info']['user_name']); 197 } 198 199 function pm_send_receipt($pminfo) 200 { 201 require_once(e_HANDLER."mail.php"); 202 global $PLUGINS_DIRECTORY; 203 $subject = LAN_PM_106.$pminfo['sent_name']; 204 $pmlink = SITEURL.$PLUGINS_DIRECTORY."pm/pm.php?show.{$pminfo['pm_id']}"; 205 $txt = str_replace("{UNAME}", $pminfo['sent_name'], LAN_PM_107).date('l F dS Y h:i:s A')."\n\n"; 206 $txt .= LAN_PM_108.date('l F dS Y h:i:s A', $pminfo['pm_sent'])."\n"; 207 $txt .= LAN_PM_103.$pminfo['pm_subject']."\n"; 208 $txt .= LAN_PM_105."\n".$pmlink."\n"; 209 sendemail($pminfo['from_email'], $subject, $txt, $pminfo['from_name']); 210 } 211 212 function block_get($to = USERID) 213 { 214 global $sql, $tp; 215 $ret = array(); 216 if($sql->db_Select("private_msg_block", "pm_block_from", "pm_block_to = '".$tp -> toDB($to)."'")) 217 { 218 while($row = $sql->db_Fetch()) 219 { 220 $ret[] = $row['pm_block_from']; 221 } 222 } 223 return $ret; 224 } 225 226 function block_add($from, $to = USERID) 227 { 228 global $sql, $tp; 229 if($sql->db_Select("user", "user_name", "user_id = '".intval($from)."'")) 230 { 231 $uinfo = $sql->db_Fetch(); 232 if(!$sql->db_Count("private_msg_block", "(*)", "WHERE pm_block_from = '".intval($from)."' AND pm_block_to = '".$tp -> toDB($to)."'")) 233 { 234 if($sql->db_Insert("private_msg_block", "0, '".intval($from)."', '".$tp -> toDB($to)."', '".time()."', '0'")) 235 { 236 return str_replace('{UNAME}', $uinfo['user_name'], LAN_PM_47); 237 } 238 else 239 { 240 return LAN_PM_48; 241 } 242 } 243 else 244 { 245 return str_replace('{UNAME}', $uinfo['user_name'], LAN_PM_49); 246 } 247 } 248 else 249 { 250 return LAN_PM_17; 251 } 252 } 253 254 function block_del($from, $to = USERID) 255 { 256 global $sql; 257 if($sql->db_Select("user", "user_name", "user_id = '".intval($from)."'")) 258 { 259 $uinfo = $sql->db_Fetch(); 260 if($sql->db_Select("private_msg_block", "pm_block_id", "pm_block_from = '".intval($from)."' AND pm_block_to = '".intval($to)."'")) 261 { 262 $row = $sql->db_Fetch(); 263 if($sql->db_Delete("private_msg_block", "pm_block_id = '".intval($row['pm_block_id'])."'")) 264 { 265 return str_replace("{UNAME}", $uinfo['user_name'], LAN_PM_44); 266 } 267 else 268 { 269 return LAN_PM_45; 270 } 271 } 272 else 273 { 274 return str_replace("{UNAME}", $uinfo['user_name'], LAN_PM_46); 275 } 276 } 277 else 278 { 279 return LAN_PM_17; 280 } 281 } 282 283 function pm_getuid($var) 284 { 285 global $sql, $tp; 286 $var = trim($var); 287 if($sql->db_Select("user", "user_id, user_name, user_class, user_email", "user_name LIKE '".$tp->toDB($var)."' LIMIT 1")) 288 { 289 $row = $sql->db_Fetch(); 290 return $row; 291 } 292 return FALSE; 293 } 294 295 function get_users_inclass($class) 296 { 297 global $sql, $tp; 298 if($class == e_UC_MEMBER) 299 { 300 $qry = "SELECT user_id, user_name, user_email, user_class FROM #user WHERE 1"; 301 } 302 elseif($class == e_UC_ADMIN) 303 { 304 $qry = "SELECT user_id, user_name, user_email, user_class FROM #user WHERE user_admin = 1"; 305 } 306 elseif($class) 307 { 308 $regex = "(^|,)(".$tp -> toDB($class).")(,|$)"; 309 $qry = "SELECT user_id, user_name, user_email, user_class FROM #user WHERE user_class REGEXP '{$regex}'"; 310 } 311 if($sql->db_Select_gen($qry)) 312 { 313 $ret = $sql->db_getList(); 314 return $ret; 315 } 316 return FALSE; 317 } 318 319 function pm_get_inbox($uid = USERID, $from = 0, $limit = 10) 320 { 321 global $sql; 322 $ret = ""; 323 if($total_messages = $sql->db_Count("private_msg", "(*)", "WHERE pm_to='{$uid}' AND pm_read_del=0")) 324 { 325 $qry = " 326 SELECT pm.*, u.user_image, u.user_name FROM #private_msg AS pm 327 LEFT JOIN #user AS u ON u.user_id = pm.pm_from 328 WHERE pm.pm_to='{$uid}' AND pm.pm_read_del=0 329 ORDER BY pm.pm_sent DESC 330 LIMIT ".intval($from).", ".intval($limit)." 331 "; 332 if($sql->db_Select_gen($qry)) 333 { 334 $ret['messages'] = $sql->db_getList(); 335 $ret['total_messages'] = $total_messages; 336 } 337 return $ret; 338 } 339 } 340 341 function pm_get_outbox($uid = USERID, $from = 0, $limit = 10) 342 { 343 global $sql; 344 if(intval($limit < 1)) { $limit = 10; } 345 if($total_messages = $sql->db_Count("private_msg", "(*)", "WHERE pm_from='{$uid}' AND pm_sent_del=0")) 346 { 347 $qry = " 348 SELECT pm.*, u.user_image, u.user_name FROM #private_msg AS pm 349 LEFT JOIN #user AS u ON u.user_id = pm.pm_to 350 WHERE pm.pm_from='{$uid}' AND pm.pm_sent_del=0 351 ORDER BY pm.pm_sent DESC 352 LIMIT ".intval($from).", ".intval($limit)." 353 "; 354 if($sql->db_Select_gen($qry)) 355 { 356 $ret['messages'] = $sql->db_getList(); 357 $ret['total_messages'] = $total_messages; 358 } 359 } 360 return $ret; 361 } 362 363 function send_file($pmid, $filenum) 364 { 365 global $pref; 366 $pm_info = $this->pm_get($pmid); 367 $attachments = explode(chr(0), $pm_info['pm_attachments']); 368 if(!isset($attachments[$filenum])) 369 { 370 return FALSE; 371 } 372 $fname = $attachments[$filenum]; 373 list($timestamp, $fromid, $rand, $file) = explode("_", $fname, 4); 374 $filename = getcwd()."/attachments/{$fname}"; 375 376 if($fromid != $pm_info['pm_from']) 377 { 378 return FALSE; 379 } 380 if(!is_file($filename)) 381 { 382 return FALSE; 383 } 384 @set_time_limit(10 * 60); 385 @e107_ini_set("max_execution_time", 10 * 60); 386 while (@ob_end_clean()); // kill all output buffering else it eats server resources 387 if (connection_status() == 0) 388 { 389 if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) { 390 $file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1); 391 } 392 if (isset($_SERVER['HTTP_RANGE'])) 393 { 394 $seek = intval(substr($_SERVER['HTTP_RANGE'] , strlen('bytes='))); 395 } 396 $bufsize = 2048; 397 ignore_user_abort(true); 398 $data_len = filesize($filename); 399 if ($seek > ($data_len - 1)) $seek = 0; 400 $res =& fopen($filename, 'rb'); 401 if ($seek) 402 { 403 fseek($res , $seek); 404 } 405 $data_len -= $seek; 406 header("Expires: 0"); 407 header("Cache-Control: max-age=30" ); 408 header("Content-Type: application/force-download"); 409 header("Content-Disposition: attachment; filename={$file}"); 410 header("Content-Length: {$data_len}"); 411 header("Pragma: public"); 412 if ($seek) 413 { 414 header("Accept-Ranges: bytes"); 415 header("HTTP/1.0 206 Partial Content"); 416 header("status: 206 Partial Content"); 417 header("Content-Range: bytes {$seek}-".($data_len - 1)."/{$data_len}"); 418 } 419 while (!connection_aborted() && $data_len > 0) 420 { 421 echo fread($res , $bufsize); 422 $data_len -= $bufsize; 423 } 424 fclose($res); 425 } 426 } 427 } 428 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Apr 1 01:23:32 2007 | par Balluche grâce à PHPXref 0.7 |