pm.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <?php
  2. /*
  3. [UCenter] (C)2001-2099 Comsenz Inc.
  4. This is NOT a freeware, use is subject to license terms
  5. $Id: pm.php 1066 2011-03-07 09:20:31Z svn_project_zhangjie $
  6. */
  7. !defined('IN_UC') && exit('Access Denied');
  8. class control extends adminbase {
  9. function __construct() {
  10. $this->control();
  11. }
  12. function control() {
  13. parent::__construct();
  14. if(!$this->user['isfounder'] && !$this->user['allowadminpm']) {
  15. $this->message('no_permission_for_this_module');
  16. }
  17. $this->load('pm');
  18. $this->check_priv();
  19. }
  20. function onls() {
  21. $pmlist = array();
  22. if($this->submitcheck() || getgpc('searchpmsubmit', 'G')) {
  23. $srchtablename = intval(getgpc('srchtablename', 'R'));
  24. $srchauthor = trim(getgpc('srchauthor', 'R'));
  25. $srchstarttime = trim(getgpc('srchstarttime', 'R'));
  26. $srchendtime = trim(getgpc('srchendtime', 'R'));
  27. $srchmessage = trim(getgpc('srchmessage', 'R'));
  28. $wheresql = array();
  29. if(!$srchtablename) {
  30. $srchtablename = 0;
  31. }
  32. if($srchauthor) {
  33. $this->load('user');
  34. $uidarr = $_ENV['user']->name2id(explode(',', $srchauthor));
  35. $wheresql[] = "authorid IN (".$this->implode($uidarr).")";
  36. }
  37. if($srchstarttime) {
  38. $wheresql[] = "dateline>='".strtotime($srchstarttime)."'";
  39. }
  40. if($srchendtime) {
  41. $wheresql[] = "dateline<'".strtotime($srchendtime)."'";
  42. }
  43. if($srchmessage) {
  44. $wheresql[] = "message LIKE '%{$srchmessage}%'";
  45. }
  46. $count = 0;
  47. if(!empty($wheresql)) {
  48. $count = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."pm_messages_".(string)$srchtablename." WHERE ".implode(' AND ', $wheresql));
  49. }
  50. if($count) {
  51. $page = intval(getgpc('page', 'R'));
  52. $page = $page ? $page : 1;
  53. $start = ($page-1) * UC_PPP;
  54. $limit = UC_PPP;
  55. $query = $this->db->query("SELECT * FROM ".UC_DBTABLEPRE."pm_messages_".(string)$srchtablename." WHERE ".implode(' AND ', $wheresql)." LIMIT $start, $limit");
  56. while($message = $this->db->fetch_array($query)) {
  57. $message['dateline'] = $this->date($message['dateline']);
  58. $user[] = $message['authorid'];
  59. $pmlist[] = $message;
  60. }
  61. $this->load('user');
  62. $usernamearr = $_ENV['user']->id2name($user);
  63. foreach($pmlist as $key => $value) {
  64. $pmlist[$key]['author'] = $usernamearr[$pmlist[$key]['authorid']];
  65. }
  66. $multipage = $this->page($count, UC_PPP, $page, 'admin.php?m=pm&a=ls&srchtablename='.$srchtablename.'&srchauthor='.urlencode($srchauthor).'&srchstarttime='.urlencode($srchstarttime).'&srchendtime='.urlencode($srchendtime).'&srchmessage='.urlencode($srchmessage).'&searchpmsubmit=true');
  67. }
  68. }
  69. $pmnum = 0;
  70. for($i = 0; $i < 10; $i++) {
  71. $pmnum += $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."pm_messages_".(string)$i);
  72. }
  73. $this->view->assign('pmnum', $pmnum);
  74. $this->view->assign('count', $count);
  75. $this->view->assign('pmlist', $pmlist);
  76. $this->view->assign('multipage', $multipage);
  77. $this->view->assign('srchtablename', $srchtablename);
  78. $this->view->assign('srchauthor', $srchauthor);
  79. $this->view->assign('srchstarttime', $srchstarttime);
  80. $this->view->assign('srchendtime', $srchendtime);
  81. $this->view->assign('srchmessage', $srchmessage);
  82. $this->view->display('admin_pm_search');
  83. }
  84. function ondelete() {
  85. $srchtablename = intval(getgpc('srchtablename', 'R'));
  86. $srchauthor = trim(getgpc('srchauthor', 'R'));
  87. $srchstarttime = trim(getgpc('srchstarttime', 'R'));
  88. $srchendtime = trim(getgpc('srchendtime', 'R'));
  89. $srchmessage = trim(getgpc('srchmessage', 'R'));
  90. if($this->submitcheck()) {
  91. $pmids = getgpc('deletepmid');
  92. if(empty($pmids)) {
  93. $this->message('pm_delete_noselect', 'admin.php?m=pm&a=ls&srchtablename='.$srchtablename.'&srchauthor='.urlencode($srchauthor).'&srchstarttime='.urlencode($srchstarttime).'&srchendtime='.urlencode($srchendtime).'&srchmessage='.urlencode($srchmessage).'&searchpmsubmit=true');
  94. }
  95. foreach($pmids as $pmid) {
  96. $query = $this->db->query("SELECT * FROM ".UC_DBTABLEPRE."pm_indexes i LEFT JOIN ".UC_DBTABLEPRE."pm_lists l ON i.plid=l.plid WHERE i.pmid='$pmid'");
  97. if($index = $this->db->fetch_array($query)) {
  98. $this->db->query("DELETE FROM ".UC_DBTABLEPRE.$_ENV['pm']->getposttablename($index['plid'])." WHERE pmid='$pmid'");
  99. if($index['pmtype'] == 1) {
  100. $authorcount = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE.$_ENV['pm']->getposttablename($index['plid'])." WHERE plid='".$index['plid']."' AND delstatus IN (0, 2)");
  101. $othercount = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE.$_ENV['pm']->getposttablename($index['plid'])." WHERE plid='".$index['plid']."' AND delstatus IN (0, 1)");
  102. $users = explode('_', $index['min_max']);
  103. if($users[0] == $index['authorid']) {
  104. $other = $users[1];
  105. } else {
  106. $other = $users[0];
  107. }
  108. if($authorcount + $othercount == 0) {
  109. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_members WHERE plid='".$index['plid']."'");
  110. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_lists WHERE plid='".$index['plid']."'");
  111. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_indexes WHERE plid='".$index['plid']."'");
  112. } else {
  113. if($authorcount){
  114. $this->db->query("UPDATE ".UC_DBTABLEPRE."pm_members SET pmnum='$authorcount' WHERE plid='".$index['plid']."' AND uid='".$index['authorid']."'");
  115. } else {
  116. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_members WHERE plid='".$index['plid']."' AND uid='".$index['authorid']."'");
  117. }
  118. if($othercount) {
  119. $this->db->query("UPDATE ".UC_DBTABLEPRE."pm_members SET pmnum='$othercount' WHERE plid='".$index['plid']."' AND uid='".$other."'");
  120. } else {
  121. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_members WHERE plid='".$index['plid']."' AND uid='".$other."'");
  122. }
  123. }
  124. } elseif($index['pmtype'] == 2) {
  125. $count = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE.$_ENV['pm']->getposttablename($index['plid'])." WHERE plid='".$index['plid']."'");
  126. if(!$count) {
  127. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_members WHERE plid='".$index['plid']."'");
  128. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_lists WHERE plid='".$index['plid']."'");
  129. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_indexes WHERE plid='".$index['plid']."'");
  130. } else {
  131. $this->db->query("UPDATE ".UC_DBTABLEPRE."pm_members SET pmnum='$count' WHERE plid='".$index['plid']."'");
  132. }
  133. }
  134. }
  135. }
  136. $this->message('pm_clear_succeed', 'admin.php?m=pm&a=ls&srchtablename='.$srchtablename.'&srchauthor='.urlencode($srchauthor).'&srchstarttime='.urlencode($srchstarttime).'&srchendtime='.urlencode($srchendtime).'&srchmessage='.urlencode($srchmessage).'&searchpmsubmit=true');
  137. }
  138. }
  139. function onclear() {
  140. $delnum = 0;
  141. if($this->submitcheck() || getgpc('clearpmsubmit', 'G')) {
  142. $usernames = trim(getgpc('usernames', 'R'));
  143. $pertask = intval(getgpc('pertask', 'R'));
  144. $current = intval(getgpc('current', 'R'));
  145. $pertask = $pertask ? $pertask : 100;
  146. $current = $current > 0 ? $current : 0;
  147. $next = $current + $pertask;
  148. $nexturl = "admin.php?m=pm&a=clear&usernames=$usernames&current=$next&pertask=$pertask&clearpmsubmit=1";
  149. if($usernames) {
  150. $uids = 0;
  151. $processed = 0;
  152. $usernames = "'".implode("', '", explode(',', $usernames))."'";
  153. $query = $this->db->query("SELECT uid FROM ".UC_DBTABLEPRE."members WHERE username IN ($usernames)");
  154. while($res = $this->db->fetch_array($query)) {
  155. $uids .= ','.$res['uid'];
  156. }
  157. if($uids) {
  158. $query = $this->db->query("SELECT m.plid, m.uid, t.pmtype, t.authorid FROM ".UC_DBTABLEPRE."pm_members m LEFT JOIN ".UC_DBTABLEPRE."pm_lists t ON m.plid=t.plid WHERE m.uid IN ($uids) LIMIT $pertask");
  159. while($member = $this->db->fetch_array($query)) {
  160. $processed = 1;
  161. if($member['pmtype'] == 1) {
  162. $this->db->query("DELETE FROM ".UC_DBTABLEPRE.$_ENV['pm']->getposttablename($member['plid'])." WHERE plid='".$member['plid']."'");
  163. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_lists WHERE plid='".$member['plid']."'");
  164. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_members WHERE plid='".$member['plid']."'");
  165. $adjust = $this->db->affected_rows();
  166. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_indexes WHERE plid='".$member['plid']."'");
  167. } elseif($member['pmtype'] == 2) {
  168. if($member['authorid'] == $member['uid']) {
  169. $this->db->query("DELETE FROM ".UC_DBTABLEPRE.$_ENV['pm']->getposttablename($member['plid'])." WHERE plid='".$member['plid']."'");
  170. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_lists WHERE plid='".$member['plid']."'");
  171. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_members WHERE plid='".$member['plid']."'");
  172. $adjust = $this->db->affected_rows();
  173. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_indexes WHERE plid='".$member['plid']."'");
  174. } else {
  175. $this->db->query("DELETE FROM ".UC_DBTABLEPRE.$_ENV['pm']->getposttablename($member['plid'])." WHERE plid='".$member['plid']."' AND authorid IN (".$uids.")");
  176. $affectpmnum = $this->db->affected_rows();
  177. $this->db->query("DELETE FROM ".UC_DBTABLEPRE."pm_members WHERE plid='".$member['plid']."' AND uid IN (".$uids.")");
  178. $affectmembers = $this->db->affected_rows();
  179. $adjust = $affectmembers;
  180. $this->db->query("UPDATE ".UC_DBTABLEPRE."pm_members SET pmnum=pmnum-'$affectpmnum' WHERE plid='".$member['plid']."'");
  181. $this->db->query("UPDATE ".UC_DBTABLEPRE."pm_lists SET members=members-'$affectmembers' WHERE plid='".$member['plid']."'");
  182. }
  183. }
  184. }
  185. }
  186. if($processed) {
  187. $this->message('pm_clear_processing', $nexturl, 0, array('current' => $current, 'next' => $next));
  188. } else {
  189. $this->message('pm_clear_succeed', 'admin.php?m=pm&a=clear');
  190. }
  191. }
  192. }
  193. $pmnum = 0;
  194. for($i = 0; $i < 10; $i++) {
  195. $pmnum += $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."pm_messages_".(string)$i);
  196. }
  197. $this->view->assign('pmnum', $pmnum);
  198. $this->view->assign('delnum', $delnum);
  199. $this->view->assign('status', $status);
  200. $this->view->display('admin_pm_clear');
  201. }
  202. }
  203. ?>