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

source: OpenPNE/branches/work/takanashi/prj_senna/webapp/lib/db/commu.php @ 4963

Last change on this file since 4963 was 4963, checked in by takanashi, 15 years ago

OpenPNE with Senna

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