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

source: OpenPNE/branches/stable-2.12.x/webapp/lib/db/commu.php @ 9339

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

#3107 承認待ちリストで使用する関数定義名の修正と、各関数定義の際に使用する関数を修正

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