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

source: OpenPNE/branches/2.8.x/webapp/lib/db/message.php @ 3057

Last change on this file since 3057 was 3057, checked in by ogawa, 14 years ago

#484:MySQLの設定でSQL ModesにSTRICT_TRANS_TABLESが指定されている環境下で動作しない

File size: 29.1 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 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);
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}
607
608// コミュニティ紹介
609function db_message_send_message_syoukai_commu($c_member_id_from, $c_member_id_to, $subject, $body)
610{
611    //メッセージ
612    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
613    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
614    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
615
616    do_common_send_message_syoukai_commu_mail_send($c_member_id_to, $c_member_id_from);
617}
618
619// メンバー紹介
620function db_message_send_message_syoukai_member($c_member_id_from, $c_member_id_to, $subject, $body)
621{
622    //メッセージ
623    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
624    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
625    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
626
627    do_common_send_message_syoukai_member_mail_send($c_member_id_to, $c_member_id_from);
628}
629
630//イベント紹介
631function db_message_send_message_event_invite($c_member_id_from, $c_member_id_to, $subject, $body)
632{
633    //メッセージ
634    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
635    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
636    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
637
638    do_common_send_message_event_invite_mail_send($c_member_id_to, $c_member_id_from);
639}
640
641//イベントメッセージ
642function db_message_send_message_event_message($c_member_id_from, $c_member_id_to, $subject, $body)
643{
644    //メッセージ
645    db_message_insert_c_message($c_member_id_from, $c_member_id_to, $subject, $body);
646    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (int)$c_member_id_to);
647    pne_cache_drop('db_message_count_c_message_not_is_read4c_member_to_id', (string)$c_member_id_to);
648
649    do_common_send_message_event_message_mail_send($c_member_id_to, $c_member_id_from);
650}
651
652function db_message_update_c_message($c_message_id, $subject, $body, $image_filename_1 = '', $image_filename_2 = '', $image_filename_3 = '')
653{
654    $data = array(
655        'subject' => $subject,
656        'body' => $body,
657    );
658    if ($image_filename_1) $data['image_filename_1'] = $image_filename_1;
659    if ($image_filename_2) $data['image_filename_2'] = $image_filename_2;
660    if ($image_filename_3) $data['image_filename_3'] = $image_filename_3;
661
662    $where = array(
663        'c_message_id' => intval($c_message_id),
664    );
665    return db_update('c_message', $data, $where);
666}
667
668
669//メッセージの次のc_message_idを取得
670function db_message_get_c_message_next_id4c_message_id($c_member_id, $c_message_id, $box)
671{
672    if ($box == 'savebox' || $box == 'trash') {
673        return null;
674    } else if ($box == 'outbox'){   //送信箱
675        $where = " WHERE c_member_id_from = ?";
676    } else {                        //受信箱
677        $where = " WHERE c_member_id_to = ?";
678    }
679
680    $sql =  "SELECT c_message_id FROM c_message" .
681            $where.
682            " AND is_deleted_to = 0" .
683            " AND is_send = 1" .
684            " AND c_message_id > ?" .
685            " ORDER BY r_datetime";
686    $params = array(
687                intval($c_member_id),
688                intval($c_message_id)
689              );
690
691    return db_get_one($sql, $params);
692}
693
694//メッセージの前のc_message_idを取得
695function db_message_get_c_message_prev_id4c_message_id($c_member_id, $c_message_id, $box)
696{
697    if ($box == 'savebox' || $box == 'trash') {
698        return null;
699    } else if ($box == 'outbox'){   //送信箱
700        $where = " WHERE c_member_id_from = ?";
701    } else {                        //受信箱
702        $where = " WHERE c_member_id_to = ?";
703    }
704
705    $sql =  "SELECT c_message_id FROM c_message" .
706            $where.
707            " AND is_deleted_to = 0" .
708            " AND is_send = 1" .
709            " AND c_message_id < ?" .
710            " ORDER BY r_datetime DESC";
711    $params = array(
712                intval($c_member_id),
713                intval($c_message_id)
714              );
715
716    return db_get_one($sql, $params);
717}
718
719//メッセージを検索
720//検索対象:subject,body
721
722function db_message_search_c_message($c_member_id, $page, $page_size, $keyword, $box, $target_c_member_id = null)
723{
724    $params = array();
725    $params[] = intval($c_member_id);
726
727    if ($box == 'inbox' || !$box) {
728        $where = "c_member_id_to = ?".
729                 " AND is_deleted_to = 0" .
730                 " AND is_send = 1";
731        if ($target_c_member_id) {
732            $where .= " AND c_member_id_from = ?";
733            $params[] = intval($target_c_member_id);
734        }
735    } elseif ($box == 'outbox') {
736        $where = "c_member_id_from = ?".
737                 " AND is_deleted_from = 0" .
738                 " AND is_send = 1";
739        if ($target_c_member_id) {
740            $where .= " AND c_member_id_to = ?";
741            $params[] = intval($target_c_member_id);
742        }
743    }
744
745    $where .= " AND ( subject like ? OR body like ?)";
746
747    $params[] = '%'.strval($keyword).'%';
748    $params[] = '%'.strval($keyword).'%';
749
750    $sql = "SELECT * FROM c_message";
751    $sql .= " WHERE $where";
752    $sql .= " ORDER BY r_datetime DESC";
753
754    $c_message_list = db_get_all_page($sql, $page, $page_size, $params);
755
756    foreach ($c_message_list as $key => $value) {
757        if ($box == 'inbox' || !$box) {
758            $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_from']);
759        } else {
760            $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_to']);
761        }
762        $c_message_list[$key]['nickname'] = $c_member['nickname'];
763        $c_message_list[$key]['image_filename'] = $c_member['image_filename'];
764    }
765
766    $sql = "SELECT COUNT(*) FROM c_message WHERE $where";
767    $total_num = db_get_one($sql, $params);
768
769    if ($total_num != 0) {
770        $total_page_num =  ceil($total_num / $page_size);
771        if ($page >= $total_page_num) {
772            $next = false;
773        } else {
774            $next = true;
775        }
776        if ($page <= 1) {
777            $prev = false;
778        } else {
779            $prev = true;
780        }
781    }
782    return array($c_message_list , $prev , $next, $total_num);
783
784}
785
786
787/**
788 * 受信メッセージの送信者リストを取得
789 */
790function db_message_c_message_sender_list4c_member_id($c_member_id)
791{
792    $sql = "SELECT distinct c_member_id_from FROM c_message";
793    $where = "c_member_id_to = ?".
794            " AND is_deleted_to = 0" .
795            " AND is_send = 1";
796    $sql .= " WHERE $where";
797    $sql .= " ORDER BY r_datetime DESC";
798    $params = array(intval($c_member_id));
799    $c_message_list = db_get_all($sql, $params);
800
801    foreach ($c_message_list as $key => $value) {
802        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_from']);
803        $c_message_list[$key]['nickname'] = $c_member['nickname'];
804    }
805    return $c_message_list;
806}
807
808/**
809 * 受信メッセージの送信者リストを取得
810 */
811function db_message_c_message_receiver_list4c_member_id($c_member_id)
812{
813    $sql = "SELECT distinct c_member_id_to FROM c_message";
814    $where = "c_member_id_from = ?".
815            " AND is_deleted_from = 0" .
816            " AND is_send = 1";
817    $sql .= " WHERE $where";
818    $sql .= " ORDER BY r_datetime DESC";
819    $params = array(intval($c_member_id));
820    $c_message_list = db_get_all($sql, $params);
821
822    foreach ($c_message_list as $key => $value) {
823        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_to']);
824        $c_message_list[$key]['nickname'] = $c_member['nickname'];
825    }
826    return $c_message_list;
827}
828
829
830/**
831 * メッセージページの「各月のメッセージ」用
832 *
833 * メッセージを最初に書いた月からスタートしてみる
834 */
835function db_message_month_list4c_member_id($c_member_id, $box)
836{
837    if ($box == 'inbox' || !$box) {
838        $where = "c_member_id_to = ?".
839                 " AND is_deleted_to = 0" .
840                 " AND is_send = 1";
841    } elseif ($box == 'outbox') {
842        $where = "c_member_id_from = ?".
843                 " AND is_deleted_from = 0" .
844                 " AND is_send = 1";
845    } else {
846        return null;
847    }
848
849    $sql = "SELECT r_datetime FROM c_message" .
850        " WHERE $where" .
851        " ORDER BY r_datetime";
852
853    $params = array(intval($c_member_id));
854    if (!$first_datetime = db_get_one($sql, $params)) {
855        return array();
856    }
857
858    $start_date = getdate(strtotime($first_datetime));
859    $end_date =  getdate();
860
861    $date = array();
862    $year = $start_date['year'];
863    $month = $start_date['mon'];
864    while (1) {
865        $date[] =  array(
866            'year' => $year,
867            'month' => $month,
868        );
869
870        if ($end_date['year'] <= $year
871            && $end_date['mon'] <= $month) {
872            break;
873        }
874
875        $month++;
876        if ($month > 12) {
877            $month = 1;
878            $year++;
879        }
880    }
881    return array_reverse($date);
882}
883
884
885
886/**
887 * 指定された年月にメッセージを送受信した日のリストを返す
888 */
889function db_message_is_message_list4date($u, $year, $month, $box)
890{
891    include_once 'Date/Calc.php';
892
893    if ($box == 'inbox' || !$box) {
894        $where = "c_member_id_to = ?".
895                 " AND is_deleted_to = 0" .
896                 " AND is_send = 1";
897    } elseif ($box == 'outbox') {
898        $where = "c_member_id_from = ?".
899                 " AND is_deleted_from = 0" .
900                 " AND is_send = 1";
901    } else {
902        return null;
903    }
904
905    $sql = 'SELECT DISTINCT DAYOFMONTH(r_datetime) FROM c_message' .
906           " WHERE $where" .
907           ' AND is_send=1 AND r_datetime >= ? AND r_datetime < ?';
908
909    $date_format = '%Y-%m-%d 00:00:00';
910    $thismonth = Date_Calc::beginOfMonth($month, $year, $date_format);
911    $nextmonth = Date_Calc::beginOfNextMonth(0, $month, $year, $date_format);
912
913    $params = array(intval($u), $thismonth, $nextmonth);
914
915    return db_get_col($sql, $params);
916}
917
918?>
Note: See TracBrowser for help on using the repository browser.