fix export, web_path was not set correctly
[phpfspot.git] / phpfspot.class.php
index 0711499f3ef113893fe89255225afb5c8baaee11..60521adf247c2a15ed98d3f6a6abc4de7917e05f 100644 (file)
@@ -206,6 +206,7 @@ class PHPFSPOT {
 
       /* Starting with F-Spot 0.4.2, the rating-feature was available */
       if($this->dbver > 10) {
+         $this->tmpl->assign('has_rating', true);
          $this->sort_orders = array_merge($this->sort_orders, array(
             'rate_asc' => 'Rate ↑',
             'rate_desc' => 'Rate ↓',
@@ -298,11 +299,15 @@ class PHPFSPOT {
                }
                break;
             case 'export':
-               $this->tmpl->show("export.tpl");
+               /* fetch export template */
+               print $this->tmpl->fetch("export.tpl");
+               /* no further execution necessary. */
                return;
                break;
             case 'slideshow':
-               $this->tmpl->show("slideshow.tpl");
+               /* fetch slideshow template */
+               print $this->tmpl->show("slideshow.tpl");
+               /* no further execution necessary. */
                return;
                break;
             case 'rss':
@@ -321,15 +326,26 @@ class PHPFSPOT {
          }
       }
 
+      /* if date-search variables are registered in the session, set the check
+         for "consider date-range" in the html output
+      */
       if(isset($_SESSION['from_date']) && isset($_SESSION['to_date']))
          $this->tmpl->assign('date_search_enabled', true);
 
+      /* if rate-search variables are registered in the session, set the check
+         for "consider rate-range" in the html output
+      */
+      if(isset($_SESSION['rate_from']) && isset($_SESSION['rate_to'])) {
+         $this->tmpl->assign('rate_search_enabled', true);
+      }
+
       $this->tmpl->register_function("sort_select_list", array(&$this, "smarty_sort_select_list"), false);
       $this->tmpl->assign('search_from_date', $this->get_calendar('from'));
       $this->tmpl->assign('search_to_date', $this->get_calendar('to'));
 
       $this->tmpl->assign('preset_selected_tags', $this->getSelectedTags());
       $this->tmpl->assign('preset_available_tags', $this->getAvailableTags());
+      $this->tmpl->assign('rate_search', $this->get_rate_search());
 
       if(!isset($content)) {
          if(isset($_SESSION['selected_tags']) && !empty($_SESSION['selected_tags']))
@@ -528,6 +544,53 @@ class PHPFSPOT {
 
    } // get_photo_rating()
 
+   /**
+    * get rate-search bars
+    *
+    * this function will return the rating-bars for the
+    * search field.
+    * @return string
+    */
+   public function get_rate_search()
+   {
+      $bar = "";
+
+      for($i = 1; $i <= 5; $i++) {
+
+         $bar.= "<img id=\"rate_from_". $i ."\" src=\"";
+
+         if(isset($_SESSION['rate_from']) && $i <= $_SESSION['rate_from'])
+            $bar.= $this->cfg->web_path ."/resources/star.png";
+         else
+            $bar.= $this->cfg->web_path ."/resources/empty_rate.png";
+
+         $bar.= "\"
+            onmouseover=\"show_rate('from', ". $i .");\"
+            onmouseout=\"reset_rate('from');\"
+            onclick=\"set_rate('from', ". $i .")\" />";
+      }
+
+      $bar.= "<br />\n";
+
+       for($i = 1; $i <= 5; $i++) {
+
+         $bar.= "<img id=\"rate_to_". $i ."\" src=\"";
+
+         if(isset($_SESSION['rate_to']) && $i <= $_SESSION['rate_to'])
+            $bar.= $this->cfg->web_path ."/resources/star.png";
+         else
+            $bar.= $this->cfg->web_path ."/resources/empty_rate.png";
+
+         $bar.= "\"
+            onmouseover=\"show_rate('to', ". $i .");\"
+            onmouseout=\"reset_rate('to');\"
+            onclick=\"set_rate('to', ". $i .");\" />";
+      }
+
+      return $bar;
+
+   } // get_rate_search()
+
    /**
     * shrink text according provided limit
     *
@@ -630,7 +693,7 @@ class PHPFSPOT {
       $info = getimagesize($orig_path);
 
       /* get EXIF information if JPEG */
-      if($info['mime'] == "image/jpeg") {
+      if(isset($info['mime']) && $info['mime'] == "image/jpeg") {
          $meta = $this->get_meta_informations($orig_path);
       }
 
@@ -689,15 +752,16 @@ class PHPFSPOT {
       $this->tmpl->assign('current_page', $this->getCurrentPage($current, $count));
       $this->tmpl->assign('current_img', $photo);
 
-      if($previous_img) {
+      if(isset($previous_img)) {
          $this->tmpl->assign('previous_url', "javascript:showPhoto(". $previous_img .");");
          $this->tmpl->assign('prev_img', $previous_img);
       }
 
-      if($next_img) {
+      if(isset($next_img)) {
          $this->tmpl->assign('next_url', "javascript:showPhoto(". $next_img .");");
          $this->tmpl->assign('next_img', $next_img);
       }
+
       $this->tmpl->assign('mini_width', $this->cfg->mini_width);
       $this->tmpl->assign('photo_width', $this->cfg->photo_width);
       $this->tmpl->assign('photo_number', $i);
@@ -997,8 +1061,7 @@ class PHPFSPOT {
    /**
     * reset date search
     *
-    * if any date search has taken place, reset
-    * it now
+    * if any date search has taken place, reset it now.
     */
    public function resetDateSearch()
    {
@@ -1009,6 +1072,20 @@ class PHPFSPOT {
 
    } // resetDateSearch();
 
+   /**
+    * reset rate search
+    *
+    * if any rate search has taken place, reset it now.
+    */
+   public function resetRateSearch()
+   {
+      if(isset($_SESSION['rate_from']))
+         unset($_SESSION['rate_from']);
+      if(isset($_SESSION['rate_to']))
+         unset($_SESSION['rate_to']);
+
+   } // resetRateSearch();
+
    /**
     * return all photo according selection
     *
@@ -1034,6 +1111,12 @@ class PHPFSPOT {
       } 
 
       if(isset($_SESSION['searchfor_name'])) {
+
+         /* check for previous conditions. if so add 'AND' */
+         if(!empty($additional_where_cond)) {
+            $additional_where_cond.= " AND ";
+         }
+
          if($this->dbver < 9) {
             $additional_where_cond.= "
                   (
@@ -1054,6 +1137,24 @@ class PHPFSPOT {
          }
       }
 
+      /* limit result based on rate-search */
+      if(isset($_SESSION['rate_from']) && isset($_SESSION['rate_to'])) {
+
+         if($this->dbver > 10) {
+
+            /* check for previous conditions. if so add 'AND' */
+            if(!empty($additional_where_cond)) {
+               $additional_where_cond.= " AND ";
+            }
+
+            $additional_where_cond.= "
+                     p.rating >= ". $_SESSION['rate_from'] ."
+                  AND
+                     p.rating <= ". $_SESSION['rate_to'] ."
+            ";
+         }
+      }
+
       if(isset($_SESSION['sort_order'])) {
          $order_str = $this->get_sort_order();
       }
@@ -1073,7 +1174,7 @@ class PHPFSPOT {
                ON pt2.tag_id=t2.id
             WHERE t.name LIKE '%". $_SESSION['searchfor_tag'] ."%' ";
 
-         if(isset($additional_where_cond) && !empty($additional_where_cond))
+         if(!empty($additional_where_cond))
             $query_str.= "AND ". $additional_where_cond ." ";
 
          if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
@@ -1110,7 +1211,7 @@ class PHPFSPOT {
                   ON pt1.photo_id=p.id
                WHERE pt1.tag_id IN (". $selected .")
             ";
-            if(isset($additional_where_cond) && !empty($additional_where_cond)) 
+            if(!empty($additional_where_cond))
                $query_str.= "AND ". $additional_where_cond ." ";
 
             if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
@@ -1166,7 +1267,7 @@ class PHPFSPOT {
                   AND pt". ($i+2) .".tag_id=". $_SESSION['selected_tags'][$i] ."
                "; 
             }
-            if(isset($additional_where_cond) && !empty($additional_where_cond)) 
+            if(!empty($additional_where_cond))
                $query_str.= "AND ". $additional_where_cond;
 
             if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
@@ -1195,11 +1296,11 @@ class PHPFSPOT {
             ON pt.tag_id=t.id
       ";
 
-      if(isset($additional_where_cond) && !empty($additional_where_cond)) 
+      if(!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) && !empty($additional_where_cond))
+         if(!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). "')";
@@ -1226,6 +1327,7 @@ class PHPFSPOT {
    public function showPhotoIndex()
    {
       $photos = $this->getPhotoSelection();
+      $current_tags = $this->getCurrentTags();
 
       $count = count($photos);
 
@@ -1383,7 +1485,6 @@ class PHPFSPOT {
             $this->tmpl->assign('page_selector', $page_select);
       }
       
-      $current_tags = $this->getCurrentTags();
       $extern_link = "index.php?mode=showpi";
       $rss_link = "index.php?mode=rss";
       if($current_tags != "") {
@@ -1479,23 +1580,25 @@ class PHPFSPOT {
             $flip_hori = false;
             $flip_vert = false;
 
-            switch($meta['Orientation']) {
-               case 1: /* top, left */
-                  /* nothing to do */ break;
-               case 2: /* top, right */
-                  $rotate = 0; $flip_hori = true; break;
-               case 3: /* bottom, left */
-                  $rotate = 180; break;
-               case 4: /* bottom, right */
-                  $flip_vert = true; break;
-               case 5: /* left side, top */
-                  $rotate = 90; $flip_vert = true; break;
-               case 6: /* right side, top */
-                  $rotate = 90; break;
-               case 7: /* left side, bottom */
-                  $rotate = 270; $flip_vert = true; break;
-               case 8: /* right side, bottom */
-                  $rotate = 270; break;
+            if(isset($meta['Orientation'])) {
+               switch($meta['Orientation']) {
+                  case 1: /* top, left */
+                     /* nothing to do */ break;
+                  case 2: /* top, right */
+                     $rotate = 0; $flip_hori = true; break;
+                  case 3: /* bottom, left */
+                     $rotate = 180; break;
+                  case 4: /* bottom, right */
+                     $flip_vert = true; break;
+                  case 5: /* left side, top */
+                     $rotate = 90; $flip_vert = true; break;
+                  case 6: /* right side, top */
+                     $rotate = 90; break;
+                  case 7: /* left side, bottom */
+                     $rotate = 270; $flip_vert = true; break;
+                  case 8: /* right side, bottom */
+                     $rotate = 270; break;
+               }
             }
 
             $src_img = @imagecreatefromjpeg($orig_image);
@@ -1890,6 +1993,7 @@ class PHPFSPOT {
     */
    public function startSearch()
    {
+      /* date search */
       if(isset($_POST['from']) && $this->isValidDate($_POST['from'])) {
          $from = $_POST['from'];
       }
@@ -1897,15 +2001,36 @@ class PHPFSPOT {
          $to = $_POST['to'];
       }
 
+      /* tag-name search */
       if(isset($_POST['for_tag']) && is_string($_POST['for_tag'])) {
          $searchfor_tag = $_POST['for_tag'];
          $_SESSION['searchfor_tag'] = $_POST['for_tag'];
       }
+      else {
+         unset($_SESSION['searchfor_tag']);
+      }
 
+      /* file-name search */
       if(isset($_POST['for_name']) && is_string($_POST['for_name'])) {
-         $searchfor_name = $_POST['for_name'];
          $_SESSION['searchfor_name'] = $_POST['for_name'];
       }
+      else {
+         unset($_SESSION['searchfor_name']);
+      }
+
+      /* rate-search */
+      if(isset($_POST['rate_from']) && is_numeric($_POST['rate_from'])) {
+
+         $_SESSION['rate_from'] = $_POST['rate_from'];
+
+         if(isset($_POST['rate_to']) && is_numeric($_POST['rate_to'])) {
+            $_SESSION['rate_to'] = $_POST['rate_to'];
+         }
+      }
+      else {
+         /* delete any previously set value */
+         unset($_SESSION['rate_to'], $_SESSION['rate_from']);
+      }
 
       $this->get_tags();
 
@@ -2173,7 +2298,7 @@ class PHPFSPOT {
 
    private function _debug($text)
    {
-      if($this->fromcmd) {
+      if(isset($this->fromcmd)) {
          print $text;
       }
 
@@ -2431,7 +2556,7 @@ class PHPFSPOT {
          $orig_path = $this->translate_path($this->parse_uri($details['uri'], 'fullpath'));
 
          /* get EXIF information if JPEG */
-         if($details['mime'] == "image/jpeg") {
+         if(isset($details['mime']) && $details['mime'] == "image/jpeg") {
             $meta = $this->get_meta_informations($orig_path);
          }
 
@@ -2461,7 +2586,10 @@ class PHPFSPOT {
 
  
    /**
-    * return all selected tags as one string
+    * get all selected tags
+    *
+    * This function will return all selected tags as one string, seperated
+    * by a comma.
     * @return array
     */
    private function getCurrentTags()