message.mod.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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. function message_notice_read($id) {
  8. $id = intval($id);
  9. if (empty($id)) {
  10. return true;
  11. }
  12. pdo_update('message_notice_log', array('is_read' => MESSAGE_READ), array('id' => $id));
  13. return true;
  14. }
  15. function message_notice_record($content, $uid, $sign, $type, $extend_message = array()) {
  16. $message['message'] = $content;
  17. $message['uid'] = $uid;
  18. $message['sign'] = $sign;
  19. $message['type'] = $type;
  20. $message_notice_log = array_merge($message, $extend_message);
  21. $message_exists = message_validate_exists($message_notice_log);
  22. if (!empty($message_exists)) {
  23. return true;
  24. }
  25. if (empty($message_notice_log['create_time'])) {
  26. $message_notice_log['create_time'] = TIMESTAMP;
  27. }
  28. if (empty($message_notice_log['is_read'])) {
  29. $message_notice_log['is_read'] = MESSAGE_NOREAD;
  30. }
  31. $push_cloud_message_type = array(MESSAGE_ORDER_TYPE, MESSAGE_WORKORDER_TYPE, MESSAGE_REGISTER_TYPE);
  32. if (in_array($type, $push_cloud_message_type)) {
  33. message_notice_record_cloud($message_notice_log);
  34. }
  35. pdo_insert('message_notice_log', $message_notice_log);
  36. return true;
  37. }
  38. function message_validate_exists($message) {
  39. $message_exists = pdo_get('message_notice_log', $message);
  40. if (!empty($message_exists)) {
  41. return true;
  42. }
  43. return false;
  44. }
  45. function message_event_notice_list() {
  46. load()->model('user');
  47. global $_W;
  48. $message_table = table('message');
  49. $message_table->searchWithIsRead(MESSAGE_NOREAD);
  50. $type = '';
  51. if (user_is_vice_founder() || !user_is_founder($_W['uid'])) {
  52. $type = array(MESSAGE_ACCOUNT_EXPIRE_TYPE, MESSAGE_WECHAT_EXPIRE_TYPE, MESSAGE_USER_EXPIRE_TYPE, MESSAGE_WEBAPP_EXPIRE_TYPE, MESSAGE_WXAPP_MODULE_UPGRADE);
  53. $message_table->searchWithType($type);
  54. }
  55. $message_table->searchWithPage(1, 10);
  56. $lists = $message_table->messageList();
  57. $message_table->searchWithIsRead(MESSAGE_NOREAD);
  58. if (user_is_vice_founder() || !user_is_founder($_W['uid'])) {
  59. $message_table->searchWithType($type);
  60. }
  61. $total = $message_table->messageNoReadCount();
  62. $lists = message_list_detail($lists);
  63. return array(
  64. 'lists' => $lists,
  65. 'total' => $total
  66. );
  67. }
  68. function message_account_expire() {
  69. load()->model('account');
  70. if (!pdo_tableexists('message_notice_log')) {
  71. return true;
  72. }
  73. $account_table = table('account');
  74. $expire_account_list = $account_table->searchAccountList();
  75. if (empty($expire_account_list)) {
  76. return true;
  77. }
  78. foreach ($expire_account_list as $account) {
  79. $account_detail = uni_fetch($account['uniacid']);
  80. if (empty($account_detail['uid'])) {
  81. continue;
  82. }
  83. if ($account_detail['endtime'] > 0 && $account_detail['endtime'] < TIMESTAMP) {
  84. switch ($account_detail['type']) {
  85. case ACCOUNT_TYPE_APP_NORMAL:
  86. $type = MESSAGE_WECHAT_EXPIRE_TYPE;
  87. $account_name = '-小程序过期';
  88. break;
  89. case ACCOUNT_TYPE_WEBAPP_NORMAL:
  90. $type = MESSAGE_WEBAPP_EXPIRE_TYPE;
  91. $account_name = '-pc过期';
  92. break;
  93. default:
  94. $type = MESSAGE_ACCOUNT_EXPIRE_TYPE;
  95. $account_name = '-公众号过期';
  96. break;
  97. }
  98. $message = array(
  99. 'end_time' => $account_detail['endtime']
  100. );
  101. message_notice_record($account_detail['name'] . $account_name, $account_detail['uid'], $account['uniacid'], $type, $message);
  102. }
  103. }
  104. return true;
  105. }
  106. function message_notice_worker() {
  107. global $_W;
  108. load()->func('communication');
  109. load()->classs('cloudapi');
  110. $api = new CloudApi();
  111. $table = table('message');
  112. $time = 0;
  113. $table->searchWithType(MESSAGE_WORKORDER_TYPE);
  114. $message_record = $table->messageRecord();
  115. if (!empty($message_record)) {
  116. $time = $message_record['create_time'];
  117. }
  118. if (!empty($time) && TIMESTAMP - $time < 60 * 60 * 6) {
  119. return true;
  120. }
  121. $api_url = $api->get('system', 'workorder', array('do' => 'notload', 'time' => $time), 'json', false);
  122. if (is_error($api_url)) {
  123. return true;
  124. }
  125. $request_url = $api_url['data']['url'];
  126. $response = ihttp_get($request_url);
  127. $uid = $_W['config']['setting']['founder'];
  128. if ($response['code'] == 200) {
  129. $content = $response['content'];
  130. $worker_notice_lists = json_decode($content, JSON_OBJECT_AS_ARRAY);
  131. if (!empty($worker_notice_lists)) {
  132. foreach ($worker_notice_lists as $list) {
  133. message_notice_record($list['note'], $uid, $list['uuid'], MESSAGE_WORKORDER_TYPE, array('create_time' => strtotime($list['updated_at'])));
  134. }
  135. }
  136. }
  137. return true;
  138. }
  139. function message_sms_expire_notice() {
  140. load()->model('cloud');
  141. load()->model('setting');
  142. $setting_user_expire = setting_load('user_expire');
  143. if (empty($setting_user_expire['user_expire']['status'])) {
  144. return true;
  145. }
  146. $setting_sms_sign = setting_load('site_sms_sign');
  147. $custom_sign = !empty($setting_sms_sign['site_sms_sign']['user_expire']) ? $setting_sms_sign['site_sms_sign']['user_expire'] : '';
  148. $day = !empty($setting_user_expire['user_expire']['day']) ? $setting_user_expire['user_expire']['day'] : 1;
  149. $user_table = table('users');
  150. $user_table->searchWithMobile();
  151. $user_table->searchWithEndtime($day);
  152. $user_table->searchWithSendStatus();
  153. $users_expire = $user_table->searchUsersList();
  154. if (empty($users_expire)) {
  155. return true;
  156. }
  157. foreach ($users_expire as $v) {
  158. if (empty($v['puid'])) {
  159. continue;
  160. }
  161. if (!empty($v['mobile']) && preg_match(REGULAR_MOBILE, $v['mobile'])) {
  162. $result = cloud_sms_send($v['mobile'], '800015', array('username' => $v['username']), $custom_sign);
  163. if (is_error($result)) {
  164. $content = "您的用户名{$v['username']}即将过期。";
  165. pdo_insert('core_sendsms_log', array('mobile' => $v['mobile'], 'content' => $content, 'result' => $result['errno'] . $result['message'], 'createtime' => TIMESTAMP));
  166. } else {
  167. pdo_update('users_profile', array('send_expire_status' => 1), array('uid' => $v['uid']));
  168. }
  169. }
  170. }
  171. return true;
  172. }
  173. function message_user_expire_notice() {
  174. global $_W;
  175. if (!empty($_W['user']['endtime']) && $_W['user']['endtime'] < strtotime('+7 days')) {
  176. $content = $_W['user']['username'] . '即将过期';
  177. message_notice_record($content, $_W['uid'], $_W['uid'], MESSAGE_USER_EXPIRE_TYPE, array('end_time' => $_W['user']['endtime']));
  178. }
  179. return true;
  180. }
  181. function message_notice_record_cloud($message) {
  182. load()->classs('cloudapi');
  183. $api = new CloudApi();
  184. $result = $api->post('system', 'notify', array('json' => $message), 'html', false);
  185. return $result;
  186. }
  187. function message_wxapp_modules_version_upgrade() {
  188. global $_W;
  189. load()->model('wxapp');
  190. load()->model('account');
  191. $wxapp_table = table('wxapp');
  192. $wxapp_table->searchWithType(array(ACCOUNT_TYPE_APP_NORMAL));
  193. $uniacid_list = $wxapp_table->searchAccountList();
  194. if (empty($uniacid_list)) {
  195. return true;
  196. }
  197. $wxapp_list = $wxapp_table->wxappInfo(array_keys($uniacid_list));
  198. $module_table = table('module');
  199. $wxapp_modules = $module_table->modulesWxappList();
  200. foreach ($uniacid_list as $uniacid_info) {
  201. $account_owner = account_owner($uniacid_info['uniacid']);
  202. if (empty($account_owner) || $account_owner['uid'] != $_W['uid']) {
  203. continue;
  204. }
  205. $uniacid_modules = wxapp_version_all($uniacid_info['uniacid']);
  206. if (empty($uniacid_modules[0]['modules'])) {
  207. continue;
  208. }
  209. foreach ($uniacid_modules[0]['modules'] as $module) {
  210. if ($module['version'] < $wxapp_modules[$module['mid']]['version']) {
  211. $content = $wxapp_list[$uniacid_info['uniacid']]['name'] . '-' . '小程序中的' . $module['title'] . '应用有更新';
  212. message_notice_record($content, $_W['uid'], $uniacid_info['uniacid'], MESSAGE_WXAPP_MODULE_UPGRADE);
  213. }
  214. }
  215. }
  216. return true;
  217. }
  218. function message_list_detail($lists) {
  219. if (empty($lists)) {
  220. return $lists;
  221. }
  222. foreach ($lists as &$message) {
  223. $message['create_time'] = date('Y-m-d H:i:s', $message['create_time']);
  224. if ($message['type'] == MESSAGE_ORDER_TYPE) {
  225. $message['url'] = url('site/entry/orders', array('m' => 'store', 'direct'=>1, 'message_id' => $message['id']));
  226. }
  227. if ($message['type'] == MESSAGE_ACCOUNT_EXPIRE_TYPE) {
  228. $message['url'] = url('account/manage', array('account_type' => ACCOUNT_TYPE_OFFCIAL_NORMAL, 'message_id' => $message['id']));
  229. }
  230. if ($message['type'] == MESSAGE_WECHAT_EXPIRE_TYPE) {
  231. $message['url'] = url('account/manage', array('account_type' => ACCOUNT_TYPE_APP_NORMAL, 'message_id' => $message['id']));
  232. }
  233. if ($message['type'] == MESSAGE_WEBAPP_EXPIRE_TYPE) {
  234. $message['url'] = url('account/manage', array('account_type' => ACCOUNT_TYPE_WEBAPP_NORMAL, 'message_id' => $message['id']));
  235. }
  236. if ($message['type'] == MESSAGE_REGISTER_TYPE && $message['status'] == USER_STATUS_CHECK) {
  237. $message['url'] = url('user/display', array('type' => 'check', 'message_id' => $message['id']));
  238. }
  239. if ($message['type'] == MESSAGE_REGISTER_TYPE && $message['status'] == USER_STATUS_NORMAL) {
  240. $message['url'] = url('user/display', array('message_id' => $message['id']));
  241. }
  242. if ($message['type'] == MESSAGE_USER_EXPIRE_TYPE) {
  243. $message['url'] = url('user/profile', array('message_id' => $message['id']));
  244. }
  245. if ($message['type'] == MESSAGE_WXAPP_MODULE_UPGRADE) {
  246. $message['url'] = url('message/notice', array('message_id' => $message['id']));
  247. }
  248. if ($message['type'] == MESSAGE_WORKORDER_TYPE) {
  249. $message['url'] = url('system/workorder/display', array('uuid' => $message['sign'], 'message_id' => $message['id']));
  250. }
  251. }
  252. return $lists;
  253. }