ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/stable-2.12.x/webapp/lib/db/message.php @ 6872

Last change on this file since 6872 was 6872, checked in by ebihara, 13 years ago

#2082:次・前のメッセージを取得する際、削除フラグを考慮するようにした

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