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

source: OpenPNE/trunk/webapp/lib/db/commu.php @ 11394

Last change on this file since 11394 was 11394, checked in by nagasawa, 13 years ago

#3816:マイフレンド・コミュニティ最新情報設定時にfunction cacheを削除するように修正

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