Index: trunk/kernel/units/email_events/email_events_event_handler.php =================================================================== diff -u -r2136 -r2444 --- trunk/kernel/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 2136) +++ trunk/kernel/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 2444) @@ -2,7 +2,7 @@ class EmailEventsEventsHandler extends InpDBEventHandler { - + /** * Apply any custom changes to list's sql query * @@ -29,17 +29,17 @@ $this->StoreSelectedIDs($event); $ids = $this->getSelectedIDs($event); $ids = implode(',', $ids); - + $table = $this->Application->getUnitOption($event->Prefix,'TableName'); $sql = 'UPDATE '.$table.' SET Enabled = 2 WHERE EventId IN ('.$ids.')'; - $this->Conn->Query($sql); + $this->Conn->Query($sql); } - + /** - * Sets selected user to email events selected + * Sets selected user to email events selected * * @param kEvent $event - */ + */ function OnSelectUser(&$event) { $user_name = $this->Application->GetVar( $event->getPrefixSpecial(true).'_PopupSelectedUser' ); @@ -48,42 +48,42 @@ $this->StoreSelectedIDs($event); $ids = $this->getSelectedIDs($event); $ids = implode(',', $ids); - + $user_id = $this->Conn->GetOne('SELECT PortalUserId FROM '.TABLE_PREFIX.'PortalUser WHERE Login = '.$this->Conn->qstr($user_name) ); - + $table = $this->Application->getUnitOption($event->Prefix,'TableName'); $sql = 'UPDATE '.$table.' SET FromUserId = '.$user_id.' WHERE EventId IN ('.$ids.')'; - - $this->Conn->Query($sql); + + $this->Conn->Query($sql); } } - + /** * Raised when email message shoul be sent * * @param kEvent $event - */ + */ function OnEmailEvent(&$event){ - + $email_event = $event->getEventParam('EmailEventName'); $to_user_id = $event->getEventParam('EmailEventToUserId'); $email_event_type = $event->getEventParam('EmailEventType'); - + $this->Application->setUnitOption('emailmessages', 'AutoLoad', false); $message_object = &$this->Application->recallObject('emailmessages'); - + $event_table = $this->Application->getUnitOption('emailevents', 'TableName'); - + $event_object = &$event->getObject(); $event_object->Load(array('Event'=>$email_event, 'Type'=>$email_event_type)); $event_id = $event_object->GetDBField('EventId'); $from_user_id = $event_object->GetDBField('FromUserId'); $type = $event_object->GetDBField('Type'); $enabled = $event_object->GetDBField('Enabled'); - + $direct_send_params = $event->getEventParam('DirectSendParams'); - + if ($enabled == 0) return; // disabled event if ($enabled == 2 && defined("ADMIN")) return; // event only for front-end @@ -104,17 +104,17 @@ $message_template = $message_object->GetDBField('Template'); $email_object = &$this->Application->recallObject('kEmailMessage'); - $email_object->Compiled = false; - + $email_object->Clear(); + $old_autoload = $this->Application->getUnitOption('u', 'AutoLoad'); $this->Application->setUnitOption('u', 'AutoLoad', false); - + $from_user_object = &$this->Application->recallObject('u.-item'); $from_user_object->Load($from_user_id); // here if we don't have from_user loaded, it takes a default user from config values $from_user_email = $from_user_object->GetDBField('Email')?$from_user_object->GetDBField('Email'):$this->Application->ConfigValue('Smtp_AdminMailFrom'); $from_user_name = trim($from_user_object->GetDBField('FirstName').' '.$from_user_object->GetDBField('LastName')); - + $to_user_object = &$this->Application->recallObject('u.-item'); $to_user_object->Load($to_user_id); $to_user_email = $to_user_object->GetDBField('Email'); @@ -131,8 +131,8 @@ } $to_user_email = $to_user_email?$to_user_email:$this->Application->ConfigValue('Smtp_AdminMailFrom'); - - + + $this->Application->makeClass('Template'); $this->Application->InitParser(); $parser_params = $this->Application->Parser->Params; @@ -141,31 +141,31 @@ $message_template = str_replace('Application->Parser->Parse($message_template, 'email_template', 0); $this->Application->Parser->Params = $parser_params; - - $message_template = str_replace("\r", "", $message_template); - - list($message_headers, $message_body) = explode("\n\n", $message_template, 2); - - + + $message_template = str_replace("\r", "", $message_template); + + list($message_headers, $message_body) = explode("\n\n", $message_template, 2); + + $email_object->setFrom($from_user_email, $from_user_name); $email_object->setTo($to_user_email, $to_user_name); $email_object->setSubject('Mail message'); - - + + $email_object->setHeaders($message_headers); - + if ($message_type == 'html'){ $email_object->setHTMLBody($message_body); } else { $email_object->setTextBody($message_body); } - + $smtp_object = &$this->Application->recallObject('kSmtpClient'); - + $smtp_server = $this->Application->ConfigValue('Smtp_Server'); $smtp_port = $this->Application->ConfigValue('Smtp_Port'); - + $smtp_authenticate = $this->Application->ConfigValue('Smtp_Authenticate'); if ($smtp_authenticate){ $smtp_user = $this->Application->ConfigValue('Smtp_User'); @@ -174,8 +174,8 @@ $smtp_user = ''; $smtp_pass = ''; } - - + + if ($smtp_server){ if ($email_object->sendSMTP($smtp_object, $smtp_server, $smtp_user, $smtp_pass, $smtp_authenticate)){ $event->status=erSUCCESS; @@ -189,10 +189,10 @@ } else { $event->status=erFAIL; - } + } } - + return $event; - } + } } ?> \ No newline at end of file Index: trunk/admin/editor/cmseditor/fckstyles.xml =================================================================== diff -u -r1416 -r2444 --- trunk/admin/editor/cmseditor/fckstyles.xml (.../fckstyles.xml) (revision 1416) +++ trunk/admin/editor/cmseditor/fckstyles.xml (.../fckstyles.xml) (revision 2444) @@ -38,5 +38,4 @@ - \ No newline at end of file Index: trunk/core/units/email_events/email_events_event_handler.php =================================================================== diff -u -r2136 -r2444 --- trunk/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 2136) +++ trunk/core/units/email_events/email_events_event_handler.php (.../email_events_event_handler.php) (revision 2444) @@ -2,7 +2,7 @@ class EmailEventsEventsHandler extends InpDBEventHandler { - + /** * Apply any custom changes to list's sql query * @@ -29,17 +29,17 @@ $this->StoreSelectedIDs($event); $ids = $this->getSelectedIDs($event); $ids = implode(',', $ids); - + $table = $this->Application->getUnitOption($event->Prefix,'TableName'); $sql = 'UPDATE '.$table.' SET Enabled = 2 WHERE EventId IN ('.$ids.')'; - $this->Conn->Query($sql); + $this->Conn->Query($sql); } - + /** - * Sets selected user to email events selected + * Sets selected user to email events selected * * @param kEvent $event - */ + */ function OnSelectUser(&$event) { $user_name = $this->Application->GetVar( $event->getPrefixSpecial(true).'_PopupSelectedUser' ); @@ -48,42 +48,42 @@ $this->StoreSelectedIDs($event); $ids = $this->getSelectedIDs($event); $ids = implode(',', $ids); - + $user_id = $this->Conn->GetOne('SELECT PortalUserId FROM '.TABLE_PREFIX.'PortalUser WHERE Login = '.$this->Conn->qstr($user_name) ); - + $table = $this->Application->getUnitOption($event->Prefix,'TableName'); $sql = 'UPDATE '.$table.' SET FromUserId = '.$user_id.' WHERE EventId IN ('.$ids.')'; - - $this->Conn->Query($sql); + + $this->Conn->Query($sql); } } - + /** * Raised when email message shoul be sent * * @param kEvent $event - */ + */ function OnEmailEvent(&$event){ - + $email_event = $event->getEventParam('EmailEventName'); $to_user_id = $event->getEventParam('EmailEventToUserId'); $email_event_type = $event->getEventParam('EmailEventType'); - + $this->Application->setUnitOption('emailmessages', 'AutoLoad', false); $message_object = &$this->Application->recallObject('emailmessages'); - + $event_table = $this->Application->getUnitOption('emailevents', 'TableName'); - + $event_object = &$event->getObject(); $event_object->Load(array('Event'=>$email_event, 'Type'=>$email_event_type)); $event_id = $event_object->GetDBField('EventId'); $from_user_id = $event_object->GetDBField('FromUserId'); $type = $event_object->GetDBField('Type'); $enabled = $event_object->GetDBField('Enabled'); - + $direct_send_params = $event->getEventParam('DirectSendParams'); - + if ($enabled == 0) return; // disabled event if ($enabled == 2 && defined("ADMIN")) return; // event only for front-end @@ -104,17 +104,17 @@ $message_template = $message_object->GetDBField('Template'); $email_object = &$this->Application->recallObject('kEmailMessage'); - $email_object->Compiled = false; - + $email_object->Clear(); + $old_autoload = $this->Application->getUnitOption('u', 'AutoLoad'); $this->Application->setUnitOption('u', 'AutoLoad', false); - + $from_user_object = &$this->Application->recallObject('u.-item'); $from_user_object->Load($from_user_id); // here if we don't have from_user loaded, it takes a default user from config values $from_user_email = $from_user_object->GetDBField('Email')?$from_user_object->GetDBField('Email'):$this->Application->ConfigValue('Smtp_AdminMailFrom'); $from_user_name = trim($from_user_object->GetDBField('FirstName').' '.$from_user_object->GetDBField('LastName')); - + $to_user_object = &$this->Application->recallObject('u.-item'); $to_user_object->Load($to_user_id); $to_user_email = $to_user_object->GetDBField('Email'); @@ -131,8 +131,8 @@ } $to_user_email = $to_user_email?$to_user_email:$this->Application->ConfigValue('Smtp_AdminMailFrom'); - - + + $this->Application->makeClass('Template'); $this->Application->InitParser(); $parser_params = $this->Application->Parser->Params; @@ -141,31 +141,31 @@ $message_template = str_replace('Application->Parser->Parse($message_template, 'email_template', 0); $this->Application->Parser->Params = $parser_params; - - $message_template = str_replace("\r", "", $message_template); - - list($message_headers, $message_body) = explode("\n\n", $message_template, 2); - - + + $message_template = str_replace("\r", "", $message_template); + + list($message_headers, $message_body) = explode("\n\n", $message_template, 2); + + $email_object->setFrom($from_user_email, $from_user_name); $email_object->setTo($to_user_email, $to_user_name); $email_object->setSubject('Mail message'); - - + + $email_object->setHeaders($message_headers); - + if ($message_type == 'html'){ $email_object->setHTMLBody($message_body); } else { $email_object->setTextBody($message_body); } - + $smtp_object = &$this->Application->recallObject('kSmtpClient'); - + $smtp_server = $this->Application->ConfigValue('Smtp_Server'); $smtp_port = $this->Application->ConfigValue('Smtp_Port'); - + $smtp_authenticate = $this->Application->ConfigValue('Smtp_Authenticate'); if ($smtp_authenticate){ $smtp_user = $this->Application->ConfigValue('Smtp_User'); @@ -174,8 +174,8 @@ $smtp_user = ''; $smtp_pass = ''; } - - + + if ($smtp_server){ if ($email_object->sendSMTP($smtp_object, $smtp_server, $smtp_user, $smtp_pass, $smtp_authenticate)){ $event->status=erSUCCESS; @@ -189,10 +189,10 @@ } else { $event->status=erFAIL; - } + } } - + return $event; - } + } } ?> \ No newline at end of file Index: trunk/core/kernel/utility/email.php =================================================================== diff -u -r2275 -r2444 --- trunk/core/kernel/utility/email.php (.../email.php) (revision 2275) +++ trunk/core/kernel/utility/email.php (.../email.php) (revision 2444) @@ -19,34 +19,34 @@ var $TransferEncoding; var $From; var $To; - - + + var $IsMultipart; var $Parts; var $Files; - - + + var $TextBoundary; var $EmailBoundary; - + function kEmailMessage(){ //$this->TextBoundary = uniqid(time()); - $this->EmailBoundary = uniqid(time()); + $this->EmailBoundary = uniqid(time()); $this->LineFeed = "\n"; $this->Charset='ISO-8859-1'; $this->TransferEncoding='8bit'; - $this->Body = ''; + $this->Body = ''; $this->setHeader('Subject', 'Automatically generated message'); $this->HeadersArray=array(); - + $this->setHeader('Mime-Version', '1.0'); } - + function setHeader($header, $value){ $this->HeadersArray[$header] = $value; $this->Compiled = false; } - + function setHeaders($headers){ $headers=str_replace("\r", "", $headers); $headers_lines = explode("\n", $headers); @@ -55,65 +55,77 @@ $header_value = trim($header_value); $this->setHeader($header_field, $header_value); } - + } function appendHeader($header, $value){ $this->HeadersArray[$header][] = $value; - $this->Compiled = false; + $this->Compiled = false; } - - + + function setFrom($from, $name=''){ - + $this->From = $from; - + if ($name!=''){ $from = trim($name).' <'.$from.'>'; } $this->setHeader('From', trim($from)); } function setTo($to, $name=''){ - + $this->To = $to; - + if ($name!=''){ $to = trim($name).' <'.$to.'>'; } - + $this->setHeader('To', trim($to)); } function setSubject($subj){ $this->setHeader('Subject', $subj); - } - + } + function SetCC($to_cc){ $this->appendHeader('CC', $to_cc); } function SetBCC($to_bcc){ $this->appendHeader('BCC', $to_bcc); - } - + } + function setReplyTo($reply_to){ $this->setHeader('Reply-to', $reply_to); } - + + function Clear() + { + $this->Compiled = false; + $this->Body = ''; + $this->BodyHtml = ''; + $this->BodyText = ''; + $this->Headers = ''; + $this->Files = ''; + $this->From = ''; + $this->To = ''; + } + function setTextBody($body_text){ - + $this->BodyText = $body_text; $this->Compiled = false; } function setHTMLBody($body_html){ - + $this->BodyHtml = $body_html; $this->IsMultipart = true; $this->Compiled = false; - } - + } + function compileBody(){ $search = array ( "'(<\/td>.*)[\r\n]+(.*'si", // "'^[\s\n\r\t]+'", //strip all spacers & newlines in the begin of document // "'[\s\n\r\t]+$'", //strip all spacers & newlines in the end of document - "'&(quot|#34);'i", + "'&(quot|#34);'i", "'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", @@ -134,7 +146,7 @@ "'&(pound|#163);'i", "'&(copy|#169);'i", "'&#(\d+);'e" - ); + ); $replace = array ( "\\1\t\\2", @@ -155,10 +167,10 @@ chr(163), chr(169), "chr(\\1)" - ); + ); if($this->BodyHtml){ - + $not_html = preg_replace ($search, $replace, $this->BodyHtml); $not_html = strip_tags($not_html); // $not_html = $this->removeBlankLines($not_html); @@ -179,42 +191,42 @@ $this->Body .= 'Content-Description: HTML part'.$this->LF(); $this->Body .= 'Content-Disposition: inline'.$this->LF(); $this->Body .= $this->LF(); - + $this->BodyHtml = str_replace("\r", "", $this->BodyHtml); $this->BodyHtml = str_replace("\n", $this->LF(), $this->BodyHtml); - + $this->Body .= $this->BodyHtml; $this->Body .= $this->LF().$this->LF(); - - + + $this->IsMultipart = true; - + }else{ $not_html = preg_replace ($search, $replace, $this->BodyText); $not_html = strip_tags($not_html); // $not_html = $this->removeBlankLines($not_html); // Fixing problem with add exclamation characters "!" into the body of the email. $not_html = wordwrap($not_html, 72); - - + + if ($this->IsMultipart){ $this->Body .= '------='.$this->EmailBoundary.$this->LF(); $this->Body .= 'Content-Type: text/plain;'.$this->LF()." ".'charset="'.$this->Charset.'"'.$this->LF(); $this->Body .= 'Content-Disposition: inline'.$this->LF(); $this->Body .= $this->LF(); - $this->Body .= $not_html.$this->LF().$this->LF(); + $this->Body .= $not_html.$this->LF().$this->LF(); }else{ //$this->BodyText = str_replace("\r", "", $this->BodyText); - //$this->BodyText = str_replace("\n", $this->LF(), $this->BodyText); + //$this->BodyText = str_replace("\n", $this->LF(), $this->BodyText); $this->Body = $not_html; } - + } - - } - - + } + + + function setCharset($charset){ $this->Charset = $charset; $this->Compiled = false; @@ -223,28 +235,28 @@ function setLineFeed($linefeed){ $this->LineFeed=$linefeed; } - - + + function attachFile($filepath, $mime="application/octet-stream"){ - + if(is_file($filepath)){ $file_info = array('path'=>$filepath, 'mime'=>$mime); - $this->Files[] = $file_info; + $this->Files[] = $file_info; }else{ die('File "'.$filepath.'" not exist...'."\n"); } - + $this->IsMultipart = true; $this->Compiled = false; } - + function LF($str=''){ $str = str_replace("\n", "", $str); $str = str_replace("\r", "", $str); return $str.$this->LineFeed; } - + function getContentType(){ $content_type=""; if ($this->IsMultipart){ @@ -254,17 +266,17 @@ $content_type .= $this->LF('text/plain;'); $content_type .= $this->LF(" ".'charset='.$this->Charset); } - + return $content_type; - + } - + // ======================================== - + function compileHeaders(){ $this->Headers=""; - + // $this->Headers .= "From: ".$this->LF($this->From); //if ($this->ReplyTo){ // $this->Headers .= "Reply-To: ".$this->ReplyTo.$this->LF(); @@ -286,25 +298,25 @@ } } */ - + foreach ($this->HeadersArray as $key => $val){ if ($key=="To" || $key=="") continue; // avoid duplicate "To" field in headers if (is_array($val)){ $val = chunk_split(implode(', ', $val),72, $this->LF().' '); - - + + $this->Headers .= $key.": ".$val.$this->LF(); }else{ $this->Headers .= $key.": ".$val.$this->LF(); } - + } - + $this->Headers .= "Content-Type: ".$this->getContentType(); - + //$this->Headers .= "Content-Transfer-Encoding: ".$this->TransferEncoding.$this->LF(); - - + + } function compileFiles(){ @@ -319,72 +331,72 @@ $attachment_header .= $this->LF('Content-Description: '.basename($filepath)); $attachment_header .= $this->LF('Content-Disposition: attachment; filename="'.basename($filepath).'"'); $attachment_header .= $this->LF(''); - + $attachment_data = fread(fopen($filepath,"rb"),filesize($filepath)); $attachment_data = base64_encode($attachment_data); $attachment_data = chunk_split($attachment_data,72); - + $this->Body .= $attachment_header.$attachment_data.$this->LF(''); $this->IsMultipart = true; } - } + } } - + function compile(){ - + if ($this->Compiled) return; - + $this->compileBody(); - + $this->compileFiles(); - + $this->compileHeaders(); - + // Compile if ($this->IsMultipart){ - $this->Body .= '------='.$this->EmailBoundary.'--'.$this->LF(); + $this->Body .= '------='.$this->EmailBoundary.'--'.$this->LF(); } - + $this->Compiled = true; } - + // ======================================== - + function getHeaders(){ - + $this->Compile(); return $this->Headers; } - + function getBody(){ - + $this->Compile(); return $this->Body; } function send(){ - + return mail($this->HeadersArray['To'], $this->HeadersArray['Subject'], "", $this->getHeaders().$this->LF().$this->LF().$this->getBody()); //return mail($this->HeadersArray['To'], $this->HeadersArray['Subject'], "", $this->getHeaders().$this->LF().$this->LF().$this->getBody(), '-f'.$this->From); - + } function sendSMTP(&$smtp_object, $smtp_host, $user, $pass, $auth_used = 0){ - + $params['host'] = $smtp_host; // The smtp server host/ip $params['port'] = 25; // The smtp server port $params['helo'] = $_SERVER['HTTP_HOST']; // What to use when sending the helo command. Typically, your domain/hostname $params['auth'] = TRUE; // Whether to use basic authentication or not $params['user'] = $user; // Username for authentication - - + + $params['pass'] = $pass; // Password for authentication - $params['debug'] = 1; + $params['debug'] = 1; if ($auth_used == 0){ $params['authmethod'] = 'NOAUTH'; // forse disabling auth } - + $send_params['recipients'] = array($this->To); // The recipients (can be multiple) $send_params['headers'] = array( 'From: '.$this->HeadersArray['From'], // Headers @@ -396,8 +408,8 @@ $send_params['from'] = $this->From; // This is used as in the MAIL FROM: cmd // It should end up as the Return-Path: header $send_params['body']="\n"; - - + + if($smtp_object->connect($params) && $smtp_object->send($send_params)){ return true; }else { @@ -411,8 +423,8 @@ } } - - + + }