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

source: OpenPNE/branches/work/asano/pne_album/webapp/lib/db/album.php @ 6362

Last change on this file since 6362 was 6362, checked in by cybaron, 14 years ago

フレンドの個別アルバムを閲覧した時にエラーが出ていたのを修正。

File size: 21.5 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/**
8 * db_album_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_album_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 c_album.public_flag <> 'private'";
22            break;
23        case 'private':
24            $pf_cond = " AND c_album.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 c_album.public_flag <> 'private'";
32            } else {
33                $pf_cond = " AND c_album.public_flag = 'public'";
34            }
35        }
36    }
37    return $pf_cond;
38}
39
40//// c_album
41
42/**
43 * アルバム情報を取得
44 * @param int $c_album_id
45 */
46function db_album_get_c_album4c_album_id($c_album_id)
47{
48    $sql = 'SELECT * FROM c_album WHERE c_album_id = ?';
49    $params = array(intval($c_album_id));
50   
51    $album = db_get_row($sql, $params);
52
53    return $album;
54}
55
56/**
57 * あるメンバーのアルバムのサブジェクト一覧を取得
58 * @param int $c_member_id target_member_id
59 * @param int $count
60 * @param int $u viewer's member_id
61 */
62function db_album_get_c_album_subject_list4c_member_id($c_member_id, $count= 10 ,$u = null)
63{
64    $pf_condition = db_album_public_flag_condition($c_member_id, $u);
65    $sql = 'SELECT subject,c_album_id FROM c_album WHERE c_member_id = ? ' 
66        . $pf_condition
67        . ' ORDER BY r_datetime DESC';
68   
69    $params = array(intval($c_member_id));       
70    return db_get_all_limit($sql, 0, $count, $params);
71}
72
73/**
74 * アルバム画像を取得
75 * @param int $c_album_image_id
76 */
77function db_album_image_get_c_album_image4id($c_album_image_id)
78{
79    $sql = 'SELECT * FROM c_album_image WHERE c_album_image_id = ?';
80    $params = array(intval($c_album_image_id));
81
82    return db_get_row($sql,$params);
83}
84
85/**
86 * c_album_idをキーとしてc_albumデータが存在するか判定
87 * @param int $c_album_id
88 * @return bool true,false
89 */
90function p_common_is_active_c_album_id($c_album_id)
91{
92    $sql = 'SELECT c_album_id FROM c_album WHERE c_album_id = ?';
93    return (bool)db_get_one($sql, array(intval($c_album_id)));
94}
95
96/**
97 * c_album_image_idをキーとしてc_album_imageデータが存在するか判定
98 * @param int $c_album_image_id
99 * @return bool true,false
100 */
101function p_common_is_active_c_album_image_id($c_album_image_id)
102{
103    $sql = 'SELECT c_album_image_id FROM c_album_image WHERE c_album_image_id = ?';
104    $params = array(intval($c_album_image_id));
105   
106    return (bool)db_get_one($sql,$params);
107}
108
109/**
110 * アルバムIDからアルバムに登録された画像を取得
111 * @param   int   $c_album_id
112 * @return  array
113 */
114function db_album_get_c_album_page4id($c_album_id,$page_size=10,$page=0)
115{
116    $select = 'SELECT ab.*,i.c_album_image_id,i.image_filename,i.image_description';
117    $from  = ' FROM c_album AS ab,c_album_image AS i';
118    $where = ' WHERE ab.c_album_id = i.c_album_id' .
119             ' AND ab.c_album_id = ?';
120    $orderby = ' ORDER BY i.c_album_image_id ASC';
121    $sql = $select .$from . $where .$orderby;
122   
123    $params = array(intval($c_album_id));
124    $list = db_get_all_limit($sql, $page_size * ($page - 1), $page_size, $params);
125   
126    $sql = 'SELECT COUNT(c_album_image_id) FROM c_album_image WHERE c_album_id = ?';
127    $params = array(intval($c_album_id));
128    $total_num = db_get_one($sql, $params);
129
130    if ($total_num != 0) {
131        $total_page_num =  ceil($total_num / $page_size);
132        if ($page >= $total_page_num) {
133            $next = false;
134        } else {
135            $next = true;
136        }
137
138        if ($page <= 1) {
139            $prev = false;
140        } else {
141            $prev = true;
142        }
143    }
144    return array($list, $prev, $next, $total_num);
145}
146
147/**
148 * 指定したアルバム画像の前の画像IDを取得する
149 * @param int $c_member_id
150 * @param int $c_album_id
151 * @param int $c_album_image_id
152 * @param int $u
153 */
154function db_album_image_c_album_image_id_prev4c_album_id($c_member_id, $c_album_id, $c_album_image_id, $u = null)
155{
156    $public_flag_condition = db_album_public_flag_condition($c_member_id, $u);
157   
158    $select  = 'SELECT c_album_image.c_album_image_id ';
159    $from    = ' FROM c_album_image, c_album';
160    $where   = ' WHERE c_album.c_album_id = c_album_image.c_album_id' . 
161                ' AND c_album.c_member_id = ?' .
162                ' AND c_album.c_album_id = ?' .
163                ' AND c_album_image.c_album_image_id < ?'
164                . $public_flag_condition;
165    $orderby = ' ORDER BY c_album_image.c_album_image_id DESC';
166    $sql = $select . $from . $where . $orderby;
167    $params = array(intval($c_member_id),intval($c_album_id),intval($c_album_image_id));
168       
169    return db_get_one($sql, $params);
170}
171
172/**
173 * 指定したアルバム画像の次の画像IDを取得する
174 * @param int $c_member_id
175 * @param int $c_album_id
176 * @param int $c_album_image_id
177 * @param int $u
178 */
179function db_album_image_c_album_image_id_next4c_album_id($c_member_id, $c_album_id, $c_album_image_id, $u = null)
180{
181    $public_flag_condition = db_album_public_flag_condition($c_member_id, $u);
182   
183    $select  = 'SELECT c_album_image.c_album_image_id ';
184    $from    = ' FROM c_album_image, c_album';
185    $where   = ' WHERE c_album.c_album_id = c_album_image.c_album_id' . 
186                ' AND c_album.c_member_id = ?' .
187                ' AND c_album.c_album_id = ?' .
188                ' AND c_album_image.c_album_image_id > ?'
189                . $public_flag_condition;
190    $orderby = ' ORDER BY c_album_image.c_album_image_id ASC';
191    $sql = $select . $from . $where . $orderby;
192    $params = array(intval($c_member_id),intval($c_album_id),intval($c_album_image_id));
193       
194    return db_get_one($sql, $params);
195}
196
197/**
198 * c_albumの閲覧権限チェック
199 * @param int $c_album_id
200 * @param int $c_member_id
201 */
202function pne_check_album_public_flag($c_album_id, $c_member_id)
203{
204    $c_album = db_album_get_c_album4c_album_id($c_album_id);
205    if ($c_album['c_member_id'] == $c_member_id) {
206        return true;
207    }
208
209    switch ($c_album['public_flag']) {
210    case 'public':
211        $allowed = true;
212        break;
213    case 'friend':
214        $allowed = db_friend_is_friend($c_album['c_member_id'], $c_member_id);
215        break;
216    case 'private':
217    default:
218        $allowed = false;
219        break;
220    }
221
222    return $allowed;
223}
224
225/*
226function p_fh_album_list_album_image_list4c_album_id($c_album_id, $page_size, $page)
227{
228    $sql = 'SELECT * FROM c_album_image WHERE c_album_id = ?';
229    $params = array(intval($c_album_id));
230    $list = db_get_all_page($sql, $page, $page_size, $params);
231
232   
233    $sql = 'SELECT COUNT(*) FROM c_album_image WHERE c_album_id = ?';
234    $total_num = db_get_one($sql, $params);
235
236    if ($total_num != 0) {
237        $total_page_num =  ceil($total_num / $page_size);
238        if ($page >= $total_page_num) {
239            $next = false;
240        } else {
241            $next = true;
242        }
243
244        if ($page <= 1) {
245            $prev = false;
246        } else {
247            $prev = true;
248        }
249    }
250    return array($list, $prev, $next, $total_num);
251}
252*/
253
254//取得相册列表
255/*
256function p_fh_album_list_fh_album_list4c_member_id($c_member_id, $page_size, $page,$u = null)
257{
258    $pf_cond = db_album_public_flag_condition($c_member_id, $u);
259    $sql = 'SELECT * FROM c_album WHERE c_member_id = ?'.$pf_cond.
260           ' ORDER BY r_datetime DESC';
261    $params = array(intval($c_member_id));
262    $list = db_get_row($sql,$params);
263   
264//    print "<pre>";
265//    echo "IN DATABASE<br><br>";
266//    print_r ($list);
267//    echo "IN DATABASE<br><br>";
268//    print "</pre>";
269   
270    $sql = 'SELECT COUNT(*) FROM c_album WHERE c_member_id = ?' . $pf_cond;
271    $params1 = array();
272    $total_num = db_get_one($sql, $params);
273   
274    if ($total_num != 0) {
275        $total_page_num =  ceil($total_num / $page_size);
276        if ($page >= $total_page_num) {
277            $next = false;
278        } else {
279            $next = true;
280        }
281
282        if ($page <= 1) {
283            $prev = false;
284        } else {
285            $prev = true;
286        }
287    }
288   
289    $temp = array($list, $prev, $next, $total_num);
290   
291
292    return $temp;
293}
294*/
295
296/*
297function db_album_category_c_album_category4c_album_id($c_album_id)
298{
299    $sql = 'SELECT category_name FROM c_album_category AS cac,c_album_category_album AS caca WHERE cac.c_album_category_id = caca.c_album_category_id AND caca.c_album_id = ?';
300    $params = array(intval($c_album_id));
301    return db_get_one($sql, $params);
302}
303*/
304
305/**
306 * 特定ユーザーのアルバムリスト取得
307 * @param int $c_member_id target_c_member_id
308 * @param int $page_size
309 * @param int $page
310 * @param int $u viewer's c_member_id
311 */
312function p_fh_album_list_fh_my_album_list4c_member_id($c_member_id, $page_size, $page, $u = null)
313{
314    $pf_cond = db_album_public_flag_condition($c_member_id, $u);
315    $sql = 'SELECT * FROM c_album WHERE c_member_id = ?'. $pf_cond.
316           ' ORDER BY r_datetime DESC';
317    $params = array(intval($c_member_id));
318    $list = db_get_all_page($sql,$page, $page_size,$params);
319   
320    $sql = 'SELECT COUNT(c_album_id) FROM c_album WHERE c_member_id = ?' . $pf_cond;
321    $total_num = db_get_one($sql, $params);
322   
323    if ($total_num != 0) {
324        $total_page_num =  ceil($total_num / $page_size);
325        if ($page >= $total_page_num) {
326            $next = false;
327        } else {
328            $next = true;
329        }
330
331        if ($page <= 1) {
332            $prev = false;
333        } else {
334            $prev = true;
335        }
336    }
337   
338    return array($list, $prev, $next, $total_num);
339}
340
341/**
342 * アルバム検索
343 * 検索ポイントはアルバムタイトル・アルバム説明
344 * 空白(全角半角問わない)でand検索可
345 */
346function p_h_album_list_all_search_c_album4c_album($keyword, $page_size, $page, $c_member_id = '')
347{
348    $params = array();
349
350    $select = 'SELECT *';
351    $from = ' FROM c_album';
352
353    //自分のアルバムだけを対象にする事も出来る
354    if ($c_member_id) {
355        $where = ' WHERE c_member_id = ?';
356        $params[] = intval($c_member_id);
357    } else {
358        $where = " WHERE public_flag = 'public'";
359    }
360
361    //and検索を実装
362    //subject,body を検索
363    if ($keyword) {
364        //全角空白を半角に統一
365        $keyword = str_replace(' ', ' ', $keyword);
366
367        $keyword_list = explode(' ', $keyword);
368        foreach ($keyword_list as $word) {
369            $word = check_search_word($word);
370           
371            $where .= ' AND (subject LIKE ? OR description LIKE ?)';
372            $params[] = '%'.$word.'%';
373            $params[] = '%'.$word.'%';
374        }
375    }
376    $order = " ORDER BY r_datetime DESC";
377
378    $sql = $select . $from . $where . $order;
379   
380    $list = db_get_all_page($sql, $page, $page_size, $params);
381    foreach($list as $key => $value) {
382        $list[$key]['c_member'] = db_common_c_member_with_profile($value['c_member_id']);
383    }
384
385
386    $sql = 'SELECT COUNT(c_album_id)' . $from . $where;
387    $total_num = db_get_one($sql, $params);
388
389    if ($total_num != 0) {
390        $total_page_num =  ceil($total_num / $page_size);
391        if ($page >= $total_page_num) {
392            $next = false;
393        } else {
394            $next = true;
395        }
396        if ($page <= 1) {
397            $prev = false;
398        } else {
399            $prev = true;
400        }
401    }
402    return array($list , $prev , $next, $total_num);
403}
404
405/**
406 * フレンドの最新アルバムリスト
407 */
408function k_p_h_album_list_friend_h_album_list_friend4c_member_id($c_member_id, $page_size, $page)
409{
410    $from = "c_album, c_friend";
411    $where = "c_friend.c_member_id_from = ?" .
412            " AND c_album.c_member_id = c_friend.c_member_id_to";
413
414    $sql = "SELECT c_album.* FROM {$from} WHERE {$where}" .
415            " ORDER BY c_album.r_datetime DESC";
416    $params = array(intval($c_member_id));
417    $lst = db_get_all_page($sql, $page, $page_size, $params);
418
419    foreach ($lst as $key=>$value) {
420        //$lst[$key]['count_comments'] = db_album_count_c_album_comment4c_album_id($value['c_album_id']);
421        $lst[$key]['c_member'] = db_common_c_member4c_member_id($value['c_member_id']);
422    }
423
424    $sql = "SELECT count(*) FROM {$from} WHERE {$where}";
425    $total_num = db_get_one($sql, $params);
426
427    if ($total_num != 0) {
428        $total_page_num =  ceil($total_num / $page_size);
429        if ($page >= $total_page_num) {
430            $next = false;
431        } else {
432            $next = true;
433        }
434
435        if ($page <= 1) {
436            $prev = false;
437        } else {
438            $prev = true;
439        }
440    }
441
442    return array($lst, $prev, $next, $total_num);
443}
444
445/**
446 * アルバムを追加
447 */
448function db_album_insert_c_album($c_member_id, $subject, $description,$public_flag)
449{
450    $data = array(
451        'c_member_id' => intval($c_member_id),
452        'subject' => $subject,
453        'description' => $description,
454        'public_flag' => $public_flag,
455        'r_datetime' => db_now(),
456    );
457   
458    return db_insert('c_album', $data);
459}
460
461
462function db_album_update_c_album($c_album_id,$subject,$description,$public_flag,$image_filename)
463{
464    $data = array(
465        'subject' => $subject,
466        'description' => $description,
467        'public_flag' => $public_flag,
468    );
469    if ($image_filename) $data['album_cover_image'] = $image_filename;
470
471    $where = array(
472        'c_album_id' => intval($c_album_id),
473    );
474    return db_update('c_album', $data, $where);
475   
476}
477
478function db_album_update_c_album_image($c_album_image_id,$image_filename,$image_description)
479{
480    $data = array(
481        'image_description' => $image_description,
482    );
483    if ($image_filename) $data['image_filename'] = $image_filename;
484
485    $where = array(
486        'c_album_image_id' => intval($c_album_image_id),
487    );
488   
489    return db_update('c_album_image', $data, $where);
490}
491
492/**
493 * アルバムの情報を更新
494 */
495function db_album_update_c_album_cover($c_album_id,$subject,$description,$album_cover_image,$public_flag)
496{
497    $data = array(
498        'subject' => $subject,
499        'description' => $description,
500        'public_flag' => $public_flag,
501    );
502    if ($album_cover_image) $data['album_cover_image'] = $album_cover_image;
503
504    $where = array(
505        'c_album_id' => intval($c_album_id),
506    );
507
508    return db_update('c_album', $data, $where);
509}
510
511/**
512 * アルバムの表紙画像の名前を更新
513 */
514function db_album_update_c_album_album_cover_image($c_album_id,$album_cover_image)
515{
516    $data = array(
517        'album_cover_image' => $album_cover_image,
518    );
519
520    $where = array(
521        'c_album_id' => intval($c_album_id),
522    );
523    return db_update('c_album', $data, $where);
524}
525
526/**
527 * アルバムを編集
528 */
529/*
530function db_album_insert_c_album_image($c_album_image_id,$image_filename_1 = '',$image_description)
531{
532    $data = array(
533            'c_album_image_id'=>$c_album_image_id,
534            'image_description'=>$image_description,
535            'r_datetime' => db_now(),
536    );
537    if ($image_filename_1) $data['image_filename'] = $image_filename_1;
538
539    $where = array(
540        'c_album_image_id' => intval($c_album_image_id),
541    );
542
543    return db_insert('c_album_image', $data, $where);
544}
545*/
546
547/**
548 * c_album_imageの新規登録
549 * @param int $c_album_id
550 * @param string $image_filename
551 * @param string $image_description
552 */
553function db_insert_c_album_image($c_album_id, $image_filename, $image_description)
554{
555    $data = array(
556            'c_album_id'=>$c_album_id,
557            'image_description'=>$image_description,
558            'r_datetime' => db_now(),
559    );
560    if ($image_filename) $data['image_filename'] = $image_filename;
561       
562    return db_insert('c_album_image', $data);
563}
564
565/**
566 * アルバムの削除、画像も削除
567 * @param int $c_album_id
568 */
569function db_album_delete_c_album($c_album_id)
570{
571    //function cacheの削除
572    $c_album_image = db_album_get_c_album4id($c_album_id);
573    pne_cache_drop('db_album_get_c_album_list4c_member_id', $c_album_image['c_member_id'], 5);
574
575    //アルバムに登録された画像
576    foreach($c_album_image as $key=>$value){
577        db_album_image_data_delete($c_album_image[$key]['image_filename']);
578    }
579
580    // アルバムの表紙
581    $c_album = db_album_get_c_album4c_album_id($c_album_id);
582    if($c_album['album_cover_image']){
583        db_album_image_data_delete($c_album['album_cover_image']);
584    }
585
586    $params = array(intval($c_album_id));
587   
588    //アルバムと画像の関連
589    $sql = 'DELETE FROM c_album_image WHERE c_album_id = ?';
590    db_query($sql, $params);
591
592    // アルバム
593    $sql = 'DELETE FROM c_album WHERE c_album_id = ?';
594    db_query($sql, $params);
595
596    return;
597}
598
599/**
600 * c_album_image_idをキーとしてc_album_imageテーブルからデータを削除
601 */
602function db_album_delete_c_album_image($c_album_image_id)
603{
604    $sql = 'DELETE FROM c_album_image WHERE c_album_image_id = ?';
605    $params = array(intval($c_album_image_id));
606
607    return db_query($sql, $params);
608}
609
610/**
611 * アルバム用の画像を登録
612 */
613function image_insert_c_image_album4tmp($prefix, $tmpfile)
614{
615    if (!$tmpfile || preg_match('/[^\.\w]/', $tmpfile)) return false;
616
617    $path_parts = pathinfo($tmpfile);
618    $ext = $path_parts['extension'];
619    $ext = strtolower($ext);
620
621    $allowed_ext = array('jpg', 'jpeg', 'gif', 'png');
622    if (!in_array($ext, $allowed_ext)) {
623        return false;
624    }
625
626    $filename = sprintf('%s_%s.%s', $prefix, time(), $ext);
627
628    if (!OPENPNE_TMP_IMAGE_DB) {
629        $img_tmp_dir_path = OPENPNE_VAR_DIR . '/tmp/';
630        $filepath = $img_tmp_dir_path . basename($tmpfile);
631
632        if (db_image_insert_c_image_album2($filename, $filepath)) {
633            return $filename;
634        }
635    } else {
636        $c_tmp_image = c_tmp_image4filename($tmpfile);
637
638        $params = array(
639            'filename' => $filename,
640            'bin' => $c_tmp_image['bin'],
641            'r_datetime' => db_now(),
642            'type' => '',
643        );
644       
645        if (db_insert("c_image_album", $params)) {
646            return $filename;
647        }
648    }
649    return false;
650}
651
652function db_image_insert_c_image_album2($filename, $filepath)
653{
654    if (!is_readable($filepath)) return false;
655
656    $fp = fopen($filepath, 'rb');
657    $image_data = fread($fp, filesize($filepath));
658    fclose($fp);
659
660    // 画像かどうかのチェック
661    if (!@imagecreatefromstring($image_data)) return false;
662
663    //TODO:typeフィールドを使う
664    return db_image_insert_c_image_album($filename, $image_data);
665}
666
667function db_image_insert_c_image_album($filename, $bin, $type = '')
668{
669    $db =& db_get_instance('image');
670
671    $data = array(
672        'filename'   => $filename,
673        'bin'        => base64_encode($bin),
674        'type'       => $type,
675        'r_datetime' => db_now(),
676    );
677    return $db->insert('c_image_album', $data, 'c_image_id');
678}
679
680//管理画面用に残しておく
681function db_image_c_album_image_list($page, $page_size, &$pager)
682{
683    $db =& db_get_instance('image');
684
685    $sql = 'SELECT c_image_id FROM c_image_album ORDER BY c_image_id DESC';
686    $id_list = db_get_col_page($sql, $page, $page_size);
687
688    $c_image_list = array();
689    foreach ($id_list as $c_image_id) {
690        $sql = 'SELECT c_image_id, filename, r_datetime FROM c_image_album WHERE c_image_id = ?';
691        $params = array(intval($c_image_id));
692        $c_image_list[] = $db->get_row($sql, $params);
693    }
694
695    $sql = 'SELECT COUNT(*) FROM c_image_album';
696    $total_num = $db->get_one($sql);
697
698    $pager = admin_make_pager($page, $page_size, $total_num);
699    return $c_image_list;
700}
701
702/*
703function db_image_c_album_image4c_image_id($c_image_id)
704{
705    $db =& db_get_instance('image');
706
707    $sql = 'SELECT * FROM c_image_album WHERE c_image_id = ?';
708    $params = array(intval($c_image_id));
709    return $db->get_row($sql, $params);
710}
711*/
712
713function db_album_image_data_delete($image_filename)
714{
715    if (!$image_filename) return false;
716
717    db_album_image_delete_c_image($image_filename);
718
719    // cacheの削除
720    image_cache_delete($image_filename);
721}
722
723
724
725function db_album_image_delete_c_image($filename)
726{
727    $db =& db_get_instance('image');
728
729    $sql = 'DELETE FROM c_image_album WHERE filename = ?';
730    $params = array($filename);
731    return $db->query($sql, $params);
732}
733
734function db_image_is_c_album_image4filename($filename)
735{
736    if (!$filename) return false;
737
738    $db =& db_get_instance('image');
739
740    $sql = 'SELECT c_image_id FROM c_image_album WHERE filename = ?';
741    $params = array($filename);
742    return (bool)$db->get_one($sql, $params);
743}
744
745/*
746function admin_insert_c_image_album($upfile_obj, $filename)
747{
748    if ($upfile_obj &&
749        is_uploaded_file($upfile_obj['tmp_name']) &&
750        db_image_insert_c_image_album2($filename, $upfile_obj['tmp_name']) > 0)
751    {
752        return $filename;
753    }
754
755    return false;
756}
757*/
758
759?>
Note: See TracBrowser for help on using the repository browser.