Merge branch 'master' into checker
[phpfspot.git] / phpfspot.class.php
index 58cda4e2f5776452aa56e07762aa107f17aa6834..797c6047abbe299d2d15ad432550b5967c6eb775 100644 (file)
@@ -142,7 +142,9 @@ class PHPFSPOT {
 
       /* Check if database file is writeable */
       if(!is_writeable($this->cfg->fspot_db)) {
-         print $this->cfg->fspot_db ." is not writeable for user ". $this->getuid() ."\n";
+         print "Error: ". $this->cfg->fspot_db ." is not writeable for user ". $this->getuid() .".\n";
+         print "Please fix permissions so phpfspot can create indices within the F-Spot database to"
+            ." speed up some database operations.\n";
          exit(1);
       }
 
@@ -174,13 +176,15 @@ class PHPFSPOT {
 
       /* Check if directory where the database file is stored is writeable  */
       if(!is_writeable(dirname($this->cfg->phpfspot_db))) {
-         print dirname($this->cfg->phpfspot_db) .": directory is not writeable for user ". $this->getuid() ."\n";
+         print "Error: ". dirname($this->cfg->phpfspot_db) .": directory is not writeable for user ". $this->getuid() .".\n";
+         print "Please fix permissions so phpfspot can create its own sqlite database to store some settings.\n";
          exit(1);
       }
 
       /* Check if database file is writeable */
       if(!is_writeable($this->cfg->phpfspot_db)) {
-         print $this->cfg->phpfspot_db ." is not writeable for user ". $this->getuid() ."\n";
+         print "Error: ". $this->cfg->phpfspot_db ." is not writeable for user ". $this->getuid() .".\n";
+         print "Please fix permissions so phpfspot can create its own sqlite database to store some settings.\n";
          exit(1);
       }
 
@@ -299,11 +303,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':
@@ -336,18 +344,29 @@ class PHPFSPOT {
       }
 
       $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('search_from_date', $this->get_date_text_field('from'));
+      $this->tmpl->assign('search_to_date', $this->get_date_text_field('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 no site-content has been set yet... */
       if(!isset($content)) {
-         if(isset($_SESSION['selected_tags']) && !empty($_SESSION['selected_tags']))
+         /* if tags are already selected, we can immediately display photo-index */
+         if((isset($_SESSION['selected_tags']) && !empty($_SESSION['selected_tags']) &&
+             isset($_SESSION['start_action']) && $_SESSION['start_action'] != 'showp') ||
+            (isset($_SESSION['start_action']) && $_SESSION['start_action'] == 'showpi'))
             $this->tmpl->assign('initial_content', $this->showPhotoIndex());
-         else
-            $this->tmpl->assign('initial_content', $this->tmpl->fetch('welcome.tpl'));
+         else {
+            /* if a photo is already selected, we can immediately display single-photo */
+            if(isset($_SESSION['current_photo']) && !empty($_SESSION['current_photo']))
+               $this->tmpl->assign('initial_content', $this->showPhoto($_SESSION['current_photo']));
+            else {
+               /* ok, then let us show the welcome page... */
+               $this->tmpl->assign('initial_content', $this->tmpl->fetch('welcome.tpl'));
+            }
+         }
       }
       else
          $this->tmpl->assign('initial_content', $content);
@@ -689,7 +708,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);
       }
 
@@ -748,15 +767,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);
@@ -1322,6 +1342,7 @@ class PHPFSPOT {
    public function showPhotoIndex()
    {
       $photos = $this->getPhotoSelection();
+      $current_tags = $this->getCurrentTags();
 
       $count = count($photos);
 
@@ -1479,7 +1500,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 != "") {
@@ -1575,23 +1595,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);
@@ -1987,11 +2009,11 @@ class PHPFSPOT {
    public function startSearch()
    {
       /* date search */
-      if(isset($_POST['from']) && $this->isValidDate($_POST['from'])) {
-         $from = $_POST['from'];
+      if(isset($_POST['date_from']) && $this->isValidDate($_POST['date_from'])) {
+         $date_from = $_POST['date_from'];
       }
-      if(isset($_POST['to']) && $this->isValidDate($_POST['to'])) {
-         $to = $_POST['to'];
+      if(isset($_POST['date_to']) && $this->isValidDate($_POST['date_to'])) {
+         $date_to = $_POST['date_to'];
       }
 
       /* tag-name search */
@@ -2027,13 +2049,13 @@ class PHPFSPOT {
 
       $this->get_tags();
 
-      if(isset($from) && !empty($from))
-         $_SESSION['from_date'] = strtotime($from ." 00:00:00");
+      if(isset($date_from) && !empty($date_from))
+         $_SESSION['from_date'] = strtotime($date_from ." 00:00:00");
       else
          unset($_SESSION['from_date']);
 
-      if(isset($to) && !empty($to))
-         $_SESSION['to_date'] = strtotime($to ." 23:59:59");
+      if(isset($date_to) && !empty($date_to))
+         $_SESSION['to_date'] = strtotime($date_to ." 23:59:59");
       else
          unset($_SESSION['to_date']);
 
@@ -2291,7 +2313,7 @@ class PHPFSPOT {
 
    private function _debug($text)
    {
-      if($this->fromcmd) {
+      if(isset($this->fromcmd)) {
          print $text;
       }
 
@@ -2343,32 +2365,31 @@ class PHPFSPOT {
    } // _error()
 
    /**
-    * output calendard input fields
+    * get calendar input-text fields
+    *
+    * this function returns a text-field used for the data selection.
+    * Either it will be filled with the current date or, if available,
+    * filled with the date user entered previously.
+    *
     * @param string $mode
     * @return string
     */
-   private function get_calendar($mode)
+   private function get_date_text_field($mode)
    {
-      $year = isset($_SESSION[$mode .'_date']) ? date("Y", $_SESSION[$mode .'_date']) : date("Y");
-      $month = isset($_SESSION[$mode .'_date']) ? date("m", $_SESSION[$mode .'_date']) : date("m");
-      $day = isset($_SESSION[$mode .'_date']) ? date("d", $_SESSION[$mode .'_date']) : date("d");
+      $date = isset($_SESSION[$mode .'_date']) ? date("Y", $_SESSION[$mode .'_date']) : date("Y");
+      $date.= "-";
+      $date.= isset($_SESSION[$mode .'_date']) ? date("m", $_SESSION[$mode .'_date']) : date("m");
+      $date.= "-";
+      $date.= isset($_SESSION[$mode .'_date']) ? date("d", $_SESSION[$mode .'_date']) : date("d");
 
-      $output = "<input type=\"text\" size=\"3\" id=\"". $mode ."year\" value=\"". $year ."\"";
-      if(!isset($_SESSION[$mode .'_date']))
-         $output.= " disabled=\"disabled\"";
-      $output.= " />\n";
-      $output.= "<input type=\"text\" size=\"1\" id=\"". $mode ."month\" value=\"". $month ."\"";
-      if(!isset($_SESSION[$mode .'_date']))
-         $output.= " disabled=\"disabled\"";
-      $output.= " />\n";
-      $output.= "<input type=\"text\" size=\"1\" id=\"". $mode ."day\" value=\"". $day ."\"";
+      $output = "<input type=\"text\" size=\"15\" id=\"date_". $mode ."\" value=\"". $date ."\"";
       if(!isset($_SESSION[$mode .'_date']))
          $output.= " disabled=\"disabled\"";
       $output.= " />\n";
 
       return $output;
 
-   } // get_calendar()
+   } // get_date_text_field()
 
    /**
     * output calendar matrix
@@ -2549,7 +2570,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);
          }
 
@@ -2579,7 +2600,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()