message.model.php 9.5 KB

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