刚写完的不小心回退了结果全都没有了 - =。。 坑爹啊
1.调用action_trigger_notification 方法
$this->email_notifications->action_trigger_notification( $action_id, $action_info );
从voucher_lkup_action 里获取到trigger_notification的ids,
然后循环用call_user_func调用这些id对应在voucher_lkup_notification表内notification_name对应的notification_function
public function action_trigger_notification( $action_id, $action_info )
{
$details = $this->voucher_lkup->get_action_by_id($action_id);
//ilog('Action Trigger Notification: <br/> Action Details: ');
//ilog( array_merge($action_info, $details) );
if($details['trigger_notification'] == 'Y' && !empty($details['notification_id']))
{
$notification_ids = explode(',', $details['notification_id']);
foreach($notification_ids as $notification_id)
{
$notification_details = $this->_notification_get( $notification_id );
if($notification_details && $notification_details['is_active'] == 'Y' && !empty($notification_details['notification_function']))
{
if(method_exists ($this, $notification_details['notification_function']))
{
call_user_func( array($this, $notification_details['notification_function']), $notification_details, $action_info );
}
}
}
}
}
比如说我们现在做的是replacement 那action对应的notification的function 是action_replacement_notification_report
在这个function 里会有2个主要的function
1.$this->_notification_get_email_content( 'replacement', $action_info );
2.$this->_notification_send( $notification_details, $notification, $action_info );
private function action_replacement_notification_report( $notification_details, $action_info )
{
$date = isset($action_info['action_time']) ? date('Y-m-d', strtotime($action_info['action_time'])) : date('Y-m-d');
$reports = site_url("vreports/view/24/$date/$date");
$action_info['report_url'] = $reports;
$notification = array();
$notification['email_content'] = $this->_notification_get_email_content( 'replacement', $action_info );
$this->_notification_send( $notification_details, $notification, $action_info );
}
_notification_get_email_content( $notification_content, $content_data ) 这个function就是来获取email的内容,把定义action_trigger_notification时传进来的action_content也传递进来 传到模版里 然后用view加上true返回邮件内容。
private function _notification_get_email_content( $notification_content, $content_data )
{
$folder = $this->config->slash_item('template_module_folder');
$template_view = $folder . 'notification';
$notification_content = 'notifications/' . $notification_content;
//set user_name into it.
$this->load->model('acl/acl_aro');
$content_data['user_id'] = isset($content_data['user_id']) ? $content_data['user_id'] : $this->_user_id;
$user_details = $this->acl_aro->get_user_info('', $content_data['user_id']);
$content_data['user_name'] = isset($content_data['user_name']) ? $content_data['user_name'] : $user_details['user_name'];
if(empty($user_details))
{
$user_details['user_name'] = ''; //cso user.
}
$this->load->library('wick');
$data = array('notification_content' => $this->load->view($notification_content, array_merge($content_data, array('page_data'=>$content_data)), TRUE));
return $this->load->view($template_view, $data, TRUE);
}
这个function 就时发送邮件啦,根据voucher_lkup_notification 里的target,target_cc等信息来进行发送
private function _notification_send( $notification_details, $notification, $action_info )
{
$this->load->helper('email');
$notification['target'] = isset($notification['target']) ? $notification['target'] : $this->_notification_get_target( $notification_details, 'target' );
$notification['target_cc'] = isset($notification['target_cc']) ? $notification['target_cc'] : $this->_notification_get_target( $notification_details, 'target_cc' );
$notification['target_bcc'] = isset($notification['target_bcc']) ? $notification['target_bcc'] : $this->_notification_get_target( $notification_details, 'target_bcc' );
$notification['email_subject'] = isset($notification['email_subject']) ? $notification['email_subject'] : $this->_notification_get_email_subject( $notification_details, $action_info );
if(IS_LOCALHOST)
{
ilog( $notification );
}
else
{
if( empty($notification['target']) )
{
//evo_email_admin('No target email found for the notification.' . '<BR />Notification Definition: <BR />' . var_export($notification_details, TRUE) . '<BR />Notification: <BR />' . var_export($notification, TRUE) );
//return FALSE;
}
if( empty($notification['email_content']) )
{
evo_email_admin('Notification content is empty. Kindly check. ' . '<BR />Notification Definition: <BR />' . var_export($notification_details, TRUE) . '<BR />Notification: <BR />' . var_export($notification, TRUE));
return FALSE;
}
$this->load->library('email');
$config['mailtype'] = 'html';
$this->email->initialize($config);
$this->email->subject( $notification['email_subject'] );
$this->email->from( $this->notification_from_email, $this->notification_from_name );
$this->email->to( $notification['target'] );
if(!empty( $notification['target_cc'] ))
{
$this->email->cc( $notification['target_cc'] );
}
if(!empty( $notification['target_bcc'] ))
{
$this->email->bcc( $notification['target_bcc'] );
}
$this->email->message( $notification['email_content'] );
$this->email->send();
}
return TRUE;
}
获取用户组的方法已经在之前记录过了
http://www.jinleistudio.cn/index.php/posts/92