PageRenderTime 62ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 1ms

/webapp/lib/db/diary.php

https://github.com/openpne/OpenPNE2
PHP | 1337 lines | 885 code | 163 blank | 289 comment | 104 complexity | 99c87f6e5b5df597b31bbd0f03ad09bf 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 array
  11. */
  12. function db_diary_category_list4c_member_id($c_member_id)
  13. {
  14. $sql = 'SELECT c_diary_category_id, category_name FROM c_diary_category '
  15. . 'WHERE c_member_id = ? ORDER BY c_diary_category_id';
  16. $result = db_get_all($sql, array(intval($c_member_id)), 'main');
  17. return $result;
  18. }
  19. /**
  20. * カテゴリIDからカテゴリ名を得る
  21. */
  22. function db_diary_get_category_name4category_id($category_id)
  23. {
  24. $sql = 'SELECT category_name FROM c_diary_category ' .
  25. 'WHERE c_diary_category_id = ?';
  26. return db_get_one($sql, array($category_id));
  27. }
  28. /**
  29. * 日記IDからカテゴリリストを得る
  30. *
  31. * @param int $c_diary_id
  32. * @return array
  33. */
  34. function db_diary_category_list4c_diary_id($c_diary_id)
  35. {
  36. $sql = 'SELECT c_diary_category_id FROM c_diary_category_diary WHERE c_diary_id = ?';
  37. $category_list = db_get_col($sql, array(intval($c_diary_id)));
  38. if (!$category_list) {
  39. return array();
  40. }
  41. $ids = implode(',', $category_list);
  42. $sql = 'SELECT c_diary_category_id, category_name FROM c_diary_category'
  43. . ' WHERE c_diary_category_id IN ('.$ids.') ORDER BY c_diary_category_id';
  44. return db_get_all($sql);
  45. }
  46. /**
  47. * カテゴリIDから日記を得る
  48. *
  49. * @param int $c_member_id
  50. * @param int $c_diary_category_id
  51. * @param int $u
  52. * @param int $page_size
  53. * @param int $page
  54. * @return array
  55. */
  56. function db_diary_list4c_diary_category_id($c_member_id, $c_diary_category_id, $u = null, $page_size = 20, $page = 0)
  57. {
  58. $sql = 'SELECT c_diary_id FROM c_diary_category_diary WHERE c_diary_category_id = ?';
  59. $diary_list = db_get_col($sql, array(intval($c_diary_category_id)));
  60. if (!$diary_list) {
  61. return array(array(), false, false, 0);
  62. }
  63. $ids = implode(',', $diary_list);
  64. $pf_cond = db_diary_public_flag_condition($c_member_id, $u);
  65. $where = ' WHERE c_diary_id IN ('.$ids.') AND c_member_id = ? ' . $pf_cond . ' ORDER BY r_datetime DESC';
  66. $sql = 'SELECT * FROM c_diary' . $where;
  67. $params = array($c_member_id);
  68. $list = db_get_all_limit($sql, $page_size * ($page - 1), $page_size, $params);
  69. foreach ($list as $key => $c_diary) {
  70. $list[$key]['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($c_diary['c_diary_id']);
  71. }
  72. $sql = 'SELECT COUNT(*) FROM c_diary' . $where;
  73. $total_num = db_get_one($sql, $params);
  74. if ($total_num != 0) {
  75. $total_page_num = ceil($total_num / $page_size);
  76. if ($page >= $total_page_num) {
  77. $next = false;
  78. } else {
  79. $next = true;
  80. }
  81. if ($page <= 1) {
  82. $prev = false;
  83. } else {
  84. $prev = true;
  85. }
  86. }
  87. return array($list, $prev, $next, $total_num);
  88. }
  89. /**
  90. * カテゴリを追加する
  91. *
  92. * @param int $c_member_id
  93. * @param int $category_name
  94. */
  95. function db_diary_category_insert_category($c_member_id, $category_name)
  96. {
  97. $data = array(
  98. 'c_member_id' => intval($c_member_id),
  99. 'category_name' => $category_name,
  100. 'r_datetime' => db_now(),
  101. );
  102. return db_insert('c_diary_category', $data);
  103. }
  104. /**
  105. * カテゴリを削除する
  106. *
  107. * @param int $c_diary_category_id
  108. */
  109. function db_diary_category_delete_category($c_diary_category_id)
  110. {
  111. $sql = 'DELETE FROM c_diary_category WHERE c_diary_category_id = ?';
  112. db_query($sql, array($c_diary_category_id));
  113. }
  114. /**
  115. * カテゴリと日記を関連づける
  116. *
  117. * @param int $c_diary_id
  118. * @param int $c_diary_category_id
  119. */
  120. function db_diary_category_insert_c_diary_category_diary($c_diary_id, $c_diary_category_id)
  121. {
  122. $data = array(
  123. 'c_diary_id' => intval($c_diary_id),
  124. 'c_diary_category_id' => intval($c_diary_category_id),
  125. );
  126. db_insert('c_diary_category_diary', $data);
  127. }
  128. /**
  129. * カテゴリと日記の関連づけを削除する
  130. */
  131. function db_diary_category_delete_c_diary_category_diary($c_diary_id)
  132. {
  133. $diary_category_list = db_diary_category_list4c_diary_id($c_diary_id);
  134. $sql = 'DELETE FROM c_diary_category_diary WHERE c_diary_id = ?';
  135. db_query($sql, array($c_diary_id));
  136. foreach($diary_category_list as $value) {
  137. $sql = 'SELECT COUNT(*) FROM c_diary_category_diary'.
  138. ' WHERE c_diary_category_id = ?';
  139. $c_diary_category_id = $value['c_diary_category_id'];
  140. $is_diary = (bool)db_get_one($sql, array(intval($c_diary_category_id)), 'main');
  141. if (!$is_diary) { //カテゴリに関連付いた日記が存在しない
  142. db_diary_category_delete_category($c_diary_category_id);
  143. }
  144. }
  145. }
  146. /**
  147. * db_diary_public_flag_condition
  148. *
  149. * @param int $c_member_id target c_member_id
  150. * @param int $u viewer's c_member_id
  151. * @param string $force
  152. * @return string
  153. */
  154. function db_diary_public_flag_condition($c_member_id, $u = null, $force = null)
  155. {
  156. $pf_cond = '';
  157. if ($force) {
  158. switch ($force) {
  159. case 'friend':
  160. $pf_cond = " AND public_flag <> 'private'";
  161. break;
  162. case 'private':
  163. $pf_cond = " AND public_flag = 'public'";
  164. break;
  165. }
  166. } else {
  167. if (!is_null($u) && $c_member_id != $u) {
  168. $is_friend = db_friend_is_friend($c_member_id, $u);
  169. if ($is_friend) {
  170. $pf_cond = " AND public_flag <> 'private'";
  171. } else {
  172. $pf_cond = " AND public_flag = 'public'";
  173. }
  174. }
  175. }
  176. return $pf_cond;
  177. }
  178. //// c_diary
  179. /**
  180. * 日記IDから日記を取得
  181. *
  182. * @param int $c_diary_id
  183. * @return array
  184. */
  185. function db_diary_get_c_diary4id($c_diary_id)
  186. {
  187. $sql = 'SELECT * FROM c_diary WHERE c_diary_id = ?';
  188. $c_diary_list = db_get_row($sql, array(intval($c_diary_id)));
  189. return $c_diary_list;
  190. }
  191. /**
  192. * メンバーIDから日記リストを最新順で取得
  193. *
  194. * @param int $c_member_id
  195. * @return array 日記リスト
  196. */
  197. function db_diary_get_c_diary_list4c_member_id($target_c_member_id, $count = 10, $u = null, $force = null)
  198. {
  199. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  200. if (!$is_recurred) { //function cacheのために再帰処理を行う
  201. $is_recurred = true;
  202. $funcargs = func_get_args();
  203. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
  204. $is_recurred = false;
  205. return $result;
  206. }
  207. $pf_cond = db_diary_public_flag_condition($target_c_member_id, $u, $force);
  208. $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?' . $pf_cond .
  209. ' ORDER BY r_datetime DESC';
  210. $params = array(intval($target_c_member_id));
  211. $arr = db_get_all_limit($sql, 0, $count, $params);
  212. foreach ($arr as $key => $value) {
  213. $arr[$key]['comment_count'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  214. }
  215. return $arr;
  216. }
  217. function p_common_is_active_c_diary_id($c_diary_id)
  218. {
  219. $sql = 'SELECT c_diary_id FROM c_diary WHERE c_diary_id = ?';
  220. return (bool)db_get_one($sql, array(intval($c_diary_id)));
  221. }
  222. /**
  223. * 指定した日記の前の日記IDを取得する
  224. *
  225. * @param int $c_member_id
  226. * @param int $c_diary_id
  227. */
  228. function db_diary_c_diary_id_prev4c_diary_id($c_member_id, $c_diary_id, $u = null)
  229. {
  230. $public_flag_condition = db_diary_public_flag_condition($c_member_id, $u);
  231. $sql = 'SELECT c_diary_id FROM c_diary WHERE c_member_id = ? AND c_diary_id < ?'
  232. . $public_flag_condition . ' ORDER BY c_diary_id DESC';
  233. return db_get_one($sql, array(intval($c_member_id), intval($c_diary_id)));
  234. }
  235. /**
  236. * 指定した日記の次の日記IDを取得する
  237. *
  238. * @param int $c_member_id
  239. * @param int $c_diary_id
  240. */
  241. function db_diary_c_diary_id_next4c_diary_id($c_member_id, $c_diary_id, $u = null)
  242. {
  243. $public_flag_condition = db_diary_public_flag_condition($c_member_id, $u);
  244. $sql = 'SELECT c_diary_id FROM c_diary WHERE c_member_id = ? AND c_diary_id > ?'
  245. . $public_flag_condition . ' ORDER BY c_diary_id ASC';
  246. return db_get_one($sql, array(intval($c_member_id), intval($c_diary_id)));
  247. }
  248. //// c_diary_comment
  249. /**
  250. * 日記のコメントリストを得る
  251. *
  252. * @param int $c_diary_id
  253. * @param int $limit
  254. * @return array 日記コメント+ニックネーム
  255. */
  256. function db_diary_get_c_diary_comment_list4c_diary_id($c_diary_id)
  257. {
  258. $sql = 'SELECT c_member.nickname, c_diary_comment.*' .
  259. ' FROM c_diary_comment LEFT JOIN c_member USING (c_member_id)' .
  260. ' WHERE c_diary_id = ?' .
  261. ' ORDER BY c_diary_comment.r_datetime';
  262. return db_get_all($sql, array(intval($c_diary_id)));
  263. }
  264. /**
  265. * 日記のコメントリスト(好きなID(複数))を取得
  266. *
  267. * @param array $id_list
  268. * @param int $page
  269. * @param int $page_size
  270. * @param bool $desc 並び順を日時の新しい順にするかどうか
  271. * @return 日記コメント(+ニックネーム)リスト
  272. */
  273. function db_diary_get_c_diary_comment_list4id_list($id_list, $page = 1, $page_size= -1, $desc = false)
  274. {
  275. if (!count($id_list)) return array();
  276. if ($page_size < 0) {
  277. $page_size = count($id_list);
  278. }
  279. $e_id_list = implode(',', array_map('intval', (array)$id_list));
  280. $sql = 'SELECT * FROM c_diary_comment' .
  281. ' WHERE c_diary_comment_id IN ('.$e_id_list.')';
  282. if ($desc) {
  283. $sql .= ' ORDER BY r_datetime DESC';
  284. } else {
  285. $sql .= ' ORDER BY r_datetime';
  286. }
  287. $c_diary_comment_list = db_get_all_page($sql, $page, $page_size);
  288. foreach ($c_diary_comment_list as $key => $value) {
  289. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  290. $c_diary_comment_list[$key]['nickname'] = $c_member['nickname'];
  291. }
  292. $sql = 'SELECT COUNT(*) FROM c_diary_comment' .
  293. ' WHERE c_diary_comment_id IN ('.$e_id_list.')';
  294. $total_num = db_get_one($sql);
  295. if ($total_num != 0) {
  296. $total_page_num = ceil($total_num / $page_size);
  297. if ($page >= $total_page_num) {
  298. $next = false;
  299. } else {
  300. $next = true;
  301. }
  302. if ($page <= 1) {
  303. $prev = false;
  304. } else {
  305. $prev = true;
  306. }
  307. }
  308. return array($c_diary_comment_list, $prev , $next, $total_num);
  309. }
  310. /**
  311. * 日記のコメント数を取得
  312. *
  313. * @param int $c_diary_id
  314. * @return int コメント数
  315. */
  316. function db_diary_count_c_diary_comment4c_diary_id($c_diary_id)
  317. {
  318. $sql = 'SELECT COUNT(*) FROM c_diary_comment WHERE c_diary_id = ?';
  319. return db_get_one($sql, array(intval($c_diary_id)));
  320. }
  321. ////
  322. /**
  323. * あるメンバーの日記リストを取得
  324. *
  325. * @param int $c_member_id target c_member_id
  326. * @param int $page_size
  327. * @param int $page
  328. * @param int $u viewer's c_member_id
  329. * @return array 日記リスト
  330. */
  331. function p_fh_diary_list_diary_list4c_member_id($c_member_id, $page_size, $page, $u = null)
  332. {
  333. $pf_cond = db_diary_public_flag_condition($c_member_id, $u);
  334. $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?' . $pf_cond .
  335. ' ORDER BY r_datetime DESC';
  336. $params = array(intval($c_member_id));
  337. $list = db_get_all_page($sql, $page, $page_size, $params);
  338. foreach ($list as $key => $c_diary) {
  339. $list[$key]['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($c_diary['c_diary_id']);
  340. }
  341. $sql = 'SELECT COUNT(*) FROM c_diary WHERE c_member_id = ?' . $pf_cond;
  342. $total_num = db_get_one($sql, $params);
  343. if ($total_num != 0) {
  344. $total_page_num = ceil($total_num / $page_size);
  345. if ($page >= $total_page_num) {
  346. $next = false;
  347. } else {
  348. $next = true;
  349. }
  350. if ($page <= 1) {
  351. $prev = false;
  352. } else {
  353. $prev = true;
  354. }
  355. }
  356. return array($list, $prev, $next, $total_num);
  357. }
  358. /**
  359. * フレンドの最新日記リスト
  360. */
  361. function p_h_diary_list_friend_h_diary_list_friend4c_member_id($c_member_id, $page_size, $page)
  362. {
  363. $friends = db_friend_c_member_id_list($c_member_id, true);
  364. if (!$friends) {
  365. return array(array(), false, false, 0);
  366. }
  367. $ids = implode(',', array_map('intval', $friends));
  368. $hint = db_mysql_hint('USE INDEX (r_datetime_c_member_id, r_datetime)');
  369. $sql = 'SELECT * FROM c_diary' . $hint .
  370. ' WHERE c_member_id IN (' . $ids . ')' .
  371. ' AND public_flag <> \'private\'' .
  372. ' ORDER BY c_diary.r_datetime DESC';
  373. $lst = db_get_all_page($sql, $page, $page_size);
  374. foreach ($lst as $key=>$value) {
  375. $lst[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  376. $lst[$key]['c_member'] = db_member_c_member4c_member_id($value['c_member_id']);
  377. }
  378. $sql = 'SELECT count(*) FROM c_diary' .
  379. ' WHERE c_member_id IN (' . $ids . ')' .
  380. ' AND public_flag <> \'private\'';
  381. $total_num = db_get_one($sql, $params);
  382. if ($total_num != 0) {
  383. $total_page_num = ceil($total_num / $page_size);
  384. if ($page >= $total_page_num) {
  385. $next = false;
  386. } else {
  387. $next = true;
  388. }
  389. if ($page <= 1) {
  390. $prev = false;
  391. } else {
  392. $prev = true;
  393. }
  394. }
  395. return array($lst, $prev, $next, $total_num);
  396. }
  397. /**
  398. * 未読コメントのある日記の数を数える
  399. *
  400. * @param int $c_member_id
  401. * @return int 未読日記数
  402. */
  403. function p_h_diary_count_c_diary_not_is_read4c_member_id($c_member_id)
  404. {
  405. $sql = 'SELECT COUNT(*) FROM c_diary WHERE c_member_id = ? AND is_checked = 0';
  406. $params = array(intval($c_member_id));
  407. return db_get_one($sql, $params);
  408. }
  409. /**
  410. * 未読コメントのある日記のうちもっとも古い日記IDを返す
  411. *
  412. * @param int $c_member_id
  413. * @return int c_diary_id
  414. */
  415. function p_h_diary_c_diary_first_diary_read4c_member_id($c_member_id)
  416. {
  417. $sql = 'SELECT c_diary_id FROM c_diary WHERE c_member_id = ? AND is_checked = 0 ORDER BY r_datetime';
  418. $params = array(intval($c_member_id));
  419. return db_get_one($sql, $params);
  420. }
  421. /**
  422. * フレンド最新日記リスト取得
  423. * 日記公開範囲を考慮
  424. *
  425. * @param int $c_member_id
  426. * @param int $limit
  427. * @param int $use_is_display_friend_home
  428. * @return array_of_array (c_diary.*, nickname)
  429. */
  430. function p_h_home_c_diary_friend_list4c_member_id($c_member_id, $limit, $use_is_display_friend_home = false)
  431. {
  432. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  433. if (!$is_recurred) { //function cacheのために再帰処理を行う
  434. $is_recurred = true;
  435. $funcargs = func_get_args();
  436. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
  437. $is_recurred = false;
  438. return $result;
  439. }
  440. $friends = db_friend_c_member_id_list($c_member_id, true);
  441. if (!$friends) {
  442. return array();
  443. }
  444. // 対象の最新書き込みのみを表示する場合
  445. if ($use_is_display_friend_home) {
  446. // 表示対象一覧を取得し、取得済みフレンド一覧とぶつける
  447. $friends = array_intersect($friends, db_friend_is_display_friend_home_list($c_member_id, $is_display_friend_home=1));
  448. }
  449. $ids = implode(',', array_map('intval', $friends));
  450. $hint = db_mysql_hint('USE INDEX (r_datetime_c_member_id, r_datetime)');
  451. $sql = 'SELECT * FROM c_diary' . $hint .
  452. ' WHERE c_member_id IN (' . $ids . ')' .
  453. ' AND public_flag <> \'private\'' .
  454. ' ORDER BY c_diary.r_datetime DESC';
  455. $c_diary_friend_list = db_get_all_limit($sql, 0, $limit);
  456. foreach ($c_diary_friend_list as $key => $value) {
  457. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  458. $c_diary_friend_list[$key]['nickname'] = $c_member['nickname'];
  459. $c_diary_friend_list[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  460. }
  461. return $c_diary_friend_list;
  462. }
  463. /**
  464. * 日記コメント記入履歴取得
  465. *
  466. * @param int $c_member_id
  467. * @param int $limit
  468. * @return array_of_array (c_diary.*, nickname)
  469. */
  470. function p_h_home_c_diary_my_comment_list4c_member_id($c_member_id, $limit)
  471. {
  472. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  473. if (!$is_recurred) { //function cacheのために再帰処理を行う
  474. $is_recurred = true;
  475. $funcargs = func_get_args();
  476. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
  477. $is_recurred = false;
  478. return $result;
  479. }
  480. $sql = 'SELECT cdcl.c_diary_id, cdcl.r_datetime AS maxdate, cd.*'
  481. . ' FROM c_diary_comment_log AS cdcl INNER JOIN c_diary AS cd USING (c_diary_id) '
  482. . ' WHERE cdcl.c_member_id = ?'
  483. . ' AND (cd.public_flag = \'public\'';
  484. $friends = db_friend_c_member_id_list($c_member_id, true);
  485. $friend_ids = implode(',', array_map('intval', $friends));
  486. if ($friend_ids) {
  487. $sql .= ' OR (cd.public_flag = \'friend\' AND cd.c_member_id IN (' . $friend_ids . '))';
  488. }
  489. $sql .= ') ORDER BY maxdate DESC';
  490. $params = array(intval($c_member_id));
  491. $list = db_get_all_limit($sql, 0, $limit, $params);
  492. foreach ($list as $key => $value) {
  493. $list[$key] += db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  494. $list[$key]['r_datetime'] = $value['maxdate'];
  495. $list[$key]['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  496. }
  497. return $list;
  498. }
  499. function p_h_diary_comment_list_c_diary_my_comment_list4c_member_id($c_member_id, $page, $page_size)
  500. {
  501. $select = 'SELECT cdcl.c_diary_id, cdcl.r_datetime AS maxdate, cd.*';
  502. $from = ' FROM c_diary_comment_log AS cdcl INNER JOIN c_diary AS cd USING (c_diary_id) ';
  503. $where = ' WHERE cdcl.c_member_id = ? AND (cd.public_flag = \'public\'';
  504. $friends = db_friend_c_member_id_list($c_member_id, true);
  505. $friend_ids = implode(',', array_map('intval', $friends));
  506. if ($friend_ids) {
  507. $where .= ' OR (cd.public_flag = \'friend\' AND cd.c_member_id IN (' . $friend_ids . '))';
  508. }
  509. $where .= ')';
  510. $sql = $select . $from . $where . ' ORDER BY maxdate DESC';
  511. $params = array(intval($c_member_id));
  512. $list = db_get_all_page($sql, $page, $page_size, $params);
  513. foreach ($list as $key => $value) {
  514. $list[$key] += db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  515. $list[$key]['r_datetime'] = $value['maxdate'];
  516. $list[$key]['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  517. }
  518. $sql = 'SELECT COUNT(cdcl.c_diary_id)' . $from . $where;
  519. $params = array(intval($c_member_id));
  520. $total_num = db_get_one($sql, $params);
  521. $is_prev = false;
  522. $is_next = false;
  523. if ($total_num) {
  524. $is_prev = (bool)($page > 1);
  525. $is_next = (bool)($page < ceil($total_num / $page_size));
  526. }
  527. return array($list, $is_prev, $is_next, $total_num);
  528. }
  529. /**
  530. * あるメンバーの指定された年月日の日記のリストを得る
  531. */
  532. function p_fh_diary_list_diary_list_date4c_member_id($c_member_id, $page_size, $page, $year, $month, $day=0 ,$u = null)
  533. {
  534. if ($day) {
  535. $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
  536. $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day+1, $year));
  537. } else {
  538. $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, 1, $year));
  539. $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month+1, 1, $year));
  540. }
  541. $pf_cond = db_diary_public_flag_condition($c_member_id, $u);
  542. $where = ' WHERE c_member_id = ? AND r_datetime >= ? AND r_datetime < ?';
  543. $sql = 'SELECT * FROM c_diary' .
  544. $where . $pf_cond .
  545. ' ORDER BY r_datetime DESC';
  546. $params = array(intval($c_member_id), $s_date, $e_date);
  547. $list = db_get_all_limit($sql, $page_size * ($page - 1), $page_size, $params);
  548. foreach ($list as $key => $c_diary) {
  549. $list[$key]['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($c_diary['c_diary_id']);
  550. }
  551. $sql = 'SELECT COUNT(*) FROM c_diary' . $where;
  552. $total_num = db_get_one($sql, $params);
  553. if ($total_num != 0) {
  554. $total_page_num = ceil($total_num / $page_size);
  555. if ($page >= $total_page_num) {
  556. $next = false;
  557. } else {
  558. $next = true;
  559. }
  560. if ($page <= 1) {
  561. $prev = false;
  562. } else {
  563. $prev = true;
  564. }
  565. }
  566. return array($list , $prev , $next, $total_num);
  567. }
  568. /**
  569. * 日記ページの「各月の日記」用
  570. *
  571. * 日記を最初に書いた月からスタートしてみる
  572. */
  573. function p_fh_diary_list_date_list4c_member_id($c_member_id)
  574. {
  575. $sql = "SELECT r_datetime FROM c_diary" .
  576. " WHERE c_member_id = ?" .
  577. " ORDER BY r_datetime";
  578. $params = array(intval($c_member_id));
  579. if (!$first_datetime = db_get_one($sql, $params)) {
  580. return array();
  581. }
  582. $start_date = getdate(strtotime($first_datetime));
  583. $end_date = getdate();
  584. $date = array();
  585. $year = $start_date['year'];
  586. $month = $start_date['mon'];
  587. while (1) {
  588. $date[] = array(
  589. 'year' => $year,
  590. 'month' => $month,
  591. );
  592. if ($end_date['year'] <= $year
  593. && $end_date['mon'] <= $month) {
  594. break;
  595. }
  596. $month++;
  597. if ($month > 12) {
  598. $month = 1;
  599. $year++;
  600. }
  601. }
  602. return array_reverse($date);
  603. }
  604. //c_member_id から自分の日記についてるコメントID(複数)を取得
  605. function p_fh_diary_c_diary_comment_id_list4c_member_id($c_member_id)
  606. {
  607. $sql = "SELECT cdc.c_diary_comment_id FROM c_diary as cd,c_diary_comment as cdc" .
  608. " WHERE cd.c_member_id = ?".
  609. " AND cd.c_diary_id = cdc.c_diary_id";
  610. $params = array(intval($c_member_id));
  611. return db_get_col($sql, $params);
  612. }
  613. /**
  614. * 年月 から日記のある日(複数)を取得
  615. */
  616. function p_fh_diary_list_calendar_list4c_member_id($year, $month, $c_member_id)
  617. {
  618. $sql = "SELECT cdc.c_diary_comment_id FROM c_diary as cd,c_diary_comment as cdc" .
  619. " WHERE cd.c_member_id = ?".
  620. " AND cd.c_diary_id = cdc.c_diary_id";
  621. $params = array(intval($c_member_id));
  622. return db_get_col($sql, $params);
  623. }
  624. /**
  625. * 新着日記検索
  626. * 検索ポイントはタイトル、本文
  627. * 空白(全角半角問わない)でand検索可
  628. */
  629. function p_h_diary_list_all_search_c_diary4c_diary($keyword, $page_size, $page, $c_member_id = '')
  630. {
  631. $params = array();
  632. $select = 'SELECT *';
  633. $from = ' FROM c_diary';
  634. //自分の日記だけを対象にする事もできる
  635. if ($c_member_id) {
  636. $where = ' WHERE c_member_id = ?';
  637. $params[] = intval($c_member_id);
  638. } else {
  639. $where = " WHERE public_flag = 'public'";
  640. }
  641. //and検索を実装
  642. //subject,body を検索
  643. if ($keyword) {
  644. //全角空白を半角に統一
  645. $keyword = str_replace(' ', ' ', $keyword);
  646. $keyword_list = explode(' ', $keyword);
  647. foreach ($keyword_list as $word) {
  648. $word = check_search_word($word);
  649. $where .= ' AND (subject LIKE ? OR body LIKE ?)';
  650. $params[] = '%'.$word.'%';
  651. $params[] = '%'.$word.'%';
  652. }
  653. }
  654. $order = " ORDER BY r_datetime DESC";
  655. $sql = $select . $from . $where . $order;
  656. $list = db_get_all_page($sql, $page, $page_size, $params);
  657. foreach ($list as $key => $value) {
  658. $list[$key]['c_member'] = db_member_c_member_with_profile($value['c_member_id']);
  659. $list[$key]['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  660. }
  661. $sql = 'SELECT COUNT(*)' . $from . $where;
  662. $total_num = db_get_one($sql, $params);
  663. if ($total_num != 0) {
  664. $total_page_num = ceil($total_num / $page_size);
  665. if ($page >= $total_page_num) {
  666. $next = false;
  667. } else {
  668. $next = true;
  669. }
  670. if ($page <= 1) {
  671. $prev = false;
  672. } else {
  673. $prev = true;
  674. }
  675. }
  676. return array($list , $prev , $next, $total_num);
  677. }
  678. /**
  679. * 指定された年月に日記を書いている日のリストを返す
  680. */
  681. function p_h_diary_is_diary_written_list4date($year, $month, $c_member_id, $u = null)
  682. {
  683. include_once 'Date/Calc.php';
  684. $pf_cond = db_diary_public_flag_condition($c_member_id, $u);
  685. if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
  686. $sql = "SELECT DISTINCT date_part('day', r_datetime) FROM c_diary" .
  687. " WHERE c_member_id = ? AND r_datetime >= ? AND r_datetime < ?" . $pf_cond;
  688. } else {
  689. $sql = 'SELECT DISTINCT DAYOFMONTH(r_datetime) FROM c_diary' .
  690. ' WHERE c_member_id = ? AND r_datetime >= ? AND r_datetime < ?' . $pf_cond;
  691. }
  692. $date_format = '%Y-%m-%d 00:00:00';
  693. $thismonth = Date_Calc::beginOfMonth($month, $year, $date_format);
  694. $nextmonth = Date_Calc::beginOfNextMonth(0, $month, $year, $date_format);
  695. $params = array(intval($c_member_id), $thismonth, $nextmonth);
  696. return db_get_col($sql, $params);
  697. }
  698. /**
  699. * 日記コメント情報をIDから取得
  700. *
  701. * @param int $c_diary_comment_id
  702. * @return array
  703. * c_diary_comemnt.*
  704. * c_diary.c_member_id AS c_member_id_author
  705. */
  706. function _do_c_diary_comment4c_diary_comment_id($c_diary_comment_id)
  707. {
  708. $sql = "SELECT dc.*, d.c_member_id AS c_member_id_author";
  709. $sql .= " FROM c_diary_comment AS dc, c_diary AS d";
  710. $sql .= " WHERE dc.c_diary_comment_id = ?";
  711. $sql .= " AND dc.c_diary_id = d.c_diary_id";
  712. $params = array(intval($c_diary_comment_id));
  713. return db_get_row($sql, $params);
  714. }
  715. /**
  716. * メンバーの最新日記のリストを返す
  717. */
  718. function k_p_f_home_c_diary_list4c_member_id($c_member_id, $limit)
  719. {
  720. //日記リスト
  721. $sql = "SELECT c_diary_id, r_date, subject ,image_filename_1";
  722. $sql .= " FROM c_diary";
  723. $sql .= " WHERE c_member_id = ?";
  724. $sql .= " ORDER BY r_date DESC";
  725. $params = array(intval($c_member_id));
  726. $c_diary_list = db_get_all_limit($sql, 0, $limit, $params);
  727. //コメント数
  728. foreach ($c_diary_list as $key => $value) {
  729. $c_diary_id = $value['c_diary_id'];
  730. $sql = "SELECT COUNT(*) ";
  731. $sql .= "FROM c_diary_comment ";
  732. $sql .= "WHERE c_diary_id = ?";
  733. $params = array(intval($c_diary_id));
  734. $c_diary_list[$key]['count_comment'] = db_get_one($sql, $params);
  735. }
  736. return $c_diary_list;
  737. }
  738. /**
  739. * 最新日記リストを取得。
  740. * 取得範囲を指定できる。
  741. */
  742. function k_p_fh_diary_list_c_diary_list4c_member_id($c_member_id, $page_size, $page)
  743. {
  744. $sql = 'SELECT * FROM c_diary WHERE c_member_id = ? ORDER BY r_datetime DESC';
  745. $params = array(intval($c_member_id));
  746. $c_diary_list = db_get_all_page($sql, $page, $page_size, $params);
  747. foreach ($c_diary_list as $key => $value) {
  748. $c_diary_list[$key]['count_comment'] =
  749. db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  750. }
  751. $sql = 'SELECT COUNT(*) FROM c_diary WHERE c_member_id = ?';
  752. $total_num = db_get_one($sql, $params);
  753. if ($total_num != 0) {
  754. $total_page_num = ceil($total_num / $page_size);
  755. if ($page >= $total_page_num) {
  756. $next = false;
  757. } else {
  758. $next = true;
  759. }
  760. if ($page <= 1) {
  761. $prev = false;
  762. } else {
  763. $prev = true;
  764. }
  765. }
  766. return array($c_diary_list , $prev , $next);
  767. }
  768. /**
  769. * 日記へのコメントリストを取得
  770. */
  771. function k_p_fh_diary_c_diary_comment_list4c_diary_id($c_diary_id, $page_size, $page, $desc = true)
  772. {
  773. $sql = 'SELECT * FROM c_diary_comment WHERE c_diary_id = ? ORDER BY r_datetime';
  774. if ($desc) {
  775. $sql .= ' DESC';
  776. }
  777. $params = array(intval($c_diary_id));
  778. $c_diary_comment_list = db_get_all_page($sql, $page, $page_size, $params);
  779. foreach ($c_diary_comment_list as $key => $value) {
  780. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  781. $c_diary_comment_list[$key]['nickname'] = $c_member['nickname'];
  782. }
  783. $sql = 'SELECT COUNT(c_diary_comment_id) FROM c_diary_comment WHERE c_diary_id = ?';
  784. $params = array(intval($c_diary_id));
  785. $total_num = db_get_one($sql, $params);
  786. if ($total_num > 0) {
  787. $total_page_num = ceil($total_num / $page_size);
  788. if ($page >= $total_page_num) {
  789. $next = false;
  790. } else {
  791. $next = true;
  792. }
  793. if ($page <= 1) {
  794. $prev = false;
  795. } else {
  796. $prev = true;
  797. }
  798. }
  799. return array($c_diary_comment_list, $prev, $next, $total_num, $total_page_num);
  800. }
  801. /**
  802. * 日記IDからその日記を書いたメンバーIDとニックネームと日記公開範囲を得る
  803. */
  804. function k_p_fh_diary_c_member4c_diary_id($c_diary_id)
  805. {
  806. $sql = "SELECT cm.c_member_id, cm.nickname,cm. public_flag_diary ";
  807. $sql .= " FROM c_member AS cm, c_diary AS cd ";
  808. $sql .= " WHERE cd.c_diary_id = ?";
  809. $sql .= " AND cm.c_member_id=cd.c_member_id";
  810. $params = array(intval($c_diary_id));
  811. return db_get_row($sql, $params);
  812. }
  813. /**
  814. * フレンドの最新日記リスト
  815. */
  816. function k_p_h_diary_list_friend_h_diary_list_friend4c_member_id($c_member_id, $page_size, $page)
  817. {
  818. $from = "c_diary, c_friend";
  819. $where = "c_friend.c_member_id_from = ?" .
  820. " AND c_diary.c_member_id = c_friend.c_member_id_to";
  821. $sql = "SELECT c_diary.* FROM {$from} WHERE {$where}" .
  822. " ORDER BY c_diary.r_datetime DESC";
  823. $params = array(intval($c_member_id));
  824. $lst = db_get_all_page($sql, $page, $page_size, $params);
  825. foreach ($lst as $key=>$value) {
  826. $lst[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  827. $lst[$key]['c_member'] = db_member_c_member4c_member_id($value['c_member_id']);
  828. }
  829. $sql = "SELECT count(*) FROM {$from} WHERE {$where}";
  830. $total_num = db_get_one($sql, $params);
  831. if ($total_num != 0) {
  832. $total_page_num = ceil($total_num / $page_size);
  833. if ($page >= $total_page_num) {
  834. $next = false;
  835. } else {
  836. $next = true;
  837. }
  838. if ($page <= 1) {
  839. $prev = false;
  840. } else {
  841. $prev = true;
  842. }
  843. }
  844. return array($lst, $prev, $next, $total_num);
  845. }
  846. //--- diary
  847. /**
  848. * 日記を追加
  849. */
  850. function db_diary_insert_c_diary($c_member_id, $subject, $body, $public_flag, $is_comment_input = 1)
  851. {
  852. //function cacheの削除
  853. pne_cache_drop('db_diary_get_c_diary_list4c_member_id', $c_member_id, 5);
  854. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  855. $subject = db_ktai_delete_url_session_parameter($subject);
  856. $body = db_ktai_delete_url_session_parameter($body);
  857. $data = array(
  858. 'c_member_id' => intval($c_member_id),
  859. 'subject' => $subject,
  860. 'body' => $body,
  861. 'public_flag' => util_cast_public_flag_diary($public_flag),
  862. 'r_datetime' => db_now(),
  863. 'r_date' => db_now(),
  864. 'u_datetime' => db_now(),
  865. 'is_checked' => 1,
  866. 'image_filename_1' => '',
  867. 'image_filename_2' => '',
  868. 'image_filename_3' => '',
  869. 'is_comment_input' => (bool)$is_comment_input,
  870. );
  871. return db_insert('c_diary', $data);
  872. }
  873. /**
  874. * 日記を編集
  875. */
  876. function db_diary_update_c_diary($c_diary_id, $subject, $body, $public_flag, $is_comment_input, $image_filename_1 = '', $image_filename_2 = '', $image_filename_3 = '')
  877. {
  878. //function cacheの削除
  879. $c_diary = db_diary_get_c_diary4id($c_diary_id);
  880. pne_cache_drop('db_diary_get_c_diary_list4c_member_id', $c_diary['c_member_id'], 5);
  881. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  882. $subject = db_ktai_delete_url_session_parameter($subject);
  883. $body = db_ktai_delete_url_session_parameter($body);
  884. $data = array(
  885. 'subject' => $subject,
  886. 'body' => $body,
  887. 'public_flag' => util_cast_public_flag_diary($public_flag),
  888. 'u_datetime' => db_now(),
  889. 'is_comment_input' => (bool)$is_comment_input,
  890. );
  891. if ($image_filename_1) $data['image_filename_1'] = $image_filename_1;
  892. if ($image_filename_2) $data['image_filename_2'] = $image_filename_2;
  893. if ($image_filename_3) $data['image_filename_3'] = $image_filename_3;
  894. $where = array(
  895. 'c_diary_id' => intval($c_diary_id),
  896. );
  897. return db_update('c_diary', $data, $where);
  898. }
  899. /**
  900. * 日記削除
  901. * コメント、画像も削除
  902. *
  903. * @param int $c_diary_id
  904. */
  905. function db_diary_delete_c_diary($c_diary_id)
  906. {
  907. //function cacheの削除
  908. $c_diary = db_diary_get_c_diary4id($c_diary_id);
  909. pne_cache_drop('db_diary_get_c_diary_list4c_member_id', $c_diary['c_member_id'], 5);
  910. // 画像
  911. db_image_data_delete($c_diary['image_filename_1'], $c_diary['c_member_id']);
  912. db_image_data_delete($c_diary['image_filename_2'], $c_diary['c_member_id']);
  913. db_image_data_delete($c_diary['image_filename_3'], $c_diary['c_member_id']);
  914. // コメント
  915. $sql = 'SELECT image_filename_1, image_filename_2, image_filename_3, c_member_id FROM c_diary_comment WHERE c_diary_id =?';
  916. $params = array(intval($c_diary_id));
  917. $comment_images = db_get_all($sql, $params);
  918. //カテゴリ
  919. db_diary_category_delete_c_diary_category_diary($c_diary_id);
  920. foreach ($comment_images as $value) {
  921. db_image_data_delete($value['image_filename_1'], $value['c_member_id']);
  922. db_image_data_delete($value['image_filename_2'], $value['c_member_id']);
  923. db_image_data_delete($value['image_filename_3'], $value['c_member_id']);
  924. }
  925. $sql = 'DELETE FROM c_diary_comment_log WHERE c_diary_id = ?';
  926. db_query($sql, $params);
  927. $sql = 'DELETE FROM c_diary_comment WHERE c_diary_id = ?';
  928. db_query($sql, $params);
  929. // 日記
  930. $sql = 'DELETE FROM c_diary WHERE c_diary_id = ?';
  931. db_query($sql, $params);
  932. }
  933. /**
  934. * 指定した番号の日記画像を削除
  935. */
  936. function db_diary_delete_c_diary_image($c_diary_id, $image_num)
  937. {
  938. $data = array(
  939. 'image_filename_'.intval($image_num) => '',
  940. );
  941. $where = 'c_diary_id = '.intval($c_diary_id);
  942. return db_update('c_diary', $data, $where);
  943. }
  944. /**
  945. * 日記に画像を追加する
  946. */
  947. function db_diary_update_c_diary_image_filename($c_diary_id, $image_filename, $image_num)
  948. {
  949. $data = array(
  950. 'image_filename_'.intval($image_num) => $image_filename,
  951. );
  952. $where = 'c_diary_id = '.intval($c_diary_id);
  953. return db_update('c_diary', $data, $where);
  954. }
  955. /**
  956. * 日記の未読/既読を変更
  957. * c_diary.is_checkedを更新
  958. */
  959. function db_diary_update_c_diary_is_checked($c_diary_id, $value)
  960. {
  961. $data = array(
  962. 'is_checked' => (bool)$value,
  963. );
  964. $where = 'c_diary_id = '.intval($c_diary_id);
  965. return db_update('c_diary', $data, $where);
  966. }
  967. //--- diary_comment
  968. /**
  969. * 日記コメント追加
  970. *
  971. * @param int $c_member_id
  972. * @param int $c_diary_id
  973. * @param string $body
  974. * @return int insert_id
  975. */
  976. function db_diary_insert_c_diary_comment($c_member_id, $c_diary_id, $body)
  977. {
  978. //function cache削除
  979. $c_diary = db_diary_get_c_diary4id($c_diary_id);
  980. cache_drop_c_diary($c_member_id, $c_diary['c_member_id']);
  981. pne_cache_drop('p_h_home_c_diary_my_comment_list4c_member_id', $c_member_id, 5);
  982. // 本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  983. $body = db_ktai_delete_url_session_parameter($body);
  984. $data = array(
  985. 'c_member_id' => intval($c_member_id),
  986. 'c_diary_id' => intval($c_diary_id),
  987. 'body' => $body,
  988. 'r_datetime' => db_now(),
  989. 'image_filename_1' => '',
  990. 'image_filename_2' => '',
  991. 'image_filename_3' => '',
  992. 'number' => db_diary_get_max_c_diary_comment_number4diary($c_diary_id)+1,
  993. );
  994. return db_insert('c_diary_comment', $data);
  995. }
  996. /**
  997. * 日記コメント用画像追加
  998. */
  999. function db_diary_insert_c_diary_comment_images($c_diary_comment_id, $image_filename_1 = '', $image_filename_2 = '', $image_filename_3 = '')
  1000. {
  1001. $data = array();
  1002. if ($image_filename_1) $data['image_filename_1'] = $image_filename_1;
  1003. if ($image_filename_2) $data['image_filename_2'] = $image_filename_2;
  1004. if ($image_filename_3) $data['image_filename_3'] = $image_filename_3;
  1005. $where = array(
  1006. 'c_diary_comment_id' => intval($c_diary_comment_id),
  1007. );
  1008. return db_update('c_diary_comment', $data, $where);
  1009. }
  1010. /**
  1011. * 日記コメント削除
  1012. *
  1013. * @param int $c_diary_comment_id
  1014. * @param int $u : 削除しようとしている人の c_member_id
  1015. */
  1016. function db_diary_delete_c_diary_comment($c_diary_comment_id, $u)
  1017. {
  1018. $dc = _do_c_diary_comment4c_diary_comment_id($c_diary_comment_id);
  1019. if ($dc['c_member_id'] != $u && $dc['c_member_id_author'] != $u) {
  1020. return false;
  1021. }
  1022. db_image_data_delete($dc['image_filename_1'], $dc['c_member_id']);
  1023. db_image_data_delete($dc['image_filename_2'], $dc['c_member_id']);
  1024. db_image_data_delete($dc['image_filename_3'], $dc['c_member_id']);
  1025. $sql = 'DELETE FROM c_diary_comment WHERE c_diary_comment_id = ?';
  1026. $params = array(intval($c_diary_comment_id));
  1027. return db_query($sql, $params);
  1028. }
  1029. // 日記公開範囲の一括設定をする
  1030. function db_diary_update_public_flag_diary_all($c_member_id, $public_flag)
  1031. {
  1032. $data = array(
  1033. 'public_flag' => util_cast_public_flag_diary($public_flag),
  1034. );
  1035. $where = array(
  1036. 'c_member_id' => intval($c_member_id),
  1037. );
  1038. return db_update('c_diary', $data, $where);
  1039. }
  1040. /**
  1041. * 現在の日記へのコメントのナンバーの最大値を返す
  1042. */
  1043. function db_diary_get_max_c_diary_comment_number4diary($c_diary_id)
  1044. {
  1045. $sql = 'SELECT MAX(number) FROM c_diary_comment WHERE c_diary_id = ?';
  1046. $params = array(intval($c_diary_id));
  1047. return db_get_one($sql, $params, 'main');
  1048. }
  1049. /**
  1050. * SNS全体の最新日記リスト取得
  1051. * 日記公開範囲を考慮
  1052. *
  1053. * @param int $limit
  1054. * @return array_of_array (c_diary.*, nickname)
  1055. */
  1056. function p_h_home_c_diary_all_list($limit)
  1057. {
  1058. $sql = 'SELECT * FROM c_diary WHERE public_flag = \'public\''
  1059. . ' ORDER BY c_diary.r_datetime DESC';
  1060. $c_diary_list_all = db_get_all_limit($sql, 0, $limit);
  1061. foreach ($c_diary_list_all as $key => $value) {
  1062. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
  1063. $c_diary_list_all[$key]['nickname'] = $c_member['nickname'];
  1064. $c_diary_list_all[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
  1065. }
  1066. return $c_diary_list_all;
  1067. }
  1068. /**
  1069. * 日記コメント記入履歴の追加
  1070. *
  1071. * @param int $c_member_id
  1072. * @param int $c_diary_id
  1073. */
  1074. function db_diary_insert_c_diary_comment_log($c_member_id, $c_diary_id)
  1075. {
  1076. $sql = 'SELECT c_diary_id FROM c_diary_comment_log'
  1077. . ' WHERE c_member_id = ? AND c_diary_id = ?';
  1078. $params = array(intval($c_member_id), intval($c_diary_id));
  1079. $log_id = db_get_one($sql, $params, 'main');
  1080. if (!$log_id) {
  1081. $data = array(
  1082. 'c_member_id' => intval($c_member_id),
  1083. 'c_diary_id' => intval($c_diary_id),
  1084. 'r_datetime' => db_now(),
  1085. );
  1086. return db_insert('c_diary_comment_log', $data);
  1087. }
  1088. return false;
  1089. }
  1090. /**
  1091. * 日記コメント記入履歴の更新
  1092. *
  1093. * @param int $c_diary_id
  1094. */
  1095. function db_diary_update_c_diary_comment_log($c_diary_id)
  1096. {
  1097. $data = array(
  1098. 'r_datetime' => db_now(),
  1099. );
  1100. $where = array('c_diary_id' => intval($c_diary_id));
  1101. return db_update('c_diary_comment_log', $data, $where);
  1102. }
  1103. /**
  1104. * 日記コメント記入履歴の削除
  1105. *
  1106. * @param int $c_member_id
  1107. * @param int $c_diary_id
  1108. * 該当c_diary_idへのコメント数が0なら、日記コメント記入履歴も削除する。
  1109. *
  1110. */
  1111. function db_diary_delete_c_diary_comment_log($c_member_id, $c_diary_id)
  1112. {
  1113. // 投稿したコメントの有無
  1114. $sql = 'SELECT COUNT(c_diary_comment_id) FROM c_diary_comment'
  1115. . ' WHERE c_member_id = ? AND c_diary_id = ?';
  1116. $params = array(intval($c_member_id), intval($c_diary_id));
  1117. $count = db_get_one($sql, $params, 'main');
  1118. // コメントが無ければ履歴削除
  1119. if (!$count) {
  1120. $sql = 'DELETE FROM c_diary_comment_log'
  1121. . ' WHERE c_member_id = ? AND c_diary_id = ?';
  1122. $params = array(intval($c_member_id), intval($c_diary_id));
  1123. db_query($sql, $params);
  1124. }
  1125. $sql = 'SELECT * FROM c_diary_comment WHERE c_diary_id = ?'
  1126. . ' ORDER BY c_diary_comment_id DESC';
  1127. $params = array(intval($c_diary_id));
  1128. $comment = db_get_row($sql, $params, 'main');
  1129. // 最新コメントの日付で履歴更新
  1130. $data = array(
  1131. 'r_datetime' => $comment['r_datetime'],
  1132. );
  1133. $where = array('c_diary_id' => intval($c_diary_id));
  1134. return db_update('c_diary_comment_log', $data, $where);
  1135. }
  1136. function db_diary_is_writable_comment4c_diary_id($c_diary_id)
  1137. {
  1138. $max_c_diary_comment_number = db_diary_get_max_c_diary_comment_number4diary($c_diary_id);
  1139. if ($max_c_diary_comment_number >= 1000) {
  1140. return false;
  1141. }
  1142. return true;
  1143. }
  1144. /**
  1145. * メンバーの日記とコメントを削除
  1146. *
  1147. * @param int $c_member_id
  1148. */
  1149. function db_diary_delete4c_member_id($c_member_id)
  1150. {
  1151. $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?';
  1152. $single = array(intval($c_member_id));
  1153. $c_diary_list = db_get_all($sql, $single, 'main');
  1154. foreach ($c_diary_list as $c_diary) {
  1155. db_image_data_delete($c_diary['image_filename_1']);
  1156. db_image_data_delete($c_diary['image_filename_2']);
  1157. db_image_data_delete($c_diary['image_filename_3']);
  1158. // c_diary_comment
  1159. $sql = 'SELECT * FROM c_diary_comment WHERE c_diary_id = ?';
  1160. $params = array(intval($c_diary['c_diary_id']));
  1161. $c_diary_comment_list = db_get_all($sql, $params, 'main');
  1162. foreach ($c_diary_comment_list as $c_diary_comment) {
  1163. db_image_data_delete($c_diary_comment['image_filename_1']);
  1164. db_image_data_delete($c_diary_comment['image_filename_2']);
  1165. db_image_data_delete($c_diary_comment['image_filename_3']);
  1166. }
  1167. $sql = 'DELETE FROM c_diary_comment WHERE c_diary_id = ?';
  1168. db_query($sql, $params);
  1169. db_diary_delete_c_diary_comment_log($c_member_id, $c_diary['c_diary_id']);
  1170. }
  1171. $sql = 'DELETE FROM c_diary WHERE c_member_id = ?';
  1172. db_query($sql, $single);
  1173. }
  1174. ?>