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

source: OpenPNE/branches/prj/pne-merge/2217-message_mail/webapp/lib/db/message.php @ 6539

Last change on this file since 6539 was 6539, checked in by kiwa, 12 years ago

#2217 ゆりさんの日記にあるとおりに変更してみた

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_common_c_member4c_member_id_LIGHT($c_message['c_member_id_from']);
17    $c_member_to = db_common_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_common_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_common_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_common_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_common_c_member4c_member_id_LIGHT($value['c_member_id_from']);
274        } else {
275            $c_member = db_common_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_common_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_common_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 = '')
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
679    $where = array(
680        'c_message_id' => intval($c_message_id),
681    );
682    return db_update('c_message', $data, $where);
683}
684
685
686//メッセージの次のc_message_idを取得
687function db_message_get_c_message_next_id4c_message_id($c_member_id, $c_message_id, $box)
688{
689    if ($box == 'savebox' || $box == 'trash') {
690        return null;
691    } else if ($box == 'outbox'){   //送信箱
692        $where = " WHERE c_member_id_from = ?";
693    } else {                        //受信箱
694        $where = " WHERE c_member_id_to = ?";
695    }
696
697    $sql =  "SELECT c_message_id FROM c_message" .
698            $where.
699            " AND is_deleted_to = 0" .
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 = ?";
718    } else {                        //受信箱
719        $where = " WHERE c_member_id_to = ?";
720    }
721
722    $sql =  "SELECT c_message_id FROM c_message" .
723            $where.
724            " AND is_deleted_to = 0" .
725            " AND is_send = 1" .
726            " AND c_message_id < ?" .
727            " ORDER BY r_datetime DESC";
728    $params = array(
729                intval($c_member_id),
730                intval($c_message_id)
731              );
732
733    return db_get_one($sql, $params);
734}
735
736//メッセージを検索
737//検索対象:subject,body
738
739function db_message_search_c_message($c_member_id, $page, $page_size, $keyword, $box, $target_c_member_id = null)
740{
741    $params = array();
742    $params[] = intval($c_member_id);
743
744    if ($box == 'inbox' || !$box) {
745        $where = "c_member_id_to = ?".
746                 " AND is_deleted_to = 0" .
747                 " AND is_send = 1";
748        if ($target_c_member_id) {
749            $where .= " AND c_member_id_from = ?";
750            $params[] = intval($target_c_member_id);
751        }
752    } elseif ($box == 'outbox') {
753        $where = "c_member_id_from = ?".
754                 " AND is_deleted_from = 0" .
755                 " AND is_send = 1";
756        if ($target_c_member_id) {
757            $where .= " AND c_member_id_to = ?";
758            $params[] = intval($target_c_member_id);
759        }
760    }
761
762    $where .= " AND ( subject like ? OR body like ?)";
763
764    $params[] = '%'.strval($keyword).'%';
765    $params[] = '%'.strval($keyword).'%';
766
767    $sql = "SELECT * FROM c_message";
768    $sql .= " WHERE $where";
769    $sql .= " ORDER BY r_datetime DESC";
770
771    $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
772
773    foreach ($c_message_list as $key => $value) {
774        if ($box == 'inbox' || !$box) {
775            $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_from']);
776        } else {
777            $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_to']);
778        }
779        $c_message_list[$key]['nickname'] = $c_member['nickname'];
780        $c_message_list[$key]['image_filename'] = $c_member['image_filename'];
781    }
782
783    $sql = "SELECT COUNT(*) FROM c_message WHERE $where";
784    $total_num = db_get_one($sql, $params);
785
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_message_list , $prev , $next, $total_num);
800
801}
802
803
804/**
805 * 受信メッセージの送信者リストを取得
806 */
807function db_message_c_message_sender_list4c_member_id($c_member_id)
808{
809    $where = "c_member_id_to = ?".
810            " AND is_deleted_to = 0" .
811            " AND is_send = 1";
812
813    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
814        $sql = "SELECT c_member_id_from" .
815                " FROM" .
816                    "(" .
817                        "SELECT distinct on(c_member_id_from) *" .
818                        " FROM" .
819                            " c_message" .
820                        " WHERE " . $where .
821                    ") as sub_member_tbl";
822    } else {
823        $sql = "SELECT distinct c_member_id_from FROM c_message";
824        $sql .= " WHERE $where";
825    }
826    $sql .= " ORDER BY r_datetime DESC";
827    $params = array(intval($c_member_id));
828    $c_message_list = db_get_all($sql, $params);
829
830    foreach ($c_message_list as $key => $value) {
831        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_from']);
832        $c_message_list[$key]['nickname'] = $c_member['nickname'];
833    }
834    return $c_message_list;
835}
836
837/**
838 * 受信メッセージの送信者リストを取得
839 */
840function db_message_c_message_receiver_list4c_member_id($c_member_id)
841{
842    $where = "c_member_id_from = ?".
843            " AND is_deleted_from = 0" .
844            " AND is_send = 1";
845
846    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
847        $sql = "SELECT c_member_id_to" .
848                " FROM" .
849                    "(" .
850                        "SELECT distinct on(c_member_id_to) *" .
851                        " FROM" .
852                            " c_message" .
853                        " WHERE " . $where .
854                    ") as sub_member_tbl";
855    } else {
856        $sql = "SELECT distinct c_member_id_to FROM c_message";
857        $sql .= " WHERE $where";
858    }
859
860    $sql .= " ORDER BY r_datetime DESC";
861
862    $params = array(intval($c_member_id));
863    $c_message_list = db_get_all($sql, $params);
864
865    foreach ($c_message_list as $key => $value) {
866        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_to']);
867        $c_message_list[$key]['nickname'] = $c_member['nickname'];
868    }
869    return $c_message_list;
870}
871
872
873/**
874 * メッセージページの「各月のメッセージ」用
875 *
876 * メッセージを最初に書いた月からスタートしてみる
877 */
878function db_message_month_list4c_member_id($c_member_id, $box)
879{
880    if ($box == 'inbox' || !$box) {
881        $where = "c_member_id_to = ?".
882                 " AND is_deleted_to = 0" .
883                 " AND is_send = 1";
884    } elseif ($box == 'outbox') {
885        $where = "c_member_id_from = ?".
886                 " AND is_deleted_from = 0" .
887                 " AND is_send = 1";
888    } else {
889        return null;
890    }
891
892    $sql = "SELECT r_datetime FROM c_message" .
893        " WHERE $where" .
894        " ORDER BY r_datetime";
895
896    $params = array(intval($c_member_id));
897    if (!$first_datetime = db_get_one($sql, $params)) {
898        return array();
899    }
900
901    $start_date = getdate(strtotime($first_datetime));
902    $end_date =  getdate();
903
904    $date = array();
905    $year = $start_date['year'];
906    $month = $start_date['mon'];
907    while (1) {
908        $date[] =  array(
909            'year' => $year,
910            'month' => $month,
911        );
912
913        if ($end_date['year'] <= $year
914            && $end_date['mon'] <= $month) {
915            break;
916        }
917
918        $month++;
919        if ($month > 12) {
920            $month = 1;
921            $year++;
922        }
923    }
924    return array_reverse($date);
925}
926
927
928
929/**
930 * 指定された年月にメッセージを送受信した日のリストを返す
931 */
932function db_message_is_message_list4date($u, $year, $month, $box)
933{
934    include_once 'Date/Calc.php';
935
936    if ($box == 'inbox' || !$box) {
937        $where = "c_member_id_to = ?".
938                 " AND is_deleted_to = 0" .
939                 " AND is_send = 1";
940    } elseif ($box == 'outbox') {
941        $where = "c_member_id_from = ?".
942                 " AND is_deleted_from = 0" .
943                 " AND is_send = 1";
944    } else {
945        return null;
946    }
947
948    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
949        $sql = "SELECT DISTINCT date_part('day', r_datetime) FROM c_message" .
950               " WHERE $where" .
951               ' AND is_send=1 AND r_datetime >= ? AND r_datetime < ?';
952    } else {
953        $sql = 'SELECT DISTINCT DAYOFMONTH(r_datetime) FROM c_message' .
954               " WHERE $where" .
955               ' AND is_send=1 AND r_datetime >= ? AND r_datetime < ?';
956    }
957
958    $date_format = '%Y-%m-%d 00:00:00';
959    $thismonth = Date_Calc::beginOfMonth($month, $year, $date_format);
960    $nextmonth = Date_Calc::beginOfNextMonth(0, $month, $year, $date_format);
961
962    $params = array(intval($u), $thismonth, $nextmonth);
963
964    return db_get_col($sql, $params);
965}
966
967?>
Note: See TracBrowser for help on using the repository browser.