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

source: OpenPNE/trunk/webapp/lib/db/read/diary.php @ 261

Last change on this file since 261 was 261, checked in by ogawa, 16 years ago

fixed diary search

File size: 23.1 KB
Line 
1<?php
2/**
3 * @copyright 2005-2006 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7/**
8 * db_diary_public_flag_condition
9 *
10 * @param int $c_member_id target c_member_id
11 * @param int $u viewer's c_member_id
12 * @param string $force
13 * @return string
14 */
15function db_diary_public_flag_condition($c_member_id, $u = null, $force = null)
16{
17    $pf_cond = '';
18    if ($force) {
19        switch ($force) {
20        case 'friend':
21            $pf_cond = " AND public_flag <> 'private'";
22            break;
23        case 'private':
24            $pf_cond = " AND public_flag = 'public'";
25            break;
26        }
27    } else {
28        if (!is_null($u) && $c_member_id != $u) {
29            $is_friend = db_friend_is_friend($c_member_id, $u);
30            if ($is_friend) {
31                $pf_cond = " AND public_flag <> 'private'";
32            } else {
33                $pf_cond = " AND public_flag = 'public'";
34            }
35        }
36    }
37    return $pf_cond;
38}
39
40//// c_diary
41
42/**
43 * 日記IDから日記を取得
44 *
45 * @param   int   $c_diary_id
46 * @return  array
47 */
48function db_diary_get_c_diary4id($c_diary_id)
49{
50    $sql = 'SELECT * FROM c_diary WHERE c_diary_id = ?';
51    return db_get_row($sql, array(intval($c_diary_id)));
52}
53
54/**
55 * メンバーIDから日記リストを最新順で取得
56 *
57 * @param int $c_member_id
58 * @return array 日記リスト
59 */
60function db_diary_get_c_diary_list4c_member_id($target_c_member_id, $count = 10, $u = null, $force = null)
61{
62    $pf_cond = db_diary_public_flag_condition($target_c_member_id, $u, $force);
63    $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?' . $pf_cond .
64           ' ORDER BY r_datetime DESC';
65    $params = array(intval($target_c_member_id));
66    $arr = db_get_all_limit($sql, 0, $count, $params);
67    foreach ($arr as $key => $value) {
68        $arr[$key]['comment_count'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
69    }
70    return $arr;
71}
72
73function p_common_is_active_c_diary_id($c_diary_id)
74{
75    $sql = 'SELECT c_diary_id FROM c_diary WHERE c_diary_id = ?';
76    return (bool)db_get_one($sql, array(intval($c_diary_id)));
77}
78
79//// c_diary_comment
80
81/**
82 * 日記のコメントリストを得る
83 *
84 * @param   int $c_diary_id
85 * @param   int $limit
86 * @return  array 日記コメント+ニックネーム
87 */
88function db_diary_get_c_diary_comment_list4c_diary_id($c_diary_id)
89{
90    $sql = 'SELECT c_member.nickname, c_diary_comment.*' .
91        ' FROM c_diary_comment LEFT JOIN c_member USING (c_member_id)' .
92        ' WHERE c_diary_id = ?' .
93        ' ORDER BY c_diary_comment.r_datetime';
94    return db_get_all($sql, array(intval($c_diary_id)));
95}
96
97/**
98 * 日記のコメントリスト(好きなID(複数))を取得
99 *
100 * @param   array $id_list
101 * @param   int   $page
102 * @param   int   $page_size
103 * @param   bool  $desc  並び順を日時の新しい順にするかどうか
104 * @return  日記コメント(+ニックネーム)リスト
105 */
106function db_diary_get_c_diary_comment_list4id_list($id_list, $page = 1, $page_size= -1, $desc = false)
107{
108    if (!count($id_list)) return array();
109    if ($page_size < 0) {
110        $page_size = count($id_list);
111    }
112    $e_id_list = implode(',', array_map('intval', (array)$id_list));
113
114    $sql = 'SELECT * FROM c_diary_comment' .
115            ' WHERE c_diary_comment_id IN ('.$e_id_list.')';
116    if ($desc) {
117        $sql .= ' ORDER BY r_datetime DESC';
118    } else {
119        $sql .= ' ORDER BY r_datetime';
120    }
121    $c_diary_comment_list = db_get_all_page($sql, $page, $page_size);
122    foreach ($c_diary_comment_list as $key => $value) {
123        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
124        $c_diary_comment_list[$key]['nickname'] = $c_member['nickname'];
125    }
126
127    $sql = 'SELECT COUNT(*) FROM c_diary_comment' .
128        ' WHERE c_diary_comment_id IN ('.$e_id_list.')';
129    $total_num = db_get_one($sql);
130
131    if ($total_num != 0) {
132        $total_page_num = ceil($total_num / $page_size);
133        if ($page >= $total_page_num) {
134            $next = false;
135        } else {
136            $next = true;
137        }
138
139        if ($page <= 1) {
140            $prev = false;
141        } else {
142            $prev = true;
143        }
144    }
145
146    return array($c_diary_comment_list, $prev , $next, $total_num);
147}
148
149/**
150 * 日記のコメント数を取得
151 *
152 * @param int $c_diary_id
153 * @return int コメント数
154 */
155function db_diary_count_c_diary_comment4c_diary_id($c_diary_id)
156{
157    $sql = 'SELECT COUNT(*) FROM c_diary_comment WHERE c_diary_id = ?';
158    return db_get_one($sql, array(intval($c_diary_id)));
159}
160
161////
162
163/**
164 * あるメンバーの日記リストを取得
165 *
166 * @param int $c_member_id target c_member_id
167 * @param int $page_size
168 * @param int $page
169 * @param int $u viewer's c_member_id
170 * @return array 日記リスト
171 */
172function p_fh_diary_list_diary_list4c_member_id($c_member_id, $page_size, $page, $u = null)
173{
174    $pf_cond = db_diary_public_flag_condition($c_member_id, $u);
175    $sql = 'SELECT * FROM c_diary WHERE c_member_id = ?' . $pf_cond .
176           ' ORDER BY r_datetime DESC';
177    $params = array(intval($c_member_id));
178    $list = db_get_all_page($sql, $page, $page_size, $params);
179
180    foreach ($list as $key => $c_diary) {
181        $list[$key]['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($c_diary['c_diary_id']);
182    }
183
184    $sql = 'SELECT COUNT(*) FROM c_diary WHERE c_member_id = ?' . $pf_cond;
185    $total_num = db_get_one($sql, $params);
186
187    if ($total_num != 0) {
188        $total_page_num =  ceil($total_num / $page_size);
189        if ($page >= $total_page_num) {
190            $next = false;
191        } else {
192            $next = true;
193        }
194
195        if ($page <= 1) {
196            $prev = false;
197        } else {
198            $prev = true;
199        }
200    }
201    return array($list, $prev, $next);
202}
203
204/**
205 * フレンドの最新日記リスト
206 */
207function p_h_diary_list_friend_h_diary_list_friend4c_member_id($c_member_id, $page_size, $page)
208{
209    $friends = db_friend_c_member_id_list($c_member_id, true);
210    $ids = implode(',', array_map('intval', $friends));
211
212    $hint = db_mysql_hint('USE INDEX (r_datetime_c_member_id, r_datetime)');
213    $sql = 'SELECT * FROM c_diary' . $hint .
214            ' WHERE c_member_id IN (' . $ids . ')' .
215            ' AND public_flag <> \'private\'' .
216            ' ORDER BY c_diary.r_datetime DESC';
217
218    $lst = db_get_all_page($sql, $page, $page_size);
219
220    foreach ($lst as $key=>$value) {
221        $lst[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
222        $lst[$key]['c_member'] = db_common_c_member4c_member_id($value['c_member_id']);
223    }
224
225    $sql = 'SELECT count(*) FROM c_diary' .
226           ' WHERE c_member_id IN (' . $ids . ')' .
227           ' AND public_flag <> \'private\'';
228    $total_num = db_get_one($sql, $params);
229
230    if ($total_num != 0) {
231        $total_page_num =  ceil($total_num / $page_size);
232        if ($page >= $total_page_num) {
233            $next = false;
234        } else {
235            $next = true;
236        }
237
238        if ($page <= 1) {
239            $prev = false;
240        } else {
241            $prev = true;
242        }
243    }
244
245    return array($lst, $prev, $next, $total_num);
246}
247
248/**
249 * 未読コメントのある日記の数を数える
250 *
251 * @param int $c_member_id
252 * @return int 未読日記数
253 */
254function p_h_diary_count_c_diary_not_is_read4c_member_id($c_member_id)
255{
256    $sql = 'SELECT COUNT(*) FROM c_diary WHERE c_member_id = ? AND is_checked = 0';
257    $params = array(intval($c_member_id));
258    return db_get_one($sql, $params);
259}
260
261/**
262 * 未読コメントのある日記のうちもっとも古い日記IDを返す
263 *
264 * @param int $c_member_id
265 * @return int c_diary_id
266 */
267function p_h_diary_c_diary_first_diary_read4c_member_id($c_member_id)
268{
269    $sql = 'SELECT c_diary_id FROM c_diary WHERE c_member_id = ? AND is_checked = 0 ORDER BY r_datetime';
270    $params = array(intval($c_member_id));
271    return db_get_one($sql, $params);
272}
273
274/**
275 * フレンド最新日記リスト取得
276 * 日記公開範囲を考慮
277 *
278 * @param   int $c_member_id
279 * @param   int $limit
280 * @return  array_of_array  (c_diary.*, nickname)
281 */
282function p_h_home_c_diary_friend_list4c_member_id($c_member_id, $limit)
283{
284    $friends = db_friend_c_member_id_list($c_member_id, true);
285    $ids = implode(',', array_map('intval', $friends));
286
287    $hint = db_mysql_hint('USE INDEX (r_datetime_c_member_id, r_datetime)');
288    $sql = 'SELECT * FROM c_diary' . $hint .
289            ' WHERE c_member_id IN (' . $ids . ')' .
290            ' AND public_flag <> \'private\'' .
291            ' ORDER BY c_diary.r_datetime DESC';
292
293    $c_diary_friend_list = db_get_all_limit($sql, 0, $limit);
294
295    foreach ($c_diary_friend_list as $key => $value) {
296        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
297        $c_diary_friend_list[$key]['nickname'] = $c_member['nickname'];
298        $c_diary_friend_list[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
299    }
300    return $c_diary_friend_list;
301}
302
303/**
304 * 日記コメント記入履歴取得
305 *
306 * @param   int $c_member_id
307 * @param   int $limit
308 * @return  array_of_array  (c_diary.*, nickname)
309 */
310function p_h_home_c_diary_my_comment_list4c_member_id($c_member_id, $limit)
311{
312    $date = date('Y-m-d 00:00:00', strtotime('-15 days'));
313
314    $blocked = db_member_access_block_list4c_member_id_to($c_member_id);
315    $blocked[] = $c_member_id;
316    $except_ids = implode(',', $blocked);
317
318    $sql = 'SELECT c_diary_comment.c_diary_id' .
319            ' FROM c_diary_comment INNER JOIN c_diary USING (c_diary_id)' .
320            ' WHERE c_diary_comment.c_member_id = ?' .
321            ' AND c_diary_comment.r_datetime > ?' .
322            ' AND c_diary.c_member_id NOT IN (' . $except_ids . ')' .
323            ' AND c_diary.public_flag <> \'private\'';
324    $params = array(intval($c_member_id), $date);
325    $c_diary_id_list = db_get_col($sql, $params);
326    $c_diary_id_list = array_unique($c_diary_id_list);
327    if (!$c_diary_id_list) {
328        return array();
329    }
330
331    $ids = implode(',', $c_diary_id_list);
332    $sql = 'SELECT c_diary_id, MAX(r_datetime) as maxdate' .
333           ' FROM c_diary_comment' .
334           ' WHERE c_diary_id IN (' . $ids . ')' .
335           ' GROUP BY c_diary_id' .
336           ' ORDER BY maxdate DESC';
337    $list = db_get_assoc_limit($sql, 0, $limit);
338
339    $result = array();
340    foreach ($list as $c_diary_id => $r_datetime) {
341        $item = db_diary_get_c_diary4id($c_diary_id);
342        if ($item['public_flag'] == 'friend' && !db_friend_is_friend($c_member_id, $item['c_member_id'])) {
343            continue;
344        }
345        $item += db_common_c_member4c_member_id_LIGHT($item['c_member_id']);
346        $item['r_datetime'] = $r_datetime;
347        $item['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($c_diary_id);
348        $result[] = $item;
349    }
350    return $result;
351}
352
353function p_h_diary_comment_list_c_diary_my_comment_list4c_member_id($c_member_id, $page, $page_size)
354{
355    $blocked = db_member_access_block_list4c_member_id_to($c_member_id);
356    $blocked[] = $c_member_id;
357    $except_ids = implode(',', $blocked);
358
359    $friends = db_friend_c_member_id_list($c_member_id);
360    $friend_ids = implode(',', $friends);
361
362    $sql = 'SELECT d.c_diary_id' .
363            ', d.subject' .
364            ', d.c_member_id' .
365            ', MAX(dc.r_datetime) AS r_datetime' .
366            ', COUNT(DISTINCT dc.c_diary_comment_id) AS num_comment' .
367        ' FROM c_diary AS d' .
368            ' INNER JOIN c_diary_comment AS dc USING (c_diary_id)' .
369            ', c_diary_comment AS mydc' .
370        ' WHERE mydc.c_member_id = ?' .
371            ' AND mydc.c_diary_id = d.c_diary_id' .
372            ' AND mydc.c_member_id <> d.c_member_id' .
373            ' AND d.c_member_id NOT IN (' . $except_ids . ')' .
374            ' AND (d.public_flag = \'public\' OR (d.public_flag = \'friend\' AND d.c_member_id IN (' . $friend_ids . ')))' .
375        ' GROUP BY dc.c_diary_id' .
376        ' ORDER BY r_datetime DESC';
377
378    $params = array(intval($c_member_id));
379    $list = db_get_all_page($sql, $page, $page_size, $params);
380
381    foreach ($list as $key => $value) {
382        $list[$key] += db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
383    }
384
385    $sql = 'SELECT COUNT(*)' .
386        ' FROM c_diary AS d' .
387            ' INNER JOIN c_diary_comment AS dc USING (c_diary_id)' .
388            ', c_diary_comment AS mydc' .
389        ' WHERE mydc.c_member_id = ?' .
390            ' AND mydc.c_diary_id = d.c_diary_id' .
391            ' AND mydc.c_member_id <> d.c_member_id' .
392            ' AND d.c_member_id NOT IN (' . $except_ids . ')' .
393            ' AND (d.public_flag = \'public\' OR (d.public_flag = \'friend\' AND d.c_member_id IN (' . $friend_ids . ')))';
394    $total_num = db_get_one($sql, $params);
395
396    $is_prev = false;
397    $is_next = false;
398    if ($total_num) {
399        $is_prev = (bool)($page > 1);
400        $is_next = (bool)($page < ceil($total_num / $page_size));
401    }
402    return array($list, $is_prev, $is_next, $total_num);
403}
404
405/**
406 * あるメンバーの指定された年月日の日記のリストを得る
407 */
408function p_fh_diary_list_diary_list_date4c_member_id($c_member_id, $year, $month, $day=0, $u = null)
409{
410    if ($day) {
411        $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
412        $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day+1, $year));
413    } else {
414        $s_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month, 1, $year));
415        $e_date = date('Y-m-d H:i:s', mktime(0, 0, 0, $month+1, 1, $year));
416    }
417
418    $pf_cond = db_diary_public_flag_condition($c_member_id, $u);
419    $sql = 'SELECT * FROM c_diary' .
420            ' WHERE c_member_id = ? AND r_datetime >= ? AND r_datetime < ?' . $pf_cond .
421            ' ORDER BY r_datetime DESC';
422    $params = array(intval($c_member_id), $s_date, $e_date);
423    $list = db_get_all($sql, $params);
424
425    foreach ($list as $key => $c_diary) {
426        $list[$key]['num_comment'] = db_diary_count_c_diary_comment4c_diary_id($c_diary['c_diary_id']);
427    }
428
429    return array($list, false, false);
430}
431
432/**
433 * 日記ページの「各月の日記」用
434 *
435 * 日記を最初に書いた月からスタートしてみる
436 */
437function p_fh_diary_list_date_list4c_member_id($c_member_id)
438{
439    $sql = "SELECT r_datetime FROM c_diary" .
440        " WHERE c_member_id = ?" .
441        " ORDER BY r_datetime";
442    $params = array(intval($c_member_id));
443    if (!$first_datetime = db_get_one($sql, $params)) {
444        return array();
445    }
446
447    $start_date = getdate(strtotime($first_datetime));
448    $end_date =  getdate();
449
450    $date = array();
451    $year = $start_date['year'];
452    $month = $start_date['mon'];
453    while (1) {
454        $date[] =  array(
455            'year' => $year,
456            'month' => $month,
457        );
458
459        if ($end_date['year'] <= $year
460            && $end_date['mon'] <= $month) {
461            break;
462        }
463
464        $month++;
465        if ($month > 12) {
466            $month = 1;
467            $year++;
468        }
469    }
470    return array_reverse($date);
471}
472
473//c_member_id から自分の日記についてるコメントID(複数)を取得
474function p_fh_diary_c_diary_comment_id_list4c_member_id($c_member_id)
475{
476    $sql = "SELECT cdc.c_diary_comment_id FROM c_diary as cd,c_diary_comment as cdc" .
477        " WHERE cd.c_member_id = ?".
478        " AND cd.c_diary_id = cdc.c_diary_id";
479    $params = array(intval($c_member_id));
480    return db_get_col($sql, $params);
481}
482
483/**
484 * 年月 から日記のある日(複数)を取得
485 */
486function p_fh_diary_list_calendar_list4c_member_id($year, $month, $c_member_id)
487{
488    $sql = "SELECT cdc.c_diary_comment_id FROM c_diary as cd,c_diary_comment as cdc" .
489        " WHERE cd.c_member_id = ?".
490        " AND cd.c_diary_id = cdc.c_diary_id";
491    $params = array(intval($c_member_id));
492    return db_get_col($sql, $params);
493}
494
495/**
496 * 新着日記検索
497 * 検索ポイントはタイトル、本文
498 * 空白(全角半角問わない)でand検索可
499 */
500function p_h_diary_list_all_search_c_diary4c_diary($keyword, $page_size, $page)
501{
502    $select = 'SELECT *';
503    $from = ' FROM c_diary';
504    $where = " WHERE public_flag = 'public'";
505
506    //and検索を実装
507    //subject,body を検索
508    $params = array();
509    if ($keyword) {
510        //全角空白を半角に統一
511        $keyword = str_replace(' ', ' ', $keyword);
512
513        $keyword_list = explode(' ', $keyword);
514        foreach ($keyword_list as $word) {
515            $word = check_search_word($word);
516
517            $where .= ' AND (subject LIKE ? OR body LIKE ?)';
518            $params[] = '%'.$word.'%';
519            $params[] = '%'.$word.'%';
520        }
521    }
522    $order = " ORDER BY r_datetime DESC";
523
524    $sql = $select . $from . $where . $order;
525
526    $list = db_get_all_page($sql, $page, $page_size, $params);
527    foreach ($list as $key => $value) {
528        $list[$key]['c_member'] = db_common_c_member_with_profile($value['c_member_id']);
529        $list[$key]['comment_count'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
530    }
531
532    $sql = 'SELECT COUNT(*)' . $from . $where;
533    $total_num = db_get_one($sql, $params);
534
535    if ($total_num != 0) {
536        $total_page_num =  ceil($total_num / $page_size);
537        if ($page >= $total_page_num) {
538            $next = false;
539        } else {
540            $next = true;
541        }
542        if ($page <= 1) {
543            $prev = false;
544        } else {
545            $prev = true;
546        }
547    }
548    return array($list , $prev , $next, $total_num);
549}
550
551/**
552 * 指定された年月に日記を書いている日のリストを返す
553 */
554function p_h_diary_is_diary_written_list4date($year, $month, $c_member_id, $u = null)
555{
556    include_once 'Date/Calc.php';
557
558    $pf_cond = db_diary_public_flag_condition($c_member_id, $u);
559    $sql = 'SELECT DISTINCT DAYOFMONTH(r_datetime) FROM c_diary' .
560           ' WHERE c_member_id = ? AND r_datetime >= ? AND r_datetime < ?' . $pf_cond;
561
562    $date_format = '%Y-%m-%d 00:00:00';
563    $thismonth = Date_Calc::beginOfMonth($month, $year, $date_format);
564    $nextmonth = Date_Calc::beginOfNextMonth(0, $month, $year, $date_format);
565
566    $params = array(intval($c_member_id), $thismonth, $nextmonth);
567
568    return db_get_col($sql, $params);
569}
570
571/**
572 * 日記コメント情報をIDから取得
573 *
574 * @param   int $c_diary_comment_id
575 * @return array
576 *              c_diary_comemnt.*
577 *              c_diary.c_member_id AS c_member_id_author
578 */
579function _do_c_diary_comment4c_diary_comment_id($c_diary_comment_id)
580{
581    $sql = "SELECT dc.*, d.c_member_id AS c_member_id_author";
582    $sql .= " FROM c_diary_comment AS dc, c_diary AS d";
583    $sql .= " WHERE dc.c_diary_comment_id = ?";
584    $sql .= " AND dc.c_diary_id = d.c_diary_id";
585    $params = array(intval($c_diary_comment_id));
586    return db_get_row($sql, $params);
587}
588
589/**
590 * ターゲットメンバの最新日記のリストを返す
591 */
592function k_p_f_home_c_diary_list4c_member_id($c_member_id, $limit)
593{
594    //日記リスト
595    $sql = "SELECT c_diary_id, r_date, subject ,image_filename_1";
596    $sql .= " FROM c_diary";
597    $sql .= " WHERE c_member_id = ?";
598    $sql .= " ORDER BY r_date DESC";
599    $params = array(intval($c_member_id));
600    $c_diary_list = db_get_all_limit($sql, 0, $limit, $params);
601
602    //コメント数
603    foreach ($c_diary_list as $key => $value) {
604        $c_diary_id = $value['c_diary_id'];
605
606        $sql = "SELECT COUNT(*) ";
607        $sql .= "FROM c_diary_comment ";
608        $sql .= "WHERE c_diary_id = ?";
609        $params = array(intval($c_diary_id));
610        $c_diary_list[$key]['count_comment'] = db_get_one($sql, $params);
611    }
612    return $c_diary_list;
613}
614
615/**
616 * 最新日記リストを取得。
617 * 取得範囲を指定できる。
618 */
619function k_p_fh_diary_list_c_diary_list4c_member_id($c_member_id, $page_size, $page)
620{
621    $sql = 'SELECT * FROM c_diary WHERE c_member_id = ? ORDER BY r_datetime DESC';
622    $params = array(intval($c_member_id));
623    $c_diary_list = db_get_all_page($sql, $page, $page_size, $params);
624
625    foreach ($c_diary_list as $key => $value) {
626        $c_diary_list[$key]['count_comment'] =
627            db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
628    }
629
630    $sql = 'SELECT COUNT(*) FROM c_diary WHERE c_member_id = ?';
631    $total_num = db_get_one($sql, $params);
632
633    if ($total_num != 0) {
634        $total_page_num =  ceil($total_num / $page_size);
635        if ($page >= $total_page_num) {
636            $next = false;
637        } else {
638            $next = true;
639        }
640        if ($page <= 1) {
641            $prev = false;
642        } else {
643            $prev = true;
644        }
645    }
646    return array($c_diary_list , $prev , $next);
647}
648
649/**
650 * 日記へのコメントリストを取得
651 */
652function k_p_fh_diary_c_diary_comment_list4c_diary_id($c_diary_id, $page_size, $page)
653{
654    $sql = 'SELECT * FROM c_diary_comment WHERE c_diary_id = ? ORDER BY r_datetime DESC';
655    $params = array(intval($c_diary_id));
656    $c_diary_comment_list = db_get_all_page($sql, $page, $page_size, $params);
657
658    foreach ($c_diary_comment_list as $key => $value) {
659        $c_member = db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
660        $c_diary_comment_list[$key]['nickname'] = $c_member['nickname'];
661    }
662
663    $sql = "SELECT COUNT(*) FROM c_diary_comment WHERE c_diary_id = ?";
664    $params = array(intval($c_diary_id));
665    $total_num = db_get_one($sql, $params);
666
667    if ($total_num > 0) {
668        $total_page_num =  ceil($total_num / $page_size);
669        if ($page >= $total_page_num) {
670            $next = false;
671        } else {
672            $next = true;
673        }
674        if ($page <= 1) {
675            $prev = false;
676        } else {
677            $prev = true;
678        }
679    }
680    return array($c_diary_comment_list , $prev , $next, $total_num, $total_page_num);
681}
682
683/**
684 * 日記IDからその日記を書いたメンバIDとニックネームと日記公開範囲を得る
685 */
686function k_p_fh_diary_c_member4c_diary_id($c_diary_id)
687{
688    $sql = "SELECT cm.c_member_id, cm.nickname,cm. public_flag_diary ";
689    $sql .= " FROM c_member AS cm, c_diary AS cd ";
690    $sql .= " WHERE cd.c_diary_id = ?";
691    $sql .= " AND cm.c_member_id=cd.c_member_id";
692    $params = array(intval($c_diary_id));
693    return db_get_row($sql, $params);
694}
695
696/**
697 * フレンドの最新日記リスト
698 */
699function k_p_h_diary_list_friend_h_diary_list_friend4c_member_id($c_member_id, $page_size, $page)
700{
701    $from = "c_diary, c_friend";
702    $where = "c_friend.c_member_id_from = ?" .
703            " AND c_diary.c_member_id = c_friend.c_member_id_to";
704
705    $sql = "SELECT c_diary.* FROM {$from} WHERE {$where}" .
706            " ORDER BY c_diary.r_datetime DESC";
707    $params = array(intval($c_member_id));
708    $lst = db_get_all_page($sql, $page, $page_size, $params);
709
710    foreach ($lst as $key=>$value) {
711        $lst[$key]['count_comments'] = db_diary_count_c_diary_comment4c_diary_id($value['c_diary_id']);
712        $lst[$key]['c_member'] = db_common_c_member4c_member_id($value['c_member_id']);
713    }
714
715    $sql = "SELECT count(*) FROM {$from} WHERE {$where}";
716    $total_num = db_get_one($sql, $params);
717
718    if ($total_num != 0) {
719        $total_page_num =  ceil($total_num / $page_size);
720        if ($page >= $total_page_num) {
721            $next = false;
722        } else {
723            $next = true;
724        }
725
726        if ($page <= 1) {
727            $prev = false;
728        } else {
729            $prev = true;
730        }
731    }
732
733    return array($lst, $prev, $next, $total_num);
734}
735
736?>
Note: See TracBrowser for help on using the repository browser.