| version 1.9, 2005/04/16 13:14:26 |
version 1.10, 2005/04/25 19:31:15 |
|
|
| <?php |
<?php |
| |
|
| // $Platon: mylist/backend/receiver/receiver.php,v 1.8 2005/04/15 21:36:01 majo Exp $ |
// $Platon: mylist/backend/receiver/receiver.php,v 1.9 2005/04/16 13:14:26 majo Exp $ |
| |
|
| require_once "validator.php"; |
require_once "validator.php"; |
| require_once "../../mylist.config.php"; |
require_once "../../mylist.config.php"; |
| require_once "../shared/emailMessage.php"; |
require_once "../shared/emailMessage.php"; |
| Line 17 class CReceiver { |
|
| Line 18 class CReceiver { |
|
| // object of the CEmailMessage class |
// object of the CEmailMessage class |
| // contains modified headers (prefix, signature, etc) |
// contains modified headers (prefix, signature, etc) |
| var $modifiedMessage; |
var $modifiedMessage; |
| |
|
| var $indexer; // indexes message |
var $indexer; // indexes message |
| |
|
| // this function decides wheter an incomming email message will be accepted or not |
// this function decides wheter an incomming email message will be accepted or not |
| // all conditions (senders allowed, max_message_size) must be ok |
// all conditions (senders allowed, max_message_size) must be ok |
| function validateEmail($filename) |
function validateEmail($filename) |
| { |
{ // {{{ |
| |
|
| $this->validator = new CValidator(); |
$this->validator = new CValidator(); |
| $this->validator->openEmailMessage($filename); |
$this->validator->openEmailMessage($filename); |
| $this->validator->parseEmail(); |
$this->validator->parseEmail(); |
| $this->validator->getAllNeccessaryEmails(); |
$this->validator->getAllNeccessaryEmails(); |
| $this->validator->validateEmail(); |
$this->validator->validateEmail(); |
| // the result is in $this->validator->arrAccepted; |
// the result is in $this->validator->arrAccepted; |
| |
|
| } |
} // }}} |
| |
|
| |
|
| function processAccepted() |
function processAccepted() |
| { |
{ // {{{ |
| echo "akceptovane mailinglisty: \n"; |
echo "akceptovane mailinglisty: \n"; |
| print_r($this->validator->arrAccepted); |
print_r($this->validator->arrAccepted); |
| // $arrAccepted is a array of ids of accepted mailinglists |
// $arrAccepted is a array of ids of accepted mailinglists |
| for($i = 0; $i < Count($this->validator->arrAccepted); $i++) |
for($i = 0; $i < Count($this->validator->arrAccepted); $i++) |
| { // for each mailinglist we generate queue of recipients |
{ // for each mailinglist we generate queue of recipients |
| $queue_id = $this->processMessage($this->validator->arrAccepted[$i]); |
$queue_id = $this->processMessage($this->validator->arrAccepted[$i]); |
| if ($queue_id) |
if ($queue_id) |
| $this->generateRecipients($this->validator->arrAccepted[$i], $queue_id); |
$this->generateRecipients($this->validator->arrAccepted[$i], $queue_id); |
| } |
} |
| |
|
| return $i; // returns number of accepted files |
return $i; // returns number of accepted files |
| } |
} // }}} |
| |
|
| |
|
| function processMessage($list_id) |
function processMessage($list_id) |
| { |
{ // {{{ |
| $this->modifiedMessage = new CModifiedEmailMessage(); |
$this->modifiedMessage = new CModifiedEmailMessage(); |
| $this->modifyMessage($list_id); |
$this->modifyMessage($list_id); |
| $message_queue_id = $this->insertMessageIntoQueue($list_id); |
$message_queue_id = $this->insertMessageIntoQueue($list_id); |
| |
|
| global $dbh; |
global $dbh; |
| |
|
| $sql = "SELECT f_archive FROM mylist_lists WHERE id = $list_id"; |
$sql = "SELECT f_archive FROM mylist_lists WHERE id = $list_id"; |
| $f_archive =& $dbh->getOne($sql); |
$f_archive =& $dbh->getOne($sql); |
| |
|
| if ($f_archive) |
if ($f_archive) |
| { |
{ |
| $archive_id = $this->archiveMessage($list_id); |
$archive_id = $this->archiveMessage($list_id); |
| if ($archive_id) |
if ($archive_id) |
| { |
{ |
| $this->setParentID($archive_id); |
$this->setParentID($archive_id); |
| |
|
| $this->indexer = new CIndexer(); |
$this->indexer = new CIndexer(); |
| $this->indexer->subject = $this->modifiedMessage->subject; |
$this->indexer->subject = $this->modifiedMessage->subject; |
| $this->indexer->header = $this->validator->emailMessage->structure->headers; |
$this->indexer->header = $this->validator->emailMessage->structure->headers; |
| Line 75 class CReceiver { |
|
| Line 78 class CReceiver { |
|
| // text attachements to db, others to filesystem |
// text attachements to db, others to filesystem |
| if ($this->messageHasAttachements()) |
if ($this->messageHasAttachements()) |
| $this->processAttachements($archive_id); |
$this->processAttachements($archive_id); |
| |
|
| $this->indexer->indexMessage($archive_id); |
$this->indexer->indexMessage($archive_id); |
| } |
} |
| } |
} |
| |
|
| return $message_queue_id; |
return $message_queue_id; |
| } |
} // }}} |
| |
|
| |
|
| |
|
| function modifyMessage($_list_id) |
function modifyMessage($_list_id) |
| { |
{ // {{{ |
| global $dbh; |
global $dbh; |
| global $MLIST_CRLF, $errors_to; |
global $MLIST_CRLF, $errors_to; |
| |
|
| $sql = "SELECT name, f_reply_to_mlist, f_prefix_subject, "; |
$sql = "SELECT name, f_reply_to_mlist, f_prefix_subject, "; |
| $sql .= "prefix, f_append_sig, signature "; |
$sql .= "prefix, f_append_sig, signature "; |
| $sql .= "FROM mylist_lists WHERE id = $_list_id"; |
$sql .= "FROM mylist_lists WHERE id = $_list_id"; |
| |
|
| $res =& $dbh->query($sql); |
$res =& $dbh->query($sql); |
| if (PEAR::isError($res)) |
if (PEAR::isError($res)) |
| die($res->getMessage()); |
die($res->getMessage()); |
| Line 101 class CReceiver { |
|
| Line 103 class CReceiver { |
|
| $res->fetchInto($row, DB_FETCHMODE_ASSOC); |
$res->fetchInto($row, DB_FETCHMODE_ASSOC); |
| // original message is in $this->validator->emailMessage |
// original message is in $this->validator->emailMessage |
| // modified message will be in $this->modifiedMessage |
// modified message will be in $this->modifiedMessage |
| |
|
| |
|
| // **************************************************** |
// **************************************************** |
| // ************* HEADERS MODIFICATIONS **************** |
// ************* HEADERS MODIFICATIONS **************** |
| |
|
| //$_header = "From: ".$this->validator->emailMessage->structure->headers["from"].$MLIST_CRLF; |
//$_header = "From: ".$this->validator->emailMessage->structure->headers["from"].$MLIST_CRLF; |
| $_header = "From: ".$this->validator->emailMessage->structure->headers["from"]."\n"; |
$_header = "From: ".$this->validator->emailMessage->structure->headers["from"]."\n"; |
| $_header .= "X-Mailinglist-From: ".$row["name"]."\n"; |
$_header .= "X-Mailinglist-From: ".$row["name"]."\n"; |
| Line 114 class CReceiver { |
|
| Line 116 class CReceiver { |
|
| if (isset($this->validator->emailMessage->structure->headers["in-reply-to"])) |
if (isset($this->validator->emailMessage->structure->headers["in-reply-to"])) |
| //$_header .= "In-Reply-To: ".$this->validator->emailMessage->structure->headers["in-reply-to"].$MLIST_CRLF; |
//$_header .= "In-Reply-To: ".$this->validator->emailMessage->structure->headers["in-reply-to"].$MLIST_CRLF; |
| $_header .= "In-Reply-To: ".$this->validator->emailMessage->structure->headers["in-reply-to"]."\n"; |
$_header .= "In-Reply-To: ".$this->validator->emailMessage->structure->headers["in-reply-to"]."\n"; |
| |
|
| if (isset($this->validator->emailMessage->structure->headers["references"])) |
if (isset($this->validator->emailMessage->structure->headers["references"])) |
| $_header .= "References: ".$this->validator->emailMessage->structure->headers["references"]."\n"; |
$_header .= "References: ".$this->validator->emailMessage->structure->headers["references"]."\n"; |
| //$_header .= "References: ".$this->validator->emailMessage->structure->headers["references"].$MLIST_CRLF; |
//$_header .= "References: ".$this->validator->emailMessage->structure->headers["references"].$MLIST_CRLF; |
| |
|
| if ($row["f_reply_to_mlist"]) |
if ($row["f_reply_to_mlist"]) |
| $_header .= "Reply-To: ".$row["name"]; |
$_header .= "Reply-To: ".$row["name"]; |
| else |
else |
| $_header .= "Reply-To: ".$this->validator->emailMessage->structure->headers["from"]; |
$_header .= "Reply-To: ".$this->validator->emailMessage->structure->headers["from"]; |
| |
|
| // received headers |
// received headers |
| if (is_array($this->validator->emailMessage->structure->headers["received"])) |
if (is_array($this->validator->emailMessage->structure->headers["received"])) |
| { |
{ |
| Reset($this->validator->emailMessage->structure->headers["received"]); |
Reset($this->validator->emailMessage->structure->headers["received"]); |
| While(Current($this->validator->emailMessage->structure->headers["received"])) |
While(Current($this->validator->emailMessage->structure->headers["received"])) |
| { |
{ |
| |
|
| //$_header .= $MLIST_CRLF."Received: ".Current($this->validator->emailMessage->structure->headers["received"]); |
|
| $_header .= "\nReceived: ".Current($this->validator->emailMessage->structure->headers["received"]); |
|
| |
|
| Next($this->validator->emailMessage->structure->headers["received"]); |
//$_header .= $MLIST_CRLF."Received: ".Current($this->validator->emailMessage->structure->headers["received"]); |
| } |
$_header .= "\nReceived: ".Current($this->validator->emailMessage->structure->headers["received"]); |
| |
|
| |
Next($this->validator->emailMessage->structure->headers["received"]); |
| |
} |
| } |
} |
| else if (isset($this->validator->emailMessage->structure->headers["received"])) |
else if (isset($this->validator->emailMessage->structure->headers["received"])) |
| { |
{ |
| //$_header .= $MLIST_CRLF."Received: ".$this->validator->emailMessage->structure->headers["received"]; |
//$_header .= $MLIST_CRLF."Received: ".$this->validator->emailMessage->structure->headers["received"]; |
| $_header .= "\nReceived: ".$this->validator->emailMessage->structure->headers["received"]; |
$_header .= "\nReceived: ".$this->validator->emailMessage->structure->headers["received"]; |
| } |
} |
| |
|
| |
|
| // ************* PREXIF SUBJECT *********************** |
// ************* PREXIF SUBJECT *********************** |
| |
|
| $subject = $this->validator->emailMessage->structure->headers["subject"]; |
$subject = $this->validator->emailMessage->structure->headers["subject"]; |
| |
|
| if ($row["f_prefix_subject"]) |
if ($row["f_prefix_subject"]) |
| { |
{ |
| if (!( ($pos=StrPos($subject,"[".$row["prefix"]."]")) || ($subject[0] == "[".$row["prefix"]."]") )) |
if (!( ($pos=StrPos($subject,"[".$row["prefix"]."]")) || ($subject[0] == "[".$row["prefix"]."]") )) |
| Line 157 class CReceiver { |
|
| Line 159 class CReceiver { |
|
| } |
} |
| else |
else |
| $this->modifiedMessage->subject = $subject; |
$this->modifiedMessage->subject = $subject; |
| |
|
| |
|
| $_header .= "\nSubject: ".$this->modifiedMessage->subject; |
$_header .= "\nSubject: ".$this->modifiedMessage->subject; |
| |
|
| |
|
| |
|
| // **************************************************** |
// **************************************************** |
| Line 170 class CReceiver { |
|
| Line 172 class CReceiver { |
|
| // ************** OTHERS *************** |
// ************** OTHERS *************** |
| |
|
| if (isset($this->validator->emailMessage->structure->headers["mime-version"])) |
if (isset($this->validator->emailMessage->structure->headers["mime-version"])) |
| // $_header .= $MLIST_CRLF."MIME-Version: ".$this->validator->emailMessage->structure->headers["mime-version"].$MLIST_CRLF; |
// $_header .= $MLIST_CRLF."MIME-Version: ".$this->validator->emailMessage->structure->headers["mime-version"].$MLIST_CRLF; |
| $_header .= "\nMIME-Version: ".$this->validator->emailMessage->structure->headers["mime-version"]; |
$_header .= "\nMIME-Version: ".$this->validator->emailMessage->structure->headers["mime-version"]; |
| |
|
| if (isset($this->validator->emailMessage->structure->headers["content-type"])) |
if (isset($this->validator->emailMessage->structure->headers["content-type"])) |
| //$_header .= "Content-Type: ".$this->validator->emailMessage->structure->headers["content-type"].$MLIST_CRLF; |
//$_header .= "Content-Type: ".$this->validator->emailMessage->structure->headers["content-type"].$MLIST_CRLF; |
| $_header .= "\nContent-Type: ".$this->validator->emailMessage->structure->headers["content-type"]; |
$_header .= "\nContent-Type: ".$this->validator->emailMessage->structure->headers["content-type"]; |
| Line 187 class CReceiver { |
|
| Line 189 class CReceiver { |
|
| |
|
| // **************************************************** |
// **************************************************** |
| // ************* BODY MODIFICATIONS ******************* |
// ************* BODY MODIFICATIONS ******************* |
| |
|
| |
|
| if ($row["f_append_sig"]) |
if ($row["f_append_sig"]) |
| { |
{ |
| if (! $this->messageHasAttachements()) |
if (! $this->messageHasAttachements()) |
| { |
{ |
| $this->modifiedMessage->body = $this->validator->emailMessage->body."\n_______________________________________________________________________________\n".$row["signature"]; |
$this->modifiedMessage->body = $this->validator->emailMessage->body."\n_______________________________________________________________________________\n".$row["signature"]; |
| |
|
| $this->emailMessage->plain_body = $this->modifiedMessage->body; |
$this->emailMessage->plain_body = $this->modifiedMessage->body; |
| } |
} |
| else |
else |
| Line 204 class CReceiver { |
|
| Line 206 class CReceiver { |
|
| $finalbody = $this->addSignature($row["signature"],$plainbody); |
$finalbody = $this->addSignature($row["signature"],$plainbody); |
| $this->modifiedMessage->body = $finalbody; |
$this->modifiedMessage->body = $finalbody; |
| $this->emailMessage->plain_body = $plainbody."\r\n".$row["signature"]; |
$this->emailMessage->plain_body = $plainbody."\r\n".$row["signature"]; |
| |
|
| } |
} |
| } |
} |
| else |
else |
| { |
{ |
| $this->modifiedMessage->body = $this->validator->emailMessage->body; |
$this->modifiedMessage->body = $this->validator->emailMessage->body; |
| |
|
| if (! $this->messageHasAttachements()) |
if (! $this->messageHasAttachements()) |
| $this->emailMessage->plain_body = $this->modifiedMessage->body; |
$this->emailMessage->plain_body = $this->modifiedMessage->body; |
| else |
else |
| Line 219 class CReceiver { |
|
| Line 221 class CReceiver { |
|
| $this->emailMessage->plain_body = $plainbody; |
$this->emailMessage->plain_body = $plainbody; |
| } |
} |
| } |
} |
| |
|
| // **************************************************** |
// **************************************************** |
| // **************************************************** |
// **************************************************** |
| } |
} // }}} |
| |
|
| |
|
| function insertMessageIntoQueue($_list_id) |
function insertMessageIntoQueue($_list_id) |
| { |
{ // {{{ |
| global $dbh; |
global $dbh; |
| |
|
| $sql = "INSERT INTO mylist_queue_messages (message_header, message_body) VALUES "; |
$sql = "INSERT INTO mylist_queue_messages (message_header, message_body) VALUES "; |
| $sql .= "('".AddSlashes($this->modifiedMessage->header)."', '".AddSlashes($this->modifiedMessage->body)."')"; |
$sql .= "('".AddSlashes($this->modifiedMessage->header)."', '".AddSlashes($this->modifiedMessage->body)."')"; |
| $res =& $dbh->query($sql); |
$res =& $dbh->query($sql); |
| if (PEAR::isError($res)) |
if (PEAR::isError($res)) |
| die($res->getMessage()); |
die($res->getMessage()); |
| |
|
| $sql ="SELECT id FROM mylist_queue_messages WHERE message_header LIKE '".AddSlashes($this->modifiedMessage->header)."' AND message_body LIKE '".AddSlashes($this->modifiedMessage->body)."' ORDER BY id DESC"; |
$sql ="SELECT id FROM mylist_queue_messages WHERE message_header LIKE '".AddSlashes($this->modifiedMessage->header)."' AND message_body LIKE '".AddSlashes($this->modifiedMessage->body)."' ORDER BY id DESC"; |
| |
|
| |
|
| Line 244 class CReceiver { |
|
| Line 246 class CReceiver { |
|
| |
|
| $res->fetchInto($row); |
$res->fetchInto($row); |
| return $row["id"]; |
return $row["id"]; |
| } |
} // }}} |
| |
|
| |
|
| function removeBrackets($messageID) |
function removeBrackets($messageID) |
| { |
{ // {{{ |
| if ( eregi("^<(.+)>$", $messageID, $textParts)) |
if ( eregi("^<(.+)>$", $messageID, $textParts)) |
| return $textParts[1]; |
return $textParts[1]; |
| |
|
| } |
} // }}} |
| |
|
| |
|
| function generateRecipients($list_id, $queue_id) |
function generateRecipients($list_id, $queue_id) |
| { |
{ // {{{ |
| global $dbh; |
global $dbh; |
| global $tb_users, $cl_users_id, $cl_users_email; |
global $tb_users, $cl_users_id, $cl_users_email; |
| |
|
| $sql = "SELECT mylist_list_users.email as list_email, $tb_users.$cl_users_email as reg_email, "; |
$sql = "SELECT mylist_list_users.email as list_email, $tb_users.$cl_users_email as reg_email, "; |
| $sql .= "mylist_lists.f_mail_back_to_sender "; |
$sql .= "mylist_lists.f_mail_back_to_sender "; |
| $sql .= "FROM mylist_list_users, $tb_users, mylist_lists "; |
$sql .= "FROM mylist_list_users, $tb_users, mylist_lists "; |
| Line 266 class CReceiver { |
|
| Line 270 class CReceiver { |
|
| $sql .= "$tb_users.$cl_users_id = mylist_list_users.user_id "; |
$sql .= "$tb_users.$cl_users_id = mylist_list_users.user_id "; |
| $sql .= " AND "; |
$sql .= " AND "; |
| $sql .= "mylist_lists.id = $list_id"; |
$sql .= "mylist_lists.id = $list_id"; |
| |
|
| |
|
| $res =& $dbh->query($sql); |
$res =& $dbh->query($sql); |
| if (PEAR::isError($res)) |
if (PEAR::isError($res)) |
| die($res->getMessage()); |
die($res->getMessage()); |
| |
|
| while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) |
while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) |
| { |
{ |
| if (!(!$row["f_mail_back_to_sender"] && ($this->validator->emailMessage->sender == ((StrLen($row["list_email"]) != 0) ? $row["list_email"] : $row["reg_email"]) ))) |
if (!(!$row["f_mail_back_to_sender"] && ($this->validator->emailMessage->sender == ((StrLen($row["list_email"]) != 0) ? $row["list_email"] : $row["reg_email"]) ))) |
| { |
{ |
| $sql = "INSERT INTO mylist_queue "; |
$sql = "INSERT INTO mylist_queue "; |
| $sql .= "(queue_message_id, recipient, dt_queued) "; |
$sql .= "(queue_message_id, recipient, dt_queued) "; |
| $sql .= "VALUES ("; |
$sql .= "VALUES ("; |
| $sql .= $queue_id.", "; |
$sql .= $queue_id.", "; |
| $sql .= "'".((StrLen($row["list_email"]) != 0)? $row["list_email"] : $row["reg_email"])."', "; |
$sql .= "'".((StrLen($row["list_email"]) != 0)? $row["list_email"] : $row["reg_email"])."', "; |
| $sql .= "'".Date("Y-m-d H:i:s")."')"; |
$sql .= "'".Date("Y-m-d H:i:s")."')"; |
| |
|
| |
|
| $res2 =& $dbh->query($sql); |
$res2 =& $dbh->query($sql); |
| if (PEAR::isError($res2)) |
if (PEAR::isError($res2)) |
| if (StrCmp("DB Error: already exists", $res2->getMessage()) != 0) |
if (StrCmp("DB Error: already exists", $res2->getMessage()) != 0) |
| die($res2->getMessage()); |
die($res2->getMessage()); |
| else |
else |
| echo "nepridavam - existuje list_id = $list_id, queue_id = $queue_id, email = ".((StrLen($row["list_email"]) != 0)? $row["list_email"] : $row["reg_email"])."\n"; |
echo "nepridavam - existuje list_id = $list_id, queue_id = $queue_id, email = ".((StrLen($row["list_email"]) != 0)? $row["list_email"] : $row["reg_email"])."\n"; |
| |
|
| else |
else |
| echo "pridavam list_id = $list_id, queue_id = $queue_id, email = ".((StrLen($row["list_email"]) != 0)? $row["list_email"] : $row["reg_email"])."\n"; |
echo "pridavam list_id = $list_id, queue_id = $queue_id, email = ".((StrLen($row["list_email"]) != 0)? $row["list_email"] : $row["reg_email"])."\n"; |
| |
|
| } |
|
| } |
|
| } |
|
| |
|
| |
|
| |
} |
| |
} |
| |
} // }}} |
| |
|
| |
|
| function archiveMessage($_list_id) |
function archiveMessage($_list_id) |
| { |
{ // {{{ |
| // header, body, subject was alredy set in $this->modifyMessage(); |
// header, body, subject was alredy set in $this->modifyMessage(); |
| $this->modifiedMessage->from = $this->validator->emailMessage->sender; |
$this->modifiedMessage->from = $this->validator->emailMessage->sender; |
| $this->modifiedMessage->dt_header = Date("Y-m-d H:i:s", StrToTime($this->validator->emailMessage->structure->headers["date"])); |
$this->modifiedMessage->dt_header = Date("Y-m-d H:i:s", StrToTime($this->validator->emailMessage->structure->headers["date"])); |
| Line 314 class CReceiver { |
|
| Line 316 class CReceiver { |
|
| $sql .= "(list_id, messageid, `from`, dt_header, dt_received, "; |
$sql .= "(list_id, messageid, `from`, dt_header, dt_received, "; |
| $sql .= "header, subject, body) VALUES "; |
$sql .= "header, subject, body) VALUES "; |
| $sql .= "($_list_id, '".$this->modifiedMessage->messageID."', '".AddSlashes($this->modifiedMessage->from)."', '".$this->modifiedMessage->dt_header."', '".$this->modifiedMessage->dt_received."', '".AddSlashes($this->validator->emailMessage->header)."', '".AddSlashes($this->modifiedMessage->subject)."', '".AddSlashes($this->emailMessage->plain_body)."')"; |
$sql .= "($_list_id, '".$this->modifiedMessage->messageID."', '".AddSlashes($this->modifiedMessage->from)."', '".$this->modifiedMessage->dt_header."', '".$this->modifiedMessage->dt_received."', '".AddSlashes($this->validator->emailMessage->header)."', '".AddSlashes($this->modifiedMessage->subject)."', '".AddSlashes($this->emailMessage->plain_body)."')"; |
| |
|
| |
|
| $res =& $dbh->query($sql); |
$res =& $dbh->query($sql); |
| if (PEAR::isError($res)) |
if (PEAR::isError($res)) |
| if (StrCmp("DB Error: already exists", $res->getMessage()) != 0) |
if (StrCmp("DB Error: already exists", $res->getMessage()) != 0) |
| Line 330 class CReceiver { |
|
| Line 332 class CReceiver { |
|
| |
|
| $res->fetchInto($row); |
$res->fetchInto($row); |
| return $row["id"]; |
return $row["id"]; |
| } |
} // }}} |
| |
|
| function setParentID($id) |
|
| { |
function setParentID($id) |
| global $dbh; |
{ // {{{ |
| |
global $dbh; |
| $in_reply_to = $this->validator->emailMessage->structure->headers["in-reply-to"]; |
|
| if (StrLen($in_reply_to) > 0) |
$in_reply_to = $this->validator->emailMessage->structure->headers["in-reply-to"]; |
| { |
if (StrLen($in_reply_to) > 0) |
| $sql = "SELECT id FROM mylist_messages WHERE messageid LIKE '".AddSlashes($in_reply_to)."'"; |
|
| |
|
| $res =& $dbh->getOne($sql); |
|
| if (PEAR::isError($res)) |
|
| die($res->getMessage()); |
|
| if ($res != "") |
|
| { |
|
| $sql = "UPDATE mylist_messages SET parent_id = '".AddSlashes($res)."' WHERE id = ".$id; |
|
| $res =& $dbh->query($sql); |
|
| if (PEAR::isError($res)) |
|
| die($res->getMessage()); |
|
| return; |
|
| } |
|
| } |
|
| |
|
| $references = Array(); |
|
| $references = explode(" ", $this->validator->emailMessage->structure->headers["references"]); |
|
| |
|
| for($i=Count($references); $i > 0; $i--) |
|
| { |
|
| if (StrLen($references[$i-1]) > 0) |
|
| { |
{ |
| $sql = "SELECT id FROM mylist_messages WHERE messageid LIKE '".AddSlashes($references[$i-1])."'"; |
$sql = "SELECT id FROM mylist_messages WHERE messageid LIKE '".AddSlashes($in_reply_to)."'"; |
| |
|
| $res =& $dbh->getOne($sql); |
$res =& $dbh->getOne($sql); |
| if (PEAR::isError($res)) |
if (PEAR::isError($res)) |
| die($res->getMessage()); |
die($res->getMessage()); |
| |
|
| if ($res != "") |
if ($res != "") |
| { |
{ |
| $sql = "UPDATE mylist_messages SET parent_id = '".AddSlashes($res)."' WHERE id = ".$id; |
$sql = "UPDATE mylist_messages SET parent_id = '".AddSlashes($res)."' WHERE id = ".$id; |
| $res =& $dbh->query($sql); |
$res =& $dbh->query($sql); |
| if (PEAR::isError($res)) |
if (PEAR::isError($res)) |
| die($res->getMessage()); |
die($res->getMessage()); |
| |
return; |
| return; |
|
| } |
} |
| } |
} |
| } |
|
| |
|
| |
|
| } |
|
| |
|
| |
$references = Array(); |
| |
$references = explode(" ", $this->validator->emailMessage->structure->headers["references"]); |
| |
|
| |
for($i=Count($references); $i > 0; $i--) |
| |
{ |
| |
if (StrLen($references[$i-1]) > 0) |
| |
{ |
| |
$sql = "SELECT id FROM mylist_messages WHERE messageid LIKE '".AddSlashes($references[$i-1])."'"; |
| |
$res =& $dbh->getOne($sql); |
| |
if (PEAR::isError($res)) |
| |
die($res->getMessage()); |
| |
|
| function messageHasAttachements() |
if ($res != "") |
| { |
{ |
| if (Is_Array($this->validator->emailMessage->structure->parts)) |
$sql = "UPDATE mylist_messages SET parent_id = '".AddSlashes($res)."' WHERE id = ".$id; |
| return true; |
$res =& $dbh->query($sql); |
| else |
if (PEAR::isError($res)) |
| return false; |
die($res->getMessage()); |
| } |
|
| |
|
| |
return; |
| |
} |
| |
} |
| |
} |
| |
|
| function getPlainBodyText() |
|
| { |
|
| |
|
| foreach ($this->validator->emailMessage->structure->parts as $part) |
} // }}} |
| { |
|
| |
|
| if (isset($part->disposition)) |
|
| { |
|
| |
|
| } |
|
| else if (is_Array($part->parts)) |
|
| { |
|
| Reset($part->parts); |
|
| While($field = Current($part->parts)) |
|
| { |
|
| if (($field->ctype_primary == "text") && ($field->ctype_secondary == "plain")) |
|
| return $field->body; |
|
| Next($part->parts); |
|
| } |
|
| |
|
| } |
|
| else if (($part->ctype_primary == "text") && ($part->ctype_secondary == "plain")) |
|
| return $part->body; |
|
| } |
|
| |
|
| } |
|
| |
|
| |
function messageHasAttachements() |
| |
{ // {{{ |
| |
if (Is_Array($this->validator->emailMessage->structure->parts)) |
| |
return true; |
| |
else |
| |
return false; |
| |
} // }}} |
| |
|
| function addSignature($signature,$plainbody) |
|
| { |
|
| $old_body = $this->validator->emailMessage->body; |
|
| $first_sign = "content-type: text/plain"; |
|
| |
|
| if (($pos=StrPos(strtolower($old_body),$first_sign)) || StrToLower($old_body[0]) == $first_sign) |
|
| { |
|
| $body_less = SubStr($old_body,$pos); |
|
| if (($pos2 = StrPos($body_less, $plainbody)) || $body_less[0] == $plain_body) |
|
| { |
|
| // teraz idem spravit vysledok |
|
| $result = ""; |
|
| $part1 = SubStr($old_body, 0 , $pos + $pos2 + StrLen($plainbody) ); |
|
| $part2 = SubStr($old_body, $pos + $pos2 + StrLen($plainbody)); |
|
| |
|
| $result = $part1."\r\n".$signature."\r\n".$part2; |
|
| return $result; |
|
| |
|
| |
function getPlainBodyText() |
| } |
{ // {{{ |
| |
|
| } |
|
| |
|
| // if something is wrong, return body without signature |
foreach ($this->validator->emailMessage->structure->parts as $part) |
| return $old_body; |
{ |
| } |
|
| |
if (isset($part->disposition)) |
| |
{ |
| |
|
| |
} |
| |
else if (is_Array($part->parts)) |
| |
{ |
| |
Reset($part->parts); |
| |
While($field = Current($part->parts)) |
| |
{ |
| |
if (($field->ctype_primary == "text") && ($field->ctype_secondary == "plain")) |
| |
return $field->body; |
| |
Next($part->parts); |
| |
} |
| |
|
| |
} |
| |
else if (($part->ctype_primary == "text") && ($part->ctype_secondary == "plain")) |
| |
return $part->body; |
| |
} |
| |
|
| |
} // }}} |
| |
|
| function processAttachements($id) |
|
| { |
|
| |
|
| global $dbh; |
function addSignature($signature,$plainbody) |
| |
{ // {{{ |
| |
$old_body = $this->validator->emailMessage->body; |
| |
$first_sign = "content-type: text/plain"; |
| |
|
| foreach ($this->validator->emailMessage->structure->parts as $part) |
if (($pos=StrPos(strtolower($old_body),$first_sign)) || StrToLower($old_body[0]) == $first_sign) |
| { |
|
| |
|
| if (isset($part->disposition) and ($part->disposition=='attachment')) |
|
| { |
|
| $filename = $part->d_parameters['filename']; |
|
| if ($filename == "") |
|
| $filename = "attachement"; |
|
| |
|
| $sql = "INSERT INTO mylist_message_atts "; |
|
| $sql .= "(message_id, atts_headers, atts_body, path, filename) "; |
|
| $sql .= "VALUES "; |
|
| $sql .= "($id, '".$part->ctype_primary."/".$part->ctype_secondary."', "; |
|
| |
|
| if ($part->ctype_primary == "text") |
|
| { |
{ |
| $sql .= "'".AddSlashes($part->body)."', '', '$filename')"; |
$body_less = SubStr($old_body,$pos); |
| $this->indexer->attachements .= $part->body."\n\n"; |
if (($pos2 = StrPos($body_less, $plainbody)) || $body_less[0] == $plain_body) |
| |
{ |
| |
// teraz idem spravit vysledok |
| |
$result = ""; |
| |
$part1 = SubStr($old_body, 0 , $pos + $pos2 + StrLen($plainbody) ); |
| |
$part2 = SubStr($old_body, $pos + $pos2 + StrLen($plainbody)); |
| |
|
| |
$result = $part1."\r\n".$signature."\r\n".$part2; |
| |
return $result; |
| |
|
| |
|
| |
} |
| |
|
| } |
} |
| else |
|
| |
// if something is wrong, return body without signature |
| |
return $old_body; |
| |
} // }}} |
| |
|
| |
|
| |
function processAttachements($id) |
| |
{ // {{{ |
| |
|
| |
global $dbh; |
| |
|
| |
foreach ($this->validator->emailMessage->structure->parts as $part) |
| { |
{ |
| $path = $this->copyToFilesystem($part->body); |
|
| $sql .= "'', '$path', '$filename')"; |
if (isset($part->disposition) and ($part->disposition=='attachment')) |
| |
{ |
| |
$filename = $part->d_parameters['filename']; |
| |
if ($filename == "") |
| |
$filename = "attachement"; |
| |
|
| |
$sql = "INSERT INTO mylist_message_atts "; |
| |
$sql .= "(message_id, atts_headers, atts_body, path, filename) "; |
| |
$sql .= "VALUES "; |
| |
$sql .= "($id, '".$part->ctype_primary."/".$part->ctype_secondary."', "; |
| |
|
| |
if ($part->ctype_primary == "text") |
| |
{ |
| |
$sql .= "'".AddSlashes($part->body)."', '', '$filename')"; |
| |
$this->indexer->attachements .= $part->body."\n\n"; |
| |
} |
| |
else |
| |
{ |
| |
$path = $this->copyToFilesystem($part->body); |
| |
$sql .= "'', '$path', '$filename')"; |
| |
|
| |
} |
| |
|
| |
$res =& $dbh->query($sql); |
| |
if (PEAR::isError($res)) |
| |
die($res->getMessage()); |
| |
|
| |
|
| |
} |
| |
|
| } |
} |
| |
|
| $res =& $dbh->query($sql); |
} // }}} |
| if (PEAR::isError($res)) |
|
| die($res->getMessage()); |
|
| |
|
| |
|
| } |
|
| |
|
| } |
|
| |
|
| } |
function copyToFilesystem($content) |
| |
{ // {{{ |
| |
global $atts_dir_backend; |
| |
|
| |
Srand((double) MicroTime() * 1e6); |
| |
|
| function copyToFilesystem($content) |
|
| { |
|
| global $atts_dir_backend; |
|
| |
|
| Srand((double) MicroTime() * 1e6); |
|
| |
|
| $unique = Time(); |
|
| $unique .= "_".Rand(0,GetRandMax()); |
|
| |
|
| while ( File_Exists($unique)) |
|
| { |
|
| $unique = Time(); |
$unique = Time(); |
| $unique .= "_".Rand(0,GetRandMax()); |
$unique .= "_".Rand(0,GetRandMax()); |
| } |
|
| |
|
| $fp = fopen($atts_dir_backend.$unique, 'w'); |
while ( File_Exists($unique)) |
| fwrite($fp, $content); |
{ |
| fclose($fp); |
$unique = Time(); |
| |
$unique .= "_".Rand(0,GetRandMax()); |
| |
} |
| |
|
| |
$fp = fopen($atts_dir_backend.$unique, 'w'); |
| |
fwrite($fp, $content); |
| |
fclose($fp); |
| |
|
| return $unique; |
return $unique; |
| } |
} // }}} |
| |
|
| } |
} |
| |
|
| |
// vim: fdm=marker fdl=0 fdc=3 |
| ?> |
?> |
| |
|
| |
|