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

source: OpenPNE/branches/prj/postgres/2_8_1/webapp/lib/db/commu.php @ 3402

Last change on this file since 3402 was 3402, checked in by ToshihiroK, 15 years ago

postgres対応

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