refinerycms-photo-gallery 0.0.1.dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. data/Gemfile +26 -0
  2. data/LICENSE.md +8 -0
  3. data/README.md +224 -0
  4. data/app/assets/images/refinery/photo_gallery/admin/chosen-sprite.png +0 -0
  5. data/app/assets/images/refinery/photo_gallery/admin/icons/album.png +0 -0
  6. data/app/assets/images/refinery/photo_gallery/admin/icons/album_add.png +0 -0
  7. data/app/assets/images/refinery/photo_gallery/admin/icons/album_edit.png +0 -0
  8. data/app/assets/images/refinery/photo_gallery/admin/icons/cog.png +0 -0
  9. data/app/assets/images/refinery/photo_gallery/admin/icons/down.gif +0 -0
  10. data/app/assets/images/refinery/photo_gallery/admin/icons/folder.png +0 -0
  11. data/app/assets/images/refinery/photo_gallery/admin/icons/folder_add.png +0 -0
  12. data/app/assets/images/refinery/photo_gallery/admin/icons/folder_edit.png +0 -0
  13. data/app/assets/images/refinery/photo_gallery/admin/icons/loading.gif +0 -0
  14. data/app/assets/images/refinery/photo_gallery/admin/icons/page_copy.png +0 -0
  15. data/app/assets/images/refinery/photo_gallery/admin/icons/photo.png +0 -0
  16. data/app/assets/images/refinery/photo_gallery/admin/icons/photo_add.png +0 -0
  17. data/app/assets/images/refinery/photo_gallery/admin/icons/photo_edit.png +0 -0
  18. data/app/assets/images/refinery/photo_gallery/admin/icons/up.gif +0 -0
  19. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/backgrounds.gif +0 -0
  20. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/buttons-disabled.png +0 -0
  21. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/buttons.png +0 -0
  22. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/delete.gif +0 -0
  23. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/done.gif +0 -0
  24. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/error.gif +0 -0
  25. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/throbber.gif +0 -0
  26. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.plupload.queue/transp50.png +0 -0
  27. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.ui.plupload/plupload-bw.png +0 -0
  28. data/app/assets/images/refinery/photo_gallery/admin/plupload/jquery.ui.plupload/plupload.png +0 -0
  29. data/app/assets/images/refinery/photo_gallery/admin/rss-feed.png +0 -0
  30. data/app/assets/images/refinery/photo_gallery/fancybox/blank.gif +0 -0
  31. data/app/assets/images/refinery/photo_gallery/fancybox/fancybox_loading.gif +0 -0
  32. data/app/assets/images/refinery/photo_gallery/fancybox/fancybox_sprite.png +0 -0
  33. data/app/assets/images/refinery/photo_gallery/fancybox/helpers/fancybox_buttons.png +0 -0
  34. data/app/assets/javascripts/refinery/photo_gallery/admin/jquery.chosen.min.js +10 -0
  35. data/app/assets/javascripts/refinery/photo_gallery/admin/photo_gallery.js +28 -0
  36. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/changelog.txt +218 -0
  37. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/cs.js +14 -0
  38. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/da.js +12 -0
  39. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/de.js +24 -0
  40. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/el.js +14 -0
  41. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/es.js +25 -0
  42. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/et.js +33 -0
  43. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/fa.js +37 -0
  44. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/fi.js +33 -0
  45. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/fr-ca.js +35 -0
  46. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/fr.js +25 -0
  47. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/hr.js +25 -0
  48. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/hu.js +33 -0
  49. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/it.js +24 -0
  50. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/ja.js +37 -0
  51. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/ko.js +36 -0
  52. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/lv.js +33 -0
  53. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/nl.js +21 -0
  54. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/pl.js +24 -0
  55. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/pt-br.js +35 -0
  56. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/ro.js +24 -0
  57. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/ru.js +21 -0
  58. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/sk.js +37 -0
  59. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/sr.js +14 -0
  60. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/i18n/sv.js +12 -0
  61. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/jquery.plupload.queue.js +195 -0
  62. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/jquery.ui.plupload.js +383 -0
  63. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/license.txt +339 -0
  64. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.browserplus.js +1 -0
  65. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.flash.js +226 -0
  66. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.flash.swf +0 -0
  67. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.full.js +2525 -0
  68. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.full.js.default +2525 -0
  69. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.gears.js +1 -0
  70. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.html4.js +1 -0
  71. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.html5.js +765 -0
  72. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.html5.js.default +765 -0
  73. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.js +618 -0
  74. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.silverlight.js +1 -0
  75. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/plupload.silverlight.xap +0 -0
  76. data/app/assets/javascripts/refinery/photo_gallery/admin/plupload/readme.md +46 -0
  77. data/app/assets/javascripts/refinery/photo_gallery/fancybox/CHANGELOG.md +68 -0
  78. data/app/assets/javascripts/refinery/photo_gallery/fancybox/README.md +212 -0
  79. data/app/assets/javascripts/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-buttons.js +115 -0
  80. data/app/assets/javascripts/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-media.js +85 -0
  81. data/app/assets/javascripts/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-thumbs.js +157 -0
  82. data/app/assets/javascripts/refinery/photo_gallery/fancybox/jquery.fancybox.js +1463 -0
  83. data/app/assets/javascripts/refinery/photo_gallery/fancybox/jquery.fancybox.pack.js +35 -0
  84. data/app/assets/javascripts/refinery/photo_gallery/fancybox/lib/jquery.mousewheel-3.0.6.pack.js +13 -0
  85. data/app/assets/stylesheets/refinery/photo_gallery/admin/chosen.css.scss +396 -0
  86. data/app/assets/stylesheets/refinery/photo_gallery/admin/photo_gallery.css.scss +109 -0
  87. data/app/assets/stylesheets/refinery/photo_gallery/admin/plupload/jquery.plupload.queue.css.scss +177 -0
  88. data/app/assets/stylesheets/refinery/photo_gallery/admin/plupload/jquery.ui.plupload.css.scss +147 -0
  89. data/app/assets/stylesheets/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-buttons.css.scss +85 -0
  90. data/app/assets/stylesheets/refinery/photo_gallery/fancybox/helpers/jquery.fancybox-thumbs.css +54 -0
  91. data/app/assets/stylesheets/refinery/photo_gallery/fancybox/jquery.fancybox.css.scss +234 -0
  92. data/app/controllers/refinery/photo_gallery/admin/albums_controller.rb +23 -0
  93. data/app/controllers/refinery/photo_gallery/admin/collections_controller.rb +10 -0
  94. data/app/controllers/refinery/photo_gallery/admin/photos_controller.rb +67 -0
  95. data/app/controllers/refinery/photo_gallery/albums_controller.rb +21 -0
  96. data/app/controllers/refinery/photo_gallery/collections_controller.rb +28 -0
  97. data/app/helpers/refinery/photo_gallery/admin/photos_helper.rb +10 -0
  98. data/app/helpers/refinery/photo_gallery/albums_helper.rb +11 -0
  99. data/app/helpers/refinery/photo_gallery/photo_gallery_helper.rb +58 -0
  100. data/app/middleware/refinery/photo_gallery/admin/flash_session_cookie_middleware.rb +27 -0
  101. data/app/models/refinery/photo_gallery/album.rb +60 -0
  102. data/app/models/refinery/photo_gallery/collection.rb +29 -0
  103. data/app/models/refinery/photo_gallery/collection_album.rb +8 -0
  104. data/app/models/refinery/photo_gallery/photo.rb +54 -0
  105. data/app/uploaders/refinery/photo_gallery/admin/file_uploader.rb +121 -0
  106. data/app/views/refinery/photo_gallery/admin/_submenu.html.erb +44 -0
  107. data/app/views/refinery/photo_gallery/admin/albums/_album.html.erb +31 -0
  108. data/app/views/refinery/photo_gallery/admin/albums/_form.html.erb +78 -0
  109. data/app/views/refinery/photo_gallery/admin/albums/_sortable_list.html.erb +7 -0
  110. data/app/views/refinery/photo_gallery/admin/albums/edit.html.erb +2 -0
  111. data/app/views/refinery/photo_gallery/admin/albums/index.html.erb +28 -0
  112. data/app/views/refinery/photo_gallery/admin/albums/new.html.erb +2 -0
  113. data/app/views/refinery/photo_gallery/admin/collections/_collection.html.erb +23 -0
  114. data/app/views/refinery/photo_gallery/admin/collections/_form.html.erb +32 -0
  115. data/app/views/refinery/photo_gallery/admin/collections/_sortable_list.html.erb +7 -0
  116. data/app/views/refinery/photo_gallery/admin/collections/edit.html.erb +2 -0
  117. data/app/views/refinery/photo_gallery/admin/collections/index.html.erb +28 -0
  118. data/app/views/refinery/photo_gallery/admin/collections/new.html.erb +2 -0
  119. data/app/views/refinery/photo_gallery/admin/collections/test.html.erb +39 -0
  120. data/app/views/refinery/photo_gallery/admin/photos/_destroy.js.erb +15 -0
  121. data/app/views/refinery/photo_gallery/admin/photos/_form.html.erb +7 -0
  122. data/app/views/refinery/photo_gallery/admin/photos/_form_actions.html.erb +6 -0
  123. data/app/views/refinery/photo_gallery/admin/photos/_form_fields.html.erb +31 -0
  124. data/app/views/refinery/photo_gallery/admin/photos/_form_fields_actions.html.erb +15 -0
  125. data/app/views/refinery/photo_gallery/admin/photos/edit_multiple.html.erb +9 -0
  126. data/app/views/refinery/photo_gallery/admin/photos/upload.html.erb +87 -0
  127. data/app/views/refinery/photo_gallery/albums/show.html.erb +26 -0
  128. data/app/views/refinery/photo_gallery/collections/index.html.erb +9 -0
  129. data/app/views/refinery/photo_gallery/collections/show.html.erb +19 -0
  130. data/app/views/refinery/photo_gallery/shared/_layout.html.erb +22 -0
  131. data/app/views/refinery/photo_gallery/shared/_submenu.html.erb +4 -0
  132. data/config/initializers/carrierwave.rb +7 -0
  133. data/config/initializers/form_builder.rb +26 -0
  134. data/config/initializers/refinery/core.rb +10 -0
  135. data/config/initializers/s3.rb +13 -0
  136. data/config/initializers/session_store.rb +10 -0
  137. data/config/locales/en.yml +95 -0
  138. data/config/locales/sk.yml +94 -0
  139. data/config/routes.rb +37 -0
  140. data/db/migrate/20120804063842_create_albums.rb +18 -0
  141. data/db/migrate/20120805131321_create_collections.rb +14 -0
  142. data/db/migrate/20120805131547_create_collection_albums.rb +12 -0
  143. data/db/migrate/20120805165238_create_photos.rb +19 -0
  144. data/db/migrate/20120805222125_add_indexes.rb +24 -0
  145. data/db/seeds.rb +21 -0
  146. data/lib/generators/refinery/photo_gallery_generator.rb +25 -0
  147. data/lib/generators/refinery/templates/config/initializers/refinery/photo_gallery.rb.erb +40 -0
  148. data/lib/refinery/photo_gallery.rb +30 -0
  149. data/lib/refinery/photo_gallery/configuration.rb +33 -0
  150. data/lib/refinery/photo_gallery/engine.rb +33 -0
  151. data/lib/refinery/photo_gallery/version.rb +17 -0
  152. data/lib/refinerycms-photo-gallery.rb +1 -0
  153. data/refinerycms-balder-photo-gallery.gemspec +30 -0
  154. data/screenshots/01_collections#index.png +0 -0
  155. data/screenshots/02_albums#create.png +0 -0
  156. data/screenshots/03_photos#upload.png +0 -0
  157. data/screenshots/04_photos#upload- chooser.png +0 -0
  158. data/screenshots/05_photo#upoad-queue.png +0 -0
  159. data/screenshots/06_photos#upload-uploading.png +0 -0
  160. data/screenshots/07_photos#upload-uploading_2.png +0 -0
  161. data/screenshots/08_photos#edit_multiple.png +0 -0
  162. data/screenshots/09_albums#index.png +0 -0
  163. data/screenshots/10_albums_EXIF_reading.png +0 -0
  164. data/screenshots/11_frontend_show.png +0 -0
  165. data/screenshots/12_show_photo_using_fancybox.png +0 -0
  166. metadata +323 -0
