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

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

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

・db/album.php不要関数削除
・アルバム機能 ロジック整理。

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
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_album_row4id($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
382    $sql = 'SELECT COUNT(c_album_id)' . $from . $where;
383    $total_num = db_get_one($sql, $params);
384
385    if ($total_num != 0) {
386        $total_page_num =  ceil($total_num / $page_size);
387        if ($page >= $total_page_num) {
388            $next = false;
389        } else {
390            $next = true;
391        }
392        if ($page <= 1) {
393            $prev = false;
394        } else {
395            $prev = true;
396        }
397    }
398    return array($list , $prev , $next, $total_num);
399}
400
401/**
402 * フレンドの最新アルバムリスト
403 */
404function k_p_h_album_list_friend_h_album_list_friend4c_member_id($c_member_id, $page_size, $page)
405{
406    $from = "c_album, c_friend";
407    $where = "c_friend.c_member_id_from = ?" .
408            " AND c_album.c_member_id = c_friend.c_member_id_to";
409
410    $sql = "SELECT c_album.* FROM {$from} WHERE {$where}" .
411            " ORDER BY c_album.r_datetime DESC";
412    $params = array(intval($c_member_id));
413    $lst = db_get_all_page($sql, $page, $page_size, $params);
414
415    foreach ($lst as $key=>$value) {
416        //$lst[$key]['count_comments'] = db_album_count_c_album_comment4c_album_id($value['c_album_id']);
417        $lst[$key]['c_member'] = db_common_c_member4c_member_id($value['c_member_id']);
418    }
419
420    $sql = "SELECT count(*) FROM {$from} WHERE {$where}";
421    $total_num = db_get_one($sql, $params);
422
423    if ($total_num != 0) {
424        $total_page_num =  ceil($total_num / $page_size);
425        if ($page >= $total_page_num) {
426            $next = false;
427        } else {
428            $next = true;
429        }
430
431        if ($page <= 1) {
432            $prev = false;
433        } else {
434            $prev = true;
435        }
436    }
437
438    return array($lst, $prev, $next, $total_num);
439}
440
441/**
442 * アルバムを追加
443 */
444function db_album_insert_c_album($c_member_id, $subject, $description,$public_flag)
445{
446    $data = array(
447        'c_member_id' => intval($c_member_id),
448        'subject' => $subject,
449        'description' => $description,
450        'public_flag' => $public_flag,
451        'r_datetime' => db_now(),
452    );
453   
454    return db_insert('c_album', $data);
455}
456
457
458function db_album_update_c_album($c_album_id,$subject,$description,$public_flag,$image_filename)
459{
460    $data = array(
461        'subject' => $subject,
462        'description' => $description,
463        'public_flag' => $public_flag,
464    );
465    if ($image_filename) $data['album_cover_image'] = $image_filename;
466
467    $where = array(
468        'c_album_id' => intval($c_album_id),
469    );
470    return db_update('c_album', $data, $where);
471   
472}
473
474function db_album_update_c_album_image($c_album_image_id,$image_filename,$image_description)
475{
476    $data = array(
477        'image_description' => $image_description,
478    );
479    if ($image_filename) $data['image_filename'] = $image_filename;
480
481    $where = array(
482        'c_album_image_id' => intval($c_album_image_id),
483    );
484   
485    return db_update('c_album_image', $data, $where);
486}
487
488/**
489 * アルバムの情報を更新
490 */
491function db_album_update_c_album_cover($c_album_id,$subject,$description,$album_cover_image,$public_flag)
492{
493    $data = array(
494        'subject' => $subject,
495        'description' => $description,
496        'public_flag' => $public_flag,
497    );
498    if ($album_cover_image) $data['album_cover_image'] = $album_cover_image;
499
500    $where = array(
501        'c_album_id' => intval($c_album_id),
502    );
503
504    return db_update('c_album', $data, $where);
505}
506
507/**
508 * アルバムの表紙画像の名前を更新
509 */
510function db_album_update_c_album_album_cover_image($c_album_id,$album_cover_image)
511{
512    $data = array(
513        'album_cover_image' => $album_cover_image,
514    );
515
516    $where = array(
517        'c_album_id' => intval($c_album_id),
518    );
519    return db_update('c_album', $data, $where);
520}
521
522/**
523 * アルバムを編集
524 */
525/*
526function db_album_insert_c_album_image($c_album_image_id,$image_filename_1 = '',$image_description)
527{
528    $data = array(
529            'c_album_image_id'=>$c_album_image_id,
530            'image_description'=>$image_description,
531            'r_datetime' => db_now(),
532    );
533    if ($image_filename_1) $data['image_filename'] = $image_filename_1;
534
535    $where = array(
536        'c_album_image_id' => intval($c_album_image_id),
537    );
538
539    return db_insert('c_album_image', $data, $where);
540}
541*/
542
543/**
544 * c_album_imageの新規登録
545 * @param int $c_album_id
546 * @param string $image_filename
547 * @param string $image_description
548 */
549function db_insert_c_album_image($c_album_id, $image_filename, $image_description)
550{
551    $data = array(
552            'c_album_id'=>$c_album_id,
553            'image_description'=>$image_description,
554            'r_datetime' => db_now(),
555    );
556    if ($image_filename) $data['image_filename'] = $image_filename;
557       
558    return db_insert('c_album_image', $data);
559}
560
561/**
562 * アルバムの削除、画像も削除
563 * @param int $c_album_id
564 */
565function db_album_delete_c_album($c_album_id)
566{
567    //function cacheの削除
568    $c_album_image = db_album_get_c_album4id($c_album_id);
569    pne_cache_drop('db_album_get_c_album_list4c_member_id', $c_album_image['c_member_id'], 5);
570
571    //アルバムに登録された画像
572    foreach($c_album_image as $key=>$value){
573        db_album_image_data_delete($c_album_image[$key]['image_filename']);
574    }
575
576    // アルバムの表紙
577    $c_album = db_album_get_c_album4c_album_id($c_album_id);
578    if($c_album['album_cover_image']){
579        db_album_image_data_delete($c_album['album_cover_image']);
580    }
581
582    $params = array(intval($c_album_id));
583   
584    //アルバムと画像の関連
585    $sql = 'DELETE FROM c_album_image WHERE c_album_id = ?';
586    db_query($sql, $params);
587
588    // アルバム
589    $sql = 'DELETE FROM c_album WHERE c_album_id = ?';
590    db_query($sql, $params);
591
592    return;
593}
594
595/**
596 * c_album_image_idをキーとしてc_album_imageテーブルからデータを削除
597 */
598function db_album_delete_c_album_image($c_album_image_id)
599{
600    $sql = 'DELETE FROM c_album_image WHERE c_album_image_id = ?';
601    $params = array(intval($c_album_image_id));
602
603    return db_query($sql, $params);
604}
605
606/**
607 * アルバム用の画像を登録
608 */
609function image_insert_c_image_album4tmp($prefix, $tmpfile)
610{
611    if (!$tmpfile || preg_match('/[^\.\w]/', $tmpfile)) return false;
612
613    $path_parts = pathinfo($tmpfile);
614    $ext = $path_parts['extension'];
615    $ext = strtolower($ext);
616
617    $allowed_ext = array('jpg', 'jpeg', 'gif', 'png');
618    if (!in_array($ext, $allowed_ext)) {
619        return false;
620    }
621
622    $filename = sprintf('%s_%s.%s', $prefix, time(), $ext);
623
624    if (!OPENPNE_TMP_IMAGE_DB) {
625        $img_tmp_dir_path = OPENPNE_VAR_DIR . '/tmp/';
626        $filepath = $img_tmp_dir_path . basename($tmpfile);
627
628        if (db_image_insert_c_image_album2($filename, $filepath)) {
629            return $filename;
630        }
631    } else {
632        $c_tmp_image = c_tmp_image4filename($tmpfile);
633
634        $params = array(
635            'filename' => $filename,
636            'bin' => $c_tmp_image['bin'],
637            'r_datetime' => db_now(),
638            'type' => '',
639        );
640       
641        if (db_insert("c_image_album", $params)) {
642            return $filename;
643        }
644    }
645    return false;
646}
647
648function db_image_insert_c_image_album2($filename, $filepath)
649{
650    if (!is_readable($filepath)) return false;
651
652    $fp = fopen($filepath, 'rb');
653    $image_data = fread($fp, filesize($filepath));
654    fclose($fp);
655
656    // 画像かどうかのチェック
657    if (!@imagecreatefromstring($image_data)) return false;
658
659    //TODO:typeフィールドを使う
660    return db_image_insert_c_image_album($filename, $image_data);
661}
662
663function db_image_insert_c_image_album($filename, $bin, $type = '')
664{
665    $db =& db_get_instance('image');
666
667    $data = array(
668        'filename'   => $filename,
669        'bin'        => base64_encode($bin),
670        'type'       => $type,
671        'r_datetime' => db_now(),
672    );
673    return $db->insert('c_image_album', $data, 'c_image_id');
674}
675
676//管理画面用に残しておく
677function db_image_c_album_image_list($page, $page_size, &$pager)
678{
679    $db =& db_get_instance('image');
680
681    $sql = 'SELECT c_image_id FROM c_image_album ORDER BY c_image_id DESC';
682    $id_list = db_get_col_page($sql, $page, $page_size);
683
684    $c_image_list = array();
685    foreach ($id_list as $c_image_id) {
686        $sql = 'SELECT c_image_id, filename, r_datetime FROM c_image_album WHERE c_image_id = ?';
687        $params = array(intval($c_image_id));
688        $c_image_list[] = $db->get_row($sql, $params);
689    }
690
691    $sql = 'SELECT COUNT(*) FROM c_image_album';
692    $total_num = $db->get_one($sql);
693
694    $pager = admin_make_pager($page, $page_size, $total_num);
695    return $c_image_list;
696}
697
698/*
699function db_image_c_album_image4c_image_id($c_image_id)
700{
701    $db =& db_get_instance('image');
702
703    $sql = 'SELECT * FROM c_image_album WHERE c_image_id = ?';
704    $params = array(intval($c_image_id));
705    return $db->get_row($sql, $params);
706}
707*/
708
709function db_album_image_data_delete($image_filename)
710{
711    if (!$image_filename) return false;
712
713    db_album_image_delete_c_image($image_filename);
714
715    // cacheの削除
716    image_cache_delete($image_filename);
717}
718
719
720
721function db_album_image_delete_c_image($filename)
722{
723    $db =& db_get_instance('image');
724
725    $sql = 'DELETE FROM c_image_album WHERE filename = ?';
726    $params = array($filename);
727    return $db->query($sql, $params);
728}
729
730function db_image_is_c_album_image4filename($filename)
731{
732    if (!$filename) return false;
733
734    $db =& db_get_instance('image');
735
736    $sql = 'SELECT c_image_id FROM c_image_album WHERE filename = ?';
737    $params = array($filename);
738    return (bool)$db->get_one($sql, $params);
739}
740
741/*
742function admin_insert_c_image_album($upfile_obj, $filename)
743{
744    if ($upfile_obj &&
745        is_uploaded_file($upfile_obj['tmp_name']) &&
746        db_image_insert_c_image_album2($filename, $upfile_obj['tmp_name']) > 0)
747    {
748        return $filename;
749    }
750
751    return false;
752}
753*/
754
755?>
Note: See TracBrowser for help on using the repository browser.