summaryrefslogtreecommitdiffstats
path: root/phpfspot.class.php
diff options
context:
space:
mode:
authorAndreas Unterkircher <unki@netshadow.at>2008-05-24 13:01:13 +0200
committerAndreas Unterkircher <unki@netshadow.at>2008-05-24 13:01:13 +0200
commit6c98040d5b5f29f3952b8222d5cf256007347e5d (patch)
tree31f781bf71e0fc431328d163c4361f07e2f9ffb2 /phpfspot.class.php
parente75b25313a062eaac262f504397b1b75c092a6cd (diff)
parent99dd0b5d5e19d565088595a9fd9d164bcd4834ae (diff)
Merge branch 'rating'
Diffstat (limited to 'phpfspot.class.php')
-rw-r--r--phpfspot.class.php192
1 files changed, 180 insertions, 12 deletions
diff --git a/phpfspot.class.php b/phpfspot.class.php
index 1d20ab1..58cda4e 100644
--- a/phpfspot.class.php
+++ b/phpfspot.class.php
@@ -157,6 +157,7 @@ class PHPFSPOT {
");
}
+ /* get F-Spot database version */
$this->dbver = $this->getFspotDBVersion();
if(!is_writeable($this->cfg->base_path ."/templates_c")) {
@@ -203,6 +204,15 @@ class PHPFSPOT {
$this->tmpl->assign('web_path', $this->cfg->web_path);
+ /* 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 &uarr;',
+ 'rate_desc' => 'Rate &darr;',
+ ));
+ }
+
/* check if all necessary indices exist */
$this->checkDbIndices();
@@ -312,15 +322,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']))
@@ -425,10 +446,19 @@ class PHPFSPOT {
";
}
else {
- $query_str = "
- SELECT p.id, p.uri, p.time, p.description
- FROM photos p
- ";
+ /* till F-Spot version 0.4.1 */
+ if($this->dbver < 11) {
+ $query_str = "
+ SELECT p.id, p.uri, p.time, p.description
+ FROM photos p
+ ";
+ }
+ else {
+ $query_str = "
+ SELECT p.id, p.uri, p.time, p.description, p.rating
+ FROM photos p
+ ";
+ }
}
/* if show_tags is set, only return details for photos which
@@ -489,6 +519,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.= "<img id=\"rate_from_". $i ."\" src=\"";
+
+ if(isset($_SESSION['rate_from']) && $i <= $_SESSION['rate_from'])
+ $bar.= $this->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.= "<br />\n";
+
+ for($i = 1; $i <= 5; $i++) {
+
+ $bar.= "<img id=\"rate_to_". $i ."\" src=\"";
+
+ if(isset($_SESSION['rate_to']) && $i <= $_SESSION['rate_to'])
+ $bar.= $this->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
*
* If the length of the name exceeds $limit the
@@ -625,6 +724,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]);
@@ -956,8 +1056,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()
{
@@ -969,6 +1068,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
*
* this function returns all photos based on
@@ -993,6 +1106,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.= "
(
@@ -1013,6 +1132,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();
}
@@ -1032,7 +1169,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)) {
@@ -1069,7 +1206,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)) {
@@ -1125,7 +1262,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)) {
@@ -1154,11 +1291,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). "')";
@@ -1214,6 +1351,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++) {
@@ -1224,6 +1362,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]);
@@ -1371,6 +1510,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'));
@@ -1846,6 +1986,7 @@ class PHPFSPOT {
*/
public function startSearch()
{
+ /* date search */
if(isset($_POST['from']) && $this->isValidDate($_POST['from'])) {
$from = $_POST['from'];
}
@@ -1853,15 +1994,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();
@@ -2538,6 +2700,12 @@ class PHPFSPOT {
case 'tags_desc':
return " ORDER BY t.name DESC ,p.time ASC";
break;
+ case 'rate_asc':
+ return " ORDER BY t.name ASC, p.rating ASC";
+ break;
+ case 'rate_desc':
+ return " ORDER BY t.name DESC, p.rating DESC";
+ break;
}
} // get_sort_order()