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

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

Last change on this file since 3718 was 3718, checked in by ebihara, 13 years ago

#1053:特定のテーブルに、更新日時を記録するu_datetimeカラムを追加

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