PageRenderTime 54ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 0ms

/webapp/lib/db/friend.php

https://github.com/openpne/OpenPNE2
PHP | 903 lines | 608 code | 119 blank | 176 comment | 43 complexity | 8bcdb0dbd1f2f16a39b23156fa9943d7 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. /**
  7. * あるメンバーの友達数を取得
  8. *
  9. * @param int $c_member_id
  10. * @return int 友達数
  11. */
  12. function db_friend_count_friends($c_member_id)
  13. {
  14. $sql = 'SELECT COUNT(*) FROM c_friend WHERE c_member_id_from = ?';
  15. $params = array(intval($c_member_id));
  16. return db_get_one($sql, $params);
  17. }
  18. /**
  19. * 友達かどうか判定
  20. *
  21. * @param int $c_member_id1
  22. * @param int $c_member_id2
  23. * @return bool
  24. */
  25. function db_friend_is_friend($c_member_id1, $c_member_id2)
  26. {
  27. $sql = 'SELECT c_friend_id FROM c_friend' .
  28. ' WHERE c_member_id_from = ? AND c_member_id_to = ?';
  29. $params = array(intval($c_member_id1), intval($c_member_id2));
  30. return (bool)db_get_one($sql, $params, 'main');
  31. }
  32. /**
  33. * 友達のメンバーIDリスト取得
  34. *
  35. * @param int $c_member_id
  36. * @param bool $except_blocked アクセスブロックされているメンバーを除外するか
  37. * @return array 友達のメンバーID配列
  38. */
  39. function db_friend_c_member_id_list($c_member_id, $except_blocked = false)
  40. {
  41. $sql = 'SELECT c_member_id_to FROM c_friend WHERE c_member_id_from = ? ORDER BY c_friend_id';
  42. $params = array(intval($c_member_id));
  43. $friends = db_get_col($sql, $params);
  44. if ($except_blocked) {
  45. $blocked = db_member_access_block_list4c_member_id_to($c_member_id);
  46. $friends = array_diff($friends, $blocked);
  47. }
  48. return $friends;
  49. }
  50. /**
  51. * 紹介文を取得
  52. */
  53. function db_friend_c_friend_intro($c_member_id_from, $c_member_id_to)
  54. {
  55. $sql = 'SELECT intro FROM c_friend WHERE c_member_id_from = ? AND c_member_id_to = ?';
  56. $params = array(intval($c_member_id_from), intval($c_member_id_to));
  57. return db_get_one($sql, $params);
  58. }
  59. /**
  60. * メンバーと自分の中間のフレンドを得る
  61. */
  62. function db_friend_friend_path4c_member_ids($my_id, $target_id)
  63. {
  64. if (db_friend_is_friend($my_id, $target_id)) {
  65. return null;
  66. }
  67. //自分の友達リスト
  68. $my_list = db_friend_c_member_id_list($my_id);
  69. //相手の友達リスト
  70. $target_list = db_friend_c_member_id_list($target_id);
  71. //共通の友達リスト
  72. $result_list = array_intersect($my_list, $target_list);
  73. if (!$result_list) {
  74. return null;
  75. }
  76. $result_key = array_rand($result_list);
  77. $result_id = $result_list[$result_key];
  78. return db_member_c_member4c_member_id($result_id);
  79. }
  80. /**
  81. * 自分のフレンドのうち、対象のメンバーと
  82. * フレンドリンクしていないフレンドのリストを取得
  83. */
  84. function db_friend_invite_list4c_member_ids($target_c_member_id, $u)
  85. {
  86. // 自分の友達リスト
  87. $my_list = db_friend_c_member_id_list($u);
  88. // ターゲットの友達リスト
  89. $target_list = db_friend_c_member_id_list($target_c_member_id);
  90. $target_list[] = $target_c_member_id;
  91. // 自分の友達リストからターゲットの友達を引く
  92. $result = array_diff($my_list, $target_list);
  93. $list = array();
  94. foreach ($result as $value) {
  95. $list[] = db_member_c_member4c_member_id_LIGHT($value);
  96. }
  97. return $list;
  98. }
  99. //---
  100. function db_friend_friend_list4c_member_id2($c_member_id, $page_size, $page, $orderby)
  101. {
  102. switch ($orderby) {
  103. case "ld":
  104. $orderby = "m.access_date DESC";
  105. break;
  106. case "la":
  107. $orderby = "m.access_date";
  108. break;
  109. case "rd":
  110. $orderby = "f.r_datetime DESC";
  111. break;
  112. case "ra":
  113. $orderby = "f.r_datetime";
  114. break;
  115. default:
  116. $orderby = "f.r_datetime DESC";
  117. }
  118. $sql = "SELECT" .
  119. " m.c_member_id, m.access_date, m.nickname, m.image_filename" .
  120. ", f.intro, f.r_datetime" .
  121. " FROM c_member AS m, c_friend AS f" .
  122. " WHERE f.c_member_id_from = ?" .
  123. " AND f.c_member_id_to = m.c_member_id" .
  124. " ORDER BY ". $orderby;
  125. $params = array(intval($c_member_id));
  126. $friend_list = db_get_all_page($sql, $page, $page_size, $params);
  127. foreach ($friend_list as $key => $value) {
  128. $friend_list[$key]['friend_count'] = db_friend_count_friends($value['c_member_id']);
  129. }
  130. $total_num = db_friend_count_friends($c_member_id);
  131. $total_page_num = ceil($total_num / $page_size);
  132. $next = ($page < $total_page_num);
  133. $prev = ($page > 1);
  134. return array($friend_list , $prev , $next, $total_page_num);
  135. }
  136. function db_friend_intro_list4c_member_id($c_member_id)
  137. {
  138. $sql = "SELECT c_member_id_from AS c_member_id, intro FROM c_friend" .
  139. " WHERE c_member_id_to = ? AND intro <> ''" .
  140. " ORDER BY r_datetime_intro DESC";
  141. $params = array(intval($c_member_id));
  142. $list = db_get_all($sql, $params);
  143. foreach ($list as $key => $value) {
  144. $list[$key] += db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  145. }
  146. return $list;
  147. }
  148. function db_friend_intro_list_with_my_intro4c_member_id($c_member_id)
  149. {
  150. $list = db_friend_intro_list4c_member_id($c_member_id);
  151. $sql = 'SELECT intro FROM c_friend WHERE c_member_id_from = ? AND c_member_id_to = ?';
  152. foreach ($list as $key => $value) {
  153. $params = array(intval($c_member_id), intval($value['c_member_id']));
  154. $list[$key]['has_intro_by_me'] = (db_get_one($sql, $params) !== '');
  155. }
  156. return $list;
  157. }
  158. /**
  159. * フレンドからの紹介文リスト
  160. */
  161. function db_friend_c_friend_comment4c_member_id($c_member_id, $limit = 5)
  162. {
  163. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  164. if (!$is_recurred) { //function cacheのために再帰処理を行う
  165. $is_recurred = true;
  166. $funcargs = func_get_args();
  167. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
  168. $is_recurred = false;
  169. return $result;
  170. }
  171. $sql = "SELECT c_member_id_from AS c_member_id, intro FROM c_friend" .
  172. " WHERE c_member_id_to = ? AND intro <> ''" .
  173. " ORDER BY r_datetime_intro DESC";
  174. $params = array(intval($c_member_id));
  175. $list = db_get_all_limit($sql, 0, $limit, $params);
  176. foreach ($list as $key => $value) {
  177. $list[$key] += db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  178. }
  179. return $list;
  180. }
  181. /**
  182. * c_friend取得
  183. */
  184. function db_friend_c_friend4c_member_id_from4c_member_id_to($c_member_id_from,$c_member_id_to)
  185. {
  186. $sql = "SELECT c_friend_id,".
  187. "c_member_id_from,".
  188. "c_member_id_to,".
  189. "intro,".
  190. "r_datetime".
  191. " FROM c_friend".
  192. " WHERE c_friend.c_member_id_from = ?" .
  193. " AND c_friend.c_member_id_to = ?" .
  194. " AND intro <> ''";
  195. $params = array(intval($c_member_id_from), intval($c_member_id_to));
  196. return db_get_row($sql, $params);
  197. }
  198. /**
  199. * フレンドリスト
  200. */
  201. function db_friend_c_friend_list4c_member_id($c_member_id, $limit = 0)
  202. {
  203. $result = db_friend_c_friend_id_list4c_member_id($c_member_id, $limit);
  204. foreach ($result as $key => $value) {
  205. $result[$key] = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  206. $result[$key]['friend_count'] = db_friend_count_friends($value['c_member_id']);
  207. }
  208. return $result;
  209. }
  210. /**
  211. * フレンドリスト用IDリストを取得する関数
  212. */
  213. function db_friend_c_friend_id_list4c_member_id($c_member_id, $limit)
  214. {
  215. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  216. if (!$is_recurred) { //function cacheのために再帰処理を行う
  217. $is_recurred = true;
  218. $funcargs = func_get_args();
  219. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
  220. $is_recurred = false;
  221. return $result;
  222. }
  223. $sql = 'SELECT c_member_id_to AS c_member_id FROM c_friend' .
  224. ' WHERE c_member_id_from = ?' . db_order_by_rand();
  225. $params = array(intval($c_member_id));
  226. if ($limit) {
  227. $result = db_get_all_limit($sql, 0, $limit, $params);
  228. } else {
  229. $result = db_get_all($sql, $params);
  230. }
  231. return $result;
  232. }
  233. function db_friend_intro_body4c_member_id($u, $target_c_member_id)
  234. {
  235. $sql = "SELECT intro FROM c_friend" .
  236. " WHERE c_member_id_to = ? AND c_member_id_from = ?";
  237. $params = array(intval($target_c_member_id), intval($u));
  238. return db_get_one($sql, $params);
  239. }
  240. /**
  241. * あなたにフレンドリンクを要請しているメンバー
  242. *
  243. * @param int $c_member_id_to : 要請されている方(あなた)
  244. * @return array_of_array
  245. * c_friend_confirm.*
  246. * nickname : 要請している人の名前
  247. * image_filename : 要請している人の画像
  248. * @see h_confirm_list.php
  249. */
  250. function db_friend_anatani_c_friend_confirm_list4c_member_id($c_member_id_to)
  251. {
  252. $sql = 'SELECT * FROM c_friend_confirm WHERE c_member_id_to = ?' .
  253. ' ORDER BY r_datetime DESC';
  254. $params = array(intval($c_member_id_to));
  255. $c_friend_confirm_list = db_get_all($sql, $params);
  256. foreach ($c_friend_confirm_list as $key => $value) {
  257. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  258. $c_friend_confirm_list[$key]['nickname'] = $c_member['nickname'];
  259. $c_friend_confirm_list[$key]['image_filename'] = $c_member['image_filename'];
  260. }
  261. return $c_friend_confirm_list;
  262. }
  263. /**
  264. * あなたがフレンドリンクを要請しているメンバー
  265. *
  266. * @param int $c_member_id_from : 要請している方(あなた)
  267. * @return array_of_array
  268. * c_friend_confirm.*
  269. * nickname : 要請されている人の名前
  270. * image_filename : 要請されている人の画像
  271. * @see h_confirm_list.php
  272. */
  273. function db_friend_anataga_c_friend_confirm_list4c_member_id($c_member_id_from)
  274. {
  275. $sql = 'SELECT * FROM c_friend_confirm WHERE c_member_id_from = ?' .
  276. ' ORDER BY r_datetime DESC';
  277. $params = array(intval($c_member_id_from));
  278. $c_friend_confirm_list = db_get_all($sql, $params);
  279. foreach ($c_friend_confirm_list as $key => $value) {
  280. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  281. $c_friend_confirm_list[$key]['nickname'] = $c_member['nickname'];
  282. $c_friend_confirm_list[$key]['image_filename'] = $c_member['image_filename'];
  283. }
  284. return $c_friend_confirm_list;
  285. }
  286. function db_friend_c_friend_intro_list4c_member_id($c_member_id, $limit)
  287. {
  288. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  289. if (!$is_recurred) { //function cacheのために再帰処理を行う
  290. $is_recurred = true;
  291. $funcargs = func_get_args();
  292. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
  293. $is_recurred = false;
  294. return $result;
  295. }
  296. $sql = 'SELECT * FROM c_friend' .
  297. ' WHERE c_member_id_to = ? AND intro <> \'\'' . db_order_by_rand();
  298. $params = array(intval($c_member_id));
  299. $list = db_get_all_limit($sql, 0, $limit, $params);
  300. foreach ($list as $key => $value) {
  301. $list[$key] += db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  302. }
  303. return $list;
  304. }
  305. function db_friend_c_friend_list_disp4c_member_id($c_member_id, $page = 1, $size = 20)
  306. {
  307. $sql = "SELECT c_member_id,".
  308. "image_filename,".
  309. "nickname,".
  310. "intro,".
  311. "c_member_id_from,".
  312. "c_member_id_to,".
  313. "is_display_friend_home".
  314. " FROM c_member,".
  315. "c_friend".
  316. " WHERE c_member.c_member_id = c_friend.c_member_id_to".
  317. " AND c_friend.c_member_id_from = ?".
  318. " ORDER BY c_friend.r_datetime DESC";
  319. $params = array(intval($c_member_id));
  320. $c_friend_list = db_get_all_page($sql, $page, $size, $params);
  321. foreach ($c_friend_list as $key => $value) {
  322. $c_friend = db_friend_c_friend4c_member_id_from4c_member_id_to($value['c_member_id_from'], $value['c_member_id_to']);
  323. $c_friend_list[$key]['intro'] = $c_friend['intro'];
  324. $c_friend_list[$key]['friend_count'] = db_friend_count_friends($value['c_member_id_to']);
  325. }
  326. $total_num = db_friend_count_friends($c_member_id);
  327. $prev = 0;
  328. $next = 0;
  329. if ($total_num) {
  330. $total_page_num = ceil($total_num / $size);
  331. if ($page < $total_page_num) {
  332. $next = $page + 1;
  333. }
  334. if ($page > 1) {
  335. $prev = $page - 1;
  336. }
  337. }
  338. return array($c_friend_list, $prev, $next, $total_num);
  339. }
  340. function db_friend_status($u, $target_c_member_id)
  341. {
  342. $ret = array(
  343. 'c_member' => db_member_c_member4c_member_id($target_c_member_id),
  344. 'is_friend' => false,
  345. 'is_friend_confirm' => false,
  346. );
  347. $ret['is_friend'] = db_friend_is_friend($u, $target_c_member_id);
  348. $ret['is_friend_confirm'] = db_friend_is_friend_link_wait($u, $target_c_member_id);
  349. return $ret;
  350. }
  351. /**
  352. * 友達リンク要請情報をIDから取得
  353. *
  354. * @param int $c_friend_confirm_id
  355. * @return array c_friend_confirm.*
  356. */
  357. function db_friend_c_friend_confirm4c_friend_confirm_id($c_friend_confirm_id)
  358. {
  359. $sql = 'SELECT * FROM c_friend_confirm WHERE c_friend_confirm_id = ?';
  360. $params = array(intval($c_friend_confirm_id));
  361. return db_get_row($sql, $params);
  362. }
  363. function db_friend_is_friend_link_wait($c_member_id_from, $c_member_id_to)
  364. {
  365. //from→to
  366. $sql = "SELECT count(*)";
  367. $sql .= " FROM c_friend_confirm";
  368. $sql .= " WHERE c_member_id_from = ?";
  369. $sql .= " AND c_member_id_to = ?";
  370. $params = array(intval($c_member_id_from), intval($c_member_id_to));
  371. $countA = db_get_one($sql, $params);
  372. //to→from
  373. $sql = "SELECT count(*)";
  374. $sql .= " FROM c_friend_confirm";
  375. $sql .= " WHERE c_member_id_from = ?";
  376. $sql .= " AND c_member_id_to = ?";
  377. $params = array(intval($c_member_id_to), intval($c_member_id_from));
  378. $countB = db_get_one($sql, $params);
  379. if ($countA || $countB) {
  380. return true;
  381. } else {
  382. return false;
  383. }
  384. }
  385. function db_friend_c_friend_list4c_member_id2($c_member_id)
  386. {
  387. $sql = "SELECT c_member.* FROM c_friend, c_member" .
  388. " WHERE c_friend.c_member_id_from = ?".
  389. " AND c_member.c_member_id=c_friend.c_member_id_to".
  390. " ORDER BY c_friend.r_datetime DESC";
  391. $params = array(intval($c_member_id));
  392. return db_get_all($sql, $params);
  393. }
  394. /**
  395. * フレンドのランダムなリストを得る
  396. */
  397. function db_friend_c_friend_list_random4c_member_id($c_member_id, $limit)
  398. {
  399. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  400. if (!$is_recurred) { //function cacheのために再帰処理を行う
  401. $is_recurred = true;
  402. $funcargs = func_get_args();
  403. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
  404. $is_recurred = false;
  405. return $result;
  406. }
  407. $sql = "SELECT cf.* , cm.nickname";
  408. $sql .= " FROM c_friend AS cf, c_member AS cm";
  409. $sql .= " WHERE cf.c_member_id_from = ?" .
  410. " AND cm.c_member_id=cf.c_member_id_to";
  411. $sql .= db_order_by_rand();
  412. $params = array(intval($c_member_id));
  413. $c_friend_list = db_get_all_limit($sql, 0, $limit, $params);
  414. foreach ($c_friend_list as $key => $value) {
  415. $c_friend_list[$key]['count_friend'] = db_friend_count_friends($value['c_member_id_to']);
  416. }
  417. return $c_friend_list;
  418. }
  419. /**
  420. * 2つのメンバーIDからその2人の関係を返す。
  421. */
  422. function db_friend_relationship4two_members($c_member_id, $target_c_member_id)
  423. {
  424. $relation = array(
  425. 'friend' => false,
  426. 'wait' => false
  427. );
  428. // リンク承認待ちかどうかをチェック
  429. $sql = 'SELECT c_friend_confirm_id FROM c_friend_confirm' .
  430. ' WHERE c_member_id_from = ? AND c_member_id_to = ?';
  431. $params = array(intval($c_member_id), intval($target_c_member_id));
  432. if (db_get_one($sql, $params)) {
  433. $relation['wait'] = true;
  434. return $relation;
  435. }
  436. // 友達かどうかチェック
  437. $sql = 'SELECT c_friend_id FROM c_friend' .
  438. ' WHERE c_member_id_from = ? AND c_member_id_to = ?';
  439. if (db_get_one($sql, $params)) {
  440. $relation['friend'] = true;
  441. return $relation;
  442. }
  443. //他人
  444. return $relation;
  445. }
  446. function db_friend_friend_list4c_member_id($c_member_id,$page_size,$page)
  447. {
  448. $sql = "SELECT ".
  449. "c_friend_id,".
  450. "c_member_id_from,".
  451. "c_member_id_to,".
  452. "r_datetime,".
  453. "is_display_friend_home".
  454. " FROM ".
  455. "c_friend".
  456. " WHERE c_member_id_from = ?".
  457. " ORDER BY r_datetime DESC";
  458. $params = array(intval($c_member_id));
  459. $c_friend_list = db_get_all_page($sql, $page, $page_size, $params);
  460. foreach ($c_friend_list as $key => $value) {
  461. $c_member = db_member_c_member4c_member_id($value['c_member_id_to']);
  462. $c_friend_list[$key]['image_filename'] = $c_member['image_filename'];
  463. $c_friend_list[$key]['c_member_id'] = $c_member['c_member_id'];
  464. $c_friend_list[$key]['nickname'] = $c_member['nickname'];
  465. $c_friend_list[$key]['access_date'] = $c_member['access_date'];
  466. $c_friend_list[$key]['friend_count'] = db_friend_count_friends($c_member['c_member_id']);
  467. }
  468. $total_num = db_friend_count_friends($c_member_id);
  469. if ($total_num != 0) {
  470. $total_page_num = ceil($total_num / $page_size);
  471. if ($page >= $total_page_num) {
  472. $next = false;
  473. } else {
  474. $next = true;
  475. }
  476. if ($page <= 1) {
  477. $prev = false;
  478. } else {
  479. $prev = true;
  480. }
  481. }
  482. return array($c_friend_list, $prev, $next, $total_num);
  483. }
  484. /**
  485. * あなたにフレンドリンクを要請しているメンバー数を取得(リンク承認待ち)
  486. *
  487. * @param int $c_member_id
  488. * @return int 要請しているメンバー数
  489. */
  490. function db_friend_count_c_anatani_friend_confirm($c_member_id)
  491. {
  492. $sql = 'SELECT COUNT(*) FROM c_friend_confirm WHERE c_member_id_to = ?';
  493. $params = array(intval($c_member_id));
  494. return db_get_one($sql, $params);
  495. }
  496. /**
  497. * あなたにフレンドリンクを要請しているメンバー(リンク承認待ち)
  498. *
  499. * @param int $c_member_id_to : 要請されている方(あなた)
  500. * @return array_of_array
  501. * c_friend_confirm.*
  502. * nickname : 要請している人の名前
  503. * message_disp : 表示用メッセージ
  504. */
  505. function db_friend_ktai_anatani_c_friend_confirm_list4c_member_id($c_member_id_to)
  506. {
  507. $sql = "SELECT * FROM c_friend_confirm WHERE c_member_id_to = ?";
  508. $sql .= " ORDER BY r_datetime DESC";
  509. $params = array(intval($c_member_id_to));
  510. $c_friend_confirm_list = db_get_all($sql, $params);
  511. foreach ($c_friend_confirm_list as $key => $value) {
  512. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  513. $c_friend_confirm_list[$key]['nickname'] = $c_member['nickname'];
  514. }
  515. return $c_friend_confirm_list;
  516. }
  517. function db_friend_ktai_anatani_c_friend_confirm_list4c_member_id_with_pager($c_member_id_to, $page_size, $page)
  518. {
  519. $sql = "SELECT * FROM c_friend_confirm WHERE c_member_id_to = ?";
  520. $sql .= " ORDER BY r_datetime ASC";
  521. $params = array(intval($c_member_id_to));
  522. $c_friend_confirm_list = db_get_all_page($sql, $page, $page_size, $params);
  523. foreach ($c_friend_confirm_list as $key => $value) {
  524. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  525. $c_friend_confirm_list[$key]['nickname'] = $c_member['nickname'];
  526. }
  527. $total_num = db_friend_count_c_anatani_friend_confirm($c_member_id_to);
  528. if ($total_num != 0) {
  529. $total_page_num = ceil($total_num / $page_size);
  530. if ($page >= $total_page_num) {
  531. $next = false;
  532. } else {
  533. $next = true;
  534. }
  535. if ($page <= 1) {
  536. $prev = false;
  537. } else {
  538. $prev = true;
  539. }
  540. }
  541. return array($c_friend_confirm_list, $prev, $next, $total_num);
  542. }
  543. /**
  544. * あなたがフレンドリンクを要請しているメンバー数を取得(リンク承認待ち)
  545. *
  546. * @param int $c_member_id
  547. * @return int 要請しているメンバー数
  548. */
  549. function db_friend_count_c_anataga_friend_confirm($c_member_id)
  550. {
  551. $sql = 'SELECT COUNT(*) FROM c_friend_confirm WHERE c_member_id_from = ?';
  552. $params = array(intval($c_member_id));
  553. return db_get_one($sql, $params);
  554. }
  555. /**
  556. * あなたがフレンドリンクを要請しているメンバー(リンク要請中)
  557. *
  558. * @param int $c_member_id_from : 要請している方(あなた)
  559. * @return array_of_array
  560. * c_friend_confirm.*
  561. * nickname : 要請されている人の名前
  562. * message_disp : 表示用メッセージ
  563. */
  564. function db_friend_ktai_anataga_c_friend_confirm_list4c_member_id($c_member_id_from)
  565. {
  566. $sql = "SELECT * FROM c_friend_confirm WHERE c_member_id_from = ?";
  567. $sql .= " ORDER BY r_datetime DESC";
  568. $params = array(intval($c_member_id_from));
  569. $c_friend_confirm_list = db_get_all($sql, $params);
  570. foreach ($c_friend_confirm_list as $key => $value) {
  571. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  572. $c_friend_confirm_list[$key]['nickname'] = $c_member['nickname'];
  573. }
  574. return $c_friend_confirm_list;
  575. }
  576. function db_friend_ktai_anataga_c_friend_confirm_list4c_member_id_with_pager($c_member_id_from, $page_size, $page)
  577. {
  578. $sql = "SELECT * FROM c_friend_confirm WHERE c_member_id_from = ?";
  579. $sql .= " ORDER BY r_datetime ASC";
  580. $params = array(intval($c_member_id_from));
  581. $c_friend_confirm_list = db_get_all_page($sql, $page, $page_size, $params);
  582. foreach ($c_friend_confirm_list as $key => $value) {
  583. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  584. $c_friend_confirm_list[$key]['nickname'] = $c_member['nickname'];
  585. }
  586. $total_num = db_friend_count_c_anataga_friend_confirm($c_member_id_from);
  587. if ($total_num != 0) {
  588. $total_page_num = ceil($total_num / $page_size);
  589. if ($page >= $total_page_num) {
  590. $next = false;
  591. } else {
  592. $next = true;
  593. }
  594. if ($page <= 1) {
  595. $prev = false;
  596. } else {
  597. $prev = true;
  598. }
  599. }
  600. return array($c_friend_confirm_list, $prev, $next, $total_num);
  601. }
  602. /**
  603. * 友達ランダム50人
  604. */
  605. function db_friend_ktai_c_friend_list_random4c_member_id($c_member_id)
  606. {
  607. $sql = "SELECT cf.c_member_id_to, cm.nickname";
  608. $sql .= " FROM c_friend AS cf, c_member AS cm";
  609. $sql .= " WHERE cf.c_member_id_from = ?".
  610. " AND cf.c_member_id_to = cm.c_member_id";
  611. $sql .= db_order_by_rand();
  612. $params = array(intval($c_member_id));
  613. return db_get_all_limit($sql, 0, 50, $params);
  614. }
  615. function db_friend_intro_list4c_friend_comment_list($c_friend_comment_list, $page, $page_size)
  616. {
  617. $lst = array_slice($c_friend_comment_list, ($page - 1) * $page_size, $page_size);
  618. $total_num = count($c_friend_comment_list);
  619. if ($total_num === 0) {
  620. $prev = $next = false;
  621. } else {
  622. $total_page_num = ceil($total_num / $page_size);
  623. $next = ($page < $total_page_num) ? true : false;
  624. $prev = ($page > 1) ? true : false;
  625. }
  626. return array($lst, $prev, $next, $total_num);
  627. }
  628. /*** write ***/
  629. //--- c_friend
  630. /**
  631. * フレンドリンクを追加
  632. */
  633. function db_friend_insert_c_friend($c_member_id_from, $c_member_id_to)
  634. {
  635. //function cache削除
  636. cache_drop_c_member($c_member_id_from);
  637. cache_drop_c_member($c_member_id_to);
  638. if (($c_member_id_from < 1) || ($c_member_id_to < 1))
  639. return false;
  640. if (db_friend_is_friend($c_member_id_from, $c_member_id_to))
  641. return false;
  642. $data = array(
  643. 'c_member_id_from' => intval($c_member_id_from),
  644. 'c_member_id_to' => intval($c_member_id_to),
  645. 'r_datetime' => db_now(),
  646. 'intro' => '',
  647. );
  648. db_insert('c_friend', $data);
  649. $data = array(
  650. 'c_member_id_from' => intval($c_member_id_to),
  651. 'c_member_id_to' => intval($c_member_id_from),
  652. 'r_datetime' => db_now(),
  653. 'intro' => '',
  654. );
  655. db_insert('c_friend', $data);
  656. }
  657. /**
  658. * リンク申請からフレンドリンクを追加
  659. *
  660. * @param int $c_friend_confirm_id
  661. * @param int $u 自分のc_member_id
  662. */
  663. function db_friend_insert_c_friend4confirm($c_friend_confirm_id, $u)
  664. {
  665. $confirm = db_friend_c_friend_confirm4c_friend_confirm_id($c_friend_confirm_id);
  666. if ($confirm['c_member_id_to'] != $u) {
  667. return false;
  668. }
  669. $c_member_id_from = $confirm['c_member_id_from'];
  670. $c_member_id_to = $confirm['c_member_id_to'];
  671. // フレンドリンクを追加
  672. db_friend_insert_c_friend($c_member_id_from, $c_member_id_to);
  673. // フレンド申請を削除
  674. db_friend_delete_c_friend_confirm($c_friend_confirm_id, $u);
  675. return true;
  676. }
  677. /**
  678. * フレンドリンクを削除
  679. */
  680. function db_friend_delete_c_friend($c_member_id_from, $c_member_id_to)
  681. {
  682. //function cache削除
  683. cache_drop_c_member($c_member_id_from);
  684. cache_drop_c_member($c_member_id_to);
  685. $sql = 'DELETE FROM c_friend' .
  686. ' WHERE (c_member_id_from = ? AND c_member_id_to = ?)' .
  687. ' OR (c_member_id_to = ? AND c_member_id_from = ?)';
  688. $params = array(
  689. intval($c_member_id_from), intval($c_member_id_to),
  690. intval($c_member_id_from), intval($c_member_id_to));
  691. db_query($sql, $params);
  692. }
  693. /**
  694. * フレンド紹介文入力・編集
  695. */
  696. function db_friend_update_c_friend_intro($c_member_id_from, $c_member_id_to, $intro)
  697. {
  698. //function cacheを削除
  699. cache_drop_c_friend_intro($c_member_id_to);
  700. // 紹介文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  701. $intro = db_ktai_delete_url_session_parameter($intro);
  702. $data = array(
  703. 'intro' => $intro,
  704. 'r_datetime_intro' => db_now(),
  705. );
  706. $where = array(
  707. 'c_member_id_from' => intval($c_member_id_from),
  708. 'c_member_id_to' => intval($c_member_id_to),
  709. );
  710. db_update('c_friend', $data, $where);
  711. }
  712. //--- c_friend_confirm
  713. /**
  714. * フレンド申請を追加
  715. *
  716. * @param int $c_member_id_from
  717. * @param int $c_member_id_to
  718. * @param string $message
  719. * @return int insert_id
  720. */
  721. function db_friend_insert_c_friend_confirm($c_member_id_from, $c_member_id_to, $message)
  722. {
  723. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  724. $message = db_ktai_delete_url_session_parameter($message);
  725. $data = array(
  726. 'c_member_id_from' => intval($c_member_id_from),
  727. 'c_member_id_to' => intval($c_member_id_to),
  728. 'message' => $message,
  729. 'r_datetime' => db_now(),
  730. );
  731. return db_insert('c_friend_confirm', $data);
  732. }
  733. /**
  734. * フレンド申請を削除
  735. *
  736. * @param int $c_friend_confirm_id
  737. * @param int $u 自分のc_member_id
  738. */
  739. function db_friend_delete_c_friend_confirm($c_friend_confirm_id, $u)
  740. {
  741. $sql = 'DELETE FROM c_friend_confirm WHERE c_friend_confirm_id = ?' .
  742. ' AND (c_member_id_from = ? OR c_member_id_to = ?)';
  743. $params = array(intval($c_friend_confirm_id), intval($u), intval($u));
  744. db_query($sql, $params);
  745. }
  746. /**
  747. * フレンド最新書き込みのホーム表示設定
  748. *
  749. * @param int $c_member_id_from (自分)
  750. * @param int $c_member_id_to (対象となるマイフレンド)
  751. * @param int $is_display_friend_home (表示するか否か)
  752. */
  753. function db_friend_update_is_display_friend_home($c_member_id_from, $c_member_id_to, $is_display_friend_home)
  754. {
  755. pne_cache_drop('p_h_home_c_diary_friend_list4c_member_id', (int)$c_member_id_from, 5, true);
  756. pne_cache_drop('p_h_home_c_diary_friend_list4c_member_id', (string)$c_member_id_from, 5, true);
  757. $data = array(
  758. 'is_display_friend_home' => (bool)$is_display_friend_home,
  759. );
  760. $where = array(
  761. 'c_member_id_from' => intval($c_member_id_from),
  762. 'c_member_id_to' => intval($c_member_id_to),
  763. );
  764. return db_update('c_friend', $data, $where);
  765. }
  766. /**
  767. * 友達のメンバーで、新着表示可否のIDリスト取得
  768. *
  769. * @param int $c_member_id
  770. * @param bool $is_display_friend_home = 1:新着表示対象 / 0:新着表示対象外
  771. * @return array 友達のメンバーID配列
  772. */
  773. function db_friend_is_display_friend_home_list($c_member_id, $is_display_friend_home = 1)
  774. {
  775. $sql = 'SELECT c_member_id_to ';
  776. $sql .= 'FROM c_friend ';
  777. $sql .= 'WHERE c_member_id_from = ? ';
  778. $sql .= 'AND is_display_friend_home = ? ';
  779. $sql .= 'ORDER BY c_friend_id';
  780. $params = array(intval($c_member_id), intval($is_display_friend_home));
  781. $friends = db_get_col($sql, $params);
  782. return $friends;
  783. }
  784. ?>