X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot.class.php;h=60521adf247c2a15ed98d3f6a6abc4de7917e05f;hp=e6c4aff91e8b4f548ede61302c491cca57fa2be3;hb=dcc26041d1dd86d47516e143fd5e475e588180cf;hpb=aab7d4d07c16dc78a6d2a41223d469a1a60e5022 diff --git a/phpfspot.class.php b/phpfspot.class.php index e6c4aff..60521ad 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -206,6 +206,7 @@ class PHPFSPOT { /* Starting with F-Spot 0.4.2, the rating-feature was available */ if($this->dbver > 10) { + $this->tmpl->assign('has_rating', true); $this->sort_orders = array_merge($this->sort_orders, array( 'rate_asc' => 'Rate ↑', 'rate_desc' => 'Rate ↓', @@ -298,11 +299,15 @@ class PHPFSPOT { } break; case 'export': - $this->tmpl->show("export.tpl"); + /* fetch export template */ + print $this->tmpl->fetch("export.tpl"); + /* no further execution necessary. */ return; break; case 'slideshow': - $this->tmpl->show("slideshow.tpl"); + /* fetch slideshow template */ + print $this->tmpl->show("slideshow.tpl"); + /* no further execution necessary. */ return; break; case 'rss': @@ -321,15 +326,26 @@ class PHPFSPOT { } } + /* if date-search variables are registered in the session, set the check + for "consider date-range" in the html output + */ if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) $this->tmpl->assign('date_search_enabled', true); + /* if rate-search variables are registered in the session, set the check + for "consider rate-range" in the html output + */ + if(isset($_SESSION['rate_from']) && isset($_SESSION['rate_to'])) { + $this->tmpl->assign('rate_search_enabled', true); + } + $this->tmpl->register_function("sort_select_list", array(&$this, "smarty_sort_select_list"), false); $this->tmpl->assign('search_from_date', $this->get_calendar('from')); $this->tmpl->assign('search_to_date', $this->get_calendar('to')); $this->tmpl->assign('preset_selected_tags', $this->getSelectedTags()); $this->tmpl->assign('preset_available_tags', $this->getAvailableTags()); + $this->tmpl->assign('rate_search', $this->get_rate_search()); if(!isset($content)) { if(isset($_SESSION['selected_tags']) && !empty($_SESSION['selected_tags'])) @@ -506,6 +522,75 @@ class PHPFSPOT { } // getPhotoName() + /** + * get photo rating level + * + * this function will return the integer-based rating + * level of the photo. This can only be done, if the F-Spot + * database is at a specific level. If rating value can not + * be found, zero will be returned indicating no rating value + * is available. + * @param integer idx + * @return integer + */ + public function get_photo_rating($idx) + { + if($detail = $this->get_photo_details($idx)) { + if(isset($detail['rating'])) + return $detail['rating']; + } + + return 0; + + } // get_photo_rating() + + /** + * get rate-search bars + * + * this function will return the rating-bars for the + * search field. + * @return string + */ + public function get_rate_search() + { + $bar = ""; + + for($i = 1; $i <= 5; $i++) { + + $bar.= "cfg->web_path ."/resources/star.png"; + else + $bar.= $this->cfg->web_path ."/resources/empty_rate.png"; + + $bar.= "\" + onmouseover=\"show_rate('from', ". $i .");\" + onmouseout=\"reset_rate('from');\" + onclick=\"set_rate('from', ". $i .")\" />"; + } + + $bar.= "
\n"; + + for($i = 1; $i <= 5; $i++) { + + $bar.= "cfg->web_path ."/resources/star.png"; + else + $bar.= $this->cfg->web_path ."/resources/empty_rate.png"; + + $bar.= "\" + onmouseover=\"show_rate('to', ". $i .");\" + onmouseout=\"reset_rate('to');\" + onclick=\"set_rate('to', ". $i .");\" />"; + } + + return $bar; + + } // get_rate_search() + /** * shrink text according provided limit * @@ -608,7 +693,7 @@ class PHPFSPOT { $info = getimagesize($orig_path); /* get EXIF information if JPEG */ - if($info['mime'] == "image/jpeg") { + if(isset($info['mime']) && $info['mime'] == "image/jpeg") { $meta = $this->get_meta_informations($orig_path); } @@ -643,6 +728,7 @@ class PHPFSPOT { $this->tmpl->assign('description', $details['description']); $this->tmpl->assign('image_name', $this->parse_uri($details['uri'], 'filename')); + $this->tmpl->assign('image_rating', $this->get_photo_rating($photo)); $this->tmpl->assign('width', $info_thumb[0]); $this->tmpl->assign('height', $info_thumb[1]); @@ -666,15 +752,16 @@ class PHPFSPOT { $this->tmpl->assign('current_page', $this->getCurrentPage($current, $count)); $this->tmpl->assign('current_img', $photo); - if($previous_img) { + if(isset($previous_img)) { $this->tmpl->assign('previous_url', "javascript:showPhoto(". $previous_img .");"); $this->tmpl->assign('prev_img', $previous_img); } - if($next_img) { + if(isset($next_img)) { $this->tmpl->assign('next_url', "javascript:showPhoto(". $next_img .");"); $this->tmpl->assign('next_img', $next_img); } + $this->tmpl->assign('mini_width', $this->cfg->mini_width); $this->tmpl->assign('photo_width', $this->cfg->photo_width); $this->tmpl->assign('photo_number', $i); @@ -974,8 +1061,7 @@ class PHPFSPOT { /** * reset date search * - * if any date search has taken place, reset - * it now + * if any date search has taken place, reset it now. */ public function resetDateSearch() { @@ -986,6 +1072,20 @@ class PHPFSPOT { } // resetDateSearch(); + /** + * reset rate search + * + * if any rate search has taken place, reset it now. + */ + public function resetRateSearch() + { + if(isset($_SESSION['rate_from'])) + unset($_SESSION['rate_from']); + if(isset($_SESSION['rate_to'])) + unset($_SESSION['rate_to']); + + } // resetRateSearch(); + /** * return all photo according selection * @@ -1011,6 +1111,12 @@ class PHPFSPOT { } if(isset($_SESSION['searchfor_name'])) { + + /* check for previous conditions. if so add 'AND' */ + if(!empty($additional_where_cond)) { + $additional_where_cond.= " AND "; + } + if($this->dbver < 9) { $additional_where_cond.= " ( @@ -1031,6 +1137,24 @@ class PHPFSPOT { } } + /* limit result based on rate-search */ + if(isset($_SESSION['rate_from']) && isset($_SESSION['rate_to'])) { + + if($this->dbver > 10) { + + /* check for previous conditions. if so add 'AND' */ + if(!empty($additional_where_cond)) { + $additional_where_cond.= " AND "; + } + + $additional_where_cond.= " + p.rating >= ". $_SESSION['rate_from'] ." + AND + p.rating <= ". $_SESSION['rate_to'] ." + "; + } + } + if(isset($_SESSION['sort_order'])) { $order_str = $this->get_sort_order(); } @@ -1050,7 +1174,7 @@ class PHPFSPOT { ON pt2.tag_id=t2.id WHERE t.name LIKE '%". $_SESSION['searchfor_tag'] ."%' "; - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "AND ". $additional_where_cond ." "; if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { @@ -1087,7 +1211,7 @@ class PHPFSPOT { ON pt1.photo_id=p.id WHERE pt1.tag_id IN (". $selected .") "; - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "AND ". $additional_where_cond ." "; if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { @@ -1143,7 +1267,7 @@ class PHPFSPOT { AND pt". ($i+2) .".tag_id=". $_SESSION['selected_tags'][$i] ." "; } - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "AND ". $additional_where_cond; if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { @@ -1172,11 +1296,11 @@ class PHPFSPOT { ON pt.tag_id=t.id "; - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "WHERE ". $additional_where_cond ." "; if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "AND t.name IN ('".implode("','",$this->cfg->show_tags). "')"; else $query_str.= "WHERE t.name IN ('".implode("','",$this->cfg->show_tags). "')"; @@ -1203,6 +1327,7 @@ class PHPFSPOT { public function showPhotoIndex() { $photos = $this->getPhotoSelection(); + $current_tags = $this->getCurrentTags(); $count = count($photos); @@ -1232,6 +1357,7 @@ class PHPFSPOT { $img_name[$thumbs] = Array(); $img_fullname[$thumbs] = Array(); $img_title = Array(); + $img_rating = Array(); for($i = $begin_with; $i < $end_with; $i++) { @@ -1242,6 +1368,7 @@ class PHPFSPOT { $img_name[$thumbs] = htmlspecialchars($this->getPhotoName($photos[$i], 15)); $img_fullname[$thumbs] = htmlspecialchars($this->getPhotoName($photos[$i], 0)); $img_title[$thumbs] = "Click to view photo ". htmlspecialchars($this->getPhotoName($photos[$i], 0)); + $img_rating[$thumbs] = $this->get_photo_rating($photos[$i]); $thumb_path = $this->get_thumb_path($this->cfg->thumb_width, $photos[$i]); @@ -1358,7 +1485,6 @@ class PHPFSPOT { $this->tmpl->assign('page_selector', $page_select); } - $current_tags = $this->getCurrentTags(); $extern_link = "index.php?mode=showpi"; $rss_link = "index.php?mode=rss"; if($current_tags != "") { @@ -1389,6 +1515,7 @@ class PHPFSPOT { $this->tmpl->assign('img_name', $img_name); $this->tmpl->assign('img_fullname', $img_fullname); $this->tmpl->assign('img_title', $img_title); + $this->tmpl->assign('img_rating', $img_rating); $this->tmpl->assign('thumbs', $thumbs); $this->tmpl->assign('selected_tags', $this->getSelectedTags('img')); @@ -1453,23 +1580,25 @@ class PHPFSPOT { $flip_hori = false; $flip_vert = false; - switch($meta['Orientation']) { - case 1: /* top, left */ - /* nothing to do */ break; - case 2: /* top, right */ - $rotate = 0; $flip_hori = true; break; - case 3: /* bottom, left */ - $rotate = 180; break; - case 4: /* bottom, right */ - $flip_vert = true; break; - case 5: /* left side, top */ - $rotate = 90; $flip_vert = true; break; - case 6: /* right side, top */ - $rotate = 90; break; - case 7: /* left side, bottom */ - $rotate = 270; $flip_vert = true; break; - case 8: /* right side, bottom */ - $rotate = 270; break; + if(isset($meta['Orientation'])) { + switch($meta['Orientation']) { + case 1: /* top, left */ + /* nothing to do */ break; + case 2: /* top, right */ + $rotate = 0; $flip_hori = true; break; + case 3: /* bottom, left */ + $rotate = 180; break; + case 4: /* bottom, right */ + $flip_vert = true; break; + case 5: /* left side, top */ + $rotate = 90; $flip_vert = true; break; + case 6: /* right side, top */ + $rotate = 90; break; + case 7: /* left side, bottom */ + $rotate = 270; $flip_vert = true; break; + case 8: /* right side, bottom */ + $rotate = 270; break; + } } $src_img = @imagecreatefromjpeg($orig_image); @@ -1864,6 +1993,7 @@ class PHPFSPOT { */ public function startSearch() { + /* date search */ if(isset($_POST['from']) && $this->isValidDate($_POST['from'])) { $from = $_POST['from']; } @@ -1871,15 +2001,36 @@ class PHPFSPOT { $to = $_POST['to']; } + /* tag-name search */ if(isset($_POST['for_tag']) && is_string($_POST['for_tag'])) { $searchfor_tag = $_POST['for_tag']; $_SESSION['searchfor_tag'] = $_POST['for_tag']; } + else { + unset($_SESSION['searchfor_tag']); + } + /* file-name search */ if(isset($_POST['for_name']) && is_string($_POST['for_name'])) { - $searchfor_name = $_POST['for_name']; $_SESSION['searchfor_name'] = $_POST['for_name']; } + else { + unset($_SESSION['searchfor_name']); + } + + /* rate-search */ + if(isset($_POST['rate_from']) && is_numeric($_POST['rate_from'])) { + + $_SESSION['rate_from'] = $_POST['rate_from']; + + if(isset($_POST['rate_to']) && is_numeric($_POST['rate_to'])) { + $_SESSION['rate_to'] = $_POST['rate_to']; + } + } + else { + /* delete any previously set value */ + unset($_SESSION['rate_to'], $_SESSION['rate_from']); + } $this->get_tags(); @@ -2147,7 +2298,7 @@ class PHPFSPOT { private function _debug($text) { - if($this->fromcmd) { + if(isset($this->fromcmd)) { print $text; } @@ -2405,7 +2556,7 @@ class PHPFSPOT { $orig_path = $this->translate_path($this->parse_uri($details['uri'], 'fullpath')); /* get EXIF information if JPEG */ - if($details['mime'] == "image/jpeg") { + if(isset($details['mime']) && $details['mime'] == "image/jpeg") { $meta = $this->get_meta_informations($orig_path); } @@ -2435,7 +2586,10 @@ class PHPFSPOT { /** - * return all selected tags as one string + * get all selected tags + * + * This function will return all selected tags as one string, seperated + * by a comma. * @return array */ private function getCurrentTags()