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

source: OpenPNE/branches/stable-2.10.x/webapp/lib/db/commu.php @ 8539

Last change on this file since 8539 was 8539, checked in by shingo, 12 years ago

#2992:アクション内にあるSQL文をDBファイル(webapp/lib/db/commu.php)に記述するように修正・不要な空行を削除

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