mass.ctrl.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <?php
  2. /**
  3. * [WeEngine System] Copyright (c) 2014 WE7.CC
  4. * WeEngine is NOT a free software, it under the license terms, visited http://www.we7.cc/ for more details.
  5. */
  6. defined('IN_IA') or exit('Access Denied');
  7. load()->func('cron');
  8. load()->model('cloud');
  9. load()->model('module');
  10. load()->model('mc');
  11. load()->model('material');
  12. $dos = array('list', 'post', 'cron', 'send', 'del', 'preview');
  13. $do = in_array($do, $dos) ? $do : 'post';
  14. $_W['page']['title'] = '定时群发-微信素材';
  15. if ($do == 'list') {
  16. $time = strtotime(date('Y-m-d'));
  17. $record = pdo_getall('mc_mass_record', array('uniacid' => $_W['uniacid'], 'sendtime >=' => $time), array(), 'sendtime', 'sendtime ASC', array(1,7));
  18. $days = array();
  19. for ($i = 0; $i < 8; $i++) {
  20. $day_info = array();
  21. $day_info['day'] = date('Y-m-d', strtotime("+{$i} days", $time));
  22. $starttime = strtotime("+{$i} days", $time);
  23. $endtime = $i+1;
  24. $endtime = strtotime("+{$endtime} days", $time);
  25. $massdata = pdo_fetch('SELECT id, `groupname`, `msgtype`, `group`, `attach_id`, `media_id`, `sendtime` FROM '. tablename('mc_mass_record') . ' WHERE uniacid = :uniacid AND sendtime BETWEEN :starttime AND :endtime AND status = 1', array(':uniacid' => $_W['uniacid'], ':starttime' => $starttime, ':endtime' => $endtime));
  26. if (!empty($massdata)) {
  27. $massdata['media'] = pdo_get('wechat_attachment', array('id' => $massdata['attach_id']));
  28. $massdata['media']['attach'] = tomedia($massdata['media']['attachment']);
  29. $massdata['media']['createtime_cn'] = date('Y-m-d H:i', $massdata['media']['createtime']);
  30. switch ($massdata['msgtype']) {
  31. case 'news':
  32. $massdata['msgtype_zh'] = '图文';
  33. $massdata['media']['items'] = pdo_getall('wechat_news', array('attach_id' => $massdata['attach_id']));
  34. foreach ($massdata['media']['items'] as &$news_val) {
  35. $news_val['thumb_url'] = tomedia($news_val['thumb_url']);
  36. }
  37. unset($news_val);
  38. break;
  39. case 'image':
  40. $massdata['msgtype_zh'] = '图片';
  41. break;
  42. case 'voice':
  43. $massdata['msgtype_zh'] = '语音';
  44. break;
  45. case 'video':
  46. $massdata['msgtype_zh'] = '视频';
  47. $massdata['media']['attach']['tag'] = iunserializer($massdata['media']['tag']);
  48. break;
  49. }
  50. $massdata['clock'] = date('H:m', $massdata['sendtime']);
  51. }
  52. $day_info['info'] = $massdata;
  53. $days[] = $day_info;
  54. }
  55. template('platform/mass-display');
  56. }
  57. if ($do == 'del') {
  58. $mass = pdo_get('mc_mass_record', array('uniacid' => $_W['uniacid'], 'id' => intval($_GPC['id'])));
  59. if (!empty($mass) && $mass['cron_id'] > 0) {
  60. $status = cron_delete(array($mass['cron_id']));
  61. if (is_error($status)) {
  62. iajax(0, $status, '');
  63. }
  64. }
  65. pdo_delete('mc_mass_record', array('uniacid' => $_W['uniacid'], 'id' => intval($_GPC['id'])));
  66. itoast('删除成功', '', 'info');
  67. }
  68. if ($do == 'post') {
  69. $id = intval($_GPC['id']);
  70. $mass_info = pdo_get('mc_mass_record', array('id' => $id));
  71. $groups = mc_fans_groups();
  72. if (checksubmit('submit')) {
  73. $type = in_array(intval($_GPC['type']), array(0, 1)) ? intval($_GPC['type']) : 0;
  74. $group = json_decode(htmlspecialchars_decode($_GPC['group']), true);
  75. if (empty($_GPC['reply'])) {
  76. itoast('请选择要群发的素材', '', 'error');
  77. }
  78. $mass_record = array(
  79. 'uniacid' => $_W['uniacid'],
  80. 'acid' => $_W['acid'],
  81. 'groupname' => $group['name'],
  82. 'fansnum' => $group['count'],
  83. 'msgtype' => '',
  84. 'group' => $group['id'],
  85. 'attach_id' => '',
  86. 'media_id' => '',
  87. 'status' => 1,
  88. 'type' => $type,
  89. 'sendtime' => TIMESTAMP,
  90. 'createtime' => TIMESTAMP,
  91. 'cron_id' => 0,
  92. );
  93. foreach ($_GPC['reply'] as $material_type => $material) {
  94. if (empty($material)) {
  95. continue;
  96. }
  97. list($temp, $msgtype) = explode('_', $material_type);
  98. $attachment = material_get($material);
  99. if ($attachment['model'] == 'local') {
  100. itoast('图文素材请选择微信素材', '', 'error');
  101. }
  102. $mass_record['media_id'] = $material;
  103. $mass_record['attach_id'] = $attachment['id'];
  104. $mass_record['msgtype'] = $msgtype;
  105. break;
  106. }
  107. if ($type == 1) {
  108. $cloud = cloud_prepare();
  109. if (is_error($cloud)) {
  110. itoast($cloud['message'], '', 'error');
  111. }
  112. set_time_limit(0);
  113. $starttime = strtotime(date('Y-m-d', strtotime($_GPC['sendtime'])));
  114. $endtime = strtotime(date('Y-m-d', strtotime($_GPC['sendtime']))) + 86400;
  115. $cron_title = date('Y-m-d', strtotime($_GPC['sendtime'])) . '微信群发任务';
  116. $mass_record['sendtime'] = strtotime($_GPC['sendtime']);
  117. $records = pdo_fetchall("SELECT id, cron_id FROM " . tablename('mc_mass_record') . ' WHERE uniacid = :uniacid AND sendtime BETWEEN :starttime AND :endtime AND status = 1 ORDER BY sendtime ASC LIMIT 8', array(':uniacid' => $_W['uniacid'], ':starttime' => $starttime, ':endtime' => $endtime), 'id');
  118. if (!empty($records)) {
  119. foreach ($records as $record) {
  120. if (!$record['cron_id']) {
  121. continue;
  122. }
  123. $corn_ids[] = $record['cron_id'];
  124. }
  125. if (!empty($corn_ids)) {
  126. $status = cron_delete($corn_ids);
  127. if (is_error($status)) {
  128. itoast('删除群发错误,请重新提交', referer());
  129. }
  130. }
  131. $ids = implode(',', array_keys($records));
  132. pdo_delete('mc_mass_record', array('uniacid' => $_W['uniacid'], 'id' => array($ids)));
  133. }
  134. pdo_insert('mc_mass_record', $mass_record);
  135. $mass_record_id = pdo_insertid();
  136. $cron_data = array(
  137. 'uniacid' => $_W['uniacid'],
  138. 'name' => $cron_title,
  139. 'filename' => 'mass',
  140. 'type' => 1,
  141. 'lastruntime' => $mass_record['sendtime'],
  142. 'extra' => $mass_record_id,
  143. 'module' => 'task',
  144. 'status' => 1,
  145. );
  146. $status = cron_add($cron_data);
  147. if (is_error($status)) {
  148. $message = "{$cron_title}同步到云服务失败,请手动同步<br>";
  149. itoast($message, url('platform/mass/send'), 'info');
  150. }
  151. pdo_update('mc_mass_record', array('cron_id' => $status), array('id' => $mass_record_id));
  152. itoast('定时群发设置成功', url('platform/mass/send'), 'success');
  153. } else {
  154. $account_api = WeAccount::create();
  155. $result = $account_api->fansSendAll($group['id'], $msgtype, $mass_record['media_id']);
  156. if (is_error($result)) {
  157. itoast($result['message'], url('platform/mass'), 'info');
  158. }
  159. $mass_record['status'] = 0;
  160. pdo_insert('mc_mass_record', $mass_record);
  161. itoast('立即发送设置成功', url('platform/mass/send'), 'success');
  162. }
  163. }
  164. template('platform/mass-post');
  165. }
  166. if ($do == 'cron') {
  167. $id = intval($_GPC['id']);
  168. $record = pdo_get('mc_mass_record', array('uniacid' => $_W['uniacid'], 'id' => $id));
  169. if (empty($record)) {
  170. itoast('群发任务不存在或已删除', referer(), 'error');
  171. }
  172. $cron = array(
  173. 'uniacid' => $_W['uniacid'],
  174. 'name' => date('Y-m-d', $record['sendtime']) . "微信群发任务",
  175. 'filename' => 'mass',
  176. 'type' => 1,
  177. 'lastruntime' => $record['sendtime'],
  178. 'extra' => $record['id'],
  179. 'module' => 'task',
  180. 'status' => 1
  181. );
  182. $status = cron_add($cron);
  183. if (is_error($status)) {
  184. itoast($status['message'], referer(), 'error');
  185. }
  186. pdo_update('mc_mass_record', array('cron_id' => $status), array('uniacid' => $_W['uniacid'], 'id' => $id));
  187. itoast('同步到云服务成功', referer(), 'success');
  188. }
  189. if ($do == 'preview') {
  190. $wxname = trim($_GPC['wxname']);
  191. if (empty($wxname)) {
  192. iajax(1, '微信号不能为空', '');
  193. }
  194. $type = trim($_GPC['type']);
  195. $media_id = trim($_GPC['media_id']);
  196. $account_api = WeAccount::create();
  197. $data = $account_api->fansSendPreview($wxname, $media_id, $type);
  198. if (is_error($data)) {
  199. iajax(-1, $data['message'], '');
  200. }
  201. iajax(0, 'success', '');
  202. }
  203. if ($do == 'send') {
  204. $_W['page']['title'] = '定时群发记录-定时群发';
  205. $pindex = max(1, intval($_GPC['page']));
  206. $psize = 20;
  207. $condition = ' WHERE `uniacid` = :uniacid AND `acid` = :acid';
  208. $params = array();
  209. $params[':uniacid'] = $_W['uniacid'];
  210. $params[':acid'] = $_W['acid'];
  211. $total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('mc_mass_record') . $condition, $params);
  212. $lists = pdo_getall('mc_mass_record', array('uniacid' => $_W['uniacid'], 'acid' => $_W['acid']), array(), '', 'id DESC', 'LIMIT '.($pindex-1)* $psize.','.$psize);
  213. $types = array('text' => '文本消息', 'image' => '图片消息', 'voice' => '语音消息', 'video' => '视频消息', 'news' => '图文消息', 'wxcard' => '微信卡券');
  214. $pager = pagination($total, $pindex, $psize);
  215. template('platform/mass-send');
  216. }