/b2b/core/model/system/mdl.messenger.php
PHP | 308 lines | 229 code | 42 blank | 37 comment | 30 complexity | a5066bbef140fdad71a30d7b10311920 MD5 | raw file
- <?php
- /**
- * kernel
- *
- * @package
- * @version $Id: mdl.messenger.php 1429 2008-04-08 05:22:50Z flaboy $
- * @copyright 2003-2007 ShopEx
- * @author ShopEx
- * @license Commercial
- */
- //adapted into plugin style by Alex 2008-3-14
- require_once('plugin.php');
- class mdl_messenger extends plugin{
- var $plugin_type = 'dir';
- var $plugin_name = 'messenger';
- var $prefix = 'messenger.';
- function outbox($sender){
- return $this->db->select('select out_id,tmpl_name,creattime,sendcount,content,subject from sdb_sendbox where sender=\''.$sender.'\'');
- }
- function &_load($sender){
- if(!$this->_sender[$sender]){
- $obj = $this->load($sender);
- $this->_sender[$sender] = &$obj;
- if(method_exists($obj,'getOptions')||method_exists($obj,'getoptions'))
- $obj->config = $this->getOptions($sender,true);
- if(method_exists($obj,'outgoingConfig')||method_exists($obj,'outgoingconfig'))
- $obj->outgoingOptions = $this->outgoingConfig($sender,true);
- }else{
- $obj = &$this->_sender[$sender];
- }
- return $obj;
- }
- function _ready(&$obj){
- if(!$obj->_isReady){
- if(method_exists($obj,'ready')) $obj->ready($obj->config);
- if(method_exists($obj,'finish')){
- if(!$this->_finishCall){
- register_shutdown_function(array(&$this,'_finish'));
- $this->_finishCall=array();
- }
- $this->_finishCall[] = &$obj;
- }
- $obj->_isReady = true;
- }
- }
- function _send($sendMethod,$tmpl_name,$target,$data,$type,$title=null){
- $sender = &$this->_load($sendMethod);
- $this->_ready($sender);
- if(!$this->_systmpl){
- $this->_systmpl = &$this->system->loadModel('content/systmpl');
- }
- $content = $this->_systmpl->fetch($tmpl_name,$data);
- $ret = $sender->hasTitle?$sender->send($target,
- $title?$title:$this->loadTitle($type,$sendMethod,'',$data)
- ,$content,$sender->config):$sender->send($target,$content,$sender->config);
- return ($ret || !is_bool($ret));
- }
- function _finish(){
- foreach($this->_finishCall as $obj){
- $obj->finish($obj->config);
- }
- }
- function _target($sender,$contectInfo,$member_id){
- $obj = &$this->_load($sender);
- if(($dataname = $obj->dataname) && $contectInfo[$dataname]){
- return $contectInfo[$dataname];
- }elseif(($dataname = $obj->dataname) && $contectInfo['delivery']['ship_'.$dataname]){
- return $contectInfo['delivery']['ship_'.$dataname];
- }else{
- $row = $this->db->selectrow('select email,member_id,uname,custom,mobile from sdb_members where member_id='.intval($member_id));
- if($dataname){
- return $row[$dataname];
- }elseif($custom = unserialize($row['custom'])){
- return $custom[$sender];
- }else{
- return false;
- }
- }
- }
- /**
- * actionSend
- *
- * @param mixed $type ??
- * @param mixed $contectInfo ????
- * @param mixed $member_id ??id
- * @param mixed $data ??
- * @access public
- * @return void
- */
- function actionSend($type,$data,$member_id=null){
- $actions = $this->actions();
- $senders = $this->getSenders($type);
- $level = $actions[$type]['level'];
- $desc = $actions[$type]['label'];
- foreach($senders as $sender){
- $tmpl_name = 'messenger:'.$sender.'/'.$type;
- $contractInfo = $data;
- if($sender && ($target = $this->_target($sender,$contractInfo,$member_id))){
- if($level < 9){ //??
- $this->addQueue($sender,$target,$desc,$data,$tmpl_name,$level,$type);
- }else{ //????
- $this->_send($sender,$tmpl_name,$target,$data,$type);
- }
- }
- }
- }
- function _useQueue($sender){
- $sender = &$this->_load($sender);
- $s = !$sender->withoutQueue;
- return $s;
- }
- function getSenders($act){
- $ret = $this->system->getConf('messenger.actions.'.$act);
- return explode(',',$ret);
- }
- function saveActions($actions){
- foreach($this->actions() as $act=>$info){
- if(!$actions[$act]){
- $actions[$act] = array();
- }
- }
- foreach($actions as $act=>$call){
- $this->system->setConf('messenger.actions.'.$act,implode(',',array_keys($call)));
- }
- return true;
- }
- /**
- * actions
- * ??????????????????????????
- *
- * ???
- * ??-?? => array(label=>?? , level=>????)
- *
- * ??????????????????send()????
- *
- * @access public
- * @return void
- */
- function actions(){
- $actions = array(
- 'lostPw'=>array('label'=>'??????','level'=>9,'varmap'=>'??? <{$uname}> ?? <{$passwd}> ?? <{$name}>'),
- 'order-delivery'=>array('label'=>'????????????','level'=>9,'varmap'=>'??? <{$order_id}> ???? <{$delivery.money}> ???? <{$delivery.delivery}><br>???? <{$ship_corp}> ???? <{$ship_billno}> ????? <{$delivery.ship_name}><br>????? <{$delivery.ship_addr}> ????? <{$delivery.ship_zip}> ????? <{$delivery.ship_tel}><br>????? <{$delivery.ship_mobile}> ???Email <{$delivery.ship_email}> ??? <{$delivery.op_name}><br>?? <{$delivery.memo}>'),
- 'order-deliverytoend'=>array('label'=>'????????????','level'=>9,'varmap'=>'??? <{$order_id}> ???? <{$delivery.money}> ???? <{$delivery.delivery}><br>???? <{$ship_corp}> ???? <{$ship_billno}> ????? <{$delivery.ship_name}><br>????? <{$delivery.ship_addr}> ????? <{$delivery.ship_zip}> ????? <{$delivery.ship_tel}><br>????? <{$delivery.ship_mobile}> ???Email <{$delivery.ship_email}> ??? <{$delivery.op_name}><br>?? <{$delivery.memo}>'),
- 'order-create'=>array('label'=>'?????','level'=>9,'varmap'=>'??? <{$order_id}> ?? <{$total_amount}> ???? <{$shipping}><br>????? <{$ship_mobile}> ????? <{$ship_tel}> ????? <{$ship_addr}><Br>???Email <{$ship_email}> ????? <{$ship_zip}> ????? <{$ship_name}>'),
- 'order-pay'=>array('label'=>'?????','level'=>9,'varmap'=>'??? <{$order_id}> ???? <{$pay_time}> ???? <{$money}>'),
- 'order-reship'=>array('label'=>'?????','level'=>9,'varmap'=>'??? <{$order_id}>'),
- 'order-refund'=>array('label'=>'?????','level'=>9,'varmap'=>'??? <{$order_id}>'),
- 'goods-notify'=>array('label'=>'??????','level'=>6,'varmap'=>'???? <{$goods_name}> ???? <{$username}>'),
- /* 'goods-replay'=>array('label'=>'??????','level'=>9), todo */
- 'account-register'=>array('label'=>'?????','level'=>9,'varmap'=>'??? <{$uname}> email <{$email}> ?? <{$passwd}>'),
- 'account-chgpass'=>array('label'=>'???????','level'=>9,'varmap'=>'?? <{$passwd}> ??? <{$uname}> ???< {$uname}> email <{$email}>'),
- 'account-chgpaypass'=>array('label'=>'????????????','level'=>9,'varmap'=>'???? <{$passwd}> ??? <{$uname}> ???< {$uname}> email <{$email}>'),
- /* 'comment-replay'=>array('label'=>'?????','level'=>9,'varmap'=>''), todo */
- /* 'indexorder-pay'=>array('label'=>'??????','level'=>9), */
- /* 'comment-new'=>array('label'=>'????????','level'=>9), */
- 'order-cancel'=>array('label'=>'????','level'=>9,'varmap'=>'??? <{$order_id}>'),
- 'member_confirm'=>array('label'=>'??????','level'=>9,'varmap'=>'???? <{$siteurl}> ??? <{$uname}> ???????/??? <{$result}> email <{$email}>'),
-
- 'advance-recharge'=>array('label'=>'??????',level=>9,
- 'varmap'=>'???? <{$shop_name}> ??????? <{$money}> ????? <{$advance}> ??????? <{$advance_date}> ???? <{$url}> '),
- 'advance-consumption'=>array('label'=>'??????',level=>9,
- 'varmap'=>'???? <{$shop_name}> ??????? <{$money}> ????? <{$advance}> ??????? <{$advance_date}> ???? <{$url}> '),
- 'matrix-create'=>array('label'=>'?????????','level'=>9,'varmap'=>'????<{$name}> ????<{$shopname}> ????<{$url}> ???<{$uname}> ??<{$passwd}> Email<{$email}>'),
- );
- // ?????????? 2010-07-26 18:44 wubin
- if(!$this->system->getConf('system.advance_version')) unset($actions['member_confirm']);
- return $actions;
- }
- function addSendBox($data){
- $data['creattime'] = time();
- $rs = $this->db->exec('select * from sdb_sendbox where 0=1');
- $sql = $this->db->getInsertSQL($rs,$data);
- return $this->db->exec($sql);
- }
- function send_obj_act($obj){
- return $msgbody;
- }
- function loadTmpl($action,$msg,$lang=''){
- $systmpl = &$this->system->loadModel('content/systmpl');
- return $systmpl->get('messenger:'.$msg.'/'.$action);
- }
- function loadTitle($action,$msg,$lang='',$data=""){
- $title = $this->system->getConf('messenger.title.'.$action.'.'.$msg);
- if($data!=""){
- preg_match_all('/<\{\$(\w+)\}>/i', $title, $result);
- foreach($result[1] as $k => $v){
- if(in_array($v,array_keys($data))){
- $title = str_replace($result[0][$k],$data[$v],$title);
- }
- }
- }
- return $title;
- }
- function addQueue($sender,$target,$title,$data,$tmpl_name,$level=5,$event_name=''){
- if(!$this->_useQueue($sender)){
- $this->_send($sender,$tmpl_name,$target,$data,$event_name,$title);
- return true;
- }
- $sqlData = array(
- 'tmpl_name'=>$tmpl_name,
- 'level'=>$level,
- 'event_name'=>$event_name,
- 'title'=>$title,
- 'target'=>$target,
- 'sender'=>$sender,
- 'data'=>$data
- );
- if($count = $this->system->getConf('messenger.stat.'.$senders.'.counts')){
- $sqlData['sender_order'] = $this->system->getConf('messenger.stat.'.$senders.'.time')/$count;
- }
- $rs = $this->db->exec('select * from sdb_msgqueue where 0=1');
- $sql = $this->db->getInsertSQL($rs,$sqlData);
- $this->db->exec($sql);
- }
- function runQueue(){
- $row = $this->db->selectrow("select modified from sdb_cachemgr where cname='MSG_MUTEX'",true,true);
- if( time() - $row['modified'] > 900){
- $this->db->exec("replace into sdb_cachemgr (cname,modified) values ('MSG_MUTEX',".time().")");
- register_shutdown_function(array(&$this,'removeMutex'));
- $systmpl = &$this->system->loadModel('content/systmpl');
- foreach($this->db->selectlimit('select queue_id,data,tmpl_name,target,title,event_name,sender from sdb_msgqueue order by level,sender_order',100) as $queue){
- $queue['data'] = unserialize($queue['data']);
- if($this->_send($queue['sender'],$queue['tmpl_name'],$queue['target'],$queue['data'],$queue['event_name'],$queue['title'])){
- $this->db->exec('delete from sdb_msgqueue where queue_id='.$queue['queue_id']);
- }
- }
- }
- }
- function removeMutex(){
- return $this->db->exec("delete from sdb_cachemgr where cname='MSG_MUTEX'");
- }
- function saveContent($action,$msg,$data){
- $systmpl = &$this->system->loadModel('content/systmpl');
- $info = $this->getParams($msg);
- if($info['hasTitle']) $this->system->setConf('messenger.title.'.$action.'.'.$msg,$data['title']);
- return $systmpl->set('messenger:'.$msg.'/'.$action,$data['content']);
- }
- function getQueue($sender){
- return $this->db->select_f('SELECT queue_id,target,level,event_name,title FROM sdb_msgqueue WHERE sender = \''.$sender.'\'', $nPage, 100);
- }
- function parseAddr($in){
- $a = explode("\n",$in);
- foreach($a as $k=>$v){
- if($v){
- if(($start = strpos($v,' <')) && ($end = strrpos($v,'>'))){
- $a[$k] = substr($v,$start+2,$end-$start-2);
- }
- }else{
- unset($a[$k]);
- }
- }
- return $a;
- }
- function getNoteConfig(){
- $rs=$this->db->selectrow("select s_data from sdb_settings where s_name='messenger'");
- $rs=unserialize($rs['s_data']);
- if($rs['actions.order-delivery']){
- $r['fxs']='checked';
- }
- if($rs['actions.order-deliverytoend']){
- $r['zdkh']='checked';
- }
- unset($rs);
- return $r;
- }
- }
- ?>