X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot.class.php;h=25d144c2dcbe255b0cd7270b1090b13946d1c8a2;hp=46823e7ada656ae037f9460f0592667c87361de9;hb=005562e4a4fb2b37fc6f1d4a8ca4a9c11ab42ed1;hpb=7f3aad92a12d104b7a74232499ef423edb9743f8 diff --git a/phpfspot.class.php b/phpfspot.class.php index 46823e7..25d144c 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -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"); @@ -457,9 +465,6 @@ class PHPFSPOT { */ public function addTag($tag) { - // if the result of a date search are displayed, reset them - $this->resetDateSearch(); - if(!isset($_SESSION['selected_tags'])) $_SESSION['selected_tags'] = Array(); @@ -550,18 +555,37 @@ class PHPFSPOT { { $matched_photos = Array(); + if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) { + $from_date = strtotime($_SESSION['from_date']); + $to_date = strtotime($_SESSION['to_date']); + $additional_where_cond = " + p.time>='". $from_date ."' + AND + p.time<='". $to_date ."' + "; + } + + if(isset($_SESSION['sort_order'])) { + $order_str = $this->get_sort_order(); + } + /* return a search result */ if(isset($_SESSION['searchfor']) && $_SESSION['searchfor'] != '') { - $result = $this->db->db_query(" + $query_str = " SELECT DISTINCT photo_id FROM photo_tags pt INNER JOIN photos p ON p.id=pt.photo_id INNER JOIN tags t ON pt.tag_id=t.id - WHERE t.name LIKE '%". $_SESSION['searchfor'] ."%' - ORDER BY p.time ASC - "); + WHERE t.name LIKE '%". $_SESSION['searchfor'] ."%'"; + + 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); while($row = $this->db->db_fetch_object($result)) { array_push($matched_photos, $row['photo_id']); } @@ -576,14 +600,17 @@ class PHPFSPOT { $selected = substr($selected, 0, strlen($selected)-1); if($_SESSION['tag_condition'] == 'or') { - $result = $this->db->db_query(" + $query_str = " SELECT DISTINCT photo_id FROM photo_tags pt INNER JOIN photos p ON p.id=pt.photo_id WHERE pt.tag_id IN (". $selected .") - ORDER BY p.time ASC - "); + "; + if(isset($additional_where_cond)) + $query_str.= "AND ". $additional_where_cond ." "; + if(isset($order_str)) + $query_str.= $order_str; } elseif($_SESSION['tag_condition'] == 'and') { @@ -613,49 +640,42 @@ 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.= " AND pt". ($i+1) .".tag_id=". $_SESSION['selected_tags'][$i] ." "; } - $result = $this->db->db_query($query_str); + 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); while($row = $this->db->db_fetch_object($result)) { array_push($matched_photos, $row['photo_id']); } return $matched_photos; } - if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) { - $from_date = strtotime($_SESSION['from_date']); - $to_date = strtotime($_SESSION['to_date']); - $result = $this->db->db_query(" - SELECT DISTINCT photo_id - FROM photo_tags pt - INNER JOIN photos p - ON p.id=pt.photo_id - WHERE - time>='". $from_date ."' - AND - time<='". $to_date ."' - ORDER BY p.time ASC - "); - while($row = $this->db->db_fetch_object($result)) { - array_push($matched_photos, $row['photo_id']); - } - return $matched_photos; - } - /* return all available photos */ - $result = $this->db->db_query(" + $query_str = " SELECT DISTINCT photo_id FROM photo_tags pt INNER JOIN photos p ON p.id=pt.photo_id - ORDER BY p.time ASC - "); + "; + if(isset($additional_where_cond)) + $query_str.= "WHERE ". $additional_where_cond ." "; + 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']); } @@ -785,6 +805,8 @@ class PHPFSPOT { } } + $dotdot_made = 0; + for($i = 1; $i <= $last_page; $i++) { if($current_page == $i) @@ -819,12 +841,16 @@ class PHPFSPOT { $i == $current_page+3 || $i == $current_page+2 || $i == $current_page+1 /* three after */) { $page_select.= $select; + $dotdot_made = 0; continue; } } - $page_select.= "."; + if(!$dotdot_made) { + $page_select.= "......... "; + $dotdot_made = 1; + } } /* only show the page selector if we have more then one page */ @@ -843,8 +869,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); @@ -1166,39 +1194,30 @@ class PHPFSPOT { } // setTagCondition() /** - * invoke tag search + * invoke tag & date search * * this function will return all matching tags and store - * them in the session variable selected_tags. + * them in the session variable selected_tags. furthermore + * it also handles the date search. * getPhotoSelection() will then only return the matching * photos. */ - public function startTagSearch($searchfor) + public function startSearch($searchfor, $from, $to, $sort_order) { $_SESSION['searchfor'] = $searchfor; - $_SESSION['selected_tags'] = Array(); - - foreach($this->avail_tags as $tag) { - if(preg_match('/'. $searchfor .'/i', $this->tags[$tag])) - array_push($_SESSION['selected_tags'], $tag); - } - - $this->resetDateSearch(); - - } // startTagSearch() - - /** - * invoke date search - * - * this function in fact does nothing then only setting - * the from- and to-date in the users session variables. - * the result is generated by getPhotoSelection(). - */ - public function startDateSearch($from, $to) - { $_SESSION['from_date'] = $from; $_SESSION['to_date'] = $to; - } + $_SESSION['sort_order'] = $sort_order; + + if($searchfor != "") { + /* new search, reset the current selected tags */ + $_SESSION['selected_tags'] = Array(); + foreach($this->avail_tags as $tag) { + if(preg_match('/'. $searchfor .'/i', $this->tags[$tag])) + array_push($_SESSION['selected_tags'], $tag); + } + } + } // startSearch() /** * rotate image @@ -1400,9 +1419,15 @@ class PHPFSPOT { $month = $_SESSION[$mode .'_date'] ? date("m", strtotime($_SESSION[$mode .'_date'])) : date("m"); $day = $_SESSION[$mode .'_date'] ? date("d", strtotime($_SESSION[$mode .'_date'])) : date("d"); - $output = "\n"; - $output.= "\n"; - $output.= "\n"; + $output = ""; + foreach(array('date_asc', 'date_desc', 'name_asc', 'name_desc') as $sort_order) { + $output.= "