X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot.class.php;h=25d144c2dcbe255b0cd7270b1090b13946d1c8a2;hp=0113fe6c7848bd4818b285a55279a109934108fe;hb=005562e4a4fb2b37fc6f1d4a8ca4a9c11ab42ed1;hpb=87148067c543f8d0af056fdef437f18d72e50c9d;ds=sidebyside
diff --git a/phpfspot.class.php b/phpfspot.class.php
index 0113fe6..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']);
}
@@ -849,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);
@@ -1172,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
@@ -1406,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 = "\n";
+ $output.= "\n";
+ $output.= "\n";
return $output;
} // get_calendar()
@@ -1569,15 +1588,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 +1618,68 @@ 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()
+
+ 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()
+
+ public function resetSlideShow()
+ {
+ if(isset($_SESSION['slideshow_img']))
+ unset($_SESSION['slideshow_img']);
+ } // resetSlideShow()
}
?>