message.model.php 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <?php
  2. /**
  3. * 站内信管理
  4. *
  5. */
  6. defined('InShopNC') or exit('Access Invalid!');
  7. class messageModel
  8. {
  9. /**
  10. * 站内信列表
  11. * @param array $param 条件数组
  12. * @param object $page 分页对象调用
  13. */
  14. public function listMessage($condition,$page='') {
  15. //得到条件语句
  16. $condition_str = $this->getCondition($condition);
  17. $param = array();
  18. $param['table'] = 'message';
  19. $param['where'] = $condition_str;
  20. $param['order'] = 'message.message_id DESC';
  21. $message_list = Db::select($param,$page);
  22. return $message_list;
  23. }
  24. /**
  25. * 卖家站内信列表
  26. * @param array $param 条件数组
  27. * @param object $page 分页对象调用
  28. */
  29. public function listAndStoreMessage($condition,$page='') {
  30. //得到条件语句
  31. $condition_str = $this->getCondition($condition);
  32. $param = array();
  33. $param['table'] = 'message,store';
  34. $param['field'] = 'message.*,store.store_name,store.store_id';
  35. $param['where'] = $condition_str;
  36. $param['join_type'] = 'left join';
  37. $param['join_on'] = array('message.from_member_id = store.member_id');
  38. $param['order'] = 'message.message_id DESC';
  39. $message_list = Db::select($param,$page);
  40. return $message_list;
  41. }
  42. /**
  43. * 站内信总数
  44. */
  45. public function countMessage($condition) {
  46. //得到条件语句
  47. $condition_str = $this->getCondition($condition);
  48. $param = array();
  49. $param['table'] = 'message';
  50. $param['where'] = $condition_str;
  51. $param['field'] = ' count(message_id) as countnum ';
  52. $message_list = Db::select($param);
  53. return $message_list[0]['countnum'];
  54. }
  55. /**
  56. * 获取未读信息数量
  57. */
  58. public function countNewMessage($member_id){
  59. $condition_arr = array();
  60. $condition_arr['to_member_id'] = "$member_id";
  61. $condition_arr['no_message_state'] = '2';
  62. $condition_arr['message_open_common'] = '0';
  63. $condition_arr['no_del_member_id'] = "{$member_id}";
  64. $condition_arr['no_read_member_id'] = "{$member_id}";
  65. $countnum = $this->countMessage($condition_arr);
  66. return $countnum;
  67. }
  68. /**
  69. * 站内信单条信息
  70. * @param array $param 条件数组
  71. * @param object $page 分页对象调用
  72. */
  73. public function getRowMessage($condition) {
  74. //得到条件语句
  75. $condition_str = $this->getCondition($condition);
  76. $param = array();
  77. $param['table'] = 'message';
  78. $param['where'] = $condition_str;
  79. $message_list = Db::select($param);
  80. return $message_list[0];
  81. }
  82. /**
  83. * 站内信保存
  84. *
  85. * @param array $param 条件数组
  86. */
  87. public function saveMessage($param) {
  88. if($param['member_id'] == '') {
  89. return false;
  90. }
  91. $array = array();
  92. $array['message_parent_id'] = $param['message_parent_id']?$param['message_parent_id']:'0';
  93. $array['from_member_id'] = $param['from_member_id'] ? $param['from_member_id'] : '0' ;
  94. $array['from_member_name'] = $param['from_member_name'] ? $param['from_member_name'] : '' ;
  95. $array['to_member_id'] = $param['member_id'];
  96. $array['to_member_name'] = $param['to_member_name']?$param['to_member_name']:'';
  97. $array['message_body'] = trim($param['msg_content']);
  98. $array['message_time'] = time();
  99. $array['message_update_time']= time();
  100. $array['message_type'] = $param['message_type']?$param['message_type']:'0';
  101. $array['message_ismore'] = $param['message_ismore']?$param['message_ismore']:'0';
  102. $array['read_member_id'] = $param['read_member_id']?$param['read_member_id']:'';
  103. $array['del_member_id'] = $param['del_member_id']?$param['del_member_id']:'';
  104. return Db::insert('message',$array);
  105. }
  106. /**
  107. * 更新站内信
  108. */
  109. public function updateCommonMessage($param,$condition){
  110. if(empty($param)) {
  111. return false;
  112. }
  113. //得到条件语句
  114. $condition_str = $this->getCondition($condition);
  115. Db::update('message',$param,$condition_str);
  116. }
  117. /**
  118. * 删除发送信息
  119. */
  120. public function dropCommonMessage($condition,$drop_type){
  121. //得到条件语句
  122. $condition_str = $this->getCondition($condition);
  123. //查询站内信列表
  124. $message_list = array();
  125. $message_list = Db::select(array('table'=>'message','where'=>$condition_str,'field'=>'message_id,from_member_id,to_member_id,message_state,message_open'));
  126. unset($condition_str);
  127. if (empty($message_list)){
  128. return true;
  129. }
  130. $delmessage_id = array();
  131. $updatemessage_id = array();
  132. foreach ($message_list as $k=>$v){
  133. if ($drop_type == 'msg_private') {
  134. if($v['message_state'] == 2) {
  135. $delmessage_id[] = $v['message_id'];
  136. } elseif ($v['message_state'] == 0) {
  137. $updatemessage_id[] = $v['message_id'];
  138. }
  139. } elseif ($drop_type == 'msg_list') {
  140. if($v['message_state'] == 1) {
  141. $delmessage_id[] = $v['message_id'];
  142. } elseif ($v['message_state'] == 0) {
  143. $updatemessage_id[] = $v['message_id'];
  144. }
  145. } elseif ($drop_type == 'sns_msg'){
  146. $delmessage_id[] = $v['message_id'];
  147. }
  148. }
  149. if (!empty($delmessage_id)){
  150. $delmessage_id_str = "'".implode("','",$delmessage_id)."'";
  151. $condition_str = $this->getCondition(array('message_id_in'=>$delmessage_id_str));
  152. Db::delete('message',$condition_str);
  153. unset($condition_str);
  154. }
  155. if (!empty($updatemessage_id)){
  156. $updatemessage_id_str = "'".implode("','",$updatemessage_id)."'";
  157. $condition_str = $this->getCondition(array('message_id_in'=>$updatemessage_id_str));
  158. if ($drop_type == 'msg_private') {
  159. Db::update('message',array('message_state'=>1),$condition_str);
  160. }elseif ($drop_type == 'msg_list') {
  161. Db::update('message',array('message_state'=>2),$condition_str);
  162. }
  163. }
  164. return true;
  165. }
  166. /**
  167. * 删除批量信息
  168. */
  169. public function dropBatchMessage($condition,$to_member_id)
  170. {
  171. //得到条件语句
  172. $condition_str = $this->getCondition($condition);
  173. //查询站内信列表
  174. $message_list = array();
  175. $message_list = Db::select(array('table'=>'message','where'=>$condition_str));
  176. unset($condition_str);
  177. if (empty($message_list)){
  178. return true;
  179. }
  180. foreach ($message_list as $k=>$v){
  181. $tmp_delid_str = '';
  182. if (!empty($v['del_member_id'])){
  183. $tmp_delid_arr = explode(',',$v['del_member_id']);
  184. if (!in_array($to_member_id,$tmp_delid_arr)){
  185. $tmp_delid_arr[] = $to_member_id;
  186. }
  187. foreach ($tmp_delid_arr as $delid_k=>$delid_v){
  188. if ($delid_v == ''){
  189. unset($tmp_delid_arr[$delid_k]);
  190. }
  191. }
  192. $tmp_delid_arr = array_unique ($tmp_delid_arr);//去除相同
  193. sort($tmp_delid_arr);//排序
  194. $tmp_delid_str = ",".implode(',',$tmp_delid_arr).",";
  195. }else {
  196. $tmp_delid_str = ",{$to_member_id},";
  197. }
  198. if ($tmp_delid_str == $v['to_member_id']){//所有用户已经全部阅读过了可以删除
  199. Db::delete('message'," message_id = '{$v['message_id']}' ");
  200. }else {
  201. Db::update('message',array('del_member_id'=>$tmp_delid_str)," message_id = '{$v['message_id']}' ");
  202. }
  203. }
  204. return true;
  205. }
  206. private function getCondition($condition_array){
  207. $condition_sql = '';
  208. //站内信编号
  209. if($condition_array['message_id'] != ''){
  210. $condition_sql .= " and message.message_id = '{$condition_array['message_id']}'";
  211. }
  212. //父站内信
  213. if($condition_array['message_parent_id'] != ''){
  214. $condition_sql .= " and message.message_parent_id = '{$condition_array['message_parent_id']}'";
  215. }
  216. //站内信类型
  217. if($condition_array['message_type'] != ''){
  218. $condition_sql .= " and message.message_type = '{$condition_array['message_type']}'";
  219. }
  220. //站内信类型
  221. if($condition_array['message_type_in'] != ''){
  222. $condition_sql .= " and message.message_type in (".$condition_array['message_type_in'].")";
  223. }
  224. //站内信不显示的状态
  225. if($condition_array['no_message_state'] != ''){
  226. $condition_sql .= " and message.message_state != '{$condition_array['no_message_state']}'";
  227. }
  228. //是否已读
  229. if($condition_array['message_open_common'] != ''){
  230. $condition_sql .= " and message.message_open = '{$condition_array['message_open_common']}'";
  231. }
  232. //普通信件接收到的会员查询条件为
  233. if($condition_array['to_member_id_common'] != ''){
  234. $condition_sql .= " and message.to_member_id='{$condition_array['to_member_id_common']}' ";
  235. }
  236. //接收到的会员查询条件为如果message_ismore为1时则to_member_id like'%memberid%',如果message_ismore为0时则to_member_id = memberid
  237. if($condition_array['to_member_id'] != ''){
  238. $condition_sql .= " and (message.to_member_id ='all' or (message.message_ismore=0 and message.to_member_id='{$condition_array['to_member_id']}') or (message.message_ismore=1 and message.to_member_id like '%,{$condition_array['to_member_id']},%'))";
  239. }
  240. //发信人
  241. if($condition_array['from_member_id'] != '') {
  242. $condition_sql .= " and message.from_member_id='{$condition_array['from_member_id']}' ";
  243. }
  244. if($condition_array['from_to_member_id'] != '') {
  245. $condition_sql .= " and (message.from_member_id='{$condition_array['from_to_member_id']}' or message.to_member_id='{$condition_array['from_to_member_id']}')";
  246. }
  247. //未删除
  248. if($condition_array['no_del_member_id'] != ''){
  249. $condition_sql .= " and message.del_member_id not like '%,{$condition_array['no_del_member_id']},%' ";
  250. }
  251. //未读
  252. if($condition_array['no_read_member_id'] != ''){
  253. $condition_sql .= " and message.read_member_id not like '%,{$condition_array['no_read_member_id']},%' ";
  254. }
  255. //站内信编号in
  256. if(isset($condition_array['message_id_in'])) {
  257. if ($condition_array['message_id_in'] == ''){
  258. $condition_sql .=" and message_id in('')";
  259. }else {
  260. $condition_sql .=" and message_id in({$condition_array['message_id_in']})";
  261. }
  262. }
  263. return $condition_sql;
  264. }
  265. }