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

source: OpenPNE/branches/stable-2.12.x/webapp/lib/db/commu.php @ 8540

Last change on this file since 8540 was 8540, checked in by shingo, 12 years ago

#2992:既に承認待ち状態のメンバーへの対応を追加

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