added changelog entries for version 1.1
[phpfspot.git] / phpfspot.class.php
index a51164830fcff2de589a07bc6abd94c4cd973f9f..559e4f55184164c763fefb408cb0a838ef51afae 100644 (file)
@@ -50,14 +50,14 @@ class PHPFSPOT {
 
       $this->cfg = new PHPFSPOT_CFG;
 
-      $this->db  = new PHPFSPOT_DB(&$this, $this->cfg->fspot_db);
+      $this->db  = new PHPFSPOT_DB($this, $this->cfg->fspot_db);
       
       if(!is_writeable(dirname($this->cfg->phpfspot_db))) {
          print dirname($this->cfg->phpfspot_db) .": directory is not writeable!";
          exit(1);
       }
          
-      $this->cfg_db = new PHPFSPOT_DB(&$this, $this->cfg->phpfspot_db);
+      $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";
          exit(1);
@@ -145,6 +145,19 @@ class PHPFSPOT {
             $this->tmpl->show("slideshow.tpl");
             return;
             break;
+         case 'rss':
+            if(isset($_GET['tags'])) {
+               $_SESSION['selected_tags'] = $this->extractTags($_GET['tags']);
+            }
+            if(isset($_GET['from_date']) && $this->isValidDate($_GET['from_date'])) {
+               $_SESSION['from_date'] = strtotime($_GET['from_date'] ." 00:00:00");
+            }
+            if(isset($_GET['to_date']) && $this->isValidDate($_GET['to_date'])) {
+               $_SESSION['to_date'] = strtotime($_GET['to_date'] ." 23:59:59");
+            }
+            $this->getRSSFeed();
+            return;
+            break;
       }
 
       if(isset($_SESSION['from_date']) && isset($_SESSION['to_date']))
@@ -885,11 +898,14 @@ class PHPFSPOT {
       
       $current_tags = $this->getCurrentTags();
       $extern_link = "index.php?mode=showpi";
+      $rss_link = "index.php?mode=rss";
       if($current_tags != "") {
          $extern_link.= "&tags=". $current_tags;
+         $rss_link.= "&tags=". $current_tags;
       }
       if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) {
          $extern_link.= "&from_date=". $this->ts2str($_SESSION['from_date']) ."&to_date=". $this->ts2str($_SESSION['to_date']);
+         $rss_link.= "&from_date=". $this->ts2str($_SESSION['from_date']) ."&to_date=". $this->ts2str($_SESSION['to_date']);
       }
 
       $export_link = "index.php?mode=export";
@@ -898,6 +914,7 @@ class PHPFSPOT {
       $this->tmpl->assign('extern_link', $extern_link);
       $this->tmpl->assign('slideshow_link', $slideshow_link);
       $this->tmpl->assign('export_link', $export_link);
+      $this->tmpl->assign('rss_link', $rss_link);
       $this->tmpl->assign('count', $count);
       $this->tmpl->assign('width', $this->cfg->thumb_width);
       $this->tmpl->assign('images', $images);
@@ -1139,7 +1156,7 @@ class PHPFSPOT {
 
       $file_md5 = md5_file($full_path);
 
-      $this->_debug("Image [". $idx ."] ". $details['name'] ." Thumbnails:");
+      $this->_debug("Image [". $idx ."] ". $this->shrink_text($details['name'], 20) ." Thumbnails:");
 
       foreach($resolutions as $resolution) {
 
@@ -1564,14 +1581,9 @@ class PHPFSPOT {
       $pictures = $this->getPhotoSelection();
       $current_tags = $this->getCurrentTags();  
 
-      if(!isset($_SERVER['HTTPS'])) $protocol = "http";
-      else $protocol = "https";
-
-      $server_name = $_SERVER['SERVER_NAME'];
-
       foreach($pictures as $picture) {
 
-         $orig_url = $protocol ."://". $server_name . $this->cfg->web_path ."index.php?mode=showp&id=". $picture;
+         $orig_url = $this->get_phpfspot_url() ."index.php?mode=showp&id=". $picture;
          if($current_tags != "") {
             $orig_url.= "&tags=". $current_tags;
          } 
@@ -1579,7 +1591,7 @@ class PHPFSPOT {
             $orig_url.= "&from_date=". $_SESSION['from_date'] ."&to_date=". $_SESSION['to_date'];
          }
 
-         $thumb_url = $protocol ."://". $server_name . $this->cfg->web_path ."phpfspot_img.php?idx=". $picture ."&width=". $this->cfg->thumb_width;
+         $thumb_url = $this->get_phpfspot_url() ."phpfspot_img.php?idx=". $picture ."&width=". $this->cfg->thumb_width;
 
          switch($mode) {
 
@@ -1603,6 +1615,74 @@ class PHPFSPOT {
 
    } // getExport()
 
+   /**
+    * output RSS feed
+    */
+   public function getRSSFeed()
+   {
+      Header("Content-type: text/xml; charset=utf-8");
+      print "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
+?>
+<rss version="2.0"
+   xmlns:media="http://search.yahoo.com/mrss/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+ >
+ <channel>
+  <title>phpfspot</title>
+  <description>phpfspot RSS feed</description>
+  <link><?php print htmlspecialchars($this->get_phpfspot_url()); ?></link>
+  <pubDate><?php print strftime("%a, %d %b %Y %T %z"); ?></pubDate>
+  <generator>phpfspot</generator>
+<?php
+
+      $pictures = $this->getPhotoSelection();
+      $current_tags = $this->getCurrentTags();  
+
+      foreach($pictures as $picture) {
+
+         $orig_url = $this->get_phpfspot_url() ."index.php?mode=showp&id=". $picture;
+         if($current_tags != "") {
+            $orig_url.= "&tags=". $current_tags;
+         } 
+         if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) {
+            $orig_url.= "&from_date=". $_SESSION['from_date'] ."&to_date=". $_SESSION['to_date'];
+         }
+
+         $details = $this->get_photo_details($picture);
+
+         $thumb_url = $this->get_phpfspot_url() ."phpfspot_img.php?idx=". $picture ."&width=". $this->cfg->thumb_width;
+         $thumb_html = htmlspecialchars("
+<a href=\"". $orig_url ."\"><img src=\"". $thumb_url ."\" /></a>
+<br>
+". $details['description']);
+
+         $orig_path = $this->translate_path($details['directory_path']) ."/". $details['name'];
+         $meta = $this->get_meta_informations($orig_path);
+         $meta_date = isset($meta['FileDateTime']) ? $meta['FileDateTime'] : filemtime($orig_path);
+
+?>
+  <item>
+   <title><?php print htmlspecialchars($details['name']); ?></title>
+   <link><?php print htmlspecialchars($orig_url); ?></link>
+   <guid><?php print htmlspecialchars($orig_url); ?></guid>
+   <dc:date.Taken><?php print strftime("%Y-%m-%dT%H:%M:%S+00:00", $meta_date); ?></dc:date.Taken>
+   <description>
+    <?php print $thumb_html; ?> 
+   </description>
+   <pubDate><?php print strftime("%a, %d %b %Y %T %z"); ?></pubDate>
+  </item>
+<?php
+
+      }
+?>
+ </channel>
+</rss>
+<?php
+
+
+   } // getExport()
+
    /**
     * return all selected tags as one string
     */
@@ -1723,11 +1803,7 @@ class PHPFSPOT {
       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;
+      return $this->get_phpfspot_url() ."phpfspot_img.php?idx=". $all_photos[$_SESSION['slideshow_img']] ."&width=". $this->cfg->photo_width;
 
    } // getNextSlideShowImage()
 
@@ -1746,11 +1822,7 @@ class PHPFSPOT {
       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;
+      return $this->get_phpfspot_url() ."phpfspot_img.php?idx=". $all_photos[$_SESSION['slideshow_img']] ."&width=". $this->cfg->photo_width;
 
    } // getPrevSlideShowImage()
 
@@ -1843,6 +1915,34 @@ class PHPFSPOT {
 
    } // get_thumb_path()
 
+   /**
+    * returns server's virtual host name
+    */
+   private function get_server_name()
+   {
+      return $_SERVER['SERVER_NAME'];
+   } // get_server_name()
+
+   /**
+    * returns type of webprotocol which is
+    * currently used
+    */
+   private function get_web_protocol()
+   {
+      if(!isset($_SERVER['HTTPS']))
+         return "http";
+      else
+         return "https";
+   } // get_web_protocol()
+
+   /**
+    * return url to this phpfspot installation
+    */
+   private function get_phpfspot_url()
+   {
+      return $this->get_web_protocol() ."://". $this->get_server_name() . $this->cfg->web_path;
+   } // get_phpfspot_url()
+
 }
 
 ?>