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

source: OpenPNE/trunk/webapp/lib/db/review.php @ 4272

Last change on this file since 4272 was 4272, checked in by ogawa, 13 years ago

#1348:MySQL4.0以前の環境で管理画面のメンバーリストに誰も表示されない

File size: 21.4 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
7function db_review_c_review_list4member($c_member_id, $count = 10)
8{
9    $sql = 'SELECT rev.c_review_id, rev.title, com.r_datetime' .
10        ' FROM c_review_comment AS com LEFT JOIN c_review AS rev USING(c_review_id)' .
11        ' WHERE com.c_member_id = ? ORDER BY com.r_datetime DESC';
12    $params = array(intval($c_member_id));
13    return db_get_all_limit($sql, 0, $count, $params);
14}
15
16function db_review_c_friend_review_list4c_member_id($c_member_id, $limit)
17{
18    $friends = db_friend_c_member_id_list($c_member_id);
19    if (!$friends) {
20        return array();
21    }
22    $ids = implode(',', array_map('intval', $friends));
23
24    $sql = 'SELECT * FROM c_review INNER JOIN c_review_comment USING (c_review_id)' .
25            ' WHERE c_review_comment.c_member_id IN ('.$ids.')' .
26            ' ORDER BY c_review_comment.r_datetime DESC';
27    $list = db_get_all_limit($sql, 0, $limit);
28    foreach ($list as $key => $value) {
29        $list[$key] += db_common_c_member4c_member_id_LIGHT($value['c_member_id']);
30    }
31    return $list;
32}
33
34function db_review_c_friend_review_list_more4c_member_id($c_member_id, $page, $page_size)
35{
36    $sql =  "SELECT cm.nickname, cr.c_review_id, cr.title, crc.r_datetime" .
37            " FROM  c_member AS cm, c_friend AS cf, c_review AS cr, c_review_comment AS crc" .
38            " WHERE cr.c_review_id = crc.c_review_id " .
39            " AND cf.c_member_id_to = crc.c_member_id " .
40            " AND cf.c_member_id_to = cm.c_member_id " .
41            " AND cf.c_member_id_from = ?".
42            " ORDER BY crc.r_datetime DESC";
43    $params = array(intval($c_member_id));
44    $list = db_get_all_page($sql, $page, $page_size, $params);
45
46    $sql =  "SELECT COUNT(*)" .
47            " FROM  c_friend AS cf, c_review_comment AS crc" .
48            " WHERE cf.c_member_id_to = crc.c_member_id" .
49            " AND cf.c_member_id_from = ?";
50    $total_num = db_get_one($sql, $params);
51
52    if ($total_num != 0) {
53        $total_page_num = ceil($total_num / $page_size);
54        if ($page >= $total_page_num) {
55            $next = false;
56        } else {
57            $next = true;
58        }
59        if ($page <= 1) {
60            $prev = false;
61        } else {
62            $prev = true;
63        }
64    }
65
66    $start_num = ($page - 1) * $page_size + 1 ;
67    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
68
69    return array($list, $prev, $next, $total_num, $start_num, $end_num);
70}
71
72function db_review_new_commu_review4c_commu_id($c_commu_id , $limit)
73{
74    $sql = "SELECT ccr.c_review_id, cr.title, ccr.r_datetime" .
75            " FROM c_commu_review AS ccr , c_review AS cr" .
76            " WHERE ccr.c_review_id = cr.c_review_id" .
77            " AND ccr.c_commu_id = ?".
78            " ORDER BY ccr.r_datetime DESC";
79    $params = array(intval($c_commu_id));
80    return db_get_all_limit($sql, 0, $limit, $params);
81}
82
83function do_review_review_add_category_disp()
84{
85    $sql = 'SELECT c_review_category_id, category_disp FROM c_review_category';
86    return db_get_assoc($sql);
87}
88
89function do_review_add_search_result($keyword, $category_id, $page)
90{
91    $sql = 'SELECT category FROM c_review_category WHERE c_review_category_id = ?';
92    $params = array(intval($category_id));
93    if (!$category = db_get_one($sql, $params)) {
94        return null;
95    }
96
97    include_once 'Services/Amazon.php';
98    $amazon =& new Services_Amazon(AMAZON_TOKEN, AMAZON_AFFID, AMAZON_LOCALE, AMAZON_BASEURL);
99    $products = $amazon->searchKeyword($keyword, $category, $page);
100    if (PEAR::isError($products)) {
101        return null;
102    }
103    if (empty($products['totalresults'])) {
104        return null;
105    }
106
107    foreach ($products as $key => $value) {
108        if (is_array($value['authors'])) {
109            $authors = array_unique($value['authors']);
110            $products[$key]['author'] = implode(', ', $authors);
111        }
112        if (is_array($value['artists'])) {
113            $artists = array_unique($value['artists']);
114            $products[$key]['artist'] = implode(', ', $artists);
115        }
116    }
117
118    $product_page = $products['page'];
119    $product_pages = $products['pages'];
120    $total_num = $products['totalresults'];
121    unset($products[0]);
122    unset($products['page']);
123    unset($products['pages']);
124    unset($products['totalresults']);
125
126    return array($products, $product_page, $product_pages, $total_num);
127}
128
129function db_review_write_product4asin($asin)
130{
131    include_once 'Services/Amazon.php';
132    $amazon =& new Services_Amazon(AMAZON_TOKEN, AMAZON_AFFID, AMAZON_LOCALE, AMAZON_BASEURL);
133    $keyword = mb_convert_encoding($keyword, "UTF-8", "auto");
134
135    $result = $amazon->searchAsin($asin);
136    if (PEAR::isError($result)) {
137        return false;
138    }
139
140    $product  =$result[1];
141    if ($result[1]['authors']) {
142        $product['author'] = implode(',', $result[1]['authors']);
143    }
144   
145    if (!is_array($product)) {
146        return false;
147    }
148    foreach ($product as $key => $value) {
149        $product[$key] = mb_convert_encoding($value, 'UTF-8', 'auto');
150    }
151
152    return $product;
153}
154
155/**
156 * orderby:
157 *      r_datetime  => 作成順
158 *      r_num       => 登録数順
159 */
160function db_review_search_result4keyword_category($keyword, $category_id , $orderby, $page = 1, $page_size = 30)
161{
162    $from = " FROM c_review INNER JOIN c_review_comment USING (c_review_id)";
163
164    $wheres = array();
165    $params = array();
166    if ($keyword) {
167        $wheres[] = 'c_review.title LIKE ?';
168        $params[] = '%'.check_search_word($keyword).'%';
169    }
170    if ($category_id) {
171        $wheres[] = 'c_review.c_review_category_id = ?';
172        $params[] = intval($category_id);
173    }
174    if ($wheres) {
175        $where = ' WHERE ' . implode(' AND ', $wheres);
176    } else {
177        $where = '';
178    }
179
180    switch ($orderby) {
181    case "r_datetime":
182    default:
183        $order = " ORDER BY r_datetime2 DESC";
184        break;
185    case "r_num":
186        $order = " ORDER BY write_num DESC, r_datetime2 DESC";
187        break;
188    }
189
190    if ($GLOBALS['_OPENPNE_DSN_LIST']['main']['dsn']['phptype'] == 'pgsql') {
191        $group = " GROUP BY c_review.c_review_id" .
192                ", c_review.title" .
193                ", c_review.release_date" .
194                ", c_review.manufacturer" .
195                ", c_review.author" .
196                ", c_review.c_review_category_id" .
197                ", c_review.image_small" .
198                ", c_review.image_medium" .
199                ", c_review.image_large" .
200                ", c_review.url" .
201                ", c_review.asin" .
202                ", c_review.list_price" .
203                ", c_review.retail_price" .
204                ", c_review.r_datetime";
205    } else {
206        $group = " GROUP BY c_review.c_review_id";
207    }
208    $sql = "SELECT" .
209            " c_review.*" .
210            ", MAX(c_review_comment.r_datetime) as r_datetime2" .
211            ", COUNT(c_review_comment.c_review_comment_id) AS write_num" .
212        $from .
213        $where .
214        $group .
215        $order;
216
217    $lst = db_get_all_page($sql, $page, $page_size, $params);
218
219    //$lstに書き込み数を追加 + レビュー書き込み内容と日付を追加
220    foreach ($lst as $key => $value) {
221        $sql = "SELECT body FROM c_review_comment" .
222            " WHERE c_review_id = ?" .
223            " ORDER BY r_datetime DESC";
224        $p2 = array(intval($value['c_review_id']));
225        $lst[$key]['body'] = db_get_one($sql, $p2);
226    }
227
228    $sql = "SELECT COUNT(DISTINCT c_review.c_review_id)" . $from . $where;
229    $total_num = db_get_one($sql, $params);
230
231    if ($total_num != 0) {
232        $total_page_num =  ceil($total_num / $page_size);
233        if ($page >= $total_page_num) {
234            $next = false;
235        } else {
236            $next = true;
237        }
238        if ($page <= 1) {
239            $prev = false;
240        } else {
241            $prev = true;
242        }
243    }
244
245    $start_num = ($page - 1) * $page_size + 1 ;
246    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
247
248    return array($lst, $prev, $next, $total_num, $start_num, $end_num);
249}
250
251function db_review_list_product_c_review4c_review_id($c_review_id)
252{
253    $sql = 'SELECT * FROM c_review AS cr, c_review_category AS crc' .
254           ' WHERE cr.c_review_category_id = crc.c_review_category_id' .
255           ' AND c_review_id = ?';
256    $params = array(intval($c_review_id));
257    return db_get_row($sql, $params);
258}
259
260function db_review_list_product_c_review_list4c_review_id($c_review_id, $page, $page_size=30)
261{
262    $sql = "SELECT crc.*, cm.c_member_id, cm.nickname, cm.image_filename" .
263           " FROM c_review_comment AS crc, c_member AS cm" .
264           " WHERE crc.c_member_id = cm.c_member_id" .
265           " AND c_review_id = ?" .
266           " ORDER BY r_datetime desc";
267    $params = array(intval($c_review_id));
268    $list = db_get_all_page($sql, $page, $page_size, $params);
269
270    $total_num = do_common_count_c_review_comment4c_review_id($c_review_id);
271    if ($total_num != 0) {
272        $total_page_num =  ceil($total_num / $page_size);
273        if ($page >= $total_page_num) {
274            $next = false;
275        } else {
276            $next = true;
277        }
278        if ($page <= 1) {
279            $prev = false;
280        } else {
281            $prev = true;
282        }
283    }
284
285    $start_num = ($page - 1) * $page_size + 1 ;
286    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
287
288    return array($list, $prev, $next, $total_num, $start_num, $end_num);
289}
290
291function db_review_list_product_c_review_list4c_member_id($c_member_id, $page, $page_size=30)
292{
293    $sql = "SELECT crc.*, cr.*, crc2.category_disp" .
294            " FROM c_review_comment AS crc, c_review AS cr, c_review_category AS crc2" .
295            " WHERE crc.c_review_id = cr.c_review_id" .
296            " AND cr.c_review_category_id = crc2.c_review_category_id" .
297            " AND crc.c_member_id = ?" .
298            " ORDER BY crc.r_datetime DESC";
299    $params = array(intval($c_member_id));
300    $list = db_get_all_page($sql, $page, $page_size, $params);
301
302    foreach ($list as $key => $value) {
303        $list[$key]['write_num'] = do_common_count_c_review_comment4c_review_id($value['c_review_id']);
304    }
305
306    $sql = "SELECT COUNT(*) FROM c_review_comment WHERE c_member_id = ?";
307    $params = array(intval($c_member_id));
308    $total_num = db_get_one($sql, $params);
309
310    if ($total_num != 0) {
311        $total_page_num =  ceil($total_num / $page_size);
312        if ($page >= $total_page_num) {
313            $next = false;
314        } else {
315            $next = true;
316        }
317        if ($page <= 1) {
318            $prev = false;
319        } else {
320            $prev = true;
321        }
322    }
323
324    $start_num = ($page - 1) * $page_size + 1 ;
325    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
326
327    return array($list, $prev, $next, $total_num, $start_num, $end_num);
328}
329
330function db_review_add_write_c_review_comment4asin_c_member_id($asin, $c_member_id)
331{
332    $sql = "SELECT * FROM c_review AS cr, c_review_comment AS crc" .
333            " WHERE cr.c_review_id = crc.c_review_id" .
334            " AND cr.asin = ?" .
335            " AND crc.c_member_id = ?";
336    $params = array($asin, intval($c_member_id));
337    return db_get_row($sql, $params);
338}
339
340function db_review_clip_list_h_review_clip_list4c_member_id($c_member_id, $page, $page_size=30)
341{
342    $sql = "SELECT * FROM c_review_clip AS crc, c_review AS cr" .
343            " WHERE crc.c_review_id = cr.c_review_id" .
344            " AND c_member_id = ?" .
345            " ORDER BY crc.r_datetime";
346    $params = array(intval($c_member_id));
347    $list = db_get_all_page($sql, $page, $page_size, $params);
348
349    //カテゴリの表示名を取得
350    $category_disp = p_h_review_add_category_disp();
351
352    //$lstに書き込み数 + カテゴリ名 を追加
353    foreach ($list as $key => $value) {
354        $list[$key]['write_num'] = do_common_count_c_review_comment4c_review_id($value['c_review_id']);
355        $list[$key]['category_disp'] = $category_disp[$value['c_review_category_id']];
356    }
357
358    $sql = "SELECT COUNT(*) FROM c_review_clip WHERE c_member_id = ?";
359    $params = array(intval($c_member_id));
360    $total_num = db_get_one($sql, $params);
361
362    if ($total_num != 0) {
363        $total_page_num =  ceil($total_num / $page_size);
364        if ($page >= $total_page_num) {
365            $next = false;
366        } else {
367            $next = true;
368        }
369        if ($page <= 1) {
370            $prev = false;
371        } else {
372            $prev = true;
373        }
374    }
375
376    $start_num = ($page - 1) * $page_size + 1 ;
377    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
378
379    return array($list, $prev, $next, $total_num, $start_num, $end_num);
380}
381
382function db_review_c_member_review_c_member_review4c_commu_id($c_commu_id, $page, $page_size=20)
383{
384    $sql = " SELECT cr.*, ccr.*, crc.category_disp " .
385            " FROM c_commu_review as ccr, c_review as cr, c_review_category as crc" .
386            " WHERE ccr.c_review_id = cr.c_review_id" .
387            " AND cr.c_review_category_id = crc.c_review_category_id" .
388            " AND ccr.c_commu_id =  ?" .
389            " ORDER BY ccr.r_datetime";
390    $params = array(intval($c_commu_id));
391    $list = db_get_all_page($sql, $page, $page_size, $params);
392
393    $sql = "SELECT COUNT(*) FROM c_commu_review WHERE c_commu_id = ?";
394    $total_num = db_get_one($sql, $params);
395
396    if ($total_num != 0) {
397        $total_page_num = ceil($total_num / $page_size);
398        if ($page >= $total_page_num) {
399            $next = false;
400        } else {
401            $next = true;
402        }
403        if ($page <= 1) {
404            $prev = false;
405        } else {
406            $prev = true;
407        }
408    }
409
410    $start_num = ($page - 1) * $page_size + 1 ;
411    $end_num   = ($page - 1) * $page_size + $page_size > $total_num ? $total_num : ($page - 1) * $page_size + $page_size ;
412
413    return array($list, $prev, $next, $total_num, $start_num, $end_num);
414}
415
416function db_review_c_member_review_add_confirm_c_member_review4c_review_id($c_review_id, $c_member_id)
417{
418    if (!$c_review_id) {
419        return array();
420    }
421    $c_review_id_str = implode(',', array_map('intval', $c_review_id));
422    $sql = "SELECT * FROM c_review as cr, c_review_comment as crc , c_review_category as crc2 " .
423            " WHERE cr.c_review_id = crc.c_review_id " .
424            " AND cr.c_review_category_id = crc2.c_review_category_id " .
425            " AND crc.c_member_id = ?".
426            " AND cr.c_review_id IN (".$c_review_id_str.")";
427    $params = array(intval($c_member_id));
428    return db_get_all($sql, $params);
429}
430
431function db_review_c_review_add_c_review_category_id4category($category)
432{
433    $sql = "SELECT c_review_category_id FROM c_review_category WHERE category = ?";
434    $params = array($category);
435    return db_get_one($sql, $params);
436}
437
438function db_review_edit_c_review_comment4c_review_comment_id_c_member_id($c_review_comment_id, $c_member_id)
439{
440    $sql = "SELECT * FROM c_review_comment " .
441            " WHERE c_review_comment_id = ?" .
442            " AND c_member_id = ?";
443    $params = array(intval($c_review_comment_id), intval($c_member_id));
444    return db_get_row($sql, $params);
445}
446
447function db_review_edit_c_review_comment4c_review_comment_id($c_review_comment_id)
448{
449    $sql = 'SELECT * FROM c_review_comment WHERE c_review_comment_id = ?';
450    $params = array(intval($c_review_comment_id));
451    return db_get_row($sql, $params);
452}
453
454function db_review_clip_add_c_review_id4c_review_id_c_member_id($c_review_id, $c_member_id)
455{
456    $sql = "SELECT c_review_clip_id FROM c_review_clip" .
457            " WHERE c_review_id = ?" .
458            " AND c_member_id = ?";
459    $params = array(intval($c_review_id), intval($c_member_id));
460    return db_get_one($sql, $params);
461}
462
463function db_review_c_member_review_c_review_id4c_review_id_c_member_id($c_review_id, $c_member_id, $c_commu_id)
464{
465    $sql = "SELECT c_commu_review_id FROM c_commu_review" .
466            " WHERE c_commu_id = ?" .
467            " AND c_review_id = ?" .
468            " AND c_member_id = ?";
469    $params = array(intval($c_commu_id), intval($c_review_id), intval($c_member_id));
470    return db_get_one($sql, $params);
471}
472
473function db_review_edit_c_review4c_review_comment_id($c_review_comment_id)
474{
475    $sql = "SELECT c_review.* FROM c_review, c_review_comment" .
476        " WHERE c_review_comment.c_review_comment_id=?".
477        " AND c_review_comment.c_review_id=c_review.c_review_id";
478    $params = array(intval($c_review_comment_id));
479    return db_get_row($sql, $params);
480}
481
482function db_review_common_c_review_id4c_review_comment_id($c_review_comment_id)
483{
484    $sql = 'SELECT c_review_id FROM c_review_comment WHERE c_review_comment_id = ?';
485    $params = array(intval($c_review_comment_id));
486    return db_get_one($sql, $params);
487}
488
489function db_review_count_c_review_comment4c_review_id($c_review_id)
490{
491    $sql = 'SELECT COUNT(*) FROM c_review_comment WHERE c_review_id = ?';
492    $params = array(intval($c_review_id));
493    return db_get_one($sql, $params);
494}
495
496
497/**
498 * @copyright 2005-2007 OpenPNE Project
499 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
500 */
501
502function do_c_review_add_insert_c_review($product, $c_review_category_id)
503{
504    $sql = 'SELECT c_review_id FROM c_review WHERE asin = ?';
505    $params = array($product['asin']);
506    if ($c_review_id = db_get_one($sql, $params)) {
507        return $c_review_id;
508    }
509
510    $data = array(
511        'title'        => $product['name'],
512        'release_date' => $product['release'],
513        'manufacturer' => $product['manufacturer'],
514        'author'       => $product['author'],
515        'c_review_category_id' => intval($c_review_category_id),
516        'image_small'  => $product['imagesmall'],
517        'image_medium' => $product['imagemedium'],
518        'image_large'  => $product['imagelarge'],
519        'url'          => $product['url'],
520        'asin'         => $product['asin'],
521        'list_price'   => $product['listprice'],
522        'retail_price' => $product['ourprice'],
523        'r_datetime'   => db_now(),
524    );
525
526    //TODO:暫定処理
527    foreach ($data as $key => $value) {
528        if (is_null($value)) $data[$key] = '';
529    }
530    return db_insert('c_review', $data);
531}
532
533function do_c_review_add_insert_c_review_comment($c_review_id , $c_member_id, $body, $satisfaction_level)
534{
535    $data = array(
536        'c_review_id' => intval($c_review_id),
537        'c_member_id' => intval($c_member_id),
538        'body' => $body,
539        'satisfaction_level' => intval($satisfaction_level),
540        'r_datetime' => db_now(),
541    );
542    return db_insert('c_review_comment', $data);
543}
544
545function do_h_review_edit_update_c_review_comment($c_review_comment_id, $body, $satisfaction_level)
546{
547    $data = array(
548        'body' => $body,
549        'satisfaction_level' => intval($satisfaction_level),
550        'r_datetime' => db_now(),
551    );
552    $where = array('c_review_comment_id' => intval($c_review_comment_id));
553    return db_update('c_review_comment', $data, $where);
554}
555
556function do_h_review_edit_delete_c_review_comment($c_review_comment_id)
557{
558    $sql = 'DELETE FROM c_review_comment WHERE c_review_comment_id = ?';
559    $params = array(intval($c_review_comment_id));
560    db_query($sql, $params);
561}
562
563function do_h_review_clip_add_insert_c_review_clip($c_review_id, $c_member_id)
564{
565    $data = array(
566        'c_member_id' => intval($c_member_id),
567        'c_review_id' => intval($c_review_id),
568        'r_datetime' => db_now(),
569    );
570    return db_insert('c_review_clip', $data);
571}
572
573function do_c_member_review_insert_c_commu_review($c_review_id, $c_member_id, $c_commu_id)
574{
575    $data = array(
576        'c_commu_id' => intval($c_commu_id),
577        'c_review_id' => intval($c_review_id),
578        'c_member_id' => intval($c_member_id),
579        'r_datetime' => db_now(),
580    );
581    return db_insert('c_commu_review', $data);
582}
583
584function do_h_review_clip_list_delete_c_review_clip($c_member_id , $c_review_clips)
585{
586    if (!is_array($c_review_clips)) {
587        return false;
588    }
589    $ids = implode(',', array_map('intval', $c_review_clips));
590
591    $sql = 'DELETE FROM c_review_clip WHERE c_member_id = ?' .
592            ' AND c_review_id IN ('.$ids.')';
593    $params = array(intval($c_member_id));
594    return db_query($sql, $params);
595}
596
597function do_delete_c_review4c_review_id($c_review_id)
598{
599    $params = array(intval($c_review_id));
600
601    // c_review
602    $sql = 'DELETE FROM c_review WHERE c_review_id = ?';
603    db_query($sql, $params);
604
605    // c_review_clip
606    $sql = 'DELETE FROM c_review_clip WHERE c_review_id = ?';
607    db_query($sql, $params);
608
609    // c_commu_review
610    $sql = 'DELETE FROM c_commu_review WHERE c_review_id = ?';
611    db_query($sql, $params);
612}
613
614//コミュニティのおすすめレビューを削除
615function db_review_delete_c_review4c_review_id($c_review_id)
616{
617    $sql = 'DELETE FROM c_review WHERE c_review_id = ?';
618    $params = array(intval($c_review_id));
619    db_query($sql, $params);
620}
621
622//コミュニティのおすすめレビューを削除
623function db_review_delete_c_commu_review4c_commu_review_id($c_commu_review_id)
624{
625    $sql = 'DELETE FROM c_commu_review WHERE c_commu_review_id = ?';
626    $params = array(intval($c_commu_review_id));
627    db_query($sql, $params);
628}
629
630//コミュニティのおすすめレビューを取得(一つ)
631function db_review_get_c_commu_review_one4c_commu_review_id($c_commu_review_id)
632{
633    $sql = 'SELECT * FROM c_commu_review WHERE c_commu_review_id = ?';
634    $params = array(intval($c_commu_review_id));
635    return db_get_row($sql, $params);
636}
637
638?>
Note: See TracBrowser for help on using the repository browser.