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

source: OpenPNE/branches/2.8.x/webapp/lib/db/commu.php @ 2918

Last change on this file since 2918 was 2918, checked in by ogawa, 12 years ago

#763:募集期限を過ぎたイベントの参加、およびキャンセルが有効になっている

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