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

source: OpenPNE/trunk/webapp/lib/db/message.php @ 11510

Last change on this file since 11510 was 11510, checked in by fukamachi, 14 years ago

#3833 お知らせメール送信用関数が、subjectとbodyを受け渡しておらず、常に空のメッセージが表示されてしまう問題を修正

File size: 32.4 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        $result = pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
40        $is_recurred = false;
41        return $result;
42    }
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, $c_member_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    $sql = 'SELECT * FROM c_message WHERE c_message_id = ?';
524    $params = array(intval($c_message_id));
525    $c_message = db_get_row($sql, $params);
526
527    //c_image_sizeのレコード削除
528    $where = array();
529    $params = array();
530    $sql = 'DELETE FROM c_image_size';
531    if ($c_message['image_filename_1']) {
532        $where[] = "filename = ?";
533        $params[] = $c_message['image_filename_1'];
534    }
535    if ($c_message['image_filename_2']) {
536        $where[] = "filename = ?";
537        $params[] = $c_message['image_filename_2'];
538    }
539    if ($c_message['image_filename_3']) {
540        $where[] = "filename = ?";
541        $params[] = $c_message['image_filename_3'];
542    }
543
544    if ($where) {
545        $sql .= " WHERE " . implode(' OR ', $where);
546        db_query($sql, $params);
547    }
548
549    //function cacheの削除
550    $category = util_image_filename2category($filename);
551    pne_cache_drop('db_image_get_image_filesize', $c_member_id, $category);
552}
553
554function db_message_delete_c_message_to_trash($c_message_id)
555{
556    $data = array('is_kanzen_sakujo_to' => 1);
557    $where = 'c_message_id = '.intval($c_message_id);
558    db_update('c_message', $data, $where);
559}
560
561/**
562 * 返信側に受信メッセージIDを渡す
563 */
564function db_message_update_is_hensinmoto_c_message_id($jyusin_c_message_id, $hensin_c_message_id)
565{
566    $data = array('hensinmoto_c_message_id' => intval($jyusin_c_message_id));
567    $where = array('c_message_id' => intval($hensin_c_message_id));
568    return db_update('c_message', $data, $where);
569}
570
571/**
572 * 返信済みにする
573 */
574function db_message_update_is_hensin($c_message_id)
575{
576    $data = array('is_hensin' => 1);
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_update_c_message_is_read4c_message_id($c_message_id, $c_member_id)
585{
586    $data = array('is_read' => 1);
587    $where = array(
588        'c_message_id' => intval($c_message_id),
589        'c_member_id_to' => intval($c_member_id),
590    );
591    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id);
592    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id);
593    return db_update('c_message', $data, $where);
594}
595
596/**
597 * メッセージの下書きを更新
598 */
599function db_message_update_message_to_is_save($c_message_id, $subject, $body, $is_send = 0)
600{
601    $data = array(
602        'subject'    => $subject,
603        'body'       => $body,
604        'r_datetime' => db_now(),
605        'is_send'    => (bool)$is_send,
606    );
607    $where = array('c_message_id' => intval($c_message_id));
608    db_update('c_message', $data, $where);
609}
610
611//---
612
613//◆メッセージ受信メール
614function db_message_send_message($c_member_id_from, $c_member_id_to, $subject, $body)
615{
616    //メッセージ
617    $c_message_id = db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
618
619    do_common_send_message_mail_send($c_member_id_to, $c_member_id_from, $subject, $body, $c_message_id);
620    do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
621    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
622    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
623
624    return $c_message_id;
625}
626
627//◆承認依頼メッセージ受信メール
628function db_message_send_message_syoudaku($c_member_id_from, $c_member_id_to, $subject, $body)
629{
630    //メッセージ
631    db_message_insert_c_message_syoudaku($c_member_id_from, $c_member_id_to, $subject, $body);
632    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
633    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
634
635    do_common_send_message_syoudaku_mail_send($c_member_id_to, $c_member_id_from);
636    do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
637}
638
639// コミュニティ紹介
640function db_message_send_message_syoukai_commu($c_member_id_from, $c_member_id_to, $subject, $body)
641{
642    //メッセージ
643    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
644    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
645    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
646
647    do_common_send_message_syoukai_commu_mail_send($c_member_id_to, $c_member_id_from);
648    do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
649}
650
651// コミュニティ参加者全員にメール
652function db_message_send_message_commu_send_msg($c_member_id_from, $c_member_id_to, $subject, $body, $c_commu_id)
653{
654    //メッセージ
655    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
656    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
657    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
658
659    do_common_send_message_commu_send_msg($c_member_id_to, $c_member_id_from, $c_commu_id);
660    do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
661}
662
663// メンバー紹介
664function db_message_send_message_syoukai_member($c_member_id_from, $c_member_id_to, $subject, $body)
665{
666    //メッセージ
667    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
668    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
669    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
670
671    do_common_send_message_syoukai_member_mail_send($c_member_id_to, $c_member_id_from);
672    do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
673}
674
675//イベント紹介
676function db_message_send_message_event_invite($c_member_id_from, $c_member_id_to, $subject, $body)
677{
678    //メッセージ
679    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
680    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
681    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
682
683    do_common_send_message_event_invite_mail_send($c_member_id_to, $c_member_id_from);
684    do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
685}
686
687//イベントメッセージ
688function db_message_send_message_event_message($c_member_id_from, $c_member_id_to, $subject, $body)
689{
690    //メッセージ
691    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
692    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
693    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
694
695    do_common_send_message_event_message_mail_send($c_member_id_to, $c_member_id_from);
696    do_common_send_message_mail_send_ktai($c_member_id_to, $c_member_id_from, $subject, $body);
697}
698
699function db_message_update_c_message($c_message_id, $subject, $body, $image_filename_1 = '', $image_filename_2 = '', $image_filename_3 = '', $filename = '')
700{
701    $data = array(
702        'subject' => $subject,
703        'body' => $body,
704    );
705    if ($image_filename_1) $data['image_filename_1'] = $image_filename_1;
706    if ($image_filename_2) $data['image_filename_2'] = $image_filename_2;
707    if ($image_filename_3) $data['image_filename_3'] = $image_filename_3;
708    if ($filename) $data['filename'] = $filename;
709
710    $where = array(
711        'c_message_id' => intval($c_message_id),
712    );
713    return db_update('c_message', $data, $where);
714}
715
716
717//メッセージの次のc_message_idを取得
718function db_message_get_c_message_next_id4c_message_id($c_member_id, $c_message_id, $box)
719{
720    if ($box == 'savebox' || $box == 'trash') {
721        return null;
722    } else if ($box == 'outbox'){   //送信箱
723        $where = " WHERE c_member_id_from = ? AND is_deleted_from = 0";
724    } else {                        //受信箱
725        $where = " WHERE c_member_id_to = ? AND is_deleted_to = 0";
726    }
727
728    $sql =  "SELECT c_message_id FROM c_message" .
729            $where.
730            " AND is_send = 1" .
731            " AND c_message_id > ?" .
732            " ORDER BY r_datetime";
733    $params = array(
734                intval($c_member_id),
735                intval($c_message_id)
736              );
737
738    return db_get_one($sql, $params);
739}
740
741//メッセージの前のc_message_idを取得
742function db_message_get_c_message_prev_id4c_message_id($c_member_id, $c_message_id, $box)
743{
744    if ($box == 'savebox' || $box == 'trash') {
745        return null;
746    } else if ($box == 'outbox'){   //送信箱
747        $where = " WHERE c_member_id_from = ? AND is_deleted_from = 0";
748    } else {                        //受信箱
749        $where = " WHERE c_member_id_to = ? AND is_deleted_to = 0";
750    }
751
752    $sql =  "SELECT c_message_id FROM c_message" .
753            $where.
754            " AND is_send = 1" .
755            " AND c_message_id < ?" .
756            " ORDER BY r_datetime DESC";
757    $params = array(
758                intval($c_member_id),
759                intval($c_message_id)
760              );
761
762    return db_get_one($sql, $params);
763}
764
765//メッセージを検索
766//検索対象:subject,body
767
768function db_message_search_c_message($c_member_id, $page, $page_size, $keyword, $box, $target_c_member_id = null)
769{
770    $params = array();
771    $params[] = intval($c_member_id);
772
773    if ($box == 'inbox' || !$box) {
774        $where = "c_member_id_to = ?".
775                 " AND is_deleted_to = 0" .
776                 " AND is_send = 1";
777        if ($target_c_member_id) {
778            $where .= " AND c_member_id_from = ?";
779            $params[] = intval($target_c_member_id);
780        }
781    } elseif ($box == 'outbox') {
782        $where = "c_member_id_from = ?".
783                 " AND is_deleted_from = 0" .
784                 " AND is_send = 1";
785        if ($target_c_member_id) {
786            $where .= " AND c_member_id_to = ?";
787            $params[] = intval($target_c_member_id);
788        }
789    }
790
791    $where .= " AND ( subject like ? OR body like ?)";
792
793    $params[] = '%'.strval($keyword).'%';
794    $params[] = '%'.strval($keyword).'%';
795
796    $sql = "SELECT * FROM c_message";
797    $sql .= " WHERE $where";
798    $sql .= " ORDER BY r_datetime DESC";
799
800    $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
801
802    foreach ($c_message_list as $key => $value) {
803        if ($box == 'inbox' || !$box) {
804            $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
805        } else {
806            $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
807        }
808        $c_message_list[$key]['nickname'] = $c_member['nickname'];
809        $c_message_list[$key]['image_filename'] = $c_member['image_filename'];
810    }
811
812    $sql = "SELECT COUNT(*) FROM c_message WHERE $where";
813    $total_num = db_get_one($sql, $params);
814
815    if ($total_num != 0) {
816        $total_page_num =  ceil($total_num / $page_size);
817        if ($page >= $total_page_num) {
818            $next = false;
819        } else {
820            $next = true;
821        }
822        if ($page <= 1) {
823            $prev = false;
824        } else {
825            $prev = true;
826        }
827    }
828    return array($c_message_list , $prev , $next, $total_num);
829
830}
831
832
833/**
834 * 受信メッセージの送信者リストを取得
835 */
836function db_message_c_message_sender_list4c_member_id($c_member_id)
837{
838    $where = "c_member_id_to = ?".
839            " AND is_deleted_to = 0" .
840            " AND is_send = 1";
841
842    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
843        $sql = "SELECT c_member_id_from" .
844                " FROM" .
845                    "(" .
846                        "SELECT distinct on(c_member_id_from) *" .
847                        " FROM" .
848                            " c_message" .
849                        " WHERE " . $where .
850                    ") as sub_member_tbl";
851    } else {
852        $sql = "SELECT distinct c_member_id_from FROM c_message";
853        $sql .= " WHERE $where";
854    }
855    $sql .= " ORDER BY r_datetime DESC";
856    $params = array(intval($c_member_id));
857    $c_message_list = db_get_all($sql, $params);
858
859    foreach ($c_message_list as $key => $value) {
860        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_from']);
861        $c_message_list[$key]['nickname'] = $c_member['nickname'];
862    }
863    return $c_message_list;
864}
865
866/**
867 * 受信メッセージの送信者リストを取得
868 */
869function db_message_c_message_receiver_list4c_member_id($c_member_id)
870{
871    $where = "c_member_id_from = ?".
872            " AND is_deleted_from = 0" .
873            " AND is_send = 1";
874
875    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
876        $sql = "SELECT c_member_id_to" .
877                " FROM" .
878                    "(" .
879                        "SELECT distinct on(c_member_id_to) *" .
880                        " FROM" .
881                            " c_message" .
882                        " WHERE " . $where .
883                    ") as sub_member_tbl";
884    } else {
885        $sql = "SELECT distinct c_member_id_to FROM c_message";
886        $sql .= " WHERE $where";
887    }
888
889    $sql .= " ORDER BY r_datetime DESC";
890
891    $params = array(intval($c_member_id));
892    $c_message_list = db_get_all($sql, $params);
893
894    foreach ($c_message_list as $key => $value) {
895        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
896        $c_message_list[$key]['nickname'] = $c_member['nickname'];
897    }
898    return $c_message_list;
899}
900
901
902/**
903 * メッセージページの「各月のメッセージ」用
904 *
905 * メッセージを最初に書いた月からスタートしてみる
906 */
907function db_message_month_list4c_member_id($c_member_id, $box)
908{
909    if ($box == 'inbox' || !$box) {
910        $where = "c_member_id_to = ?".
911                 " AND is_deleted_to = 0" .
912                 " AND is_send = 1";
913    } elseif ($box == 'outbox') {
914        $where = "c_member_id_from = ?".
915                 " AND is_deleted_from = 0" .
916                 " AND is_send = 1";
917    } else {
918        return null;
919    }
920
921    $sql = "SELECT r_datetime FROM c_message" .
922        " WHERE $where" .
923        " ORDER BY r_datetime";
924
925    $params = array(intval($c_member_id));
926    if (!$first_datetime = db_get_one($sql, $params)) {
927        return array();
928    }
929
930    $start_date = getdate(strtotime($first_datetime));
931    $end_date =  getdate();
932
933    $date = array();
934    $year = $start_date['year'];
935    $month = $start_date['mon'];
936    while (1) {
937        $date[] =  array(
938            'year' => $year,
939            'month' => $month,
940        );
941
942        if ($end_date['year'] <= $year
943            && $end_date['mon'] <= $month) {
944            break;
945        }
946
947        $month++;
948        if ($month > 12) {
949            $month = 1;
950            $year++;
951        }
952    }
953    return array_reverse($date);
954}
955
956
957
958/**
959 * 指定された年月にメッセージを送受信した日のリストを返す
960 */
961function db_message_is_message_list4date($u, $year, $month, $box)
962{
963    include_once 'Date/Calc.php';
964
965    if ($box == 'inbox' || !$box) {
966        $where = "c_member_id_to = ?".
967                 " AND is_deleted_to = 0" .
968                 " AND is_send = 1";
969    } elseif ($box == 'outbox') {
970        $where = "c_member_id_from = ?".
971                 " AND is_deleted_from = 0" .
972                 " AND is_send = 1";
973    } else {
974        return null;
975    }
976
977    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
978        $sql = "SELECT DISTINCT date_part('day', r_datetime) FROM c_message" .
979               " WHERE $where" .
980               ' AND is_send=1 AND r_datetime >= ? AND r_datetime < ?';
981    } else {
982        $sql = 'SELECT DISTINCT DAYOFMONTH(r_datetime) FROM c_message' .
983               " WHERE $where" .
984               ' AND is_send=1 AND r_datetime >= ? AND r_datetime < ?';
985    }
986
987    $date_format = '%Y-%m-%d 00:00:00';
988    $thismonth = Date_Calc::beginOfMonth($month, $year, $date_format);
989    $nextmonth = Date_Calc::beginOfNextMonth(0, $month, $year, $date_format);
990
991    $params = array(intval($u), $thismonth, $nextmonth);
992
993    return db_get_col($sql, $params);
994}
995
996?>
Note: See TracBrowser for help on using the repository browser.