Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Tue, Jun 24, 11:28 PM

in-portal

Index: branches/unlabeled/unlabeled-1.58.2/kernel/include/emailmessage.php
===================================================================
--- branches/unlabeled/unlabeled-1.58.2/kernel/include/emailmessage.php (nonexistent)
+++ branches/unlabeled/unlabeled-1.58.2/kernel/include/emailmessage.php (revision 6137)
@@ -0,0 +1,1006 @@
+<?php
+class clsEmailMessage extends clsParsedItem
+{
+ var $Event = "";
+ var $Item;
+ var $headers = array();
+ var $subject = "";
+ var $body = "";
+ var $TemplateParsed = FALSE;
+ var $recipient = NULL;
+ var $fromuser = NULL;
+
+ function clsEmailMessage($MessageId=NULL,$Item=NULL)
+ {
+ $this->clsParsedItem();
+ $this->tablename = GetTablePrefix()."EmailMessage";
+ $this->Item = $Item;
+ $this->BasePermission = "EMAIL";
+ $this->id_field = "EmailMessageId";
+ $this->TagPrefix = "email";
+ $this->NoResourceId=1;
+ if($MessageId)
+ $this->LoadFromDatabase($MessageId);
+ }
+
+ function LoadEvent($event,$language=NULL)
+ {
+ global $objConfig, $objLanguages;
+
+ if(!strlen($language))
+ $language = $objLanguages->GetPrimary();
+ $sql = "SELECT * FROM ".$this->tablename." WHERE EventId = $event AND LanguageId=$language";
+ $rs = $this->adodbConnection->Execute($sql);
+ if($rs && !$rs->EOF)
+ {
+ $data = $rs->fields;
+ $this->SetFromArray($data);
+ $this->Clean();
+ return TRUE;
+ }
+ else
+ return FALSE;
+ }
+ function LoadFromDatabase($MessageId)
+ {
+ global $Errors;
+
+ $sql = sprintf("SELECT * FROM ".$this->tablename." WHERE ".$this->IdField()." = '%s'",$MessageId);
+ $result = $this->adodbConnection->Execute($sql);
+ if ($result === FALSE)
+ {
+ $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase");
+ return FALSE;
+ }
+ $data = $result->fields;
+ $this->SetFromArray($data);
+ return TRUE;
+ }
+
+ function EditTemplate()
+ {
+ }
+
+ /* read the template, split into peices */
+ function ReadTemplate()
+ {
+ if (!$this->TemplateParsed) {
+ $this->headers = Array();
+
+ // add footer: begin
+ $sql = 'SELECT em.Template
+ FROM '.$this->tablename.' em
+ LEFT JOIN '.TABLE_PREFIX.'Events e ON e.EventId = em.EventId
+ WHERE em.LanguageId = '.$this->Get('LanguageId').' AND e.Event = "COMMON.FOOTER"';
+ $footer = explode("\n\n", $this->Conn->GetOne($sql));
+
+ $email_object = &$this->Application->recallObject('kEmailMessage');
+ $email_object->Clear();
+
+ $footer = $this->Get('MessageType') == 'text' ? $email_object->convertHTMLtoPlain($footer[1]) : '<br/>'.$footer[1];
+
+ $template = $this->Get('Template')."\r\n".$footer;
+ // add footer: end
+
+ $template = str_replace("\r", '', $template);
+ $lines = explode("\n", $template);
+ $header_end = false;
+ $i = 0;
+ while(!$header_end && $i<count($lines))
+ {
+ $h = $lines[$i];
+ if (strlen(trim($h))==0 || ($h==".")) {
+ $header_end = true;
+ }
+ else {
+ $parts = explode(":",$h,2);
+
+ if (strtolower($parts[0])=="subject") {
+ $this->subject = $h;
+ }
+ else {
+ $this->headers[] = $h;
+ }
+ }
+ $i++;
+ }
+ while ($i<count($lines)) {
+ $this->body .= trim($lines[$i++])."\r\n";
+ }
+
+// $this->body .= "\r".$footer;
+ $this->TemplateParsed = true;
+
+
+ }
+ }
+
+ function ParseSection($text, $parser=null)
+ {
+ global $objUsers, $objTemplate;
+
+ $res = $this->ParseTemplateText($text);
+
+ /* parse email class tags */
+ if(!is_object($this->fromuser))
+ {
+ $this->fromuser = $objUsers->GetItem($this->Get("FromUserId"));
+ $this->fromuser->TagPrefix = "fromuser";
+ }
+
+ /* parse from user object */
+ if(is_object($this->fromuser))
+ {
+ $res = $this->fromuser->ParseTemplateText($res);
+ }
+
+ /* parse recipient user object */
+ if(is_object($this->recipient))
+ {
+ $res = $this->recipient->ParseTemplateText($res);
+ }
+
+ //print_pre($this->Item);
+ if(is_object($this->Item))
+ {
+ $res = $this->Item->ParseTemplateText($res);
+ }
+ else
+ {
+
+ if(!is_object($objTemplate))
+ $objTemplate = new clsTemplateList(" ");
+ $res = $objTemplate->ParseTemplateText($res);
+ }
+
+ return $res;
+ }
+
+ function SendToGroup($GroupId)
+ {
+ global $objUsers;
+
+ $users = $objUsers->Query_GroupPortalUser("GroupId=$GroupId");
+ if(is_array($users))
+ {
+ foreach($users as $u)
+ {
+ $this->SendToUser($u->Get("PortalUserId"));
+ }
+ }
+ }
+
+ function SendToAddress($EmailAddress,$name="")
+ {
+ global $objUsers, $objEmailQueue,$objConfig;
+
+ $conn = &GetADODBConnection();
+ //$this->recipient = $objUsers->GetUser($UserId);
+ //$this->recipient->TagPrefix="touser";
+ if(strlen($EmailAddress))
+ {
+ $to_addr = $EmailAddress;
+ $this->ReadTemplate();
+
+ $subject = $this->ParseSection($this->subject);
+ $body = $this->ParseSection($this->body);
+
+ if(is_object($this->fromuser))
+ {
+ $FromAddr = $this->fromuser->Get("Email");
+ $FromName = trim($this->fromuser->Get("FirstName")." ".$this->fromuser->Get("LastName"));
+ }
+ if(!strlen($FromAddr))
+ {
+ $FromName = strip_tags( $objConfig->Get('Site_Name') );
+ $FromAddr = $objConfig->Get("Smtp_AdminMailFrom");
+ }
+
+ $charset = "ascii-us";
+ if($this->Get("MessageType")=="html")
+ {
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,"",$body,$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+ else
+ {
+// $body = nl2br($body);
+// $body = str_replace("<br />","\n",$body);
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+
+ /*$time = adodb_mktime();
+
+ $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To', '$subject', $time, '')";
+ $conn->Execute($sql); */
+
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+
+ function SendToUser($UserId)
+ {
+ global $objUsers, $objEmailQueue, $objConfig;
+
+ $conn = &GetADODBConnection();
+ //echo "Handling Event ".$this->Get("Event")." for user $UserId <br>\n";
+ $this->recipient = new clsPortalUser($UserId); // $objUsers->GetItem($UserId);
+ //echo "<PRE>";print_r($this->recipient); echo "</PRE>";
+ $this->recipient->TagPrefix="touser";
+ if($this->recipient->Get("PortalUserId")==$UserId)
+ {
+ $to_addr = $this->recipient->Get("Email");
+ $To = trim($this->recipient->Get("FirstName")." ".$this->recipient->Get("LastName"));
+
+ $this->ReadTemplate();
+
+ $subject = $this->ParseSection($this->subject, $this->recipient);
+ $body = $this->ParseSection($this->body);
+
+ if(!is_object($this->fromuser))
+ {
+ $this->fromuser = $objUsers->GetItem($this->Get("FromUserId"));
+ }
+ if(is_object($this->fromuser))
+ {
+ $FromAddr = $this->fromuser->Get("Email");
+ $FromName = trim($this->fromuser->Get("FirstName")." ".$this->fromuser->Get("LastName"));
+
+ $charset = "ascii-us";
+ }
+
+ if(!strlen($FromAddr))
+ {
+ $FromName = strip_tags( $objConfig->Get('Site_Name') );
+ $FromAddr = $objConfig->Get("Smtp_AdminMailFrom");
+ }
+// echo $this->Event;
+
+ if($this->Get("MessageType")=="html")
+ {
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,"",$body,$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+ else
+ {
+// $body = str_replace("\r", "", $body);
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+
+ /*$time = adodb_mktime();
+
+ $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To ($to_addr)', '$subject', $time, '')";
+ $conn->Execute($sql); */
+
+ return TRUE;
+ }
+ return FALSE;
+ }
+
+ function SendAdmin()
+ {
+ global $objUsers, $objConfig, $objEmailQueue;
+
+ $conn = &GetADODBConnection();
+
+ $this->recipient = $objUsers->GetUser($this->Get("FromUserId"));
+ $this->recipient->TagPrefix="touser";
+
+ if($this->recipient->Get("PortalUserId")==$this->Get("FromUserId") || strlen($this->recipient->Get("PortalUserId")) == 0)
+ {
+ $to_addr = $this->recipient->Get("Email");
+ $To = trim($this->recipient->Get("FirstName")." ".$this->recipient->Get("LastName"));
+ $this->ReadTemplate();
+
+ if (strlen($to_addr) == 0) {
+ $to_addr = $objConfig->Get("Smtp_AdminMailFrom");
+ }
+
+ $subject = $this->ParseSection($this->subject);
+ $body = $this->ParseSection($this->body);
+ $FromName = strip_tags( $objConfig->Get('Site_Name') );
+ $FromAddr = $objConfig->Get("Smtp_AdminMailFrom");
+ if(strlen($FromAddr))
+ {
+ $charset = "ascii-us";
+ if($this->Get("MessageType")=="html")
+ {
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,"",$body,$charset,$this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+ else
+ {
+// $body = str_replace("\r", "", $body);
+ $objEmailQueue->SendMail($FromAddr,$FromName,$to_addr,$To,$subject,$body,"",$charset, $this->Get("Event"),NULL,NULL,NULL,$this->headers);
+ }
+
+ /* $time = adodb_mktime();
+
+ $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To ($to_addr)', '$subject', $time, '')";
+ $conn->Execute($sql);
+ */
+ return TRUE;
+ }
+ }
+ return FALSE;
+ }
+
+ function ParseTemplateText($text)
+ {
+ $html = $text;
+ $search = "<inp:";
+ //$search = "<inp:".$this->TagPrefix;
+ //$next_tag = strpos($html,"<inp:");
+ $next_tag = strpos($html,$search);
+
+ while($next_tag)
+ {
+ $closer = strpos(strtolower($html),">",$next_tag);
+ $end_tag = strpos($html,"/>",$next_tag);
+ if($end_tag < $closer || $closer == 0)
+ {
+ $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+2);
+ $pre = substr($html,0,$next_tag);
+ $post = substr($html,$end_tag+2);
+ $inner = $this->ParseElement($tagtext);
+ $html = $pre.$inner.$post;
+ }
+ else
+ {
+
+ $OldTagStyle = "</inp>";
+
+ ## Try to find end of TagName
+ $TagNameEnd = strpos($html, " ", $next_tag);
+
+ ## Support Old version
+// $closer = strpos(strtolower($html),"</inp>",$next_tag);
+ if ($TagNameEnd)
+ {
+ $Tag = strtolower(substr($html, $next_tag, $TagNameEnd-$next_tag));
+ $TagName = explode(":", $Tag);
+ if (strlen($TagName[1]))
+ $CloserTag = "</inp:".$TagName[1].">";
+ }
+ else
+ {
+ $CloserTag = $OldTagStyle;
+ }
+
+ $closer = strpos(strtolower($html), $CloserTag, $next_tag);
+
+ ## Try to find old tag closer
+ if (!$closer && ($CloserTag != $OldTagStyle))
+ {
+ $CloserTag = $OldTagStyle;
+ $closer = strpos(strtolower($html), $CloserTag, $next_tag);
+ }
+
+ $end_tag = strpos($html,">",$next_tag);
+ $tagtext = substr($html,$next_tag,($end_tag - $next_tag)+1);
+ $pre = substr($html,0,$next_tag);
+ $inner = substr($html,$end_tag+1,$closer-($end_tag+1));
+ $post = substr($html,$end_tag+1+strlen($inner) + strlen($CloserTag));
+ //echo "PRE:". htmlentities($pre,ENT_NOQUOTES);
+ //echo "INNER:". htmlentities($inner,ENT_NOQUOTES);
+ //echo "POST:". htmlentities($post,ENT_NOQUOTES);
+
+ $parsed = $this->ParseElement($tagtext);
+ if(strlen($parsed))
+ {
+ $html = $pre.$this->ParseTemplateText($inner).$post;
+ }
+ else
+ $html = $pre.$post;
+ }
+ $next_tag = strpos($html,$search);
+ }
+ return $html;
+ }
+
+ function ParseElement($raw, $inner_html ="")
+ {
+ $tag = new clsHtmlTag($raw);
+ $tag->inner_html = $inner_html;
+
+ if($tag->parsed)
+ {
+ if($tag->name=="include" || $tag->name=="perm_include" || $tag->name=="lang_include")
+ {
+ $output = $this->Parser->IncludeTemplate($tag);
+ }
+ else
+ {
+ if (is_object($this->Item)) {
+ $this->Item->TagPrefix = $tag->name;
+ $output = $this->Item->ParseObject($tag);
+ }
+ else {
+ $output = $this->ParseObject($tag);
+ }
+
+ if(substr($output,0,9)=="Undefined")
+ {
+ $output = $tag->Execute();
+ // if(substr($output,0,8)="{Unknown")
+ // $output = $raw;
+ } return $output;
+ }
+ }
+ else
+ return "";
+ }
+}
+
+class clsEmailMessageList extends clsItemCollection
+{
+ function clsEmailMessageList()
+ {
+ $this->clsItemCollection();
+ $this->classname = "clsEmailMessage";
+ $this->SourceTable = GetTablePrefix()."EmailMessage";
+ $this->PerPageVar = "Perpage_EmailEvents";
+ $this->AdminSearchFields = array("Template","Description", "Module","Event");
+ }
+
+ function LoadLanguage($LangId=NULL)
+ {
+ global $objLanguages;
+
+ if(!$LangId)
+ $LangId = $objLanguages->GetPrimary();
+
+ $sql = "SELECT * FROM ".$this->SourceTable." WHERE LanguageId=$LangId";
+ $this->Clear();
+ return $this->Query_Item($sql);
+ }
+
+ function &AddEmailEvent($Template, $Type, $LangId, $EventId)
+ {
+ $e = new clsEmailMessage();
+ $e->tablename = $this->SourceTable;
+ $e->Set(array("Template","MessageType","LanguageId","EventId"),
+ array($Template,$Type,$LangId,$EventId));
+ $e->Dirty();
+ $e->Create();
+
+ return $e;
+ }
+
+ function DeleteLanguage($LangId)
+ {
+ $sql = "DELETE FROM ".$this->SourceTable." WHERE LanguageId=$LangId OR LanguageId = 0";
+ if( $GLOBALS['debuglevel'] ) echo $sql."<br>\n";
+
+ $this->adodbConnection->Execute($sql);
+ }
+
+ function &GetMessage($EventId,$LangId,$LoadFromDB=TRUE)
+ {
+ $found=FALSE;
+
+ if(is_array($this->Items))
+ {
+ for($x=0;$x<count($this->Items);$x++)
+ {
+ $i =& $this->GetItemRefByIndex($x);
+ if(is_object($i))
+ {
+ if($i->Get("EventId")==$EventId && $i->Get("LanguageId")==$LangId)
+ {
+ $found=TRUE;
+ break;
+ }
+ }
+ }
+ }
+ if(!$found)
+ {
+ if($LoadFromDB)
+ {
+ $n = NULL;
+ $n = new $this->classname();
+ $n->tablename = $this->SourceTable;
+ if($n->LoadEvent($EventId,$LangId))
+ {
+ array_push($this->Items, $n);
+ $i =& $this->Items[count($this->Items)-1];
+ }
+ else
+ $i = FALSE;
+ }
+ else
+ $i = FALSE;
+ }
+ return $i;
+ }
+
+ function CreateEmptyEditTable($IdList, $use_parent = false)
+ {
+ global $objSession;
+
+ if (!$use_parent) {
+ $edit_table = $objSession->GetEditTable($this->SourceTable);
+ @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
+ $query = "SELECT * FROM ".$this->SourceTable." WHERE 0";
+ $insert = "CREATE TABLE ".$edit_table." ".$query;
+ if($objSession->HasSystemPermission("DEBUG.LIST"))
+ echo htmlentities($insert,ENT_NOQUOTES)."<br>\n";
+ $this->adodbConnection->Execute($insert);
+ $this->LoadLanguage();
+ $idvalue = -1;
+ for($i=0;$i<$this->NumItems();$i++)
+ {
+ $e =& $this->Items[$i];
+ $e->SourceTable = $edit_table;
+ if(is_array($IdList))
+ {
+ foreach($IdList as $id)
+ {
+ $e->UnsetIdField();
+ $e->Set("EmailMessageId",$idvalue--);
+ $e->Set("LanguageId",$id);
+// $e->Set("Description",admin_language("la_desc_emailevent_".$e->Get("Event"),$id));
+ $e->Create();
+ }
+ }
+ else
+ {
+ $e->UnsetIdField();
+ $e->Set("EmailMessageId",$idvalue--);
+ $e->Set("LanguageId",$IdList);
+// $e->Set("Description",admin_language("la_desc_emailevent_".$e->Get("Event"),$LangId));
+ $e->Create();
+ }
+ }
+ $this->Clear();
+ }
+ else {
+ parent::CreateEmptyEditTable($IdList);
+ }
+ }
+
+ function CopyFromEditTable()
+ {
+ global $objSession;
+ $GLOBALS['_CopyFromEditTable']=1;
+
+ $idfield = "EmailMessageId";
+ $edit_table = $objSession->GetEditTable($this->SourceTable);
+ $sql = "SELECT * FROM $edit_table WHERE LanguageId <> 0";
+ $rs = $this->adodbConnection->Execute($sql);
+ while($rs && !$rs->EOF)
+ {
+ $data = $rs->fields;
+ $c = new $this->classname;
+ $c->SetFromArray($data);
+ //$c->idfield = $idfield;
+ if($c->Get($idfield)<1)
+ {
+ $old_id = $c->Get($idfield);
+ $c->Dirty();
+ $c->UnsetIdField();
+ $c->Create();
+ }
+ else
+ {
+ $c->Dirty();
+ $c->Update();
+ }
+ $rs->MoveNext();
+ }
+ @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
+ unset($GLOBALS['_CopyFromEditTable']);
+ }
+
+ function PurgeEditTable()
+ {
+ global $objSession;
+
+ $edit_table = $objSession->GetEditTable($this->SourceTable);
+ @$this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
+ }
+
+ function &GetEmailEventObject($EventName,$Type=0,$LangId=NULL)
+ {
+ global $objLanguages;
+
+ if(!$LangId)
+ $LangId = $objLanguages->GetPrimary();
+ $EmailTable = $this->SourceTable;
+ $EventTable = GetTablePrefix()."Events";
+ $sql = "SELECT * FROM $EventTable INNER JOIN $EmailTable ON ($EventTable.EventId = $EmailTable.EventId) ";
+ $sql .="WHERE Event='$EventName' AND LanguageId=$LangId AND Type=$Type";
+ $result = $this->adodbConnection->Execute($sql);
+
+ if ($result === FALSE)
+ {
+ //$Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"","clsEvent","GetEmailEventObject");
+ return FALSE;
+ }
+ $data = $result->fields;
+ $e = new clsEmailMessage();
+ $e->SetFromArray($data);
+ $e->Clean();
+ return $e;
+ }
+
+ function ReadImportTable($TableName,$Overwrite=FALSE, $MaxInserts=100,$Offset=0)
+ {
+ $eml = new clsEmailMessageList();
+ $this->Clear();
+ $Inserts = 0;
+ $sql = "SELECT * FROM $TableName LIMIT $Offset,$MaxInserts";
+ $this->Query_Item($sql);
+ if($this->NumItems()>0)
+ {
+ foreach($this->Items as $i)
+ {
+ $e = $eml->GetMessage($i->Get("EventId"),$i->Get("LanguageId"));
+ if(is_object($e))
+ {
+ if($Overwrite)
+ {
+ $e->Set("MessageType",$i->Get("MessageType"));
+ $e->Set("Template",$i->Get("Template"));
+ $e->Update();
+ }
+ }
+ else
+ {
+ $i->Create();
+ }
+ $Inserts++;
+ }
+ }
+ $Offset = $Offset + $Inserts;
+ return $Offset;
+ }
+}
+
+function EventEnabled($e)
+{
+ global $objConfig;
+
+ $var = "Email_".$e."_Enabled";
+
+ return ($objConfig->Get($var)=="1");
+}
+
+class clsEmailQueue
+{
+ var $SourceTable;
+ var $MessagesAtOnce;
+ var $MessagesSent=0;
+ var $LogLevel = 0;
+ var $HLB = "\n"; // Headers Line Break
+ var $BLB = "\n"; // Body Line Break
+
+ function clsEmailQueue($SourceTable=NULL,$MessagesAtOnce=NULL)
+ {
+ global $objConfig;
+
+ $this->HLB = chr(10);
+ $this->BLB = chr(10);
+
+ if($SourceTable)
+ {
+ $this->SourceTable=$SourceTable;
+ }
+ else
+ $this->SourceTable = GetTablePrefix()."EmailQueue";
+ if(!$MessagesAtOnce)
+ $MessagesAtOnce = (int)$objConfig->Get("Email_MaxSend");
+ if($MessagesAtOnce<1)
+ $MessagesAtOnce=1;
+ $this->MessagesAtOnce = $MessagesAtOnce;
+ $this->LogLevel = (int)$objConfig->Get("Smtp_LogLevel");
+ }
+
+ function WriteToMailLog($text)
+ {
+ global $pathtoroot,$admin;
+ //echo htmlentities($text)."<br>\n";
+ if($this->LogLevel>0)
+ {
+ $Logfile = $pathtoroot.$admin."/email/log.txt";
+ if(is_writable($Logfile))
+ {
+ $fp = fopen($Logfile,"a");
+ if($fp)
+ {
+ fputs($fp,$text."\n");
+ fclose($fp);
+ }
+ }
+ }
+ }
+
+ function AllowSockets()
+ {
+ $minver = explode(".", "4.3.0");
+ $curver = explode(".", phpversion());
+ if (($curver[0] < $minver[0])
+ || (($curver[0] == $minver[0])
+ && ($curver[1] < $minver[1]))
+ || (($curver[0] == $minver[0]) && ($curver[1] == $minver[1])
+ && ($curver[2][0] < $minver[2][0])))
+ return false;
+ else
+ return true;
+ }
+
+ function DeliverMail($To,$From,$Subject,$Msg,$headers, $ForceSend=0)
+ {
+ global $MessagesSent,$objConfig;
+
+ if(($this->MessagesSent >$this->MessagesAtOnce) && !$ForceSend)
+ {
+ $this->EnqueueMail($To,$From,$Subject,$Msg,$headers);
+ return TRUE;
+ }
+ else
+ {
+ $this->MessagesSent++;
+
+ $time = adodb_mktime();
+ $conn = &GetADODBConnection();
+
+ /* $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '".htmlspecialchars($From)."', '".htmlspecialchars($To)."', '$Subject', $time, '')";
+ $conn->Execute($sql);*/
+
+
+ $headers = "Date: ".adodb_date("r")."\n".$headers;
+ $headers = "Return-Path: ".$objConfig->Get("Smtp_AdminMailFrom")."\n".$headers;
+
+ /* ensure headers are using \r\n instead of \n */
+ $headers = str_replace("\n\n","\r\n\r\n",$headers);
+ $headers = str_replace("\r\n","\n",$headers);
+ $headers = str_replace("\n","\r\n",$headers);
+
+ // if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) {
+ $Msg = str_replace("\n\n","\r\n\r\n",$Msg);
+ $Msg = str_replace("\r\n","\n",$Msg);
+ $Msg = str_replace("\n","\r\n",$Msg);
+ // }
+
+ //echo "<PRE>"; print_r(htmlentities($headers)); echo "</PRE>";
+ //echo "<PRE>"; print_r(htmlentities($Msg)); echo "</PRE>";
+ $ver = phpversion();
+ if(substr($Subject,0,9)=="Subject: ")
+ $Subject = substr($Subject,9);
+ if(!strlen($objConfig->Get("Smtp_Server")) || !$this->AllowSockets())
+ {
+ return mail($To,trim($Subject),$Msg, $headers);
+ }
+
+ $headers = "To: <".$To.">"."\r\n".$headers;
+ $headers = "Subject: ".trim($Subject)."\r\n".$headers;
+
+ if (strpos($To, ',') !== false) {
+ $To = str_replace(' ', '', $this->To);
+ $send_params['recipients'] = explode(',', $this->To);
+ }
+ else {
+ $send_params['recipients'] = array($To); // The recipients (can be multiple)
+ }
+ $send_params['from'] = $From; // This is used as in the MAIL FROM: cmd
+ $send_params['headers'] = explode("\r\n",$headers);
+ // It should end up as the Return-Path: header
+ $send_params['body'] = $Msg; // The body of the email
+
+ $params['host'] = $objConfig->Get("Smtp_Server"); // The smtp server host/ip
+
+ $params['port'] = 25; // The smtp server port
+ $params['hello'] = 'INPORTAL'; // What to use when sending the helo command. Typically, your domain/hostname
+ if($objConfig->Get("Smtp_Authenticate")) // Whether to use basic authentication or not
+ {
+ $params['auth'] = TRUE;
+ $params['user'] = $objConfig->Get("Smtp_User");
+ $params['pass'] = $objConfig->get("Smtp_Pass");
+ }
+ else
+ $params['auth'] = FALSE;
+ $this->LogLevel=0;
+ $SmtpServer = new smtp($params);
+ if($this->LogLevel>0)
+ {
+ $SmtpServer->debug=1;
+ foreach($params as $key=>$value)
+ {
+ $this->WriteToMailLog($key."=".$value);
+ }
+ }
+ else
+ {
+ //$SmtpServer->debug = 1;
+ }
+ $connected = $SmtpServer->connect();
+
+ if($connected)
+ {
+ if($this->LogLevel>1)
+ {
+ $this->WriteToMailLog("Connected to ".$params['host']);
+ }
+ $res = $SmtpServer->send($send_params);
+ }
+ $SmtpServer->disconnect();
+
+ if($this->LogLevel>1)
+ {
+ foreach($SmtpServer->buffer as $l)
+ {
+ $this->WriteToMailLog($l);
+ }
+ }
+
+ if($this->LogLevel>0)
+ {
+ if(count($SmtpServer->errors)>0)
+ {
+ foreach($SmtpServer->errors as $e)
+ {
+ $this->WriteToMailLog($e);
+ }
+ }
+ else
+ $this->WriteToMailLog("Message to $From Delivered Successfully");
+ }
+ unset($SmtpServer);
+ return $res;
+ }
+ }
+
+ function EnqueueMail($To,$From,$Subject,$Msg,$headers)
+ {
+ global $objSession;
+
+ $ado = &GetADODBConnection();
+ $To = mysql_escape_string($To);
+ $From = mysql_escape_string($From);
+ $Msg = mysql_escape_string($Msg);
+ $headers = mysql_escape_string($headers);
+ $Subject = mysql_escape_string($Subject);
+ $sql = "INSERT INTO ".$this->SourceTable." (toaddr,fromaddr,subject,message,headers) VALUES ('$To','$From','$Subject','$Msg','$headers')";
+ $ado->Execute($sql);
+ }
+
+ function SendMailQeue()
+ {
+ global $objConfig, $objSession, $TotalMessagesSent;
+
+ $ado = &GetADODBConnection();
+ $MaxAllowed = $this->MessagesAtOnce;
+
+ $del_sql = array();
+
+ $NumToSend = $MaxAllowed - $this->MessagesSent;
+ if($NumToSend < 0) $NumToSend=1; // Don't really know why, but this could happend, so issued this temp fix
+ $sql = "SELECT * FROM ".$this->SourceTable." ORDER BY queued ASC LIMIT $NumToSend";
+ $rs = $ado->Execute($sql);
+
+ while($rs && !$rs->EOF)
+ {
+ $data = $rs->fields;
+ $this->DeliverMail($data["toaddr"],$data["fromaddr"],$data["Subject"],$data["message"],$data["headers"],1);
+
+ $del_sql[] = "DELETE FROM ".$this->SourceTable." WHERE queued='".$data["queued"]."'";
+ $rs->MoveNext();
+ }
+
+ $numdel = count($del_sql);
+ for($i=0;$i<$numdel;$i++)
+ {
+ $sql = $del_sql[$i];
+ if(strlen($sql))
+ $ado->Execute($sql);
+ if($objSession->HasSystemPermission("DEBUG.ITEM"))
+ echo htmlentities($sql,ENT_NOQUOTES)."<br>\n";
+ }
+ }
+
+ function SendMail($From, $FromName, $ToAddr, $ToName, $Subject, $Text, $Html, $charset, $SendEvent,$FileName="",$FileLoc="",$QueueOnly=0,$extra_headers = array())
+ {
+ $HasFile = FALSE;
+ $HasFile = (strlen($FileName)>0);
+ $OB="----=_OuterBoundary_000".md5( uniqid (rand()));
+ $boundary = "-----=".md5( uniqid (rand()));
+ $f = "\"$FromName\" <".$From.">";
+ $headers = "From: $f"."\n";
+ $headers .= "MIME-Version: 1.0"."\n";
+
+ $conn = &GetADODBConnection();
+ $time = adodb_mktime();
+
+ $sendTo = $ToName;
+
+ if (strlen($sendTo) > 0) {
+ $sendTo .= "($ToAddr)";
+ }
+ else {
+ $sendTo = $ToAddr;
+ }
+ $sendTo=addslashes($sendTo);
+ $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', ".$conn->qstr($FromName).", ".$conn->qstr($sendTo).", ".$conn->qstr( str_replace("Subject:", "", $Subject) ).", $time, '$SendEvent')";
+ $conn->Execute($sql);
+
+ if(is_array($extra_headers))
+ {
+ foreach ($extra_headers as $h)
+ {
+ $headers .= $h."\n";
+ }
+ }
+
+ $msg .="This is a multi-part message in MIME format."."\n"."\n";
+ if($HasFile)
+ {
+ //Messages start with text/html alternatives in OB
+ $headers.="Content-Type: multipart/mixed;"."\n"."\tboundary=\"".$OB."\""."\n"."\n";
+ $msg.="--".$OB."\n";
+ $msg.="Content-Type: multipart/alternative; boundary=\"$boundary\""."\n"."\n"."\n";
+ }
+ else {
+ $headers .= "Content-Type: multipart/alternative; boundary=\"$boundary\""."\n";
+ }
+
+ $application =& kApplication::Instance();
+ $db =& $application->GetADODBConnection();
+
+ if (!$Text) {
+ $Text = strip_tags($Html);
+ }
+ else {
+ $Text = strip_tags($Text);
+ }
+
+ $msg .= "--" . $boundary . "\n";
+ $msg .= "Content-Type: text/plain; charset=\"$charset\""."\n";
+ $msg .= "Content-Transfer-Encoding: 8bit"."\n"."\n";
+ $msg .= stripslashes($Text);
+ $msg .= "\n"."\n";
+
+ if(strlen($Html)>0)
+ {
+ $msg .= "--" . $boundary . "\n";
+ $msg .= "Content-Type: text/html; charset=\"iso-8859-1\""."\n";
+ $msg .= "Content-Transfer-Encoding: 8bit"."\n"."\n";
+ $msg .= stripslashes($Html);
+ $msg .= "\n"."\n";
+ }
+ $msg .= "--" . $boundary . "--"."\n";
+ if($HasFile)
+ {
+ if(!strlen($FileLoc)) {
+ $FileLoc = $FileName;
+ }
+ $FileName = basename($FileName);
+ $msg .= "\n"."--".$OB."\n";
+ $msg.="Content-Type: application/octetstream;"."\n"."\tname=\"".$FileName."\""."\n";
+ $msg.="Content-Transfer-Encoding: base64"."\n";
+ $msg.="Content-Disposition: attachment;"."\n"."\tfilename=\"".$FileName."\""."\n"."\n";
+
+ //file goes here
+ $fd=fopen ($FileLoc, "r");
+ if($fd)
+ {
+ $FileContent=fread($fd,filesize($FileLoc));
+ fclose ($fd);
+ }
+ $FileContent=chunk_split(base64_encode($FileContent));
+ $msg .= $FileContent."\n";
+ $msg .= "--".$OB."--"."\n";
+ }
+
+ if($this->MessagesSent>$this->MessagesAtOnce || $QueueOnly==1)
+ {
+ $this->EnqueueMail($ToAddr,$From,$Subject,$msg,$headers);
+ }
+ else
+ {
+ $this->DeliverMail($ToAddr,$From,$Subject,$msg,$headers);
+ }
+ }
+
+}
+?>
Property changes on: branches/unlabeled/unlabeled-1.58.2/kernel/include/emailmessage.php
___________________________________________________________________
Added: cvs2svn:cvs-rev
## -0,0 +1 ##
+1.58
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property

Event Timeline