only show preview icon in photo index when use_lightbox is set in the config
[phpfspot.git] / phpfspot.class.php
index cf0a60c2b0a109b12d34c2b4b4202daeba3916a9..7e7d4dd8ff6ad0ac067d13c54b15408459a4eb2f 100644 (file)
@@ -54,7 +54,7 @@ class PHPFSPOT {
 
       /* set application name and version information */
       $this->cfg->product = "phpfspot";
-      $this->cfg->version = "1.3";
+      $this->cfg->version = "1.4";
 
       $this->sort_orders= array(
          'date_asc' => 'Date ↑',
@@ -88,6 +88,11 @@ class PHPFSPOT {
          exit(1);
       }
 
+      if(!is_writeable($this->cfg->thumb_path)) {
+         print $this->cfg->thumb_path .": directory is not writeable for user ". $this->getuid() ."\n";
+         exit(1);
+      }
+
       $this->cfg_db = new PHPFSPOT_DB($this, $this->cfg->phpfspot_db);
       if(!is_writeable($this->cfg->phpfspot_db)) {
          print $this->cfg->phpfspot_db ." is not writeable for user ". $this->getuid() ."\n";
@@ -503,7 +508,8 @@ class PHPFSPOT {
       $this->tmpl->assign('image_filename', $this->parse_uri($details['uri'], 'filename'));
 
       $this->tmpl->assign('tags', $this->get_photo_tags($photo));
-      $this->tmpl->assign('current', $current);
+      $this->tmpl->assign('current_page', $this->getCurrentPage($current, $count));
+      $this->tmpl->assign('current_img', $photo);
 
       if($previous_img) {
          $this->tmpl->assign('previous_url', "javascript:showImage(". $previous_img .");");
@@ -746,11 +752,12 @@ class PHPFSPOT {
    public function getPhotoSelection()
    {  
       $matched_photos = Array();
+      $additional_where_cond = "";
 
       if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) {
          $from_date = $_SESSION['from_date'];
          $to_date = $_SESSION['to_date'];
-         $additional_where_cond = "
+         $additional_where_cond.= "
                p.time>='". $from_date ."'
             AND
                p.time<='". $to_date ."'
@@ -797,7 +804,7 @@ class PHPFSPOT {
                ON pt2.tag_id=t2.id
             WHERE t.name LIKE '%". $_SESSION['searchfor_tag'] ."%' ";
 
-         if(isset($additional_where_cond))
+         if(isset($additional_where_cond) && !empty($additional_where_cond))
             $query_str.= "AND ". $additional_where_cond ." ";
 
          if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
@@ -834,7 +841,7 @@ class PHPFSPOT {
                   ON pt1.photo_id=p.id
                WHERE pt1.tag_id IN (". $selected .")
             ";
-            if(isset($additional_where_cond)) 
+            if(isset($additional_where_cond) && !empty($additional_where_cond)
                $query_str.= "AND ". $additional_where_cond ." ";
 
             if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
@@ -890,7 +897,7 @@ class PHPFSPOT {
                   AND pt". ($i+2) .".tag_id=". $_SESSION['selected_tags'][$i] ."
                "; 
             }
-            if(isset($additional_where_cond)) 
+            if(isset($additional_where_cond) && !empty($additional_where_cond)
                $query_str.= "AND ". $additional_where_cond;
 
             if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
@@ -919,11 +926,11 @@ class PHPFSPOT {
             ON pt.tag_id=t.id
       ";
 
-      if(isset($additional_where_cond)) 
+      if(isset($additional_where_cond) && !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))
+         if(isset($additional_where_cond) && !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). "')";
@@ -952,15 +959,12 @@ class PHPFSPOT {
 
       $count = count($photos);
 
-      if(isset($_SESSION['begin_with']) && $_SESSION['begin_with'] != "")
-         $anchor = $_SESSION['begin_with'];
-
+      /* if all thumbnails should be shown on one page */
       if(!isset($this->cfg->thumbs_per_page) || $this->cfg->thumbs_per_page == 0) {
-
          $begin_with = 0;
          $end_with = $count;
-
       }
+      /* thumbnails should be splitted up in several pages */
       elseif($this->cfg->thumbs_per_page > 0) {
 
          if(!isset($_SESSION['begin_with']) || $_SESSION['begin_with'] == 0) {
@@ -979,6 +983,7 @@ class PHPFSPOT {
       $img_width[$thumbs] = Array();
       $img_id[$thumbs] = Array();
       $img_name[$thumbs] = Array();
+      $img_fullname[$thumbs] = Array();
       $img_title = Array();
 
       for($i = $begin_with; $i < $end_with; $i++) {
@@ -988,6 +993,7 @@ class PHPFSPOT {
             $images[$thumbs] = $photos[$i];
             $img_id[$thumbs] = $i;
             $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));
 
             $thumb_path = $this->get_thumb_path($this->cfg->thumb_width, $photos[$i]);
@@ -1118,6 +1124,7 @@ class PHPFSPOT {
       $this->tmpl->assign('rss_link', $rss_link);
       $this->tmpl->assign('count', $count);
       $this->tmpl->assign('width', $this->cfg->thumb_width);
+      $this->tmpl->assign('preview_width', $this->cfg->photo_width);
       $this->tmpl->assign('thumb_container_width', $this->cfg->thumb_width);
       $this->tmpl->assign('thumb_container_height', $this->cfg->thumb_height+20);
       $this->tmpl->assign('images', $images);
@@ -1125,13 +1132,20 @@ class PHPFSPOT {
       $this->tmpl->assign('img_height', $img_height);
       $this->tmpl->assign('img_id', $img_id);
       $this->tmpl->assign('img_name', $img_name);
+      $this->tmpl->assign('img_fullname', $img_fullname);
       $this->tmpl->assign('img_title', $img_title);
       $this->tmpl->assign('thumbs', $thumbs);
 
       $this->tmpl->show("photo_index.tpl");
 
-      if(isset($anchor))
-         print "<script language=\"JavaScript\">self.location.hash = '#image". $anchor ."';</script>\n";
+      /* if we are returning to photo index from an photo-view,
+         scroll the window to the last shown photo-thumbnail.
+         after this, unset the last_photo session variable.
+      */
+      if(isset($_SESSION['last_photo'])) {
+         print "<script language=\"JavaScript\">moveToThumb(". $_SESSION['last_photo'] .");</script>\n";
+         unset($_SESSION['last_photo']);
+      }
 
    } // showPhotoIndex()
 
@@ -1372,6 +1386,7 @@ class PHPFSPOT {
          $thumb_sub_path = substr($file_md5, 0, 2);
          $thumb_path = $this->cfg->thumb_path ."/". $thumb_sub_path ."/". $resolution ."_". $file_md5;
 
+         /* if thumbnail-subdirectory does not exist yet, create it */
          if(!file_exists(dirname($thumb_path))) {
             mkdir(dirname($thumb_path), 0755);
          }
@@ -1465,7 +1480,7 @@ class PHPFSPOT {
     * getPhotoSelection() will then only return the matching
     * photos.
     */
-   public function startSearch($searchfor_tag, $from = 0, $to = 0)
+   public function startSearch()
    {
       if(isset($_POST['from']) && $this->isValidDate($_POST['from'])) {
          $from = $_POST['from'];
@@ -1476,28 +1491,27 @@ class PHPFSPOT {
 
       if(isset($_POST['for_tag']) && is_string($_POST['for_tag'])) {
          $searchfor_tag = $_POST['for_tag'];
+         $_SESSION['searchfor_tag'] = $_POST['for_tag'];
       }
 
       if(isset($_POST['for_name']) && is_string($_POST['for_name'])) {
          $searchfor_name = $_POST['for_name'];
+         $_SESSION['searchfor_name'] = $_POST['for_name'];
       }
 
       $this->get_tags();
 
-      $_SESSION['searchfor_tag'] = $searchfor_tag;
-      $_SESSION['searchfor_name'] = $searchfor_name;
-
-      if($from != 0)
+      if(isset($from) && !empty($from))
          $_SESSION['from_date'] = strtotime($from ." 00:00:00");
       else
          unset($_SESSION['from_date']);
 
-      if($to != 0)
+      if(isset($to) && !empty($to))
          $_SESSION['to_date'] = strtotime($to ." 23:59:59");
       else
          unset($_SESSION['to_date']);
 
-      if($searchfor_tag != "") {
+      if(isset($searchfor_tag) && !empty($searchfor_tag)) {
          /* new search, reset the current selected tags */
          $_SESSION['selected_tags'] = Array();
          foreach($this->avail_tags as $tag) {
@@ -2421,8 +2435,8 @@ class PHPFSPOT {
       }
 
       /* check for pending slash on web_path */
-      if(!preg_match("/\/$/", $this->web_path))
-         $this->web_path.= "/";
+      if(!preg_match("/\/$/", $this->cfg->web_path))
+         $this->cfg->web_path.= "/";
 
       return $this->runtime_error;
 
@@ -2464,6 +2478,27 @@ class PHPFSPOT {
 
    } // cleanup_phpfspot_db()
 
+   /**
+    * return first image of the page, the $current photo
+    * lies in.
+    *
+    * this function is used to find out the first photo of the
+    * current page, in which the $current photo lies. this is
+    * used to display the correct photo, when calling showPhotoIndex()
+    * from showImage()
+    */
+   private function getCurrentPage($current, $max)
+   {
+      if(isset($this->cfg->thumbs_per_page) && !empty($this->cfg->thumbs_per_page)) {
+         for($page_start = 0; $page_start <= $max; $page_start+=$this->cfg->thumbs_per_page) {
+            if($current >= $page_start && $current < ($page_start+$this->cfg->thumbs_per_page))
+               return $page_start;
+         }
+      }
+      return 0;
+
+   } // getCurrentPage()
+
 } // class PHPFSPOT
 
 ?>