summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Unterkircher <unki@netshadow.at>2007-11-24 16:19:35 +0000
committerAndreas Unterkircher <unki@netshadow.at>2007-11-24 16:19:35 +0000
commitba2bd867f7c0d549761efd0677abdea919212b99 (patch)
treecf8fb7f3bb69194d7e5b703e5e35a985549983d8
parent786b3f5c01914c39d2f5c3ae5de8a15a687175e5 (diff)
issue79, show only certain tags
git-svn-id: file:///var/lib/svn/phpfspot/trunk@306 fa6a889d-dae6-447d-9e79-4ba9a3039384
-rw-r--r--phpfspot.class.php106
-rw-r--r--phpfspot_cfg.php.dist6
2 files changed, 101 insertions, 11 deletions
diff --git a/phpfspot.class.php b/phpfspot.class.php
index 6c150fa..15697ad 100644
--- a/phpfspot.class.php
+++ b/phpfspot.class.php
@@ -185,7 +185,7 @@ class PHPFSPOT {
*
* this function will get all available tags from
* the f-spot database and store them within two
- * arrays within this clase for later usage. in
+ * arrays within this class for later usage. in
* fact, if the user requests (hide_tags) it will
* opt-out some of them.
*
@@ -207,13 +207,23 @@ class PHPFSPOT {
$tag_id = $row['id'];
$tag_name = $row['name'];
- /* check if config requests to ignore this tag */
+ /* if the user has specified to ignore this tag in phpfspot's
+ configuration, ignore it here so it does not get added to
+ the tag list.
+ */
if(in_array($row['name'], $this->cfg->hide_tags))
continue;
+ /* if the user has specified to only show certain tags which
+ are specified in phpfspot's configuration, ignore all others
+ so they will not be added to the tag list.
+ */
+ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags) &&
+ !in_array($row['name'], $this->cfg->show_tags))
+ continue;
+
$this->tags[$tag_id] = $tag_name;
$this->avail_tags[$count] = $tag_id;
-
$count++;
}
@@ -228,12 +238,36 @@ class PHPFSPOT {
*/
public function get_photo_details($idx)
{
- $result = $this->db->db_query("
- SELECT *
- FROM photos
- WHERE id='". $idx ."'
- ");
-
+ $query_str = "
+ SELECT p.id, p.name, p.time, p.directory_path, p.description
+ FROM photos p
+ ";
+
+ /* if show_tags is set, only return details for photos which
+ are specified to be shown
+ */
+ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
+ $query_str.= "
+ INNER JOIN photo_tags pt
+ ON p.id=pt.photo_id
+ INNER JOIN tags t
+ ON pt.tag_id=t.id
+ WHERE p.id='". $idx ."'
+ AND t.name IN (
+ ";
+ foreach($this->cfg->show_tags as $tag) {
+ $query_str.= "'". $tag ."',";
+ }
+ $query_str = substr($query_str, 0, strlen($query_str)-1);
+ $query_str.= ")";
+ }
+ else {
+ $query_str.= "
+ WHERE p.id='". $idx ."'
+ ";
+ }
+
+ $result = $this->db->db_query($query_str);
return $this->db->db_fetch_object($result);
} // get_photo_details
@@ -470,7 +504,9 @@ class PHPFSPOT {
// uncomment if you want sizes in whole %:
$size = ceil($size);
- $output.= "<a href=\"javascript:Tags('add', ". $key .");\" class=\"tag\" style=\"font-size: ". $size ."%;\">". $this->tags[$key] ."</a>, ";
+ if(isset($this->tags[$key])) {
+ $output.= "<a href=\"javascript:Tags('add', ". $key .");\" class=\"tag\" style=\"font-size: ". $size ."%;\">". $this->tags[$key] ."</a>, ";
+ }
}
@@ -628,6 +664,15 @@ class PHPFSPOT {
if(isset($additional_where_cond))
$query_str.= "AND ". $additional_where_cond ." ";
+
+ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
+ $query_str.= "AND t.name IN (";
+ foreach($this->cfg->show_tags as $tag) {
+ $query_str.= "'". $tag ."',";
+ }
+ $query_str = substr($query_str, 0, strlen($query_str)-1) . ")";
+ }
+
if(isset($order_str))
$query_str.= $order_str;
@@ -647,14 +692,25 @@ class PHPFSPOT {
if($_SESSION['tag_condition'] == 'or') {
$query_str = "
- SELECT DISTINCT photo_id
+ SELECT DISTINCT pt.photo_id
FROM photo_tags pt
INNER JOIN photos p
ON p.id=pt.photo_id
+ INNER JOIN tags t
+ ON pt.tag_id=t.id
WHERE pt.tag_id IN (". $selected .")
";
if(isset($additional_where_cond))
$query_str.= "AND ". $additional_where_cond ." ";
+
+ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
+ $query_str.= "AND t.name IN (";
+ foreach($this->cfg->show_tags as $tag) {
+ $query_str.= "'". $tag ."',";
+ }
+ $query_str = substr($query_str, 0, strlen($query_str)-1) . ")";
+ }
+
if(isset($order_str))
$query_str.= $order_str;
}
@@ -680,6 +736,13 @@ class PHPFSPOT {
FROM photo_tags pt1
";
+ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
+ $query_str.= "
+ INNER JOIN tags t
+ ON pt1.tag_id=t.id
+ ";
+ }
+
for($i = 0; $i < count($_SESSION['selected_tags']); $i++) {
$query_str.= "
INNER JOIN photo_tags pt". ($i+2) ."
@@ -698,8 +761,18 @@ class PHPFSPOT {
}
if(isset($additional_where_cond))
$query_str.= "AND ". $additional_where_cond;
+
+ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
+ $query_str.= "AND t.name IN (";
+ foreach($this->cfg->show_tags as $tag) {
+ $query_str.= "'". $tag ."',";
+ }
+ $query_str = substr($query_str, 0, strlen($query_str)-1) . ")";
+ }
+
if(isset($order_str))
$query_str.= $order_str;
+
}
$result = $this->db->db_query($query_str);
@@ -715,9 +788,20 @@ class PHPFSPOT {
FROM photo_tags pt
INNER JOIN photos p
ON p.id=pt.photo_id
+ INNER JOIN tags t
+ ON pt.tag_id=t.id
";
if(isset($additional_where_cond))
$query_str.= "WHERE ". $additional_where_cond ." ";
+
+ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
+ $query_str.= "AND t.name IN (";
+ foreach($this->cfg->show_tags as $tag) {
+ $query_str.= "'". $tag ."',";
+ }
+ $query_str = substr($query_str, 0, strlen($query_str)-1) . ")";
+ }
+
if(isset($order_str))
$query_str.= $order_str;
diff --git a/phpfspot_cfg.php.dist b/phpfspot_cfg.php.dist
index 506eaa1..85e1752 100644
--- a/phpfspot_cfg.php.dist
+++ b/phpfspot_cfg.php.dist
@@ -80,6 +80,12 @@ class PHPFSPOT_CFG {
*/
var $hide_tags = Array("Favorites", "Hidden", "People", "Places", "Events");
+ /* Show only pictures which are tagged with the following tags.
+ Comment out this option with // if you want to show all tags &
+ pictures.
+ */
+ //var $show_tags = Array("Friends", "Holidays");
+
/* logging = display || errorlog || logfile */
var $logging = "display";