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

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

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

#3107 r9356,r9355の修正を2.10に反映

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