gallery 0.0.11
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.
- data/MIT-LICENSE +20 -0
- data/Rakefile +34 -0
- data/app/assets/javascripts/gallery/admin/admin.js +2 -0
- data/app/assets/javascripts/gallery/admin/albums.js +2 -0
- data/app/assets/javascripts/gallery/albums.js +2 -0
- data/app/assets/javascripts/gallery/application.js +13 -0
- data/app/assets/javascripts/gallery/gallery.js.coffee +229 -0
- data/app/assets/javascripts/gallery/images_loaded.js +6 -0
- data/app/assets/javascripts/gallery/omniauth_callbacks.js +2 -0
- data/app/assets/javascripts/gallery/photos.js +2 -0
- data/app/assets/javascripts/gallery/spinner.js +1 -0
- data/app/assets/stylesheets/gallery/admin/admin.css +4 -0
- data/app/assets/stylesheets/gallery/admin/albums.css +4 -0
- data/app/assets/stylesheets/gallery/albums.css +4 -0
- data/app/assets/stylesheets/gallery/application.css +13 -0
- data/app/assets/stylesheets/gallery/omniauth_callbacks.css +4 -0
- data/app/assets/stylesheets/gallery/photos.css +4 -0
- data/app/assets/stylesheets/gallery/style.css.scss +193 -0
- data/app/controllers/gallery/admin/admin_controller.rb +14 -0
- data/app/controllers/gallery/admin/albums_controller.rb +36 -0
- data/app/controllers/gallery/albums_controller.rb +9 -0
- data/app/controllers/gallery/application_controller.rb +4 -0
- data/app/controllers/gallery/omniauth_callbacks_controller.rb +27 -0
- data/app/controllers/gallery/photos_controller.rb +23 -0
- data/app/helpers/gallery/admin/admin_helper.rb +4 -0
- data/app/helpers/gallery/admin/albums_helper.rb +4 -0
- data/app/helpers/gallery/albums_helper.rb +4 -0
- data/app/helpers/gallery/application_helper.rb +4 -0
- data/app/helpers/gallery/omniauth_callbacks_helper.rb +4 -0
- data/app/helpers/gallery/photos_helper.rb +4 -0
- data/app/models/gallery/album.rb +66 -0
- data/app/models/gallery/identity.rb +43 -0
- data/app/models/gallery/photo.rb +14 -0
- data/app/views/gallery/admin/admin/index.html.erb +46 -0
- data/app/views/gallery/admin/albums/show.html.erb +14 -0
- data/app/views/gallery/albums/_admin_album_element.html.erb +18 -0
- data/app/views/gallery/albums/_album_element.html.erb +15 -0
- data/app/views/gallery/albums/index.html.erb +9 -0
- data/config/initializers/omniauth.rb +18 -0
- data/config/routes.rb +22 -0
- data/db/migrate/20130806170912_create_gallery_identities.rb +14 -0
- data/db/migrate/20130806212451_add_token_to_identity.rb +5 -0
- data/db/migrate/20130806213308_create_gallery_albums.rb +19 -0
- data/db/migrate/20130806214102_create_gallery_photos.rb +18 -0
- data/db/migrate/20130806221405_add_public_to_album.rb +5 -0
- data/db/migrate/20130806221438_add_public_to_photo.rb +5 -0
- data/db/migrate/20130807113616_add_thumbnail_to_photo.rb +6 -0
- data/lib/gallery.rb +4 -0
- data/lib/gallery/engine.rb +9 -0
- data/lib/gallery/version.rb +3 -0
- data/lib/tasks/gallery_tasks.rake +4 -0
- data/test/controllers/gallery/admin/admin_controller_test.rb +9 -0
- data/test/controllers/gallery/admin/albums_controller_test.rb +9 -0
- data/test/controllers/gallery/albums_controller_test.rb +9 -0
- data/test/controllers/gallery/omniauth_callbacks_controller_test.rb +9 -0
- data/test/controllers/gallery/photos_controller_test.rb +9 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +23 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +29 -0
- data/test/dummy/config/environments/production.rb +80 -0
- data/test/dummy/config/environments/test.rb +36 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +12 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/public/404.html +58 -0
- data/test/dummy/public/422.html +58 -0
- data/test/dummy/public/500.html +57 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/fixtures/gallery/albums.yml +23 -0
- data/test/fixtures/gallery/identities.yml +13 -0
- data/test/fixtures/gallery/photos.yml +21 -0
- data/test/gallery_test.rb +7 -0
- data/test/helpers/gallery/admin/admin_helper_test.rb +6 -0
- data/test/helpers/gallery/admin/albums_helper_test.rb +6 -0
- data/test/helpers/gallery/albums_helper_test.rb +6 -0
- data/test/helpers/gallery/omniauth_callbacks_helper_test.rb +6 -0
- data/test/helpers/gallery/photos_helper_test.rb +6 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/models/gallery/album_test.rb +9 -0
- data/test/models/gallery/identity_test.rb +9 -0
- data/test/models/gallery/photo_test.rb +9 -0
- data/test/test_helper.rb +15 -0
- metadata +324 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require_dependency "gallery/application_controller"
|
|
2
|
+
|
|
3
|
+
module Gallery
|
|
4
|
+
class Admin::AdminController < ApplicationController
|
|
5
|
+
before_filter :login_required
|
|
6
|
+
def index
|
|
7
|
+
@identities = Identity.all
|
|
8
|
+
@public_albums = Album.published
|
|
9
|
+
@private_albums = Album.private
|
|
10
|
+
configpath = Rails.root.join('config', 'gallery_api_keys.yml')
|
|
11
|
+
@providers = YAML.load(ERB.new(File.new(configpath).read).result).keys
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require_dependency "gallery/application_controller"
|
|
2
|
+
|
|
3
|
+
module Gallery
|
|
4
|
+
class Admin::AlbumsController < ApplicationController
|
|
5
|
+
|
|
6
|
+
before_filter :login_required
|
|
7
|
+
|
|
8
|
+
def fetch_albums
|
|
9
|
+
Identity.all.each(&:fetch_albums)
|
|
10
|
+
redirect_to :back, :notice => "Albums fetched"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def set_public
|
|
14
|
+
album = Album.find(params[:album_id])
|
|
15
|
+
album.update_attributes(:public => true)
|
|
16
|
+
redirect_to :back, :notice => "Album #{album.name} set public"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def set_private
|
|
20
|
+
album = Album.find(params[:album_id])
|
|
21
|
+
album.update_attributes(:public => false)
|
|
22
|
+
redirect_to :back, :notice => "Album #{album.name} set private"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def fetch_photos
|
|
26
|
+
album = Album.find(params[:album_id])
|
|
27
|
+
album.fetch_photos
|
|
28
|
+
redirect_to :back, :notice => "Photos fetched"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def show
|
|
32
|
+
@album = Album.find(params[:id])
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
require_dependency "gallery/application_controller"
|
|
2
|
+
|
|
3
|
+
module Gallery
|
|
4
|
+
class OmniauthCallbacksController < ApplicationController
|
|
5
|
+
def callback
|
|
6
|
+
@omniauth_hash = request.env["omniauth.auth"]
|
|
7
|
+
@omniauth_hash.provider = 'google' if @omniauth_hash.provider == "google_oauth2"
|
|
8
|
+
|
|
9
|
+
identity = Identity.find_by_uid_and_provider(@omniauth_hash.uid, @omniauth_hash.provider)
|
|
10
|
+
identity.update_attributes({:token => @omniauth_hash.credentials.token}) if identity
|
|
11
|
+
identity = Identity.create parse_omniauth_hash_to_identity(@omniauth_hash) unless identity
|
|
12
|
+
|
|
13
|
+
redirect_to admin_path
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def parse_omniauth_hash_to_identity(omniauth_hash)
|
|
17
|
+
case omniauth_hash.provider
|
|
18
|
+
when 'facebook'
|
|
19
|
+
return { :uid => @omniauth_hash.uid, :provider => @omniauth_hash.provider, :token => @omniauth_hash.credentials.token, :name => @omniauth_hash.info.name, :link => @omniauth_hash.extra.raw_info.link }
|
|
20
|
+
when 'eyeem'
|
|
21
|
+
return { :uid => @omniauth_hash.uid, :provider => @omniauth_hash.provider, :token => @omniauth_hash.credentials.token, :name => @omniauth_hash.info.name, :link => @omniauth_hash.extra.raw_info.user.webUrl }
|
|
22
|
+
when 'google'
|
|
23
|
+
return { :uid => @omniauth_hash.uid, :provider => @omniauth_hash.provider, :token => @omniauth_hash.credentials.token, :name => @omniauth_hash.info.name, :link => @omniauth_hash.extra.raw_info.link }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require_dependency "gallery/application_controller"
|
|
2
|
+
|
|
3
|
+
module Gallery
|
|
4
|
+
class PhotosController < ApplicationController
|
|
5
|
+
respond_to :json
|
|
6
|
+
|
|
7
|
+
if respond_to?('caches_action')
|
|
8
|
+
caches_action :index
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def index
|
|
12
|
+
album = Album.find_by_id(params[:album_id])
|
|
13
|
+
album = Album.find_by_uid_and_provider(params[:album_id].split('-').first, params[:album_id].split('-').last) unless album
|
|
14
|
+
photos = album.photos
|
|
15
|
+
if album.public
|
|
16
|
+
respond_with photos, :only => [:id, :album_id, :source, :name, :aspect_ratio, :thumbnail]
|
|
17
|
+
else
|
|
18
|
+
respond_with []
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Gallery
|
|
2
|
+
class Album < ActiveRecord::Base
|
|
3
|
+
validates :uid, :uniqueness => { :scope => :provider }
|
|
4
|
+
|
|
5
|
+
has_many :photos, :dependent => :destroy
|
|
6
|
+
belongs_to :identity, :touch => true
|
|
7
|
+
|
|
8
|
+
scope :published, -> { where(public: true) }
|
|
9
|
+
scope :private, -> {where(public: false)}
|
|
10
|
+
default_scope order('updated_at DESC')
|
|
11
|
+
|
|
12
|
+
def fetch_photos
|
|
13
|
+
case provider.to_s
|
|
14
|
+
when 'eyeem'
|
|
15
|
+
|
|
16
|
+
client = OAuth2::Client.new('5kkCFgioQ2UgtZwTnpMFPH4FYCYWpkkq', 'RfdwC60OGDQOCaPssQIqiAbG5Y5HWzwG', :site => 'https://www.eyeem.com', :parse_json => true)
|
|
17
|
+
access_token = OAuth2::AccessToken.new(client, identity.token, :site => 'https://eyeem.com/')
|
|
18
|
+
response = JSON.parse(access_token.get('/api/v2/users/me/photos?detailed=1').body)
|
|
19
|
+
|
|
20
|
+
raw_photos = response['photos']['items']
|
|
21
|
+
|
|
22
|
+
processed_photos = []
|
|
23
|
+
|
|
24
|
+
Album.transaction do
|
|
25
|
+
processed_photos = raw_photos.map { |photo| photos.create :uid => photo['id'], :provider => :eyeem, :thumbs => {}, :source => photo['photoUrl'], :name => photo['id'], :url => photo['webUrl'], :aspect_ratio => photo['width']/photo['height'].to_f, :lat => (photo['latitude'] == '' ? nil : photo['latitude']), :long => (photo['longitude'] == '' ? nil : photo['longitude']), :taken_at => DateTime.parse(photo['updated']), :like_count => photo['totalLikes'], :comment_count => photo['totalComments'], :filter_name => (photo.has_key?('filter') ? photo['filter'] : nil) }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# fetch more if we have created them all and not empty
|
|
29
|
+
while !processed_photos.map(&:persisted?).any?(&:blank?) and processed_photos.length > 0 do
|
|
30
|
+
limit = response['photos']['limit']
|
|
31
|
+
offset = response['photos']['offset'] + limit
|
|
32
|
+
response = JSON.parse(access_token.get("/api/v2/users/me/photos?detailed=1&limit=#{limit}&offset=#{offset}").body)
|
|
33
|
+
raw_photos = response['photos']['items']
|
|
34
|
+
|
|
35
|
+
Album.transaction do
|
|
36
|
+
processed_photos = raw_photos.map { |photo| photos.create :uid => photo['id'], :provider => :eyeem, :thumbs => {}, :source => photo['photoUrl'], :name => photo['id'], :url => photo['webUrl'], :aspect_ratio => photo['width']/photo['height'].to_f, :lat => (photo['latitude'] == '' ? nil : photo['latitude']), :long => (photo['longitude'] == '' ? nil : photo['longitude']), :taken_at => DateTime.parse(photo['updated']), :like_count => photo['totalLikes'], :comment_count => photo['totalComments'], :filter_name => (photo.has_key?('filter') ? photo['filter'] : nil) }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
when 'google'
|
|
43
|
+
client = OAuth2::Client.new('1040704984149.apps.googleusercontent.com', 'RHObwIrckTzGtwLA6aRY-vLB', :site => 'https://picasaweb.google.com/data/')
|
|
44
|
+
access_token = OAuth2::AccessToken.new(client, self.identity.token, :site => 'https://picasaweb.google.com/')
|
|
45
|
+
album_response = JSON.parse(access_token.get("/data/feed/api/user/default/albumid/#{uid}?alt=json").body)
|
|
46
|
+
|
|
47
|
+
return unless album_response['feed'].has_key? 'entry'
|
|
48
|
+
|
|
49
|
+
raw_photos = album_response['feed']['entry']
|
|
50
|
+
|
|
51
|
+
Album.transaction do
|
|
52
|
+
processed_photos = raw_photos.map { |photo| photos.create :uid => photo['gphoto$id']['$t'], :provider => :google, :thumbnail => photo['content']['src'].gsub(/\/[^\/]*\z/, '/w512-h512-no/photo'), :url => photo['link'][1]['href'], :name => photo['title']['$t'], :source => photo['content']['src'].gsub(/\/[^\/]*\z/, '/w2048-h2048-no/photo'), :aspect_ratio => photo['gphoto$width']['$t'].to_f/photo['gphoto$height']['$t'].to_f}
|
|
53
|
+
|
|
54
|
+
# only fetch more if all photos were successfully created and we have equal total to per page
|
|
55
|
+
# TODO: actually do this, google right now returns 1000, plenty
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def cover_photo
|
|
62
|
+
photos.first
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Gallery
|
|
2
|
+
class Identity < ActiveRecord::Base
|
|
3
|
+
has_many :albums
|
|
4
|
+
|
|
5
|
+
def fetch_albums(force_fetch = false)
|
|
6
|
+
case provider
|
|
7
|
+
when 'eyeem'
|
|
8
|
+
|
|
9
|
+
album = albums.find_by_provider_and_uid( :eyeem, 'eyeem_identifier')
|
|
10
|
+
album = albums.create :provider => :eyeem, :uid => 'eyeem_identifier', :name => "My Eyeem Photos" unless album
|
|
11
|
+
|
|
12
|
+
album.fetch_photos
|
|
13
|
+
|
|
14
|
+
when 'google'
|
|
15
|
+
|
|
16
|
+
# Load api keys
|
|
17
|
+
|
|
18
|
+
configpath = Rails.root.join('config', 'gallery_api_keys.yml')
|
|
19
|
+
providers = {}
|
|
20
|
+
if File.exists?(configpath)
|
|
21
|
+
|
|
22
|
+
providers = YAML.load(ERB.new(File.new(configpath).read).result)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
return unless providers["google_oauth2"]
|
|
26
|
+
|
|
27
|
+
client = OAuth2::Client.new(providers["google_oauth2"][0], providers["google_oauth2"][1], :site => 'https://picasaweb.google.com/data/')
|
|
28
|
+
access_token = OAuth2::AccessToken.new(client, self.token, :site => 'https://picasaweb.google.com/')
|
|
29
|
+
album_response = JSON.parse(access_token.get('/data/feed/api/user/default?alt=json').body)
|
|
30
|
+
# albums
|
|
31
|
+
raw_albums = album_response['feed']['entry']
|
|
32
|
+
|
|
33
|
+
raw_albums.each do |album|
|
|
34
|
+
processed_album = albums.where({ :uid => album['gphoto$id']['$t'], :provider => 'google', :name => album['title']['$t'], :description => album['summary']['$t'], :url => album['link'][1]['href']}).first_or_create
|
|
35
|
+
|
|
36
|
+
# only fetch if we are forced, or if updated_at is old enough
|
|
37
|
+
processed_album.fetch_photos if force_fetch or processed_album.updated_at < album['updated']['$t']
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Gallery
|
|
2
|
+
class Photo < ActiveRecord::Base
|
|
3
|
+
|
|
4
|
+
validates :uid, :uniqueness => { :scope => :provider }
|
|
5
|
+
validates :source, :presence => true
|
|
6
|
+
validates :url, :presence => true
|
|
7
|
+
validates :uid, :presence => true
|
|
8
|
+
validates :provider, :presence => true
|
|
9
|
+
validates :thumbnail, :presence => true
|
|
10
|
+
validates :aspect_ratio, :presence => true
|
|
11
|
+
|
|
12
|
+
belongs_to :album, :counter_cache => true, :touch => true
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
<% if !@identities.blank? %>
|
|
4
|
+
<h3>All your accounts</h3>
|
|
5
|
+
<% for identity in @identities %>
|
|
6
|
+
<li>
|
|
7
|
+
<%= link_to identity.name, identity.link %>
|
|
8
|
+
</li>
|
|
9
|
+
<% end %>
|
|
10
|
+
<%= link_to "Fetch Albums", admin_fetch_albums_path, :method => :post %>
|
|
11
|
+
<% else %>
|
|
12
|
+
<h3>No Accounts connected</h3>
|
|
13
|
+
<% end %>
|
|
14
|
+
|
|
15
|
+
<% if !@providers.blank? %>
|
|
16
|
+
<h3>Connect other accounts</h3>
|
|
17
|
+
<p>
|
|
18
|
+
I haven't really figured out how to get omniauth routes mounted inside an engine, so for now, you got to initiate the oauth process manually. Below you will see a list of providers currently initialized from your config/gallery_api_keys.yml. Visit "/#{mount_point}/auth/#{provider_name}". It should then show up here.
|
|
19
|
+
</p>
|
|
20
|
+
<% for provider in @providers %>
|
|
21
|
+
<li><%= provider %></li>
|
|
22
|
+
<% end %>
|
|
23
|
+
<% else %>
|
|
24
|
+
|
|
25
|
+
<% end %>
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
<h4>Published Albums</h4>
|
|
29
|
+
|
|
30
|
+
<% if !@public_albums.blank? %>
|
|
31
|
+
<% for album in @public_albums %>
|
|
32
|
+
<%= render "gallery/albums/admin_album_element", album: album %>
|
|
33
|
+
<% end %>
|
|
34
|
+
<% else %>
|
|
35
|
+
<p>You have no published albums</p>
|
|
36
|
+
<% end %>
|
|
37
|
+
|
|
38
|
+
<h4>Published Albums</h4>
|
|
39
|
+
|
|
40
|
+
<% if !@private_albums.blank? %>
|
|
41
|
+
<% for album in @private_albums %>
|
|
42
|
+
<%= render "gallery/albums/admin_album_element", album: album %>
|
|
43
|
+
<% end %>
|
|
44
|
+
<% else %>
|
|
45
|
+
<p>You have no private albums</p>
|
|
46
|
+
<% end %>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<h3><%= @album.name %></h3>
|
|
2
|
+
<p>
|
|
3
|
+
ID: <%= @album.id %> <br>
|
|
4
|
+
UID: <%= @album.uid %> <br>
|
|
5
|
+
Provider: <%= @album.provider %>
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
<% if !@album.photos.blank? %>
|
|
9
|
+
<% for photo in @album.photos %>
|
|
10
|
+
<img src="<%= photo.thumbnail %>" alt=" ">
|
|
11
|
+
<% end %>
|
|
12
|
+
<% else %>
|
|
13
|
+
|
|
14
|
+
<% end %>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<div class="gallery-album-admin">
|
|
2
|
+
<img src="<%= album.cover_photo.try(:thumbnail) %>" alt="">
|
|
3
|
+
<h3><%= album.name %></h3>
|
|
4
|
+
<p>
|
|
5
|
+
ID: <%= album.id %> <br>
|
|
6
|
+
UID: <%= album.uid %> <br>
|
|
7
|
+
Provider: <%= album.provider %>
|
|
8
|
+
</p>
|
|
9
|
+
<p>
|
|
10
|
+
<%= link_to (album.public ? "Make Album private" : "Make Album public"), (album.public ? admin_album_private_path(album) : admin_album_public_path(album)), :method => :post %>
|
|
11
|
+
|
|
12
|
+
<br>
|
|
13
|
+
<%= link_to "Fetch Photos", admin_album_fetch_photos_path(album), :method => :post %>
|
|
14
|
+
<br>
|
|
15
|
+
<%= link_to "Go to Album", admin_album_path(album) %>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="gallery-album">
|
|
2
|
+
<h3><%= album.name %></h3>
|
|
3
|
+
<div class="gallery-album-photos">
|
|
4
|
+
<div class="gallery-album-photos-canvas" tabindex="0">
|
|
5
|
+
<% if !album.photos.blank? %>
|
|
6
|
+
<% for photo in album.photos %>
|
|
7
|
+
<img data-src="<%= photo.thumbnail %>" data-big-src="<%= photo.source %>" loaded=false class='' alt="">
|
|
8
|
+
<% end %>
|
|
9
|
+
<% else %>
|
|
10
|
+
|
|
11
|
+
<% end %>
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
configpath = Rails.root.join('config', 'gallery_api_keys.yml')
|
|
2
|
+
providers = {}
|
|
3
|
+
if File.exists?(configpath)
|
|
4
|
+
|
|
5
|
+
providers = YAML.load(ERB.new(File.new(configpath).read).result)
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Rails.application.config.middleware.use OmniAuth::Builder do
|
|
10
|
+
|
|
11
|
+
configure do |config|
|
|
12
|
+
config.path_prefix = '/gallery/auth'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
providers.each do |k,v|
|
|
16
|
+
provider *(v.unshift(k))
|
|
17
|
+
end
|
|
18
|
+
end
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Gallery::Engine.routes.draw do
|
|
2
|
+
namespace :admin do
|
|
3
|
+
post 'fetch_albums' => "albums#fetch_albums"
|
|
4
|
+
resources :albums do
|
|
5
|
+
post 'public' => "albums#set_public"
|
|
6
|
+
post 'private' => "albums#set_private"
|
|
7
|
+
post 'fetch_photos' => "albums#fetch_photos"
|
|
8
|
+
resources :photos do
|
|
9
|
+
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
get '' => "admin#index"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
resources :albums do
|
|
16
|
+
resources :photos
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
get "auth/:provider/callback" => "omniauth_callbacks#callback"
|
|
20
|
+
|
|
21
|
+
get '' => "albums#index", :as => :gallery_root
|
|
22
|
+
end
|