@@ -0,0 +1,27 @@
1
+ =begin
2
+ #TODO fix Flash runtime
3
+ require 'rack/utils'
4
+
5
+ module Refinery
6
+ module PhotoGallery
7
+ module Admin
8
+ class FlashSessionCookieMiddleware
9
+ def initialize(app, session_key = '_session_id')
10
+ @app = app
11
+ @session_key = session_key
12
+ end
13
+
14
+ def call(env)
15
+ if env['HTTP_USER_AGENT'] =~ /^(Adobe|Shockwave) Flash/
16
+ req = Rack::Request.new(env)
17
+ env['HTTP_COOKIE'] = [ @session_key,
18
+ req.params[@session_key] ].join('=').freeze unless req.params[@session_key].nil?
19
+ env['HTTP_ACCEPT'] = "#{req.params['_http_accept']}".freeze unless req.params['_http_accept'].nil?
20
+ end
21
+ @app.call(env)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ =end
@@ -0,0 +1,60 @@
1
+ module Refinery
2
+ module PhotoGallery
3
+ class Album < ActiveRecord::Base
4
+ has_many :photos, :dependent => :destroy
5
+ has_many :collection_albums , :dependent => :destroy
6
+ has_many :collections, :through => :collection_albums
7
+
8
+ before_validation :set_path
9
+ validates :title, :presence => true
10
+ validates :path, :presence => true, :uniqueness => true
11
+
12
+ attr_accessor :path_prefix
13
+ attr_accessible :title, :description, :address, :note, :tags, :longitude, :latitude, :path, :path_prefix, :collection_ids
14
+ acts_as_indexed :fields => [:title, :description]
15
+
16
+ self.per_page = Refinery::PhotoGallery.albums_per_page
17
+
18
+ scope :find_by_collection_id, lambda {|collection_id|
19
+ select("refinery_photo_gallery_albums.*").
20
+ joins(:collection_albums).
21
+ where("refinery_photo_gallery_collection_albums.collection_id = ?
22
+ ", collection_id).
23
+ order('created_at DESC, title ASC')
24
+ }
25
+ =begin
26
+ #TODO marked photo as photo album preview
27
+ scope :find_by_collection_id, lambda {|collection_id|
28
+ select("refinery_photo_gallery_albums.*, refinery_photo_gallery_photos.file").
29
+ joins(:collection_albums, :photos).
30
+ where("refinery_photo_gallery_collection_albums.collection_id = ? AND
31
+ refinery_photo_gallery_photos.album_id = refinery_photo_gallery_albums.id AND
32
+ refinery_photo_gallery_photos.preview_image = true
33
+ ", collection_id).
34
+ order('created_at DESC, title ASC')
35
+ }
36
+ =end
37
+
38
+
39
+ def collection_ids
40
+ Refinery::PhotoGallery::CollectionAlbum.select('collection_id').where("album_id = ?", self.id ).map{|ca| ca.collection_id }
41
+ end
42
+
43
+
44
+ =begin # Prety url. Problems with :id
45
+ def to_param
46
+ "#{id}-#{title.parameterize}"
47
+ end
48
+ =end
49
+ def set_path
50
+ #Replaces special characters in tile
51
+
52
+ if self.path_prefix.blank?
53
+ self.path = self.title.parameterize
54
+ else
55
+ self.path = [self.path_prefix, self.title.parameterize].join('-')
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,29 @@
1
+ module Refinery
2
+ module PhotoGallery
3
+ class Collection < ActiveRecord::Base
4
+ has_many :collection_albums
5
+ has_many :albums, :through => :collection_albums
6
+
7
+ #TODO Allow to remove collection only if no album belongs to it
8
+
9
+ attr_accessible :title, :description
10
+
11
+ validates :title, :presence => true
12
+ acts_as_indexed :fields => [:title, :description]
13
+
14
+ self.per_page = Refinery::PhotoGallery.collections_per_page
15
+
16
+ scope :has_albums, lambda {
17
+ select("refinery_photo_gallery_collections.*").uniq.
18
+ joins(:collection_albums).
19
+ order('created_at DESC, title ASC')
20
+ }
21
+ =begin
22
+ def to_param
23
+ "#{id}-#{title.parameterize}"
24
+ end
25
+ =end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ module Refinery
2
+ module PhotoGallery
3
+ class CollectionAlbum < ActiveRecord::Base
4
+ belongs_to :album
5
+ belongs_to :collection
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,54 @@
1
+ module Refinery
2
+ module PhotoGallery
3
+ class Photo < ActiveRecord::Base
4
+ belongs_to :album
5
+
6
+ mount_uploader :file, Refinery::PhotoGallery::Admin::FileUploader
7
+ acts_as_indexed :fields => [:title, :description]
8
+ attr_accessible :album_id, :title, :description, :longitude, :latitude
9
+ validates :title, :presence => true
10
+ #TODO validate latitude/longitude - convert from nondecimal to decimal using inspiration from https://github.com/airblade/geo_tools/tree/master/lib/geo_tools
11
+
12
+ before_validation :set_title
13
+ before_create :exif_read
14
+ #before_update :exif_write #TODO or use it after update?
15
+ #TODO delete photo path from db? is it used?
16
+
17
+ self.per_page = Refinery::PhotoGallery.photos_per_page
18
+
19
+ def to_param
20
+ "#{id}-#{title.parameterize}"
21
+ end
22
+
23
+ private
24
+
25
+ def set_title
26
+ self.title = self.file.file.basename.titleize unless self.title
27
+ end
28
+
29
+ def exif_read
30
+ photo = MiniExiftool.new(self.file.file.file, {:numerical=> true})
31
+ self.longitude = photo.GPSLongitude if self.longitude.nil?
32
+ self.latitude = photo.GPSLatitude if self.latitude.nil?
33
+ self.title = photo.DocumentName if photo.DocumentName.present?
34
+ self.description = photo.ImageDescription if self.description.nil? && photo.ImageDescription != 'Exif_JPEG_PICTURE'
35
+ # TODO read keywords from exif
36
+ end
37
+
38
+ =begin
39
+ #TODO add checkbox to check if it should be writed to exif, globally on/off writing
40
+ def exif_write
41
+ # should only write if tags are changed as images can be large and thus ExifTool will take a while to write to the file
42
+ photo = MiniExiftool.new(self.file.file.file)
43
+ photo.GPSLongitude = self.longitude
44
+ photo.GPSLatitude = self.latitude
45
+ photo.DocumentName = self.title
46
+ photo.ImageDescription = self.description
47
+ photo.Keywords = self.tags
48
+ photo.save
49
+ end
50
+ =end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,121 @@
1
+ # encoding: utf-8
2
+
3
+ #TODO tests
4
+ module Refinery
5
+ module PhotoGallery
6
+ module Admin
7
+ class FileUploader < CarrierWave::Uploader::Base
8
+ before :store, :remember_cache_id
9
+ after :store, :delete_tmp_dir
10
+ after :store, :delete_uploaded_file
11
+
12
+
13
+ # Include RMagick or ImageScience support
14
+ # include CarrierWave::RMagick
15
+ # include CarrierWave::ImageScience
16
+ include CarrierWave::MiniMagick
17
+
18
+ #TODO
19
+ # Choose what kind of storage to use for this uploader
20
+ if ENV['S3_KEY']
21
+ storage :fog
22
+
23
+ def cache_dir
24
+ "#{Rails.root.to_s}/tmp/uploads" if ENV['HEROKU'] == 'true'
25
+ end
26
+ else
27
+ storage :file
28
+ end
29
+
30
+ =begin
31
+ #Fix for bug TypeError: can't convert nil into String #TODO it should work without this method, but don't. Why?
32
+ def to_s
33
+ store_dir + '/' + full_filename(original_filename)
34
+ end
35
+ =end
36
+
37
+ # Override the directory where uploaded files will be stored
38
+ # This is a sensible default for uploaders that are meant to be mounted:
39
+ def store_dir
40
+ "files/#{model.album.path}"
41
+ end
42
+
43
+ def cache_dir
44
+ "tmp"
45
+ end
46
+
47
+ # Provide a default URL as a default if there hasn't been a file uploaded
48
+ # def default_url
49
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
50
+ # end
51
+
52
+ # Process files as they are uploaded.
53
+ # process :scale => [200, 300]
54
+ #
55
+ # def scale(width, height)
56
+ # # do something
57
+ # end
58
+
59
+ # Create different versions of your uploaded files
60
+ version :collection do
61
+ process :resize_to_fill => Refinery::PhotoGallery.collection_dimensions
62
+ def store_dir
63
+ "thumbs/#{model.album.path}"
64
+ end
65
+ end
66
+ version :album do
67
+ process :resize_to_fill => Refinery::PhotoGallery.album_dimensions
68
+ def store_dir
69
+ "thumbs/#{model.album.path}"
70
+ end
71
+ end
72
+ version :preview do
73
+ process :resize_to_fit => Refinery::PhotoGallery.preview_dimensions
74
+ def store_dir
75
+ "thumbs/#{model.album.path}"
76
+ end
77
+ end
78
+ version :single do
79
+ process :resize_to_limit => Refinery::PhotoGallery.single_dimensions
80
+ def store_dir
81
+ "thumbs/#{model.album.path}"
82
+ end
83
+ end
84
+
85
+ # Add a white list of extensions which are allowed to be uploaded,
86
+ def extension_white_list
87
+ Refinery::PhotoGallery.extension_white_list
88
+ end
89
+
90
+ # Override the filename of the uploaded files
91
+ # def filename
92
+ # "something.jpg" if original_filename
93
+ # end
94
+
95
+
96
+ # Deleting uploaded file in files/ dir. This method dont do removing of original file in tmp
97
+ def delete_uploaded_file(new_file)
98
+ if version_name.blank? && Refinery::PhotoGallery.delete_uploaded_file
99
+ filename_to_delete = File.join(Rails.root.to_s,Refinery::PhotoGallery.photo_gallery_dir_relative_to_root, store_dir, filename )
100
+ File.delete(filename_to_delete)
101
+ end
102
+ end
103
+
104
+ # store! nil's the cache_id after it finishes so we need to remember it for deletion
105
+ def remember_cache_id(new_file)
106
+ @cache_id_was = cache_id
107
+ end
108
+
109
+ # Delete empty dir after restoring cached files to thumb dir. If an error during uploading occured, tmp dir will not be deleted, because will not be empty.
110
+ def delete_tmp_dir(new_file)
111
+ # versions hash is inicialized after storing all versions. We want to delete folder after all versions are restored
112
+ # make sure we don't delete other things accidentally by checking the name pattern
113
+ if versions.length > 0 && @cache_id_was.present? && @cache_id_was =~ /\A[\d]{8}\-[\d]{4}\-[\d]+\-[\d]{4}\z/
114
+ FileUtils.rm_rf(File.join(Rails.root.to_s,Refinery::PhotoGallery.photo_gallery_dir_relative_to_root, cache_dir, @cache_id_was))
115
+ end
116
+ end
117
+
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,44 @@
1
+ <nav id='actions' class='multilist'>
2
+ <ul class='search_list'>
3
+ <li class='not_a_link'>
4
+ <%= render :partial => "/refinery/admin/search",
5
+ :locals => {
6
+ :url => refinery.photo_gallery_admin_collections_path
7
+ } %>
8
+ </li>
9
+ </ul>
10
+
11
+ <ul class='collapsible_menu'>
12
+ <li class='not_a_link'>
13
+ <%= link_to t('.collections.title'), '#',
14
+ :class => 'folder_icon' %>
15
+ </li>
16
+ <li>
17
+ <%= link_to t('.collections.manage'), refinery.photo_gallery_admin_collections_path,
18
+ :class => 'folder_edit_icon' %>
19
+ </li>
20
+ <li>
21
+ <%= link_to t('.collections.new'), refinery.new_photo_gallery_admin_collection_path,
22
+ :class => 'folder_add_icon' %>
23
+ </li>
24
+ </ul>
25
+
26
+ <ul class='collapsible_menu'>
27
+ <li class='not_a_link'>
28
+ <%= link_to t('.albums.title'), '#',
29
+ :class => 'album_icon' %>
30
+ </li>
31
+ <li>
32
+ <%= link_to t('.albums.manage'), refinery.photo_gallery_admin_albums_path,
33
+ :class => 'album_edit_icon' %>
34
+ </li>
35
+ <li>
36
+ <%= link_to t('.albums.new'), refinery.new_photo_gallery_admin_album_path,
37
+ :class => 'album_add_icon' %>
38
+ </li>
39
+ </ul>
40
+
41
+
42
+ </nav>
43
+
44
+ <% content_for :stylesheets, stylesheet_link_tag('refinery/photo_gallery/admin/backend') %>
@@ -0,0 +1,31 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(album) -%>">
2
+ <span class='title'>
3
+ <%= album.title %>
4
+ <%#= album.photos.count %>
5
+ <span class="preview">
6
+ <%= album.created_at.try(:strftime, '%b %d, %Y') %>
7
+ </span>
8
+ </span>
9
+ <span class='actions'>
10
+ <%#= link_to refinery_icon_tag("application_go.png"), refinery.photo_gallery_album_path(album),
11
+ :title => t('.view_live_html'),
12
+ :target => "_blank" %>
13
+
14
+ <%= link_to (image_tag 'refinery/photo_gallery/admin/icons/photo_add.png'),
15
+ refinery.upload_photo_gallery_admin_album_photos_path(album),
16
+ :title => t('.upload_photos') %>
17
+ <%= link_to (image_tag 'refinery/photo_gallery/admin/icons/photo_edit.png'),
18
+ refinery.edit_multiple_photo_gallery_admin_album_photos_path(album),
19
+ :title => t('.edit_photos') %>
20
+ <%= link_to (image_tag 'refinery/photo_gallery/admin/icons/album_edit.png'),
21
+ refinery.edit_photo_gallery_admin_album_path(album),
22
+ :title => t('.edit') %>
23
+ <%= link_to refinery_icon_tag("delete.png"), refinery.photo_gallery_admin_album_path(album),
24
+ :class => "cancel confirm-delete",
25
+ :title => t('.delete'),
26
+ :method => :delete,
27
+ :data => {
28
+ :confirm => t('message', :scope => 'refinery.admin.delete', :title => album.title)
29
+ } %>
30
+ </span>
31
+ </li>
@@ -0,0 +1,78 @@
1
+ <%= form_for [refinery, :photo_gallery_admin, @album] do |f| -%>
2
+ <% album_photos_count = @album.photos.count #reduce sql queries%>
3
+ <%= render :partial => "/refinery/admin/error_messages",
4
+ :locals => {
5
+ :object => f.object,
6
+ :include_object_name => true
7
+ } %>
8
+
9
+ <div class='field'>
10
+ <%= f.label :title, :class=>"required" %><br />
11
+ <%= f.text_field :title, {:class => 'larger widest'} %><br />
12
+ </div>
13
+
14
+ <%# TODO use pop up to create collection %>
15
+ <div class='field'>
16
+ <%= label :collection, t('.album_belongs_to_collection') %>
17
+ <%= collection_select(:album, :collection_ids, Refinery::PhotoGallery::Collection.all(:order=> "title ASC"), :id, :title,
18
+ { },
19
+ { :data => {:placeholder=> t('.choose_collection')}, :multiple=> true, :class=> "chzn-select", :style=>"width:400px;"}) %>
20
+ </div>
21
+
22
+ <% if @album.title.blank? || @album.path.blank? # during creating album %>
23
+ <div class='field'>
24
+ <%= f.label :path_prefix, t('.path_prefix') %><br />
25
+ <%= f.text_field :path_prefix, :size=> 5, :maxlength=> 5 %><br />
26
+ </div>
27
+ <% elsif album_photos_count == 0 # allow to edit path only if there are no photos in album %>
28
+ <%#TODO if there are some photos in album, we must change folder paths on disk %>
29
+ <div class='field'>
30
+ <%= f.label :path %><br />
31
+ <%= f.text_field :path %><br />
32
+ </div>
33
+ <% end %>
34
+
35
+ <div class='field'>
36
+ <%= f.label :description %><br />
37
+ <%= f.text_area :description, :cols=>'65', :rows=>'7' %><br />
38
+ </div>
39
+
40
+ <div id="more_photo_options_field">
41
+ <p><a href="#" id="toggle_advanced_options" title="<%= t('.more_options_tooltip') %>"><%= t('.more_options') %></a></p>
42
+ </div>
43
+
44
+ <div id="more_options" style="display: none;">
45
+ <div class='field'>
46
+ <%= f.label :address %><br />
47
+ <%= f.text_area :address, { :rows => 3} %><br />
48
+ </div>
49
+
50
+ <div class='field'>
51
+ <%= f.label :latitude %><br />
52
+ <%= f.text_field :latitude %><br />
53
+ </div>
54
+
55
+ <div class='field'>
56
+ <%= f.label :longitude %><br />
57
+ <%= f.text_field :longitude %><br />
58
+ </div>
59
+
60
+
61
+ <div class='field'>
62
+ <%= f.label :note %><br />
63
+ <%= f.text_area :note, :cols=>65, :rows=> 7 %><br />
64
+ </div>
65
+ </div>
66
+
67
+
68
+ <br />
69
+ <%= t('.number_of_photos', :number=> album_photos_count ) %><br/>
70
+
71
+
72
+ <%= render :partial => "/refinery/admin/form_actions",
73
+ :locals => {
74
+ :f => f,
75
+ :continue_editing => false,
76
+ :delete_title => t('delete', :scope => 'refinery.photo_gallery.admin.albums.album')
77
+ } %>
78
+ <% end %>