issue55, PHPFSPOT_IMG can now display a random selected photo
[phpfspot.git] / phpfspot.class.php
index f71a0db1d3418cd74a5cae20699b9a9bd5762d2f..ffb511d97361df9c475132a27bb0c9e4cc6d7f99 100644 (file)
@@ -69,6 +69,9 @@ class PHPFSPOT {
       if(!isset($_SESSION['tag_condition']))
          $_SESSION['tag_condition'] = 'or';
 
+      if(!isset($_SESSION['sort_order']))
+         $_SESSION['sort_order'] = 'date_asc';
+
       if(!isset($_SESSION['searchfor']))
          $_SESSION['searchfor'] = '';
 
@@ -132,10 +135,15 @@ class PHPFSPOT {
             $this->tmpl->show("export.tpl");
             return;
             break;
+         case 'slideshow':
+            $this->tmpl->show("slideshow.tpl");
+            return;
+            break;
       }
 
       $this->tmpl->assign('from_date', $this->get_calendar('from'));
       $this->tmpl->assign('to_date', $this->get_calendar('to'));
+      $this->tmpl->assign('sort_field', $this->get_sort_field());
       $this->tmpl->assign('content_page', 'welcome.tpl');
       $this->tmpl->show("index.tpl");
 
@@ -353,6 +361,8 @@ class PHPFSPOT {
          $this->tmpl->assign('next_img', $next_img);
       }
       $this->tmpl->assign('mini_width', $this->cfg->mini_width);
+      $this->tmpl->assign('photo_number', $i);
+      $this->tmpl->assign('photo_count', count($all_photos));
 
       $this->tmpl->show("single_photo.tpl");
 
@@ -557,6 +567,10 @@ class PHPFSPOT {
          ";
       } 
 
+      if(isset($_SESSION['sort_order'])) {
+         $order_str = $this->get_sort_order();
+      }
+
       /* return a search result */
       if(isset($_SESSION['searchfor']) && $_SESSION['searchfor'] != '') {
          $query_str = "
@@ -570,9 +584,9 @@ class PHPFSPOT {
 
          if(isset($additional_where_cond))
             $query_str.= "AND ". $additional_where_cond ." ";
-         $query_str.= "
-            ORDER BY p.time ASC
-         ";
+         if(isset($order_str))
+            $query_str.= $order_str;
+
          $result = $this->db->db_query($query_str);
          while($row = $this->db->db_fetch_object($result)) {
             array_push($matched_photos, $row['photo_id']);
@@ -597,10 +611,8 @@ class PHPFSPOT {
             ";
             if(isset($additional_where_cond)) 
                $query_str.= "AND ". $additional_where_cond ." ";
-
-            $query_str.= "
-               ORDER BY p.time ASC
-            ";
+            if(isset($order_str))
+               $query_str.= $order_str;
          }
          elseif($_SESSION['tag_condition'] == 'and') {
 
@@ -630,6 +642,10 @@ class PHPFSPOT {
                      ON pt1.photo_id=pt". ($i+2) .".photo_id
                ";
             }
+            $query_str.= "
+               INNER JOIN photos p
+                  ON pt1.photo_id=p.id
+            ";
             $query_str.= "WHERE pt1.tag_id=". $_SESSION['selected_tags'][0];
             for($i = 1; $i < count($_SESSION['selected_tags']); $i++) {
                $query_str.= "
@@ -638,6 +654,8 @@ class PHPFSPOT {
             }
             if(isset($additional_where_cond)) 
                $query_str.= "AND ". $additional_where_cond;
+            if(isset($order_str))
+               $query_str.= $order_str;
          }
 
          $result = $this->db->db_query($query_str);
@@ -656,9 +674,9 @@ class PHPFSPOT {
       ";
       if(isset($additional_where_cond)) 
          $query_str.= "WHERE ". $additional_where_cond ." ";
-      $query_str.= "
-         ORDER BY p.time ASC
-      ";
+      if(isset($order_str))
+         $query_str.= $order_str;
+
       $result = $this->db->db_query($query_str);
       while($row = $this->db->db_fetch_object($result)) {
          array_push($matched_photos, $row['photo_id']);
@@ -853,8 +871,10 @@ class PHPFSPOT {
       }
 
       $export_link = "index.php?mode=export";
+      $slideshow_link = "index.php?mode=slideshow";
 
       $this->tmpl->assign('extern_link', $extern_link);
+      $this->tmpl->assign('slideshow_link', $slideshow_link);
       $this->tmpl->assign('export_link', $export_link);
       $this->tmpl->assign('count', $count);
       $this->tmpl->assign('width', $this->cfg->thumb_width);
@@ -1184,11 +1204,12 @@ class PHPFSPOT {
     * getPhotoSelection() will then only return the matching
     * photos.
     */
-   public function startSearch($searchfor, $from, $to)
+   public function startSearch($searchfor, $from, $to, $sort_order)
    {
       $_SESSION['searchfor'] = $searchfor;
       $_SESSION['from_date'] = $from;
       $_SESSION['to_date'] = $to;
+      $_SESSION['sort_order'] = $sort_order;
 
       if($searchfor != "") {
          /* new search, reset the current selected tags */
@@ -1569,15 +1590,13 @@ class PHPFSPOT {
     */
    public function whatToDo()
    {
-      if(isset($_SESSION['selected_tags']) && !empty($_SESSION['selected_tags'])) {
-         return "showpi_tags";
-      }
-      elseif(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) {
-         return "showpi_date";
-      }
-      elseif(isset($_SESSION['current_photo']) && $_SESSION['start_action'] == 'showp') {
+      if(isset($_SESSION['current_photo']) && $_SESSION['start_action'] == 'showp') {
          return "show_photo";
       }
+      elseif((isset($_SESSION['selected_tags']) && !empty($_SESSION['selected_tags'])) ||
+         (isset($_SESSION['from_date']) && isset($_SESSION['to_date']))) {
+         return "showpi";
+      }
       elseif(isset($_SESSION['start_action']) && $_SESSION['start_action'] == 'showpi') {
          return "showpi";
       }
@@ -1601,6 +1620,96 @@ class PHPFSPOT {
    
    } // getuid()
 
+   /**
+    * returns a select-dropdown box to select photo index sort parameters
+    */
+   private function get_sort_field()
+   {
+      $output = "<select name=\"sort_order\">";
+      foreach(array('date_asc', 'date_desc', 'name_asc', 'name_desc') as $sort_order) {
+         $output.= "<option value=\"". $sort_order ."\"";
+         if($sort_order == $_SESSION['sort_order']) {
+            $output.= " selected=\"selected\"";
+         }
+         $output.= ">". $sort_order ."</option>";
+      }
+      $output.= "</select>";
+      return $output;
+
+   } // get_sort_field()
+
+   /**
+    * returns the currently selected sort order
+    */ 
+   private function get_sort_order()
+   {
+      switch($_SESSION['sort_order']) {
+         case 'date_asc':
+            return " ORDER BY p.time ASC";
+            break;
+         case 'date_desc':
+            return " ORDER BY p.time DESC";
+            break;
+         case 'name_asc':
+            return " ORDER BY p.name ASC";
+            break;
+         case 'name_desc':
+            return " ORDER BY p.name DESC";
+            break;
+      }
+
+   } // get_sort_order()
+
+   public function getNextSlideShowImage()
+   {
+      $all_photos = $this->getPhotoSelection();
+
+      if(!isset($_SESSION['slideshow_img']) || $_SESSION['slideshow_img'] == count($all_photos)-1) 
+         $_SESSION['slideshow_img'] = 0;
+      else
+         $_SESSION['slideshow_img']++;
+
+      $server_name = $_SERVER['SERVER_NAME'];
+      if(!isset($_SERVER['HTTPS'])) $protocol = "http";
+      else $protocol = "https";
+
+      return $protocol ."://". $server_name . $this->cfg->web_path ."phpfspot_img.php?idx=". $all_photos[$_SESSION['slideshow_img']] ."&width=". $this->cfg->photo_width;
+
+   } // getNextSlideShowImage()
+
+   public function resetSlideShow()
+   {
+      if(isset($_SESSION['slideshow_img']))
+         unset($_SESSION['slideshow_img']);
+   } // resetSlideShow()
+   
+   /***
+     * get random photo
+     *
+     * this function will get all photos from the fspot
+     * database and randomly return ONE entry
+     *
+     * saddly there is yet no sqlite3 function which returns
+     * the bulk result in array, so we have to fill up our
+     * own here.
+     */ 
+   public function get_random_photo()
+   {
+      $all = Array();
+
+      $result = $this->db->db_query("
+         SELECT id
+         FROM photos
+      ");
+      
+      while($row = $this->db->db_fetch_object($result)) {
+         array_push($all, $row[0]);
+      }
+
+      return array_rand($all);
+
+   } // get_random_photo()
+
 }
 
 ?>