PageRenderTime 55ms CodeModel.GetById 29ms RepoModel.GetById 0ms app.codeStats 0ms

/webapp/lib/db/bookmark.php

https://github.com/openpne/OpenPNE2
PHP | 229 lines | 163 code | 32 blank | 34 comment | 16 complexity | ab18ca131e635eab2faa710fc3ec9308 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception
  1. <?php
  2. /**
  3. * @copyright 2005-2008 OpenPNE Project
  4. * @license http://www.php.net/license/3_01.txt PHP License 3.01
  5. */
  6. function db_bookmark_list($c_member_id, $page, $page_size)
  7. {
  8. $sql = 'SELECT c_member_id, nickname, image_filename, access_date' .
  9. ' FROM c_bookmark INNER JOIN c_member' .
  10. ' ON c_bookmark.c_member_id_to = c_member.c_member_id' .
  11. ' WHERE c_bookmark.c_member_id_from = ?' .
  12. ' ORDER BY c_bookmark.r_datetime DESC';
  13. $params = array(intval($c_member_id));
  14. $lst = db_get_all_page($sql, $page, $page_size, $params);
  15. foreach ($lst as $key => $value) {
  16. $lst[$key]['profile'] = db_member_c_member_profile_list4c_member_id($value['c_member_id']);
  17. $lst[$key]['last_login'] = p_f_home_last_login4access_date($value['access_date']);
  18. }
  19. $sql = 'SELECT COUNT(*) FROM c_bookmark INNER JOIN c_member' .
  20. ' ON c_bookmark.c_member_id_to = c_member.c_member_id' .
  21. ' WHERE c_bookmark.c_member_id_from = ?';
  22. $total_num = db_get_one($sql, $params);
  23. if ($total_num === 0) {
  24. $prev = $next = false;
  25. } else {
  26. $total_page_num = ceil($total_num / $page_size);
  27. $next = ($page < $total_page_num) ? true : false;
  28. $prev = ($page > 1) ? true : false;
  29. }
  30. return array($lst, $prev, $next, $total_num);
  31. }
  32. function db_bookmark_is_bookmark($c_member_id_from, $c_member_id_to)
  33. {
  34. $sql = 'SELECT c_bookmark_id FROM c_bookmark' .
  35. ' WHERE c_member_id_from = ? AND c_member_id_to = ?';
  36. $params = array(intval($c_member_id_from), intval($c_member_id_to));
  37. return (bool)db_get_one($sql, $params);
  38. }
  39. /**
  40. * お気に入りのメンバーIDリスト取得
  41. *
  42. * @param int $c_member_id
  43. * @param bool $block アクセスブロックしているメンバーを除外するかどうか
  44. * @return array お気に入りのメンバーID配列
  45. */
  46. function db_bookmark_c_member_id_list($c_member_id_from, $block = false)
  47. {
  48. $sql = 'SELECT c_member_id_to FROM c_bookmark WHERE c_member_id_from = ? ORDER BY c_bookmark_id';
  49. $params = array(intval($c_member_id_from));
  50. $list = db_get_col($sql, $params);
  51. if ($block) {
  52. $block_list = db_member_access_block_list4c_member_id_to($c_member_id_from);
  53. $list = array_diff($list, $block_list);
  54. }
  55. return $list;
  56. }
  57. /**
  58. * お気に入りメンバーの日記リスト
  59. */
  60. function db_bookmark_diary_list($c_member_id, $limit)
  61. {
  62. $bookmarks = db_bookmark_c_member_id_list($c_member_id, true);
  63. if (!$bookmarks) {
  64. return array();
  65. }
  66. $ids = implode(',', array_map('intval', $bookmarks));
  67. $sql = 'SELECT c_diary.* FROM c_diary,c_member WHERE c_diary.c_member_id IN ('.$ids.') AND c_diary.public_flag = \'public\' AND c_diary.c_member_id=c_member.c_member_id ORDER BY r_datetime DESC';
  68. $diary_list = db_get_all_limit($sql, 0, intval($limit));
  69. foreach ($diary_list as $key => $value) {
  70. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  71. $diary_list[$key]['nickname'] = $c_member['nickname'];
  72. $diary_list[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  73. }
  74. return $diary_list;
  75. }
  76. /**
  77. * お気に入りメンバーのBlogリスト
  78. */
  79. function db_bookmark_blog_list($c_member_id, $limit)
  80. {
  81. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  82. if (!$is_recurred) { //function cacheのために再帰処理を行う
  83. $is_recurred = true;
  84. $funcargs = func_get_args();
  85. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
  86. $is_recurred = false;
  87. return $result;
  88. }
  89. $bookmarks = db_bookmark_c_member_id_list($c_member_id, true);
  90. if (!$bookmarks) {
  91. return array();
  92. }
  93. $ids = implode(',', array_map('intval', $bookmarks));
  94. $sql = 'SELECT * FROM c_rss_cache WHERE c_member_id IN (' . $ids . ') ORDER BY r_datetime DESC';
  95. $blog_list = db_get_all_limit($sql, 0, intval($limit));
  96. foreach ($blog_list as $key => $value) {
  97. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  98. $blog_list[$key]['nickname'] = $c_member['nickname'];
  99. }
  100. return $blog_list;
  101. }
  102. /**
  103. * お気に入りメンバーの日記リスト(ページャ付き)
  104. */
  105. function db_bookmark_diary_list_with_pager($c_member_id, $page_size, $page)
  106. {
  107. $bookmarks = db_bookmark_c_member_id_list($c_member_id, true);
  108. if (!$bookmarks) {
  109. return array(array(), false, false, 0);
  110. }
  111. $ids = implode(',', array_map('intval', $bookmarks));
  112. $sql = 'SELECT c_diary.* FROM c_diary, c_member WHERE c_diary.c_member_id IN ('.$ids.') AND c_diary.public_flag = \'public\' AND c_diary.c_member_id=c_member.c_member_id ORDER BY r_datetime DESC';
  113. $diary_list = db_get_all_page($sql, intval($page), intval($page_size));
  114. foreach ($diary_list as $key => $value) {
  115. $diary_list[$key]['c_member'] = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  116. $diary_list[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  117. }
  118. $sql = 'SELECT count(*) FROM c_diary WHERE c_member_id IN (' . $ids . ')';
  119. $total_num = db_get_one($sql);
  120. if ($total_num != 0) {
  121. $total_page_num = ceil($total_num / $page_size);
  122. if ($page >= $total_page_num) {
  123. $next = false;
  124. } else {
  125. $next = true;
  126. }
  127. if ($page <= 1) {
  128. $prev = false;
  129. } else {
  130. $prev = true;
  131. }
  132. }
  133. return array($diary_list, $prev, $next, $total_num);
  134. }
  135. /**
  136. * お気に入りメンバーリスト
  137. */
  138. function db_bookmark_member_list($c_member_id, $limit = 0)
  139. {
  140. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  141. if (!$is_recurred) { //function cacheのために再帰処理を行う
  142. $is_recurred = true;
  143. $funcargs = func_get_args();
  144. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
  145. $is_recurred = false;
  146. return $result;
  147. }
  148. $sql = 'SELECT c_member_id_to AS c_member_id FROM c_bookmark' .
  149. ' WHERE c_member_id_from = ?' . db_order_by_rand();
  150. $params = array(intval($c_member_id));
  151. if ($limit) {
  152. $result = db_get_all_limit($sql, 0, intval($limit), $params);
  153. } else {
  154. $result = db_get_all($sql, $params);
  155. }
  156. foreach ($result as $key => $value) {
  157. $result[$key] = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  158. $result[$key]['friend_count'] = db_friend_count_friends($value['c_member_id']);
  159. }
  160. return $result;
  161. }
  162. /**
  163. * お気に入りのメンバー数
  164. */
  165. function db_bookmark_count($c_member_id)
  166. {
  167. $sql = 'SELECT COUNT(*) FROM c_bookmark WHERE c_member_id_from = ?';
  168. $params = array(intval($c_member_id));
  169. return db_get_one($sql, $params);
  170. }
  171. /**
  172. * お気に入り追加
  173. */
  174. function db_bookmark_insert_c_bookmark($c_member_id_from, $c_member_id_to)
  175. {
  176. //function cacheの削除
  177. cache_drop_c_bookmark($c_member_id_from);
  178. $data = array(
  179. 'c_member_id_from' => intval($c_member_id_from),
  180. 'c_member_id_to' => intval($c_member_id_to),
  181. 'r_datetime' => db_now(),
  182. );
  183. return db_insert('c_bookmark', $data);
  184. }
  185. /**
  186. * お気に入り削除
  187. */
  188. function db_bookmark_delete_c_bookmark($c_member_id_from, $c_member_id_to)
  189. {
  190. //function cacheの削除
  191. cache_drop_c_bookmark($c_member_id_from);
  192. $sql = 'DELETE FROM c_bookmark' .
  193. ' WHERE c_member_id_from = ? AND c_member_id_to = ?';
  194. $params = array(intval($c_member_id_from), intval($c_member_id_to));
  195. db_query($sql, $params);
  196. }
  197. ?>