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

source: OpenPNE/trunk/webapp/lib/db/commu.php @ 6640

Last change on this file since 6640 was 6640, checked in by ebihara, 15 years ago

#2090:PostgreSQLに対応した

File size: 100.9 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//// c_commu
8
9/**
10 * コミュニティ情報をIDから取得
11 *
12 * @param  int $c_commu_id
13 * @return array コミュニティ情報
14 */
15function db_commu_c_commu4c_commu_id($c_commu_id)
16{
17    $sql = 'SELECT * FROM c_commu WHERE c_commu_id = ?';
18    $params = array(intval($c_commu_id));
19    if (!$c_commu = db_get_row($sql, $params)) return array();
20
21    $c_commu['c_commu_category'] =
22        db_commu_get_c_commu_category4id($c_commu['c_commu_category_id']);
23    $c_commu['c_member_admin'] =
24        db_member_c_member4c_member_id($c_commu['c_member_id_admin']);
25
26    return $c_commu;
27}
28
29/**
30 * コミュニティ情報を得る
31 */
32function db_commu_c_commu4c_commu_id2($c_commu_id)
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_LONG, __FUNCTION__, $funcargs);
40    }
41
42    $is_recurred = false;
43
44    if ($c_commu = db_commu_c_commu4c_commu_id($c_commu_id)) {
45        $c_commu['member_count'] = db_commu_count_c_commu_member_list4c_commu_id($c_commu_id);
46    }
47    return $c_commu;
48}
49
50/**
51 * コミュニティ情報をIDから返す
52 */
53function db_commu_c_commu4c_commu_id_k($c_commu_id)
54{
55    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
56
57    if (!$is_recurred) {  //function cacheのために再帰処理を行う
58        $is_recurred = true;
59        $funcargs = func_get_args();
60        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
61    }
62
63    $is_recurred = false;
64
65    if ($c_commu = db_commu_c_commu4c_commu_id($c_commu_id)) {
66        $c_commu['count_member'] = db_commu_count_c_commu_member_list4c_commu_id($c_commu_id);
67    }
68    return $c_commu;
69}
70
71function db_commu_is_commu4c_commu_name($c_commu_name)
72{
73    $sql = 'SELECT c_commu_id FROM c_commu WHERE name = ?';
74    $params = array($c_commu_name);
75    return (bool)db_get_one($sql, $params);
76}
77
78/**
79 * 登録時に強制参加させるコミュニティIDのリスト
80 */
81function db_commu_regist_join_list()
82{
83    $sql = 'SELECT c_commu_id FROM c_commu WHERE is_regist_join = 1';
84    return db_get_col($sql);
85}
86
87//// c_commu_member
88
89/**
90 * コミュニティの参加メンバー数を取得
91 *
92 * @param   int $c_commu_id
93 * @return  int 参加メンバー数
94 */
95function db_commu_count_c_commu_member_list4c_commu_id($c_commu_id)
96{
97    $sql = 'SELECT COUNT(*) FROM c_commu_member WHERE c_commu_id = ?';
98    $params = array(intval($c_commu_id));
99    return db_get_one($sql, $params);
100}
101
102/**
103 * メンバーの参加コミュニティ数を取得
104 *
105 * @param int $c_member_id
106 * @return int 参加コミュニティ数
107 */
108function db_commu_count_c_commu4c_member_id($c_member_id)
109{
110    $sql = 'SELECT COUNT(*) FROM c_commu_member WHERE c_member_id = ?';
111    $params = array(intval($c_member_id));
112    return db_get_one($sql, $params);
113}
114
115//// c_commu_topic
116
117//// c_commu_topic_comment
118
119/**
120 * max
121 */
122function db_commu_get_max_number4topic($c_commu_topic_id)
123{
124    $sql = 'SELECT MAX(number) FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
125    $params = array(intval($c_commu_topic_id));
126    return db_get_one($sql, $params);
127}
128
129/**
130 * 次の書き込み番号取得
131 *
132 * @param  int $c_commu_topic_id
133 * @return int 次の書き込み番号
134 */
135function db_commu_c_commu_topic_comment_number4c_commu_topic_id($c_commu_topic_id)
136{
137    return db_commu_get_max_number4topic($c_commu_topic_id) + 1;
138}
139
140//// 判定
141
142/**
143 * コミュニティのメンバーかどうか判定
144 *
145 * @param  int c_commu_id
146 * @param  int c_member_id
147 * @return bool
148 */
149function db_commu_is_c_commu_member($c_commu_id, $c_member_id)
150{
151    $sql = 'SELECT c_commu_member_id FROM c_commu_member' .
152            ' WHERE c_commu_id = ? AND c_member_id = ?';
153    $params = array(intval($c_commu_id), intval($c_member_id));
154    return (bool)db_get_one($sql, $params);
155}
156
157/**
158 * コミュニティの管理者かどうかを判定
159 *
160 * @param  int $c_commu_id
161 * @param  int $c_member_id
162 * @return bool
163 */
164function db_commu_is_c_commu_admin($c_commu_id, $c_member_id)
165{
166    $sql = 'SELECT c_commu_id FROM c_commu' .
167            ' WHERE c_commu_id = ? AND c_member_id_admin = ?';
168    $params = array(intval($c_commu_id), intval($c_member_id));
169    return ( (bool)db_get_one($sql, $params) || db_commu_is_c_commu_sub_admin($c_commu_id, $c_member_id) );
170}
171
172/**
173 * コミュニティの副管理者かどうかを判定
174 *
175 * @param  int $c_commu_id
176 * @param  int $c_member_id
177 * @return bool
178 */
179function db_commu_is_c_commu_sub_admin($c_commu_id, $c_member_id)
180{
181    $sql = 'SELECT c_commu_id FROM c_commu' .
182            ' WHERE c_commu_id = ? AND c_member_id_sub_admin = ?';
183    $params = array(intval($c_commu_id), intval($c_member_id));
184    return (bool)db_get_one($sql, $params);
185}
186
187function db_commu_is_c_topic_admin($c_commu_topic_id, $c_member_id)
188{
189    $sql = 'SELECT c_commu_topic_id FROM c_commu_topic' .
190            ' WHERE c_commu_topic_id = ? AND c_member_id = ?';
191    $params = array(intval($c_commu_topic_id), intval($c_member_id));
192    return (bool)db_get_one($sql, $params);
193}
194
195/**
196 * コミュニティ参加承認待ち状態かどうか
197 */
198function db_commu_is_c_commu_join_wait($c_commu_id, $c_member_id)
199{
200    $sql = 'SELECT c_commu_member_confirm_id FROM c_commu_member_confirm' .
201            ' WHERE c_commu_id = ? AND c_member_id = ?';
202    $params = array(intval($c_commu_id), intval($c_member_id));
203    return (bool)db_get_one($sql, $params);
204}
205
206function db_commu_is_c_commu_view4c_commu_idAc_member_id($c_commu_id,$c_member_id)
207{
208    $ret = false;
209    $c_commu = db_commu_c_commu4c_commu_id($c_commu_id);
210
211    $is_c_commu_member = db_commu_is_c_commu_member($c_commu_id, $c_member_id);
212
213    switch($c_commu['public_flag']) {
214    case "public":
215        $ret = true;
216        break;
217    case "auth_public":
218        $ret = true;
219        break;
220    case "auth_sns":
221        $ret = true;
222        break;
223    case "auth_commu_member":
224        if ($is_c_commu_member) {
225            $ret = true;
226        } else {
227            $ret = false;
228        }
229        break;
230    }
231    return $ret;
232}
233
234////
235
236/**
237 * コミュニティメール(ktai)受信設定を取得
238 */
239function db_commu_is_receive_mail_ktai($c_commu_id, $c_member_id)
240{
241    $sql = 'SELECT is_receive_mail FROM c_commu_member' .
242            ' WHERE c_commu_id = ? AND c_member_id = ?';
243    $params = array(intval($c_commu_id), intval($c_member_id));
244    return db_get_one($sql, $params);
245}
246
247/**
248 * コミュニティメール(PC)受信設定を取得
249 */
250function db_commu_is_receive_mail_pc($c_commu_id, $c_member_id)
251{
252    $sql = 'SELECT is_receive_mail_pc FROM c_commu_member' .
253            ' WHERE c_commu_id = ? AND c_member_id = ?';
254    $params = array(intval($c_commu_id), intval($c_member_id));
255    return db_get_one($sql, $params);
256}
257
258/**
259 * コミュニティメッセージ受信設定を取得
260 */
261function db_commu_is_receive_message($c_commu_id, $c_member_id)
262{
263    $sql = 'SELECT is_receive_message FROM c_commu_member' .
264            ' WHERE c_commu_id = ? AND c_member_id = ?';
265    $params = array(intval($c_commu_id), intval($c_member_id));
266    return db_get_one($sql, $params);
267}
268
269/**
270 * コミュニティメールの受信メールアドレスリスト(携帯)
271 */
272function db_common_receive_ktai_address_list4c_commu_id($c_commu_id)
273{
274    $sql = 'SELECT c_member_id FROM c_commu_member' .
275            ' WHERE c_commu_id = ? AND is_receive_mail = 1';
276    $params = array(intval($c_commu_id));
277    $list = db_get_col($sql, $params);
278
279    $ktai_list = array();
280    foreach ($list as $c_member_id) {
281        $sec = db_member_c_member_secure4c_member_id($c_member_id);
282        if ($sec['ktai_address']) {
283            $ktai_list[$c_member_id] = $sec['ktai_address'];
284        }
285    }
286    return $ktai_list;
287}
288
289/**
290 * コミュニティメールの受信メールアドレスリスト(PC)
291 */
292function db_common_receive_pc_address_list4c_commu_id($c_commu_id)
293{
294    $sql = "SELECT m.pc_address" .
295            " FROM c_member_secure AS m, c_commu_member AS cm" .
296            " WHERE cm.c_commu_id = ?".
297            " AND cm.is_receive_mail_pc = 1" .
298            " AND cm.c_member_id = m.c_member_id" .
299            " AND m.pc_address <> ''";
300    $params = array(intval($c_commu_id));
301    $c_member_list = db_get_col($sql, $params);
302
303    return array_map('t_decrypt', $c_member_list);
304}
305
306////
307
308/**
309 * 管理者交代の要請情報をIDから取得
310 *
311 * @param  int $c_commu_admin_confirm_id
312 * @return array
313 *              c_commu_admin_confirm,
314 *              c_member_id_admin       : 管理者のメンバーID
315 */
316function db_c_commu_admin_confirm4c_commu_admin_confirm_id($c_commu_admin_confirm_id)
317{
318    $sql = "SELECT cac.*, c.c_member_id_admin FROM c_commu_admin_confirm AS cac, c_commu AS c";
319    $sql .= " WHERE cac.c_commu_admin_confirm_id = ?";
320    $sql .= " AND cac.c_commu_id=c.c_commu_id";
321    $params = array(intval($c_commu_admin_confirm_id));
322    return db_get_row($sql, $params);
323}
324
325/**
326 * 副管理者の要請情報をIDから取得
327 *
328 * @param  int $c_commu_sub_admin_confirm_id
329 * @return array
330 *              c_commu_sub_admin_confirm,
331 *              c_member_id_admin       : 管理者のメンバーID
332 */
333function db_c_commu_sub_admin_confirm4c_commu_sub_admin_confirm_id($c_commu_sub_admin_confirm_id)
334{
335    $sql = "SELECT cac.*, c.c_member_id_admin FROM c_commu_sub_admin_confirm AS cac, c_commu AS c";
336    $sql .= " WHERE cac.c_commu_sub_admin_confirm_id = ?";
337    $sql .= " AND cac.c_commu_id=c.c_commu_id";
338    $params = array(intval($c_commu_sub_admin_confirm_id));
339    return db_get_row($sql, $params);
340}
341
342// 参加コミュニティリスト
343function db_commu_c_commu_list4c_member_id($c_member_id, $page, $page_size)
344{
345    $sql = "SELECT c_commu.*" .
346            " FROM c_commu_member , c_commu";
347    $sql .= " WHERE c_commu_member.c_member_id=?";
348    $sql .= " AND c_commu.c_commu_id=c_commu_member.c_commu_id";
349    $sql .= " ORDER BY c_commu.c_commu_id DESC ";
350    $params = array(intval($c_member_id));
351    $c_commu_list = db_get_all_page($sql, $page, $page_size, $params);
352
353    foreach ($c_commu_list as $key => $value) {
354        $c_commu_list[$key]['count_members'] =
355            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
356    }
357
358    $pager = array(
359        "total_num" => db_commu_count_c_commu4c_member_id($c_member_id),
360        "disp_num"  => count($c_commu_list),
361        "start_num" => 0,
362        "end_num"   => 0,
363        "total_page" => 0,
364        "prev_page" => 0,
365        "next_page" => 0,
366    );
367
368    if ($pager['disp_num'] > 0) {
369        $pager['start_num'] = ($page - 1) * $page_size + 1;
370        $pager['end_num'] = $pager['start_num'] + $pager['disp_num'] - 1;
371    }
372
373    if ($pager['total_num']) {
374        $pager['total_page'] = ceil($pager['total_num'] / $page_size);
375
376        if ($page < $pager['total_page']) {
377            $pager['next_page'] = max($page + 1, 1);
378        }
379        if ($page > 1) {
380            $pager['prev_page'] = min($page - 1, $pager['total_page']);
381        }
382    }
383
384    return array($c_commu_list, $pager);
385}
386
387/**
388 * コミュニティトピックからコミュニティIDを取得
389 */
390function db_commu_c_commu_id4c_commu_topic_id($c_commu_topic_id)
391{
392    $sql = "SELECT c_commu_id FROM c_commu_topic WHERE c_commu_topic_id = ?";
393    $params = array(intval($c_commu_topic_id));
394    return db_get_one($sql, $params);
395}
396
397// $c_commu_id の community に参加しているメンバーを返す
398function db_commu_c_member_list4c_commu_id($c_commu_id, $page_size, $page)
399{
400    $c_commu = db_commu_c_commu4c_commu_id($c_commu_id);
401
402    $sql =  "SELECT c_member.c_member_id,".
403                "nickname,".
404                "image_filename ," .
405                "c_commu_member.r_datetime".
406            " FROM c_member,".
407                "c_commu_member".
408            " WHERE c_commu_id = ?".
409            " AND c_commu_member.c_member_id = c_member.c_member_id".
410            " ORDER BY c_commu_member.r_datetime DESC";
411    $params = array(intval($c_commu_id));
412    $list = db_get_all_page($sql, $page, $page_size, $params);
413
414    $new_list = array();
415    foreach ($list as $key => $value) {
416        $new_list[] = $value;
417    }
418    $list = $new_list;
419
420    $sql = 'SELECT * FROM c_commu_admin_confirm WHERE c_commu_id = ?';
421    $params = array(intval($c_commu_id));
422    $c_commu_admin_confirm = db_get_row($sql, $params);
423
424    $sql = 'SELECT * FROM c_commu_sub_admin_confirm WHERE c_commu_id = ?';
425    $c_commu_sub_admin_confirm = db_get_row($sql, $params);
426
427    if ($c_commu_admin_confirm) {
428        foreach ($list as $key => $c_member) {
429            if ($list[$key]['c_member_id'] == $c_commu_admin_confirm['c_member_id_to']) {
430                $list[$key]['c_commu_admin_confirm_id'] = $c_commu_admin_confirm['c_commu_admin_confirm_id'];
431            } else {
432                $list[$key]['c_commu_admin_confirm_id'] = 0;
433            }
434        }
435    } else {
436        foreach ($list as $key => $c_member) {
437            $list[$key]['c_commu_admin_confirm_id'] = -1;
438        }
439    }
440
441    if ($c_commu_sub_admin_confirm) {
442        foreach ($list as $key => $c_member) {
443            if ($list[$key]['c_member_id'] == $c_commu_sub_admin_confirm['c_member_id_to']) {
444                $list[$key]['c_commu_sub_admin_confirm_id'] = $c_commu_sub_admin_confirm['c_commu_sub_admin_confirm_id'];
445            } else {
446                $list[$key]['c_commu_sub_admin_confirm_id'] = 0;
447            }
448        }
449    } else {
450        foreach ($list as $key => $c_member) {
451            $list[$key]['c_commu_sub_admin_confirm_id'] = -1;
452        }
453    }
454
455    foreach ($list as $key => $c_member) {
456        $list[$key]['is_c_commu_admin'] = db_commu_is_c_commu_admin($c_commu_id, $list[$key]['c_member_id']);
457        $list[$key]['is_c_commu_sub_admin'] = db_commu_is_c_commu_sub_admin($c_commu_id, $list[$key]['c_member_id']);
458    }
459
460    $total_num = db_commu_count_c_commu_member_list4c_commu_id($c_commu_id);
461    if ($total_num != 0) {
462        $total_page_num = ceil($total_num / $page_size);
463        if ($page >= $total_page_num) {
464            $next = false;
465        } else {
466            $next = true;
467        }
468
469        if ($page <= 1) {
470            $prev = false;
471        } else {
472            $prev = true;
473        }
474    }
475
476    return array($list, $prev, $next, $total_num);
477}
478
479/**
480 * コミュニティメンバーのリストを得る
481 */
482function db_commu_c_commu_member_list4c_commu_id($c_commu_id ,$limit = 9)
483{
484    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
485
486    if (!$is_recurred) {  //function cacheのために再帰処理を行う
487        $is_recurred = true;
488        $funcargs = func_get_args();
489        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
490    }
491
492    $is_recurred = false;
493    $sql = 'SELECT c_member.* FROM c_member, c_commu_member' .
494            ' WHERE c_member.c_member_id = c_commu_member.c_member_id' .
495            ' AND c_commu_id = ?' . db_order_by_rand();
496    $params = array(intval($c_commu_id));
497    $lst = db_get_all_limit($sql, 0, $limit, $params);
498
499    foreach ($lst as $key => $value) {
500        $lst[$key]['friend_count'] = db_friend_count_friends($value['c_member_id']);
501    }
502    return $lst;
503}
504
505function db_commu_new_topic_comment4c_commu_id($c_commu_id, $limit, $event_flag = 0)
506{
507    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
508
509    if (!$is_recurred) {  //function cacheのために再帰処理を行う
510        $is_recurred = true;
511        $funcargs = func_get_args();
512        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
513    }
514
515    $is_recurred = false;
516
517    $sql = "SELECT c_commu_topic_id , name, u_datetime as r_datetime , c_commu_id " .
518            " FROM c_commu_topic" .
519            " WHERE event_flag = ? AND c_commu_id = ?".
520            " ORDER BY r_datetime DESC";
521    $params = array((bool)$event_flag, intval($c_commu_id));
522    $list = db_get_all_limit($sql, 0, $limit, $params);
523
524    foreach ($list as $key => $value) {
525        $list[$key]['count_comments'] = db_commu_get_max_number4topic($value['c_commu_topic_id']);
526        $last_comment = db_commu_get_last_c_topic_comment($value['c_commu_topic_id']);
527        $list[$key]['image_filename1'] = $last_comment['image_filename1'];
528        $list[$key]['image_filename2'] = $last_comment['image_filename2'];
529        $list[$key]['image_filename3'] = $last_comment['image_filename3'];
530    }
531    return $list;
532}
533
534/**
535 * コミュニティに招待するMyフレンドのリストを得る
536 * コミュニティに参加していないMyフレンドを全員表示
537 *
538 * @param   int $c_member_id
539 * @param   int $c_commu_id
540 */
541function db_commu_invite_list4c_member_id4c_commu_id($c_member_id, $c_commu_id)
542{
543    //友達リスト
544    $friend_list = db_friend_c_member_id_list($c_member_id);
545
546    //参加者リスト
547    $sql = 'SELECT c_member_id FROM c_commu_member WHERE c_commu_id = ?';
548    $params = array(intval($c_commu_id));
549    $member_list = db_get_col($sql, $params);
550
551    //友達リストから参加者リストを引く
552    $result = array_diff($friend_list, $member_list);
553
554    if (empty($result)) {
555        return array();
556    } else {
557        $result = implode(",", $result);
558
559        $sql = 'SELECT c_member_id, nickname '
560            . ' FROM c_member'
561            . ' WHERE c_member_id'
562            . ' IN ( '. $result. ') ';
563
564        return db_get_all($sql);
565    }
566}
567
568function db_commu_c_members4c_commu_id($c_commu_id, $page_size, $page)
569{
570    $sql = 'SELECT c_member_id FROM c_commu_member WHERE c_commu_id = ? ORDER BY r_datetime DESC';
571    $params = array(intval($c_commu_id));
572    $id_list = db_get_all_page($sql, $page, $page_size, $params);
573
574    $list = array();
575    foreach ($id_list as $key => $value) {
576        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
577        $c_member['friend_count'] = db_friend_count_friends($value['c_member_id']);
578        $list[] = $c_member;
579    }
580
581    $sql = 'SELECT COUNT(*) FROM c_commu_member WHERE c_commu_id = ?';
582    $total_num = db_get_one($sql, $params);
583
584    if ($total_num != 0) {
585        $total_page_num = ceil($total_num / $page_size);
586        if ($page >= $total_page_num) {
587            $next = false;
588        } else {
589            $next = true;
590        }
591
592        if ($page <= 1) {
593            $prev = false;
594        } else {
595            $prev = true;
596        }
597    }
598
599    $start_num = ($page - 1) * $page_size + 1 ;
600    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
601
602    return array($list , $prev , $next, $total_num, $start_num, $end_num);
603}
604
605function db_commu_c_commu_list4c_member_id_2($c_member_id, $limit = 9)
606{
607    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
608
609    if (!$is_recurred) {  //function cacheのために再帰処理を行う
610        $is_recurred = true;
611        $funcargs = func_get_args();
612        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
613    }
614
615    $is_recurred = false;
616
617    $sql = "SELECT c_commu.c_commu_id, c_commu.image_filename, c_commu.name, c_commu.c_member_id_admin" .
618        " FROM c_commu ,c_commu_member " .
619        " WHERE c_commu_member.c_member_id = ?".
620        " AND c_commu.c_commu_id =  c_commu_member.c_commu_id" .
621        db_order_by_rand();
622    $params = array(intval($c_member_id));
623    $lst = db_get_all_limit($sql, 0, $limit, $params);
624
625    foreach ($lst as $key => $value) {
626        $lst[$key]['count_commu_members'] = db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
627    }
628    return $lst;
629}
630
631/**
632 * あなたに(の)管理コミュニティに参加を希望しているメンバー
633 *
634 * @param   int $c_member_id    : 要請されている方(あなた=管理者)
635 * @return  array_of_array
636 *              c_commu_member_confirm.*
637 *              c_commu_name    : コミュニティの名前
638 *              nickname        : 要請している人の名前
639 *              image_filename  : 要請している人の画像
640 * @see     h_confirm_list.php
641 */
642function db_commu_anatani_c_commu_member_confirm_list4c_member_id($c_member_id)
643{
644    $sql = "SELECT cmc.*, c.name AS c_commu_name";
645    $sql .= " FROM c_commu_member_confirm AS cmc, c_commu AS c";
646    $sql .= " WHERE (c.c_member_id_admin = ? OR c.c_member_id_sub_admin = ?) AND cmc.c_commu_id=c.c_commu_id";
647    $params = array(intval($c_member_id), intval($c_member_id));
648    $c_commu_member_confirm_list = db_get_all($sql, $params);
649
650    foreach ($c_commu_member_confirm_list as $key => $value) {
651        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
652        $c_commu_member_confirm_list[$key]['nickname'] = $c_member['nickname'];
653        $c_commu_member_confirm_list[$key]['image_filename'] = $c_member['image_filename'];
654    }
655    return $c_commu_member_confirm_list;
656}
657/**
658 * あなたがコミュニティ参加要請しているコミュニティ
659 *
660 * @param   int $c_member_id    : 要請している方(あなた)
661 * @return  array_of_array
662 *              c_commu_member_confirm.*,
663 *              c_commu_name        : コミュニティの名前
664 *              c_member_id_admin   : 管理者のメンバーID
665 *              nickname            : 管理者の名前
666 *              image_filename      : 管理者の画像
667 * @see     h_confirm_list.php
668 */
669function db_commu_anataga_c_commu_member_confirm_list4c_member_id($c_member_id)
670{
671    $sql = "SELECT cmc.*, c.name AS c_commu_name, c.c_member_id_admin";
672    $sql .= " FROM c_commu_member_confirm AS cmc, c_commu AS c";
673    $sql .= " WHERE cmc.c_member_id = ? AND cmc.c_commu_id=c.c_commu_id";
674    $params = array(intval($c_member_id));
675    $c_commu_member_confirm_list = db_get_all($sql, $params);
676
677    foreach ($c_commu_member_confirm_list as $key => $value) {
678        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_admin']);
679        $c_commu_member_confirm_list[$key]['nickname'] = $c_member['nickname'];
680        $c_commu_member_confirm_list[$key]['image_filename'] = $c_member['image_filename'];
681    }
682    return $c_commu_member_confirm_list;
683}
684
685/**
686 * あなたにコミュニティ管理者交代を希望しているメンバー
687 *
688 * @param   int $c_member_id_to : 要請されている方(あなた)
689 * @return  array_of_array
690 *              c_commu_admin_confirm.*
691 *              c_commu_name        : コミュニティ名
692 *              c_member_id_admin   : 要請している人(=現管理者)のID
693 *              nickname            : 要請している人の名前
694 *              image_filename      : 要請している人の画像
695 * @see     h_confirm_list.php
696 */
697function db_commu_anatani_c_commu_admin_confirm_list4c_member_id($c_member_id_to)
698{
699    $sql = "SELECT cac.*, c.name AS c_commu_name, c.c_member_id_admin";
700    $sql .= " FROM c_commu_admin_confirm AS cac, c_commu AS c";
701    $sql .= " WHERE cac.c_member_id_to = ? AND cac.c_commu_id=c.c_commu_id";
702    $params = array(intval($c_member_id_to));
703    $c_commu_admin_confirm_list = db_get_all($sql, $params);
704
705    foreach ($c_commu_admin_confirm_list as $key => $value) {
706        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_admin']);
707        $c_commu_admin_confirm_list[$key]['nickname'] = $c_member['nickname'];
708        $c_commu_admin_confirm_list[$key]['image_filename'] = $c_member['image_filename'];
709    }
710    return $c_commu_admin_confirm_list;
711}
712
713/**
714 * あなたがコミュニティ管理者交代を要請しているメンバー
715 *
716 * @param   int $c_member_id_admin  : 要請している方(あなた)
717 * @return  array_of_array
718 *              c_commu_admin_confirm.*
719 *              nickname            : 要請されている人の名前
720 *              image_filename      : 要請されている人の画像
721 * @see     h_confirm_list.php
722 */
723function db_commu_anataga_c_commu_admin_confirm_list4c_member_id($c_member_id_admin)
724{
725    $sql = "SELECT cac.*, c.name AS c_commu_name, c.c_member_id_admin";
726    $sql .= " FROM c_commu_admin_confirm AS cac, c_commu AS c";
727    $sql .= " WHERE c.c_member_id_admin = ? AND cac.c_commu_id=c.c_commu_id";
728    $params = array(intval($c_member_id_admin));
729    $c_commu_admin_confirm_list = db_get_all($sql, $params);
730
731    foreach ($c_commu_admin_confirm_list as $key => $value) {
732        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
733        $c_commu_admin_confirm_list[$key]['nickname'] = $c_member['nickname'];
734        $c_commu_admin_confirm_list[$key]['image_filename'] = $c_member['image_filename'];
735    }
736    return $c_commu_admin_confirm_list;
737}
738
739
740/**
741 * あなたにコミュニティ副管理者を希望しているメンバー
742 *
743 * @param   int $c_member_id_to : 要請されている方(あなた)
744 * @return  array_of_array
745 *              c_commu_sub_admin_confirm.*
746 *              c_commu_name        : コミュニティ名
747 *              c_member_id_sub_admin   : 要請している人(=現管理者)のID
748 *              nickname            : 要請している人の名前
749 *              image_filename      : 要請している人の画像
750 * @see     h_confirm_list.php
751 */
752function db_commu_anatani_c_commu_sub_admin_confirm_list4c_member_id($c_member_id_to)
753{
754    $sql = "SELECT cac.*, c.name AS c_commu_name, c.c_member_id_admin";
755    $sql .= " FROM c_commu_sub_admin_confirm AS cac, c_commu AS c";
756    $sql .= " WHERE cac.c_member_id_to = ? AND cac.c_commu_id=c.c_commu_id";
757    $params = array(intval($c_member_id_to));
758    $c_commu_sub_admin_confirm_list = db_get_all($sql, $params);
759
760    foreach ($c_commu_sub_admin_confirm_list as $key => $value) {
761        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_admin']);
762        $c_commu_sub_admin_confirm_list[$key]['nickname'] = $c_member['nickname'];
763        $c_commu_sub_admin_confirm_list[$key]['image_filename'] = $c_member['image_filename'];
764    }
765    return $c_commu_sub_admin_confirm_list;
766}
767
768/**
769 * あなたがコミュニティ副管理者を要請しているメンバー
770 *
771 * @param   int $c_member_id_admin  : 要請している方(あなた)
772 * @return  array_of_array
773 *              c_commu_sub_admin_confirm.*
774 *              nickname            : 要請されている人の名前
775 *              image_filename      : 要請されている人の画像
776 * @see     h_confirm_list.php
777 */
778function db_commu_anataga_c_commu_sub_admin_confirm_list4c_member_id($c_member_id_admin)
779{
780    $sql = "SELECT cac.*, c.name AS c_commu_name, c.c_member_id_admin";
781    $sql .= " FROM c_commu_sub_admin_confirm AS cac, c_commu AS c";
782    $sql .= " WHERE c.c_member_id_admin = ? AND cac.c_commu_id=c.c_commu_id";
783    $params = array(intval($c_member_id_admin));
784    $c_commu_sub_admin_confirm_list = db_get_all($sql, $params);
785
786    foreach ($c_commu_sub_admin_confirm_list as $key => $value) {
787        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_to']);
788        $c_commu_sub_admin_confirm_list[$key]['nickname'] = $c_member['nickname'];
789        $c_commu_sub_admin_confirm_list[$key]['image_filename'] = $c_member['image_filename'];
790    }
791    return $c_commu_sub_admin_confirm_list;
792}
793
794/**
795 * 参加コミュニティ新着書き込みリスト取得
796 */
797function db_commu_c_commu_topic_comment_list4c_member_id($c_member_id, $limit)
798{
799    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
800
801    if (!$is_recurred) {  //function cacheのために再帰処理を行う
802        $is_recurred = true;
803        $funcargs = func_get_args();
804        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
805    }
806
807    $is_recurred = false;
808
809    $sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
810    $c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
811    if (!$c_commu_id_list) {
812        return array();
813    }
814    $ids = implode(", ", $c_commu_id_list);
815
816    $hint = db_mysql_hint('USE INDEX (r_datetime_c_commu_id)');
817    $sql = 'SELECT a.c_commu_topic_id, a.c_commu_id, a.u_datetime as r_datetime, a.c_member_id,'.
818        ' a.name as c_commu_topic_name'.
819        ' FROM c_commu_topic as a INNER JOIN c_commu_member as b USING(c_commu_id)'.
820        ' WHERE b.c_member_id = ?'.
821        ' ORDER BY r_datetime DESC';
822    $params = array(intval($c_member_id));
823    $c_commu_topic_list = db_get_all_limit($sql, 0, $limit, $params);
824
825    foreach ($c_commu_topic_list as $key => $value) {
826        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
827        $c_commu_topic_list[$key]['nickname'] = $c_member['nickname'];
828
829        $temp = db_commu_get_last_c_topic_comment($value['c_commu_topic_id']);
830
831        $sql = 'SELECT name AS c_commu_name FROM c_commu WHERE c_commu_id = ?';
832        $c_commu_name = db_get_one($sql, $value['c_commu_id']);
833
834        //最新の書き込み番号
835        $number = db_commu_get_max_number4topic($value['c_commu_topic_id']);
836
837        $c_commu_topic_list[$key]['number'] = $number;
838        $c_commu_topic_list[$key]['image_filename1'] = $temp['image_filename1'];
839        $c_commu_topic_list[$key]['image_filename2'] = $temp['image_filename2'];
840        $c_commu_topic_list[$key]['image_filename3'] = $temp['image_filename3'];
841        $c_commu_topic_list[$key]['c_commu_name'] = $c_commu_name;
842    }
843
844    return $c_commu_topic_list;
845}
846
847function db_commu_c_commu_topic_comment_list4c_member_id_2($c_member_id, $limit,$page)
848{
849    $sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
850    $c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
851    if (!$c_commu_id_list) {
852        return array();
853    }
854    $ids = implode(", ", $c_commu_id_list);
855
856    $hint = db_mysql_hint('USE INDEX (r_datetime_c_commu_id)');
857    $sql = 'SELECT a.c_commu_topic_id, a.c_commu_id, a.u_datetime as r_datetime, a.c_member_id,'.
858        ' a.name as c_commu_topic_name'.
859        ' FROM c_commu_topic as a INNER JOIN c_commu_member as b USING(c_commu_id)'.
860        ' WHERE b.c_member_id = ?'.
861        ' ORDER BY r_datetime DESC';
862    $params = array(intval($c_member_id));
863    $c_commu_topic_list = db_get_all_limit($sql, ($page-1)*$limit, $limit, $params);
864
865    foreach ($c_commu_topic_list as $key => $value) {
866        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
867        $c_commu_topic_list[$key]['nickname'] = $c_member['nickname'];
868
869        $temp = db_commu_get_last_c_topic_comment($value['c_commu_topic_id']);
870
871        $sql = 'SELECT name AS c_commu_name FROM c_commu WHERE c_commu_id = ?';
872        $c_commu_name = db_get_one($sql, $value['c_commu_id']);
873
874        //最新の書き込み番号
875        $number = db_commu_get_max_number4topic($value['c_commu_topic_id']);
876
877        $c_commu_topic_list[$key]['number'] = $number;
878        $c_commu_topic_list[$key]['image_filename1'] = $temp['image_filename1'];
879        $c_commu_topic_list[$key]['image_filename2'] = $temp['image_filename2'];
880        $c_commu_topic_list[$key]['image_filename3'] = $temp['image_filename3'];
881        $c_commu_topic_list[$key]['c_commu_name'] = $c_commu_name;
882    }
883
884    $sql = "SELECT count(DISTINCT ct.c_commu_topic_id)";
885    $sql .= " FROM c_commu_member AS cm, c_commu_topic_comment AS cc";
886    $sql .= ", c_commu AS c, c_commu_topic AS ct";
887    $sql .= " WHERE cm.c_member_id = ?";
888    $sql .= " AND cc.c_commu_id=cm.c_commu_id";
889    $sql .= " AND c.c_commu_id=cm.c_commu_id";
890    $sql .= " AND ct.c_commu_id=cm.c_commu_id";
891    $sql .= " AND ct.c_commu_topic_id=cc.c_commu_topic_id";
892    $params = array(intval($c_member_id));
893    $total_num = db_get_one($sql, $params);
894    if ($total_num != 0) {
895        $total_page_num =  ceil($total_num / $limit);
896        if ($page >= $total_page_num) {
897            $next = false;
898        } else {
899            $next = true;
900        }
901        if ($page <= 1) {
902            $prev = false;
903        } else {
904            $prev = true;
905        }
906    }
907    return array($c_commu_topic_list , $prev , $next,$total_num);
908}
909
910function db_commu_c_topic_list4target_c_commu_id($c_commu_id, $c_member_id, $page = 1, $page_size = 10, $event_flag = 0, $topic_with_event = 0)
911{
912    $sql = " SELECT cct.c_commu_topic_id, max(cctc.r_datetime) as newest_write_datetime " .
913            " FROM c_commu_topic as cct, c_commu_topic_comment as cctc " .
914            " WHERE cct.c_commu_topic_id = cctc.c_commu_topic_id ";
915
916    if ($topic_with_event) {
917        $sql .= " AND cct.event_flag = $event_flag";
918    }
919
920    $sql .= " AND cct.c_commu_id = ?" .
921            " GROUP BY cct.c_commu_topic_id " .
922            " ORDER BY newest_write_datetime DESC";
923    $params = array(intval($c_commu_id));
924    $lst = db_get_all_page($sql, $page, $page_size, $params);
925
926    foreach ($lst as $key => $value) {
927        $sql = "SELECT cct.c_commu_topic_id, cct.name, cct.r_datetime, cctc.body , cctc.image_filename1, cctc.image_filename2, image_filename3" .
928               " FROM c_commu_topic as cct, c_commu_topic_comment as cctc" .
929               " WHERE cct.c_commu_topic_id = cctc.c_commu_topic_id" .
930               " AND cctc.number = 0" .
931               " AND cct.c_commu_topic_id = ?";
932        $params = array(intval($value['c_commu_topic_id']));
933        $lst[$key] = db_get_row($sql, $params);
934    }
935
936    foreach ($lst as $key => $value) {
937        $lst[$key]['is_c_event_member'] = db_commu_is_c_event_member($value['c_commu_topic_id'], $c_member_id);
938        $lst[$key]['is_c_topic_admin'] = db_commu_is_c_topic_admin($value['c_commu_topic_id'], $c_member_id);
939        $lst[$key]['write_num'] = db_commu_get_max_number4topic($value['c_commu_topic_id']);
940    }
941
942    $sql = 'SELECT COUNT(*) FROM c_commu_topic WHERE c_commu_id = ?';
943    if ($topic_with_event) {
944        $sql .= " AND event_flag = $event_flag";
945    }
946    $params = array(intval($c_commu_id));
947    $total_num = db_get_one($sql, $params);
948
949    if ($total_num != 0) {
950        $total_page_num = ceil($total_num / $page_size);
951        if ($page >= $total_page_num) {
952            $next = false;
953        } else {
954            $next = true;
955        }
956        if ($page <= 1) {
957            $prev = false;
958        } else {
959            $prev = true;
960        }
961    }
962    $start_num = ($page - 1) * $page_size + 1 ;
963    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
964
965    return array($lst, $prev, $next, $total_num, $start_num, $end_num);
966}
967
968function db_commu_c_topic4c_commu_topic_id($c_commu_topic_id)
969{
970    $sql = "SELECT ct.*, ctc.*, c_member.nickname" .
971        " FROM c_commu_topic AS ct" .
972            " LEFT JOIN c_member USING (c_member_id)" .
973            ", c_commu_topic_comment AS ctc" .
974        " WHERE ct.c_commu_topic_id = ctc.c_commu_topic_id " .
975            " AND ct.c_commu_topic_id = ?".
976            " AND ctc.number = 0";
977    $params = array(intval($c_commu_topic_id));
978    return db_get_row($sql, $params);
979}
980
981function db_commu_is_topic4c_commu_id($c_commu_id)
982{
983    $sql = 'SELECT c_commu_topic_id FROM c_commu_topic WHERE c_commu_id = ?';
984    $params = array(intval($c_commu_id));
985    return db_get_one($sql, $params);
986}
987
988/**
989 * IDからコミュニティトピックコメントの情報を取得
990 *
991 * @param int $c_commu_topic_comment_id
992 * @return array
993 */
994function db_commu_c_commu_topic_comment4c_commu_topic_comment_id($c_commu_topic_comment_id)
995{
996    $sql = "SELECT ctc.*, ct.name AS topic_name, c.name AS commu_name" .
997        " FROM c_commu_topic_comment AS ctc, c_commu_topic AS ct, c_commu AS c" .
998        " WHERE ctc.c_commu_topic_comment_id=?" .
999        " AND ct.c_commu_topic_id=ctc.c_commu_topic_id" .
1000        " AND c.c_commu_id=ctc.c_commu_id";
1001    $params = array(intval($c_commu_topic_comment_id));
1002    return db_get_row($sql, $params, 'main');
1003}
1004
1005function db_common_commu_status($u, $target_c_commu_id)
1006{
1007    $ret = array(
1008        'c_commu' => db_commu_c_commu4c_commu_id($target_c_commu_id),
1009        'is_bbs_view'     => false,
1010        'is_commu_member' => false,
1011        'is_commu_admin'  => false,
1012        'is_commu_sub_admin'  => false,
1013        'is_receive_mail'    => false,
1014        'is_commu_member_confirm' => false,
1015    );
1016
1017    if (db_commu_is_c_commu_member($target_c_commu_id, $u)) {
1018        $ret['is_commu_member'] = true;
1019
1020        $c_commu_member = db_commu_c_commu_member4c_member_id($u, $target_c_commu_id);
1021        if ($c_commu_member['is_receive_mail']) {
1022            $ret['is_receive_mail'] = true;
1023        }
1024
1025        //副管理者の権限はほぼ管理者と同一
1026        if ($ret['c_commu']['c_member_id_admin'] == $u
1027         || $ret['c_commu']['c_member_id_sub_admin'] == $u) {
1028            $ret['is_commu_admin']  = true;
1029        }
1030
1031        //副管理者かどうかも個別に持つ
1032        if ($ret['c_commu']['c_member_id_sub_admin'] == $u) {
1033            $ret['is_commu_sub_admin']  = true;
1034        }
1035    } else {
1036        if (db_commu_is_c_commu_member_confirm($u, $target_c_commu_id)) {
1037            $ret['is_commu_member_confirm'] = true;
1038        }
1039    }
1040
1041    switch ($ret['c_commu']['public_flag']) {
1042    case "public":
1043    case "auth_public":
1044    case "auth_sns":
1045        $ret['is_bbs_view'] = true;
1046        break;
1047    case "auth_commu_member":
1048        $ret['is_bbs_view'] = $ret['is_commu_member'];
1049        break;
1050    }
1051
1052    return $ret;
1053}
1054
1055function db_commu_is_c_commu_member_confirm($c_member_id, $c_commu_id)
1056{
1057    $sql = "SELECT COUNT(*) FROM c_commu_member_confirm" .
1058        " WHERE c_member_id = ? AND c_commu_id = ?";
1059    $params = array(intval($c_member_id), intval($c_commu_id));
1060    return db_get_one($sql, $params);
1061}
1062
1063function db_commu_c_commu_member4c_member_id($c_member_id, $c_commu_id)
1064{
1065    $sql = "SELECT * FROM c_commu_member" .
1066            " WHERE c_member_id=? AND c_commu_id=?";
1067    $params = array(intval($c_member_id), intval($c_commu_id));
1068    return db_get_row($sql, $params);
1069}
1070
1071/**
1072 * コミュニティトピック情報取得
1073 *
1074 * @param   int $c_commu_topic_id
1075 * @return  array トピック情報
1076 */
1077function db_commu_c_commu_topic4c_commu_topic_id($c_commu_topic_id)
1078{
1079    $sql = 'SELECT * FROM c_commu_topic WHERE c_commu_topic_id = ?';
1080    $params = array(intval($c_commu_topic_id));
1081    return db_get_row($sql, $params);
1082}
1083
1084/**
1085 * コミュニティ参加要請情報をIDから取得
1086 *
1087 * @param   int $c_commu_member_confirm_id
1088 * @return  array
1089 *              c_commu_member_confirm.*,
1090 *              c_member_id_admin
1091 */
1092function db_commu_c_commu_member_confirm4c_commu_member_confirm_id($c_commu_member_confirm_id)
1093{
1094    $sql = "SELECT cmc.*, c.c_member_id_admin, c.c_member_id_sub_admin";
1095    $sql .= " FROM c_commu_member_confirm AS cmc, c_commu AS c";
1096    $sql .= " WHERE cmc.c_commu_member_confirm_id=?";
1097    $sql .= " AND cmc.c_commu_id=c.c_commu_id";
1098    $params = array(intval($c_commu_member_confirm_id));
1099    return db_get_row($sql, $params);
1100}
1101
1102//TODO:constant
1103define('STATUS_C_JOIN_REQUEST_FREE', "1"); //コミュニティ参加(承認必要なし)
1104define('STATUS_C_JOIN_REQUEST_NEED', "2"); //コミュニティ参加(承認必要)
1105define('STATUS_C_JOIN_WAIT', "3"); //コミュニティ参加(承認待ち)
1106define('STATUS_C_JOIN_ALREADY', "4"); //コミュニティ参加(既に参加)
1107
1108function db_commu_get_c_join_status($c_member_id,$c_commu_id)
1109{
1110    $is_c_commu_member = db_commu_is_c_commu_member($c_commu_id, $c_member_id);
1111    $is_wait = db_commu_is_c_commu_join_wait($c_commu_id, $c_member_id);
1112    $c_commu = db_commu_c_commu4c_commu_id($c_commu_id);
1113    $is_join_request_free = false;
1114    if ($c_commu['public_flag'] == "public") {
1115        $is_join_request_free = true;
1116    }
1117
1118    $ret = STATUS_C_JOIN_ALREADY;
1119    if (!$is_c_commu_member) { //メンバーで無い
1120        if ($is_wait == true) {
1121            $ret = STATUS_C_JOIN_WAIT;
1122        } else {
1123            if ($is_join_request_free) {
1124                $ret = STATUS_C_JOIN_REQUEST_FREE;
1125            } else {
1126                $ret = STATUS_C_JOIN_REQUEST_NEED;
1127            }
1128        }
1129    }
1130    return $ret;
1131}
1132
1133/**
1134 * トピックコメントIDからトピックを得る
1135 */
1136function db_commu_c_commu_topic_comment4c_commu_topic_comment_id_2($c_commu_topic_comment_id)
1137{
1138    $sql = 'SELECT * FROM c_commu_topic_comment WHERE c_commu_topic_comment_id = ?';
1139    $params = array(intval($c_commu_topic_comment_id));
1140    return db_get_row($sql, $params);
1141}
1142
1143/**
1144 * トピック情報取得
1145 *
1146 * @param   int $c_commu_topic_id
1147 * @return  array $c_commu_topic
1148 */
1149function db_commu_c_commu_topic4c_commu_topic_id_2($c_commu_topic_id, $c_member_id)
1150{
1151    $sql = "SELECT * FROM c_commu_topic WHERE c_commu_topic_id = ?";
1152    $params = array(intval($c_commu_topic_id));
1153    $one = db_get_row($sql, $params);
1154
1155    if ($one['c_member_id'] == $c_member_id) {
1156        $one['is_c_commu_topic_admin'] = true;
1157    }
1158    return $one;
1159}
1160
1161function db_commu_c_commu_list_lastupdate4c_member_id($c_member_id, $limit)
1162{
1163    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
1164
1165    if (!$is_recurred) {  //function cacheのために再帰処理を行う
1166        $is_recurred = true;
1167        $funcargs = func_get_args();
1168        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
1169    }
1170
1171    $is_recurred = false;
1172
1173    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
1174        $sql = 'SELECT DISTINCT c.*, RANDOM() FROM c_commu_member AS cm, c_commu AS c' .
1175                ' WHERE cm.c_member_id = ? AND c.c_commu_id = cm.c_commu_id';
1176    } else {
1177        $sql = 'SELECT DISTINCT c.* FROM c_commu_member AS cm, c_commu AS c' .
1178                ' WHERE cm.c_member_id = ? AND c.c_commu_id = cm.c_commu_id';
1179    }
1180    $sql .= db_order_by_rand();
1181    $params = array(intval($c_member_id));
1182    $c_commu_list = db_get_all_limit($sql, 0, $limit, $params);
1183
1184    foreach ($c_commu_list as $key => $value) {
1185        $c_commu_list[$key]['count_members'] =
1186            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
1187    }
1188
1189    return $c_commu_list;
1190}
1191
1192/**
1193 * 参加不参加にかかわらず、最新書き込みのあったコミュニティリストを取得
1194 */
1195function db_commu_c_commu_list_lastupdated($limit = 5)
1196{
1197    $sql = "SELECT c_commu_id, MAX(r_datetime) as updatetime" .
1198        " FROM c_commu_topic_comment" .
1199        " GROUP BY c_commu_id" .
1200        " ORDER BY updatetime DESC";
1201    $comments = db_get_all_limit($sql, 0, $limit);
1202
1203    $c_commu_list = array();
1204    foreach ($comments as $comment) {
1205        $c_commu = db_commu_c_commu4c_commu_id($comment['c_commu_id']);
1206        $c_commu['updatetime'] = $comment['updatetime'];
1207        $c_commu_list[] = $c_commu;
1208    }
1209    return $c_commu_list;
1210}
1211
1212/**
1213 * トピック名を取得
1214 */
1215function db_commu_c_commu_topic_name4c_commu_topic_id($c_commu_topic_id)
1216{
1217    $sql = "SELECT name FROM c_commu_topic WHERE c_commu_topic_id = ?";
1218    $params = array(intval($c_commu_topic_id));
1219    return db_get_one($sql, $params);
1220}
1221
1222/**
1223 * トピックのコメントリストを取得
1224 * 引数のメンバーIDが書き込んだコメントに対しては、
1225 * is_c_commu_topic_comment_admin=1が返る。
1226 */
1227function db_commu_c_commu_topic_comment_list4c_c_commu_topic_id($c_commu_topic_id, $c_member_id, $page_size, $page)
1228{
1229    $sql = "SELECT c_commu_topic_comment.*, c_member.nickname" .
1230        " FROM c_commu_topic_comment" .
1231            " LEFT JOIN c_member USING (c_member_id)" .
1232        " WHERE c_commu_topic_id = ? AND c_commu_topic_comment.number > 0" .
1233        " ORDER BY number DESC";
1234    $params = array(intval($c_commu_topic_id));
1235    $list = db_get_all_page($sql, $page, $page_size, $params);
1236
1237    foreach ($list as $key => $value) {
1238        if ($list[$key]['c_member_id'] == $c_member_id) {
1239            $list[$key]['is_c_commu_topic_comment_admin'] = true;
1240        }
1241    }
1242
1243    $sql = "SELECT COUNT(*)-1 FROM c_commu_topic_comment WHERE c_commu_topic_id = ?";
1244    $params = array(intval($c_commu_topic_id));
1245    $total_num = db_get_one($sql, $params);
1246
1247    if ($total_num > 0) {
1248        $total_page_num =  ceil($total_num / $page_size);
1249        if ($page >= $total_page_num) {
1250            $next = false;
1251        } else {
1252            $next = true;
1253        }
1254        if ($page <= 1) {
1255            $prev = false;
1256        } else {
1257            $prev = true;
1258        }
1259    }
1260    return array($list , $prev , $next, $total_num);
1261}
1262
1263/**
1264 * トピックIDからコミュニティIDと名前を取得
1265 */
1266function db_commu_c_commu4c_commu_topic_id($c_commu_topic_id)
1267{
1268    $sql = "SELECT cc.c_commu_id , cc.name FROM c_commu_topic AS cct, c_commu AS cc ";
1269    $sql .= " WHERE cct.c_commu_topic_id = ?";
1270    $sql .= " AND cc.c_commu_id = cct.c_commu_id ";
1271    $params = array(intval($c_commu_topic_id));
1272    return db_get_row($sql, $params);
1273}
1274
1275/**
1276 * 指定したメンバーがコミュニティ管理者かどうかを判定
1277 */
1278function db_commu_is_admin4c_member_id_c_commu_topic_id($c_member_id, $c_commu_topic_id)
1279{
1280    $c_commu = db_commu_c_commu4c_commu_topic_id($c_commu_topic_id);
1281    $c_commu_id = $c_commu['c_commu_id'];
1282
1283    return db_commu_is_c_commu_admin($c_commu['c_commu_id'], $c_member_id);
1284}
1285
1286/**
1287 * コミュニティの管理者(ID, nickname)を取得
1288 */
1289function db_commu_c_member_admin4c_commu_topic_id($c_commu_topic_id)
1290{
1291    $c_commu = db_commu_c_commu4c_commu_topic_id($c_commu_topic_id);
1292    $c_commu_id = $c_commu['c_commu_id'];
1293
1294    $sql = "SELECT c_member_id_admin , nickname";
1295    $sql .= " FROM c_commu, c_member";
1296    $sql .= " WHERE c_commu_id=?".
1297            " AND c_member_id=c_member_id_admin";
1298    $params = array(intval($c_commu_id));
1299    return db_get_row($sql, $params);
1300}
1301
1302/**
1303 * 参加コミュニティリストを取得
1304 * 範囲を指定できる
1305 * IDが新しいもの順
1306 */
1307function db_commu_c_commu_list4c_member_id_4($c_member_id, $page_size, $page)
1308{
1309    $sql = "SELECT name, c_commu.c_commu_id FROM c_commu_member , c_commu";
1310    $sql .= " WHERE c_commu_member.c_member_id = ?";
1311    $sql .= " AND c_commu.c_commu_id=c_commu_member.c_commu_id";
1312    $sql .= " ORDER BY c_commu.c_commu_id DESC ";
1313
1314    $params = array(intval($c_member_id));
1315    $c_commu_list = db_get_all_page($sql, $page, $page_size, $params);
1316
1317    foreach ($c_commu_list as $key => $value) {
1318        $c_commu_list[$key]['count_members'] =
1319            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
1320    }
1321
1322    $total_num = db_commu_count_c_commu4c_member_id($c_member_id);
1323    if ($total_num != 0) {
1324        $total_page_num =  ceil($total_num / $page_size);
1325        if ($page >= $total_page_num) {
1326            $next = false;
1327        } else {
1328            $next = true;
1329        }
1330
1331        if ($page <= 1) {
1332            $prev = false;
1333        } else {
1334            $prev = true;
1335        }
1336    }
1337    return array($c_commu_list , $prev , $next, $total_num);
1338}
1339
1340/**
1341 * メンバーIDのメンバーと、コミュニティIDのコミュニティの関係を返す
1342 */
1343function db_commu_relationship_between_member_commu($c_commu_id, $c_member_id)
1344{
1345    $relation = array(
1346        'join' => false,
1347        'wait' => false
1348    );
1349
1350    //参加承認待ちかどうかをチェック
1351    $sql = "SELECT COUNT(*) ";
1352    $sql .= "FROM c_commu_member_confirm ";
1353    $sql .= "WHERE c_commu_id = ? AND c_member_id = ?";
1354    $params = array(intval($c_commu_id), intval($c_member_id));
1355    if (db_get_one($sql, $params)) {
1356        //承認待ちなら
1357        $relation['wait'] = true;
1358        return $relation;
1359    }
1360
1361    //参加してるかどうかチェック
1362    $sql = "SELECT COUNT(*) ";
1363    $sql .= "FROM c_commu_member ";
1364    $sql .= "WHERE c_commu_id = ? AND c_member_id = ?";
1365    $params = array(intval($c_commu_id), intval($c_member_id));
1366    if (db_get_one($sql, $params)) {
1367        //参加なら
1368        $relation['join'] = true;
1369    }
1370    return $relation;
1371}
1372
1373/**
1374 * コミュニティのメンバーリストをランダムに取得
1375 */
1376function db_commu_c_commu_member_list_random4c_commu_id($c_commu_id, $limit)
1377{
1378    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
1379
1380    if (!$is_recurred) {  //function cacheのために再帰処理を行う
1381        $is_recurred = true;
1382        $funcargs = func_get_args();
1383        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
1384    }
1385
1386    $is_recurred = false;
1387
1388    $sql = "SELECT cm.c_member_id, cm.nickname ";
1389    $sql .= "FROM c_member AS cm , c_commu_member AS ccm ";
1390    $sql .= "WHERE ccm.c_commu_id = ?" .
1391            " AND ccm.c_member_id = cm.c_member_id";
1392    $sql .= db_order_by_rand();
1393    $params = array(intval($c_commu_id));
1394    $c_commu_member_list = db_get_all_limit($sql, 0, $limit, $params);
1395
1396    foreach ($c_commu_member_list as $key => $value) {
1397        $c_commu_member_list[$key]['count_friend'] =
1398            db_friend_count_friends($value['c_member_id']);
1399    }
1400
1401    return $c_commu_member_list;
1402}
1403
1404/**
1405 * コミュニティメンバーのリストをID新しいもの順に取得する。
1406 * 取得する範囲を指定できる。
1407 */
1408function db_commu_c_members_disp4c_commu_id($c_commu_id, $page_size, $page)
1409{
1410    $sql = 'SELECT c_member.c_member_id, nickname '
1411        . ' FROM c_member, c_commu_member'
1412        . ' WHERE c_member.c_member_id = c_commu_member.c_member_id' .
1413                ' AND c_commu_member.c_commu_id = ?'.
1414        ' ORDER BY c_member.c_member_id DESC';
1415    $params = array(intval($c_commu_id));
1416    $list = db_get_all_page($sql, $page, $page_size, $params);
1417
1418    foreach ($list as $key => $value) {
1419        $list[$key]['friend_count'] = db_friend_count_friends($value['c_member_id']);
1420    }
1421
1422    $total_num = db_commu_count_c_commu_member_list4c_commu_id($c_commu_id);
1423    if ($total_num != 0) {
1424        $total_page_num = ceil($total_num / $page_size);
1425        if ($page >= $total_page_num) {
1426            $next = false;
1427        } else {
1428            $next = true;
1429        }
1430
1431        if ($page <= 1) {
1432            $prev = false;
1433        } else {
1434            $prev = true;
1435        }
1436    }
1437    return array($list , $prev , $next);
1438}
1439
1440/**
1441 * Myフレンドから指定コミュに参加していない人をランダムに選ぶ
1442 */
1443function db_commu_c_friend_list_random4c_member_id4c_commu_id($c_member_id, $c_commu_id, $limit)
1444{
1445    //友達リスト
1446    $friend_list = db_friend_c_member_id_list($c_member_id);
1447
1448    //参加者リスト
1449    $sql = "SELECT c_member_id FROM c_commu_member WHERE c_commu_id = ?";
1450    $params = array(intval($c_commu_id));
1451    $member_list = db_get_col($sql, $params);
1452
1453    //友達リストから参加者リストを引く
1454    $result = array_diff($friend_list, $member_list);
1455
1456    if (!$result) {
1457        return array();
1458    }
1459
1460    $result = implode(',', array_map('intval', $result));
1461    $sql = 'SELECT c_member_id, nickname FROM c_member' .
1462            ' WHERE c_member_id IN ( '. $result . ') ' .
1463            db_order_by_rand();
1464    return db_get_all_limit($sql, 0, $limit);
1465}
1466
1467/**
1468 * 参加コミュニティ新着書き込みリスト取得
1469 */
1470function db_commu_c_commu_topic_comment_list4c_member_id_3($c_member_id, $page_size, $page)
1471{
1472    $sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
1473    $c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
1474    if (!$c_commu_id_list) {
1475        return array();
1476    }
1477    $ids = implode(", ", $c_commu_id_list);
1478
1479    $hint = db_mysql_hint('USE INDEX (r_datetime_c_commu_id)');
1480    $sql = 'SELECT c_commu_id, c_commu_topic_id, name AS c_commu_topic_name, r_datetime, c_member_id'.
1481        ' FROM c_commu_topic'. $hint . ' WHERE c_commu_id IN (' . $ids . ') ORDER BY r_datetime DESC';
1482    $c_commu_topic_list = db_get_all_page($sql, $page, $page_size);
1483
1484    foreach ($c_commu_topic_list as $key => $value) {
1485        $sql = 'SELECT name AS c_commu_name FROM c_commu WHERE c_commu_id = ?';
1486        $c_commu_name = db_get_one($sql, $value['c_commu_id']);
1487
1488        $c_commu_topic_list[$key]['number'] = db_commu_get_max_number4topic($value['c_commu_topic_id']);
1489        $c_commu_topic_list[$key]['c_commu_name'] = $c_commu_name;
1490    }
1491
1492    $sql = "SELECT count(*) ";
1493    $sql .= " FROM c_commu_member AS cm";
1494    $sql .= ", c_commu AS c, c_commu_topic AS ct";
1495    $sql .= " WHERE cm.c_member_id = ?";
1496    $sql .= " AND c.c_commu_id = cm.c_commu_id";
1497    $sql .= " AND ct.c_commu_id = cm.c_commu_id";
1498    $params = array(intval($c_member_id));
1499    $total_num = db_get_one($sql, $params);
1500
1501    if ($total_num != 0) {
1502        $total_page_num =  ceil($total_num / $page_size);
1503        if ($page >= $total_page_num) {
1504            $next = false;
1505        } else {
1506            $next = true;
1507        }
1508
1509        if ($page <= 1) {
1510            $prev = false;
1511        } else {
1512            $prev = true;
1513        }
1514    }
1515    return array($c_commu_topic_list, $prev, $next, $total_num);
1516}
1517
1518/**
1519 * あなたに(の)管理コミュニティに参加を希望しているメンバー(参加承認待ち)
1520 *
1521 * @param   int $c_member_id    : 要請されている方(あなた=管理者)
1522 * @return  array_of_array
1523 *              c_commu_member_confirm.*
1524 *              c_commu_name    : コミュニティの名前
1525 *              nickname        : 要請している人の名前
1526 *              message_disp    : 表示用メッセージ
1527 */
1528function db_commu_anatani_c_commu_member_confirm_list4c_member_id_2($c_member_id)
1529{
1530    $sql = "SELECT cmc.*, c.name AS c_commu_name";
1531    $sql .= " FROM c_commu_member_confirm AS cmc, c_commu AS c";
1532    $sql .= " WHERE (c.c_member_id_admin = ? OR c.c_member_id_sub_admin = ?" .
1533            " AND cmc.c_commu_id=c.c_commu_id";
1534    $params = array(intval($c_member_id), intval($c_member_id));
1535    $c_commu_member_confirm_list = db_get_all($sql, $params);
1536
1537    foreach ($c_commu_member_confirm_list as $key => $value) {
1538        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id']);
1539        $c_commu_member_confirm_list[$key]['nickname'] = $c_member['nickname'];
1540    }
1541    return $c_commu_member_confirm_list;
1542}
1543
1544
1545/**
1546 * あなたがコミュニティ参加要請しているコミュニティ(参加要請中)
1547 *
1548 * @param   int $c_member_id    : 要請している方(あなた)
1549 * @return  array_of_array
1550 *              c_commu_member_confirm.*,
1551 *              c_commu_name        : コミュニティの名前
1552 *              c_member_id_admin   : 管理者のメンバーID
1553 *              nickname            : 管理者の名前
1554 */
1555function db_commu_anataga_c_commu_member_confirm_list4c_member_id_2($c_member_id)
1556{
1557    $sql = "SELECT cmc.*, c.name AS c_commu_name, c.c_member_id_admin";
1558    $sql .= " FROM c_commu_member_confirm AS cmc, c_commu AS c";
1559    $sql .= " WHERE cmc.c_member_id = ?" .
1560            " AND cmc.c_commu_id = c.c_commu_id";
1561    $params = array(intval($c_member_id));
1562    $c_commu_member_confirm_list = db_get_all($sql, $params);
1563
1564    foreach ($c_commu_member_confirm_list as $key => $value) {
1565        $c_member = db_member_c_member4c_member_id_LIGHT($value['c_member_id_admin']);
1566        $c_commu_member_confirm_list[$key]['nickname'] = $c_member['nickname'];
1567    }
1568    return $c_commu_member_confirm_list;
1569}
1570
1571/**
1572 * トピックIDからトピック情報を取得
1573 *
1574 * @param int c_commu_topic_id
1575 * @return array_of_array c_commu_topic.*, commu_name
1576 */
1577function db_commu_c_commu_topic4c_commu_topic_id_3($c_commu_topic_id)
1578{
1579    $sql = "SELECT t.*, c.name AS commu_name" .
1580        " FROM c_commu_topic AS t, c_commu AS c" .
1581        " WHERE t.c_commu_topic_id = ?" .
1582        " AND c.c_commu_id = t.c_commu_id";
1583    $params = array(intval($c_commu_topic_id));
1584    return db_get_row($sql, $params);
1585}
1586
1587///
1588
1589//// c_commu_category
1590
1591function db_commu_c_commu_category4null()
1592{
1593    $sql = 'SELECT cat.* FROM c_commu_category AS cat' .
1594            ' INNER JOIN c_commu_category_parent AS pcat' .
1595            ' USING (c_commu_category_parent_id)' .
1596            ' ORDER BY pcat.sort_order, cat.sort_order';
1597    return db_get_all($sql);
1598}
1599
1600function db_commu_c_commu_category_list4null()
1601{
1602    $list = db_commu_c_commu_category4null();
1603
1604    // カテゴリごとのコミュニティ数を取得
1605    $sql = 'SELECT c_commu_category_id, COUNT(*) as count FROM c_commu' .
1606        ' GROUP BY c_commu_category_id';
1607    $counts = db_get_assoc($sql);
1608
1609    $c_commu_category_list = array();
1610    foreach ($list as $item) {
1611        $item['count_commu_category'] = intval($counts[$item['c_commu_category_id']]);
1612        $c_commu_category_list[$item['c_commu_category_parent_id']][] = $item;
1613    }
1614    return $c_commu_category_list;
1615}
1616
1617/**
1618 * 中カテゴリリストを取得
1619 *
1620 * @return  array 中カテゴリリスト
1621 */
1622function db_commu_c_commu_category_parent_list4null()
1623{
1624    $hint = db_mysql_hint('FORCE INDEX (sort_order)');
1625    $sql = 'SELECT * FROM c_commu_category_parent' . $hint . ' ORDER BY sort_order';
1626    return db_get_all($sql);
1627}
1628
1629/**
1630 * カテゴリ情報をIDから取得
1631 */
1632function db_commu_get_c_commu_category4id($c_commu_category_id)
1633{
1634    $sql = 'SELECT * FROM c_commu_category WHERE c_commu_category_id = ?';
1635    $params = array(intval($c_commu_category_id));
1636    return db_get_row($sql, $params);
1637}
1638
1639/**
1640 * コミュニティの小カテゴリIDから小カテゴリ名を得る
1641 */
1642function db_commu_c_commu_category_name4c_commu_category_id($c_commu_category_id)
1643{
1644    $sql = 'SELECT name FROM c_commu_category WHERE c_commu_category_id = ?';
1645    $params = array(intval($c_commu_category_id));
1646    return db_get_one($sql, $params);
1647}
1648
1649function db_commu_c_commu_category_parent_id4c_commu_category_id($c_commu_category_id)
1650{
1651    $cat = db_commu_get_c_commu_category4id($c_commu_category_id);
1652    return $cat['c_commu_category_parent_id'];
1653}
1654
1655function db_commu_search_c_commu4c_commu_category(
1656            $search_word,
1657            $c_commu_category_parent_id,
1658            $page_size,
1659            $page,
1660            $val_order = 'r_datetime',
1661            $c_commu_category_id = 0)
1662{
1663    $select = 'SELECT c_commu.*';
1664
1665    $wheres = array();
1666    $params = array();
1667    if ($c_commu_category_id) {
1668        $wheres[] = 'c_commu.c_commu_category_id = ?';
1669        $params[] = $c_commu_category_id;
1670    }
1671    if ($search_word) {
1672        $words = explode(' ', $search_word);
1673        foreach ($words as $word) {
1674            $word = check_search_word($word);
1675
1676            $wheres[] = '(c_commu.name LIKE ? OR c_commu.info LIKE ?)';
1677            $params[] = '%'.$word.'%';
1678            $params[] = '%'.$word.'%';
1679        }
1680    }
1681    if ($wheres) {
1682        $where = ' WHERE ' . implode(' AND ', $wheres);
1683    } else {
1684        $where = '';
1685    }
1686
1687    switch ($val_order) {
1688    case 'r_datetime':
1689    default:
1690        $from = ' FROM c_commu';
1691        $order = ' ORDER BY c_commu.r_datetime DESC';
1692        $sql = $select.$from.$where.$order;
1693        break;
1694
1695    case 'count':
1696        $from  = ' FROM c_commu, c_commu_member';
1697        $order = ' ORDER BY count_commu_member DESC';
1698        if ($where) {
1699            $count_where = $where . ' AND';
1700        } else {
1701            $count_where = ' WHERE';
1702        }
1703        $count_where .= ' c_commu_member.c_commu_id = c_commu.c_commu_id';
1704        if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
1705            $sub_tbl = ' (' .
1706                            'SELECT c_commu_member.c_commu_id, count(c_commu_member.c_commu_member_id) as count_commu_member' .
1707                            $from .
1708                            $count_where .
1709                            ' GROUP BY c_commu_member.c_commu_id' .
1710                        ') as sub_commu_tbl';
1711            $sql = $select .
1712                    ' FROM' . $sub_tbl . ', c_commu' .
1713                    ' WHERE c_commu.c_commu_id = sub_commu_tbl.c_commu_id' .
1714                    $order;
1715        } else {
1716            $group = ' GROUP BY c_commu_member.c_commu_id';
1717            $sql = $select . ', COUNT(c_commu_member.c_member_id) AS count_commu_member' .
1718                $from .
1719                $count_where .
1720                $group .
1721                $order;
1722        }
1723        break;
1724    }
1725
1726    $list = db_get_all_page($sql, $page, $page_size, $params);
1727    foreach ($list as $key => $value) {
1728        $sql = 'SELECT name FROM c_commu_category WHERE c_commu_category_id = ?';
1729        $p2 = array(intval($value['c_commu_category_id']));
1730        $list[$key]['c_commu_category_name'] = db_get_one($sql, $p2);
1731
1732        if (!isset($value['count_commu_member'])) {
1733            $list[$key]['count_commu_member'] =
1734                db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
1735        }
1736    }
1737
1738    $sql = 'SELECT COUNT(*) FROM c_commu' . $where;
1739    $total_num = db_get_one($sql, $params);
1740
1741    if ($total_num != 0) {
1742        $total_page_num =  ceil($total_num / $page_size);
1743        if ($page >= $total_page_num) {
1744            $next = false;
1745        } else {
1746            $next = true;
1747        }
1748        if ($page <= 1) {
1749            $prev = false;
1750        } else {
1751            $prev = true;
1752        }
1753    }
1754
1755    $start_num = ($page - 1) * $page_size + 1;
1756    $end_num   = $start_num + $page_size >= $total_num ? $total_num : $start_num + $page_size - 1;
1757
1758    return array($list, $prev, $next, $total_num, $start_num, $end_num);
1759}
1760
1761function db_commu_c_commu_list4c_commu_category_id_search($c_commu_category_id, $page_size, $page, $search_word)
1762{
1763    $sql = 'SELECT * FROM c_commu';
1764
1765    $wheres = array();
1766    $params = array();
1767    if ($search_word) {
1768        $wheres[] = '(name LIKE ? OR info LIKE ?)';
1769        $params[] = '%'.$search_word.'%';
1770        $params[] = '%'.$search_word.'%';
1771    }
1772    if ($c_commu_category_id != 'all' && $c_commu_category_id) {
1773        $wheres[] = 'c_commu_category_id = ?';
1774        $params[] = intval($c_commu_category_id);
1775    }
1776    if ($wheres) {
1777        $where = ' WHERE ' . implode(' AND ', $wheres);
1778    } else {
1779        $where = '';
1780    }
1781
1782    $sql .= $where . ' ORDER BY r_datetime DESC';
1783    $list = db_get_all_page($sql, $page, $page_size, $params);
1784
1785    foreach ($list as $key => $value) {
1786        $list[$key]['count_commu_member'] =
1787            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
1788    }
1789
1790    $sql = 'SELECT COUNT(*) FROM c_commu' . $where;
1791    $total_num = db_get_one($sql, $params);
1792
1793    if ($total_num != 0) {
1794        $total_page_num =  ceil($total_num / $page_size);
1795        if ($page >= $total_page_num) {
1796            $next = false;
1797        } else {
1798            $next = true;
1799        }
1800
1801        if ($page <= 1) {
1802            $prev = false;
1803        } else {
1804            $prev = true;
1805        }
1806    }
1807
1808    return array($list, $prev, $next, $total_num);
1809}
1810
1811///
1812
1813function db_commu_is_c_event_admin($c_commu_topic_id, $c_member_id)
1814{
1815    $sql = 'SELECT c_member_id FROM c_commu_topic' .
1816            ' WHERE c_commu_topic_id = ? AND c_member_id = ?';
1817    $params = array(intval($c_commu_topic_id), intval($c_member_id));
1818    return (bool)db_get_one($sql, $params);
1819}
1820
1821function db_commu_is_c_event_member($c_commu_topic_id, $c_member_id)
1822{
1823    $sql = 'SELECT c_event_member_id FROM c_event_member' .
1824            ' WHERE c_commu_topic_id = ? AND c_member_id = ?';
1825    $params = array(intval($c_commu_topic_id), intval($c_member_id));
1826    return (bool)db_get_one($sql, $params);
1827}
1828
1829function db_commu_c_topic4c_commu_topic_id_2($c_commu_topic_id)
1830{
1831    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
1832        $sql = "SELECT cct.*, cctc.*, cm.nickname, cpp.pref, case when cct.invite_period = '0001-01-01 BC' THEN '0000-00-00' ELSE to_char(cct.invite_period,'YYYY-MM-DD') END as invite_period" .
1833            " FROM c_commu_topic as cct" .
1834            " LEFT JOIN c_commu_topic_comment as cctc ON cct.c_commu_topic_id = cctc.c_commu_topic_id" .
1835            " LEFT JOIN c_member as cm ON cct.c_member_id = cm.c_member_id" .
1836            " LEFT JOIN c_profile_pref as cpp ON cct.open_pref_id = cpp.c_profile_pref_id" .
1837            " WHERE cct.c_commu_topic_id = ?".
1838                " AND cctc.number = 0";
1839    } else {
1840        $sql = "SELECT cct.*, cctc.*, cm.nickname, cpp.pref" .
1841            " FROM c_commu_topic as cct" .
1842            " LEFT JOIN c_commu_topic_comment as cctc ON cct.c_commu_topic_id = cctc.c_commu_topic_id" .
1843            " LEFT JOIN c_member as cm ON cct.c_member_id = cm.c_member_id" .
1844            " LEFT JOIN c_profile_pref as cpp ON cct.open_pref_id = cpp.c_profile_pref_id" .
1845            " WHERE cct.c_commu_topic_id = ?".
1846                " AND cctc.number = 0";
1847    }
1848    $params = array(intval($c_commu_topic_id));
1849    $lst = db_get_row($sql, $params);
1850
1851    $sql = "SELECT COUNT(*) FROM c_event_member" .
1852        " WHERE c_commu_topic_id = ?";
1853    $lst['member_num'] = db_get_one($sql, $params);
1854
1855    return $lst;
1856}
1857
1858function db_commu_c_topic_write4c_commu_topic_id($c_commu_topic_id, $page, $page_size = null)
1859{
1860    $params = array(intval($c_commu_topic_id));
1861
1862    $sql = "SELECT count(*) FROM c_commu_topic_comment" .
1863        " WHERE c_commu_topic_id = ? AND number > 0";
1864    $total_num = db_get_one($sql, $params);
1865
1866    // 件数指定がない場合は全件取得
1867    if (is_null($page_size)) {
1868        $page = 1;
1869        $page_size = $total_num;
1870    }
1871
1872    $sql = "SELECT ctc.*, c_member.nickname " .
1873        " FROM c_commu_topic_comment AS ctc" .
1874            " LEFT JOIN c_member USING (c_member_id)" .
1875        " WHERE ctc.c_commu_topic_id = ? AND ctc.number > 0 " .
1876        " ORDER BY ctc.r_datetime DESC";
1877    $lst = db_get_all_page($sql, $page, $page_size, $params);
1878
1879    if ($total_num != 0) {
1880        $total_page_num = ceil($total_num / $page_size);
1881        if ($page >= $total_page_num) {
1882            $next = false;
1883        } else {
1884            $next = true;
1885        }
1886        if ($page <= 1) {
1887            $prev = false;
1888        } else {
1889            $prev = true;
1890        }
1891    }
1892    $lst = array_reverse($lst);
1893
1894    $start = reset($lst);
1895    $start_num = $start['number'];
1896
1897    $end = end($lst);
1898    $end_num = $end['number'];
1899
1900    return array($lst, $prev, $next, $total_num, $start_num, $end_num);
1901}
1902
1903function db_commu_c_commu_topic_comment4c_commu_topic_comment_id_3($c_commu_topic_comment_id)
1904{
1905    $sql = "SELECT tc.*,cm.nickname FROM c_commu_topic_comment AS tc " .
1906            " LEFT JOIN c_member as cm ON cm.c_member_id = tc.c_member_id " .
1907            " WHERE tc.c_commu_topic_comment_id = ?";
1908    $params = array(intval($c_commu_topic_comment_id));
1909    return db_get_row($sql, $params);
1910}
1911
1912function db_commu_c_event_member_list4c_commu_topic_id($c_commu_topic_id, $page, $page_size)
1913{
1914    $sql = "SELECT cm.* FROM c_member as cm, c_event_member as cem" .
1915            " WHERE cm.c_member_id = cem.c_member_id" .
1916            " AND cem.c_commu_topic_id = ?";
1917    $params = array(intval($c_commu_topic_id));
1918    return db_get_all_page($sql, $page, $page_size, $params);
1919}
1920
1921function db_commu_count_c_event_member_list4c_commu_topic_id($c_commu_topic_id)
1922{
1923    $sql = "SELECT COUNT(*) FROM c_member as cm, c_event_member as cem" .
1924            " WHERE cm.c_member_id = cem.c_member_id" .
1925            " AND cem.c_commu_topic_id = ?";
1926    $params = array(intval($c_commu_topic_id));
1927    return db_get_one($sql, $params);
1928}
1929
1930function db_commu_c_event_mail_list4c_commu_topic_id($c_commu_topic_id, $excepted_id = 0)
1931{
1932    $sql = 'SELECT c_member_id FROM c_event_member WHERE c_commu_topic_id = ?';
1933    $params = array(intval($c_commu_topic_id));
1934    $list = db_get_col($sql, $params);
1935
1936    $result = array();
1937    foreach ($list as $c_member_id) {
1938        if ($c_member_id != $excepted_id) {
1939            $result[] = db_member_c_member4c_member_id_LIGHT($c_member_id);
1940        }
1941    }
1942    return $result;
1943}
1944
1945function db_commu_c_event_mail_confirm_list4c_member_ids($c_member_ids)
1946{
1947    if (!$c_member_ids) {
1948        return array();
1949    }
1950    $c_member_id_str = implode(',', array_map('intval', $c_member_ids));
1951    $sql = "SELECT * FROM c_member" .
1952            " WHERE c_member_id IN (".$c_member_id_str.")";
1953    return db_get_all($sql);
1954}
1955
1956function db_commu_year4null()
1957{
1958    $y = date('Y');
1959    return array($y, $y+1);
1960}
1961
1962function db_commu_is_c_event_member_2($c_commu_topic_id, $c_member_id)
1963{
1964  $sql = "SELECT COUNT(*) FROM c_event_member" .
1965      " WHERE c_commu_topic_id = ?".
1966      " AND c_member_id = ?";
1967  $params = array(intval($c_commu_topic_id), intval($c_member_id));
1968  return db_get_one($sql, $params);
1969}
1970
1971function db_commu_event4c_member_id($year, $month, $day, $c_member_id)
1972{
1973    $sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
1974    $params = array(intval($c_member_id));
1975    $ids = db_get_col($sql, $params);
1976    $ids = implode(", ", $ids);
1977    if (!$ids) {
1978        return array();
1979    }
1980
1981    $today = sprintf("%04d-%02d-%02d", $year, $month, $day);
1982    $sql = "SELECT * FROM c_commu_topic" .
1983        " WHERE c_commu_id IN ($ids)" .
1984        " AND event_flag = 1" .
1985        " AND open_date = ?";
1986    $params = array($today);
1987    $list = db_get_all($sql, $params);
1988
1989    foreach ($list as $key => $item) {
1990        $list[$key]['is_join'] = db_commu_is_c_event_member_2($item['c_commu_topic_id'], $c_member_id);
1991    }
1992    return $list;
1993}
1994
1995function db_commu_c_event_member_list4c_commu_topic_id_2($c_commu_topic_id, $page_size, $page)
1996{
1997    $sql = "SELECT cm.* FROM c_member AS cm, c_event_member AS cem" .
1998            " WHERE cm.c_member_id = cem.c_member_id " .
1999            " AND cem.c_commu_topic_id = ?";
2000    $params = array(intval($c_commu_topic_id));
2001    $list[0] = db_get_all_page($sql, $page, $page_size, $params);
2002
2003    $total_c_event_member = db_commu_count_c_event_member_list4c_commu_topic_id_2($c_commu_topic_id);
2004    $start_num = ($page-1) * $page_size + 1;
2005    $end_num   = $page * $page_size;
2006    if ($end_num > $total_c_event_member) {
2007        $end_num = $total_c_event_member;
2008    }
2009    $end_page = ceil($total_c_event_member / $page_size);
2010
2011    $list[1] = ($start_num != 1);
2012    $list[2] = ($end_num != $total_c_event_member);
2013
2014    return $list;
2015}
2016
2017function db_commu_count_c_event_member_list4c_commu_topic_id_2($c_commu_topic_id)
2018{
2019    $sql = "SELECT COUNT(*) FROM c_member AS cm, c_event_member AS cem" .
2020            " WHERE cm.c_member_id = cem.c_member_id" .
2021            " AND cem.c_commu_topic_id = ?";
2022    $params = array(intval($c_commu_topic_id));
2023    return db_get_one($sql, $params);
2024}
2025
2026/**
2027 * 非公開コミュニティへの承認なし参加フラグが立っているかどうか
2028 */
2029function db_commu_c_commu4c_admin_invite_id($c_commu_id, $c_member_id_to)
2030{
2031    // すでにフラグが立っている
2032    $sql = 'SELECT c_commu_admin_invite_id FROM c_commu_admin_invite' .
2033            ' WHERE c_commu_id = ? AND c_member_id_to = ?';
2034    $params = array(intval($c_commu_id), intval($c_member_id_to));
2035    $result = db_get_one($sql, $params);
2036    if ($result) {
2037        return $result;
2038    } else {
2039        return false;
2040    }
2041}
2042
2043/**
2044 * コミュニティメンバーのリストを得る
2045 */
2046function db_commu_c_commu_member_id_list4c_commu_id($c_commu_id)
2047{
2048    $sql = 'SELECT c_member_id FROM c_commu_member' .
2049            ' WHERE c_commu_id = ? AND is_receive_message = 1';
2050
2051    $params = array(intval($c_commu_id));
2052    $lst = db_get_col($sql, $params);
2053    return $lst;
2054}
2055
2056?><?php
2057/**
2058 * @copyright 2005-2008 OpenPNE Project
2059 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
2060 */
2061
2062//--- c_commu
2063
2064/**
2065 * コミュニティ作成
2066 *
2067 * @param  int     $c_member_id 管理者のメンバーID
2068 * @param  string  $name  コミュニティ名
2069 * @param  int     $c_commu_category_id
2070 * @param  string  $info  説明文
2071 * @param  enum('public', 'authpublic', 'authprivate')  $public_flag
2072 * @return int  insert_id
2073 */
2074function db_commu_insert_c_commu($c_member_id, $name, $c_commu_category_id, $info, $public_flag)
2075{
2076    $data = array(
2077        'name' => $name,
2078        'c_member_id_admin' => intval($c_member_id),
2079        'info' => $info,
2080        'c_commu_category_id' => intval($c_commu_category_id),
2081        'public_flag' => $public_flag,
2082        'r_datetime' => db_now(),
2083        'r_date' => db_now(),
2084        'u_datetime' => db_now(),
2085        'image_filename' => '',
2086    );
2087    return db_insert('c_commu', $data);
2088}
2089
2090/**
2091 * コミュニティ設定変更
2092 *
2093 * @param   int    $c_commu_id
2094 * @param   string $name
2095 * @param   int    $c_commu_category_id
2096 * @param   string $info
2097 * @param   enum(string or int) $public_flag
2098 *                      ('public'(0), 'authpublic'(1), 'authprivate'(2))
2099 * @return bool
2100 */
2101function db_commu_update_c_commu($c_commu_id,
2102    $name, $topic_authority, $c_commu_category_id, $info, $public_flag,
2103    $image_filename = '', $is_send_join_mail = 1)
2104{
2105    //function cacheの削除
2106    cache_drop_c_commu($c_commu_id);
2107
2108    $data = array(
2109        'name' => $name,
2110        'topic_authority' => $topic_authority,
2111        'info' => $info,
2112        'c_commu_category_id' => intval($c_commu_category_id),
2113        'public_flag' => $public_flag,
2114        'is_send_join_mail' => (bool)$is_send_join_mail,
2115        'u_datetime' => db_now(),
2116    );
2117
2118    if ($image_filename) $data['image_filename'] = $image_filename;
2119
2120    $where = array(
2121        'c_commu_id' => intval($c_commu_id),
2122    );
2123
2124    return db_update('c_commu', $data, $where);
2125}
2126
2127/**
2128 * コミュニティ写真更新
2129 */
2130function db_commu_update_c_commu_image_filename($c_commu_id, $image_filename)
2131{
2132    //function cacheの削除
2133    cache_drop_c_commu($c_commu_id);
2134
2135    $data = array('image_filename' => $image_filename);
2136    $where = array('c_commu_id' => intval($c_commu_id));
2137    return db_update('c_commu', $data, $where);
2138}
2139
2140/**
2141 * コミュニティ写真削除
2142 */
2143function db_commu_delete_c_commu_image_filename($c_commu_id)
2144{
2145    //function cacheの削除
2146    cache_drop_c_commu($c_commu_id);
2147
2148    $data = array('image_filename' => '');
2149    $where = array('c_commu_id' => intval($c_commu_id));
2150    return db_update('c_commu', $data, $where);
2151}
2152
2153/**
2154 * 管理者交代
2155 *
2156 * @param   int $c_commu_admin_confirm
2157 * @param   int $u : 自分のc_membmer_id
2158 * @return bool
2159 */
2160function db_commu_update_c_commu_c_member_id_admin($c_commu_id, $c_member_id)
2161{
2162    $data = array('c_member_id_admin' => intval($c_member_id));
2163    $where = array('c_commu_id' => intval($c_commu_id));
2164    if (!db_update('c_commu', $data, $where)) {
2165        return false;
2166    }
2167    return db_commu_delete_c_commu_admin_confirm4c_commu_id($c_commu_id);
2168}
2169
2170/**
2171 * 副管理者に指名
2172 *
2173 * @param   int $c_commu_sub_admin_confirm
2174 * @param   int $u : 自分のc_membmer_id
2175 * @return bool
2176 */
2177function db_commu_update_c_commu_c_member_id_sub_admin($c_commu_id, $c_member_id)
2178{
2179    $data = array('c_member_id_sub_admin' => intval($c_member_id));
2180    $where = array('c_commu_id' => intval($c_commu_id));
2181    if (!db_update('c_commu', $data, $where)) {
2182        return false;
2183    }
2184    return db_commu_delete_c_commu_sub_admin_confirm4c_commu_id($c_commu_id);
2185}
2186
2187/**
2188 * 登録時に強制参加させるかどうかを設定
2189 */
2190function db_commu_update_is_regist_join($c_commu_id, $value = 0)
2191{
2192    $data = array('is_regist_join' => (bool)$value);
2193    $where = array('c_commu_id' => intval($c_commu_id));
2194    return db_update('c_commu', $data, $where);
2195}
2196
2197//--- confirm
2198
2199/**
2200 * コミュニティ参加要請を削除
2201 */
2202function db_commu_delete_c_commu_member_confirm($c_commu_member_confirm_id)
2203{
2204    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_commu_member_confirm_id = ?';
2205    $params = array(intval($c_commu_member_confirm_id));
2206    return db_query($sql, $params);
2207}
2208
2209/**
2210 * コミュニティ参加要請を承認
2211 */
2212function db_commu_insert_c_commu_member($c_commu_member_confirm_id)
2213{
2214    $confirm = db_commu_c_commu_member_confirm4c_commu_member_confirm_id($c_commu_member_confirm_id);
2215    $data = array(
2216        'c_commu_id' => intval($confirm['c_commu_id']),
2217        'c_member_id' => intval($confirm['c_member_id']),
2218        'r_datetime' => db_now(),
2219    );
2220    db_insert('c_commu_member', $data);
2221
2222    // 非公開コミュニティに管理者から招待されている場合は招待フラグ削除
2223    $admin_invite = db_commu_c_commu4c_admin_invite_id($confirm['c_commu_id'], $confirm['c_member_id']);
2224    if ($admin_invite) {
2225        db_commu_delete_c_commu_admin_invite($admin_invite);
2226    }
2227
2228    return db_commu_delete_c_commu_member_confirm($c_commu_member_confirm_id);
2229}
2230
2231/**
2232 * コミュニティ参加リクエスト
2233 */
2234function db_commu_insert_c_commu_member_confirm($c_commu_id, $c_member_id, $message = '')
2235{
2236    $data = array(
2237        'c_commu_id' => intval($c_commu_id),
2238        'c_member_id' => intval($c_member_id),
2239        'message' => $message,
2240        'r_datetime' => db_now(),
2241    );
2242    return db_insert('c_commu_member_confirm', $data);
2243}
2244
2245/**
2246 * コミュニティ管理者交代リクエスト
2247 */
2248function db_commu_insert_c_commu_admin_confirm($c_commu_id, $c_member_id, $message = '')
2249{
2250    $data = array(
2251        'c_commu_id' => intval($c_commu_id),
2252        'c_member_id_to' => intval($c_member_id),
2253        'message' => $message,
2254        'r_datetime' => db_now(),
2255    );
2256    return db_insert('c_commu_admin_confirm', $data);
2257}
2258
2259/**
2260 * コミュニティ副管理者交代リクエスト
2261 */
2262function db_commu_insert_c_commu_sub_admin_confirm($c_commu_id, $c_member_id, $message = '')
2263{
2264    $data = array(
2265        'c_commu_id' => intval($c_commu_id),
2266        'c_member_id_to' => intval($c_member_id),
2267        'message' => $message,
2268        'r_datetime' => db_now(),
2269    );
2270    return db_insert('c_commu_sub_admin_confirm', $data);
2271}
2272
2273/**
2274 * 管理者交代の要請を削除
2275 *
2276 * @param   int $c_commu_admin_confirm_id
2277 */
2278function db_commu_delete_c_commu_admin_confirm4id($c_commu_admin_confirm_id)
2279{
2280    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_admin_confirm_id = ?';
2281    $params = array(intval($c_commu_admin_confirm_id));
2282    return db_query($sql, $params);
2283}
2284
2285/**
2286 * 副管理者の要請を削除
2287 *
2288 * @param   int $c_commu_sub_admin_confirm_id
2289 */
2290function db_commu_delete_c_commu_sub_admin_confirm4id($c_commu_sub_admin_confirm_id)
2291{
2292    $sql = 'DELETE FROM c_commu_sub_admin_confirm WHERE c_commu_sub_admin_confirm_id = ?';
2293    $params = array(intval($c_commu_sub_admin_confirm_id));
2294    return db_query($sql, $params);
2295}
2296
2297/**
2298 * コミュニティIDから管理者交代要請を削除
2299 */
2300function db_commu_delete_c_commu_admin_confirm4c_commu_id($c_commu_id)
2301{
2302    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_id = ?';
2303    $params = array(intval($c_commu_id));
2304    return db_query($sql, $params);
2305}
2306
2307/**
2308 * コミュニティIDから副管理者要請を削除
2309 */
2310function db_commu_delete_c_commu_sub_admin_confirm4c_commu_id($c_commu_id)
2311{
2312    $sql = 'DELETE FROM c_commu_sub_admin_confirm WHERE c_commu_id = ?';
2313    $params = array(intval($c_commu_id));
2314    return db_query($sql, $params);
2315}
2316
2317//--- topic
2318
2319/**
2320 * トピック削除
2321 */
2322function db_commu_delete_c_commu_topic($c_commu_topic_id)
2323{
2324    //function cacheの削除
2325    cache_drop_c_commu_topic($c_commu_topic_id);
2326
2327    // c_commu_topic_comment(画像)
2328    $sql = 'SELECT image_filename1, image_filename2, image_filename3, filename' .
2329            ' FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
2330    $params = array(intval($c_commu_topic_id));
2331
2332    $topic_comment_list = db_get_all($sql, $params);
2333    foreach ($topic_comment_list as $topic_comment) {
2334        db_image_data_delete($topic_comment['image_filename1']);
2335        db_image_data_delete($topic_comment['image_filename2']);
2336        db_image_data_delete($topic_comment['image_filename3']);
2337        db_file_delete_c_file($topic_comment['filename']);
2338    }
2339
2340    $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
2341    db_query($sql, $params);
2342
2343    $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ?';
2344    db_query($sql, $params);
2345
2346    $sql = 'DELETE FROM c_commu_topic WHERE c_commu_topic_id = ?';
2347    db_query($sql, $params);
2348}
2349
2350//--- topic_comment
2351
2352/**
2353 * トピックコメント書き込み
2354 *
2355 * @param   int    $c_commu_id
2356 * @param   int    $c_commu_topic_id
2357 * @param   int    $c_member_id
2358 * @param   string $body
2359 * @return int insert_id
2360 */
2361function db_commu_insert_c_commu_topic_comment($c_commu_id, $c_commu_topic_id, $c_member_id, $body)
2362{
2363    cache_drop_c_commu_list4c_member_id($c_member_id);
2364
2365    $number = db_commu_c_commu_topic_comment_number4c_commu_topic_id($c_commu_topic_id);
2366
2367    $data = array(
2368        'c_commu_id' => intval($c_commu_id),
2369        'c_member_id' => intval($c_member_id),
2370        'c_commu_topic_id' => intval($c_commu_topic_id),
2371        'number' => intval($number),
2372        'body' => $body,
2373        'r_datetime' => db_now(),
2374        'r_date' => db_now(),
2375        'image_filename1' => '',
2376        'image_filename2' => '',
2377        'image_filename3' => '',
2378        'filename' => '',
2379    );
2380    return db_insert('c_commu_topic_comment', $data);
2381}
2382
2383/**
2384 * トピックコメント書き込み
2385 */
2386function db_commu_insert_c_commu_topic_comment_2($c_member_id,$target_c_commu_topic_id,$body)
2387{
2388    $c_commu_topic = db_commu_c_commu_topic4c_commu_topic_id($target_c_commu_topic_id);
2389
2390    $target_c_commu_topic_id = $c_commu_topic['c_commu_topic_id'];
2391    $target_c_commu_id  = $c_commu_topic['c_commu_id'];
2392
2393    return db_commu_insert_c_commu_topic_comment($target_c_commu_id, $target_c_commu_topic_id, $c_member_id, $body);
2394}
2395
2396function db_commu_update_c_commu_topic_comment_images($c_commu_topic_comment_id, $image_filename1, $image_filename2, $image_filename3)
2397{
2398    $data = array(
2399        'image_filename1' => strval($image_filename1),
2400        'image_filename2' => strval($image_filename2),
2401        'image_filename3' => strval($image_filename3),
2402    );
2403    $where = array('c_commu_topic_comment_id' => intval($c_commu_topic_comment_id));
2404    return db_update('c_commu_topic_comment', $data, $where);
2405}
2406
2407function db_commu_update_c_commu_topic_comment_file($c_commu_topic_comment_id, $filename)
2408{
2409    $data = array(
2410        'filename' => strval($filename),
2411    );
2412    $where = array('c_commu_topic_comment_id' => intval($c_commu_topic_comment_id));
2413    return db_update('c_commu_topic_comment', $data, $where);
2414}
2415
2416/**
2417 * 掲示板書き込みに画像を追加する(メールからの投稿)
2418 */
2419function db_commu_update_c_commu_topic_comment_image($c_commu_topic_comment_id, $image_filename, $image_num)
2420{
2421    $data = array(
2422        'image_filename'.intval($image_num) => $image_filename,
2423    );
2424    $where = array(
2425        'c_commu_topic_comment_id' => intval($c_commu_topic_comment_id),
2426    );
2427    return db_update('c_commu_topic_comment', $data, $where);
2428}
2429
2430/**
2431 * トピックコメント削除
2432 */
2433function db_commu_delete_c_commu_topic_comment($c_commu_topic_comment_id)
2434{
2435    $sql = 'SELECT image_filename1, image_filename2, image_filename3, filename' .
2436        ' FROM c_commu_topic_comment' .
2437        ' WHERE c_commu_topic_comment_id = ?';
2438    $params = array(intval($c_commu_topic_comment_id));
2439    $topic_comment = db_get_row($sql, $params);
2440    db_image_data_delete($topic_comment['image_filename1']);
2441    db_image_data_delete($topic_comment['image_filename2']);
2442    db_image_data_delete($topic_comment['image_filename3']);
2443    db_file_delete_c_file($topic_comment['filename']);
2444
2445    $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_comment_id = ?';
2446    return db_query($sql, $params);
2447}
2448
2449//--- event
2450
2451function db_commu_update_c_commu_topic($c_commu_topic_id, $topic)
2452{
2453    $data = array(
2454        'name'       => $topic['name'],
2455        'event_flag' => (bool)$topic['event_flag'],
2456        'capacity' => intval($topic['capacity']),
2457        'r_datetime' => db_now(),
2458        'r_date' => db_now(),
2459        'u_datetime' => db_now(),
2460    );
2461
2462    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
2463        $open_date = '0000-01-01';
2464        $invite_period = '0000-01-01';
2465    } else {
2466        $open_date = '0000-00-00';
2467        $invite_period = '0000-00-00';
2468    }
2469
2470    if (isset($topic['open_date']) && $topic['open_date']) {
2471        $open_date = $topic['open_date'];
2472    }
2473
2474    if (isset($topic['invite_period']) && $topic['invite_period']) {
2475        $invite_period = $topic['invite_period'];
2476    }
2477
2478    if ($data['event_flag']) {
2479        $data += array(
2480            'open_date'         => $open_date,
2481            'open_date_comment' => $topic['open_date_comment'],
2482            'open_pref_id'      => intval($topic['open_pref_id']),
2483            'open_pref_comment' => $topic['open_pref_comment'],
2484            'invite_period'     => $invite_period,
2485        );
2486    }
2487    $where = array('c_commu_topic_id' => intval($c_commu_topic_id));
2488    return db_update('c_commu_topic', $data, $where);
2489}
2490
2491function db_commu_update_c_commu_topic_comment($c_commu_topic_id, $topic_comment)
2492{
2493    $data = array(
2494        'body' => $topic_comment['body'],
2495        'r_datetime' => db_now(),
2496    );
2497    for ($i = 1; $i <= 3; $i++) {
2498        $key = 'image_filename'.$i;
2499        if (!empty($topic_comment[$key])) {
2500            $data[$key] = $topic_comment[$key];
2501        }
2502    }
2503    if (!empty($topic_comment['filename4'])) {
2504        $data['filename'] = $topic_comment['filename4'];
2505    }
2506    $where = array(
2507        'c_commu_topic_id' => intval($c_commu_topic_id),
2508        'number' => 0,
2509    );
2510    return db_update('c_commu_topic_comment', $data, $where);
2511}
2512
2513function db_commu_delete_c_commu_topic_comment_image($c_commu_topic_id, $image_num)
2514{
2515    $data = array(
2516        'image_filename'.intval($image_num) => '',
2517    );
2518    $where = array(
2519        'c_commu_topic_id' => intval($c_commu_topic_id),
2520        'number' => 0,
2521    );
2522    return db_update('c_commu_topic_comment', $data, $where);
2523}
2524
2525function db_commu_delete_c_commu_topic_comment_file($c_commu_topic_id)
2526{
2527    $data = array(
2528        'filename' => '',
2529    );
2530    $where = array(
2531        'c_commu_topic_id' => intval($c_commu_topic_id),
2532        'number' => 0,
2533    );
2534    return db_update('c_commu_topic_comment', $data, $where);
2535}
2536
2537function db_commu_insert_c_commu_topic($topic)
2538{
2539    //function cacheの削除
2540    cache_drop_c_commu_topic($topic['c_commu_id']);
2541    cache_drop_c_commu_list4c_member_id($topic['c_member_id']);
2542
2543    $data = array(
2544        'c_commu_id'  => intval($topic['c_commu_id']),
2545        'c_member_id' => intval($topic['c_member_id']),
2546        'name'        => $topic['name'],
2547        'event_flag'  => (bool)$topic['event_flag'],
2548        'capacity'  => intval($topic['capacity']),
2549        'r_datetime'  => db_now(),
2550        'r_date'      => db_now(),
2551        'u_datetime'  => db_now(),
2552    );
2553
2554    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
2555        $open_date = '0000-01-01';
2556        $invite_period = '0000-01-01';
2557    } else {
2558        $open_date = '0000-00-00';
2559        $invite_period = '0000-00-00';
2560    }
2561
2562    if (isset($topic['open_date']) && $topic['open_date']) {
2563        $open_date = $topic['open_date'];
2564    }
2565
2566    if (isset($topic['invite_period']) && $topic['invite_period']) {
2567        $invite_period = $topic['invite_period'];
2568    }
2569
2570    if ($data['event_flag']) {
2571        $data += array(
2572            'open_date'         => $open_date,
2573            'open_date_comment' => $topic['open_date_comment'],
2574            'open_pref_id'      => intval($topic['open_pref_id']),
2575            'open_pref_comment' => $topic['open_pref_comment'],
2576            'invite_period'     => $invite_period,
2577        );
2578    }
2579    return db_insert('c_commu_topic', $data);
2580}
2581
2582function db_commu_insert_c_commu_topic_comment_3($comment)
2583{
2584    cache_drop_c_commu_list4c_member_id($comment['c_member_id']);
2585
2586    db_commu_update_c_commu_topic_u_datetime(intval($comment['c_commu_topic_id']));
2587
2588    $data = array(
2589        'c_commu_id'       => intval($comment['c_commu_id']),
2590        'c_member_id'      => intval($comment['c_member_id']),
2591        'body'             => strval($comment['body']),
2592        'number'           => intval($comment['number']),
2593        'c_commu_topic_id' => intval($comment['c_commu_topic_id']),
2594        'image_filename1'  => strval($comment['image_filename1']),
2595        'image_filename2'  => strval($comment['image_filename2']),
2596        'image_filename3'  => strval($comment['image_filename3']),
2597        'filename'  => strval($comment['filename4']),
2598        'r_datetime'       => db_now(),
2599        'r_date'           => db_now(),
2600    );
2601
2602    return db_insert('c_commu_topic_comment', $data);
2603}
2604
2605/**
2606 * イベント管理メンバー追加
2607 */
2608function db_commu_insert_c_event_member_as_admin($c_commu_topic_id, $c_member_id)
2609{
2610    $data = array(
2611        'c_commu_topic_id' => intval($c_commu_topic_id),
2612        'c_member_id' => intval($c_member_id),
2613        'is_admin' => 1,
2614        'r_datetime' => db_now(),
2615    );
2616    return db_insert('c_event_member', $data);
2617}
2618
2619/**
2620 * イベント参加メンバー追加
2621 */
2622function db_commu_insert_c_event_member($c_commu_topic_id, $c_member_id)
2623{
2624    // 参加済みの場合は追加しない
2625    $sql = 'SELECT c_event_member_id FROM c_event_member' .
2626            ' WHERE c_commu_topic_id = ? AND c_member_id = ?';
2627    $params = array(intval($c_commu_topic_id), intval($c_member_id));
2628    if (db_get_one($sql, $params)) {
2629        return false;
2630    }
2631
2632    $data = array(
2633        'c_commu_topic_id' => intval($c_commu_topic_id),
2634        'c_member_id' => intval($c_member_id),
2635        'is_admin' => 0,
2636        'r_datetime' => db_now(),
2637    );
2638    return db_insert('c_event_member', $data);
2639}
2640
2641/**
2642 * イベント参加メンバー削除
2643 */
2644function db_commu_delete_c_event_member($c_commu_topic_id, $c_member_id)
2645{
2646    $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ? AND c_member_id = ?';
2647    $params = array(intval($c_commu_topic_id), intval($c_member_id));
2648    db_query($sql, $params);
2649}
2650
2651/**
2652 * 現在イベントに参加できるかどうか
2653 */
2654function db_commu_is_event_join_date($c_commu_topic_id)
2655{
2656    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
2657        $sql = 'SELECT c_commu_topic_id FROM c_commu_topic'
2658             . ' WHERE c_commu_topic_id = ?'
2659             . ' AND (open_date >= ? OR open_date = \'0000-01-01\')'
2660             . ' AND (invite_period >= ? OR invite_period = \'0000-01-01\')';
2661    } else {
2662        $sql = 'SELECT c_commu_topic_id FROM c_commu_topic'
2663             . ' WHERE c_commu_topic_id = ?'
2664             . ' AND (open_date >= ? OR open_date = \'0000-00-00\')'
2665             . ' AND (invite_period >= ? OR invite_period = \'0000-00-00\')';
2666    }
2667    $now = date('Y-m-d');
2668    $params = array(intval($c_commu_topic_id), $now, $now);
2669    return (bool)db_get_row($sql, $params);
2670}
2671
2672//--- commu_member
2673
2674/**
2675 * コミュニティに参加
2676 */
2677function db_commu_join_c_commu($c_commu_id, $c_member_id)
2678{
2679    //function cache削除
2680    cache_drop_c_commu($c_commu_id);
2681    cache_drop_c_commu_list4c_member_id($c_member_id);
2682
2683    $data = array(
2684        'c_commu_id'  => intval($c_commu_id),
2685        'c_member_id' => intval($c_member_id),
2686        'r_datetime'  => db_now(),
2687    );
2688    return db_insert('c_commu_member', $data);
2689}
2690
2691/**
2692 * コミュニティからメンバーを削除
2693 */
2694function db_commu_delete_c_commu_member($c_commu_id, $c_member_id)
2695{
2696    //function cache削除
2697    cache_drop_c_commu($c_commu_id);
2698    cache_drop_c_commu_list4c_member_id($c_member_id);
2699
2700    //おすすめレビューを削除
2701    $sql = 'DELETE FROM c_commu_review' .
2702           ' WHERE c_commu_id = ? AND c_member_id = ?';
2703    $params = array(intval($c_commu_id), intval($c_member_id));
2704    db_query($sql, $params);
2705
2706    //副管理者なら副管理者のポストを空に
2707    $sql = 'UPDATE c_commu' .
2708           ' SET c_member_id_sub_admin = 0' .
2709           ' WHERE c_commu_id = ? AND c_member_id_sub_admin = ?';
2710    db_query($sql, $params);
2711
2712    //管理者承認依頼
2713    $sql = 'DELETE FROM c_commu_admin_confirm' .
2714           ' WHERE c_commu_id = ? AND c_member_id_to = ?';
2715    db_query($sql, $params);
2716
2717    //副管理者承認依頼
2718    $sql = 'DELETE FROM c_commu_sub_admin_confirm' .
2719           ' WHERE c_commu_id = ? AND c_member_id_to = ?';
2720    db_query($sql, $params);
2721
2722    //コミュニティから退会
2723    $sql = 'DELETE FROM c_commu_member' .
2724           ' WHERE c_commu_id = ? AND c_member_id = ?';
2725    db_query($sql, $params);
2726}
2727
2728/**
2729 * コミュニティお知らせメール受信設定変更
2730 */
2731function db_commu_update_is_receive_mail($c_commu_id, $c_member_id, $is_receive_mail, $is_receive_mail_pc, $is_receive_message)
2732{
2733    $data = array(
2734        'is_receive_mail' => (bool)$is_receive_mail,
2735        'is_receive_mail_pc' => (bool)$is_receive_mail_pc,
2736        'is_receive_message' => (bool)$is_receive_message,
2737
2738    );
2739    $where = array(
2740        'c_commu_id'  => intval($c_commu_id),
2741        'c_member_id' => intval($c_member_id),
2742    );
2743    return db_update('c_commu_member', $data, $where);
2744}
2745
2746/**
2747 * 非公開コミュニティへの承認なし参加フラグを立てる
2748 */
2749function db_commu_insert_c_commu_admin_invite($c_commu_id, $c_member_id_to)
2750{
2751    // すでにフラグが立っている
2752    $sql = 'SELECT c_commu_admin_invite_id FROM c_commu_admin_invite' .
2753            ' WHERE c_commu_id = ? AND c_member_id_to = ?';
2754    $params = array(intval($c_commu_id), intval($c_member_id_to));
2755    if (db_get_one($sql, $params)) {
2756        return false;
2757    }
2758
2759    $data = array(
2760        'c_commu_id'  => intval($c_commu_id),
2761        'c_member_id_to' => intval($c_member_id_to),
2762        'r_datetime'  => db_now(),
2763    );
2764
2765    return db_insert('c_commu_admin_invite', $data);
2766}
2767
2768/**
2769 * 非公開コミュニティへの承認なし参加フラグを削除する
2770 */
2771function db_commu_delete_c_commu_admin_invite($c_commu_admin_invite_id)
2772{
2773    $sql = 'DELETE FROM c_commu_admin_invite WHERE c_commu_admin_invite_id = ?';
2774    $params = array(intval($c_commu_admin_invite_id));
2775    db_query($sql, $params);
2776}
2777
2778/**
2779 * メンバーの共通参加コミュニティ数を取得
2780 *
2781 * @param int $target_c_member_id , $u
2782 * @return int 参加コミュニティ数
2783 */
2784function db_common_commu_common_commu_id4c_member_id($target_c_member_id , $u)
2785{
2786
2787    // 相手のコミュニティリスト
2788    $sql = 'SELECT c_commu_id FROM c_commu_member ' .
2789            ' WHERE c_member_id = ?' .
2790            ' ORDER BY c_commu_id DESC ' ;
2791
2792    $params = array(intval($target_c_member_id));
2793    $f_commu_id_list = db_get_col($sql, $params);
2794
2795    if(is_null($f_commu_id_list)){
2796        return null;
2797    }
2798
2799    // 自分のコミュニティリスト
2800    $sql = 'SELECT c_commu_id FROM c_commu_member ' .
2801            ' WHERE c_member_id = ?' .
2802            ' ORDER BY c_commu_id DESC ';
2803
2804    $params = array(intval($u));
2805    $h_commu_id_list = db_get_col($sql, $params);
2806
2807    if(is_null($h_commu_id_list)){
2808        return null;
2809    }
2810
2811    //共通コミュニティリスト
2812    $common_commu_id_list = array_intersect($f_commu_id_list, $h_commu_id_list);
2813
2814    if(is_null($common_commu_id_list)){
2815        return null;
2816    }
2817
2818    return $common_commu_id_list;
2819
2820}
2821
2822/**
2823 * 共通参加コミュニティリスト
2824 */
2825function db_common_commu_common_commu_list4c_member_id($target_c_member_id, $u, $page, $page_size)
2826{
2827
2828    $common_commu_id_list = db_common_commu_common_commu_id4c_member_id($target_c_member_id, $u);
2829
2830    if(is_null($common_commu_id_list)){
2831        return null;
2832    }
2833
2834    $common_commu_id_str_list = implode(",", $common_commu_id_list);
2835
2836    $sql = "SELECT *" .
2837            " FROM c_commu" .
2838            " WHERE c_commu_id in (".$common_commu_id_str_list.")" .
2839            " ORDER BY c_commu_id DESC ";
2840
2841    $common_commu_list = db_get_all_page($sql, $page, $page_size);
2842
2843    foreach ($common_commu_list as $key => $value) {
2844        $common_commu_list[$key]['count_members'] =
2845            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
2846    }
2847
2848    $pager = array(
2849        "total_num" => count($common_commu_id_list),
2850        "disp_num"  => count($common_commu_list),
2851        "start_num" => 0,
2852        "end_num"   => 0,
2853        "total_page" => 0,
2854        "prev_page" => 0,
2855        "next_page" => 0,
2856    );
2857
2858    if ($pager['disp_num'] > 0) {
2859        $pager['start_num'] = ($page - 1) * $page_size + 1;
2860        $pager['end_num'] = $pager['start_num'] + $pager['disp_num'] - 1;
2861    }
2862
2863    if ($pager['total_num']) {
2864        $pager['total_page'] = ceil($pager['total_num'] / $page_size);
2865
2866        if ($page < $pager['total_page']) {
2867            $pager['next_page'] = max($page + 1, 1);
2868        }
2869        if ($page > 1) {
2870            $pager['prev_page'] = min($page - 1, $pager['total_page']);
2871        }
2872    }
2873
2874    return array($common_commu_list, $pager);
2875
2876}
2877
2878/**
2879 * コミュニティ参加要請IDを取得
2880 */
2881function db_commu_get_c_commu_member_confirm_id($c_member_id, $c_commu_id)
2882{
2883    $sql = 'SELECT c_commu_member_confirm_id FROM c_commu_member_confirm WHERE c_commu_id = ? AND  c_member_id = ?';
2884    $params = array(intval($c_commu_id), intval($c_member_id));
2885    return db_get_one($sql, $params);
2886}
2887
2888/**
2889 * トピック検索
2890 */
2891function db_commu_search_c_commu_topic(
2892            $search_word,
2893            $page_size,
2894            $page,
2895            $type = 'all',
2896            $c_commu_id = 0)
2897{
2898    if(!$search_word){
2899        return db_commu_new_topic_list($page_size,$page,$type,$c_commu_id);
2900    }
2901
2902    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
2903        $select = 'SELECT distinct on (ct.c_commu_topic_id) c.name AS commu_name, c.image_filename AS commu_image'
2904                . ', ct.*, ctc2.max_datetime';
2905    } else {
2906        $select = 'SELECT c.name AS commu_name, c.image_filename AS commu_image'
2907                . ', ct.*, ct.r_datetime AS max_datetime';
2908    }
2909
2910    $from = ' FROM c_commu AS c, c_commu_topic AS ct, c_commu_topic_comment AS ctc';
2911    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
2912        $from .= ', (SELECT c_commu_topic_id, max(r_datetime) as max_datetime' .
2913                    ' FROM c_commu_topic_comment' .
2914                    ' GROUP BY c_commu_topic_id' .
2915                    ') AS ctc2';
2916    }
2917
2918    $params = array();
2919    $where = ' WHERE ct.c_commu_topic_id = ctc.c_commu_topic_id'
2920           . ' AND c.c_commu_id = ct.c_commu_id';
2921
2922    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
2923        $where .= ' AND ct.c_commu_topic_id = ctc2.c_commu_topic_id';
2924    }
2925
2926    if ($c_commu_id) {
2927        $where .= ' AND ct.c_commu_id = ?';
2928        $params[] = $c_commu_id;
2929    } else {
2930        $where .= " AND c.public_flag IN ('public', 'auth_sns')";
2931    }
2932    if ($search_word) {
2933        $words = explode(' ', $search_word);
2934        foreach ($words as $word) {
2935            $word = check_search_word($word);
2936
2937            $where .= ' AND ((ct.name LIKE ?) OR (ctc.body LIKE ?))';
2938            $params[] = '%'.$word.'%';
2939            $params[] = '%'.$word.'%';
2940        }
2941    }
2942    switch ($type) {
2943    case 'topic':
2944        $where .= ' AND event_flag = 0';
2945        break;
2946    case 'event':
2947        $where .= ' AND event_flag = 1';
2948        break;
2949    case 'all':
2950    default:
2951        break;
2952    }
2953    $group = ' GROUP BY ct.c_commu_topic_id';
2954    $order = ' ORDER BY max_datetime DESC';
2955
2956    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
2957        $sql = "SELECT sub_tbl.* FROM (" . $select . $from . $where . ") as sub_tbl " . $order;
2958    } else {
2959        $sql = $select . $from . $where . $group . $order;
2960    }
2961    $list = db_get_all_page($sql, $page, $page_size, $params);
2962
2963    foreach ($list as $key => $value) {
2964        $p = array((int)$value['c_commu_topic_id']);
2965        $sql = 'SELECT body FROM c_commu_topic_comment WHERE number = 0 AND c_commu_topic_id = ?';
2966        $list[$key]['body'] = db_get_one($sql, $p);
2967        $number = db_commu_get_max_number4topic($value['c_commu_topic_id']);
2968        $list[$key]['max_number'] = $number;
2969    }
2970
2971    $sql = 'SELECT COUNT(DISTINCT ct.c_commu_topic_id)' . $from . $where;
2972    $total_num = db_get_one($sql, $params);
2973
2974    if ($total_num != 0) {
2975        $total_page_num =  ceil($total_num / $page_size);
2976        $next = ($page < $total_page_num);
2977        $prev = ($page > 1);
2978    }
2979
2980    $start_num = ($page - 1) * $page_size + 1;
2981    $end_num   = $start_num + $page_size - 1 >= $total_num ? $total_num : $start_num + $page_size - 1;
2982
2983    return array($list, $prev, $next, $total_num, $start_num, $end_num);
2984}
2985
2986/*
2987 * トピック書き込み時間(u_datetime)を更新する
2988 */
2989function db_commu_update_c_commu_topic_u_datetime($c_commu_topic_id)
2990{
2991    $data = array(
2992        'u_datetime' => db_now(),
2993    );
2994    $where = array(
2995        'c_commu_topic_id' => intval($c_commu_topic_id),
2996    );
2997    return db_update('c_commu_topic', $data, $where);
2998}
2999
3000/*
3001 * 最終書き込みコメントの情報取得
3002 */
3003function db_commu_get_last_c_topic_comment($c_commu_topic_id)
3004{
3005    $sql = 'SELECT * FROM c_commu_topic_comment WHERE c_commu_topic_id = ? ORDER BY r_datetime DESC';
3006    $params = array(intval($c_commu_topic_id));
3007    return db_get_row($sql,$params);
3008}
3009
3010/**
3011 * トピック検索簡易版(キーワード無し)
3012 */
3013function db_commu_new_topic_list(
3014            $page_size,
3015            $page,
3016            $type = 'all',
3017            $c_commu_id = 0)
3018{
3019    $select = 'SELECT c.name AS commu_name, c.image_filename AS commu_image'
3020            . ' ,ct.*, ct.r_datetime AS max_datetime'
3021            . ' FROM c_commu AS c'
3022            . ' INNER JOIN c_commu_topic AS ct USING(c_commu_id) ';
3023
3024    $params = array();
3025    $where = ' WHERE 1';
3026
3027    if ($c_commu_id) {
3028        $where .= ' AND ct.c_commu_id = ?';
3029        $params[] = $c_commu_id;
3030    } else {
3031        $where .= " AND c.public_flag IN ('public', 'auth_sns')";
3032    }
3033    switch ($type) {
3034    case 'topic':
3035        $where .= ' AND event_flag = 0';
3036        break;
3037    case 'event':
3038        $where .= ' AND event_flag = 1';
3039        break;
3040    case 'all':
3041    default:
3042        break;
3043    }
3044    $order = ' ORDER BY max_datetime DESC';
3045
3046    $sql = $select .$where . $order;
3047    $list = db_get_all_page($sql, $page, $page_size, $params);
3048
3049    foreach ($list as $key => $value) {
3050        $p = array((int)$value['c_commu_topic_id']);
3051        $sql = 'SELECT body FROM c_commu_topic_comment WHERE number = 0 AND c_commu_topic_id = ?';
3052        $list[$key]['body'] = db_get_one($sql, $p);
3053        $number = db_commu_get_max_number4topic($value['c_commu_topic_id']);
3054        $list[$key]['max_number'] = $number;
3055    }
3056
3057    $sql = 'SELECT COUNT(c_commu_topic_id) FROM c_commu'
3058         . ' AS c INNER JOIN c_commu_topic USING(c_commu_id)' . $where;
3059    $total_num = db_get_one($sql, $params);
3060
3061    if ($total_num != 0) {
3062        $total_page_num =  ceil($total_num / $page_size);
3063        $next = ($page < $total_page_num);
3064        $prev = ($page > 1);
3065    }
3066
3067    $start_num = ($page - 1) * $page_size + 1;
3068    $end_num   = $start_num + $page_size - 1 >= $total_num ? $total_num : $start_num + $page_size - 1;
3069
3070    return array($list, $prev, $next, $total_num, $start_num, $end_num);
3071}
3072
3073?>
Note: See TracBrowser for help on using the repository browser.