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

source: OpenPNE/branches/2_8/webapp/lib/db/commu.php @ 2296

Last change on this file since 2296 was 2296, checked in by takanashi, 13 years ago

#558:ファイルアップロード関連の改善。管理画面からのファイル削除、トピック削除契機のファイル削除など

File size: 93.9 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 null;
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    $ids = implode(", ", $c_commu_id_list);
802
803    $hint = db_mysql_hint('USE INDEX (r_datetime_c_commu_id)');
804    $sql = 'SELECT cct.c_commu_topic_id, cct.c_commu_id, MAX(cctc.r_datetime) as r_datetime, cct.c_member_id'.
805        ' 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'.
806        ' GROUP BY cctc.c_commu_topic_id'.
807        ' ORDER BY r_datetime DESC';
808    $c_commu_topic_list = db_get_all_limit($sql, 0, $limit);
809
810    foreach ($c_commu_topic_list as $key => $value) {
811        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
812        $c_commu_topic_list[$key]['nickname'] = $c_member['nickname'];
813
814        $sql = 'SELECT number, image_filename1, image_filename2, image_filename3' .
815               ' FROM c_commu_topic_comment' .
816               ' WHERE c_commu_topic_id = ? AND r_datetime = ?';
817        $params = array(intval($value['c_commu_topic_id']), $value['r_datetime']);
818        $temp = db_get_row($sql, $params);
819
820        $sql = 'SELECT name AS c_commu_name FROM c_commu WHERE c_commu_id = ?';
821        $c_commu_name = db_get_one($sql, $value['c_commu_id']);
822
823        $sql = 'SELECT name FROM c_commu_topic WHERE c_commu_topic_id = ?';
824        $c_commu_topic_name = db_get_one($sql, $value['c_commu_topic_id']);
825
826        //最新の書き込み番号
827        $number = db_commu_get_max_number4topic($value['c_commu_topic_id']);
828
829        $c_commu_topic_list[$key]['number'] = $number;
830        $c_commu_topic_list[$key]['image_filename1'] = $temp['image_filename1'];
831        $c_commu_topic_list[$key]['image_filename2'] = $temp['image_filename2'];
832        $c_commu_topic_list[$key]['image_filename3'] = $temp['image_filename3'];
833        $c_commu_topic_list[$key]['c_commu_name'] = $c_commu_name;
834        $c_commu_topic_list[$key]['c_commu_topic_name'] = $c_commu_topic_name;
835    }
836
837    return $c_commu_topic_list;
838}
839
840function db_commu_c_commu_topic_comment_list4c_member_id_2($c_member_id, $limit,$page)
841{
842    $sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
843    $c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
844    $ids = implode(", ", $c_commu_id_list);
845
846    $hint = db_mysql_hint('USE INDEX (r_datetime_c_commu_id)');
847    $sql = 'SELECT cct.c_commu_topic_id, cct.c_commu_id, MAX(cctc.r_datetime) as r_datetime, cct.c_member_id'.
848        ' 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'.
849        ' GROUP BY cctc.c_commu_topic_id'.
850        ' ORDER BY r_datetime DESC';
851    $c_commu_topic_list = db_get_all_limit($sql, ($page-1)*$limit, $limit);
852
853    foreach ($c_commu_topic_list as $key => $value) {
854        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
855        $c_commu_topic_list[$key]['nickname'] = $c_member['nickname'];
856
857        $sql = 'SELECT number, image_filename1, image_filename2, image_filename3' .
858               ' FROM c_commu_topic_comment ' .
859               ' WHERE c_commu_topic_id = ? AND r_datetime = ?';
860        $params = array(intval($value['c_commu_topic_id']), $value['r_datetime']);
861        $temp = db_get_row($sql, $params);
862
863        $sql = 'SELECT name AS c_commu_name FROM c_commu WHERE c_commu_id = ?';
864        $c_commu_name = db_get_one($sql, $value['c_commu_id']);
865
866        $sql = 'SELECT name FROM c_commu_topic WHERE c_commu_topic_id = ?';
867        $c_commu_topic_name = db_get_one($sql, $value['c_commu_topic_id']);
868
869        //最新の書き込み番号
870        $number = db_commu_get_max_number4topic($value['c_commu_topic_id']);
871
872        $c_commu_topic_list[$key]['number'] = $number;
873        $c_commu_topic_list[$key]['image_filename1'] = $temp['image_filename1'];
874        $c_commu_topic_list[$key]['image_filename2'] = $temp['image_filename2'];
875        $c_commu_topic_list[$key]['image_filename3'] = $temp['image_filename3'];
876        $c_commu_topic_list[$key]['c_commu_name'] = $c_commu_name;
877        $c_commu_topic_list[$key]['c_commu_topic_name'] = $c_commu_topic_name;
878    }
879
880    $sql = "SELECT count(DISTINCT ct.c_commu_topic_id)";
881    $sql .= " FROM c_commu_member AS cm, c_commu_topic_comment AS cc";
882    $sql .= ", c_commu AS c, c_commu_topic AS ct";
883    $sql .= " WHERE cm.c_member_id = ?";
884    $sql .= " AND cc.c_commu_id=cm.c_commu_id";
885    $sql .= " AND c.c_commu_id=cm.c_commu_id";
886    $sql .= " AND ct.c_commu_id=cm.c_commu_id";
887    $sql .= " AND ct.c_commu_topic_id=cc.c_commu_topic_id";
888    $params = array(intval($c_member_id));
889    $total_num = db_get_one($sql, $params);
890    if ($total_num != 0) {
891        $total_page_num =  ceil($total_num / $limit);
892        if ($page >= $total_page_num) {
893            $next = false;
894        } else {
895            $next = true;
896        }
897        if ($page <= 1) {
898            $prev = false;
899        } else {
900            $prev = true;
901        }
902    }
903    return array($c_commu_topic_list , $prev , $next,$total_num);
904}
905
906/**
907 * 参加コミュニティのリスト(2.6.2以降は未使用)
908 *
909 * @param int $c_member_id
910 * @param int $limit
911 * @return  array コミュニティ情報
912 */
913function db_commu_c_commu_list4c_member_id_3($c_member_id, $limit)
914{
915    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
916
917    if (!$is_recurred) {  //function cacheのために再帰処理を行う
918        $is_recurred = true;
919        $funcargs = func_get_args();
920        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
921    }
922
923    $is_recurred = false;
924
925    $sql = "SELECT c.* FROM c_commu_member AS cm, c_commu AS c" .
926       " WHERE cm.c_member_id=?" .
927       " AND c.c_commu_id=cm.c_commu_id" .
928       " ORDER BY RAND()";
929    $params = array(intval($c_member_id));
930    $c_commu_list = db_get_all_limit($sql, 0, $limit, $params);
931
932    foreach ($c_commu_list as $key => $value) {
933        $c_commu_list[$key]['count_commu_members'] =  db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
934    }
935    return $c_commu_list;
936}
937
938function 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)
939{
940    $sql = " SELECT cct.c_commu_topic_id, max(cctc.r_datetime) as newest_write_datetime " .
941            " FROM c_commu_topic as cct, c_commu_topic_comment as cctc " .
942            " WHERE cct.c_commu_topic_id = cctc.c_commu_topic_id ";
943
944    if ($topic_with_event) {
945        $sql .= " AND cct.event_flag = $event_flag";
946    }
947
948    $sql .= " AND cct.c_commu_id = ?" .
949            " GROUP BY c_commu_topic_id " .
950            " ORDER BY newest_write_datetime DESC";
951    $params = array(intval($c_commu_id));
952    $lst = db_get_all_page($sql, $page, $page_size, $params);
953
954    foreach ($lst as $key => $value) {
955        $sql = "SELECT cct.c_commu_topic_id, cct.name, cct.r_datetime, cctc.body , cctc.image_filename1, cctc.image_filename2, image_filename3" .
956               " FROM c_commu_topic as cct, c_commu_topic_comment as cctc" .
957               " WHERE cct.c_commu_topic_id = cctc.c_commu_topic_id" .
958               " AND cctc.number = 0" .
959               " AND cct.c_commu_topic_id = ?";
960        $params = array(intval($value['c_commu_topic_id']));
961        $lst[$key] = db_get_row($sql, $params);
962    }
963
964    foreach ($lst as $key => $value) {
965        $lst[$key]['is_c_event_member'] = _db_is_c_event_member($value['c_commu_topic_id'], $c_member_id);
966        $lst[$key]['is_c_topic_admin'] = _db_is_c_topic_admin($value['c_commu_topic_id'], $c_member_id);
967        $lst[$key]['write_num'] = db_commu_get_max_number4topic($value['c_commu_topic_id']);
968    }
969
970    $sql = 'SELECT COUNT(*) FROM c_commu_topic WHERE c_commu_id = ?';
971    if ($topic_with_event) {
972        $sql .= " AND event_flag = $event_flag";
973    }
974    $params = array(intval($c_commu_id));
975    $total_num = db_get_one($sql, $params);
976
977    if ($total_num != 0) {
978        $total_page_num = ceil($total_num / $page_size);
979        if ($page >= $total_page_num) {
980            $next = false;
981        } else {
982            $next = true;
983        }
984        if ($page <= 1) {
985            $prev = false;
986        } else {
987            $prev = true;
988        }
989    }
990    $start_num = ($page - 1) * $page_size + 1 ;
991    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
992
993    return array($lst, $prev, $next, $total_num, $start_num, $end_num);
994}
995
996function db_commu_c_topic4c_commu_topic_id($c_commu_topic_id)
997{
998    $sql = "SELECT ct.*, ctc.*, c_member.nickname" .
999        " FROM c_commu_topic AS ct" .
1000            " LEFT JOIN c_member USING (c_member_id)" .
1001            ", c_commu_topic_comment AS ctc" .
1002        " WHERE ct.c_commu_topic_id = ctc.c_commu_topic_id " .
1003            " AND ct.c_commu_topic_id = ?".
1004            " AND ctc.number = 0";
1005    $params = array(intval($c_commu_topic_id));
1006    return db_get_row($sql, $params);
1007}
1008
1009function db_commu_is_topic4c_commu_id($c_commu_id)
1010{
1011    $sql = 'SELECT c_commu_topic_id FROM c_commu_topic WHERE c_commu_id = ?';
1012    $params = array(intval($c_commu_id));
1013    return db_get_one($sql, $params);
1014}
1015
1016/**
1017 * IDからコミュニティトピックコメントの情報を取得
1018 *
1019 * @param int $c_commu_topic_comment_id
1020 * @return array
1021 */
1022function db_commu_c_commu_topic_comment4c_commu_topic_comment_id($c_commu_topic_comment_id)
1023{
1024    $sql = "SELECT ctc.*, ct.name AS topic_name, c.name AS commu_name" .
1025        " FROM c_commu_topic_comment AS ctc, c_commu_topic AS ct, c_commu AS c" .
1026        " WHERE ctc.c_commu_topic_comment_id=?" .
1027        " AND ct.c_commu_topic_id=ctc.c_commu_topic_id" .
1028        " AND c.c_commu_id=ctc.c_commu_id";
1029    $params = array(intval($c_commu_topic_comment_id));
1030    return db_get_row($sql, $params);
1031}
1032
1033function db_common_commu_status($u, $target_c_commu_id)
1034{
1035    $ret = array(
1036        'c_commu' => _db_c_commu4c_commu_id($target_c_commu_id),
1037        'is_bbs_view'     => false,
1038        'is_commu_member' => false,
1039        'is_commu_admin'  => false,
1040        'is_commu_sub_admin'  => false,
1041        'is_receive_mail'    => false,
1042        'is_commu_member_confirm' => false,
1043    );
1044
1045    if (_db_is_c_commu_member($target_c_commu_id, $u)) {
1046        $ret['is_commu_member'] = true;
1047
1048        $c_commu_member = _db_c_commu_member4c_member_id($u, $target_c_commu_id);
1049        if ($c_commu_member['is_receive_mail']) {
1050            $ret['is_receive_mail'] = true;
1051        }
1052
1053        //副管理者の権限はほぼ管理者と同一
1054        if ($ret['c_commu']['c_member_id_admin'] == $u
1055         || $ret['c_commu']['c_member_id_sub_admin'] == $u) {
1056            $ret['is_commu_admin']  = true;
1057        }
1058
1059        //副管理者かどうかも個別に持つ
1060        if ($ret['c_commu']['c_member_id_sub_admin'] == $u) {
1061            $ret['is_commu_sub_admin']  = true;
1062        }
1063    } else {
1064        if (_db_is_c_commu_member_confirm($u, $target_c_commu_id)) {
1065            $ret['is_commu_member_confirm'] = true;
1066        }
1067    }
1068
1069    switch ($ret['c_commu']['public_flag']) {
1070    case "public":
1071    case "auth_public":
1072    case "auth_sns":
1073        $ret['is_bbs_view'] = true;
1074        break;
1075    case "auth_commu_member":
1076        $ret['is_bbs_view'] = $ret['is_commu_member'];
1077        break;
1078    }
1079
1080    return $ret;
1081}
1082
1083function db_commu_is_c_commu_member_confirm($c_member_id, $c_commu_id)
1084{
1085    $sql = "SELECT COUNT(*) FROM c_commu_member_confirm" .
1086        " WHERE c_member_id = ? AND c_commu_id = ?";
1087    $params = array(intval($c_member_id), intval($c_commu_id));
1088    return db_get_one($sql, $params);
1089}
1090
1091function db_commu_c_commu_member4c_member_id($c_member_id, $c_commu_id)
1092{
1093    $sql = "SELECT * FROM c_commu_member" .
1094            " WHERE c_member_id=? AND c_commu_id=?";
1095    $params = array(intval($c_member_id), intval($c_commu_id));
1096    return db_get_row($sql, $params);
1097}
1098
1099/**
1100 * コミュニティトピック情報取得
1101 *
1102 * @param   int $c_commu_topic_id
1103 * @return  array トピック情報
1104 */
1105function db_commu_c_commu_topic4c_commu_topic_id($c_commu_topic_id)
1106{
1107    $sql = 'SELECT * FROM c_commu_topic WHERE c_commu_topic_id = ?';
1108    $params = array(intval($c_commu_topic_id));
1109    return db_get_row($sql, $params);
1110}
1111
1112/**
1113 * コミュニティ参加要請情報をIDから取得
1114 *
1115 * @param   int $c_commu_member_confirm_id
1116 * @return  array
1117 *              c_commu_member_confirm.*,
1118 *              c_member_id_admin
1119 */
1120function db_commu_c_commu_member_confirm4c_commu_member_confirm_id($c_commu_member_confirm_id)
1121{
1122    $sql = "SELECT cmc.*, c.c_member_id_admin, c.c_member_id_sub_admin";
1123    $sql .= " FROM c_commu_member_confirm AS cmc, c_commu AS c";
1124    $sql .= " WHERE cmc.c_commu_member_confirm_id=?";
1125    $sql .= " AND cmc.c_commu_id=c.c_commu_id";
1126    $params = array(intval($c_commu_member_confirm_id));
1127    return db_get_row($sql, $params);
1128}
1129
1130//TODO:constant
1131define('STATUS_C_JOIN_REQUEST_FREE', "1"); //コミュニティ参加(承認必要なし)
1132define('STATUS_C_JOIN_REQUEST_NEED', "2"); //コミュニティ参加(承認必要)
1133define('STATUS_C_JOIN_WAIT', "3"); //コミュニティ参加(承認待ち)
1134define('STATUS_C_JOIN_ALREADY', "4"); //コミュニティ参加(既に参加)
1135
1136function db_commu_get_c_join_status($c_member_id,$c_commu_id)
1137{
1138    $is_c_commu_member = _db_is_c_commu_member($c_commu_id, $c_member_id);
1139    $is_wait = do_common_is_c_commu_join_wait($c_commu_id, $c_member_id);
1140    $c_commu = _db_c_commu4c_commu_id($c_commu_id);
1141    $is_join_request_free = false;
1142    if ($c_commu['public_flag'] == "public") {
1143        $is_join_request_free = true;
1144    }
1145
1146    $ret = STATUS_C_JOIN_ALREADY;
1147    if (!$is_c_commu_member) { //メンバーで無い
1148        if ($is_wait == true) {
1149            $ret = STATUS_C_JOIN_WAIT;
1150        } else {
1151            if ($is_join_request_free) {
1152                $ret = STATUS_C_JOIN_REQUEST_FREE;
1153            } else {
1154                $ret = STATUS_C_JOIN_REQUEST_NEED;
1155            }
1156        }
1157    }
1158    return $ret;
1159}
1160
1161/**
1162 * トピックコメントIDからトピックを得る
1163 */
1164function db_commu_c_commu_topic_comment4c_commu_topic_comment_id_2($c_commu_topic_comment_id)
1165{
1166    $sql = 'SELECT * FROM c_commu_topic_comment WHERE c_commu_topic_comment_id = ?';
1167    $params = array(intval($c_commu_topic_comment_id));
1168    return db_get_row($sql, $params);
1169}
1170
1171/**
1172 * トピック情報取得
1173 *
1174 * @param   int $c_commu_topic_id
1175 * @return  array $c_commu_topic
1176 */
1177function db_commu_c_commu_topic4c_commu_topic_id_2($c_commu_topic_id, $c_member_id)
1178{
1179    $sql = "SELECT * FROM c_commu_topic WHERE c_commu_topic_id = ?";
1180    $params = array(intval($c_commu_topic_id));
1181    $one = db_get_row($sql, $params);
1182
1183    if ($one['c_member_id'] == $c_member_id) {
1184        $one['is_c_commu_topic_admin'] = true;
1185    }
1186    return $one;
1187}
1188
1189function db_commu_c_commu_list_lastupdate4c_member_id($c_member_id, $limit)
1190{
1191    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
1192
1193    if (!$is_recurred) {  //function cacheのために再帰処理を行う
1194        $is_recurred = true;
1195        $funcargs = func_get_args();
1196        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_FAST, __FUNCTION__, $funcargs);
1197    }
1198
1199    $is_recurred = false;
1200
1201    $sql = 'SELECT DISTINCT c.* FROM c_commu_member AS cm, c_commu AS c' .
1202            ' WHERE cm.c_member_id = ? AND c.c_commu_id = cm.c_commu_id' .
1203            ' ORDER BY RAND()';
1204    $params = array(intval($c_member_id));
1205    $c_commu_list = db_get_all_limit($sql, 0, $limit, $params);
1206
1207    foreach ($c_commu_list as $key => $value) {
1208        $c_commu_list[$key]['count_members'] =
1209            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
1210    }
1211
1212    return $c_commu_list;
1213}
1214
1215/**
1216 * 参加不参加にかかわらず、最新書き込みのあったコミュニティリストを取得
1217 */
1218function db_commu_c_commu_list_lastupdated($limit = 5)
1219{
1220    $sql = "SELECT c_commu_id, MAX(r_datetime) as updatetime" .
1221        " FROM c_commu_topic_comment" .
1222        " GROUP BY c_commu_id" .
1223        " ORDER BY updatetime DESC";
1224    $comments = db_get_all_limit($sql, 0, $limit);
1225
1226    $c_commu_list = array();
1227    foreach ($comments as $comment) {
1228        $c_commu = _db_c_commu4c_commu_id($comment['c_commu_id']);
1229        $c_commu['updatetime'] = $comment['updatetime'];
1230        $c_commu_list[] = $c_commu;
1231    }
1232    return $c_commu_list;
1233}
1234
1235/**
1236 * トピック名を取得
1237 */
1238function db_commu_c_commu_topic_name4c_commu_topic_id($c_commu_topic_id)
1239{
1240    $sql = "SELECT name FROM c_commu_topic WHERE c_commu_topic_id = ?";
1241    $params = array(intval($c_commu_topic_id));
1242    return db_get_one($sql, $params);
1243}
1244
1245/**
1246 * トピックのコメントリストを取得
1247 * 引数のメンバIDが書き込んだコメントに対しては、
1248 * is_c_commu_topic_comment_admin=1が返る。
1249 */
1250function db_commu_c_commu_topic_comment_list4c_c_commu_topic_id($c_commu_topic_id, $c_member_id, $page_size, $page)
1251{
1252    $sql = "SELECT c_commu_topic_comment.*, c_member.nickname" .
1253        " FROM c_commu_topic_comment" .
1254            " LEFT JOIN c_member USING (c_member_id)" .
1255        " WHERE c_commu_topic_id = ?" .
1256        " ORDER BY number DESC";
1257    $params = array(intval($c_commu_topic_id));
1258    $list = db_get_all_page($sql, $page, $page_size, $params);
1259
1260    foreach ($list as $key => $value) {
1261        if ($list[$key]['c_member_id'] == $c_member_id) {
1262            $list[$key]['is_c_commu_topic_comment_admin'] = true;
1263        }
1264    }
1265
1266    $sql = "SELECT COUNT(*) FROM c_commu_topic_comment WHERE c_commu_topic_id = ?";
1267    $params = array(intval($c_commu_topic_id));
1268    $total_num = db_get_one($sql, $params) - 1;
1269
1270    if ($total_num > 0) {
1271        $total_page_num =  ceil($total_num / $page_size);
1272        if ($page >= $total_page_num) {
1273            $next = false;
1274        } else {
1275            $next = true;
1276        }
1277        if ($page <= 1) {
1278            $prev = false;
1279        } else {
1280            $prev = true;
1281        }
1282    }
1283    return array($list , $prev , $next);
1284}
1285
1286/**
1287 * トピックIDからコミュニティIDと名前を取得
1288 */
1289function db_commu_c_commu4c_commu_topic_id($c_commu_topic_id)
1290{
1291    $sql = "SELECT cc.c_commu_id , cc.name FROM c_commu_topic AS cct, c_commu AS cc ";
1292    $sql .= " WHERE cct.c_commu_topic_id = ?";
1293    $sql .= " AND cc.c_commu_id = cct.c_commu_id ";
1294    $params = array(intval($c_commu_topic_id));
1295    return db_get_row($sql, $params);
1296}
1297
1298/**
1299 * 指定したメンバがコミュニティ管理者かどうかを判定
1300 */
1301function db_commu_is_admin4c_member_id_c_commu_topic_id($c_member_id, $c_commu_topic_id)
1302{
1303    $c_commu = k_p_c_bbs_c_commu4c_commu_topic_id($c_commu_topic_id);
1304    $c_commu_id = $c_commu['c_commu_id'];
1305
1306    return db_commu_is_c_commu_admin($c_commu['c_commu_id'], $c_member_id);
1307}
1308
1309/**
1310 * コミュニティの管理者(ID, nickname)を取得
1311 */
1312function db_commu_c_member_admin4c_commu_topic_id($c_commu_topic_id)
1313{
1314    $c_commu = k_p_c_bbs_c_commu4c_commu_topic_id($c_commu_topic_id);
1315    $c_commu_id = $c_commu['c_commu_id'];
1316
1317    $sql = "SELECT c_member_id_admin , nickname";
1318    $sql .= " FROM c_commu, c_member";
1319    $sql .= " WHERE c_commu_id=?".
1320            " AND c_member_id=c_member_id_admin";
1321    $params = array(intval($c_commu_id));
1322    return db_get_row($sql, $params);
1323}
1324
1325/**
1326 * 参加コミュニティリストを取得
1327 * 範囲を指定できる
1328 * IDが新しいもの順
1329 */
1330function db_commu_c_commu_list4c_member_id_4($c_member_id, $page_size, $page)
1331{
1332    $sql = "SELECT name, c_commu.c_commu_id FROM c_commu_member , c_commu";
1333    $sql .= " WHERE c_commu_member.c_member_id = ?";
1334    $sql .= " AND c_commu.c_commu_id=c_commu_member.c_commu_id";
1335    $sql .= " ORDER BY c_commu.c_commu_id DESC ";
1336
1337    $params = array(intval($c_member_id));
1338    $c_commu_list = db_get_all_page($sql, $page, $page_size, $params);
1339
1340    foreach ($c_commu_list as $key => $value) {
1341        $c_commu_list[$key]['count_members'] =
1342            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
1343    }
1344
1345    $total_num = p_common_count_c_commu4c_member_id($c_member_id);
1346    if ($total_num != 0) {
1347        $total_page_num =  ceil($total_num / $page_size);
1348        if ($page >= $total_page_num) {
1349            $next = false;
1350        } else {
1351            $next = true;
1352        }
1353
1354        if ($page <= 1) {
1355            $prev = false;
1356        } else {
1357            $prev = true;
1358        }
1359    }
1360    return array($c_commu_list , $prev , $next, $total_num);
1361}
1362
1363/**
1364 * メンバIDのメンバと、コミュニティIDのコミュニティの関係を返す
1365 */
1366function db_commu_relationship_between_member_commu($c_commu_id, $c_member_id)
1367{
1368    $relation = array(
1369        'join' => false,
1370        'wait' => false
1371    );
1372
1373    //参加承認待ちかどうかをチェック
1374    $sql = "SELECT COUNT(*) ";
1375    $sql .= "FROM c_commu_member_confirm ";
1376    $sql .= "WHERE c_commu_id = ? AND c_member_id = ?";
1377    $params = array(intval($c_commu_id), intval($c_member_id));
1378    if (db_get_one($sql, $params)) {
1379        //承認待ちなら
1380        $relation['wait'] = true;
1381        return $relation;
1382    }
1383
1384    //参加してるかどうかチェック
1385    $sql = "SELECT COUNT(*) ";
1386    $sql .= "FROM c_commu_member ";
1387    $sql .= "WHERE c_commu_id = ? AND c_member_id = ?";
1388    $params = array(intval($c_commu_id), intval($c_member_id));
1389    if (db_get_one($sql, $params)) {
1390        //参加なら
1391        $relation['join'] = true;
1392    }
1393    return $relation;
1394}
1395
1396/**
1397 * コミュニティのメンバリストをランダムに取得
1398 */
1399function db_commu_c_commu_member_list_random4c_commu_id($c_commu_id, $limit)
1400{
1401    static $is_recurred = false;  //再帰処理中かどうかの判定フラグ
1402
1403    if (!$is_recurred) {  //function cacheのために再帰処理を行う
1404        $is_recurred = true;
1405        $funcargs = func_get_args();
1406        return pne_cache_recursive_call(OPENPNE_FUNCTION_CACHE_LIFETIME_LONG, __FUNCTION__, $funcargs);
1407    }
1408
1409    $is_recurred = false;
1410
1411    $sql = "SELECT cm.c_member_id, cm.nickname ";
1412    $sql .= "FROM c_member AS cm , c_commu_member AS ccm ";
1413    $sql .= "WHERE ccm.c_commu_id = ?" .
1414            " AND ccm.c_member_id = cm.c_member_id";
1415    $sql .= " ORDER BY RAND()";
1416    $params = array(intval($c_commu_id));
1417    $c_commu_member_list = db_get_all_limit($sql, 0, $limit, $params);
1418
1419    foreach ($c_commu_member_list as $key => $value) {
1420        $c_commu_member_list[$key]['count_friend'] =
1421            db_friend_count_friends($value['c_member_id']);
1422    }
1423
1424    return $c_commu_member_list;
1425}
1426
1427/**
1428 * コミュニティメンバのリストをID新しいもの順に取得する。
1429 * 取得する範囲を指定できる。
1430 */
1431function db_commu_c_members_disp4c_commu_id($c_commu_id, $page_size, $page)
1432{
1433    $sql = 'SELECT c_member.c_member_id, nickname '
1434        . ' FROM c_member, c_commu_member'
1435        . ' WHERE c_member.c_member_id = c_commu_member.c_member_id' .
1436                ' AND c_commu_member.c_commu_id = ?'.
1437        ' ORDER BY c_member.c_member_id DESC';
1438    $params = array(intval($c_commu_id));
1439    $list = db_get_all_page($sql, $page, $page_size, $params);
1440
1441    foreach ($list as $key => $value) {
1442        $list[$key]['friend_count'] = db_friend_count_friends($value['c_member_id']);
1443    }
1444
1445    $total_num = db_commu_count_c_commu_member_list4c_commu_id($c_commu_id);
1446    if ($total_num != 0) {
1447        $total_page_num = ceil($total_num / $page_size);
1448        if ($page >= $total_page_num) {
1449            $next = false;
1450        } else {
1451            $next = true;
1452        }
1453
1454        if ($page <= 1) {
1455            $prev = false;
1456        } else {
1457            $prev = true;
1458        }
1459    }
1460    return array($list , $prev , $next);
1461}
1462
1463/**
1464 * Myフレンドから指定コミュに参加していない人をランダムに選ぶ
1465 */
1466function db_commu_c_friend_list_random4c_member_id4c_commu_id($c_member_id, $c_commu_id, $limit)
1467{
1468    //友達リスト
1469    $friend_list = db_friend_c_member_id_list($c_member_id);
1470
1471    //参加者リスト
1472    $sql = "SELECT c_member_id FROM c_commu_member WHERE c_commu_id = ?";
1473    $params = array(intval($c_commu_id));
1474    $member_list = db_get_col($sql, $params);
1475
1476    //友達リストから参加者リストを引く
1477    $result = array_diff($friend_list, $member_list);
1478
1479    if (!$result) {
1480        return null;
1481    }
1482
1483    $result = implode(',', array_map('intval', $result));
1484    $sql = 'SELECT c_member_id, nickname FROM c_member' .
1485            ' WHERE c_member_id IN ( '. $result . ') ' .
1486            ' ORDER BY RAND()';
1487    return db_get_all_limit($sql, 0, $limit);
1488}
1489
1490/**
1491 * 参加コミュニティ新着書き込みリスト取得
1492 */
1493function db_commu_c_commu_topic_comment_list4c_member_id_3($c_member_id, $page_size, $page)
1494{
1495    $sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
1496    $c_commu_id_list = db_get_col($sql, array(intval($c_member_id)));
1497    $ids = implode(", ", $c_commu_id_list);
1498
1499    $hint = db_mysql_hint('USE INDEX (r_datetime_c_commu_id)');
1500    $sql = 'SELECT c_commu_id, c_commu_topic_id, name AS c_commu_topic_name, r_datetime, c_member_id'.
1501        ' FROM c_commu_topic'. $hint . ' WHERE c_commu_id IN (' . $ids . ') ORDER BY r_datetime DESC';
1502    $c_commu_topic_list = db_get_all_page($sql, $page, $page_size);
1503
1504    foreach ($c_commu_topic_list as $key => $value) {
1505        $sql = 'SELECT name AS c_commu_name FROM c_commu WHERE c_commu_id = ?';
1506        $c_commu_name = db_get_one($sql, $value['c_commu_id']);
1507
1508        $c_commu_topic_list[$key]['number'] = db_commu_get_max_number4topic($value['c_commu_topic_id']);
1509        $c_commu_topic_list[$key]['c_commu_name'] = $c_commu_name;
1510    }
1511
1512    $sql = "SELECT count(*) ";
1513    $sql .= " FROM c_commu_member AS cm";
1514    $sql .= ", c_commu AS c, c_commu_topic AS ct";
1515    $sql .= " WHERE cm.c_member_id = ?";
1516    $sql .= " AND c.c_commu_id = cm.c_commu_id";
1517    $sql .= " AND ct.c_commu_id = cm.c_commu_id";
1518    $params = array(intval($c_member_id));
1519    $total_num = db_get_one($sql, $params);
1520
1521    if ($total_num != 0) {
1522        $total_page_num =  ceil($total_num / $page_size);
1523        if ($page >= $total_page_num) {
1524            $next = false;
1525        } else {
1526            $next = true;
1527        }
1528
1529        if ($page <= 1) {
1530            $prev = false;
1531        } else {
1532            $prev = true;
1533        }
1534    }
1535    return array($c_commu_topic_list, $prev, $next, $total_num);
1536}
1537
1538/**
1539 * あなたに(の)管理コミュニティに参加を希望しているメンバー(参加承認待ち)
1540 *
1541 * @param   int $c_member_id    : 要請されている方(あなた=管理者)
1542 * @return  array_of_array
1543 *              c_commu_member_confirm.*
1544 *              c_commu_name    : コミュニティの名前
1545 *              nickname        : 要請している人の名前
1546 *              message_disp    : 表示用メッセージ
1547 */
1548function db_commu_anatani_c_commu_member_confirm_list4c_member_id_2($c_member_id)
1549{
1550    $sql = "SELECT cmc.*, c.name AS c_commu_name";
1551    $sql .= " FROM c_commu_member_confirm AS cmc, c_commu AS c";
1552    $sql .= " WHERE (c.c_member_id_admin = ? OR c.c_member_id_sub_admin = ?" .
1553            " AND cmc.c_commu_id=c.c_commu_id";
1554    $params = array(intval($c_member_id), intval($c_member_id));
1555    $c_commu_member_confirm_list = db_get_all($sql, $params);
1556
1557    foreach ($c_commu_member_confirm_list as $key => $value) {
1558        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
1559        $c_commu_member_confirm_list[$key]['nickname'] = $c_member['nickname'];
1560    }
1561    return $c_commu_member_confirm_list;
1562}
1563
1564
1565/**
1566 * あなたがコミュニティ参加要請しているコミュニティ(参加要請中)
1567 *
1568 * @param   int $c_member_id    : 要請している方(あなた)
1569 * @return  array_of_array
1570 *              c_commu_member_confirm.*,
1571 *              c_commu_name        : コミュニティの名前
1572 *              c_member_id_admin   : 管理者のメンバーID
1573 *              nickname            : 管理者の名前
1574 */
1575function db_commu_anataga_c_commu_member_confirm_list4c_member_id_2($c_member_id)
1576{
1577    $sql = "SELECT cmc.*, c.name AS c_commu_name, c.c_member_id_admin";
1578    $sql .= " FROM c_commu_member_confirm AS cmc, c_commu AS c";
1579    $sql .= " WHERE cmc.c_member_id = ?" .
1580            " AND cmc.c_commu_id = c.c_commu_id";
1581    $params = array(intval($c_member_id));
1582    $c_commu_member_confirm_list = db_get_all($sql, $params);
1583
1584    foreach ($c_commu_member_confirm_list as $key => $value) {
1585        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id_admin']);
1586        $c_commu_member_confirm_list[$key]['nickname'] = $c_member['nickname'];
1587    }
1588    return $c_commu_member_confirm_list;
1589}
1590
1591/**
1592 * トピックIDからトピック情報を取得
1593 *
1594 * @param int c_commu_topic_id
1595 * @return array_of_array c_commu_topic.*, commu_name
1596 */
1597function db_commu_c_commu_topic4c_commu_topic_id_3($c_commu_topic_id)
1598{
1599    $sql = "SELECT t.*, c.name AS commu_name" .
1600        " FROM c_commu_topic AS t, c_commu AS c" .
1601        " WHERE t.c_commu_topic_id = ?" .
1602        " AND c.c_commu_id = t.c_commu_id";
1603    $params = array(intval($c_commu_topic_id));
1604    return db_get_row($sql, $params);
1605}
1606
1607///
1608
1609//// c_commu_category
1610
1611function db_commu_c_commu_category4null()
1612{
1613    $sql = 'SELECT cat.* FROM c_commu_category AS cat' .
1614            ' INNER JOIN c_commu_category_parent AS pcat' .
1615            ' USING (c_commu_category_parent_id)' .
1616            ' ORDER BY pcat.sort_order, cat.sort_order';
1617    return db_get_all($sql);
1618}
1619
1620function db_commu_c_commu_category_list4null()
1621{
1622    $list = _db_c_commu_category4null();
1623
1624    // カテゴリごとのコミュニティ数を取得
1625    $sql = 'SELECT c_commu_category_id, COUNT(*) as count FROM c_commu' .
1626        ' GROUP BY c_commu_category_id';
1627    $counts = db_get_assoc($sql);
1628
1629    $c_commu_category_list = array();
1630    foreach ($list as $item) {
1631        $item['count_commu_category'] = intval($counts[$item['c_commu_category_id']]);
1632        $c_commu_category_list[$item['c_commu_category_parent_id']][] = $item;
1633    }
1634    return $c_commu_category_list;
1635}
1636
1637/**
1638 * 中カテゴリリストを取得
1639 *
1640 * @return  array 中カテゴリリスト
1641 */
1642function db_commu_c_commu_category_parent_list4null()
1643{
1644    $hint = db_mysql_hint('FORCE INDEX (sort_order)');
1645    $sql = 'SELECT * FROM c_commu_category_parent' . $hint . ' ORDER BY sort_order';
1646    return db_get_all($sql);
1647}
1648
1649/**
1650 * カテゴリ情報をIDから取得
1651 */
1652function db_commu_get_c_commu_category4id($c_commu_category_id)
1653{
1654    $sql = 'SELECT * FROM c_commu_category WHERE c_commu_category_id = ?';
1655    $params = array(intval($c_commu_category_id));
1656    return db_get_row($sql, $params);
1657}
1658
1659/**
1660 * コミュニティの小カテゴリIDから小カテゴリ名を得る
1661 */
1662function db_commu_c_commu_category_name4c_commu_category_id($c_commu_category_id)
1663{
1664    $sql = 'SELECT name FROM c_commu_category WHERE c_commu_category_id = ?';
1665    $params = array(intval($c_commu_category_id));
1666    return db_get_one($sql, $params);
1667}
1668
1669function db_commu_c_commu_category_parent_id4c_commu_category_id($c_commu_category_id)
1670{
1671    $cat = db_commu_get_c_commu_category4id($c_commu_category_id);
1672    return $cat['c_commu_category_parent_id'];
1673}
1674
1675function db_commu_search_c_commu4c_commu_category(
1676            $search_word,
1677            $c_commu_category_parent_id,
1678            $page_size,
1679            $page,
1680            $val_order = 'r_datetime',
1681            $c_commu_category_id = 0)
1682{
1683    $select = 'SELECT c_commu.*';
1684
1685    $where = ' WHERE 1';
1686    $params = array();
1687    if ($c_commu_category_id) {
1688        $where .= ' AND c_commu.c_commu_category_id = ?';
1689        $params[] = $c_commu_category_id;
1690    }
1691    if ($search_word) {
1692        $words = explode(' ', $search_word);
1693        foreach ($words as $word) {
1694            $word = check_search_word($word);
1695
1696            $where .= ' AND (c_commu.name LIKE ? OR c_commu.info LIKE ?)';
1697            $params[] = '%'.$word.'%';
1698            $params[] = '%'.$word.'%';
1699        }
1700    }
1701
1702    switch ($val_order) {
1703    case 'r_datetime':
1704    default:
1705        $from = ' FROM c_commu';
1706        $order = ' ORDER BY c_commu.r_datetime DESC';
1707        $sql = $select.$from.$where.$order;
1708        break;
1709
1710    case 'count':
1711        $from  = ' FROM c_commu, c_commu_member';
1712        $order = ' ORDER BY count_commu_member DESC';
1713        $group = ' GROUP BY c_commu_member.c_commu_id';
1714        $sql = $select . ', COUNT(c_commu_member.c_member_id) AS count_commu_member' .
1715            $from .
1716            $where . ' AND c_commu_member.c_commu_id = c_commu.c_commu_id' .
1717            $group .
1718            $order;
1719        break;
1720    }
1721
1722    $list = db_get_all_page($sql, $page, $page_size, $params);
1723    foreach ($list as $key => $value) {
1724        $sql = 'SELECT name FROM c_commu_category WHERE c_commu_category_id = ?';
1725        $p2 = array(intval($value['c_commu_category_id']));
1726        $list[$key]['c_commu_category_name'] = db_get_one($sql, $p2);
1727
1728        if (!isset($value['count_commu_member'])) {
1729            $list[$key]['count_commu_member'] =
1730                db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
1731        }
1732    }
1733
1734    $sql = 'SELECT COUNT(*) FROM c_commu' . $where;
1735    $total_num = db_get_one($sql, $params);
1736
1737    if ($total_num != 0) {
1738        $total_page_num =  ceil($total_num / $page_size);
1739        if ($page >= $total_page_num) {
1740            $next = false;
1741        } else {
1742            $next = true;
1743        }
1744        if ($page <= 1) {
1745            $prev = false;
1746        } else {
1747            $prev = true;
1748        }
1749    }
1750
1751    $start_num = ($page - 1) * $page_size + 1;
1752    $end_num   = $start_num + $page_size >= $total_num ? $total_num : $start_num + $page_size - 1;
1753
1754    return array($list, $prev, $next, $total_num, $start_num, $end_num);
1755}
1756
1757function db_commu_c_commu_list4c_commu_category_id_search($c_commu_category_id, $page_size, $page, $search_word)
1758{
1759    $sql = 'SELECT * FROM c_commu';
1760
1761    $where = ' WHERE 1';
1762    $params = array();
1763    if ($search_word) {
1764        $where .= ' AND (name LIKE ? OR info LIKE ?)';
1765        $params[] = '%'.$search_word.'%';
1766        $params[] = '%'.$search_word.'%';
1767    }
1768    if ($c_commu_category_id != 'all' && $c_commu_category_id) {
1769        $where .= ' AND c_commu_category_id = ?';
1770        $params[] = intval($c_commu_category_id);
1771    }
1772
1773    $sql .= $where . ' ORDER BY r_datetime DESC';
1774    $list = db_get_all_page($sql, $page, $page_size, $params);
1775
1776    foreach ($list as $key => $value) {
1777        $list[$key]['count_commu_member'] =
1778            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
1779    }
1780
1781    $sql = 'SELECT COUNT(*) FROM c_commu' . $where;
1782    $total_num = db_get_one($sql, $params);
1783
1784    if ($total_num != 0) {
1785        $total_page_num =  ceil($total_num / $page_size);
1786        if ($page >= $total_page_num) {
1787            $next = false;
1788        } else {
1789            $next = true;
1790        }
1791
1792        if ($page <= 1) {
1793            $prev = false;
1794        } else {
1795            $prev = true;
1796        }
1797    }
1798
1799    return array($list, $prev, $next, $total_num);
1800}
1801
1802///
1803
1804function db_commu_is_c_event_admin($c_commu_topic_id, $c_member_id)
1805{
1806    $sql = 'SELECT c_member_id FROM c_commu_topic' .
1807            ' WHERE c_commu_topic_id = ? AND c_member_id = ?';
1808    $params = array(intval($c_commu_topic_id), intval($c_member_id));
1809    return (bool)db_get_one($sql, $params);
1810}
1811
1812function db_commu_is_c_event_member($c_commu_topic_id, $c_member_id)
1813{
1814    $sql = 'SELECT c_event_member_id FROM c_event_member' .
1815            ' WHERE c_commu_topic_id = ? AND c_member_id = ?';
1816    $params = array(intval($c_commu_topic_id), intval($c_member_id));
1817    return (bool)db_get_one($sql, $params);
1818}
1819
1820function db_commu_c_topic4c_commu_topic_id_2($c_commu_topic_id)
1821{
1822    $sql = "SELECT cct.*, cctc.*, cm.nickname, cpp.pref" .
1823        " FROM c_commu_topic as cct" .
1824        " LEFT JOIN c_commu_topic_comment as cctc ON cct.c_commu_topic_id = cctc.c_commu_topic_id" .
1825        " LEFT JOIN c_member as cm ON cct.c_member_id = cm.c_member_id" .
1826        " LEFT JOIN c_profile_pref as cpp ON cct.open_pref_id = cpp.c_profile_pref_id" .
1827        " WHERE cct.c_commu_topic_id = ?".
1828            " AND cctc.number = 0";
1829    $params = array(intval($c_commu_topic_id));
1830    $lst = db_get_row($sql, $params);
1831
1832    $sql = "SELECT COUNT(*) FROM c_event_member" .
1833        " WHERE c_commu_topic_id = ?";
1834    $lst['member_num'] = db_get_one($sql, $params);
1835
1836    return $lst;
1837}
1838
1839function db_commu_c_topic_write4c_commu_topic_id($c_commu_topic_id,$page,$page_size)
1840{
1841    $sql = "SELECT ctc.*, c_member.nickname " .
1842        " FROM c_commu_topic_comment AS ctc" .
1843            " LEFT JOIN c_member USING (c_member_id)" .
1844        " WHERE ctc.c_commu_topic_id = ? AND ctc.number > 0 " .
1845        " ORDER BY ctc.r_datetime DESC";
1846    $params = array(intval($c_commu_topic_id));
1847    $lst = db_get_all_page($sql, $page, $page_size, $params);
1848
1849    $sql = "SELECT count(*) FROM c_commu_topic_comment" .
1850        " WHERE c_commu_topic_id = ? AND number > 0";
1851    $total_num = db_get_one($sql, $params);
1852
1853    if ($total_num != 0) {
1854        $total_page_num = ceil($total_num / $page_size);
1855        if ($page >= $total_page_num) {
1856            $next = false;
1857        } else {
1858            $next = true;
1859        }
1860        if ($page <= 1) {
1861            $prev = false;
1862        } else {
1863            $prev = true;
1864        }
1865    }
1866    $lst = array_reverse($lst);
1867
1868    $start = reset($lst);
1869    $start_num = $start['number'];
1870
1871    $end = end($lst);
1872    $end_num = $end['number'];
1873
1874    return array($lst, $prev, $next, $total_num, $start_num, $end_num);
1875}
1876
1877function db_commu_c_commu_topic_comment4c_commu_topic_comment_id_3($c_commu_topic_comment_id)
1878{
1879    $sql = "SELECT tc.*,cm.nickname FROM c_commu_topic_comment AS tc " .
1880            " LEFT JOIN c_member as cm ON cm.c_member_id = tc.c_member_id " .
1881            " WHERE tc.c_commu_topic_comment_id = ?";
1882    $params = array(intval($c_commu_topic_comment_id));
1883    return db_get_row($sql, $params);
1884}
1885
1886function db_commu_c_event_member_list4c_commu_topic_id($c_commu_topic_id, $page, $page_size)
1887{
1888    $sql = "SELECT cm.* FROM c_member as cm, c_event_member as cem" .
1889            " WHERE cm.c_member_id = cem.c_member_id" .
1890            " AND cem.c_commu_topic_id = ?";
1891    $params = array(intval($c_commu_topic_id));
1892    return db_get_all_page($sql, $page, $page_size, $params);
1893}
1894
1895function db_commu_count_c_event_member_list4c_commu_topic_id($c_commu_topic_id)
1896{
1897    $sql = "SELECT COUNT(*) 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_one($sql, $params);
1902}
1903
1904function db_commu_c_event_mail_list4c_commu_topic_id($c_commu_topic_id, $excepted_id = 0)
1905{
1906    $sql = 'SELECT c_member_id FROM c_event_member WHERE c_commu_topic_id = ?';
1907    $params = array(intval($c_commu_topic_id));
1908    $list = db_get_col($sql, $params);
1909
1910    $result = array();
1911    foreach ($list as $c_member_id) {
1912        if ($c_member_id != $excepted_id) {
1913            $result[] = db_common_c_member4c_member_id_LIGHT($c_member_id);
1914        }
1915    }
1916    return $result;
1917}
1918
1919function db_commu_c_event_mail_confirm_list4c_member_ids($c_member_ids)
1920{
1921    $c_member_id_str = implode(',', array_map('intval', $c_member_ids));
1922    $sql = "SELECT * FROM c_member" .
1923            " WHERE c_member_id IN (".$c_member_id_str.")";
1924    return db_get_all($sql);
1925}
1926
1927function db_commu_year4null()
1928{
1929    $y = date('Y');
1930    return array($y, $y+1);
1931}
1932
1933function db_commu_is_c_event_member_2($c_commu_topic_id, $c_member_id)
1934{
1935  $sql = "SELECT COUNT(*) FROM c_event_member" .
1936      " WHERE c_commu_topic_id = ?".
1937      " AND c_member_id = ?";
1938  $params = array(intval($c_commu_topic_id), intval($c_member_id));
1939  return db_get_one($sql, $params);
1940}
1941
1942function db_commu_event4c_member_id($year, $month, $day, $c_member_id)
1943{
1944    $sql = 'SELECT c_commu_id FROM c_commu_member WHERE c_member_id = ?';
1945    $params = array(intval($c_member_id));
1946    $ids = db_get_col($sql, $params);
1947    $ids = implode(", ", $ids);
1948    if (!$ids) {
1949        return array();
1950    }
1951
1952    $today = sprintf("%04d-%02d-%02d", $year, $month, $day);
1953    $sql = "SELECT * FROM c_commu_topic" .
1954        " WHERE c_commu_id IN ($ids)" .
1955        " AND event_flag = 1" .
1956        " AND open_date = ?";
1957    $params = array($today);
1958    $list = db_get_all($sql, $params);
1959
1960    foreach ($list as $key => $item) {
1961        $list[$key]['is_join'] = p_common_is_c_event_member($item['c_commu_topic_id'], $c_member_id);
1962    }
1963    return $list;
1964}
1965
1966function db_commu_c_event_member_list4c_commu_topic_id_2($c_commu_topic_id, $page_size, $page)
1967{
1968    $sql = "SELECT cm.* FROM c_member AS cm, c_event_member AS cem" .
1969            " WHERE cm.c_member_id = cem.c_member_id " .
1970            " AND cem.c_commu_topic_id = ?";
1971    $params = array(intval($c_commu_topic_id));
1972    $list[0] = db_get_all_page($sql, $page, $page_size, $params);
1973
1974    $total_c_event_member = k_p_count_c_event_member_list4c_commu_topic_id($c_commu_topic_id);
1975    $start_num = ($page-1) * $page_size + 1;
1976    $end_num   = $page * $page_size;
1977    if ($end_num > $total_c_event_member) {
1978        $end_num = $total_c_event_member;
1979    }
1980    $end_page = ceil($total_c_event_member / $page_size);
1981
1982    $list[1] = ($start_num != 1);
1983    $list[2] = ($end_num != $total_c_event_member);
1984
1985    return $list;
1986}
1987
1988function db_commu_count_c_event_member_list4c_commu_topic_id_2($c_commu_topic_id)
1989{
1990    $sql = "SELECT COUNT(*) FROM c_member AS cm, c_event_member AS cem" .
1991            " WHERE cm.c_member_id = cem.c_member_id" .
1992            " AND cem.c_commu_topic_id = ?";
1993    $params = array(intval($c_commu_topic_id));
1994    return db_get_one($sql, $params);
1995}
1996
1997/**
1998 * 非公開コミュニティへの承認なし参加フラグが立っているかどうか
1999 */
2000function db_commu_c_commu4c_admin_invite_id($c_commu_id, $c_member_id_to)
2001{
2002    // すでにフラグが立っている
2003    $sql = 'SELECT c_commu_admin_invite_id FROM c_commu_admin_invite' .
2004            ' WHERE c_commu_id = ? AND c_member_id_to = ?';
2005    $params = array(intval($c_commu_id), intval($c_member_id_to));
2006    $result = db_get_one($sql, $params);
2007    if ($result) {
2008        return $result;
2009    } else {
2010        return false;
2011    }
2012}
2013
2014/**
2015 * コミュニティメンバーのリストを得る
2016 */
2017function db_commu_c_commu_member_id_list4c_commu_id($c_commu_id)
2018{
2019    $sql = 'SELECT c_member_id FROM c_commu_member' .
2020            ' WHERE c_commu_id = ? AND is_receive_message = 1';
2021
2022    $params = array(intval($c_commu_id));
2023    $lst = db_get_col($sql, $params);
2024    return $lst;
2025}
2026
2027?><?php
2028/**
2029 * @copyright 2005-2007 OpenPNE Project
2030 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
2031 */
2032
2033//--- c_commu
2034
2035/**
2036 * コミュニティ作成
2037 *
2038 * @param  int     $c_member_id 管理者のメンバーID
2039 * @param  string  $name  コミュニティ名
2040 * @param  int     $c_commu_category_id
2041 * @param  string  $info  説明文
2042 * @param  enum('public', 'authpublic', 'authprivate')  $public_flag
2043 * @return int  insert_id
2044 */
2045function db_commu_insert_c_commu($c_member_id, $name, $c_commu_category_id, $info, $public_flag)
2046{
2047    $data = array(
2048        'name' => $name,
2049        'c_member_id_admin' => intval($c_member_id),
2050        'info' => $info,
2051        'c_commu_category_id' => intval($c_commu_category_id),
2052        'public_flag' => $public_flag,
2053        'r_datetime' => db_now(),
2054        'r_date' => db_now(),
2055    );
2056    return db_insert('c_commu', $data);
2057}
2058
2059/**
2060 * コミュニティ設定変更
2061 *
2062 * @param   int    $c_commu_id
2063 * @param   string $name
2064 * @param   int    $c_commu_category_id
2065 * @param   string $info
2066 * @param   enum(string or int) $public_flag
2067 *                      ('public'(0), 'authpublic'(1), 'authprivate'(2))
2068 * @return bool
2069 */
2070function db_commu_update_c_commu($c_commu_id,
2071    $name, $topic_authority, $c_commu_category_id, $info, $public_flag,
2072    $image_filename = '', $is_send_join_mail = 1,
2073    $is_display_map = null, $map_latitude = null, $map_longitude = null, $map_zoom = null,
2074    $is_adult = 0)
2075{
2076    //function cacheの削除
2077    cache_drop_c_commu($c_commu_id);
2078
2079    $data = array(
2080        'name' => $name,
2081        'topic_authority' => $topic_authority,
2082        'info' => $info,
2083        'c_commu_category_id' => intval($c_commu_category_id),
2084        'public_flag' => $public_flag,
2085        'is_send_join_mail' => (bool)$is_send_join_mail,
2086        'is_adult' => (bool)$is_adult,
2087    );
2088
2089    if ($image_filename) $data['image_filename'] = $image_filename;
2090    if (!is_null($is_display_map)) {
2091        $data['is_display_map'] = (bool)$is_display_map;
2092        $data['map_latitude'] = $map_latitude;
2093        $data['map_longitude'] = $map_longitude;
2094        $data['map_zoom'] = intval($map_zoom);
2095    }
2096
2097    $where = array(
2098        'c_commu_id' => intval($c_commu_id),
2099    );
2100
2101    return db_update('c_commu', $data, $where);
2102}
2103
2104/**
2105 * コミュニティ写真更新
2106 */
2107function db_commu_update_c_commu_image_filename($c_commu_id, $image_filename)
2108{
2109    //function cacheの削除
2110    cache_drop_c_commu($c_commu_id);
2111
2112    $data = array('image_filename' => $image_filename);
2113    $where = array('c_commu_id' => intval($c_commu_id));
2114    return db_update('c_commu', $data, $where);
2115}
2116
2117/**
2118 * コミュニティ写真削除
2119 */
2120function db_commu_delete_c_commu_image_filename($c_commu_id)
2121{
2122    //function cacheの削除
2123    cache_drop_c_commu($c_commu_id);
2124
2125    $data = array('image_filename' => '');
2126    $where = array('c_commu_id' => intval($c_commu_id));
2127    return db_update('c_commu', $data, $where);
2128}
2129
2130/**
2131 * 管理者交代
2132 *
2133 * @param   int $c_commu_admin_confirm
2134 * @param   int $u : 自分のc_membmer_id
2135 * @return bool
2136 */
2137function db_commu_update_c_commu_c_member_id_admin($c_commu_id, $c_member_id)
2138{
2139    $data = array('c_member_id_admin' => intval($c_member_id));
2140    $where = array('c_commu_id' => intval($c_commu_id));
2141    if (!db_update('c_commu', $data, $where)) {
2142        return false;
2143    }
2144    return db_commu_delete_c_commu_admin_confirm4c_commu_id($c_commu_id);
2145}
2146
2147/**
2148 * 副管理者に指名
2149 *
2150 * @param   int $c_commu_sub_admin_confirm
2151 * @param   int $u : 自分のc_membmer_id
2152 * @return bool
2153 */
2154function db_commu_update_c_commu_c_member_id_sub_admin($c_commu_id, $c_member_id)
2155{
2156    $data = array('c_member_id_sub_admin' => intval($c_member_id));
2157    $where = array('c_commu_id' => intval($c_commu_id));
2158    if (!db_update('c_commu', $data, $where)) {
2159        return false;
2160    }
2161    return db_commu_delete_c_commu_sub_admin_confirm4c_commu_id($c_commu_id);
2162}
2163
2164/**
2165 * 登録時に強制参加させるかどうかを設定
2166 */
2167function db_commu_update_is_regist_join($c_commu_id, $value = 0)
2168{
2169    $data = array('is_regist_join' => (bool)$value);
2170    $where = array('c_commu_id' => intval($c_commu_id));
2171    return db_update('c_commu', $data, $where);
2172}
2173
2174//--- confirm
2175
2176/**
2177 * コミュニティ参加要請を削除
2178 */
2179function db_commu_delete_c_commu_member_confirm($c_commu_member_confirm_id)
2180{
2181    $sql = 'DELETE FROM c_commu_member_confirm WHERE c_commu_member_confirm_id = ?';
2182    $params = array(intval($c_commu_member_confirm_id));
2183    return db_query($sql, $params);
2184}
2185
2186/**
2187 * コミュニティ参加要請を承認
2188 */
2189function db_commu_insert_c_commu_member($c_commu_member_confirm_id)
2190{
2191    $confirm = _do_c_commu_member_confirm4c_commu_member_confirm_id($c_commu_member_confirm_id);
2192    $data = array(
2193        'c_commu_id' => intval($confirm['c_commu_id']),
2194        'c_member_id' => intval($confirm['c_member_id']),
2195        'r_datetime' => db_now(),
2196    );
2197    db_insert('c_commu_member', $data);
2198
2199    return db_commu_delete_c_commu_member_confirm($c_commu_member_confirm_id);
2200}
2201
2202/**
2203 * コミュニティ参加リクエスト
2204 */
2205function db_commu_insert_c_commu_member_confirm($c_commu_id, $c_member_id, $message = '')
2206{
2207    $data = array(
2208        'c_commu_id' => intval($c_commu_id),
2209        'c_member_id' => intval($c_member_id),
2210        'message' => $message,
2211        'r_datetime' => db_now(),
2212    );
2213    return db_insert('c_commu_member_confirm', $data);
2214}
2215
2216/**
2217 * コミュニティ管理者交代リクエスト
2218 */
2219function db_commu_insert_c_commu_admin_confirm($c_commu_id, $c_member_id, $message = '')
2220{
2221    $data = array(
2222        'c_commu_id' => intval($c_commu_id),
2223        'c_member_id_to' => intval($c_member_id),
2224        'message' => $message,
2225        'r_datetime' => db_now(),
2226    );
2227    return db_insert('c_commu_admin_confirm', $data);
2228}
2229
2230/**
2231 * コミュニティ副管理者交代リクエスト
2232 */
2233function db_commu_insert_c_commu_sub_admin_confirm($c_commu_id, $c_member_id, $message = '')
2234{
2235    $data = array(
2236        'c_commu_id' => intval($c_commu_id),
2237        'c_member_id_to' => intval($c_member_id),
2238        'message' => $message,
2239        'r_datetime' => db_now(),
2240    );
2241    return db_insert('c_commu_sub_admin_confirm', $data);
2242}
2243
2244/**
2245 * 管理者交代の要請を削除
2246 *
2247 * @param   int $c_commu_admin_confirm_id
2248 */
2249function db_commu_delete_c_commu_admin_confirm4id($c_commu_admin_confirm_id)
2250{
2251    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_admin_confirm_id = ?';
2252    $params = array(intval($c_commu_admin_confirm_id));
2253    return db_query($sql, $params);
2254}
2255
2256/**
2257 * 副管理者の要請を削除
2258 *
2259 * @param   int $c_commu_sub_admin_confirm_id
2260 */
2261function db_commu_delete_c_commu_sub_admin_confirm4id($c_commu_sub_admin_confirm_id)
2262{
2263    $sql = 'DELETE FROM c_commu_sub_admin_confirm WHERE c_commu_sub_admin_confirm_id = ?';
2264    $params = array(intval($c_commu_sub_admin_confirm_id));
2265    return db_query($sql, $params);
2266}
2267
2268/**
2269 * コミュニティIDから管理者交代要請を削除
2270 */
2271function db_commu_delete_c_commu_admin_confirm4c_commu_id($c_commu_id)
2272{
2273    $sql = 'DELETE FROM c_commu_admin_confirm WHERE c_commu_id = ?';
2274    $params = array(intval($c_commu_id));
2275    return db_query($sql, $params);
2276}
2277
2278/**
2279 * コミュニティIDから副管理者要請を削除
2280 */
2281function db_commu_delete_c_commu_sub_admin_confirm4c_commu_id($c_commu_id)
2282{
2283    $sql = 'DELETE FROM c_commu_sub_admin_confirm WHERE c_commu_id = ?';
2284    $params = array(intval($c_commu_id));
2285    return db_query($sql, $params);
2286}
2287
2288//--- topic
2289
2290/**
2291 * トピック削除
2292 */
2293function db_commu_delete_c_commu_topic($c_commu_topic_id)
2294{
2295    //function cacheの削除
2296    cache_drop_c_commu_topic($c_commu_topic_id);
2297
2298    // c_commu_topic_comment(画像)
2299    $sql = 'SELECT image_filename1, image_filename2, image_filename3, filename' .
2300            ' FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
2301    $params = array(intval($c_commu_topic_id));
2302
2303    $topic_comment_list = db_get_all($sql, $params);
2304    foreach ($topic_comment_list as $topic_comment) {
2305        image_data_delete($topic_comment['image_filename1']);
2306        image_data_delete($topic_comment['image_filename2']);
2307        image_data_delete($topic_comment['image_filename3']);
2308        db_file_delete_c_file($topic_comment['filename']);
2309    }
2310
2311    $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_id = ?';
2312    db_query($sql, $params);
2313
2314    $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ?';
2315    db_query($sql, $params);
2316
2317    $sql = 'DELETE FROM c_commu_topic WHERE c_commu_topic_id = ?';
2318    db_query($sql, $params);
2319}
2320
2321//--- topic_comment
2322
2323/**
2324 * トピックコメント書き込み
2325 *
2326 * @param   int    $c_commu_id
2327 * @param   int    $c_commu_topic_id
2328 * @param   int    $c_member_id
2329 * @param   string $body
2330 * @return int insert_id
2331 */
2332function db_commu_insert_c_commu_topic_comment($c_commu_id, $c_commu_topic_id, $c_member_id, $body)
2333{
2334    $number = _do_c_commu_topic_comment_number4c_commu_topic_id($c_commu_topic_id);
2335
2336    $data = array(
2337        'c_commu_id' => intval($c_commu_id),
2338        'c_member_id' => intval($c_member_id),
2339        'c_commu_topic_id' => intval($c_commu_topic_id),
2340        'number' => intval($number),
2341        'body' => $body,
2342        'r_datetime' => db_now(),
2343        'r_date' => db_now(),
2344    );
2345    return db_insert('c_commu_topic_comment', $data);
2346}
2347
2348/**
2349 * トピックコメント書き込み
2350 */
2351function db_commu_insert_c_commu_topic_comment_2($c_member_id,$target_c_commu_topic_id,$body)
2352{
2353    $c_commu_topic = _do_c_bbs_c_commu_topic4c_commu_topic_id($target_c_commu_topic_id);
2354
2355    $target_c_commu_topic_id = $c_commu_topic['c_commu_topic_id'];
2356    $target_c_commu_id  = $c_commu_topic['c_commu_id'];
2357
2358    return db_commu_insert_c_commu_topic_comment($target_c_commu_id, $target_c_commu_topic_id, $c_member_id, $body);
2359}
2360
2361function db_commu_update_c_commu_topic_comment_images($c_commu_topic_comment_id, $image_filename1, $image_filename2, $image_filename3)
2362{
2363    $data = array(
2364        'image_filename1' => strval($image_filename1),
2365        'image_filename2' => strval($image_filename2),
2366        'image_filename3' => strval($image_filename3),
2367    );
2368    $where = array('c_commu_topic_comment_id' => intval($c_commu_topic_comment_id));
2369    return db_update('c_commu_topic_comment', $data, $where);
2370}
2371
2372/**
2373 * 掲示板書き込みに画像を追加する(メールからの投稿)
2374 */
2375function db_commu_update_c_commu_topic_comment_image($c_commu_topic_comment_id, $image_filename, $image_num)
2376{
2377    $data = array(
2378        'image_filename'.intval($image_num) => $image_filename,
2379    );
2380    $where = array(
2381        'c_commu_topic_comment_id' => intval($c_commu_topic_comment_id),
2382    );
2383    return db_update('c_commu_topic_comment', $data, $where);
2384}
2385
2386/**
2387 * トピックコメント削除
2388 */
2389function db_commu_delete_c_commu_topic_comment($c_commu_topic_comment_id)
2390{
2391    $sql = 'SELECT image_filename1, image_filename2, image_filename3' .
2392        ' FROM c_commu_topic_comment' .
2393        ' WHERE c_commu_topic_comment_id = ?';
2394    $params = array(intval($c_commu_topic_comment_id));
2395    $topic_comment = db_get_row($sql, $params);
2396    image_data_delete($topic_comment['image_filename1']);
2397    image_data_delete($topic_comment['image_filename2']);
2398    image_data_delete($topic_comment['image_filename3']);
2399
2400    $sql = 'DELETE FROM c_commu_topic_comment WHERE c_commu_topic_comment_id = ?';
2401    return db_query($sql, $params);
2402}
2403
2404//--- event
2405
2406function db_commu_update_c_commu_topic($c_commu_topic_id, $topic)
2407{
2408    $data = array(
2409        'name'       => $topic['name'],
2410        'event_flag' => (bool)$topic['event_flag'],
2411        'capacity' => intval($topic['capacity']),
2412        'r_datetime' => db_now(),
2413        'r_date' => db_now(),
2414    );
2415    if ($data['event_flag']) {
2416        $data += array(
2417            'open_date'         => $topic['open_date'],
2418            'open_date_comment' => $topic['open_date_comment'],
2419            'open_pref_id'      => intval($topic['open_pref_id']),
2420            'open_pref_comment' => $topic['open_pref_comment'],
2421            'invite_period'     => $topic['invite_period'],
2422        );
2423    }
2424    $where = array('c_commu_topic_id' => intval($c_commu_topic_id));
2425    return db_update('c_commu_topic', $data, $where);
2426}
2427
2428function db_commu_update_c_commu_topic_comment($c_commu_topic_id, $topic_comment)
2429{
2430    $data = array(
2431        'body' => $topic_comment['body'],
2432        'r_datetime' => db_now(),
2433    );
2434    for ($i = 1; $i <= 3; $i++) {
2435        $key = 'image_filename'.$i;
2436        if (!empty($topic_comment[$key])) {
2437            $data[$key] = $topic_comment[$key];
2438        }
2439    }
2440    if (!empty($topic_comment['filename4'])) {
2441        $data['filename'] = $topic_comment['filename4'];
2442    }
2443    $where = array(
2444        'c_commu_topic_id' => intval($c_commu_topic_id),
2445        'number' => 0,
2446    );
2447    return db_update('c_commu_topic_comment', $data, $where);
2448}
2449
2450function db_commu_delete_c_commu_topic_comment_image($c_commu_topic_id, $image_num)
2451{
2452    $data = array(
2453        'image_filename'.intval($image_num) => '',
2454    );
2455    $where = array(
2456        'c_commu_topic_id' => intval($c_commu_topic_id),
2457        'number' => 0,
2458    );
2459    return db_update('c_commu_topic_comment', $data, $where);
2460}
2461
2462function db_commu_delete_c_commu_topic_comment_file($c_commu_topic_id)
2463{
2464    $data = array(
2465        'filename' => '',
2466    );
2467    $where = array(
2468        'c_commu_topic_id' => intval($c_commu_topic_id),
2469        'number' => 0,
2470    );
2471    return db_update('c_commu_topic_comment', $data, $where);
2472}
2473
2474function db_commu_insert_c_commu_topic($topic)
2475{
2476    //function cacheの削除
2477    cache_drop_c_commu_topic($topic['c_commu_id']);
2478
2479    $data = array(
2480        'c_commu_id'  => intval($topic['c_commu_id']),
2481        'c_member_id' => intval($topic['c_member_id']),
2482        'name'        => $topic['name'],
2483        'event_flag'  => (bool)$topic['event_flag'],
2484        'capacity'  => intval($topic['capacity']),
2485        'r_datetime'  => db_now(),
2486        'r_date'      => db_now(),
2487    );
2488    if ($data['event_flag']) {
2489        $data += array(
2490            'open_date'         => $topic['open_date'],
2491            'open_date_comment' => $topic['open_date_comment'],
2492            'open_pref_id'      => intval($topic['open_pref_id']),
2493            'open_pref_comment' => $topic['open_pref_comment'],
2494            'invite_period'     => $topic['invite_period'],
2495        );
2496    }
2497    return db_insert('c_commu_topic', $data);
2498}
2499
2500function db_commu_insert_c_commu_topic_comment_3($comment)
2501{
2502    $data = array(
2503        'c_commu_id'       => intval($comment['c_commu_id']),
2504        'c_member_id'      => intval($comment['c_member_id']),
2505        'body'             => strval($comment['body']),
2506        'number'           => intval($comment['number']),
2507        'c_commu_topic_id' => intval($comment['c_commu_topic_id']),
2508        'image_filename1'  => strval($comment['image_filename1']),
2509        'image_filename2'  => strval($comment['image_filename2']),
2510        'image_filename3'  => strval($comment['image_filename3']),
2511        'filename'  => strval($comment['filename4']),
2512        'r_datetime'       => db_now(),
2513        'r_date'           => db_now(),
2514    );
2515
2516    return db_insert('c_commu_topic_comment', $data);
2517}
2518
2519/**
2520 * イベント管理メンバー追加
2521 */
2522function db_commu_insert_c_event_member_as_admin($c_commu_topic_id, $c_member_id)
2523{
2524    $data = array(
2525        'c_commu_topic_id' => intval($c_commu_topic_id),
2526        'c_member_id' => intval($c_member_id),
2527        'is_admin' => 1,
2528        'r_datetime' => db_now(),
2529    );
2530    return db_insert('c_event_member', $data);
2531}
2532
2533/**
2534 * イベント参加メンバー追加
2535 */
2536function db_commu_insert_c_event_member($c_commu_topic_id, $c_member_id)
2537{
2538    // 参加済みの場合は追加しない
2539    $sql = 'SELECT c_event_member_id FROM c_event_member' .
2540            ' WHERE c_commu_topic_id = ? AND c_member_id = ?';
2541    $params = array(intval($c_commu_topic_id), intval($c_member_id));
2542    if (db_get_one($sql, $params)) {
2543        return false;
2544    }
2545
2546    $data = array(
2547        'c_commu_topic_id' => intval($c_commu_topic_id),
2548        'c_member_id' => intval($c_member_id),
2549        'is_admin' => 0,
2550        'r_datetime' => db_now(),
2551    );
2552    return db_insert('c_event_member', $data);
2553}
2554
2555/**
2556 * イベント参加メンバー削除
2557 */
2558function db_commu_delete_c_event_member($c_commu_topic_id, $c_member_id)
2559{
2560    $sql = 'DELETE FROM c_event_member WHERE c_commu_topic_id = ? AND c_member_id = ?';
2561    $params = array(intval($c_commu_topic_id), intval($c_member_id));
2562    db_query($sql, $params);
2563}
2564
2565//--- commu_member
2566
2567/**
2568 * コミュニティに参加
2569 */
2570function db_commu_join_c_commu($c_commu_id, $c_member_id)
2571{
2572    //function cache削除
2573    cache_drop_c_commu($c_commu_id);
2574    cache_drop_c_commu_list4c_member_id($c_member_id);
2575
2576    $data = array(
2577        'c_commu_id'  => intval($c_commu_id),
2578        'c_member_id' => intval($c_member_id),
2579        'r_datetime'  => db_now(),
2580    );
2581    return db_insert('c_commu_member', $data);
2582}
2583
2584/**
2585 * コミュニティからメンバーを削除
2586 */
2587function db_commu_delete_c_commu_member($c_commu_id, $c_member_id)
2588{
2589    //function cache削除
2590    cache_drop_c_commu($c_commu_id);
2591    cache_drop_c_commu_list4c_member_id($c_member_id);
2592
2593    //おすすめレビューを削除
2594    $sql = 'DELETE FROM c_commu_review' .
2595           ' WHERE c_commu_id = ? AND c_member_id = ?';
2596    $params = array(intval($c_commu_id), intval($c_member_id));
2597    db_query($sql, $params);
2598
2599    //副管理者なら副管理者のポストを空に
2600    $sql = 'UPDATE c_commu' .
2601           ' SET c_member_id_sub_admin = 0' . 
2602           ' WHERE c_commu_id = ? AND c_member_id_sub_admin = ?';
2603    db_query($sql, $params);
2604
2605    //管理者承認依頼
2606    $sql = 'DELETE FROM c_commu_admin_confirm' .
2607           ' WHERE c_commu_id = ? AND c_member_id_to = ?';
2608    db_query($sql, $params);
2609
2610    //副管理者承認依頼
2611    $sql = 'DELETE FROM c_commu_sub_admin_confirm' .
2612           ' WHERE c_commu_id = ? AND c_member_id_to = ?';
2613    db_query($sql, $params);
2614
2615    //コミュニティから退会
2616    $sql = 'DELETE FROM c_commu_member' .
2617           ' WHERE c_commu_id = ? AND c_member_id = ?';
2618    db_query($sql, $params);
2619}
2620
2621/**
2622 * コミュニティお知らせメール受信設定変更
2623 */
2624function db_commu_update_is_receive_mail($c_commu_id, $c_member_id, $is_receive_mail, $is_receive_mail_pc, $is_receive_message)
2625{
2626    $data = array(
2627        'is_receive_mail' => (bool)$is_receive_mail,
2628        'is_receive_mail_pc' => (bool)$is_receive_mail_pc,
2629        'is_receive_message' => (bool)$is_receive_message,
2630
2631    );
2632    $where = array(
2633        'c_commu_id'  => intval($c_commu_id),
2634        'c_member_id' => intval($c_member_id),
2635    );
2636    return db_update('c_commu_member', $data, $where);
2637}
2638
2639/**
2640 * 非公開コミュニティへの承認なし参加フラグを立てる
2641 */
2642function db_commu_insert_c_commu_admin_invite($c_commu_id, $c_member_id_to)
2643{
2644    // すでにフラグが立っている
2645    $sql = 'SELECT c_commu_admin_invite_id FROM c_commu_admin_invite' .
2646            ' WHERE c_commu_id = ? AND c_member_id_to = ?';
2647    $params = array(intval($c_commu_id), intval($c_member_id_to));
2648    if (db_get_one($sql, $params)) {
2649        return false;
2650    }
2651
2652    $data = array(
2653        'c_commu_id'  => intval($c_commu_id),
2654        'c_member_id_to' => intval($c_member_id_to),
2655        'r_datetime'  => db_now(),
2656    );
2657
2658    return db_insert('c_commu_admin_invite', $data);
2659}
2660
2661/**
2662 * 非公開コミュニティへの承認なし参加フラグを削除する
2663 */
2664function db_commu_delete_c_commu_admin_invite($c_commu_admin_invite_id)
2665{
2666    $sql = 'DELETE FROM c_commu_admin_invite WHERE c_commu_admin_invite_id = ?';
2667    $params = array(intval($c_commu_admin_invite_id));
2668    db_query($sql, $params);
2669}
2670
2671//トピックとトピックコメントの混在したリストを取得
2672//keywordで検索
2673//イベントはトピックと同列
2674function db_commu_search_c_commu_topic($search_word, $category_id, $page, $page_size)
2675{
2676
2677    if ($search_word) {
2678
2679        $params = array();
2680        $from = ' FROM c_commu_topic_comment as ctc, c_commu_topic as ct, c_commu as c';
2681        $where = ' WHERE ct.c_commu_topic_id = ctc.c_commu_topic_id'.
2682                 ' AND c.c_commu_id = ct.c_commu_id'.
2683                 ' AND c.public_flag <> ?';
2684        $params[] = 'auth_commu_member';
2685
2686        $words = explode(' ', $search_word);
2687        foreach ($words as $word) {
2688            $word = check_search_word($word);
2689
2690            $where .= ' AND (ct.name LIKE ? OR ctc.body LIKE ?)';
2691            $params[] = '%'.$word.'%';
2692            $params[] = '%'.$word.'%';
2693        }
2694
2695        $sql = 'SELECT ctc.*' .
2696               $from .
2697               $where .
2698               ' order by ctc.r_datetime DESC';
2699    } else {
2700        $from = ' FROM c_commu_topic_comment as ctc, c_commu as c';
2701        $where = ' WHERE c.c_commu_id = ctc.c_commu_id'.
2702                 ' AND c.public_flag <> ?';
2703        $params[] = 'auth_commu_member';
2704
2705        $sql = 'SELECT ctc.*' . $from . $where . ' order by ctc.r_datetime DESC';
2706    }
2707
2708    $result = db_get_all_page($sql, $page, $page_size, $params);
2709    $sql = 'SELECT count(*)' .
2710           $from .
2711           $where;
2712    $total_num = db_get_one($sql, $params);
2713
2714    foreach( $result as $key => $value ) {
2715        $c_commu = db_commu_c_commu4c_commu_id(intval($value['c_commu_id']));
2716        $c_commu_topic = db_commu_c_commu_topic4c_commu_topic_id(intval($value['c_commu_topic_id']));
2717
2718        if (!$category_id || $c_commu['c_commu_category_id'] == $category_id ) {
2719            $result[$key]['commu_name'] = $c_commu['name'];
2720            $result[$key]['image_filename'] = $c_commu['image_filename'];
2721            $result[$key]['topic_name'] = $c_commu_topic['name'];
2722            $result[$key]['c_commu_category'] = $c_commu['c_commu_category']['name'];
2723        } else {
2724            unset($result[$key]);
2725            $total_num--;
2726        }
2727
2728    }
2729
2730    if ($total_num > 0) {
2731        $total_page_num =  ceil($total_num / $page_size);
2732        if ($page >= $total_page_num) {
2733            $next = false;
2734        } else {
2735            $next = true;
2736        }
2737        if ($page <= 1) {
2738            $prev = false;
2739        } else {
2740            $prev = true;
2741        }
2742    }
2743
2744    $start_num = ($page - 1) * $page_size + 1;
2745    $end_num   = $start_num + $page_size >= $total_num ? $total_num : $start_num + $page_size - 1;
2746
2747    return array($result, $prev, $next, $total_num, $start_num, $end_num);
2748}
2749
2750/**
2751 * メンバーの共通参加コミュニティ数を取得
2752 *
2753 * @param int $target_c_member_id , $u
2754 * @return int 参加コミュニティ数
2755 */
2756function db_common_commu_common_commu_id4c_member_id($target_c_member_id , $u)
2757{
2758
2759        // 相手のコミュニティリスト
2760    $sql = 'SELECT c_commu_id FROM c_commu_member ' .
2761                ' WHERE c_member_id = ?' .
2762                ' ORDER BY c_commu_id DESC ' ;
2763   
2764    $params = array(intval($target_c_member_id));
2765    $f_commu_id_list = db_get_col($sql, $params);
2766   
2767    if(is_null($f_commu_id_list)){
2768        return null;
2769    }
2770 
2771    // 自分のコミュニティリスト
2772    $sql = 'SELECT c_commu_id FROM c_commu_member ' .
2773                ' WHERE c_member_id = ?' .
2774                ' ORDER BY c_commu_id DESC ' ;                 
2775
2776    $params = array(intval($u));
2777    $h_commu_id_list = db_get_col($sql, $params);
2778   
2779    if(is_null($h_commu_id_list)){
2780        return null;
2781    }
2782
2783        //共通コミュニティリスト
2784        $common_commu_id_list = array_intersect($f_commu_id_list, $h_commu_id_list);
2785
2786    if(is_null($common_commu_id_list)){
2787        return null;
2788    }
2789
2790    return $common_commu_id_list;
2791       
2792}
2793
2794// 共通参加コミュニティリスト
2795function db_common_commu_common_commu_list4c_member_id($target_c_member_id, $u, $page, $page_size)
2796{
2797
2798        $common_commu_id_list = db_common_commu_common_commu_id4c_member_id($target_c_member_id, $u);
2799
2800    if(is_null($common_commu_id_list)){
2801        return null;
2802    }
2803
2804        $common_commu_id_str_list = implode(",", $common_commu_id_list);
2805
2806    $sql = "SELECT *" .
2807            " FROM c_commu" .
2808                " WHERE c_commu_id in (".$common_commu_id_str_list.")" .
2809                " ORDER BY c_commu_id DESC ";
2810       
2811        $common_commu_list = db_get_all_page($sql, $page, $page_size);
2812       
2813    foreach ($common_commu_list as $key => $value) {
2814        $common_commu_list[$key]['count_members'] =
2815            db_commu_count_c_commu_member_list4c_commu_id($value['c_commu_id']);
2816    }
2817   
2818    $pager = array(
2819        "total_num" => count($common_commu_id_list),
2820        "disp_num"  => count($common_commu_list),
2821        "start_num" => 0,
2822        "end_num"   => 0,
2823        "total_page" => 0,
2824        "prev_page" => 0,
2825        "next_page" => 0,
2826    );
2827
2828    if ($pager['disp_num'] > 0) {
2829        $pager['start_num'] = ($page - 1) * $page_size + 1;
2830        $pager['end_num'] = $pager['start_num'] + $pager['disp_num'] - 1;
2831    }
2832
2833    if ($pager['total_num']) {
2834        $pager['total_page'] = ceil($pager['total_num'] / $page_size);
2835
2836        if ($page < $pager['total_page']) {
2837            $pager['next_page'] = max($page + 1, 1);
2838        }
2839        if ($page > 1) {
2840            $pager['prev_page'] = min($page - 1, $pager['total_page']);
2841        }
2842    }
2843
2844    return array($common_commu_list, $pager);
2845
2846}
2847
2848
2849?>
Note: See TracBrowser for help on using the repository browser.