PageRenderTime 53ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/b2b/core/admin/controller/member/ctl.messenger.php

http://phpfor.googlecode.com/
PHP | 332 lines | 290 code | 31 blank | 11 comment | 30 complexity | c91b5a2bffd88c57faaf31589412234f MD5 | raw file
  1. <?php
  2. define('MANUAL_SEND','MANUAL_SEND');
  3. class ctl_messenger extends adminPage {
  4. var $workground = 'setting';
  5. function index(){
  6. $this->path[] = array('text'=>'??????');
  7. $messenger = $this->system->loadModel('system/messenger');
  8. $action = $messenger->actions();
  9. foreach($action as $act=>$info){
  10. $list = $messenger->getSenders($act);
  11. foreach($list as $msg){
  12. $this->pagedata['call'][$act][$msg] = true;
  13. }
  14. }
  15. $this->pagedata['actions'] = $action;
  16. $this->_show('messenger/index.html');
  17. }
  18. function edTmpl($action,$msg){
  19. $messenger = &$this->system->loadModel('system/messenger');
  20. $info = $messenger->getParams($msg);
  21. if($this->pagedata['hasTitle'] = $info['hasTitle']){
  22. $this->pagedata['title'] = $messenger->loadTitle($action,$msg);
  23. }
  24. $this->pagedata['body'] = $messenger->loadTmpl($action,$msg);
  25. $this->pagedata['type'] = $info['isHtml']?'html':'textarea';
  26. $this->pagedata['messenger'] = $msg;
  27. $this->pagedata['action'] = $action;
  28. $actions = $messenger->actions();
  29. $this->pagedata['varmap'] = $actions[$action]['varmap'];
  30. $this->pagedata['action_desc'] = $actions[$action]['label'];
  31. $this->pagedata['msg_desc'] = $info['name'];
  32. $this->page('messenger/edtmpl.html');
  33. }
  34. function toRemove($sd_id,$sender){
  35. $this->begin('index.php?ctl=member/messenger&act=outbox&p[0]='.$sender);
  36. $mdl = $this->system->loadModel('resources/message');
  37. $this->end($mdl->removeSendBox($sd_id),__('????'));
  38. }
  39. function saveTmpl(){
  40. $messenger = $this->system->loadModel('system/messenger');
  41. $ret = $messenger->saveContent($_POST['actdo'],$_POST['messenger'],array(
  42. 'content'=>$_POST['content'],
  43. 'title'=>$_POST['title']
  44. ));
  45. if($ret){
  46. $this->splash('success','index.php?ctl=member/messenger&act=index');
  47. }else{
  48. $this->splash('failed','index.php?ctl=member/messenger&act=index');
  49. }
  50. }
  51. function save(){
  52. $messenger = $this->system->loadModel('system/messenger');
  53. if ($messenger->saveActions($_POST['actdo'])) {
  54. $this->splash('success', 'index.php?ctl=member/messenger&act=index');
  55. }else{
  56. $this->splash('failed','index.php?ctl=member/messenger&act=index');
  57. }
  58. }
  59. function savenote(){
  60. $messenger = $this->system->loadModel('system/messenger');
  61. if ($messenger->saveActions($_GET['actdo'])) {
  62. echo '?????';
  63. }else{
  64. echo '?????';;
  65. }
  66. }
  67. function outbox($sender){
  68. $this->path[] = array('text'=>'???');
  69. $messenger = $this->system->loadModel('system/messenger');
  70. $this->pagedata['oubox'] = $messenger->outbox($sender);
  71. $this->pagedata['sender']=$sender;
  72. $this->_show('messenger/outbox.html');
  73. }
  74. function _show($tmpl){
  75. $messenger = $this->system->loadModel('system/messenger');
  76. $this->pagedata['messenger'] = $messenger->getList();
  77. $this->pagedata['__show_page__'] = $tmpl;
  78. $this->page('messenger/page.html');
  79. }
  80. function send($sender){
  81. if($sender == 'sms'){
  82. if (empty($_POST['targets'])){
  83. $this->splash('failed','index.php?ctl=member/member&act=index','???????????');
  84. }
  85. $content = strip_tags($_POST['content']);
  86. if (empty($content)){
  87. $this->splash('failed','index.php?ctl=member/member&act=index','????????');
  88. }
  89. $use_reply = empty($_POST['use_reply']) ? 0 : 1;
  90. $oSms = $this->system->loadModel('system/sms');
  91. //????
  92. //$oSms->removeSms();
  93. //??????
  94. $contents = array();
  95. $phones = array_unique($_POST['targets']);
  96. //?????????
  97. foreach($phones as $k=>$v){
  98. if(!preg_match('/^1[3458][0-9]{9}$/',$v)){
  99. unset($phones[$k]);
  100. }
  101. }
  102. //??????
  103. $phone_count = count($phones);
  104. $contents['phones'] = implode(',',$phones);
  105. $contents['content'] = $content;
  106. //?????? ?70??????
  107. $content_length = strlen_utf8($content);
  108. $content_count = ceil($content_length/70);
  109. $total_count = $phone_count*$content_count;
  110. //??????????????
  111. $smsRes = $oSms->getSmsInfo();
  112. if ($smsRes['res'] == 'fail'){
  113. $this->splash('failed','index.php?ctl=member/member&act=index',$smsRes['info']);
  114. //$smsRes['info']['month_residual'];//????????
  115. //$smsRes['info']['all_residual'];//?????
  116. }
  117. if($total_count > $smsRes['info']['month_residual']){
  118. $this->splash('failed','index.php?ctl=member/member&act=index','??????????????');
  119. }
  120. //??????
  121. if($phone_count <= 200){
  122. $sendRes = $oSms->send(array($contents),$use_reply);
  123. if ($sendRes['res'] == 'fail'){
  124. $this->splash('failed','index.php?ctl=member/member&act=index','??????');
  125. }else{
  126. $this->splash('success','index.php?ctl=member/member&act=index','??????');
  127. }
  128. }else{
  129. //???????
  130. $i=0;
  131. while($i < $phone_count){
  132. $pslice = array_slice($phones,$i,200);
  133. $pcontents['phones'] = implode(',',$pslice);
  134. $pcontents['content'] = $content;
  135. $sendRes = $oSms->send(array($pcontents),$use_reply);
  136. $i += 200;
  137. }
  138. $this->splash('success','index.php?ctl=member/member&act=index','??????');
  139. }
  140. }
  141. $messenger = $this->system->loadModel('system/messenger');
  142. $member = $this->system->loadModel('member/member');
  143. $senderInfo = $messenger->getParams($sender);
  144. $systmpl = $this->system->loadModel('content/systmpl');
  145. $tmpl_name = md5(time());
  146. $column = 'member_id,uname,'.($senderInfo['dataname']?$senderInfo['dataname']:'custom');
  147. if($systmpl->set($tmpl_name,$_POST['content'])){
  148. if($_POST['targets']){
  149. $count = count($_POST['targets']);
  150. foreach($member->getList($column,array('member_id'=>array_keys($_POST['targets'])),0,-1,$count) as $info){
  151. $info['title'] = $_POST['title'];
  152. $messenger->addQueue($sender,$_POST['targets'][$info['member_id']],$info['title'],$info,$tmpl_name,5,MANUAL_SEND);
  153. }
  154. }elseif($_POST['filter']){
  155. parse_str($_POST['filter'],$filter);
  156. $step = 10; //?????10???
  157. $offset = 0;
  158. do{
  159. foreach($member->getList($column,$filter,$offset,$step,$count) as $info){
  160. $target = null;
  161. if($senderInfo['dataname']){
  162. $target = $info[$senderInfo['dataname']];
  163. }elseif(($custom = $info['custom']) && ($custom = unserialize($custom))){
  164. $target = $custom['contact'][$sender];
  165. }
  166. $info['title'] = $_POST['title'];
  167. if($target){
  168. $messenger->addQueue($sender,$target,$info['title'],$info,$tmpl_name,5,MANUAL_SEND);
  169. }else{
  170. continue;
  171. }
  172. }
  173. }while($count>($offset+=$step));
  174. }
  175. if($count>0)
  176. $messenger->addSendBox( array(
  177. 'content'=>substr(strip_tags(substr($_POST['content'],0,200)),0,180),
  178. 'subject'=>substr(strip_tags($_POST['title']),0,100),
  179. 'sender'=>$sender,
  180. 'sendcount'=>intval($count),
  181. 'tmpl_name'=>$tmpl_name,
  182. 'target'=>array('targets'=>$_POST['targets'],'filter'=>$_POST['filter'])
  183. ));
  184. $this->splash('success','index.php?ctl=member/messenger&act=outbox&p[0]='.$sender);
  185. }else{
  186. $this->splash('failed','index.php?ctl=member/member&act=index');
  187. }
  188. }
  189. function write($sender){
  190. $this->workground = 'member';
  191. $messenger = $this->system->loadModel('system/messenger');
  192. $this->pagedata['messenger'] = $sender;
  193. $this->pagedata['sender'] = $messenger->getParams($sender);
  194. $this->pagedata['dataname'] = $this->pagedata['sender']['dataname'];
  195. $member = $this->system->loadModel('member/member');
  196. if($this->pagedata['sender']['dataname']){
  197. $memberList = $member->getList('member_id,uname,'.$this->pagedata['sender']['dataname'].' as target ',$_POST,0,-1,$c);
  198. foreach($memberList as $k=>$v){
  199. if(!$v['target']){
  200. $badList[] = $v;
  201. unset($memberList[$k]);
  202. }
  203. }
  204. }else{
  205. $memberList = $member->getList('member_id,uname,custom',$_POST,0,-1,$c);
  206. foreach($memberList as $k=>$v){
  207. if(($custom = unserialize($v['custom'])) && $custom['contact'][$sender]){
  208. $memberList[$k]['target'] = $custom['contact'][$sender];
  209. }else{
  210. $badList[] = $v;
  211. unset($memberList[$k]);
  212. }
  213. }
  214. }
  215. $this->pagedata['members'] = $memberList;
  216. $this->pagedata['badList'] = $badList;
  217. $this->pagedata['badListCount'] = count($badList);
  218. $this->pagedata['type'] = $this->pagedata['sender']['isHtml']?'html':'textarea';
  219. $this->page('messenger/write.html');
  220. }
  221. function config($name){
  222. $this->path[] = array('text'=>'??');
  223. $messenger = $this->system->loadModel('system/messenger');
  224. $this->pagedata['options'] = $messenger->getOptions($name);
  225. $this->pagedata['messengername'] = $name;
  226. $this->_show('messenger/config.html');
  227. }
  228. function saveCfg(){
  229. $this->begin('index.php?ctl=member/messenger&act=config&p[0]='.$_POST['messenger']);
  230. $messenger = $this->system->loadModel('system/messenger');
  231. $this->end($messenger->saveCfg($_POST['messenger'],$_POST['config']),__('??????'));
  232. }
  233. function queue($sender){
  234. $this->path[] = array('text'=>'????');
  235. $objMessage = $this->system->loadModel('system/messenger');
  236. $aData = $objMessage->getQueue($sender);
  237. $this->pagedata['queue'] = $aData['data'];
  238. $this->pagedata['sender'] = $objMessage->getParams($sender);
  239. $this->pagedata['pageData'] = $aData['page'];
  240. $this->_show('messenger/queue.html');
  241. }
  242. function testEmail(){
  243. $this->pagedata['options'] = $_GET['config'];
  244. if ($_GET['config']['sendway']=="mail")
  245. $this->pagedata['acceptor']=$_GET['config']['usermail'];
  246. $this->setView('messenger/testemail.html');
  247. $this->output();
  248. }
  249. function doTestemail(){
  250. $usermail = $_POST['usermail']; //????
  251. $smtpport = $_POST['smtpport']; //???
  252. $smtpserver = $_POST['smtpserver']; //?????
  253. $smtpuname = $_POST['smtpuname']; //????
  254. $smtppasswd = $_POST['smtppasswd'];//????
  255. $acceptor = $_POST['acceptor']; //?????
  256. $subject = "??[".addslashes($this->system->getConf('system.shopname'))."]???????";
  257. $body = "??????????????????????????";
  258. switch ($_POST['sendway']){
  259. case 'smtp':
  260. $email = $this->system->loadModel('system/email');
  261. if ($email->ready($_POST)){
  262. $res = $email->send($acceptor,$subject,$body,$_POST);
  263. if ($res)
  264. $loginfo = "????????????????????";
  265. $loginfo .= "<br>".print_r($email->errorinfo,true);
  266. }
  267. else{
  268. $loginfo = "?????????????????";
  269. $loginfo .= "<br>".print_r($email->smtp->error,true);
  270. }
  271. echo $loginfo;
  272. break;
  273. case 'mail':
  274. ini_set('SMTP',$smtpserver);
  275. ini_set('smtp_port',$smtpport);
  276. ini_set('sendmail_from',$usermail);
  277. $email=$this->system->loadModel('system/email');
  278. $subject=$email->inlineCode($subject);
  279. $header = array(
  280. 'Return-path'=>'<'.$usermail.'>',
  281. 'Date'=>date('r'),
  282. 'From'=>$email->inlineCode($this->system->getConf('system.shopname')).'<'.$usermail.'>',
  283. 'MIME-Version'=>'1.0',
  284. 'Subject'=>$subject,
  285. 'To'=>$acceptor,
  286. 'Content-Type'=>'text/html; charset=UTF-8; format=flowed',
  287. 'Content-Transfer-Encoding'=>'base64'
  288. );
  289. $body=chunk_split(base64_encode($body));
  290. $header=$email->buildHeader($header);
  291. if(mail($acceptor, $subject, $body, $header)){
  292. echo "?????";
  293. }
  294. else{
  295. echo "?????????????";
  296. }
  297. break;
  298. }
  299. }
  300. }
  301. ?>