Add venue_photos model and venue_photos admin controller in order to add more images to Venues and allow to delete it.

Show the additional photos in splash. Added fancybox gem for zoom when click on the additional photo.

fix #777
This commit is contained in:
David Sedeño 2016-02-13 17:12:03 +01:00
parent 2034c0f965
commit 7c0cd30dda
13 changed files with 85 additions and 7 deletions

View file

@ -127,6 +127,9 @@ gem 'bootstrap-switch-rails', '~> 3.0.0'
gem 'ruby-oembed' gem 'ruby-oembed'
# for zoom in images
gem 'fancybox2-rails'
# Use guard and spring for testing in development # Use guard and spring for testing in development
group :development do group :development do
# rspec Guard rules # rspec Guard rules

View file

@ -159,6 +159,8 @@ GEM
factory_girl_rails (4.6.0) factory_girl_rails (4.6.0)
factory_girl (~> 4.5.0) factory_girl (~> 4.5.0)
railties (>= 3.0.0) railties (>= 3.0.0)
fancybox2-rails (0.2.8)
railties (>= 3.1.0, < 5.0)
faraday (0.9.0) faraday (0.9.0)
multipart-post (>= 1.2, < 3) multipart-post (>= 1.2, < 3)
ffi (1.9.3) ffi (1.9.3)
@ -491,6 +493,7 @@ DEPENDENCIES
devise devise
devise_ichain_authenticatable devise_ichain_authenticatable
factory_girl_rails factory_girl_rails
fancybox2-rails
font-awesome-rails font-awesome-rails
formtastic (~> 2.3.0.rc3) formtastic (~> 2.3.0.rc3)
formtastic-bootstrap formtastic-bootstrap

View file

@ -38,9 +38,14 @@
//= require osem-switch //= require osem-switch
//= require osem-bootstrap //= require osem-bootstrap
//= require osem-commercials //= require osem-commercials
//= require fancybox
$(document).ready(function() { $(document).ready(function() {
$('a[disabled=disabled]').click(function(event){ $('a[disabled=disabled]').click(function(event){
return false; return false;
}); });
}); });
$(document).ready(function() {
$("a.fancybox").fancybox();
});

View file

@ -14,4 +14,5 @@
*= require bootstrap-datetimepicker *= require bootstrap-datetimepicker
*= require leaflet *= require leaflet
*= require bootstrap3-switch *= require bootstrap3-switch
*= require fancybox
*/ */

View file

@ -39,7 +39,7 @@
} }
} }
} }
#program { #program {
h3 { h3 {
padding-left: 5px; padding-left: 5px;
@ -51,7 +51,7 @@
background-color: #F0FFFF; background-color: #F0FFFF;
} }
} }
#callforpapers { #callforpapers {
.timer-box{ .timer-box{
width: 130px; width: 130px;
@ -60,10 +60,9 @@
border:4px solid #989797; border:4px solid #989797;
} }
} }
#venue { #venue {
padding-top: 0px; padding-top: 0px;
padding-bottom: 0px;
} }
#lodging { #lodging {
@ -89,7 +88,7 @@
} }
} }
} }
#sponsors { #sponsors {
.img-sponsor { .img-sponsor {
max-height: 100px; max-height: 100px;
@ -133,7 +132,7 @@
} }
} }
} }
.scroll-top-wrapper { .scroll-top-wrapper {
position: fixed; position: fixed;
opacity: 0; opacity: 0;
@ -169,4 +168,4 @@
color: white; color: white;
} }
} }
} }

View file

@ -0,0 +1,15 @@
module Admin
class VenuePhotosController < Admin::BaseController
load_and_authorize_resource :conference, find_by: :short_title
load_and_authorize_resource :venue, through: :conference, singleton: true
def destroy
photo = @venue.venue_photos.find(params[:id])
if photo.destroy
redirect_to edit_admin_conference_venue_path(@conference.short_title), notice: 'Photo deleted'
else
redirect_to edit_admin_conference_venue_path(@conference.short_title), alert: 'Photo not deleted'
end
end
end
end

View file

