X-Git-Url: https://git.nubati.net/cgi-bin/gitweb.cgi?p=phpfspot.git;a=blobdiff_plain;f=phpfspot.class.php;h=d7a76c3a50d9cfd80830dda1553a87f6007d9b52;hp=49d0c7df071da319c16c829bbc9d5be55a101d2e;hb=5d95b196f7993398d68ad67179eb2d2b2ce1b0f1;hpb=b5ff85f75a27397c1ab4164fdefa9d734dc0e39d diff --git a/phpfspot.class.php b/phpfspot.class.php index 49d0c7d..d7a76c3 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -122,7 +122,7 @@ class PHPFSPOT { /* set application name and version information */ $this->cfg->product = "phpfspot"; - $this->cfg->version = "1.5"; + $this->cfg->version = "1.6"; $this->sort_orders= array( 'date_asc' => 'Date ↑', @@ -142,7 +142,9 @@ class PHPFSPOT { /* Check if database file is writeable */ if(!is_writeable($this->cfg->fspot_db)) { - print $this->cfg->fspot_db ." is not writeable for user ". $this->getuid() ."\n"; + print "Error: ". $this->cfg->fspot_db ." is not writeable for user ". $this->getuid() .".\n"; + print "Please fix permissions so phpfspot can create indices within the F-Spot database to" + ." speed up some database operations.\n"; exit(1); } @@ -157,6 +159,7 @@ class PHPFSPOT { "); } + /* get F-Spot database version */ $this->dbver = $this->getFspotDBVersion(); if(!is_writeable($this->cfg->base_path ."/templates_c")) { @@ -173,13 +176,15 @@ class PHPFSPOT { /* Check if directory where the database file is stored is writeable */ if(!is_writeable(dirname($this->cfg->phpfspot_db))) { - print dirname($this->cfg->phpfspot_db) .": directory is not writeable for user ". $this->getuid() ."\n"; + print "Error: ". dirname($this->cfg->phpfspot_db) .": directory is not writeable for user ". $this->getuid() .".\n"; + print "Please fix permissions so phpfspot can create its own sqlite database to store some settings.\n"; exit(1); } /* Check if database file is writeable */ if(!is_writeable($this->cfg->phpfspot_db)) { - print $this->cfg->phpfspot_db ." is not writeable for user ". $this->getuid() ."\n"; + print "Error: ". $this->cfg->phpfspot_db ." is not writeable for user ". $this->getuid() .".\n"; + print "Please fix permissions so phpfspot can create its own sqlite database to store some settings.\n"; exit(1); } @@ -203,6 +208,15 @@ class PHPFSPOT { $this->tmpl->assign('web_path', $this->cfg->web_path); + /* Starting with F-Spot 0.4.2, the rating-feature was available */ + if($this->dbver > 10) { + $this->tmpl->assign('has_rating', true); + $this->sort_orders = array_merge($this->sort_orders, array( + 'rate_asc' => 'Rate ↑', + 'rate_desc' => 'Rate ↓', + )); + } + /* check if all necessary indices exist */ $this->checkDbIndices(); @@ -213,8 +227,9 @@ class PHPFSPOT { if(!isset($_SESSION['tag_condition'])) $_SESSION['tag_condition'] = 'or'; + /* if sort-order has not been set yet, get the one specified in the config */ if(!isset($_SESSION['sort_order'])) - $_SESSION['sort_order'] = 'date_desc'; + $_SESSION['sort_order'] = $this->cfg->sort_order; if(!isset($_SESSION['searchfor_tag'])) $_SESSION['searchfor_tag'] = ''; @@ -223,6 +238,11 @@ class PHPFSPOT { if(isset($_SESSION['begin_with']) && $this->cfg->thumbs_per_page == 0) unset($_SESSION['begin_with']); + // if user-friendly-url's are enabled, set also a flag for the template handler + if($this->is_user_friendly_url()) { + $this->tmpl->assign('user_friendly_url', 'true'); + } + } // __construct() public function __destruct() @@ -284,11 +304,15 @@ class PHPFSPOT { } break; case 'export': - $this->tmpl->show("export.tpl"); + /* fetch export template */ + print $this->tmpl->fetch("export.tpl"); + /* no further execution necessary. */ return; break; case 'slideshow': - $this->tmpl->show("slideshow.tpl"); + /* fetch slideshow template */ + print $this->tmpl->show("slideshow.tpl"); + /* no further execution necessary. */ return; break; case 'rss': @@ -307,21 +331,43 @@ class PHPFSPOT { } } + /* if date-search variables are registered in the session, set the check + for "consider date-range" in the html output + */ if(isset($_SESSION['from_date']) && isset($_SESSION['to_date'])) $this->tmpl->assign('date_search_enabled', true); + /* if rate-search variables are registered in the session, set the check + for "consider rate-range" in the html output + */ + if(isset($_SESSION['rate_from']) && isset($_SESSION['rate_to'])) { + $this->tmpl->assign('rate_search_enabled', true); + } + $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('search_from_date', $this->get_date_text_field('from')); + $this->tmpl->assign('search_to_date', $this->get_date_text_field('to')); $this->tmpl->assign('preset_selected_tags', $this->getSelectedTags()); $this->tmpl->assign('preset_available_tags', $this->getAvailableTags()); + $this->tmpl->assign('rate_search', $this->get_rate_search()); + /* if no site-content has been set yet... */ if(!isset($content)) { - if(isset($_SESSION['selected_tags']) && !empty($_SESSION['selected_tags'])) + /* if tags are already selected, we can immediately display photo-index */ + if((isset($_SESSION['selected_tags']) && !empty($_SESSION['selected_tags']) && + isset($_SESSION['start_action']) && $_SESSION['start_action'] != 'showp') || + (isset($_SESSION['start_action']) && $_SESSION['start_action'] == 'showpi')) $this->tmpl->assign('initial_content', $this->showPhotoIndex()); - else - $this->tmpl->assign('initial_content', $this->tmpl->fetch('welcome.tpl')); + else { + /* if a photo is already selected, we can immediately display single-photo */ + if(isset($_SESSION['current_photo']) && !empty($_SESSION['current_photo'])) + $this->tmpl->assign('initial_content', $this->showPhoto($_SESSION['current_photo'])); + else { + /* ok, then let us show the welcome page... */ + $this->tmpl->assign('initial_content', $this->tmpl->fetch('welcome.tpl')); + } + } } else $this->tmpl->assign('initial_content', $content); @@ -346,6 +392,11 @@ class PHPFSPOT { $this->avail_tags = Array(); $count = 0; + /* if show_tags has been set in the configuration (only show photos + which are tagged by these tags) they following will take care, + that only these other tags are displayed where the photo is also + tagged with one of show_tags. + */ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { $query_str=" SELECT @@ -413,6 +464,7 @@ class PHPFSPOT { */ public function get_photo_details($idx) { + /* ~ F-Spot version 0.3.x */ if($this->dbver < 9) { $query_str = " SELECT p.id, p.name, p.time, p.directory_path, p.description @@ -420,14 +472,23 @@ class PHPFSPOT { "; } else { - $query_str = " - SELECT p.id, p.uri, p.time, p.description - FROM photos p - "; + /* till F-Spot version 0.4.1 */ + if($this->dbver < 11) { + $query_str = " + SELECT p.id, p.uri, p.time, p.description + FROM photos p + "; + } + else { + $query_str = " + SELECT p.id, p.uri, p.time, p.description, p.rating + FROM photos p + "; + } } - /* if show_tags is set, only return details for photos which - are specified to be shown + /* if show_tags is set, only return details of photos which are + tagged with a tag that has been specified to be shown. */ if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { $query_str.= " @@ -448,6 +509,9 @@ class PHPFSPOT { $row = $this->db->db_fetch_object($result); + /* before F-Spot db version 9 there was no uri column but seperated + columns for directory_path and name (= filename). + */ if($this->dbver < 9) { $row['uri'] = "file://". $row['directory_path'] ."/". $row['name']; } @@ -463,9 +527,10 @@ class PHPFSPOT { /** * returns aligned photo names * - * this function returns aligned (length) names for - * an specific photo. If the length of the name exceeds - * $limit the name will be shrinked (...) + * this function returns aligned (length) names for a specific photo. + * If the length of the name exceeds $limit the name will bei + * shrinked (...). + * * @param integer $idx * @param integer $limit * @return string|null @@ -483,12 +548,81 @@ class PHPFSPOT { } // getPhotoName() + /** + * get photo rating level + * + * this function will return the integer-based rating level of a + * photo. This can only be done, if the F-Spot database is at a + * specific version. If rating value can not be found, zero will + * be returned indicating no rating value is available. + * + * @param integer idx + * @return integer + */ + public function get_photo_rating($idx) + { + if($detail = $this->get_photo_details($idx)) { + if(isset($detail['rating'])) + return $detail['rating']; + } + + return 0; + + } // get_photo_rating() + + /** + * get rate-search bars + * + * this function will return the rating-bars for the search field. + * + * @return string + */ + public function get_rate_search() + { + $bar = ""; + + for($i = 1; $i <= 5; $i++) { + + $bar.= "cfg->web_path ."/resources/star.png"; + else + $bar.= $this->cfg->web_path ."/resources/empty_rate.png"; + + $bar.= "\" + onmouseover=\"show_rate('from', ". $i .");\" + onmouseout=\"reset_rate('from');\" + onclick=\"set_rate('from', ". $i .")\" />"; + } + + $bar.= "
\n"; + + for($i = 1; $i <= 5; $i++) { + + $bar.= "cfg->web_path ."/resources/star.png"; + else + $bar.= $this->cfg->web_path ."/resources/empty_rate.png"; + + $bar.= "\" + onmouseover=\"show_rate('to', ". $i .");\" + onmouseout=\"reset_rate('to');\" + onclick=\"set_rate('to', ". $i .");\" />"; + } + + return $bar; + + } // get_rate_search() + /** * shrink text according provided limit * - * If the length of the name exceeds $limit the - * text will be shortend and some content in between - * will be replaced with "..." + * If the length of the name exceeds $limit, text will be shortend + * and inner content will be replaced with "...". + * * @param string $ext * @param integer $limit * @return string @@ -585,7 +719,7 @@ class PHPFSPOT { $info = getimagesize($orig_path); /* get EXIF information if JPEG */ - if($info['mime'] == "image/jpeg") { + if(isset($info['mime']) && $info['mime'] == "image/jpeg") { $meta = $this->get_meta_informations($orig_path); } @@ -596,7 +730,6 @@ class PHPFSPOT { $meta_res = $info[0] ."x". $info[1]; } - $meta_date = isset($meta['FileDateTime']) ? strftime("%a %x %X", $meta['FileDateTime']) : "n/a"; $meta_make = isset($meta['Make']) ? $meta['Make'] ." / ". $meta['Model'] : "n/a"; $meta_size = isset($meta['FileSize']) ? round($meta['FileSize']/1024, 1) ."kbyte" : "n/a"; @@ -620,10 +753,11 @@ class PHPFSPOT { $this->tmpl->assign('description', $details['description']); $this->tmpl->assign('image_name', $this->parse_uri($details['uri'], 'filename')); + $this->tmpl->assign('image_rating', $this->get_photo_rating($photo)); $this->tmpl->assign('width', $info_thumb[0]); $this->tmpl->assign('height', $info_thumb[1]); - $this->tmpl->assign('ExifMadeOn', $meta_date); + $this->tmpl->assign('ExifMadeOn', strftime("%a %x %X", $details['time'])); $this->tmpl->assign('ExifMadeWith', $meta_make); $this->tmpl->assign('ExifOrigResolution', $meta_res); $this->tmpl->assign('ExifFileSize', $meta_size); @@ -643,15 +777,16 @@ class PHPFSPOT { $this->tmpl->assign('current_page', $this->getCurrentPage($current, $count)); $this->tmpl->assign('current_img', $photo); - if($previous_img) { - $this->tmpl->assign('previous_url', "javascript:showImage(". $previous_img .");"); + if(isset($previous_img)) { + $this->tmpl->assign('previous_url', "javascript:showPhoto(". $previous_img .");"); $this->tmpl->assign('prev_img', $previous_img); } - if($next_img) { - $this->tmpl->assign('next_url', "javascript:showImage(". $next_img .");"); + if(isset($next_img)) { + $this->tmpl->assign('next_url', "javascript:showPhoto(". $next_img .");"); $this->tmpl->assign('next_img', $next_img); } + $this->tmpl->assign('mini_width', $this->cfg->mini_width); $this->tmpl->assign('photo_width', $this->cfg->photo_width); $this->tmpl->assign('photo_number', $i); @@ -716,6 +851,9 @@ class PHPFSPOT { // loop through our tag array foreach ($tags as $key => $value) { + /* has the currently processed tag already been added to + the selected tag list? if so, ignore it here... + */ if(isset($_SESSION['selected_tags']) && in_array($key, $_SESSION['selected_tags'])) continue; @@ -724,7 +862,7 @@ class PHPFSPOT { // multiply by the font-size increment ($size) // and add the $min_size set above $size = $min_size + (($value - $min_qty) * $step); - // uncomment if you want sizes in whole %: + // uncomment if you want sizes in whole %: $size = ceil($size); $color = $min_sat + ($value - $min_qty) * $step_sat; @@ -734,10 +872,20 @@ class PHPFSPOT { $b = '88'; if(isset($this->tags[$key])) { - if($this->is_user_friendly_url()) - $output.= "cfg->web_path ."/tag/". $key ."\" onclick=\"Tags('add', ". $key ."); return false;\" class=\"tag\" style=\"font-size: ". $size ."%; color: #". $r.$g.$b .";\">". $this->tags[$key] .", "; - else - $output.= "cfg->web_path ."/index.php?mode=showpi\" onclick=\"Tags('add', ". $key ."); return false;\" class=\"tag\" style=\"font-size: ". $size ."%; color: #". $r.$g.$b .";\">". $this->tags[$key] .", "; + if($this->is_user_friendly_url()) { + $output.= "cfg->web_path ."/tag/". $key ."\" + onclick=\"Tags('add', ". $key ."); return false;\" + class=\"tag\" + style=\"font-size: ". $size ."%; color: #". $r.$g.$b .";\" + title=\"Tag ". $this->tags[$key] .", ". $tags[$key] ." picture(s)\">". $this->tags[$key] .", "; + } + else { + $output.= "cfg->web_path ."/index.php?mode=showpi\" + onclick=\"Tags('add', ". $key ."); return false;\" + class=\"tag\" + style=\"font-size: ". $size ."%; color: #". $r.$g.$b .";\" + title=\"Tag ". $this->tags[$key] .", ". $tags[$key] ." picture(s)\">". $this->tags[$key] .", "; + } } } @@ -773,17 +921,10 @@ class PHPFSPOT { break; case 'img': $output.= " -
-
- tags[$tag] ."\"> - - -
-
- tags[$tag] ."\"> - - -
+
+ tags[$tag] ."\"> + cfg->web_path ."/phpfspot_img.php?tagidx=". $tag ."\" /> +
"; break; @@ -867,7 +1008,7 @@ class PHPFSPOT { } // resetTags() /** - * returns the value for the autocomplet tag-search + * returns the value for the autocomplete tag-search * @return string */ public function get_xml_tag_list() @@ -958,8 +1099,7 @@ class PHPFSPOT { /** * reset date search * - * if any date search has taken place, reset - * it now + * if any date search has taken place, reset it now. */ public function resetDateSearch() { @@ -970,6 +1110,20 @@ class PHPFSPOT { } // resetDateSearch(); + /** + * reset rate search + * + * if any rate search has taken place, reset it now. + */ + public function resetRateSearch() + { + if(isset($_SESSION['rate_from'])) + unset($_SESSION['rate_from']); + if(isset($_SESSION['rate_to'])) + unset($_SESSION['rate_to']); + + } // resetRateSearch(); + /** * return all photo according selection * @@ -995,6 +1149,12 @@ class PHPFSPOT { } if(isset($_SESSION['searchfor_name'])) { + + /* check for previous conditions. if so add 'AND' */ + if(!empty($additional_where_cond)) { + $additional_where_cond.= " AND "; + } + if($this->dbver < 9) { $additional_where_cond.= " ( @@ -1015,6 +1175,24 @@ class PHPFSPOT { } } + /* limit result based on rate-search */ + if(isset($_SESSION['rate_from']) && isset($_SESSION['rate_to'])) { + + if($this->dbver > 10) { + + /* check for previous conditions. if so add 'AND' */ + if(!empty($additional_where_cond)) { + $additional_where_cond.= " AND "; + } + + $additional_where_cond.= " + p.rating >= ". $_SESSION['rate_from'] ." + AND + p.rating <= ". $_SESSION['rate_to'] ." + "; + } + } + if(isset($_SESSION['sort_order'])) { $order_str = $this->get_sort_order(); } @@ -1034,7 +1212,7 @@ class PHPFSPOT { ON pt2.tag_id=t2.id WHERE t.name LIKE '%". $_SESSION['searchfor_tag'] ."%' "; - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "AND ". $additional_where_cond ." "; if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { @@ -1071,7 +1249,7 @@ class PHPFSPOT { ON pt1.photo_id=p.id WHERE pt1.tag_id IN (". $selected .") "; - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "AND ". $additional_where_cond ." "; if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { @@ -1127,7 +1305,7 @@ class PHPFSPOT { AND pt". ($i+2) .".tag_id=". $_SESSION['selected_tags'][$i] ." "; } - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "AND ". $additional_where_cond; if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { @@ -1156,11 +1334,11 @@ class PHPFSPOT { ON pt.tag_id=t.id "; - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "WHERE ". $additional_where_cond ." "; if(isset($this->cfg->show_tags) && !empty($this->cfg->show_tags)) { - if(isset($additional_where_cond) && !empty($additional_where_cond)) + if(!empty($additional_where_cond)) $query_str.= "AND t.name IN ('".implode("','",$this->cfg->show_tags). "')"; else $query_str.= "WHERE t.name IN ('".implode("','",$this->cfg->show_tags). "')"; @@ -1187,6 +1365,7 @@ class PHPFSPOT { public function showPhotoIndex() { $photos = $this->getPhotoSelection(); + $current_tags = $this->getCurrentTags(); $count = count($photos); @@ -1216,6 +1395,7 @@ class PHPFSPOT { $img_name[$thumbs] = Array(); $img_fullname[$thumbs] = Array(); $img_title = Array(); + $img_rating = Array(); for($i = $begin_with; $i < $end_with; $i++) { @@ -1226,6 +1406,7 @@ class PHPFSPOT { $img_name[$thumbs] = htmlspecialchars($this->getPhotoName($photos[$i], 15)); $img_fullname[$thumbs] = htmlspecialchars($this->getPhotoName($photos[$i], 0)); $img_title[$thumbs] = "Click to view photo ". htmlspecialchars($this->getPhotoName($photos[$i], 0)); + $img_rating[$thumbs] = $this->get_photo_rating($photos[$i]); $thumb_path = $this->get_thumb_path($this->cfg->thumb_width, $photos[$i]); @@ -1294,7 +1475,16 @@ class PHPFSPOT { else $style = ""; - $select = "is_user_friendly_url()) { + $select = "cfg->web_path ."/tag/205/". $start_with ."\""; + } + else { + $select = "cfg->web_path ."/index.php?mode=showpi tags=". $current_tags ." begin_with=". $begin_with ."\""; + } + $select.= " onclick=\"showPhotoIndex(". $start_with ."); return false;\""; + if($style != "") $select.= $style; $select.= ">". $i ." "; @@ -1332,9 +1522,7 @@ class PHPFSPOT { if($last_page > 1) $this->tmpl->assign('page_selector', $page_select); } - - $current_tags = $this->getCurrentTags(); $extern_link = "index.php?mode=showpi"; $rss_link = "index.php?mode=rss"; if($current_tags != "") { @@ -1365,6 +1553,7 @@ class PHPFSPOT { $this->tmpl->assign('img_name', $img_name); $this->tmpl->assign('img_fullname', $img_fullname); $this->tmpl->assign('img_title', $img_title); + $this->tmpl->assign('img_rating', $img_rating); $this->tmpl->assign('thumbs', $thumbs); $this->tmpl->assign('selected_tags', $this->getSelectedTags('img')); @@ -1429,23 +1618,25 @@ class PHPFSPOT { $flip_hori = false; $flip_vert = false; - switch($meta['Orientation']) { - case 1: /* top, left */ - /* nothing to do */ break; - case 2: /* top, right */ - $rotate = 0; $flip_hori = true; break; - case 3: /* bottom, left */ - $rotate = 180; break; - case 4: /* bottom, right */ - $flip_vert = true; break; - case 5: /* left side, top */ - $rotate = 90; $flip_vert = true; break; - case 6: /* right side, top */ - $rotate = 90; break; - case 7: /* left side, bottom */ - $rotate = 270; $flip_vert = true; break; - case 8: /* right side, bottom */ - $rotate = 270; break; + if(isset($meta['Orientation'])) { + switch($meta['Orientation']) { + case 1: /* top, left */ + /* nothing to do */ break; + case 2: /* top, right */ + $rotate = 0; $flip_hori = true; break; + case 3: /* bottom, left */ + $rotate = 180; break; + case 4: /* bottom, right */ + $flip_vert = true; break; + case 5: /* left side, top */ + $rotate = 90; $flip_vert = true; break; + case 6: /* right side, top */ + $rotate = 90; break; + case 7: /* left side, bottom */ + $rotate = 270; $flip_vert = true; break; + case 8: /* right side, bottom */ + $rotate = 270; break; + } } $src_img = @imagecreatefromjpeg($orig_image); @@ -1840,32 +2031,54 @@ class PHPFSPOT { */ public function startSearch() { - if(isset($_POST['from']) && $this->isValidDate($_POST['from'])) { - $from = $_POST['from']; + /* date search */ + if(isset($_POST['date_from']) && $this->isValidDate($_POST['date_from'])) { + $date_from = $_POST['date_from']; } - if(isset($_POST['to']) && $this->isValidDate($_POST['to'])) { - $to = $_POST['to']; + if(isset($_POST['date_to']) && $this->isValidDate($_POST['date_to'])) { + $date_to = $_POST['date_to']; } + /* tag-name search */ if(isset($_POST['for_tag']) && is_string($_POST['for_tag'])) { $searchfor_tag = $_POST['for_tag']; $_SESSION['searchfor_tag'] = $_POST['for_tag']; } + else { + unset($_SESSION['searchfor_tag']); + } + /* file-name search */ if(isset($_POST['for_name']) && is_string($_POST['for_name'])) { - $searchfor_name = $_POST['for_name']; $_SESSION['searchfor_name'] = $_POST['for_name']; } + else { + unset($_SESSION['searchfor_name']); + } + + /* rate-search */ + if(isset($_POST['rate_from']) && is_numeric($_POST['rate_from'])) { + + $_SESSION['rate_from'] = $_POST['rate_from']; + + if(isset($_POST['rate_to']) && is_numeric($_POST['rate_to'])) { + $_SESSION['rate_to'] = $_POST['rate_to']; + } + } + else { + /* delete any previously set value */ + unset($_SESSION['rate_to'], $_SESSION['rate_from']); + } $this->get_tags(); - if(isset($from) && !empty($from)) - $_SESSION['from_date'] = strtotime($from ." 00:00:00"); + if(isset($date_from) && !empty($date_from)) + $_SESSION['from_date'] = strtotime($date_from ." 00:00:00"); else unset($_SESSION['from_date']); - if(isset($to) && !empty($to)) - $_SESSION['to_date'] = strtotime($to ." 23:59:59"); + if(isset($date_to) && !empty($date_to)) + $_SESSION['to_date'] = strtotime($date_to ." 23:59:59"); else unset($_SESSION['to_date']); @@ -2123,7 +2336,7 @@ class PHPFSPOT { private function _debug($text) { - if($this->fromcmd) { + if(isset($this->fromcmd)) { print $text; } @@ -2175,32 +2388,31 @@ class PHPFSPOT { } // _error() /** - * output calendard input fields + * get calendar input-text fields + * + * this function returns a text-field used for the data selection. + * Either it will be filled with the current date or, if available, + * filled with the date user entered previously. + * * @param string $mode * @return string */ - private function get_calendar($mode) + private function get_date_text_field($mode) { - $year = isset($_SESSION[$mode .'_date']) ? date("Y", $_SESSION[$mode .'_date']) : date("Y"); - $month = isset($_SESSION[$mode .'_date']) ? date("m", $_SESSION[$mode .'_date']) : date("m"); - $day = isset($_SESSION[$mode .'_date']) ? date("d", $_SESSION[$mode .'_date']) : date("d"); + $date = isset($_SESSION[$mode .'_date']) ? date("Y", $_SESSION[$mode .'_date']) : date("Y"); + $date.= "-"; + $date.= isset($_SESSION[$mode .'_date']) ? date("m", $_SESSION[$mode .'_date']) : date("m"); + $date.= "-"; + $date.= isset($_SESSION[$mode .'_date']) ? date("d", $_SESSION[$mode .'_date']) : date("d"); - $output = "translate_path($this->parse_uri($details['uri'], 'fullpath')); /* get EXIF information if JPEG */ - if($details['mime'] == "image/jpeg") { + if(isset($details['mime']) && $details['mime'] == "image/jpeg") { $meta = $this->get_meta_informations($orig_path); } - $meta_date = isset($meta['FileDateTime']) ? $meta['FileDateTime'] : filemtime($orig_path); - ?> <?php print htmlspecialchars($this->parse_uri($details['uri'], 'filename')); ?> - + - + session_cleanup(); + //unset($_SESSION['start_action']); + //unset($_SESSION['selected_tags']); $_GET['mode'] = 'showp'; return $this->showPhoto($options[2]); } @@ -3129,8 +3350,11 @@ class PHPFSPOT { break; case 'tag': if(is_numeric($options[2])) { + $this->session_cleanup(); $_GET['tags'] = $options[2]; $_SESSION['selected_tags'] = Array($options[2]); + if(isset($options[3]) && is_numeric($options[3])) + $_SESSION['begin_with'] = $options[3]; return $this->showPhotoIndex(); } break; @@ -3155,6 +3379,22 @@ class PHPFSPOT { } // is_user_friendly_url() + /** + * session cleanup + * + * this function will cleanup user's session information + */ + private function session_cleanup() + { + unset($_SESSION['begin_with']); + $this->resetDateSearch(); + $this->resetPhotoView(); + $this->resetTagSearch(); + $this->resetNameSearch(); + $this->resetDateSearch(); + $this->resetTags(); + + } // session_cleanup() } // class PHPFSPOT