table_home_blog.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <?php
  2. /**
  3. * [Discuz!] (C)2001-2099 Comsenz Inc.
  4. * This is NOT a freeware, use is subject to license terms
  5. *
  6. * $Id: table_home_blog.php 32130 2012-11-14 09:20:40Z zhengqingpeng $
  7. */
  8. if(!defined('IN_DISCUZ')) {
  9. exit('Access Denied');
  10. }
  11. class table_home_blog extends discuz_table
  12. {
  13. public function __construct() {
  14. $this->_table = 'home_blog';
  15. $this->_pk = 'blogid';
  16. parent::__construct();
  17. }
  18. public function fetch_by_id_idtype($id) {
  19. if(!$id) {
  20. return null;
  21. }
  22. return DB::fetch_first('SELECT * FROM %t WHERE %i', array($this->_table, DB::field('blogid', $id)));
  23. }
  24. public function update_dateline_by_id_idtype_uid($id, $idtype, $dateline, $uid) {
  25. return DB::update($this->_table, array('dateline' => $dateline), DB::field($idtype, $id).' AND '.DB::field('uid', $uid));
  26. }
  27. public function range($start = 0, $limit = 0, $ordersc = 'DESC', $orderby = 'dateline', $friend = null, $status = null, $uid = null, $dateline = null) {
  28. $wheresql = '1';
  29. $wheresql .= $friend ? ' AND '.DB::field('friend', $friend) : '';
  30. $wheresql .= $uid ? ' AND '.DB::field('uid', $uid) : '';
  31. $wheresql .= $status ? ' AND '.DB::field('status', $status) : '';
  32. $wheresql .= $dateline ? ' AND '.DB::field('dateline', $dateline, '>=') : '';
  33. if(in_array($orderby, array('hot', 'dateline'))) {
  34. $wheresql .= ' ORDER BY '.DB::order($orderby, $ordersc);
  35. }
  36. $wheresql .= ' '.DB::limit($start, $limit);
  37. return DB::fetch_all('SELECT * FROM %t WHERE %i', array($this->_table, $wheresql), $this->_pk);
  38. }
  39. public function fetch_all($blogid, $orderby = '', $ordersc = '', $start = 0, $limit = 0) {
  40. if(!$blogid) {
  41. return null;
  42. }
  43. $wheresql = DB::field('blogid', $blogid);
  44. if($orderby = DB::order($orderby, $ordersc)) {
  45. $wheresql .= ' ORDER BY '.$orderby;
  46. }
  47. if($limit = DB::limit($start, $limit)) {
  48. $wheresql .= ' '.$limit;
  49. }
  50. return DB::fetch_all('SELECT * FROM %t WHERE %i', array($this->_table, $wheresql), $this->_pk);
  51. }
  52. public function increase($blogid, $uid, $setarr) {
  53. $sql = array();
  54. $allowkey = array('hot', 'viewnum', 'replynum', 'favtimes', 'sharetimes');
  55. foreach($setarr as $key => $value) {
  56. if(($value = intval($value)) && in_array($key, $allowkey)) {
  57. $sql[] = "`$key`=`$key`+'$value'";
  58. }
  59. }
  60. $wheresql = DB::field('blogid', $blogid);
  61. if($uid) {
  62. $wheresql .= ' AND '.DB::field('uid', $uid);
  63. }
  64. if(!empty($sql)){
  65. return DB::query('UPDATE %t SET %i WHERE %i', array($this->_table, implode(',', $sql), $wheresql));
  66. }
  67. }
  68. public function update_click($blogid, $clickid, $incclick) {
  69. $clickid = intval($clickid);
  70. if($clickid < 1 || $clickid > 8) {
  71. return null;
  72. }
  73. return DB::query('UPDATE %t SET click'.$clickid.' = click'.$clickid.'+\'%d\' WHERE blogid = %d', array($this->_table, $incclick, $blogid));
  74. }
  75. public function update_classid_by_classid($classid, $newclassid) {
  76. return DB::query('UPDATE %t SET classid = %d WHERE classid = %d', array($this->_table, $newclassid, $classid));
  77. }
  78. public function fetch_blogid_by_subject($keyword, $limit) {
  79. $field = "subject LIKE '%{text}%'";
  80. if(preg_match("(AND|\+|&|\s)", $keyword) && !preg_match("(OR|\|)", $keyword)) {
  81. $andor = ' AND ';
  82. $keywordsrch = '1';
  83. $keyword = preg_replace("/( AND |&| )/is", "+", $keyword);
  84. } else {
  85. $andor = ' OR ';
  86. $keywordsrch = '0';
  87. $keyword = preg_replace("/( OR |\|)/is", "+", $keyword);
  88. }
  89. $keyword = str_replace('*', '%', addcslashes(daddslashes($keyword), '%_'));
  90. foreach(explode('+', $keyword) as $text) {
  91. $text = trim($text);
  92. if($text) {
  93. $keywordsrch .= $andor;
  94. $keywordsrch .= str_replace('{text}', $text, $field);
  95. }
  96. }
  97. $wheresql = " ($keywordsrch)";
  98. if($limit) {
  99. $wheresql .= ' ORDER BY blogid DESC '.DB::limit(0, $limit);
  100. }
  101. return DB::fetch_all('SELECT * FROM %t WHERE %i', array($this->_table, $wheresql), $this->_pk);
  102. }
  103. public function fetch_blogid_by_uid($uid, $start = 0, $limit = 0) {
  104. if(!$uid) {
  105. return null;
  106. }
  107. return DB::fetch_all('SELECT blogid FROM %t WHERE uid IN (%n) %i', array($this->_table, $uid, DB::limit($start, $limit)), $this->_pk);
  108. }
  109. public function fetch_all_by_uid($uid, $orderby = 'dateline', $start = 0, $limit = 0) {
  110. if(!$uid) {
  111. return null;
  112. }
  113. if($orderby = DB::order($orderby, 'DESC')) {
  114. $order = 'ORDER BY '.$orderby;
  115. }
  116. return DB::fetch_all('SELECT * FROM %t WHERE uid IN (%n) %i', array($this->_table, $uid, $order.' '.DB::limit($start, $limit)), $this->_pk);
  117. }
  118. public function fetch_all_by_hot($hot, $orderby = 'dateline', $start = 0, $limit = 0) {
  119. if(!$uid) {
  120. return null;
  121. }
  122. if($orderby = DB::order($orderby, 'DESC')) {
  123. $order = 'ORDER BY '.$orderby;
  124. }
  125. return DB::fetch_all('SELECT * FROM %t WHERE hot>=%d %i', array($this->_table, $hot, $order.' '.DB::limit($start, $limit)), $this->_pk);
  126. }
  127. public function count_by_catid($catid) {
  128. return DB::result_first('SELECT COUNT(*) FROM %t WHERE catid = %d', array($this->_table, $catid));
  129. }
  130. public function count_by_uid($uid) {
  131. return DB::result_first('SELECT COUNT(*) FROM %t WHERE uid = %d', array($this->_table, $uid));
  132. }
  133. public function delete_by_catid($catid) {
  134. if(!$catid) {
  135. return null;
  136. }
  137. return DB::delete($this->_table, DB::field('catid', $catid));
  138. }
  139. public function delete_by_uid($uids) {
  140. if(!$uids) {
  141. return null;
  142. }
  143. return DB::delete($this->_table, DB::field('uid', $uids));
  144. }
  145. public function update_by_catid($catid, $data) {
  146. if(empty($data) || !is_array($data) || !$catid) {
  147. return null;
  148. }
  149. return DB::update($this->_table, $data, DB::field('catid', $catid));
  150. }
  151. public function count_uid_by_blogid($blogid) {
  152. if(!is_array($blogid) || !$blogid) {
  153. return null;
  154. }
  155. return DB::fetch_all('SELECT uid, COUNT(blogid) AS count FROM %t WHERE blogid IN (%n) GROUP BY uid', array($this->_table, $blogid));
  156. }
  157. public function count_all_by_search($blogid = null, $uids = null, $starttime = null, $endtime = null, $hot1 = null, $hot2 = null, $viewnum1 = null, $viewnum2 = null, $replynum1 = null, $replynum2 = null, $friend = null, $ip = null, $keywords = null, $lengthlimit = null, $classid = null, $catid = null, $subject = null, $countwithoutjoin = false, $status = null) {
  158. return $this->fetch_all_by_search(3, $blogid, $uids, $starttime, $endtime, $hot1, $hot2, $viewnum1, $viewnum2, $replynum1, $replynum2, $friend, $ip, $keywords, $lengthlimit, null, null, 0, 0, $classid, $catid, $subject, null, $countwithoutjoin, $status);
  159. }
  160. public function fetch_all_by_search($fetchtype = 1, $blogid = null, $uids = null, $starttime = null, $endtime = null, $hot1 = null, $hot2 = null, $viewnum1 = null, $viewnum2 = null, $replynum1 = null, $replynum2 = null, $friend = null, $ip = null, $keywords = null, $lengthlimit = null, $orderby = null, $ordersc = null, $start = 0, $limit = 0, $classid = null, $catid = null, $subject = null, $findex = null, $countwithoutjoin = false, $status = null) {
  161. $sql = '';
  162. $sql .= $blogid ? ' AND b.'.DB::field('blogid', $blogid) : '';
  163. $sql .= is_array($uids) && count($uids) > 0 ? ' AND b.'.DB::field('uid', $uids) : '';
  164. $sql .= $starttime ? ' AND b.'.DB::field('dateline', $starttime, '>') : '';
  165. $sql .= $endtime ? ' AND b.'.DB::field('dateline', $endtime, '<') : '';
  166. $sql .= $hot1 ? ' AND b.'.DB::field('hot', $hot1, '>=') : '';
  167. $sql .= $hot2 ? ' AND b.'.DB::field('hot', $hot2, '<=') : '';
  168. $sql .= $viewnum1 ? ' AND b.'.DB::field('viewnum', $viewnum1, '>=') : '';
  169. $sql .= $viewnum2 ? ' AND b.'.DB::field('viewnum', $viewnum1, '<=') : '';
  170. $sql .= $replynum1 ? ' AND b.'.DB::field('replynum', $replynum1, '>=') : '';
  171. $sql .= $replynum2 ? ' AND b.'.DB::field('replynum', $replynum2, '<=') : '';
  172. $sql .= $classid ? ' AND b.'.DB::field('classid', $classid) : '';
  173. $sql .= $friend ? ' AND b.'.DB::field('friend', $friend) : '';
  174. $sql .= !is_null($status) ? ' AND b.'.DB::field('status', $status) : '';
  175. $ip = str_replace('*', '', $ip);
  176. if($fetchtype == 1) {
  177. $sql .= $ip ? ' AND bf.'.DB::field('postip', "%$ip%", 'like') : '';
  178. }
  179. $orderby = $orderby ? $orderby : 'dateline';
  180. $ordersc = $ordersc ? $ordersc : 'DESC';
  181. if($fetchtype == 1 && $keywords != '' && !is_array($keywords)) {
  182. $sqlkeywords = '';
  183. $or = '';
  184. $keywords = explode(',', str_replace(' ', '', $keywords));
  185. for($i = 0; $i < count($keywords); $i++) {
  186. $keywords[$i] = daddslashes($keywords[$i]);
  187. if(preg_match("/\{(\d+)\}/", $keywords[$i])) {
  188. $keywords[$i] = preg_replace("/\\\{(\d+)\\\}/", ".{0,\\1}", preg_quote($keywords[$i], '/'));
  189. $sqlkeywords .= " $or b.subject REGEXP '".$keywords[$i]."' OR bf.message REGEXP '".$keywords[$i]."'";
  190. } else {
  191. $sqlkeywords .= " $or b.subject LIKE '%".$keywords[$i]."%' OR bf.message LIKE '%".$keywords[$i]."%'";
  192. }
  193. $or = 'OR';
  194. }
  195. if($sqlkeywords) {
  196. $sql .= " AND ($sqlkeywords)";
  197. }
  198. }
  199. $sql .= $subject ? ' AND b.'.DB::field('subject', "%$subject%", 'like') : '';
  200. $sql .= $catid ? ' AND b.'.DB::field('catid', $catid) : '';
  201. if($fetchtype == 1) {
  202. $sql .= $lengthlimit ? ' AND LENGTH(bf.message) > '.intval($lengthlimit) : '';
  203. }
  204. if($fetchtype == 3) {
  205. $selectfield = 'count(*)';
  206. } elseif ($fetchtype == 2) {
  207. $selectfield = 'b.blogid';
  208. } else {
  209. $selectfield = 'bf.*,b.*';
  210. }
  211. if($findex) {
  212. $findex = 'USE INDEX(dateline)';
  213. } else {
  214. $findex = '';
  215. }
  216. if($fetchtype == 3) {
  217. return DB::result_first("SELECT $selectfield FROM %t b ".(($countwithoutjoin === false) ? 'LEFT JOIN %t bf USING(blogid) ' : '').
  218. "WHERE 1 %i", ($countwithoutjoin === false) ? array($this->_table, 'home_blogfield', $sql) : array($this->_table, $sql));
  219. } else {
  220. if($order = DB::order($orderby, $ordersc)) {
  221. $order = 'ORDER BY b.'.$order;
  222. } else {
  223. $order = '';
  224. }
  225. return DB::fetch_all("SELECT $selectfield FROM %t b {$findex} LEFT JOIN %t bf USING(blogid) " .
  226. "WHERE 1 %i", array($this->_table, 'home_blogfield', $sql.' '.$order.' '.DB::limit($start, $limit)));
  227. }
  228. }
  229. public function fetch_all_by_block($blogids = null, $bannedids = null, $uids = null, $catid = null, $hours = null, $getpic = null, $getsummary = null, $picrequired = null, $orderby = 'dateline', $start = 0, $limit = 0) {
  230. $wheres = array();
  231. if($blogids) {
  232. $wheres[] = 'b.'.DB::field('blogid', $blogids);
  233. }
  234. if($bannedids) {
  235. $val = implode(',', DB::quote($bannedids));
  236. $wheres[] = 'b.blogid NOT IN ('.$val.')';
  237. }
  238. if($uids) {
  239. $wheres[] = 'b.'.DB::field('uid', $uids);
  240. }
  241. if($catid && !in_array('0', $catid)) {
  242. $wheres[] = 'b.'.DB::field('catid', $catid);
  243. }
  244. if($hours) {
  245. $timestamp = TIMESTAMP - 3600 * $hours;
  246. $wheres[] = 'b.'.DB::field('dateline', $timestamp, '>=') ;
  247. }
  248. $tablesql = $fieldsql = '';
  249. if($getpic || $getsummary || $picrequired) {
  250. if($picrequired) {
  251. $wheres[] = "bf.pic != ''";
  252. }
  253. $tablesql = ' LEFT JOIN '.DB::table('home_blogfield')." bf ON b.blogid = bf.blogid";
  254. $fieldsql = ', bf.pic, b.picflag, bf.message';
  255. }
  256. $wheres[] = "b.friend = '0'";
  257. $wheres[] = "b.status='0'";
  258. $wheresql = $wheres ? implode(' AND ', $wheres) : '1';
  259. return DB::fetch_all('SELECT b.* %i FROM %t b %i WHERE %i', array($fieldsql, $this->_table, $tablesql, $wheresql.' ORDER BY b.'.DB::order($orderby, 'DESC').' '.DB::limit($start, $limit)));
  260. }
  261. }
  262. ?>