From aaa8698f7538163830b0cb89eb1881860ee0c71c Mon Sep 17 00:00:00 2001 From: Andreas Unterkircher Date: Sun, 8 Jun 2008 07:36:22 +0200 Subject: on-mouse-over of a tag in the available-tag-list, display amount of photos matching this tag Signed-off-by: Andreas Unterkircher --- phpfspot.class.php | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/phpfspot.class.php b/phpfspot.class.php index 4bc3266..cb1b09c 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -841,6 +841,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; @@ -849,7 +852,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; @@ -859,10 +862,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] .", "; + } } } -- cgit v1.2.3-18-g5258 From a3917de4fd1ce28e319f8642050e6283ead2bc4e Mon Sep 17 00:00:00 2001 From: Andreas Unterkircher Date: Sun, 8 Jun 2008 08:59:50 +0200 Subject: update some source-code comments Signed-off-by: Andreas Unterkircher --- phpfspot.class.php | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/phpfspot.class.php b/phpfspot.class.php index cb1b09c..ee521c6 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -392,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 @@ -459,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 @@ -481,8 +487,8 @@ class PHPFSPOT { } } - /* 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.= " @@ -503,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']; } @@ -518,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 @@ -541,11 +551,11 @@ class PHPFSPOT { /** * get photo rating level * - * this function will return the integer-based rating - * level of the photo. This can only be done, if the F-Spot - * database is at a specific level. If rating value can not - * be found, zero will be returned indicating no rating value - * is available. + * 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 */ @@ -563,8 +573,8 @@ class PHPFSPOT { /** * get rate-search bars * - * this function will return the rating-bars for the - * search field. + * this function will return the rating-bars for the search field. + * * @return string */ public function get_rate_search() @@ -610,9 +620,9 @@ class PHPFSPOT { /** * 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 -- cgit v1.2.3-18-g5258 From 5d95b196f7993398d68ad67179eb2d2b2ce1b0f1 Mon Sep 17 00:00:00 2001 From: Andreas Unterkircher Date: Sun, 8 Jun 2008 09:35:47 +0200 Subject: issue124, also if rate-sort is set to DESC, 2nd-sort by photo-name should be ASC Signed-off-by: Andreas Unterkircher --- phpfspot.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpfspot.class.php b/phpfspot.class.php index ee521c6..d7a76c3 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -2749,7 +2749,7 @@ class PHPFSPOT { return " ORDER BY p.rating ASC, t.name ASC"; break; case 'rate_desc': - return " ORDER BY p.rating DESC, t.name DESC"; + return " ORDER BY p.rating DESC, t.name ASC"; break; } -- cgit v1.2.3-18-g5258 From 936c19d107653fdc77943782e54aafe07c6585b5 Mon Sep 17 00:00:00 2001 From: Andreas Unterkircher Date: Wed, 2 Jul 2008 20:42:37 +0200 Subject: update docs and UPGRADE file to 1.6 Signed-off-by: Andreas Unterkircher --- UPGRADE | 4 ++ docs/classtrees_phpfspot.html | 2 +- docs/index.html | 2 +- docs/packages.html | 6 +- docs/phpfspot/PHPFSPOT.html | 112 ++++++++++++++++----------------- docs/phpfspot/PHPFSPOT_DB.html | 2 +- docs/phpfspot/PHPFSPOT_IMG.html | 2 +- docs/phpfspot/PHPFSPOT_RPC.html | 2 +- docs/phpfspot/PHPFSPOT_TMPL.html | 2 +- docs/phpfspot/_find_dups.php.html | 2 +- docs/phpfspot/_gen_thumbs.php.html | 2 +- docs/phpfspot/_index.php.html | 2 +- docs/phpfspot/_phpfspot.class.php.html | 2 +- docs/phpfspot/_phpfspot_db.php.html | 2 +- docs/phpfspot/_phpfspot_img.php.html | 2 +- docs/phpfspot/_phpfspot_tmpl.php.html | 2 +- docs/phpfspot/_rpc.php.html | 2 +- docs/ric_CHANGELOG.html | 14 ++++- docs/ric_INSTALL.html | 2 +- docs/ric_README.html | 4 +- 20 files changed, 93 insertions(+), 77 deletions(-) diff --git a/UPGRADE b/UPGRADE index 348d989..262bd74 100644 --- a/UPGRADE +++ b/UPGRADE @@ -1,3 +1,7 @@ +== Upgrading from 1.5 + + * nothing special necessary. + == Upgrading from 1.4 == * nothing special necessary. diff --git a/docs/classtrees_phpfspot.html b/docs/classtrees_phpfspot.html index ad93824..5d38c25 100644 --- a/docs/classtrees_phpfspot.html +++ b/docs/classtrees_phpfspot.html @@ -34,7 +34,7 @@
  • PHPFSPOT_TMPL
  • - Documentation generated on Sun, 25 May 2008 10:46:10 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:46 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 2359ca4..facfebb 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> - + phpfspot source-code documentation diff --git a/docs/packages.html b/docs/packages.html index 7c64b56..01ced09 100644 --- a/docs/packages.html +++ b/docs/packages.html @@ -17,11 +17,11 @@ - INSTALL + CHANGELOG - | README + | INSTALL - | CHANGELOG + | README   diff --git a/docs/phpfspot/PHPFSPOT.html b/docs/phpfspot/PHPFSPOT.html index 6b31c6b..de4a0f2 100644 --- a/docs/phpfspot/PHPFSPOT.html +++ b/docs/phpfspot/PHPFSPOT.html @@ -622,7 +622,7 @@
    - Destructor __destruct (line 243) + Destructor __destruct (line 248)
    @@ -646,7 +646,7 @@
    - addTag (line 925) + addTag (line 953)
    @@ -677,7 +677,7 @@
    - checkifImageSupported (line 2322) + checkifImageSupported (line 2350)
    @@ -707,7 +707,7 @@
    - check_config_table (line 1818) + check_config_table (line 1846)
    @@ -733,7 +733,7 @@
    - cleanup_phpfspot_db (line 3190) + cleanup_phpfspot_db (line 3215)
    @@ -759,7 +759,7 @@
    - create_thumbnail (line 1571) + create_thumbnail (line 1599)
    @@ -796,7 +796,7 @@
    - delTag (line 954) + delTag (line 982)
    @@ -827,7 +827,7 @@
    - gen_thumb (line 1846) + gen_thumb (line 1874)
    @@ -865,7 +865,7 @@
    - getAvailableTags (line 791) + getAvailableTags (line 806)
    @@ -891,7 +891,7 @@
    - getCurrentPhoto (line 2620) + getCurrentPhoto (line 2645)
    @@ -916,7 +916,7 @@
    - getExport (line 2475) + getExport (line 2502)
    @@ -946,7 +946,7 @@
    - getFspotDBVersion (line 3059) + getFspotDBVersion (line 3084)
    @@ -972,7 +972,7 @@
    - getMD5 (line 1948) + getMD5 (line 1976)
    @@ -1003,7 +1003,7 @@
    - getNextSlideShowImage (line 2740) + getNextSlideShowImage (line 2765)
    @@ -1029,12 +1029,12 @@
    - getPhotoName (line 522) + getPhotoName (line 538)

    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 (...).

    • access: public
    @@ -1063,7 +1063,7 @@
    - getPhotoSelection (line 1108) + getPhotoSelection (line 1136)
    @@ -1089,7 +1089,7 @@
    - getPrevSlideShowImage (line 2764) + getPrevSlideShowImage (line 2789)
    @@ -1115,7 +1115,7 @@
    - getRSSFeed (line 2522) + getRSSFeed (line 2549)
    @@ -1140,7 +1140,7 @@
    - getSelectedTags (line 877) + getSelectedTags (line 905)
    @@ -1171,7 +1171,7 @@
    - get_calendar_matrix (line 2396) + get_calendar_matrix (line 2423)
    @@ -1207,7 +1207,7 @@
    - get_meta_informations (line 1805) + get_meta_informations (line 1833)
    @@ -1237,7 +1237,7 @@
    - get_mime_info (line 3251) + get_mime_info (line 3276)
    @@ -1268,7 +1268,7 @@
    - get_num_photos (line 2988) + get_num_photos (line 3013)
    @@ -1298,7 +1298,7 @@
    - get_photo_details (line 454) + get_photo_details (line 465)
    @@ -1329,12 +1329,12 @@
    - get_photo_rating (line 546) + get_photo_rating (line 562)

    get photo rating level

    -

    this function will return the integer-based rating level of the photo. This can only be done, if the F-Spot database is at a specific level. If rating value can not be found, zero will be returned indicating no rating value is available.

    +

    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.

    • access: public
    @@ -1360,7 +1360,7 @@
    - get_random_photo (line 2799) + get_random_photo (line 2824)
    @@ -1386,7 +1386,7 @@
    - get_random_tag_photo (line 2842) + get_random_tag_photo (line 2867)
    @@ -1417,12 +1417,12 @@
    - get_rate_search (line 564) + get_rate_search (line 580)

    get rate-search bars

    -

    this function will return the rating-bars for the search field.

    +

    this function will return the rating-bars for the search field.

    • access: public
    @@ -1443,7 +1443,7 @@
    - get_tag_name (line 3278) + get_tag_name (line 3303)
    @@ -1474,7 +1474,7 @@
    - get_thumb_path (line 2938) + get_thumb_path (line 2963)
    @@ -1507,7 +1507,7 @@
    - get_xml_tag_list (line 986) + get_xml_tag_list (line 1014)
    @@ -1532,7 +1532,7 @@
    - isValidDate (line 2890) + isValidDate (line 2915)
    @@ -1563,7 +1563,7 @@
    - parse_uri (line 3079) + parse_uri (line 3104)
    @@ -1596,7 +1596,7 @@
    - resetDateSearch (line 1076) + resetDateSearch (line 1104)
    @@ -1622,7 +1622,7 @@
    - resetNameSearch (line 1064) + resetNameSearch (line 1092)
    @@ -1648,7 +1648,7 @@
    - resetPhotoView (line 1040) + resetPhotoView (line 1068)
    @@ -1674,7 +1674,7 @@
    - resetRateSearch (line 1090) + resetRateSearch (line 1118)
    @@ -1700,7 +1700,7 @@
    - resetSlideShow (line 2781) + resetSlideShow (line 2806)
    @@ -1724,7 +1724,7 @@
    - resetTags (line 975) + resetTags (line 1003)
    @@ -1750,7 +1750,7 @@
    - resetTagSearch (line 1052) + resetTagSearch (line 1080)
    @@ -1776,7 +1776,7 @@
    - setTagCondition (line 1986) + setTagCondition (line 2014)
    @@ -1807,7 +1807,7 @@
    - show (line 257) + show (line 262)
    @@ -1833,7 +1833,7 @@
    - showCredits (line 1550) + showCredits (line 1578)
    @@ -1858,7 +1858,7 @@
    - showPhoto (line 646) + showPhoto (line 662)
    @@ -1889,7 +1889,7 @@
    - showPhotoIndex (line 1337) + showPhotoIndex (line 1365)
    @@ -1915,7 +1915,7 @@
    - showTextImage (line 2236) + showTextImage (line 2264)
    @@ -1957,7 +1957,7 @@
    - smarty_sort_select_list (line 2672) + smarty_sort_select_list (line 2697)
    @@ -1993,7 +1993,7 @@
    - startSearch (line 2004) + startSearch (line 2032)
    @@ -2019,7 +2019,7 @@
    - translate_path (line 633) + translate_path (line 649)
    @@ -2050,7 +2050,7 @@
    - updateSortOrder (line 2078) + updateSortOrder (line 2106)
    @@ -2084,7 +2084,7 @@
    - whatToDo (line 2637) + whatToDo (line 2662)
    @@ -2110,7 +2110,7 @@
    - _error (line 2342) + _error (line 2370)
    @@ -2141,7 +2141,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:25 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:55 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/PHPFSPOT_DB.html b/docs/phpfspot/PHPFSPOT_DB.html index 1a77693..d552e99 100644 --- a/docs/phpfspot/PHPFSPOT_DB.html +++ b/docs/phpfspot/PHPFSPOT_DB.html @@ -361,7 +361,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:40 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:41:02 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/PHPFSPOT_IMG.html b/docs/phpfspot/PHPFSPOT_IMG.html index c6bd836..ff5e141 100644 --- a/docs/phpfspot/PHPFSPOT_IMG.html +++ b/docs/phpfspot/PHPFSPOT_IMG.html @@ -211,7 +211,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:41 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:41:03 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/PHPFSPOT_RPC.html b/docs/phpfspot/PHPFSPOT_RPC.html index 5523ada..a458a1c 100644 --- a/docs/phpfspot/PHPFSPOT_RPC.html +++ b/docs/phpfspot/PHPFSPOT_RPC.html @@ -130,7 +130,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:41 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:41:03 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/PHPFSPOT_TMPL.html b/docs/phpfspot/PHPFSPOT_TMPL.html index 529f56e..d2cf7ca 100644 --- a/docs/phpfspot/PHPFSPOT_TMPL.html +++ b/docs/phpfspot/PHPFSPOT_TMPL.html @@ -139,7 +139,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:41 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:41:03 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/_find_dups.php.html b/docs/phpfspot/_find_dups.php.html index 73b8fb1..6410300 100644 --- a/docs/phpfspot/_find_dups.php.html +++ b/docs/phpfspot/_find_dups.php.html @@ -59,7 +59,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:11 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:46 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/_gen_thumbs.php.html b/docs/phpfspot/_gen_thumbs.php.html index d1aa8c8..1baa93f 100644 --- a/docs/phpfspot/_gen_thumbs.php.html +++ b/docs/phpfspot/_gen_thumbs.php.html @@ -59,7 +59,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:18 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:50 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/_index.php.html b/docs/phpfspot/_index.php.html index 51ad8af..2b4a68a 100644 --- a/docs/phpfspot/_index.php.html +++ b/docs/phpfspot/_index.php.html @@ -58,7 +58,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:25 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:55 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/_phpfspot.class.php.html b/docs/phpfspot/_phpfspot.class.php.html index dd2ec94..9888f97 100644 --- a/docs/phpfspot/_phpfspot.class.php.html +++ b/docs/phpfspot/_phpfspot.class.php.html @@ -102,7 +102,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:25 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:55 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/_phpfspot_db.php.html b/docs/phpfspot/_phpfspot_db.php.html index 4e3a2b9..cd4c010 100644 --- a/docs/phpfspot/_phpfspot_db.php.html +++ b/docs/phpfspot/_phpfspot_db.php.html @@ -59,7 +59,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:40 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:41:02 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/_phpfspot_img.php.html b/docs/phpfspot/_phpfspot_img.php.html index 2340a91..f8d3fab 100644 --- a/docs/phpfspot/_phpfspot_img.php.html +++ b/docs/phpfspot/_phpfspot_img.php.html @@ -87,7 +87,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:41 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:41:03 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/_phpfspot_tmpl.php.html b/docs/phpfspot/_phpfspot_tmpl.php.html index 73bdf93..23d27ae 100644 --- a/docs/phpfspot/_phpfspot_tmpl.php.html +++ b/docs/phpfspot/_phpfspot_tmpl.php.html @@ -59,7 +59,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:41 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:41:03 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/phpfspot/_rpc.php.html b/docs/phpfspot/_rpc.php.html index 351a15f..7a95ee3 100644 --- a/docs/phpfspot/_rpc.php.html +++ b/docs/phpfspot/_rpc.php.html @@ -85,7 +85,7 @@

    - Documentation generated on Sun, 25 May 2008 10:46:41 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:41:03 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/ric_CHANGELOG.html b/docs/ric_CHANGELOG.html index 9d73495..7596f34 100644 --- a/docs/ric_CHANGELOG.html +++ b/docs/ric_CHANGELOG.html @@ -10,6 +10,18 @@

    CHANGELOG

    +phpfspot (1.6)
    +
    + * bug, sort-by rates if all photos of the library are displayed works now.
    + * bug, phpfspot used the image files last modification date instead of F-Spot's
    +   recorded date when no EXIF data were available. Now it displays the same time as
    +   F-Spot does.
    + * feature, date-input appears now as one field instead of seperates for year, month
    +   and day.
    + * feature, make sort-order pre-configurable in phpfspot_cfg.php
    +
    + -- Andreas Unterkircher <unki@netshadow.at>  Fri, 20 Jun 2008 19:40:00 +0100
    +
     phpfspot (1.5)
     
       * feature, user-friendly URL's (with Apache's mod_rewrite).
    @@ -91,7 +103,7 @@ phpfspot (1.0)
     
     

    - Documentation generated on Sun, 25 May 2008 10:46:01 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:39 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/ric_INSTALL.html b/docs/ric_INSTALL.html index 71e2390..5b637ed 100644 --- a/docs/ric_INSTALL.html +++ b/docs/ric_INSTALL.html @@ -56,7 +56,7 @@ phpfspot install howto:

    - Documentation generated on Sun, 25 May 2008 10:45:59 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:39 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file diff --git a/docs/ric_README.html b/docs/ric_README.html index 8be6ec1..173f9ac 100644 --- a/docs/ric_README.html +++ b/docs/ric_README.html @@ -11,14 +11,14 @@

    README

     Package Name: phpfspot
    -Version:      1.5
    +Version:      1.6
     Author:       Andreas Unterkircher <unki@netshadow.at>
     Website:      http://oss.netshadow.at
     Desc:         dynamic PHP gallery for F-Spot
     
     

    - Documentation generated on Sun, 25 May 2008 10:46:00 +0200 by phpDocumentor 1.4.2 + Documentation generated on Wed, 02 Jul 2008 20:40:40 +0200 by phpDocumentor 1.4.2

    \ No newline at end of file -- cgit v1.2.3-18-g5258 From 6198d8ac0ce0623ebb56dba2fed19e4e759682c0 Mon Sep 17 00:00:00 2001 From: Andreas Unterkircher Date: Fri, 15 Aug 2008 13:19:23 +0200 Subject: support for F-Spot photo versioning, refs #67 Signed-off-by: Andreas Unterkircher --- phpfspot.class.php | 592 ++++++++++++++++++++++++------ phpfspot.js | 21 ++ phpfspot_db.php | 257 +++++++++---- phpfspot_img.php | 35 +- rpc.php | 9 +- themes/default/templates/single_photo.tpl | 8 + 6 files changed, 729 insertions(+), 193 deletions(-) diff --git a/phpfspot.class.php b/phpfspot.class.php index d7a76c3..5d35210 100644 --- a/phpfspot.class.php +++ b/phpfspot.class.php @@ -123,6 +123,7 @@ class PHPFSPOT { /* set application name and version information */ $this->cfg->product = "phpfspot"; $this->cfg->version = "1.6"; + $this->cfg->db_version = 2; $this->sort_orders= array( 'date_asc' => 'Date ↑', @@ -200,7 +201,7 @@ class PHPFSPOT { } /* Check if some tables need to be created */ - $this->check_config_table(); + $this->check_phpfspot_db(); /* overload Smarty class with our own template handler */ require_once "phpfspot_tmpl.php"; @@ -293,6 +294,8 @@ class PHPFSPOT { $_SESSION['start_action'] = 'showp'; } if(isset($_GET['id']) && is_numeric($_GET['id'])) { + if($_SESSION['current_photo'] != $_GET['id']) + unset($_SESSION['current_version']); $_SESSION['current_photo'] = $_GET['id']; $_SESSION['start_action'] = 'showp'; } @@ -455,14 +458,19 @@ class PHPFSPOT { } // get_tags() /** - * extract all photo details + * get all photo details from F-Spot database * - * retrieve all available details from f-spot's - * database and return them as object + * this function queries the F-Spot database for all available + * details of the requested photo. It returns them as a object. + * + * Furthermore it takes care of the photo version to be requested. + * If photo version is not yet, it queries information for the + * original photo. + * * @param integer $idx * @return object|null */ - public function get_photo_details($idx) + public function get_photo_details($idx, $version_idx = NULL) { /* ~ F-Spot version 0.3.x */ if($this->dbver < 9) { @@ -480,6 +488,7 @@ class PHPFSPOT { "; } else { + /* rating value got introduced */ $query_str = " SELECT p.id, p.uri, p.time, p.description, p.rating FROM photos p @@ -505,24 +514,47 @@ class PHPFSPOT { "; } - if($result = $this->db->db_query($query_str)) { + if($row = $this->db->db_fetchSingleRow($query_str)) { - $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). + /* before F-Spot db version 9 there was no uri column but + seperated fields for directory_path and name (= filename). */ if($this->dbver < 9) { $row['uri'] = "file://". $row['directory_path'] ."/". $row['name']; } + /* if version-idx has not yet been set, get the latest photo version */ + if(!isset($version_idx) || !$this->is_valid_version($idx, $version_idx)) + $version_idx = $this->get_latest_version($idx); + + /* if an alternative version has been requested */ + if($version_idx > 0) { + + /* check for alternative versions */ + if($version = $this->db->db_fetchSingleRow(" + SELECT + version_id, name, uri + FROM + photo_versions + WHERE + photo_id LIKE '". $idx ."' + AND + version_id LIKE '". $version_idx ."' + ")) { + + $row['name'] = $version['name']; + $row['uri'] = $version['uri']; + + } + } + return $row; } - + return null; - } // get_photo_details + } // get_photo_details() /** * returns aligned photo names @@ -697,7 +729,16 @@ class PHPFSPOT { } $orig_path = $this->translate_path($this->parse_uri($details['uri'], 'fullpath')); - $thumb_path = $this->get_thumb_path($this->cfg->photo_width, $photo); + + /* if current version is already set, use it */ + if($this->get_current_version() !== false) + $version = $this->get_current_version(); + + /* if version not set yet, we assume to display the latest version */ + if(!isset($version) || !$this->is_valid_version($photo, $version)) + $version = $this->get_latest_version($photo); + + $thumb_path = $this->get_thumb_path($this->cfg->photo_width, $photo, $version); if(!file_exists($orig_path)) { $this->_error("Photo ". $orig_path ." does not exist!
    \n"); @@ -712,7 +753,7 @@ class PHPFSPOT { /* If the thumbnail doesn't exist yet, try to create it */ if(!file_exists($thumb_path)) { $this->gen_thumb($photo, true); - $thumb_path = $this->get_thumb_path($this->cfg->photo_width, $photo); + $thumb_path = $this->get_thumb_path($this->cfg->photo_width, $photo, $version); } /* get mime-type, height and width from the original photo */ @@ -763,11 +804,11 @@ class PHPFSPOT { $this->tmpl->assign('ExifFileSize', $meta_size); if($this->is_user_friendly_url()) { - $this->tmpl->assign('image_url', '/photo/'. $photo ."/". $this->cfg->photo_width); + $this->tmpl->assign('image_url', '/photo/'. $photo ."/". $this->cfg->photo_width .'/'. $version); $this->tmpl->assign('image_url_full', '/photo/'. $photo); } else { - $this->tmpl->assign('image_url', 'phpfspot_img.php?idx='. $photo ."&width=". $this->cfg->photo_width); + $this->tmpl->assign('image_url', 'phpfspot_img.php?idx='. $photo ."&width=". $this->cfg->photo_width ."&version=". $version); $this->tmpl->assign('image_url_full', 'phpfspot_img.php?idx='. $photo); } @@ -791,6 +832,14 @@ class PHPFSPOT { $this->tmpl->assign('photo_width', $this->cfg->photo_width); $this->tmpl->assign('photo_number', $i); $this->tmpl->assign('photo_count', count($all_photos)); + $this->tmpl->assign('photo', $photo); + $this->tmpl->assign('version', $version); + + /* if the photo as alternative versions, set a flag for the template */ + if($this->get_photo_versions($photo)) + $this->tmpl->assign('has_versions', true); + + $this->tmpl->register_function("photo_version_select_list", array(&$this, "smarty_photo_version_select_list"), false); return $this->tmpl->fetch("single_photo.tpl"); @@ -1070,6 +1119,9 @@ class PHPFSPOT { if(isset($_SESSION['current_photo'])) unset($_SESSION['current_photo']); + if(isset($_SESSION['current_version'])) + unset($_SESSION['current_version']); + } // resetPhotoView(); /** @@ -1408,7 +1460,7 @@ class PHPFSPOT { $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]); + $thumb_path = $this->get_thumb_path($this->cfg->thumb_width, $photos[$i], $this->get_latest_version($photos[$i])); if(file_exists($thumb_path)) { $info = getimagesize($thumb_path); @@ -1843,25 +1895,133 @@ class PHPFSPOT { * if it does not exist yet. this own is used to store * some necessary informations (md5 sum's, ...). */ - public function check_config_table() + public function check_phpfspot_db() { // if the config table doesn't exist yet, create it if(!$this->cfg_db->db_check_table_exists("images")) { $this->cfg_db->db_exec(" CREATE TABLE images ( - img_idx int primary key, - img_md5 varchar(32) + img_idx int, + img_version_idx int, + img_md5 varchar(32), + UNIQUE(img_idx, img_version_idx) + ) + "); + } + + if(!$this->cfg_db->db_check_table_exists("meta")) { + $this->cfg_db->db_exec(" + CREATE TABLE meta ( + meta_key varchar(255), + meta_value varchar(255) + ) + "); + + /* db_version was added with phpfspot 1.7, before changes + on the phpfspot database where not necessary. + */ + + $this->cfg_db->db_exec(" + INSERT INTO meta ( + meta_key, meta_value + ) VALUES ( + 'phpfspot Database Version', + '". $this->cfg->db_version ."' ) - "); + "); } - } // check_config_table + /* if version <= 2 and column img_version_idx does not exist yet */ + if($this->get_db_version() <= 2 && + !$this->cfg_db->db_check_column_exists("images", "img_version_idx")) { + + if(!$this->cfg_db->db_start_transaction()) + die("Can not start database transaction"); + + $result = $this->cfg_db->db_exec(" + CREATE TEMPORARY TABLE images_temp ( + img_idx int, + img_version_idx int, + img_md5 varchar(32), + UNIQUE(img_idx, img_version_idx) + ) + "); + + if(!$result) { + $this->cfg_db->db_rollback_transaction(); + die("Upgrade failed - transaction rollback"); + } + + $result = $this->cfg_db->db_exec(" + INSERT INTO images_temp + SELECT + img_idx, + 0, + img_md5 + FROM images + "); + + if(!$result) { + $this->cfg_db->db_rollback_transaction(); + die("Upgrade failed - transaction rollback"); + } + + $result = $this->cfg_db->db_exec(" + DROP TABLE images + "); + + if(!$result) { + $this->cfg_db->db_rollback_transaction(); + die("Upgrade failed - transaction rollback"); + } + + $result = $this->cfg_db->db_exec(" + CREATE TABLE images ( + img_idx int, + img_version_idx int, + img_md5 varchar(32), + UNIQUE(img_idx, img_version_idx) + ) + "); + + if(!$result) { + $this->cfg_db->db_rollback_transaction(); + die("Upgrade failed - transaction rollback"); + } + + $result = $this->cfg_db->db_exec(" + INSERT INTO images + SELECT * + FROM images_temp + "); + + if(!$result) { + $this->cfg_db->db_rollback_transaction(); + die("Upgrade failed - transaction rollback"); + } + + $result = $this->cfg_db->db_exec(" + DROP TABLE images_temp + "); + + if(!$result) { + $this->cfg_db->db_rollback_transaction(); + die("Upgrade failed - transaction rollback"); + } + + if(!$this->cfg_db->db_commit_transaction()) + die("Can not commit database transaction"); + + } + + } // check_phpfspot_db /** - * Generates a thumbnail from photo idx + * generates thumbnails * - * This function will generate JPEG thumbnails from provided F-Spot photo - * indizes. + * This function generates JPEG thumbnails from + * provided F-Spot photo indize and its alternative + * versions. * * 1. Check if all thumbnail generations (width) are already in place and * readable @@ -1874,6 +2034,7 @@ class PHPFSPOT { public function gen_thumb($idx = 0, $force = 0, $overwrite = false) { $error = 0; + $versions = Array(0); $resolutions = Array( $this->cfg->thumb_width, @@ -1882,110 +2043,125 @@ class PHPFSPOT { 30, ); - /* get details from F-Spot's database */ - $details = $this->get_photo_details($idx); + if($alt_versions = $this->get_photo_versions($idx)) + $versions = array_merge($versions, $alt_versions); - /* calculate file MD5 sum */ - $full_path = $this->translate_path($this->parse_uri($details['uri'], 'fullpath')); + foreach($versions as $version) { - if(!file_exists($full_path)) { - $this->_error("File ". $full_path ." does not exist\n"); - return; - } + /* get details from F-Spot's database */ + $details = $this->get_photo_details($idx, $version); - if(!is_readable($full_path)) { - $this->_error("File ". $full_path ." is not readable for ". $this->getuid() ."\n"); - return; - } + /* calculate file MD5 sum */ + $full_path = $this->translate_path($this->parse_uri($details['uri'], 'fullpath')); + + if(!file_exists($full_path)) { + $this->_error("File ". $full_path ." does not exist\n"); + return; + } + + if(!is_readable($full_path)) { + $this->_error("File ". $full_path ." is not readable for ". $this->getuid() ."\n"); + return; + } - $this->_debug("Image [". $idx ."] ". $this->shrink_text($this->parse_uri($details['uri'], 'filename'), 20) ." Thumbnails:"); + $this->_debug("Image [". $idx ."] ". $this->shrink_text($this->parse_uri($details['uri'], 'filename'), 20) ." Thumbnails:"); - /* If Nikon NEF format, we need to treat it another way */ - if(isset($this->cfg->dcraw_bin) && - file_exists($this->cfg->dcraw_bin) && - is_executable($this->cfg->dcraw_bin) && - preg_match('/\.nef$/i', $details['uri'])) { + /* If Nikon NEF format, we need to treat it another way */ + if(isset($this->cfg->dcraw_bin) && + file_exists($this->cfg->dcraw_bin) && + is_executable($this->cfg->dcraw_bin) && + preg_match('/\.nef$/i', $details['uri'])) { - $ppm_path = preg_replace('/\.nef$/i', '.ppm', $full_path); + $ppm_path = preg_replace('/\.nef$/i', '.ppm', $full_path); + + /* if PPM file does not exist, let dcraw convert it from NEF */ + if(!file_exists($ppm_path)) { + system($this->cfg->dcraw_bin ." -a ". $full_path); + } + + /* for now we handle the PPM instead of the NEF */ + $full_path = $ppm_path; - /* if PPM file does not exist, let dcraw convert it from NEF */ - if(!file_exists($ppm_path)) { - system($this->cfg->dcraw_bin ." -a ". $full_path); } - /* for now we handle the PPM instead of the NEF */ - $full_path = $ppm_path; + $file_md5 = md5_file($full_path); + $changes = false; - } + foreach($resolutions as $resolution) { - $file_md5 = md5_file($full_path); - $changes = false; + $generate_it = false; - foreach($resolutions as $resolution) { - - $generate_it = false; + $thumb_sub_path = substr($file_md5, 0, 2); + $thumb_path = $this->cfg->thumb_path ."/". $thumb_sub_path ."/". $resolution ."_". $file_md5; - $thumb_sub_path = substr($file_md5, 0, 2); - $thumb_path = $this->cfg->thumb_path ."/". $thumb_sub_path ."/". $resolution ."_". $file_md5; + /* if thumbnail-subdirectory does not exist yet, create it */ + if(!file_exists(dirname($thumb_path))) { + mkdir(dirname($thumb_path), 0755); + } - /* if thumbnail-subdirectory does not exist yet, create it */ - if(!file_exists(dirname($thumb_path))) { - mkdir(dirname($thumb_path), 0755); - } + /* if the thumbnail file doesn't exist, create it */ + if(!file_exists($thumb_path) || $force) { + $generate_it = true; + } + elseif($file_md5 != $this->getMD5($idx, $version)) { + $generate_it = true; + } - /* if the thumbnail file doesn't exist, create it */ - if(!file_exists($thumb_path)) { - $generate_it = true; - } - /* if the file hasn't changed there is no need to regen the thumb */ - elseif($file_md5 != $this->getMD5($idx) || $force) { - $generate_it = true; - } + if($generate_it || $overwrite) { + + $this->_debug(" ". $resolution ."px"); + if(!$this->create_thumbnail($full_path, $thumb_path, $resolution)) + $error = 1; - if($generate_it || $overwrite) { + $changes = true; + } + } - $this->_debug(" ". $resolution ."px"); - if(!$this->create_thumbnail($full_path, $thumb_path, $resolution)) - $error = 1; + if(!$changes) { + $this->_debug(" already exist"); + } - $changes = true; + /* set the new/changed MD5 sum for the current photo */ + if(!$error) { + $this->setMD5($idx, $file_md5, $version); } - } - if(!$changes) { - $this->_debug(" already exist"); - } + $this->_debug("\n"); - /* set the new/changed MD5 sum for the current photo */ - if(!$error) { - $this->setMD5($idx, $file_md5); } - $this->_debug("\n"); - } // gen_thumb() /** * returns stored md5 sum for a specific photo * - * this function queries the phpfspot database for a - * stored MD5 checksum of the specified photo + * this function queries the phpfspot database for a stored MD5 + * checksum of the specified photo. It also takes care of the + * requested photo version - original or alternative photo. + * * @param integer $idx * @return string|null */ - public function getMD5($idx) + public function getMD5($idx, $version_idx = 0) { $result = $this->cfg_db->db_query(" - SELECT img_md5 - FROM images - WHERE img_idx='". $idx ."' + SELECT + img_md5 + FROM + images + WHERE + img_idx='". $idx ."' + AND + img_version_idx='". $version_idx ."' "); if(!$result) - return 0; + return NULL; - $img = $this->cfg_db->db_fetch_object($result); - return $img['img_md5']; + if($img = $this->cfg_db->db_fetch_object($result)) + return $img['img_md5']; + + return NULL; } // getMD5() @@ -1994,11 +2170,16 @@ class PHPFSPOT { * @param integer $idx * @param string $md5 */ - private function setMD5($idx, $md5) + private function setMD5($idx, $md5, $version_idx = 0) { $result = $this->cfg_db->db_exec(" - REPLACE INTO images (img_idx, img_md5) - VALUES ('". $idx ."', '". $md5 ."') + INSERT OR REPLACE INTO images ( + img_idx, img_version_idx, img_md5 + ) VALUES ( + '". $idx ."', + '". $version_idx ."', + '". $md5 ."' + ) "); } // setMD5() @@ -2114,6 +2295,25 @@ class PHPFSPOT { } // updateSortOrder() + /** + * update photo version in session variable + * + * this function is invoked by RPC and will set the requested + * photo version in the session variable. + * @param string $photo_version + * @return string + */ + public function update_photo_version($photo_idx, $photo_version) + { + if($this->is_valid_version($photo_idx, $photo_version)) { + $_SESSION['current_version'] = $photo_version; + return "ok"; + } + + return "incorrect photo version provided"; + + } // update_photo_version() + /** * rotate image * @@ -2642,12 +2842,52 @@ class PHPFSPOT { /** * return the current photo */ - public function getCurrentPhoto() + public function get_current_photo() { if(isset($_SESSION['current_photo'])) { - print $_SESSION['current_photo']; + return $_SESSION['current_photo']; } - } // getCurrentPhoto() + + return NULL; + + } // get_current_photo() + + /** + * current selected photo version + * + * this function returns the current selected photo version + * from the session variables. + * + * @return int + */ + public function get_current_version() + { + /* if current version is set, return it, if the photo really has that version */ + if(isset($_SESSION['current_version']) && is_numeric($_SESSION['current_version'])) + return $_SESSION['current_version']; + + return false; + + } // get_current_version() + + /** + * returns latest available photo version + * + * this function returns the latested available version + * for the requested photo. + * + * @return int + */ + public function get_latest_version($photo_idx) + { + /* try to get the lasted version for the current photo */ + if($versions = $this->get_photo_versions($photo_idx)) + return $versions[count($versions)-1]; + + /* if no alternative version were found, return original version */ + return 0; + + } // get_current_version() /** * tells the client browser what to do @@ -2688,6 +2928,37 @@ class PHPFSPOT { } // getuid() + /** + * photo version select list + * + * this function returns a HTML select list (drop down) + * to select a alternative photo version of the original photo. + * + * @param array $params + * @param smarty $smarty + * @return string + */ + public function smarty_photo_version_select_list($params, &$smarty) + { + if(!isset($params['photo']) || !isset($params['current'])) + return NULL; + + $output = ""; + $versions = $this->get_photo_versions($params['photo']); + + foreach($versions as $version) { + + $output.= ""; + } + + return $output; + + } // smarty_photo_version_select_list() + /** * returns a select-dropdown box to select photo index sort parameters * @param array $params @@ -2960,9 +3231,9 @@ class PHPFSPOT { * @param integer $photo * @return string */ - public function get_thumb_path($width, $photo) + public function get_thumb_path($width, $photo_idx, $version_idx) { - $md5 = $this->getMD5($photo); + $md5 = $this->getMD5($photo_idx, $version_idx); $sub_path = substr($md5, 0, 2); return $this->cfg->thumb_path . "/" @@ -3339,12 +3610,15 @@ class PHPFSPOT { break; case 'photo': if(is_numeric($options[2])) { + $width = NULL; + $version = NULL; + if(isset($options[3]) && is_numeric($options[3])) + $width = $options[3]; + if(isset($options[4]) && is_numeric($options[4])) + $version = $options[4]; require_once "phpfspot_img.php"; $img = new PHPFSPOT_IMG; - if(isset($options[3]) && is_numeric($options[3])) - $img->showImg($options[2], $options[3]); - else - $img->showImg($options[2]); + $img->showImg($options[2], $width, $version); } exit; break; @@ -3396,6 +3670,116 @@ class PHPFSPOT { } // session_cleanup() + /** + * get database version + * + * this function queries the meta table + * and returns the current database version. + * + * @return integer + */ + public function get_db_version() + { + if($row = $this->cfg_db->db_fetchSingleRow(" + SELECT meta_value + FROM + meta + WHERE + meta_key LIKE 'phpfspot Database Version' + ")) { + + return $row['meta_value']; + + } + + return 0; + + } // get_db_version() + + /** + * get photo versions + * + * this function returns an array of all available + * alterntaive versions of the provided photo id. + * has alternative photo versions available + * + * @param int $idx + * @return array + */ + public function get_photo_versions($idx) + { + $versions = Array(); + + $result = $this->db->db_query(" + SELECT + version_id + FROM + photo_versions + WHERE + photo_id LIKE '". $idx ."'"); + + while($row = $this->cfg_db->db_fetch_object($result)) { + array_push($versions, $row['version_id']); + } + + return $versions; + + } // get_photo_versions() + + /** + * check for invalid version of photo + * + * this function validates the provided photo-id and version-id + * + * @param int $photo_idx + * @param int $version_idx + * @return bool + */ + public function is_valid_version($photo_idx, $version_idx) + { + /* the original version is always valid */ + if($version_idx == 0) + return true; + + if($versions = $this->get_photo_versions($photo_idx)) { + if(in_array($version_idx, $versions)) + return true; + } + + return false; + + } // is_valid_version() + + /** + * get photo version name + * + * this function returns the name of the version + * identified by the photo-id and version-id. + * + * @param int $photo_idx + * @param int $version_idx + * @return string + */ + public function get_photo_version_name($photo_idx, $version_idx) + { + if($row = $this->db->db_fetchSingleRow(" + SELECT + name + FROM + photo_versions + WHERE + photo_id LIKE '". $photo_idx ."' + AND + version_id LIKE '". $version_idx ."'")) { + + return $row['name']; + + } + + return false; + + } // get_photo_version_name() + } // class PHPFSPOT ?> diff --git a/phpfspot.js b/phpfspot.js index 57345ab..54395e2 100644 --- a/phpfspot.js +++ b/phpfspot.js @@ -820,6 +820,27 @@ function update_sort_order(obj) } // update_sort_order() +/** + * if the photo-version ѕelect-box has changed, set the newly + * choosen photo version as the to-be-displayed photo version + */ +function update_photo_version(obj, current_photo) +{ + var objTemp = new Object(); + objTemp['photo_version'] = obj.options[obj.selectedIndex].value; + objTemp['photo_idx'] = current_photo; + + var retr = HTML_AJAX.post(web_path + '/rpc.php?action=update_photo_version', objTemp); + + if(retr == "ok") { + showPhoto(current_photo); + } + else { + window.alert("Server message: "+ retr); + } + +} // update_photo_version() + /** * show rate stars * diff --git a/phpfspot_db.php b/phpfspot_db.php index e0cf39f..339e023 100644 --- a/phpfspot_db.php +++ b/phpfspot_db.php @@ -127,32 +127,30 @@ class PHPFSPOT_DB { */ public function db_query($query = "") { - if($this->getConnStatus()) { + if(!$this->getConnStatus()) + return false; - $this->last_query = $query; - - switch($this->parent->cfg->db_access) { - case 'native': - if(($result = sqlite3_query($this->db, $query)) === false) - $this->ThrowError($this->getLastError()); - break; - case 'pdo': - try{ - $result = $this->db->query($query); - return $result; - } - catch (Exception $e) { - $this->ThrowError($e->getMessage()); - $result= NULL; - } - break; + $this->last_query = $query; + + switch($this->parent->cfg->db_access) { + case 'native': + if(($result = sqlite3_query($this->db, $query)) === false) + $this->ThrowError($this->getLastError()); + break; + case 'pdo': + try{ + $result = $this->db->query($query); + return $result; + } + catch (Exception $e) { + $this->ThrowError($e->getMessage()); + $result= NULL; + } + break; - } - - return $result; } - else - $this->ThrowError("Can't execute query - we are not connected!"); + + return $result; } // db_query() @@ -163,27 +161,30 @@ class PHPFSPOT_DB { */ public function db_exec($query = "") { - if($this->getConnStatus()) { - - $this->last_query = $query; - - switch($this->parent->cfg->db_access) { - case 'native': - if(($result = sqlite3_exec($this->db, $query)) === false) - $this->ThrowError($this->getLastError()); - break; - case 'pdo': - try { - $result = $this->db->query($query); - } - catch (Exception $e){ - $this->ThrowError($e->getLMessage()); - } - break; - } + if(!$this->getConnStatus()) + return false; + + $this->last_query = $query; + + switch($this->parent->cfg->db_access) { + case 'native': + if(($result = sqlite3_exec($this->db, $query)) === false) { + $this->ThrowError($this->getLastError()); + return false; + } + break; + case 'pdo': + try { + $result = $this->db->query($query); + } + catch (Exception $e){ + $this->ThrowError($e->getLMessage()); + return false; + } + break; } - else - $this->ThrowError("Can't execute query - we are not connected!"); + + return true; } // db_exec() @@ -206,21 +207,19 @@ class PHPFSPOT_DB { */ public function db_fetchSingleRow($query = "") { - if($this->getConnStatus()) { - - $result = $this->db_query($query); - switch($this->parent->cfg->db_access) { - case 'native': - $row = $this->db_fetch_object($result); - break; - case 'pdo': - $row = $result->fetch(); - break; - } - return $row; + if(!$this->getConnStatus()) + return false; + + $result = $this->db_query($query); + switch($this->parent->cfg->db_access) { + case 'native': + $row = $this->db_fetch_object($result); + break; + case 'pdo': + $row = $result->fetch(); + break; } - else - $this->ThrowError("Can't fetch row - we are not connected!"); + return $row; } // db_fetchSingleRow() @@ -253,31 +252,63 @@ class PHPFSPOT_DB { */ public function db_check_table_exists($table_name = "") { - if($this->getConnStatus()) { - - $result = $this->db_query("SELECT name FROM sqlite_master WHERE type='table'"); - switch($this->parent->cfg->db_access) { - case 'native': - while($table = $this->db_fetch_object($result)) { - if($table['name'] == $table_name) - return true; - } - break; - case 'pdo': - foreach($result as $table ){ - if($table['NAME'] == $table_name) - return true; - } - break; - } - + if(!$this->getConnStatus()) return false; - } - else - $this->ThrowError("Can't check table - we are not connected!"); + + $result = $this->db_query("SELECT name FROM sqlite_master WHERE type='table'"); + switch($this->parent->cfg->db_access) { + case 'native': + while($table = $this->db_fetch_object($result)) { + if($table['name'] == $table_name) + return true; + } + break; + case 'pdo': + foreach($result as $table ){ + if($table['NAME'] == $table_name) + return true; + } + break; + } + + return false; } // db_check_table_exists() + /** + * PHPFSPOT_DB check column exist + * + * This function checks if the given column exists within + * the specified table. + */ + public function db_check_column_exists($table_name, $column) + { + if(!$this->getConnStatus()) + return false; + + $result = $this->db_query(" + SELECT sql + FROM + (SELECT * FROM sqlite_master UNION ALL + SELECT * FROM sqlite_temp_master) + WHERE + tbl_name LIKE '". $table_name ."' + AND type!='meta' + AND sql NOT NULL + AND name NOT LIKE 'sqlite_%' + ORDER BY substr(type,2,1), name + "); + + while($row = $this->db_fetch_object($result)) { + /* CREATE TABLE xx ( col1 int, col2 bool, col3 ...) */ + if(strstr($row['sql'], " ". $column ." ") !== false) + return true; + } + + return false; + + } // db_check_column_exists() + /** * PHPFSPOT_DB get connection status * @@ -333,6 +364,74 @@ class PHPFSPOT_DB { } // getLastError() -} + /** + * start transaction + * + * this will start a transaction on ACID-supporting database + * systems. + * + * @return bool + */ + public function db_start_transaction() + { + if(!$this->getConnStatus()) + return false; + + $result = $this->db_exec("BEGIN"); + + /* Errors? */ + if(PEAR::isError($result)) + $this->throwError($result->getMessage() .' - '. $result->getUserInfo()); + + return true; + + } // db_start_transaction() + + /** + * commit transaction + * + * this will commit an ongoing transaction on ACID-supporting + * database systems + * + * @return bool + */ + public function db_commit_transaction() + { + if(!$this->getConnStatus()) + return false; + + $result = $this->db_exec("COMMIT"); + + /* Errors? */ + if(PEAR::isError($result)) + $this->throwError($result->getMessage() .' - '. $result->getUserInfo()); + + return true; + + } // db_commit_transaction() + + /** + * rollback transaction() + * + * this function aborts a on going transaction + * + * @return bool + */ + public function db_rollback_transaction() + { + if(!$this->getConnStatus()) + return false; + + $result = $this->db_exec("ROLLBACK"); + + /* Errors? */ + if(PEAR::isError($result)) + $this->throwError($result->getMessage() .' - '. $result->getUserInfo()); + + return true; + + } // db_rollback_transaction() + +} // PHPFSPOT_DB ?> diff --git a/phpfspot_img.php b/phpfspot_img.php index 3599b2b..5ef76b4 100644 --- a/phpfspot_img.php +++ b/phpfspot_img.php @@ -64,13 +64,17 @@ class PHPFSPOT_IMG { * @param integer $idx * @param integer $width */ - public function showImg($idx, $width = 0) + public function showImg($idx, $width = 0, $version = NULL) { if($idx == 'rand') $idx = $this->parent->get_random_photo(); - $details = $this->parent->get_photo_details($idx); - + /* display the lastest available version, if a wrong version has been requested */ + if(!isset($version) || !$this->parent->is_valid_version($idx, $version)) + $version = $this->parent->get_latest_version($idx); + + $details = $this->parent->get_photo_details($idx, $version); + if(!$details) { $this->parent->showTextImage("The image (". $idx .") you requested is unknown"); return; @@ -82,11 +86,15 @@ class PHPFSPOT_IMG { } /* show thumbnail */ else { - /* if no entry for this photo is yet in the database, create thumb */ + + /* check for an entry if we already handled this photo before. If not, + create a thumbnail for it. + */ if(!$this->parent->getMD5($idx)) { $this->parent->gen_thumb($idx); } - $fullpath = $this->parent->get_thumb_path($width, $idx); + /* get the full filesystem path to the thumbnail */ + $fullpath = $this->parent->get_thumb_path($width, $idx, $version); /* if the thumb file does not exist, create it */ if(!file_exists($fullpath)) { $this->parent->gen_thumb($idx); @@ -150,7 +158,10 @@ class PHPFSPOT_IMG { if(!$this->parent->getMD5($idx)) { $this->parent->gen_thumb($idx); } - $fullpath = $this->parent->get_thumb_path($width, $idx); + + $version = $this->parent­>get_latest_version($idx); + + $fullpath = $this->parent->get_thumb_path($width, $idx, $version); /* if the thumb file does not exist, create it */ if(!file_exists($fullpath)) { $this->parent->gen_thumb($idx); @@ -196,9 +207,16 @@ if(isset($_GET['idx']) && (is_numeric($_GET['idx']) || $_GET['idx'] == 'rand')) $img = new PHPFSPOT_IMG; if(isset($_GET['width']) && is_numeric($_GET['width'])) - $img->showImg($_GET['idx'], $_GET['width']); + $width = $_GET['width']; + else + $width = NULL; + + if(isset($_GET['version']) && is_numeric($_GET['version'])) + $version = $_GET['version']; else - $img->showImg($_GET['idx']); + $version = NULL; + + $img->showImg($_GET['idx'], $width, $version); exit(0); } @@ -212,5 +230,4 @@ if(isset($_GET['tagidx']) && is_numeric($_GET['tagidx'])) { } - ?> diff --git a/rpc.php b/rpc.php index ada2857..17af073 100644 --- a/rpc.php +++ b/rpc.php @@ -135,13 +135,20 @@ class PHPFSPOT_RPC { } break; + case 'update_photo_version': + if(isset($_POST['photo_version']) && is_numeric($_POST['photo_version']) && + isset($_POST['photo_idx']) && is_numeric($_POST['photo_idx'])) { + print $phpfspot->update_photo_version($_POST['photo_idx'], $_POST['photo_version']); + } + break; + case 'get_export': /* $_GET['mode'] will be validated by getExport() */ $phpfspot->getExport($_GET['mode']); break; case 'get_photo_to_show': - $phpfspot->getCurrentPhoto(); + print $phpfspot->get_current_photo(); break; case 'get_calendar_matrix': diff --git a/themes/default/templates/single_photo.tpl b/themes/default/templates/single_photo.tpl index e8e326d..572bef7 100644 --- a/themes/default/templates/single_photo.tpl +++ b/themes/default/templates/single_photo.tpl @@ -49,6 +49,14 @@ {/section}
    { /if } + { if $has_versions } +
    + Versions:
    + +
    + { /if } { if $tags }
    available tags Tagged with:
    -- cgit v1.2.3-18-g5258 From 88e26f8f6bdc9dcb443759ec2781f343146bb889 Mon Sep 17 00:00:00 2001 From: Andreas Unterkircher Date: Mon, 18 Aug 2008 06:10:24 +0200 Subject: increase version to 1.7 Signed-off-by: Andreas Unterkircher --- CHANGELOG | 6 ++++++ README | 2 +- phpfspot.class.php | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 28288cf..1ff2c36 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,9 @@ +phpfspot (1.7) + + * feature, F-Spot photo versioning + + -- Andreas Unterkircher Fri, 18 Aug 2008 06:09:00 +0200 + phpfspot (1.6) * bug, sort-by rates if all photos of the library are displayed works now. diff --git a/README b/README index 48f9ae5..abbdc44 100644 --- a/README +++ b/README @@ -1,5 +1,5 @@ Package Name: phpfspot -Version: 1.6 +Version: 1.7 Author: Andreas Unterkircher Website: http://oss.netshadow.at Desc: dynamic PHP gallery for F-Spot diff --git a/phpfspot.class.php b/phpfspot.class.php index 5d35210..f54a5d6 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.6"; + $this->cfg->version = "1.7"; $this->cfg->db_version = 2; $this->sort_orders= array( -- cgit v1.2.3-18-g5258