X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot.class.php;h=4cdf3039541794ee1a4fe9550df2a7c440722321;hp=47ce21109e2e980f56dd160bc51182f86ebd1b0a;hb=2b68f1944dc095b4252a66b3a0dd64b5650d9d7a;hpb=cac16f3332944390250a2a2fcd460bef818a65a5 diff --git a/phpfspot.class.php b/phpfspot.class.php index 47ce211..4cdf303 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -12,7 +12,6 @@ class PHPFSPOT { var $tmpl; var $tags; var $avail_tags; - var $current_tags; public function __construct() { @@ -55,14 +54,36 @@ 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('from_date', $this->get_calendar()); - $this->tmpl->assign('to_date', $this->get_calendar()); + + $_SESSION['start_action'] = $_GET['mode']; switch($_GET['mode']) { case 'showpi': if(isset($_GET['tags'])) { $_SESSION['selected_tags'] = split(',', $_GET['tags']); } + if(isset($_GET['from_date'])) { + $_SESSION['from_date'] = $_GET['from_date']; + } + if(isset($_GET['to_date'])) { + $_SESSION['to_date'] = $_GET['to_date']; + } + break; + case 'showp': + if(isset($_GET['tags'])) { + $_SESSION['selected_tags'] = split(',', $_GET['tags']); + $_SESSION['start_action'] = 'showp'; + } + if(isset($_GET['id'])) { + $_SESSION['current_photo'] = $_GET['id']; + $_SESSION['start_action'] = 'showp'; + } + if(isset($_GET['from_date'])) { + $_SESSION['from_date'] = $_GET['from_date']; + } + if(isset($_GET['to_date'])) { + $_SESSION['to_date'] = $_GET['to_date']; + } break; case 'export': $this->tmpl->show("export.tpl"); @@ -71,6 +92,8 @@ class PHPFSPOT { } + $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'); $this->tmpl->show("index.tpl"); @@ -119,18 +142,14 @@ class PHPFSPOT { } // get_photo_details - public function getPhotoName($idx) + public function getPhotoName($idx, $limit = 0) { if($details = $this->get_photo_details($idx)) { - $name = $details['name']; - - if(strlen($name) > 15) { - $name = substr($name, 0, 10) ."...". substr($name, -10); + if($limit != 0 && strlen($name) > $limit) { + $name = substr($name, 0, $limit-5) ."...". substr($name, -($limit-5)); } - return $name; - } } // getPhotoName() @@ -196,6 +215,17 @@ class PHPFSPOT { $meta_make = isset($meta['Make']) ? $meta['Make'] ." ". $meta['Model'] : "n/a"; $meta_size = isset($meta['FileSize']) ? round($meta['FileSize']/1024, 1) ."kbyte" : "n/a"; + $current_tags = $this->getCurrentTags(); + $extern_link = "index.php?mode=showp&id=". $photo; + if($current_tags != "") { + $extern_link.= "&tags=". $current_tags; + } + if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) { + $extern_link.= "&from_date=". $_SESSION['from_date'] ."&to_date=". $_SESSION['to_date']; + } + + $this->tmpl->assign('extern_link', $extern_link); + if(file_exists($thumb_path)) { $info = getimagesize($thumb_path); @@ -308,6 +338,9 @@ 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(); @@ -328,19 +361,37 @@ class PHPFSPOT { public function resetTags() { - unset($_SESSION['selected_tags']); + if(isset($_SESSION['selected_tags'])) + unset($_SESSION['selected_tags']); } // resetTags() + public function resetPhotoView() + { + if(isset($_SESSION['current_photo'])) + unset($_SESSION['current_photo']); + + } // resetPhotoView(); + public function resetTagSearch() { - unset($_SESSION['searchfor']); + if(isset($_SESSION['searchfor'])) + unset($_SESSION['searchfor']); } // resetTagSearch() + public function resetDateSearch() + { + if(isset($_SESSION['from_date'])) + unset($_SESSION['from_date']); + if(isset($_SESSION['to_date'])) + unset($_SESSION['to_date']); + + } // resetDateSearch(); + public function getPhotoSelection() { - $tagged_photos = Array(); + $matched_photos = Array(); /* return a search result */ if(isset($_SESSION['searchfor']) && $_SESSION['searchfor'] != '') { @@ -355,9 +406,9 @@ class PHPFSPOT { ORDER BY p.time ASC "); while($row = $this->db->db_fetch_object($result)) { - array_push($tagged_photos, $row['photo_id']); + array_push($matched_photos, $row['photo_id']); } - return $tagged_photos; + return $matched_photos; } /* return according the selected tags */ @@ -415,11 +466,31 @@ class PHPFSPOT { } while($row = $this->db->db_fetch_object($result)) { - array_push($tagged_photos, $row['photo_id']); + array_push($matched_photos, $row['photo_id']); } - return $tagged_photos; + 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(" SELECT DISTINCT photo_id @@ -429,9 +500,9 @@ class PHPFSPOT { ORDER BY p.time ASC "); while($row = $this->db->db_fetch_object($result)) { - array_push($tagged_photos, $row['photo_id']); + array_push($matched_photos, $row['photo_id']); } - return $tagged_photos; + return $matched_photos; } // getPhotoSelection() @@ -482,12 +553,14 @@ class PHPFSPOT { $img_width[$rows] = Array(); $img_id[$rows] = Array(); $img_name[$rows] = Array(); + $img_title = Array(); for($i = $begin_with; $i < $end_with; $i++) { $images[$rows][$cols] = $photos[$i]; $img_id[$rows][$cols] = $i; - $img_name[$rows][$cols] = $this->getPhotoName($photos[$i]); + $img_name[$rows][$cols] = htmlspecialchars($this->getPhotoName($photos[$i], 15)); + $img_title[$rows][$cols] = "Click to view photo ". htmlspecialchars($this->getPhotoName($photos[$i], 0)); $thumb_path = $this->cfg->base_path ."/thumbs/". $this->cfg->thumb_width ."_". $this->getMD5($photos[$i]); @@ -587,17 +660,15 @@ class PHPFSPOT { $this->tmpl->assign('page_selector', $page_select); } - $current_tags = ""; - if($_SESSION['selected_tags'] != "") { - foreach($_SESSION['selected_tags'] as $tag) - $current_tags.= $tag .","; - $current_tags = substr($current_tags, 0, strlen($current_tags)-1); - } - + + $current_tags = $this->getCurrentTags(); $extern_link = "index.php?mode=showpi"; if($current_tags != "") { $extern_link.= "&tags=". $current_tags; } + if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) { + $extern_link.= "&from_date=". $_SESSION['from_date'] ."&to_date=". $_SESSION['to_date']; + } $export_link = "index.php?mode=export"; @@ -610,6 +681,7 @@ class PHPFSPOT { $this->tmpl->assign('img_height', $img_height); $this->tmpl->assign('img_id', $img_id); $this->tmpl->assign('img_name', $img_name); + $this->tmpl->assign('img_title', $img_title); $this->tmpl->assign('rows', $rows); $this->tmpl->assign('columns', $this->cfg->thumbs_per_row); @@ -620,43 +692,6 @@ class PHPFSPOT { } // showPhotoIndex() - public function showBubbleDetails($photo, $direction) - { - if($direction == "up") - $direction = "bubbleimg_up"; - else - $direction = "bubbleimg_down"; - - $details = $this->get_photo_details($photo); - $orig_path = $this->translate_path($details['directory_path']) ."/". $details['name']; - - $image_url = "phpfspot_img.php?idx=". $photo ."&width=". $this->cfg->bubble_width; - - $filesize = filesize($orig_path); - $filesize = rand($filesize/1024, 2); - - if(!file_exists($orig_path)) { - $this->_warning("Photo ". $orig_path ." does not exist!
\n"); - return; - } - - if(!is_readable($orig_path)) { - $this->_warning("Photo ". $orig_path ." is not readable for user ". get_current_user() ."
\n"); - return; - } - - $img = getimagesize($orig_path); - - $this->tmpl->assign('file_size', $filesize); - $this->tmpl->assign('width', $img[0]); - $this->tmpl->assign('height', $img[1]); - $this->tmpl->assign('file_name', $details['name']); - $this->tmpl->assign('image_id', $direction); - $this->tmpl->assign('image_url', $image_url); - $this->tmpl->show("bubble_details.tpl"); - - } // showBubbleDetails() - public function showCredits() { $this->tmpl->assign('version', $this->cfg->version); @@ -834,7 +869,6 @@ class PHPFSPOT { $resolutions = Array( $this->cfg->thumb_width, - $this->cfg->bubble_width, $this->cfg->photo_width, $this->cfg->mini_width, ); @@ -931,8 +965,16 @@ class PHPFSPOT { array_push($_SESSION['selected_tags'], $tag); } + $this->resetDateSearch(); + } // startTagSearch() + public function startDateSearch($from, $to) + { + $_SESSION['from_date'] = $from; + $_SESSION['to_date'] = $to; + } + private function rotateImage($img, $degrees) { if(function_exists("imagerotate")) @@ -1105,41 +1147,99 @@ class PHPFSPOT { } // _warning() - private function get_calendar() + private function get_calendar($mode) { -// require_once CALENDAR_ROOT.'Year.php'; -// require_once CALENDAR_ROOT.'Month.php'; -// require_once CALENDAR_ROOT.'Day.php'; + $year = $_SESSION[$mode .'_date'] ? date("Y", strtotime($_SESSION[$mode .'_date'])) : date("Y"); + $month = $_SESSION[$mode .'_date'] ? date("m", strtotime($_SESSION[$mode .'_date'])) : date("m"); + $day = $_SESSION[$mode .'_date'] ? date("d", strtotime($_SESSION[$mode .'_date'])) : date("d"); -// $Year = new Calendar_Year(); -// $Month = new Calendar_Month(); -// $Day = new Calendar_Day(); + $output = "\n"; + $output.= "\n"; + $output.= "\n"; + return $output; - $output = "\n"; + } // get_calendar() - $output.= "\n"; + public function get_calendar_matrix($year = 0, $month = 0, $day = 0) + { + if (!isset($year)) $year = date('Y'); + if (!isset($month)) $month = date('m'); + if (!isset($day)) $day = date('d'); + $rows = 1; + $cols = 1; + $matrix = Array(); + + require_once CALENDAR_ROOT.'Month/Weekdays.php'; + require_once CALENDAR_ROOT.'Day.php'; + + + // Build the month + $month = new Calendar_Month_Weekdays($year,$month); + + // Create links + $prevStamp = $month->prevMonth(true); + $prev = "javascript:setMonth(". date('Y',$prevStamp) .", ". date('n',$prevStamp) .", ". date('j',$prevStamp) .");"; + $nextStamp = $month->nextMonth(true); + $next = "javascript:setMonth(". date('Y',$nextStamp) .", ". date('n',$nextStamp) .", ". date('j',$nextStamp) .");"; + + $selectedDays = array ( + new Calendar_Day($year,$month,$day), + new Calendar_Day($year,12,25), + ); + + // Build the days in the month + $month->build($selectedDays); + + $this->tmpl->assign('current_month', date('F Y',$month->getTimeStamp())); + $this->tmpl->assign('prev_month', $prev); + $this->tmpl->assign('next_month', $next); + + while ( $day = $month->fetch() ) { + + if(!isset($matrix[$rows])) + $matrix[$rows] = Array(); + + $string = ""; + + $dayStamp = $day->thisDay(true); + $link = "javascript:setCalendarDate(". date('Y',$dayStamp) .", ". date('n',$dayStamp).", ". date('j',$dayStamp) .");"; + + // isFirst() to find start of week + if ( $day->isFirst() ) + $string.= "\n"; + + if ( $day->isSelected() ) { + $string.= "".$day->thisDay()."\n"; + } else if ( $day->isEmpty() ) { + $string.= " \n"; + } else { + $string.= "".$day->thisDay()."\n"; + } + + // isLast() to find end of week + if ( $day->isLast() ) + $string.= "\n"; + + $matrix[$rows][$cols] = $string; - $output.= "\n"; - return $output; + $this->tmpl->assign('matrix', $matrix); + $this->tmpl->assign('rows', $rows); + $this->tmpl->show("calendar.tpl"); - } // get_calendar() + } // get_calendar_matrix() public function getExport($mode) { $pictures = $this->getPhotoSelection(); + $current_tags = $this->getCurrentTags(); if(!isset($_SERVER['HTTPS'])) $protocol = "http"; else $protocol = "https"; @@ -1148,7 +1248,14 @@ class PHPFSPOT { foreach($pictures as $picture) { - $orig_url = $protocol ."://". $server_name . $this->cfg->web_path ."phpfspot_img.php?idx=". $picture ."&width=". $this->cfg->photo_width; + $orig_url = $protocol ."://". $server_name . $this->cfg->web_path ."index.php?mode=showp&id=". $picture; + if($current_tags != "") { + $orig_url.= "&tags=". $current_tags; + } + if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) { + $orig_url.= "&from_date=". $_SESSION['from_date'] ."&to_date=". $_SESSION['to_date']; + } + $thumb_url = $protocol ."://". $server_name . $this->cfg->web_path ."phpfspot_img.php?idx=". $picture ."&width=". $this->cfg->thumb_width; switch($mode) { @@ -1160,7 +1267,7 @@ class PHPFSPOT { case 'MoinMoin': // [%pictureurl% %thumbnailurl%] - print htmlspecialchars("[$orig_url $thumb_url]") ."
\n"; + print htmlspecialchars(" * [".$orig_url." ".$thumb_url."&fake=1.jpg]") ."
\n"; break; } @@ -1168,6 +1275,44 @@ class PHPFSPOT { } // getExport() + private function getCurrentTags() + { + $current_tags = ""; + if($_SESSION['selected_tags'] != "") { + foreach($_SESSION['selected_tags'] as $tag) + $current_tags.= $tag .","; + $current_tags = substr($current_tags, 0, strlen($current_tags)-1); + } + return $current_tags; + + } // getCurrentTags() + + public function getCurrentPhoto() + { + if(isset($_SESSION['current_photo'])) { + print $_SESSION['current_photo']; + } + } // getCurrentPhoto() + + 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'])) { + return "show_photo"; + } + elseif(isset($_SESSION['start_action']) && $_SESSION['start_action'] == 'showpi') { + return "showpi"; + } + + return "nothing special"; + + } // whatToDo() + } ?>