var $tmpl;
var $tags;
var $avail_tags;
+
+ private $runtime_error = false;
private $dbver;
/**
{
$this->cfg = new PHPFSPOT_CFG;
+ /* verify config settings */
+ if($this->check_config_options()) {
+ exit(1);
+ }
+
/* set application name and version information */
$this->cfg->product = "phpfspot";
- $this->cfg->version = "1.2";
+ $this->cfg->version = "1.3";
$this->sort_orders= array(
'date_asc' => 'Date ↑',
'date_desc' => 'Date ↓',
'name_asc' => 'Name ↑',
- 'name_desc' => 'Name ↓'
+ 'name_desc' => 'Name ↓',
+ 'tags_asc' => 'Tags ↑',
+ 'tags_desc' => 'Tags ↓',
);
/* Check necessary requirements */
FROM photo_tags pt1
INNER JOIN photo_tags pt2
ON pt1.photo_id=pt2.photo_id
- INNER JOIN tags t1
- ON pt1.tag_id=t1.id
+ INNER JOIN tags t
+ ON pt1.tag_id=t.id
INNER JOIN photos p
ON pt1.photo_id=p.id
INNER JOIN tags t2
ON pt2.tag_id=t2.id
- WHERE t1.name LIKE '%". $_SESSION['searchfor'] ."%' ";
+ WHERE t.name LIKE '%". $_SESSION['searchfor'] ."%' ";
if(isset($additional_where_cond))
$query_str.= "AND ". $additional_where_cond ." ";
/* return all available photos */
$query_str = "
- SELECT p.id
+ SELECT DISTINCT p.id
FROM photos p
LEFT JOIN photo_tags pt
ON p.id=pt.photo_id
$query_str.= "WHERE ". $additional_where_cond ." ";
if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
- if(isset($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). "')";
+ if(isset($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). "')";
}
if(isset($order_str))
$meta = $this->get_meta_informations($orig_image);
$rotate = 0;
- $flip = false;
+ $flip_hori = false;
+ $flip_vert = false;
switch($meta['Orientation']) {
-
case 1: /* top, left */
- $rotate = 0; $flip = false; break;
+ /* nothing to do */ break;
case 2: /* top, right */
- $rotate = 0; $flip = true; break;
+ $rotate = 0; $flip_hori = true; break;
case 3: /* bottom, left */
- $rotate = 180; $flip = false; break;
+ $rotate = 180; break;
case 4: /* bottom, right */
- $rotate = 180; $flip = true; break;
+ $flip_vert = true; break;
case 5: /* left side, top */
- $rotate = 90; $flip = true; break;
+ $rotate = 90; $flip_vert = true; break;
case 6: /* right side, top */
- $rotate = 90; $flip = false; break;
+ $rotate = 90; break;
case 7: /* left side, bottom */
- $rotate = 270; $flip = true; break;
+ $rotate = 270; $flip_vert = true; break;
case 8: /* right side, bottom */
- $rotate = 270; $flip = false; break;
+ $rotate = 270; break;
}
$src_img = @imagecreatefromjpeg($orig_image);
imagecopyresampled($dst_img, $src_img, 0, 0, 0, 0, $new_w, $new_h, imagesx($src_img), imagesy($src_img));
/* needs the image to be flipped horizontal? */
- if($flip) {
- print "(FLIP)";
- $image = $dst_img;
- for($x = 0; $x < $new_w; $x++) {
- imagecopy($dst_img, $image, $x, 0, $w - $x - 1, 0, 1, $h);
- }
+ if($flip_hori) {
+ $this->_debug("(FLIP)");
+ $dst_img = $this->flipImage($dst_img, 'hori');
+ }
+ /* needs the image to be flipped vertical? */
+ if($flip_vert) {
+ $this->_debug("(FLIP)");
+ $dst_img = $this->flipImage($dst_img, 'vert');
}
if($rotate) {
} // rotateImage()
+ /**
+ * returns flipped image
+ *
+ * this function will return an either horizontal or
+ * vertical flipped truecolor image.
+ */
+ private function flipImage($image, $mode)
+ {
+ $w = imagesx($image);
+ $h = imagesy($image);
+ $flipped = imagecreatetruecolor($w, $h);
+
+ switch($mode) {
+ case 'vert':
+ for ($y = 0; $y < $h; $y++) {
+ imagecopy($flipped, $image, 0, $y, 0, $h - $y - 1, $w, 1);
+ }
+ break;
+ case 'hori':
+ for ($x = 0; $x < $w; $x++) {
+ imagecopy($flipped, $image, $x, 0, $w - $x - 1, 0, 1, $h);
+ }
+ break;
+ }
+
+ return $flipped;
+
+ } // flipImage()
+
/**
* return all assigned tags for the specified photo
*/
public function _error($text)
{
switch($this->cfg->logging) {
+ default:
case 'display':
print "<img src=\"resources/green_info.png\" alt=\"warning\" />\n";
- print $text;
+ print $text ."<br />\n";
break;
case 'errorlog':
error_log($text);
break;
}
+ $this->runtime_error = true;
+
} // _error()
/**
return " ORDER BY basename(p.uri) DESC";
}
break;
+ case 'tags_asc':
+ return " ORDER BY t.name ASC ,p.time ASC";
+ break;
+ case 'tags_desc':
+ return " ORDER BY t.name DESC ,p.time ASC";
+ break;
}
} // get_sort_order()
} // parse_uri()
+ /**
+ * validate config options
+ *
+ * this function checks if all necessary configuration options are
+ * specified and set.
+ */
+ private function check_config_options()
+ {
+ if(!isset($this->cfg->page_title) || $this->cfg->page_title == "")
+ $this->_error("Please set \$page_title in phpfspot_cfg");
+
+ if(!isset($this->cfg->base_path) || $this->cfg->base_path == "")
+ $this->_error("Please set \$base_path in phpfspot_cfg");
+
+ if(!isset($this->cfg->web_path) || $this->cfg->web_path == "")
+ $this->_error("Please set \$web_path in phpfspot_cfg");
+
+ if(!isset($this->cfg->thumb_path) || $this->cfg->thumb_path == "")
+ $this->_error("Please set \$thumb_path in phpfspot_cfg");
+
+ if(!isset($this->cfg->smarty_path) || $this->cfg->smarty_path == "")
+ $this->_error("Please set \$smarty_path in phpfspot_cfg");
+
+ if(!isset($this->cfg->fspot_db) || $this->cfg->fspot_db == "")
+ $this->_error("Please set \$fspot_db in phpfspot_cfg");
+
+ if(!isset($this->cfg->db_access) || $this->cfg->db_access == "")
+ $this->_error("Please set \$db_access in phpfspot_cfg");
+
+ if(!isset($this->cfg->phpfspot_db) || $this->cfg->phpfspot_db == "")
+ $this->_error("Please set \$phpfspot_db in phpfspot_cfg");
+
+ if(!isset($this->cfg->thumb_width) || $this->cfg->thumb_width == "")
+ $this->_error("Please set \$thumb_width in phpfspot_cfg");
+
+ if(!isset($this->cfg->thumb_height) || $this->cfg->thumb_height == "")
+ $this->_error("Please set \$thumb_height in phpfspot_cfg");
+
+ if(!isset($this->cfg->photo_width) || $this->cfg->photo_width == "")
+ $this->_error("Please set \$photo_width in phpfspot_cfg");
+
+ if(!isset($this->cfg->mini_width) || $this->cfg->mini_width == "")
+ $this->_error("Please set \$mini_width in phpfspot_cfg");
+
+ if(!isset($this->cfg->thumbs_per_page))
+ $this->_error("Please set \$thumbs_per_page in phpfspot_cfg");
+
+ if(!isset($this->cfg->path_replace_from) || $this->cfg->path_replace_from == "")
+ $this->_error("Please set \$path_replace_from in phpfspot_cfg");
+
+ if(!isset($this->cfg->path_replace_to) || $this->cfg->path_replace_to == "")
+ $this->_error("Please set \$path_replace_to in phpfspot_cfg");
+
+ if(!isset($this->cfg->hide_tags))
+ $this->_error("Please set \$hide_tags in phpfspot_cfg");
+
+ if(!isset($this->cfg->theme_name))
+ $this->_error("Please set \$theme_name in phpfspot_cfg");
+
+ if(!isset($this->cfg->logging))
+ $this->_error("Please set \$logging in phpfspot_cfg");
+
+ if(isset($this->cfg->logging) && $this->cfg->logging == 'logfile') {
+
+ if(!isset($this->cfg->log_file))
+ $this->_error("Please set \$log_file because you set logging = log_file in phpfspot_cfg");
+
+ if(!is_writeable($this->cfg->log_file))
+ $this->_error("The specified \$log_file ". $log_file ." is not writeable!");
+
+ }
+
+ /* check for pending slash on web_path */
+ if(!preg_match("/\/$/", $this->web_path))
+ $this->web_path.= "/";
+
+ return $this->runtime_error;
+
+ } // check_config_options()
+
+ /**
+ * cleanup phpfspot own database
+ *
+ * When photos are getting delete from F-Spot, there will remain
+ * remain some residues in phpfspot own database. This function
+ * will try to wipe them out.
+ */
+ public function cleanup_phpfspot_db()
+ {
+ $to_delete = Array();
+
+ $result = $this->cfg_db->db_query("
+ SELECT img_idx
+ FROM images
+ ORDER BY img_idx ASC
+ ");
+
+ while($row = $this->cfg_db->db_fetch_object($result)) {
+ if(!$this->db->db_fetchSingleRow("
+ SELECT id
+ FROM photos
+ WHERE id='". $row['img_idx'] ."'")) {
+
+ array_push($to_delete, $row['img_idx'], ',');
+ }
+ }
+
+ $this->cfg_db->db_exec("
+ DELETE FROM images
+ WHERE img_idx IN (". implode($to_delete) .")
+ ");
+
+ } // cleanup_phpfspot_db()
+
} // class PHPFSPOT
?>