edit featured outfits on donation page
This commit is contained in:
parent
59d5e99312
commit
90b45dcecd
10 changed files with 129 additions and 12 deletions
6
app/assets/javascripts/donations/show.js
Normal file
6
app/assets/javascripts/donations/show.js
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
(function() {
|
||||||
|
$('span.choose-outfit select').change(function(e) {
|
||||||
|
var select = $(this);
|
||||||
|
select.closest('li').find('input[type=text]').val(select.val());
|
||||||
|
});
|
||||||
|
})();
|
|
@ -3,3 +3,24 @@ body.donations-show
|
||||||
border: 3px solid $module-border-color
|
border: 3px solid $module-border-color
|
||||||
display: block
|
display: block
|
||||||
margin: 0 auto 1em
|
margin: 0 auto 1em
|
||||||
|
|
||||||
|
#edit-donation
|
||||||
|
ul
|
||||||
|
list-style: none
|
||||||
|
|
||||||
|
label
|
||||||
|
+inline-block
|
||||||
|
width: 16em
|
||||||
|
|
||||||
|
.name input[type=text]
|
||||||
|
width: 10em
|
||||||
|
|
||||||
|
.feature input[type=text]
|
||||||
|
width: 23em
|
||||||
|
|
||||||
|
.choose-outfit
|
||||||
|
font-size: 85%
|
||||||
|
margin-left: 1em
|
||||||
|
|
||||||
|
select
|
||||||
|
width: 10em
|
||||||
|
|
|
@ -6,15 +6,32 @@ class DonationsController < ApplicationController
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@donation = Donation.from_param(params[:id])
|
@donation = Donation.from_param(params[:id])
|
||||||
|
@features = @donation.features
|
||||||
|
@outfits = current_user.outfits.wardrobe_order if user_signed_in?
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@donation = Donation.from_param(params[:id])
|
@donation = Donation.from_param(params[:id])
|
||||||
@donation.update_attributes params[:donation]
|
@donation.update_attributes params[:donation]
|
||||||
@donation.save!
|
|
||||||
|
|
||||||
|
feature_params = params[:feature] || {}
|
||||||
|
@features = @donation.features.find(feature_params.keys)
|
||||||
|
@features.each do |feature|
|
||||||
|
feature.outfit_url = feature_params[feature.id.to_s][:outfit_url]
|
||||||
|
end
|
||||||
|
|
||||||
|
begin
|
||||||
|
Donation.transaction do
|
||||||
|
@donation.save!
|
||||||
|
@features.each(&:save!)
|
||||||
|
end
|
||||||
|
rescue ActiveRecord::RecordInvalid
|
||||||
|
flash[:error] = "Couldn't save donation details. Do those outfits exist?"
|
||||||
|
redirect_to @donation
|
||||||
|
else
|
||||||
flash[:success] = 'Donation details saved! ' +
|
flash[:success] = 'Donation details saved! ' +
|
||||||
'Also, have we thanked you yet today? Thank you!'
|
'Also, have we thanked you yet today? Thank you!'
|
||||||
redirect_to @donation
|
redirect_to @donation
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,11 +12,14 @@ module DonationsHelper
|
||||||
'http://images.neopets.com/new_greetings/71.gif',
|
'http://images.neopets.com/new_greetings/71.gif',
|
||||||
'http://images.neopets.com/new_greetings/72.gif',
|
'http://images.neopets.com/new_greetings/72.gif',
|
||||||
'http://images.neopets.com/new_greetings/103.gif',
|
'http://images.neopets.com/new_greetings/103.gif',
|
||||||
'http://images.neopets.com/new_greetings/145.gif',
|
|
||||||
'http://images.neopets.com/new_greetings/420.gif'
|
'http://images.neopets.com/new_greetings/420.gif'
|
||||||
]
|
]
|
||||||
|
|
||||||
def thank_you_greeting_url
|
def thank_you_greeting_url
|
||||||
THANK_YOU_GREETINGS.sample
|
THANK_YOU_GREETINGS.sample
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def feature_outfit_url(outfit_id)
|
||||||
|
outfit_url(outfit_id) if outfit_id
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
class Donation < ActiveRecord::Base
|
class Donation < ActiveRecord::Base
|
||||||
|
FEATURE_COST = 500 # in cents = $5.00
|
||||||
|
|
||||||
attr_accessible :donor_name
|
attr_accessible :donor_name
|
||||||
|
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
has_many :features, class_name: 'DonationFeature'
|
||||||
|
|
||||||
def to_param
|
def to_param
|
||||||
"#{id}-#{secret}"
|
"#{id}-#{secret}"
|
||||||
|
@ -27,7 +30,17 @@ class Donation < ActiveRecord::Base
|
||||||
donation.user_id = user.try(:id)
|
donation.user_id = user.try(:id)
|
||||||
donation.donor_name = user.try(:name)
|
donation.donor_name = user.try(:name)
|
||||||
donation.secret = new_secret
|
donation.secret = new_secret
|
||||||
|
|
||||||
|
num_features = amount / FEATURE_COST
|
||||||
|
features = []
|
||||||
|
num_features.times do
|
||||||
|
features << donation.features.new
|
||||||
|
end
|
||||||
|
|
||||||
|
Donation.transaction do
|
||||||
donation.save!
|
donation.save!
|
||||||
|
features.each(&:save!)
|
||||||
|
end
|
||||||
|
|
||||||
donation
|
donation
|
||||||
end
|
end
|
||||||
|
|
10
app/models/donation_feature.rb
Normal file
10
app/models/donation_feature.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
class DonationFeature < ActiveRecord::Base
|
||||||
|
belongs_to :donation
|
||||||
|
belongs_to :outfit
|
||||||
|
|
||||||
|
validates :outfit, presence: true, if: :outfit_id?
|
||||||
|
|
||||||
|
def outfit_url=(outfit_url)
|
||||||
|
self.outfit_id = outfit_url.split('/').last rescue nil
|
||||||
|
end
|
||||||
|
end
|
|
@ -1,9 +1,13 @@
|
||||||
- title "Thanks for donating!"
|
- title "Thanks for donating!"
|
||||||
|
|
||||||
= image_tag thank_you_greeting_url, id: 'thank-you'
|
= image_tag thank_you_greeting_url, id: 'thank-you',
|
||||||
|
alt: '"Thank You" Neogreeting'
|
||||||
|
|
||||||
%p
|
%p
|
||||||
%strong Thanks so much!
|
%strong Thanks so much!
|
||||||
|
That's another
|
||||||
|
= number_to_currency(@donation.amount.to_f / 100)
|
||||||
|
toward this year's bills—thanks!
|
||||||
Your support keeps Dress to Impress online and running smoothly,
|
Your support keeps Dress to Impress online and running smoothly,
|
||||||
and we really, truly couldn't do this without you.
|
and we really, truly couldn't do this without you.
|
||||||
Do you feel the love? Because we do <3
|
Do you feel the love? Because we do <3
|
||||||
|
@ -14,7 +18,28 @@
|
||||||
(If you'd rather take care of this later, no worries!
|
(If you'd rather take care of this later, no worries!
|
||||||
Check your email for a copy of this URL.)
|
Check your email for a copy of this URL.)
|
||||||
|
|
||||||
= form_for @donation do |f|
|
= form_for @donation, html: {id: 'edit-donation'} do |f|
|
||||||
= f.label :donor_name, "What's your name?"
|
%ul
|
||||||
|
%li.name
|
||||||
|
= f.label :donor_name, "Your name on the donors page"
|
||||||
= f.text_field :donor_name, placeholder: 'Anonymous'
|
= f.text_field :donor_name, placeholder: 'Anonymous'
|
||||||
= f.submit
|
|
||||||
|
- @features.each do |feature|
|
||||||
|
%li.feature
|
||||||
|
= label_tag "feature[#{feature.id}][outfit_url]", "Featured outfit URL"
|
||||||
|
= text_field_tag "feature[#{feature.id}][outfit_url]",
|
||||||
|
feature_outfit_url(feature.outfit_id),
|
||||||
|
placeholder: outfit_url(12345678)
|
||||||
|
- if user_signed_in?
|
||||||
|
%span.choose-outfit
|
||||||
|
= surround '(', ')' do
|
||||||
|
or choose
|
||||||
|
= select_tag "feature[#{feature.id}][user_outfits]",
|
||||||
|
options_for_select(@outfits.map { |o| [o.name, outfit_url(o)] },
|
||||||
|
feature_outfit_url(feature.outfit_id)),
|
||||||
|
include_blank: true
|
||||||
|
= f.submit 'Save donation details'
|
||||||
|
|
||||||
|
- content_for :javascripts do
|
||||||
|
= include_javascript_libraries :jquery
|
||||||
|
= javascript_include_tag 'donations/show.js'
|
||||||
|
|
10
db/migrate/20140910030549_create_donation_features.rb
Normal file
10
db/migrate/20140910030549_create_donation_features.rb
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
class CreateDonationFeatures < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
create_table :donation_features do |t|
|
||||||
|
t.integer :donation_id, null: false
|
||||||
|
t.integer :outfit_id
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20140910014231) do
|
ActiveRecord::Schema.define(:version => 20140910030549) do
|
||||||
|
|
||||||
create_table "auth_servers", :force => true do |t|
|
create_table "auth_servers", :force => true do |t|
|
||||||
t.string "short_name", :limit => 10, :null => false
|
t.string "short_name", :limit => 10, :null => false
|
||||||
|
@ -99,6 +99,13 @@ ActiveRecord::Schema.define(:version => 20140910014231) do
|
||||||
add_index "contributions", ["contributed_id", "contributed_type"], :name => "index_contributions_on_contributed_id_and_contributed_type"
|
add_index "contributions", ["contributed_id", "contributed_type"], :name => "index_contributions_on_contributed_id_and_contributed_type"
|
||||||
add_index "contributions", ["user_id"], :name => "index_contributions_on_user_id"
|
add_index "contributions", ["user_id"], :name => "index_contributions_on_user_id"
|
||||||
|
|
||||||
|
create_table "donation_features", :force => true do |t|
|
||||||
|
t.integer "donation_id", :null => false
|
||||||
|
t.integer "outfit_id"
|
||||||
|
t.datetime "created_at", :null => false
|
||||||
|
t.datetime "updated_at", :null => false
|
||||||
|
end
|
||||||
|
|
||||||
create_table "donations", :force => true do |t|
|
create_table "donations", :force => true do |t|
|
||||||
t.integer "amount", :null => false
|
t.integer "amount", :null => false
|
||||||
t.string "charge_id", :null => false
|
t.string "charge_id", :null => false
|
||||||
|
|
5
spec/models/donation_feature_spec.rb
Normal file
5
spec/models/donation_feature_spec.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe DonationFeature do
|
||||||
|
pending "add some examples to (or delete) #{__FILE__}"
|
||||||
|
end
|
Loading…
Reference in a new issue