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

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

Last change on this file since 9380 was 9380, checked in by akamine, 12 years ago

#3107 承認待ちリストの各詳細画面の表示順を古い順に統一しました

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