PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/webapp/lib/db/message.php

https://github.com/openpne/OpenPNE2
PHP | 1044 lines | 758 code | 146 blank | 140 comment | 118 complexity | dd1225b4e9827443c99be0e9ced2cd0c 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. * メッセージIDからメッセージ情報取得
  8. */
  9. function db_message_c_message4c_message_id($c_message_id)
  10. {
  11. $sql = 'SELECT * FROM c_message WHERE c_message_id = ?';
  12. $params = array(intval($c_message_id));
  13. $c_message = db_get_row($sql, $params);
  14. $c_member_from = db_member_c_member4c_member_id_LIGHT($c_message['c_member_id_from']);
  15. $c_member_to = db_member_c_member4c_member_id_LIGHT($c_message['c_member_id_to']);
  16. $c_message['c_member_image_filename_from'] = $c_member_from['image_filename'];
  17. $c_message['c_member_nickname_from'] = $c_member_from['nickname'];
  18. $c_message['c_member_image_filename_to'] = $c_member_to['image_filename'];
  19. $c_message['c_member_nickname_to'] = $c_member_to['nickname'];
  20. return $c_message;
  21. }
  22. /**
  23. * 未読メッセージの数を数える
  24. *
  25. * @return num_message_not_is_read
  26. */
  27. function db_message_count_c_message_not_is_read4c_member_to_id($c_member_id_to)
  28. {
  29. static $is_recurred = false; //再帰処理中かどうかの判定フラグ
  30. if (!$is_recurred) { //function cacheのために再帰処理を行う
  31. $is_recurred = true;
  32. $funcargs = func_get_args();
  33. $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
  34. $is_recurred = false;
  35. return $result;
  36. }
  37. $sql = 'SELECT COUNT(*) FROM c_message WHERE c_member_id_to = ?' .
  38. ' AND is_read = 0 AND is_send = 1';
  39. $params = array(intval($c_member_id_to));
  40. return db_get_one($sql, $params);
  41. }
  42. /**
  43. * メッセージ取得
  44. */
  45. function db_message_c_message4c_message_id2($c_message_id, $u)
  46. {
  47. $c_message = db_message_c_message4c_message_id($c_message_id);
  48. if ($c_message['c_member_id_to'] == $u) {
  49. // 受信メッセージ
  50. $c_message['is_received'] = true;
  51. $c_message['image_filename_disp'] = $c_message['c_member_image_filename_from'];
  52. } elseif ($c_message['c_member_id_from'] == $u) {
  53. // 送信メッセージ
  54. $c_message['is_received'] = false;
  55. $c_message['image_filename_disp'] = $c_message['c_member_image_filename_to'];
  56. }
  57. return $c_message;
  58. }
  59. /**
  60. * 受信メッセージリストを取得(年月日絞りに対応)
  61. */
  62. function db_message_c_message_received_list4c_member_id4range($c_member_id, $page, $page_size, $year = '', $month = '', $day = '')
  63. {
  64. $params = array();
  65. $params[] = intval($c_member_id);
  66. $sql = "SELECT * FROM c_message";
  67. $where = "c_member_id_to = ?".
  68. " AND is_deleted_to = 0" .
  69. " AND is_send = 1";
  70. //年月日で絞る
  71. if ($year && $month) {
  72. if ($day) {
  73. $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
  74. $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day+1, $year));
  75. } else {
  76. $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, 1, $year));
  77. $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month+1, 1, $year));
  78. }
  79. $where .= ' AND r_datetime >= ? AND r_datetime < ?';
  80. $params[] = $s_date;
  81. $params[] = $e_date;
  82. }
  83. $sql .= " WHERE $where";
  84. $sql .= " ORDER BY r_datetime DESC";
  85. $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
  86. foreach ($c_message_list as $key => $value) {
  87. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  88. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  89. $c_message_list[$key]['image_filename'] = $c_member['image_filename'];
  90. }
  91. $sql = "SELECT COUNT(*) FROM c_message WHERE $where";
  92. $total_num = db_get_one($sql, $params);
  93. if ($total_num != 0) {
  94. $total_page_num = ceil($total_num / $page_size);
  95. if ($page >= $total_page_num) {
  96. $next = false;
  97. } else {
  98. $next = true;
  99. }
  100. if ($page <= 1) {
  101. $prev = false;
  102. } else {
  103. $prev = true;
  104. }
  105. }
  106. return array($c_message_list , $prev , $next, $total_num);
  107. }
  108. /**
  109. * 送信メッセージリストを取得
  110. */
  111. function db_message_c_message_sent_list4c_member_id4range($c_member_id, $page, $page_size, $year = '', $month = '', $day = '')
  112. {
  113. $params = array(intval($c_member_id));
  114. $sql = "SELECT * FROM c_message";
  115. $where = "c_member_id_from = ?" .
  116. " AND is_deleted_from = 0" .
  117. " AND is_send = 1";
  118. //年月日で絞る
  119. if ($year && $month) {
  120. if ($day) {
  121. $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
  122. $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day+1, $year));
  123. } else {
  124. $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, 1, $year));
  125. $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month+1, 1, $year));
  126. }
  127. $where .= ' AND r_datetime >= ? AND r_datetime < ?';
  128. $params[] = $s_date;
  129. $params[] = $e_date;
  130. }
  131. $sql .= " WHERE $where";
  132. $sql .= " ORDER BY r_datetime DESC";
  133. $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
  134. foreach ($c_message_list as $key => $value) {
  135. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  136. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  137. $c_message_list[$key]['image_filename'] = $c_member['image_filename'];
  138. }
  139. $sql = "SELECT COUNT(*) FROM c_message WHERE $where";
  140. $total_num = db_get_one($sql, $params);
  141. if ($total_num != 0) {
  142. $total_page_num = ceil($total_num / $page_size);
  143. if ($page >= $total_page_num) {
  144. $next = false;
  145. } else {
  146. $next = true;
  147. }
  148. if ($page <= 1) {
  149. $prev = false;
  150. } else {
  151. $prev = true;
  152. }
  153. }
  154. return array($c_message_list , $prev , $next, $total_num);
  155. }
  156. /**
  157. * 下書き保存メッセージリストを取得
  158. */
  159. function db_message_c_message_save_list4c_member_id4range($c_member_id, $page, $page_size)
  160. {
  161. $sql = "SELECT * FROM c_message";
  162. $where = "c_member_id_from = ?".
  163. " AND is_send = 0" .
  164. " AND is_deleted_from = 0";
  165. $sql .= " WHERE $where";
  166. $sql .= " ORDER BY r_datetime DESC";
  167. $params = array(intval($c_member_id));
  168. $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
  169. foreach ($c_message_list as $key => $value) {
  170. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  171. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  172. $c_message_list[$key]['image_filename'] = $c_member['image_filename'];
  173. }
  174. $sql = "SELECT COUNT(*) FROM c_message WHERE $where";
  175. $total_num = db_get_one($sql, $params);
  176. if ($total_num != 0) {
  177. $total_page_num = ceil($total_num / $page_size);
  178. if ($page >= $total_page_num) {
  179. $next = false;
  180. } else {
  181. $next = true;
  182. }
  183. if ($page <= 1) {
  184. $prev = false;
  185. } else {
  186. $prev = true;
  187. }
  188. }
  189. return array($c_message_list, $prev, $next, $total_num);
  190. }
  191. /**
  192. * ごみ箱メッセージリストを取得
  193. */
  194. function db_message_c_message_trash_list4c_member_id4range($c_member_id, $page, $page_size)
  195. {
  196. $where_from = "c_member_id_from = ?" .
  197. " AND is_deleted_from = 1" .
  198. " AND is_kanzen_sakujo_from = 0";
  199. $sql = 'SELECT * FROM c_message WHERE '. $where_from . ' ORDER BY r_datetime DESC';
  200. $sql_num = 'SELECT COUNT(*) FROM c_message WHERE '. $where_from;
  201. $params = array(intval($c_member_id));
  202. $c_message_list_from = db_get_all_page($sql, 1, ($page_size * ($page + 1)), $params);
  203. $c_message_num_from = db_get_one($sql_num, $params);
  204. $where_to = "c_member_id_to = ?" .
  205. " AND is_deleted_to = 1" .
  206. " AND is_kanzen_sakujo_to = 0";
  207. $sql = 'SELECT * FROM c_message WHERE '. $where_to . ' ORDER BY r_datetime DESC';
  208. $sql_num = 'SELECT COUNT(*) FROM c_message WHERE '. $where_to;
  209. $c_message_list_to = db_get_all_page($sql, 1, ($page_size * ($page + 1)), $params);
  210. $c_message_num_to = db_get_one($sql_num, $params);
  211. $c_message_list = array_merge($c_message_list_from, $c_message_list_to);
  212. foreach ($c_message_list as $key => $row) {
  213. $c_message_id[$key] = intval($row['c_message_id']);
  214. }
  215. @array_multisort($c_message_id, SORT_DESC, $c_message_list);
  216. $c_message_list = array_slice($c_message_list, $page_size * ($page - 1), $page_size);
  217. $total_num = $c_message_num_from + $c_message_num_to;
  218. if ($total_num != 0) {
  219. $total_page_num = ceil($total_num / $page_size);
  220. if ($page >= $total_page_num) {
  221. $next = false;
  222. } else {
  223. $next = true;
  224. }
  225. if ($page <= 1) {
  226. $prev = false;
  227. } else {
  228. $prev = true;
  229. }
  230. }
  231. foreach ($c_message_list as $key => $value) {
  232. if ($value['c_member_id_to'] == $c_member_id) {
  233. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  234. } else {
  235. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  236. }
  237. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  238. $c_message_list[$key]['image_filename'] = $c_member['image_filename'];
  239. }
  240. return array($c_message_list, $prev, $next, $total_num);
  241. }
  242. /**
  243. * 未読メッセージ数を取得
  244. *
  245. * @param int $c_member_id
  246. * @return int 未読メッセージ数
  247. */
  248. function db_message_c_message_received_unread_all_count4c_member_id($c_member_id)
  249. {
  250. $sql = 'SELECT COUNT(*) FROM c_message WHERE c_member_id_to = ?' .
  251. ' AND is_read = 0 AND is_send = 1';
  252. $params = array(intval($c_member_id));
  253. return db_get_one($sql, $params);
  254. }
  255. function db_message_c_message_received_list4c_member_id4range2($c_member_id, $page_size, $page)
  256. {
  257. $sql = "SELECT * FROM c_message";
  258. $sql .= " WHERE c_member_id_to = ?".
  259. " AND is_deleted_to = 0" .
  260. " AND is_send = 1";
  261. $sql .= " ORDER BY r_datetime DESC";
  262. $params = array(intval($c_member_id));
  263. $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
  264. foreach ($c_message_list as $key => $value) {
  265. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  266. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  267. }
  268. $sql = "SELECT COUNT(*) FROM c_message" .
  269. " WHERE c_member_id_to = ?".
  270. " AND is_deleted_to = 0" .
  271. " AND is_send = 1";
  272. $total_num = db_get_one($sql, $params);
  273. if ($total_num != 0) {
  274. $total_page_num = ceil($total_num / $page_size);
  275. if ($page >= $total_page_num) {
  276. $next = false;
  277. } else {
  278. $next = true;
  279. }
  280. if ($page <= 1) {
  281. $prev = false;
  282. } else {
  283. $prev = true;
  284. }
  285. }
  286. return array($c_message_list, $prev, $next, $total_num);
  287. }
  288. function db_message_c_message_sent_list4c_member_id4range2($c_member_id, $page_size, $page)
  289. {
  290. $sql = "SELECT * FROM c_message";
  291. $sql .= " WHERE c_member_id_from = ?".
  292. " AND is_deleted_from = 0" .
  293. " AND is_send = 1";
  294. $sql .= " ORDER BY r_datetime DESC";
  295. $params = array(intval($c_member_id));
  296. $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
  297. foreach ($c_message_list as $key => $value) {
  298. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  299. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  300. }
  301. $sql = "SELECT COUNT(*) FROM c_message" .
  302. " WHERE c_member_id_from = ?".
  303. " AND is_deleted_from = 0" .
  304. " AND is_send = 1";
  305. $total_num = db_get_one($sql, $params);
  306. if ($total_num != 0) {
  307. $total_page_num = ceil($total_num / $page_size);
  308. if ($page >= $total_page_num) {
  309. $next = false;
  310. } else {
  311. $next = true;
  312. }
  313. if ($page <= 1) {
  314. $prev = false;
  315. } else {
  316. $prev = true;
  317. }
  318. }
  319. return array($c_message_list, $prev, $next, $total_num);
  320. }
  321. /**
  322. * 返信側にある返信元メッセージIDを取得
  323. */
  324. function db_message_hensinmoto_id($hensin_c_message_id)
  325. {
  326. $sql = 'SELECT hensinmoto_c_message_id FROM c_message WHERE c_message_id = ?';
  327. $params = array(intval($hensin_c_message_id));
  328. return db_get_one($sql, $params);
  329. }
  330. /*** write ***/
  331. /**
  332. * メッセージ作成
  333. *
  334. * @param int $c_member_id_from
  335. * @param int $c_member_id_to
  336. * @param string $subject
  337. * @param string $body
  338. * @return int $insert_id
  339. */
  340. function db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body)
  341. {
  342. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  343. $subject = db_ktai_delete_url_session_parameter($subject);
  344. $body = db_ktai_delete_url_session_parameter($body);
  345. $data = array(
  346. 'c_member_id_from' => intval($c_member_id_from),
  347. 'c_member_id_to' => intval($c_member_id_to),
  348. 'subject' => $subject,
  349. 'body' => $body,
  350. 'r_datetime' => db_now(),
  351. 'is_send' => 1,
  352. 'image_filename_1' => '',
  353. 'image_filename_2' => '',
  354. 'image_filename_3' => '',
  355. );
  356. return db_insert('c_message', $data);
  357. }
  358. /**
  359. * 承認メッセージ作成
  360. *
  361. * @param int $c_member_id_from
  362. * @param int $c_member_id_to
  363. * @param string $subject
  364. * @param string $body
  365. * @return int $insert_id
  366. */
  367. function db_message_insert_c_message_syoudaku($c_member_id_from, $c_member_id_to, $subject, $body)
  368. {
  369. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  370. $subject = db_ktai_delete_url_session_parameter($subject);
  371. $body = db_ktai_delete_url_session_parameter($body);
  372. $data = array(
  373. 'c_member_id_from' => intval($c_member_id_from),
  374. 'c_member_id_to' => intval($c_member_id_to),
  375. 'subject' => $subject,
  376. 'body' => $body,
  377. 'r_datetime' => db_now(),
  378. 'is_send' => 1,
  379. 'is_syoudaku' => 1,
  380. 'is_read' => 1,
  381. 'image_filename_1' => '',
  382. 'image_filename_2' => '',
  383. 'image_filename_3' => '',
  384. );
  385. return db_insert('c_message', $data);
  386. }
  387. /**
  388. * メッセージを下書き保存する
  389. */
  390. function db_message_insert_message_to_is_save($c_member_id_to,$c_member_id_from,$subject,$body,$jyusin_message_id)
  391. {
  392. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  393. $subject = db_ktai_delete_url_session_parameter($subject);
  394. $body = db_ktai_delete_url_session_parameter($body);
  395. $data = array(
  396. 'c_member_id_from' => intval($c_member_id_from),
  397. 'c_member_id_to' => intval($c_member_id_to),
  398. 'subject' => $subject,
  399. 'body' => $body,
  400. 'r_datetime' => db_now(),
  401. 'is_send' => 0,
  402. 'hensinmoto_c_message_id' => intval($jyusin_message_id),
  403. 'image_filename_1' => '',
  404. 'image_filename_2' => '',
  405. 'image_filename_3' => '',
  406. );
  407. return db_insert('c_message', $data);
  408. }
  409. /**
  410. * メッセージをゴミ箱へ移動
  411. * 受信メッセージの場合は既読にする
  412. *
  413. * @param int $c_message_id
  414. * @param int $c_member_id
  415. * @return bool 削除が成功したかどうか
  416. */
  417. function db_message_delete_c_message4c_message_id($c_message_id, $c_member_id)
  418. {
  419. $message = db_message_c_message4c_message_id($c_message_id);
  420. $where = 'c_message_id = '.intval($c_message_id);
  421. if ($message['c_member_id_to'] == $c_member_id) {
  422. // 受信メッセージ
  423. $data = array(
  424. 'is_deleted_to' => 1,
  425. 'is_read' => 1,
  426. );
  427. db_update('c_message', $data, $where);
  428. return true;
  429. } elseif ($message['c_member_id_from'] == $c_member_id) {
  430. // 送信メッセージ
  431. $data = array(
  432. 'is_deleted_from' => 1,
  433. );
  434. db_update('c_message', $data, $where);
  435. return true;
  436. }
  437. return false;
  438. }
  439. /**
  440. * メッセージをごみ箱から元に戻す
  441. */
  442. function db_message_move_message($c_message_id, $c_member_id)
  443. {
  444. // 受信メッセージだった場合
  445. $data = array('is_deleted_from' => 0);
  446. $where = array(
  447. 'c_message_id' => intval($c_message_id),
  448. 'c_member_id_from' => intval($c_member_id),
  449. );
  450. db_update('c_message', $data, $where);
  451. // 送信メッセージだった場合
  452. // 下書きメッセージだった場合
  453. $data = array('is_deleted_to' => 0);
  454. $where = array(
  455. 'c_message_id' => intval($c_message_id),
  456. 'c_member_id_to' => intval($c_member_id),
  457. );
  458. db_update('c_message', $data, $where);
  459. }
  460. /**
  461. * メッセージをごみ箱から削除
  462. */
  463. function db_message_delete_c_message_from_trash($c_message_id, $c_member_id)
  464. {
  465. $data = array('is_kanzen_sakujo_from' => 1);
  466. $where = 'c_message_id = '.intval($c_message_id);
  467. db_update('c_message', $data, $where);
  468. $sql = 'SELECT * FROM c_message WHERE c_message_id = ?';
  469. $params = array(intval($c_message_id));
  470. $c_message = db_get_row($sql, $params);
  471. //c_image_sizeのレコード削除
  472. $where = array();
  473. $params = array();
  474. $sql = 'DELETE FROM c_image_size';
  475. if ($c_message['image_filename_1']) {
  476. $where[] = "filename = ?";
  477. $params[] = $c_message['image_filename_1'];
  478. }
  479. if ($c_message['image_filename_2']) {
  480. $where[] = "filename = ?";
  481. $params[] = $c_message['image_filename_2'];
  482. }
  483. if ($c_message['image_filename_3']) {
  484. $where[] = "filename = ?";
  485. $params[] = $c_message['image_filename_3'];
  486. }
  487. if ($where) {
  488. $sql .= " WHERE " . implode(' OR ', $where);
  489. db_query($sql, $params);
  490. }
  491. //function cacheの削除
  492. $category = util_image_filename2category($filename);
  493. pne_cache_drop('db_image_get_image_filesize', $c_member_id, $category);
  494. }
  495. function db_message_delete_c_message_to_trash($c_message_id)
  496. {
  497. $data = array('is_kanzen_sakujo_to' => 1);
  498. $where = 'c_message_id = '.intval($c_message_id);
  499. db_update('c_message', $data, $where);
  500. }
  501. /**
  502. * 返信側に受信メッセージIDを渡す
  503. */
  504. function db_message_update_is_hensinmoto_c_message_id($jyusin_c_message_id, $hensin_c_message_id)
  505. {
  506. $data = array('hensinmoto_c_message_id' => intval($jyusin_c_message_id));
  507. $where = array('c_message_id' => intval($hensin_c_message_id));
  508. return db_update('c_message', $data, $where);
  509. }
  510. /**
  511. * 返信済みにする
  512. */
  513. function db_message_update_is_hensin($c_message_id)
  514. {
  515. $data = array('is_hensin' => 1);
  516. $where = array('c_message_id' => intval($c_message_id));
  517. db_update('c_message', $data, $where);
  518. }
  519. /**
  520. * メッセージを既読にする
  521. */
  522. function db_message_update_c_message_is_read4c_message_id($c_message_id, $c_member_id)
  523. {
  524. $data = array('is_read' => 1);
  525. $where = array(
  526. 'c_message_id' => intval($c_message_id),
  527. 'c_member_id_to' => intval($c_member_id),
  528. );
  529. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id);
  530. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id);
  531. return db_update('c_message', $data, $where);
  532. }
  533. /**
  534. * メッセージの下書きを更新
  535. */
  536. function db_message_update_message_to_is_save($c_message_id, $subject, $body, $is_send = 0)
  537. {
  538. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  539. $subject = db_ktai_delete_url_session_parameter($subject);
  540. $body = db_ktai_delete_url_session_parameter($body);
  541. $data = array(
  542. 'subject' => $subject,
  543. 'body' => $body,
  544. 'r_datetime' => db_now(),
  545. 'is_send' => (bool)$is_send,
  546. );
  547. $where = array('c_message_id' => intval($c_message_id));
  548. db_update('c_message', $data, $where);
  549. }
  550. //---
  551. //◆メッセージ受信メール
  552. function db_message_send_message($c_member_id_from, $c_member_id_to, $subject, $body)
  553. {
  554. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  555. $subject = db_ktai_delete_url_session_parameter($subject);
  556. $body = db_ktai_delete_url_session_parameter($body);
  557. //メッセージ
  558. $c_message_id = db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
  559. do_common_send_message_mail_send($c_member_id_to, $c_member_id_from, $subject, $body, $c_message_id);
  560. do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
  561. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
  562. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
  563. return $c_message_id;
  564. }
  565. //◆承認依頼メッセージ受信メール
  566. function db_message_send_message_syoudaku($c_member_id_from, $c_member_id_to, $subject, $body)
  567. {
  568. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  569. $subject = db_ktai_delete_url_session_parameter($subject);
  570. $body = db_ktai_delete_url_session_parameter($body);
  571. //メッセージ
  572. db_message_insert_c_message_syoudaku($c_member_id_from, $c_member_id_to, $subject, $body);
  573. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
  574. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
  575. do_common_send_message_syoudaku_mail_send($c_member_id_to, $c_member_id_from);
  576. do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
  577. }
  578. // コミュニティ紹介
  579. function db_message_send_message_syoukai_commu($c_member_id_from, $c_member_id_to, $subject, $body)
  580. {
  581. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  582. $subject = db_ktai_delete_url_session_parameter($subject);
  583. $body = db_ktai_delete_url_session_parameter($body);
  584. //メッセージ
  585. db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
  586. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
  587. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
  588. do_common_send_message_syoukai_commu_mail_send($c_member_id_to, $c_member_id_from);
  589. do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
  590. }
  591. // コミュニティ参加者全員にメール
  592. function db_message_send_message_commu_send_msg($c_member_id_from, $c_member_id_to, $subject, $body, $c_commu_id)
  593. {
  594. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  595. $subject = db_ktai_delete_url_session_parameter($subject);
  596. $body = db_ktai_delete_url_session_parameter($body);
  597. //メッセージ
  598. db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
  599. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
  600. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
  601. do_common_send_message_commu_send_msg($c_member_id_to, $c_member_id_from, $c_commu_id);
  602. do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
  603. }
  604. // メンバー紹介
  605. function db_message_send_message_syoukai_member($c_member_id_from, $c_member_id_to, $subject, $body)
  606. {
  607. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  608. $subject = db_ktai_delete_url_session_parameter($subject);
  609. $body = db_ktai_delete_url_session_parameter($body);
  610. //メッセージ
  611. db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
  612. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
  613. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
  614. do_common_send_message_syoukai_member_mail_send($c_member_id_to, $c_member_id_from);
  615. do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
  616. }
  617. //イベント紹介
  618. function db_message_send_message_event_invite($c_member_id_from, $c_member_id_to, $subject, $body)
  619. {
  620. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  621. $subject = db_ktai_delete_url_session_parameter($subject);
  622. $body = db_ktai_delete_url_session_parameter($body);
  623. //メッセージ
  624. db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
  625. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
  626. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
  627. do_common_send_message_event_invite_mail_send($c_member_id_to, $c_member_id_from);
  628. do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
  629. }
  630. //イベントメッセージ
  631. function db_message_send_message_event_message($c_member_id_from, $c_member_id_to, $subject, $body)
  632. {
  633. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  634. $subject = db_ktai_delete_url_session_parameter($subject);
  635. $body = db_ktai_delete_url_session_parameter($body);
  636. //メッセージ
  637. db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
  638. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
  639. pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
  640. do_common_send_message_event_message_mail_send($c_member_id_to, $c_member_id_from);
  641. do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
  642. }
  643. function db_message_update_c_message($c_message_id, $subject, $body, $image_filename_1 = '', $image_filename_2 = '', $image_filename_3 = '', $filename = '')
  644. {
  645. // タイトルと本文中に書いてあるURLがSNS内でありセッションパラメータを含んでいた場合は削除
  646. $subject = db_ktai_delete_url_session_parameter($subject);
  647. $body = db_ktai_delete_url_session_parameter($body);
  648. $data = array(
  649. 'subject' => $subject,
  650. 'body' => $body,
  651. );
  652. if ($image_filename_1) $data['image_filename_1'] = $image_filename_1;
  653. if ($image_filename_2) $data['image_filename_2'] = $image_filename_2;
  654. if ($image_filename_3) $data['image_filename_3'] = $image_filename_3;
  655. if ($filename) $data['filename'] = $filename;
  656. $where = array(
  657. 'c_message_id' => intval($c_message_id),
  658. );
  659. return db_update('c_message', $data, $where);
  660. }
  661. //メッセージの次のc_message_idを取得
  662. function db_message_get_c_message_next_id4c_message_id($c_member_id, $c_message_id, $box)
  663. {
  664. if ($box == 'savebox' || $box == 'trash') {
  665. return null;
  666. } else if ($box == 'outbox'){ //送信箱
  667. $where = " WHERE c_member_id_from = ? AND is_deleted_from = 0";
  668. } else { //受信箱
  669. $where = " WHERE c_member_id_to = ? AND is_deleted_to = 0";
  670. }
  671. $sql = "SELECT c_message_id FROM c_message" .
  672. $where.
  673. " AND is_send = 1" .
  674. " AND c_message_id > ?" .
  675. " ORDER BY r_datetime";
  676. $params = array(
  677. intval($c_member_id),
  678. intval($c_message_id)
  679. );
  680. return db_get_one($sql, $params);
  681. }
  682. //メッセージの前のc_message_idを取得
  683. function db_message_get_c_message_prev_id4c_message_id($c_member_id, $c_message_id, $box)
  684. {
  685. if ($box == 'savebox' || $box == 'trash') {
  686. return null;
  687. } else if ($box == 'outbox'){ //送信箱
  688. $where = " WHERE c_member_id_from = ? AND is_deleted_from = 0";
  689. } else { //受信箱
  690. $where = " WHERE c_member_id_to = ? AND is_deleted_to = 0";
  691. }
  692. $sql = "SELECT c_message_id FROM c_message" .
  693. $where.
  694. " AND is_send = 1" .
  695. " AND c_message_id < ?" .
  696. " ORDER BY r_datetime DESC";
  697. $params = array(
  698. intval($c_member_id),
  699. intval($c_message_id)
  700. );
  701. return db_get_one($sql, $params);
  702. }
  703. //メッセージを検索
  704. //検索対象:subject,body
  705. function db_message_search_c_message($c_member_id, $page, $page_size, $keyword, $box, $target_c_member_id = null)
  706. {
  707. $params = array();
  708. $params[] = intval($c_member_id);
  709. if ($box == 'inbox' || !$box) {
  710. $where = "c_member_id_to = ?".
  711. " AND is_deleted_to = 0" .
  712. " AND is_send = 1";
  713. if ($target_c_member_id) {
  714. $where .= " AND c_member_id_from = ?";
  715. $params[] = intval($target_c_member_id);
  716. }
  717. } elseif ($box == 'outbox') {
  718. $where = "c_member_id_from = ?".
  719. " AND is_deleted_from = 0" .
  720. " AND is_send = 1";
  721. if ($target_c_member_id) {
  722. $where .= " AND c_member_id_to = ?";
  723. $params[] = intval($target_c_member_id);
  724. }
  725. }
  726. $where .= " AND ( subject like ? OR body like ?)";
  727. $params[] = '%'.strval($keyword).'%';
  728. $params[] = '%'.strval($keyword).'%';
  729. $sql = "SELECT * FROM c_message";
  730. $sql .= " WHERE $where";
  731. $sql .= " ORDER BY r_datetime DESC";
  732. $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
  733. foreach ($c_message_list as $key => $value) {
  734. if ($box == 'inbox' || !$box) {
  735. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  736. } else {
  737. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  738. }
  739. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  740. $c_message_list[$key]['image_filename'] = $c_member['image_filename'];
  741. }
  742. $sql = "SELECT COUNT(*) FROM c_message WHERE $where";
  743. $total_num = db_get_one($sql, $params);
  744. if ($total_num != 0) {
  745. $total_page_num = ceil($total_num / $page_size);
  746. if ($page >= $total_page_num) {
  747. $next = false;
  748. } else {
  749. $next = true;
  750. }
  751. if ($page <= 1) {
  752. $prev = false;
  753. } else {
  754. $prev = true;
  755. }
  756. }
  757. return array($c_message_list , $prev , $next, $total_num);
  758. }
  759. /**
  760. * 受信メッセージの送信者リストを取得
  761. */
  762. function db_message_c_message_sender_list4c_member_id($c_member_id)
  763. {
  764. $where = "c_member_id_to = ?".
  765. " AND is_deleted_to = 0" .
  766. " AND is_send = 1";
  767. if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
  768. $sql = "SELECT c_member_id_from" .
  769. " FROM" .
  770. "(" .
  771. "SELECT distinct on(c_member_id_from) *" .
  772. " FROM" .
  773. " c_message" .
  774. " WHERE " . $where .
  775. ") as sub_member_tbl";
  776. } else {
  777. $sql = "SELECT distinct c_member_id_from FROM c_message";
  778. $sql .= " WHERE $where";
  779. }
  780. $sql .= " ORDER BY r_datetime DESC";
  781. $params = array(intval($c_member_id));
  782. $c_message_list = db_get_all($sql, $params);
  783. foreach ($c_message_list as $key => $value) {
  784. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
  785. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  786. }
  787. return $c_message_list;
  788. }
  789. /**
  790. * 受信メッセージの送信者リストを取得
  791. */
  792. function db_message_c_message_receiver_list4c_member_id($c_member_id)
  793. {
  794. $where = "c_member_id_from = ?".
  795. " AND is_deleted_from = 0" .
  796. " AND is_send = 1";
  797. if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
  798. $sql = "SELECT c_member_id_to" .
  799. " FROM" .
  800. "(" .
  801. "SELECT distinct on(c_member_id_to) *" .
  802. " FROM" .
  803. " c_message" .
  804. " WHERE " . $where .
  805. ") as sub_member_tbl";
  806. } else {
  807. $sql = "SELECT distinct c_member_id_to FROM c_message";
  808. $sql .= " WHERE $where";
  809. }
  810. $sql .= " ORDER BY r_datetime DESC";
  811. $params = array(intval($c_member_id));
  812. $c_message_list = db_get_all($sql, $params);
  813. foreach ($c_message_list as $key => $value) {
  814. $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
  815. $c_message_list[$key]['nickname'] = $c_member['nickname'];
  816. }
  817. return $c_message_list;
  818. }
  819. /**
  820. * メッセージページの「各月のメッセージ」用
  821. *
  822. * メッセージを最初に書いた月からスタートしてみる
  823. */
  824. function db_message_month_list4c_member_id($c_member_id, $box)
  825. {
  826. if ($box == 'inbox' || !$box) {
  827. $where = "c_member_id_to = ?".
  828. " AND is_deleted_to = 0" .
  829. " AND is_send = 1";
  830. } elseif ($box == 'outbox') {
  831. $where = "c_member_id_from = ?".
  832. " AND is_deleted_from = 0" .
  833. " AND is_send = 1";
  834. } else {
  835. return null;
  836. }
  837. $sql = "SELECT r_datetime FROM c_message" .
  838. " WHERE $where" .
  839. " ORDER BY r_datetime";
  840. $params = array(intval($c_member_id));
  841. if (!$first_datetime = db_get_one($sql, $params)) {
  842. return array();
  843. }
  844. $start_date = getdate(strtotime($first_datetime));
  845. $end_date = getdate();
  846. $date = array();
  847. $year = $start_date['year'];
  848. $month = $start_date['mon'];
  849. while (1) {
  850. $date[] = array(
  851. 'year' => $year,
  852. 'month' => $month,
  853. );
  854. if ($end_date['year'] <= $year
  855. && $end_date['mon'] <= $month) {
  856. break;
  857. }
  858. $month++;
  859. if ($month > 12) {
  860. $month = 1;
  861. $year++;
  862. }
  863. }
  864. return array_reverse($date);
  865. }
  866. /**
  867. * 指定された年月にメッセージを送受信した日のリストを返す
  868. */
  869. function db_message_is_message_list4date($u, $year, $month, $box)
  870. {
  871. include_once 'Date/Calc.php';
  872. if ($box == 'inbox' || !$box) {
  873. $where = "c_member_id_to = ?".
  874. " AND is_deleted_to = 0" .
  875. " AND is_send = 1";
  876. } elseif ($box == 'outbox') {
  877. $where = "c_member_id_from = ?".
  878. " AND is_deleted_from = 0" .
  879. " AND is_send = 1";
  880. } else {
  881. return null;
  882. }
  883. if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
  884. $sql = "SELECT DISTINCT date_part('day', r_datetime) FROM c_message" .
  885. " WHERE $where" .
  886. ' AND is_send=1 AND r_datetime >= ? AND r_datetime < ?';
  887. } else {
  888. $sql = 'SELECT DISTINCT DAYOFMONTH(r_datetime) FROM c_message' .
  889. " WHERE $where" .
  890. ' AND is_send=1 AND r_datetime >= ? AND r_datetime < ?';
  891. }
  892. $date_format = '%Y-%m-%d 00:00:00';
  893. $thismonth = Date_Calc::beginOfMonth($month, $year, $date_format);
  894. $nextmonth = Date_Calc::beginOfNextMonth(0, $month, $year, $date_format);
  895. $params = array(intval($u), $thismonth, $nextmonth);
  896. return db_get_col($sql, $params);
  897. }
  898. ?>