issue118, first code for friendly looking URLs and new config-option $user_friendly_url
[phpfspot.git] / phpfspot.class.php
index bae4ae74dbc40ce34899bb4270397a3860000abf..badc728980262accbed01b66789e88c5b4b4aec8 100644 (file)
@@ -244,6 +244,11 @@ class PHPFSPOT {
       $this->tmpl->assign('current_condition', $_SESSION['tag_condition']);
       $this->tmpl->assign('template_path', 'themes/'. $this->cfg->theme_name);
 
+      /* parse URL */
+      if(isset($this->cfg->user_friendly_url) && $this->cfg->user_friendly_url) {
+         $content = $this->parse_user_friendly_url($_SERVER['REQUEST_URI']);
+      }
+
       if(isset($_GET['mode'])) {
 
          $_SESSION['start_action'] = $_GET['mode'];
@@ -306,7 +311,12 @@ class PHPFSPOT {
       $this->tmpl->register_function("sort_select_list", array(&$this, "smarty_sort_select_list"), false);
       $this->tmpl->assign('from_date', $this->get_calendar('from'));
       $this->tmpl->assign('to_date', $this->get_calendar('to'));
-      $this->tmpl->assign('content_page', 'welcome.tpl');
+
+      if(!isset($content))
+         $this->tmpl->assign('content_page', $this->tmpl->fetch('welcome.tpl'));
+      else
+         $this->tmpl->assign('content_page', $content);
+
       $this->tmpl->show("index.tpl");
 
    } // show()
@@ -609,7 +619,11 @@ class PHPFSPOT {
       $this->tmpl->assign('ExifOrigResolution', $meta_res);
       $this->tmpl->assign('ExifFileSize', $meta_size);
  
-      $this->tmpl->assign('image_url', 'phpfspot_img.php?idx='. $photo ."&width=". $this->cfg->photo_width);
+      if(!isset($this->cfg->user_friendly_url) || !$this->cfg->user_friendly_url)
+         $this->tmpl->assign('image_url', 'phpfspot_img.php?idx='. $photo ."&width=". $this->cfg->photo_width);
+      else
+         $this->tmpl->assign('image_url', '/photo/'. $photo ."/". $this->cfg->photo_width);
+
       $this->tmpl->assign('image_url_full', 'phpfspot_img.php?idx='. $photo);
       $this->tmpl->assign('image_filename', $this->parse_uri($details['uri'], 'filename'));
 
@@ -631,7 +645,7 @@ class PHPFSPOT {
       $this->tmpl->assign('photo_number', $i);
       $this->tmpl->assign('photo_count', count($all_photos));
 
-      $this->tmpl->show("single_photo.tpl");
+      return $this->tmpl->fetch("single_photo.tpl");
 
    } // showPhoto()
 
@@ -726,7 +740,7 @@ class PHPFSPOT {
     * session-variable $_SESSION['selected_tags']
     * @return string
     */
-   public function getSelectedTags()
+   public function getSelectedTags($type = 'link')
    {
       /* retrive tags from database */
       $this->get_tags();
@@ -737,7 +751,29 @@ class PHPFSPOT {
       {
          // return all selected tags
          if(isset($_SESSION['selected_tags']) && in_array($tag, $_SESSION['selected_tags'])) {
-            $output.= "<a href=\"javascript:Tags('del', ". $tag .");\" class=\"tag\">". $this->tags[$tag] ."</a>, ";
+
+            switch($type) {
+               default:
+               case 'link':
+                  $output.= "<a href=\"javascript:Tags('del', ". $tag .");\" class=\"tag\">". $this->tags[$tag] ."</a>, ";
+                  break;
+               case 'img':
+                  $output.= "
+                  <div style=\"display: table-cell;\">
+                   <div style=\"display: table-row; text-align: center;\">
+                    <a href=\"javascript:Tags('del', ". $tag .");\" title=\"". $this->tags[$tag] ."\">
+                     <img src=\"phpfspot_img.php?tagidx=". $tag ."\" />
+                    </a>
+                   </div>
+                   <div style=\"display: table-row; text-align: center;\">
+                    <a href=\"javascript:Tags('del', ". $tag .");\" title=\"". $this->tags[$tag] ."\">
+                     <img src=\"resources/underbar.png\" />
+                    </a>
+                   </div>
+                  </div>
+                  ";
+                  break;
+            }
          }
       }
 
@@ -1315,6 +1351,7 @@ class PHPFSPOT {
       $this->tmpl->assign('img_fullname', $img_fullname);
       $this->tmpl->assign('img_title', $img_title);
       $this->tmpl->assign('thumbs', $thumbs);
+      $this->tmpl->assign('selected_tags', $this->getSelectedTags('img'));
 
       $this->tmpl->show("photo_index.tpl");
 
@@ -1634,6 +1671,7 @@ class PHPFSPOT {
          $this->cfg->thumb_width,
          $this->cfg->photo_width,
          $this->cfg->mini_width,
+         30,
       );
 
       /* get details from F-Spot's database */
@@ -2563,6 +2601,56 @@ class PHPFSPOT {
 
    } // get_random_photo()
 
+   /**
+    * get random photo tag photo
+    *
+    * this function will get all photos tagged with the requested
+    * tag 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.
+    * @return array
+    */
+   public function get_random_tag_photo($tagidx)
+   {
+      $all = Array();
+
+      $query_str = "
+         SELECT p.id
+         FROM photos p
+         INNER JOIN photo_tags pt
+            ON p.id=pt.photo_id
+      ";
+
+      if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
+         $query_str.= "
+            INNER JOIN tags t
+               ON pt.tag_id=t.id
+         ";
+      }
+      $query_str.= "
+         WHERE
+            pt.tag_id LIKE '". $tagidx ."'
+      ";
+
+      /*if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) {
+         $query_str.= "
+           AND
+               t.name IN ('".implode("','",$this->cfg->show_tags)."')
+         ";
+      }*/
+
+      $result = $this->db->db_query($query_str);
+
+      while($row = $this->db->db_fetch_object($result)) {
+         array_push($all, $row['id']);
+      }
+
+      return $all[array_rand($all)];
+
+   } // get_random_tag_photo()
+
    /**
     * validates provided date
     *
@@ -2930,7 +3018,7 @@ class PHPFSPOT {
     */
    public function get_mime_info($file)
    {
-      $details = getimagesize($orig_image);
+      $details = getimagesize($file);
 
       /* if getimagesize() returns empty, try at least to find out the
          mime type.
@@ -2971,6 +3059,36 @@ class PHPFSPOT {
       
    } // get_tag_name()
 
+
+   private function parse_user_friendly_url($request_uri)
+   {
+      if(preg_match('/\/photoview\/|\/photo\//', $request_uri)) {
+
+         $options = explode('/', $request_uri);
+
+         switch($options[1]) {
+            case 'photoview':
+               if(is_numeric($options[2])) {
+                  return $this->showPhoto($options[2]);
+               }
+               break;
+            case 'photo':
+               if(is_numeric($options[2])) {
+                  require_once "phpfspot_img.php";
+                  $img = new PHPFSPOT_IMG;
+                  if(isset($options[3]) && is_numeric($options[3]))
+                     $img->showImg($options[2], $options[3]);
+                  else
+                     $img->showImg($options[2]);
+               }
+               exit;
+               break;
+         }
+      }
+
+   } // parse_user_friendly_url()
+
+
 } // class PHPFSPOT
 
 ?>