diff options
author | Andreas Unterkircher <unki@netshadow.at> | 2007-11-24 16:19:35 +0000 |
---|---|---|
committer | Andreas Unterkircher <unki@netshadow.at> | 2007-11-24 16:19:35 +0000 |
commit | ba2bd867f7c0d549761efd0677abdea919212b99 (patch) | |
tree | cf8fb7f3bb69194d7e5b703e5e35a985549983d8 /phpfspot.class.php | |
parent | 786b3f5c01914c39d2f5c3ae5de8a15a687175e5 (diff) |
issue79, show only certain tags
git-svn-id: file:///var/lib/svn/phpfspot/trunk@306 fa6a889d-dae6-447d-9e79-4ba9a3039384
Diffstat (limited to 'phpfspot.class.php')
-rw-r--r-- | phpfspot.class.php | 106 |
1 files changed, 95 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; |