@ -15,6 +15,9 @@ module Admin
@venue = @conference.build_venue(venue_params) @venue = @conference.build_venue(venue_params)
if @venue.save if @venue.save
if params[:venue_photos]
create_additional_photos(@venue, params[:venue_photos])
end
redirect_to admin_conference_venue_path, redirect_to admin_conference_venue_path,
notice: 'Venue was successfully created.' notice: 'Venue was successfully created.'
else else
@ -24,6 +27,9 @@ module Admin
def update def update
if @venue.update_attributes(venue_params) if @venue.update_attributes(venue_params)
if params[:venue_photos]
create_additional_photos(@venue, params[:venue_photos])
end
redirect_to(admin_conference_venue_path(conference_id: @conference.short_title), redirect_to(admin_conference_venue_path(conference_id: @conference.short_title),
notice: 'Venue was successfully updated.') notice: 'Venue was successfully updated.')
else else
@ -46,5 +52,11 @@ module Admin
def venue_params def venue_params
params.require(:venue).permit(:name, :street, :postalcode, :city, :country, :longitude, :latitude, :description, :website, :photo, :lodgings_attributes, :conference_id) params.require(:venue).permit(:name, :street, :postalcode, :city, :country, :longitude, :latitude, :description, :website, :photo, :lodgings_attributes, :conference_id)
end end
def create_additional_photos(venue, photos)
photos.each { |photo|
venue.venue_photos.create(photo: photo )
}
end
end end
end end

View file

@ -1,6 +1,7 @@
class Venue < ActiveRecord::Base class Venue < ActiveRecord::Base
belongs_to :conference belongs_to :conference
has_many :rooms, dependent: :destroy has_many :rooms, dependent: :destroy
has_many :venue_photos, dependent: :destroy
before_create :generate_guid before_create :generate_guid
validates :name, :street, :city, :country, presence: true validates :name, :street, :city, :country, presence: true

View file

@ -0,0 +1,9 @@
class VenuePhoto < ActiveRecord::Base
belongs_to :venue
has_attached_file :photo,
styles: { thumb: '100x100>', large: '300x300>' }
validates_attachment_content_type :photo,
content_type: [/jpg/, /jpeg/, /png/, /gif/],
size: { in: 0..500.kilobytes }
end

View file

@ -11,4 +11,15 @@
- unless @venue.photo.blank? - unless @venue.photo.blank?
= image_tag @venue.photo(:thumb) = image_tag @venue.photo(:thumb)
= f.input :photo = f.input :photo
%label
Additional photos
- @venue.venue_photos.in_groups_of(4, false).each do |photo_group|
.row
- photo_group.each do |photo|
.col-md-3
= image_tag photo.photo(:thumb)
= link_to "Delete", admin_conference_venue_photo_path(@conference.short_title, photo), method: :delete, class: 'btn btn-default', data: { confirm: 'really delete this photo ?' }
%br
= file_field_tag "venue_photos[]", type: :file, multiple: true
%br
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' } = f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }

View file

@ -60,3 +60,8 @@
- if @conference.venue.website - if @conference.venue.website
%br %br
=link_to @conference.venue.website, @conference.venue.website =link_to @conference.venue.website, @conference.venue.website
- @conference.venue.venue_photos.in_groups_of(4, false).each do |photo_group|
.row
- photo_group.each do |photo|
.col-md-3
= link_to image_tag(photo.photo(:thumb), class: 'img-rounded'), photo.photo(:large), class: 'fancybox'

View file

@ -46,6 +46,7 @@ Osem::Application.routes.draw do
resource :splashpage resource :splashpage
resource :venue do resource :venue do
resources :rooms, except: [:show] resources :rooms, except: [:show]
resources :venue_photos, only: [:destroy], as: :photos
end end
resource :registration_period resource :registration_period
resource :program do resource :program do

View file

@ -0,0 +1,13 @@
class CreateVenuePhotos < ActiveRecord::Migration
def change
create_table :venue_photos do |t|
t.integer :venue_id
t.string :photo_file_name
t.string :photo_content_type
t.integer :photo_file_size
t.datetime :photo_updated_at
t.timestamps null: false
end
end
end