X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot.class.php;h=d67c7e39dc4f1b1543296ce209ed7e0071a4beaa;hp=f88ddf815b9cd1a66fa3045ca8ba3bc2c561eeb2;hb=5ea211de598c1e02a9f5ccb04b83a81ed9b41117;hpb=360821514a97c946ab0ae66a2677380ad72bd794 diff --git a/phpfspot.class.php b/phpfspot.class.php index f88ddf8..d67c7e3 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -23,7 +23,6 @@ require_once "phpfspot_cfg.php"; require_once "phpfspot_db.php"; -require_once "phpfspot_tmpl.php"; class PHPFSPOT { @@ -43,13 +42,17 @@ class PHPFSPOT { */ public function __construct() { + $this->cfg = new PHPFSPOT_CFG; + + /* set application name and version information */ + $this->cfg->product = "phpfspot"; + $this->cfg->version = "1.2"; + /* Check necessary requirements */ if(!$this->checkRequirements()) { exit(1); } - $this->cfg = new PHPFSPOT_CFG; - $this->db = new PHPFSPOT_DB($this, $this->cfg->fspot_db); if(!is_writeable(dirname($this->cfg->phpfspot_db))) { @@ -64,7 +67,13 @@ class PHPFSPOT { } $this->check_config_table(); - + /* include Smarty template engine */ + if(!$this->check_readable($this->cfg->smarty_path .'/libs/Smarty.class.php')) { + exit(1); + } + require $this->cfg->smarty_path .'/libs/Smarty.class.php'; + /* overload Smarty class if our own template handler */ + require_once "phpfspot_tmpl.php"; $this->tmpl = new PHPFSPOT_TMPL($this); $this->get_tags(); @@ -176,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. * @@ -198,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++; } @@ -219,12 +238,30 @@ 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 ('".implode("','",$this->cfg->show_tags)."')"; + } + else { + $query_str.= " + WHERE p.id='". $idx ."' + "; + } + + $result = $this->db->db_query($query_str); return $this->db->db_fetch_object($result); } // get_photo_details @@ -461,7 +498,9 @@ class PHPFSPOT { // uncomment if you want sizes in whole %: $size = ceil($size); - $output.= "". $this->tags[$key] .", "; + if(isset($this->tags[$key])) { + $output.= "". $this->tags[$key] .", "; + } } @@ -619,6 +658,11 @@ 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 ('".implode("','",$this->cfg->show_tags)."')"; + } + if(isset($order_str)) $query_str.= $order_str; @@ -638,14 +682,21 @@ 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 ('".implode("','",$this->cfg->show_tags)."')"; + } + if(isset($order_str)) $query_str.= $order_str; } @@ -671,6 +722,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) ." @@ -689,8 +747,14 @@ 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 ('".implode("','",$this->cfg->show_tags). "')"; + } + if(isset($order_str)) $query_str.= $order_str; + } $result = $this->db->db_query($query_str); @@ -706,9 +770,16 @@ 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 ('".implode("','",$this->cfg->show_tags). "')"; + } + if(isset($order_str)) $query_str.= $order_str; @@ -1161,7 +1232,7 @@ class PHPFSPOT { foreach($resolutions as $resolution) { $thumb_sub_path = substr($file_md5, 0, 2); - $thumb_path = $this->cfg->base_path ."/thumbs/". $thumb_sub_path ."/". $resolution ."_". $file_md5; + $thumb_path = $this->cfg->thumb_path ."/". $thumb_sub_path ."/". $resolution ."_". $file_md5; if(!file_exists(dirname($thumb_path))) { mkdir(dirname($thumb_path), 0755); @@ -1669,7 +1740,7 @@ class PHPFSPOT { - + getMD5($photo), 0, 2); - return $this->cfg->base_path - . "/thumbs/" + $md5 = $this->getMD5($photo); + $sub_path = substr($md5, 0, 2); + return $this->cfg->thumb_path + . "/" . $sub_path . "/" . $width . "_" - . $this->getMD5($photo); + . $md5; } // get_thumb_path() @@ -1942,6 +2014,31 @@ class PHPFSPOT { { return $this->get_web_protocol() ."://". $this->get_server_name() . $this->cfg->web_path; } // get_phpfspot_url() + + /** + * check file exists and is readable + * + * returns true, if everything is ok, otherwise false + * if $silent is not set, this function will output and + * error message + */ + private function check_readable($file, $silent = null) + { + if(!file_exists($file)) { + if(!isset($silent)) + print "File \"". $file ."\" does not exist.\n"; + return false; + } + + if(!is_readable($file)) { + if(!isset($silent)) + print "File \"". $file ."\" is not reachable for user ". $this->getuid() ."\n"; + return false; + } + + return true; + + } // check_readable() }