X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot.class.php;h=a7290b6e833af99c023f07ff16980db8fb5c00e4;hp=f71a0db1d3418cd74a5cae20699b9a9bd5762d2f;hb=223a626abc5757fbce0b6ce4e0a4a4a1cf4980e4;hpb=984b068b1369819a44bbfc4412476da0da49607f diff --git a/phpfspot.class.php b/phpfspot.class.php index f71a0db..a7290b6 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -58,8 +58,13 @@ class PHPFSPOT { } $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); + } $this->check_config_table(); + $this->tmpl = new PHPFSPOT_TMPL($this); $this->get_tags(); @@ -69,6 +74,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'] = ''; @@ -97,6 +105,7 @@ class PHPFSPOT { $this->tmpl->assign('searchfor', $_SESSION['searchfor']); $this->tmpl->assign('page_title', $this->cfg->page_title); $this->tmpl->assign('current_condition', $_SESSION['tag_condition']); + $this->tmpl->assign('template_path', 'themes/'. $this->cfg->theme_name); $_SESSION['start_action'] = $_GET['mode']; @@ -132,10 +141,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 +367,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 +573,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 +590,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 +617,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 +648,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 +660,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 +680,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 +877,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 +1210,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 */ @@ -1524,8 +1551,13 @@ class PHPFSPOT { break; case 'MoinMoin': - // [%pictureurl% %thumbnailurl%] - print htmlspecialchars(" * [".$orig_url." ".$thumb_url."&fake=1.jpg]") ."
\n"; + // "[%pictureurl% %thumbnailurl%]" + print htmlspecialchars("[".$orig_url." ".$thumb_url."&fake=1.jpg]") ."
\n"; + break; + + case 'MoinMoinList': + // " * [%pictureurl% %thumbnailurl%]" + print " " . htmlspecialchars("* [".$orig_url." ".$thumb_url."&fake=1.jpg]") ."
\n"; break; } @@ -1569,15 +1601,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 +1631,125 @@ class PHPFSPOT { } // getuid() + /** + * returns a select-dropdown box to select photo index sort parameters + */ + private function get_sort_field() + { + $output = ""; + 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() + + /*** + * return the next to be shown slide show image + * + * this function returns the URL of the next image + * in the slideshow sequence. + */ + 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() + + /*** + * return the previous to be shown slide show image + * + * this function returns the URL of the previous image + * in the slideshow sequence. + */ + public function getPrevSlideShowImage() + { + $all_photos = $this->getPhotoSelection(); + + if(!isset($_SESSION['slideshow_img']) || $_SESSION['slideshow_img'] == 0) + $_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; + + } // getPrevSlideShowImage() + + 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['id']); + } + + return $all[array_rand($all)]; + + } // get_random_photo() + } ?>