diff options
Diffstat (limited to 'framework/logging/CEmailLogRoute.php')
| -rw-r--r-- | framework/logging/CEmailLogRoute.php | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/framework/logging/CEmailLogRoute.php b/framework/logging/CEmailLogRoute.php new file mode 100644 index 0000000..3e146d6 --- /dev/null +++ b/framework/logging/CEmailLogRoute.php @@ -0,0 +1,151 @@ +<?php +/** + * CEmailLogRoute class file. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @link http://www.yiiframework.com/ + * @copyright Copyright © 2008-2011 Yii Software LLC + * @license http://www.yiiframework.com/license/ + */ + +/** + * CEmailLogRoute sends selected log messages to email addresses. + * + * The target email addresses may be specified via {@link setEmails emails} property. + * Optionally, you may set the email {@link setSubject subject}, the + * {@link setSentFrom sentFrom} address and any additional {@link setHeaders headers}. + * + * @property array $emails List of destination email addresses. + * @property string $subject Email subject. Defaults to CEmailLogRoute::DEFAULT_SUBJECT. + * @property string $sentFrom Send from address of the email. + * @property array $headers Additional headers to use when sending an email. + * + * @author Qiang Xue <qiang.xue@gmail.com> + * @version $Id: CEmailLogRoute.php 3426 2011-10-25 00:01:09Z alexander.makarow $ + * @package system.logging + * @since 1.0 + */ +class CEmailLogRoute extends CLogRoute +{ + /** + * @var array list of destination email addresses. + */ + private $_email=array(); + /** + * @var string email subject + */ + private $_subject; + /** + * @var string email sent from address + */ + private $_from; + /** + * @var array list of additional headers to use when sending an email. + */ + private $_headers=array(); + + /** + * Sends log messages to specified email addresses. + * @param array $logs list of log messages + */ + protected function processLogs($logs) + { + $message=''; + foreach($logs as $log) + $message.=$this->formatLogMessage($log[0],$log[1],$log[2],$log[3]); + $message=wordwrap($message,70); + $subject=$this->getSubject(); + if($subject===null) + $subject=Yii::t('yii','Application Log'); + foreach($this->getEmails() as $email) + $this->sendEmail($email,$subject,$message); + } + + /** + * Sends an email. + * @param string $email single email address + * @param string $subject email subject + * @param string $message email content + */ + protected function sendEmail($email,$subject,$message) + { + $headers=$this->getHeaders(); + if(($from=$this->getSentFrom())!==null) + $headers[]="From: {$from}"; + mail($email,$subject,$message,implode("\r\n",$headers)); + } + + /** + * @return array list of destination email addresses + */ + public function getEmails() + { + return $this->_email; + } + + /** + * @param mixed $value list of destination email addresses. If the value is + * a string, it is assumed to be comma-separated email addresses. + */ + public function setEmails($value) + { + if(is_array($value)) + $this->_email=$value; + else + $this->_email=preg_split('/[\s,]+/',$value,-1,PREG_SPLIT_NO_EMPTY); + } + + /** + * @return string email subject. Defaults to CEmailLogRoute::DEFAULT_SUBJECT + */ + public function getSubject() + { + return $this->_subject; + } + + /** + * @param string $value email subject. + */ + public function setSubject($value) + { + $this->_subject=$value; + } + + /** + * @return string send from address of the email + */ + public function getSentFrom() + { + return $this->_from; + } + + /** + * @param string $value send from address of the email + */ + public function setSentFrom($value) + { + $this->_from=$value; + } + + /** + * @return array additional headers to use when sending an email. + * @since 1.1.4 + */ + public function getHeaders() + { + return $this->_headers; + } + + /** + * @param mixed $value list of additional headers to use when sending an email. + * If the value is a string, it is assumed to be line break separated headers. + * @since 1.1.4 + */ + public function setHeaders($value) + { + if (is_array($value)) + $this->_headers=$value; + else + $this->_headers=preg_split('/\r\n|\n/',$value,-1,PREG_SPLIT_NO_EMPTY); + } +}
\ No newline at end of file |
