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

source: OpenPNE/branches/stable-2.10.x/webapp/lib/db/commu.php @ 9276

Last change on this file since 9276 was 9276, checked in by shingo, 13 years ago

不要な空白を削除

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