artfully_ose 1.2.0.pre.15 → 1.2.0.pre.16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/assets/javascripts/application.js +22 -1
- data/app/assets/javascripts/bootstrap-wysihtml5.js +511 -0
- data/app/assets/javascripts/custom/prices.js +1 -0
- data/app/assets/javascripts/wysihtml5-0.3.0.min.js +261 -0
- data/app/assets/stylesheets/application.sass +25 -1
- data/app/assets/stylesheets/bootstrap-wysihtml5.css +102 -0
- data/app/assets/stylesheets/bootstrap.css +1 -0
- data/app/assets/stylesheets/sass/store.sass +22 -0
- data/app/assets/stylesheets/wysiwyg-color.css +67 -0
- data/app/controllers/exchanges_controller.rb +7 -1
- data/app/controllers/membership_kits_controller.rb +25 -0
- data/app/controllers/mobile/dashboard_controller.rb +17 -0
- data/app/controllers/mobile/events_controller.rb +16 -0
- data/app/controllers/mobile/orders_controller.rb +60 -0
- data/app/controllers/mobile/shows_controller.rb +33 -0
- data/app/controllers/mobile/tickets_controller.rb +85 -0
- data/app/controllers/mobile/users_controller.rb +32 -0
- data/app/controllers/people_controller.rb +8 -6
- data/app/controllers/refunds_controller.rb +7 -7
- data/app/controllers/searches_controller.rb +3 -4
- data/app/controllers/store/checkouts_controller.rb +4 -4
- data/app/controllers/store/events_controller.rb +14 -2
- data/app/controllers/store/memberships_controller.rb +2 -0
- data/app/controllers/store/orders_controller.rb +1 -1
- data/app/controllers/tickets_controller.rb +2 -2
- data/app/helpers/artfully_ose_helper.rb +21 -0
- data/app/mailers/order_mailer.rb +28 -1
- data/app/models/address.rb +1 -1
- data/app/models/checkout.rb +8 -14
- data/app/models/contribution.rb +1 -0
- data/app/models/event.rb +17 -6
- data/app/models/exchange.rb +7 -5
- data/app/models/ext/integrations.rb +8 -3
- data/app/models/item.rb +4 -0
- data/app/models/job/checkout_processor.rb +41 -0
- data/app/models/job/order_mailer_job.rb +8 -0
- data/app/models/job/order_processor.rb +50 -9
- data/app/models/kit.rb +1 -1
- data/app/models/kits/membership_kit.rb +55 -0
- data/app/models/member.rb +16 -4
- data/app/models/membership_type.rb +7 -0
- data/app/models/order_handler.rb +4 -3
- data/app/models/orders/imported_order.rb +4 -0
- data/app/models/orders/order.rb +16 -5
- data/app/models/orders/pdf_generation.rb +75 -0
- data/app/models/organization.rb +7 -0
- data/app/models/person.rb +15 -0
- data/app/models/refund.rb +5 -2
- data/app/models/section.rb +16 -2
- data/app/models/show.rb +2 -8
- data/app/models/show_stats_view.rb +10 -0
- data/app/models/ticket.rb +38 -15
- data/app/models/ticket/qr_code.rb +21 -0
- data/app/models/ticket/template.rb +1 -0
- data/app/models/ticket/transfers.rb +5 -1
- data/app/models/ticket_summary.rb +5 -2
- data/app/models/ticket_type.rb +42 -7
- data/app/models/user.rb +3 -0
- data/app/models/user_membership.rb +1 -0
- data/app/views/actions/get/_show.html.haml +1 -12
- data/app/views/contributions/_form.html.haml +1 -1
- data/app/views/events/_ticket_type_fields.html.haml +21 -0
- data/app/views/events/image.html.haml +1 -1
- data/app/views/exchanges/new.html.haml +51 -28
- data/app/views/layouts/_google_analytics.html.haml +5 -2
- data/app/views/layouts/members.html.haml +1 -1
- data/app/views/layouts/storefront.html.haml +1 -1
- data/app/views/members/invitations/edit.html.erb +14 -0
- data/app/views/members/invitations/new.html.erb +14 -0
- data/app/views/members/mailer/invitation_instructions.html.haml +11 -0
- data/app/views/membership_kits/edit.html.haml +68 -0
- data/app/views/membership_types/index.html.haml +7 -3
- data/app/views/order_mailer/confirmation_for_exchange.html.haml +34 -0
- data/app/views/order_mailer/confirmation_for_exchange.text.haml +26 -0
- data/app/views/order_mailer/confirmation_for_refund.html.haml +29 -0
- data/app/views/order_mailer/confirmation_for_refund.text.haml +22 -0
- data/app/views/organizations/_form.html.haml +1 -1
- data/app/views/people/_header.html.haml +4 -4
- data/app/views/people/index.html.haml +18 -6
- data/app/views/refunds/new.html.haml +41 -27
- data/app/views/store/checkouts/_membership_info.html.haml +11 -0
- data/app/views/store/checkouts/thanks.html.haml +2 -10
- data/app/views/store/events/_calendar.html.haml +1 -4
- data/app/views/store/events/calendar.html.haml +49 -0
- data/app/views/store/events/show.html.haml +3 -8
- data/app/views/store/events/single_show.html.haml +2 -2
- data/app/views/store/memberships/index.html.haml +3 -11
- data/app/views/store/shows/_show.html.haml +6 -6
- data/config/initializers/paperclip.rb +14 -0
- data/config/routes.rb +35 -0
- data/db/migrate/20130722153731_add_autentication_token_to_users.rb +5 -0
- data/db/migrate/20130723212712_add_qr_code_to_tickets.rb +9 -0
- data/db/migrate/20130820011240_add_uuid_to_tickets.rb +13 -0
- data/db/migrate/20130820025134_make_ticket_uuid_not_null.rb +11 -0
- data/db/migrate/20130823191625_add_pdf_to_orders.rb +5 -0
- data/db/migrate/20131127162818_add_buyer_id_index_to_tickets.rb +5 -0
- data/db/migrate/20131127164000_member_tickets.rb +9 -0
- data/lib/artfully_ose.rb +3 -1
- data/lib/artfully_ose/engine.rb +5 -4
- data/lib/artfully_ose/version.rb +1 -1
- metadata +51 -2
@@ -0,0 +1,21 @@
|
|
1
|
+
class Ticket::QRCode
|
2
|
+
def initialize(ticket, order = nil)
|
3
|
+
@ticket = ticket
|
4
|
+
@order = order
|
5
|
+
end
|
6
|
+
|
7
|
+
def text
|
8
|
+
ticket.uuid
|
9
|
+
end
|
10
|
+
|
11
|
+
def render(file)
|
12
|
+
png = RQRCode::QRCode.new(text.to_s, :size => 10, :level => :l).to_img
|
13
|
+
png.resize(150, 150).save(file)
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
delegate :event, :to => :ticket
|
19
|
+
|
20
|
+
attr_reader :ticket, :order
|
21
|
+
end
|
@@ -5,6 +5,7 @@ module Ticket::Transfers
|
|
5
5
|
begin
|
6
6
|
self.buyer = buyer
|
7
7
|
self.sold_at = time
|
8
|
+
generate_qr_code
|
8
9
|
self.sell!
|
9
10
|
rescue Transitions::InvalidTransition
|
10
11
|
return false
|
@@ -18,6 +19,7 @@ module Ticket::Transfers
|
|
18
19
|
begin
|
19
20
|
self.buyer = buyer
|
20
21
|
self.sold_at = time
|
22
|
+
generate_qr_code
|
21
23
|
self.exchange!
|
22
24
|
rescue Transitions::InvalidTransition => e
|
23
25
|
puts e
|
@@ -30,6 +32,7 @@ module Ticket::Transfers
|
|
30
32
|
self.buyer = buyer
|
31
33
|
self.sold_price = 0
|
32
34
|
self.sold_at = time
|
35
|
+
generate_qr_code
|
33
36
|
self.comp!
|
34
37
|
rescue Transitions::InvalidTransition => e
|
35
38
|
puts e
|
@@ -43,9 +46,10 @@ module Ticket::Transfers
|
|
43
46
|
self.buyer = nil
|
44
47
|
self.sold_at = nil
|
45
48
|
self.buyer_id = nil
|
49
|
+
self.qr_code = nil
|
46
50
|
Rails.logger.debug(self.inspect)
|
47
51
|
self.reset_price!
|
48
52
|
save
|
49
53
|
end
|
50
54
|
|
51
|
-
end
|
55
|
+
end
|
@@ -23,8 +23,11 @@ class TicketSummary
|
|
23
23
|
|
24
24
|
def <<(ticket)
|
25
25
|
@tickets << ticket
|
26
|
-
@ticket_type_hash[ticket.ticket_type]
|
27
|
-
|
26
|
+
if @ticket_type_hash[ticket.ticket_type].nil?
|
27
|
+
@ticket_type_hash[ticket.ticket_type] = []
|
28
|
+
end
|
29
|
+
|
30
|
+
@ticket_type_hash[ticket.ticket_type] << ticket
|
28
31
|
@show = ticket.show
|
29
32
|
self
|
30
33
|
end
|
data/app/models/ticket_type.rb
CHANGED
@@ -1,9 +1,15 @@
|
|
1
1
|
class TicketType < ActiveRecord::Base
|
2
2
|
belongs_to :section
|
3
3
|
belongs_to :show
|
4
|
+
belongs_to :membership_type
|
4
5
|
delegate :chart, :to => :section
|
5
6
|
has_many :tickets
|
6
|
-
attr_accessible :name, :price, :limit, :description, :storefront, :box_office, :members
|
7
|
+
attr_accessible :name, :price, :limit, :description, :storefront, :box_office, :members,
|
8
|
+
:membership_type_id, :tickets_per_membership, :member_ticket
|
9
|
+
|
10
|
+
before_save :clear_membership_type_id
|
11
|
+
|
12
|
+
validates :membership_type_id, :presence => true, :if => "member_ticket?"
|
7
13
|
|
8
14
|
def as_json(options = {})
|
9
15
|
{
|
@@ -17,21 +23,45 @@ class TicketType < ActiveRecord::Base
|
|
17
23
|
end
|
18
24
|
|
19
25
|
#
|
20
|
-
# Returns
|
26
|
+
# Returns Tickets
|
21
27
|
#
|
22
|
-
def available_tickets(ticket_limit = 4)
|
28
|
+
def available_tickets(ticket_limit = 4, member = nil)
|
23
29
|
Ticket.available({:section_id => self.section.id,
|
24
30
|
:ticket_type_id => nil },
|
25
|
-
[ticket_limit, self.available].min)
|
31
|
+
[ticket_limit, self.available(member)].min)
|
26
32
|
end
|
27
33
|
|
28
34
|
#
|
29
35
|
# Returns an integer number of tickets available
|
30
36
|
#
|
31
|
-
def available
|
37
|
+
def available(member = nil)
|
32
38
|
available_in_section = Ticket.where(:section_id => self.section, :state => :on_sale, :cart_id => nil, :ticket_type_id => nil).count
|
33
|
-
|
34
|
-
|
39
|
+
|
40
|
+
return available_in_section if unlimited? && !self.member_ticket?
|
41
|
+
|
42
|
+
available_measures = []
|
43
|
+
available_measures << limit - committed.length - locked.length unless limit.nil?
|
44
|
+
available_measures << available_in_section
|
45
|
+
available_measures << available_to(member, available_in_section) if self.member_ticket?
|
46
|
+
|
47
|
+
[ available_measures.min, 0].max
|
48
|
+
end
|
49
|
+
|
50
|
+
def available_to(member, limit = 0)
|
51
|
+
if member.nil?
|
52
|
+
return 0 if self.member_ticket?
|
53
|
+
elsif self.tickets_per_membership.nil?
|
54
|
+
return limit
|
55
|
+
else
|
56
|
+
#how many member tickets has this member purchased for this show?
|
57
|
+
member_tickets_purchased = member.member_tickets_purchased_for(self.show.event).count
|
58
|
+
|
59
|
+
#how many tickets this member entitled to?
|
60
|
+
tickets_entitled_to = member.memberships.current.where(:membership_type_id => self.membership_type_id).count * self.tickets_per_membership
|
61
|
+
|
62
|
+
member_tickets_available = tickets_entitled_to - member_tickets_purchased
|
63
|
+
member_tickets_available
|
64
|
+
end
|
35
65
|
end
|
36
66
|
|
37
67
|
def self.price_to_cents(price_in_dollars)
|
@@ -82,4 +112,9 @@ class TicketType < ActiveRecord::Base
|
|
82
112
|
def self.set_show(show)
|
83
113
|
TicketType.joins(:section => :chart).where('charts.id = ?', show.chart_id).update_all(:show_id => show.id)
|
84
114
|
end
|
115
|
+
|
116
|
+
private
|
117
|
+
def clear_membership_type_id
|
118
|
+
self.membership_type_id = nil unless self.member_ticket?
|
119
|
+
end
|
85
120
|
end
|
data/app/models/user.rb
CHANGED
@@ -20,6 +20,7 @@ class UserMembership < ActiveRecord::Base
|
|
20
20
|
|
21
21
|
@user_membership.transaction do
|
22
22
|
UserMembership.where(:organization_id => organization.id).update_all(:owner => false)
|
23
|
+
@user_membership.reload
|
23
24
|
@user_membership.owner = true
|
24
25
|
return @user_membership.save
|
25
26
|
end
|
@@ -1,14 +1,3 @@
|
|
1
|
-
|
2
|
-
=render :partial => "actions/shared/show", :locals => { :action => action }
|
1
|
+
=render :partial => "actions/shared/show", :locals => { :action => action }
|
3
2
|
|
4
|
-
|
5
|
-
%ul
|
6
|
-
- action.subject.items.each do |item|
|
7
|
-
%li #{number_as_cents(item.price)} - #{item.order_summary_description}
|
8
|
-
%li
|
9
|
-
%strong #{number_as_cents(action.subject.total||0)} - Total
|
10
|
-
- if action.subject.notes.present?
|
11
|
-
%li
|
12
|
-
%strong Note:
|
13
|
-
= action.subject.notes
|
14
3
|
%p= link_to "View order details <i class='icon-share-alt'></i>".html_safe, order_path(action.subject)
|
@@ -5,6 +5,27 @@
|
|
5
5
|
.controls
|
6
6
|
=f.text_field :name, :class => 'span4'
|
7
7
|
|
8
|
+
.control-group
|
9
|
+
=label_tag "Member ticket?", "Member ticket?", :class => 'control-label'
|
10
|
+
.controls
|
11
|
+
%label.radio.inline
|
12
|
+
= f.radio_button :member_ticket, true, :class => "member-ticket-yes"
|
13
|
+
Yes
|
14
|
+
%label.radio.inline
|
15
|
+
= f.radio_button :member_ticket, false, :class => "member-ticket-no"
|
16
|
+
No
|
17
|
+
|
18
|
+
.membership-fields{:style => "display: none"}
|
19
|
+
.control-group
|
20
|
+
=f.label :membership_type_id, "Membership", :class => 'control-label'
|
21
|
+
.controls
|
22
|
+
=f.select :membership_type_id, options_from_collection_for_select(MembershipType.in_play, 'id', 'name', f.object.membership_type_id), {}, :class => 'span4'
|
23
|
+
|
24
|
+
.control-group
|
25
|
+
=f.label :tickets_per_membership, "Tickets per Membership", :class => 'control-label'
|
26
|
+
.controls
|
27
|
+
=f.text_field :tickets_per_membership, :class => 'input-small'
|
28
|
+
|
8
29
|
.control-group
|
9
30
|
=f.label :price, "Price", :class => 'control-label'
|
10
31
|
.controls
|
@@ -16,7 +16,7 @@
|
|
16
16
|
=icon_tag('266-upload@2x', {:alt => "instructions", :align => "left"})
|
17
17
|
.span10
|
18
18
|
%p
|
19
|
-
="Spruce up this event with an image! This image will be displayed on both #{link_to "
|
19
|
+
="Spruce up this event with an image! This image will be displayed on both your #{link_to "Storefront", store_old_storefront_event_path(@event)} (where patrons will purchase tickets) and within your Artful.ly management pages.".html_safe
|
20
20
|
%ul{:style => "list-style-type: circle;"}
|
21
21
|
%li Image size is limited to 1 MB
|
22
22
|
%li We recommend your image be at least 300 pixels wide
|
@@ -3,11 +3,11 @@
|
|
3
3
|
%h1 Exchanging Tickets
|
4
4
|
|
5
5
|
.row
|
6
|
-
.span4
|
6
|
+
.span4#event-select-container
|
7
7
|
%h3 1. Choose an Event
|
8
8
|
= select_tag "event_selector", options_for_select(@events.collect{ |e| [e.name, url_for(params.merge({:event_id => e.id, :show_id => nil, :ticket_type_id => nil}))] }, url_for(params.merge({:event_id => @event.try(:id), :show_id => nil, :ticket_type_id => nil}))), include_blank: true, class: "visit-on-select span4"
|
9
9
|
|
10
|
-
.span4
|
10
|
+
.span4#show-select-container
|
11
11
|
- unless @shows.nil?
|
12
12
|
%h3 2. Choose a Show
|
13
13
|
- if @shows.empty?
|
@@ -15,7 +15,7 @@
|
|
15
15
|
- else
|
16
16
|
= select_tag "show_selector", options_for_select(@shows.collect{ |show| [l(show.datetime_local_to_event, :format => :short), url_for(params.merge({:show_id => show.id, :ticket_type_id => nil}))] }, url_for(params.merge({:show_id => @show.try(:id), :ticket_type_id => nil}))), include_blank: true, class: "visit-on-select span4"
|
17
17
|
|
18
|
-
.span4
|
18
|
+
.span4#ticket-type-select-container
|
19
19
|
- unless @show.nil?
|
20
20
|
%h3 3. Choose a Ticket Type
|
21
21
|
= select_tag "ticket_type_selector", options_for_select(@show.chart.ticket_types.collect{ |ticket_type| [(truncate(ticket_type.name, :length => 20, :separator => ' ', :omission => '...') + ' ' + number_as_cents(ticket_type.price)), url_for(params.merge({:ticket_type_id => ticket_type.id}))] }, url_for(params.merge({:ticket_type_id => @ticket_type.try(:id)}))), include_blank: true, class: "visit-on-select ticket-type-select span4"
|
@@ -27,32 +27,55 @@
|
|
27
27
|
= hidden_field_tag :ticket_type_id, params[:ticket_type_id]
|
28
28
|
- params[:items].each do |item_id|
|
29
29
|
= hidden_field_tag "items[]", item_id
|
30
|
-
#exchange-details
|
30
|
+
#exchange-details
|
31
31
|
- unless @num_available_tickets < @items.length
|
32
|
-
.
|
33
|
-
.
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
%
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
32
|
+
.row
|
33
|
+
.span3.offset2#outgoing-tickets
|
34
|
+
.well
|
35
|
+
%ol.unstyled
|
36
|
+
- @items.each do |item|
|
37
|
+
%li.ticket-detail
|
38
|
+
%h6= item.show.event.name
|
39
|
+
= l(item.show.datetime_local_to_event, :format => :short)
|
40
|
+
%br
|
41
|
+
= item.product.ticket_type.name
|
42
|
+
.lead=number_as_cents item.total_price
|
43
|
+
#exchange-arrow.span2
|
44
|
+
%i.icon-arrow-right.icon-3x
|
45
|
+
|
46
|
+
.span3#incoming-tickets
|
47
|
+
.well{class: ("negative" if @free_upgrade)}
|
48
|
+
%ol.unstyled
|
49
|
+
- @items.count.times do
|
50
|
+
%li.ticket-detail
|
51
|
+
%h6= @event.name
|
52
|
+
= l(@ticket_type.show.datetime_local_to_event, :format => :short)
|
53
|
+
%br
|
54
|
+
= @ticket_type.name
|
55
|
+
.lead=number_as_cents @ticket_type.price
|
56
|
+
|
57
|
+
.row
|
58
|
+
.span6.offset3
|
59
|
+
%p
|
60
|
+
When you click the "Confirm Exchange" button, The tickets on the left will be immediately exchanged for the tickets on the right. We'll update the show data and door list right away.
|
61
|
+
|
62
|
+
%p
|
63
|
+
Artful.ly will not refund or credit any accounts. If there is money to be collected from or refunded to a patron, please reconcile with the patron directly.
|
64
|
+
|
65
|
+
|
66
|
+
- if @order.skip_confirmation_email?
|
67
|
+
%p="We cannot send an email confirmation because we have no email address for #{@order.person}."
|
68
|
+
- else
|
69
|
+
.center
|
70
|
+
.control-group
|
71
|
+
.controls
|
72
|
+
%label.checkbox
|
73
|
+
= check_box_tag :send_email_confirmation, "1", "", :style => "float:none"
|
74
|
+
="Also send an email confirmation to #{@order.person.email}."
|
75
|
+
|
76
|
+
- unless @ticket_type.nil?
|
77
|
+
.center
|
78
|
+
= submit_tag "Confirm Exchange", :class => "btn btn-large btn-primary"
|
56
79
|
|
57
80
|
- content_for :custom_js do
|
58
81
|
:javascript
|
@@ -1,7 +1,10 @@
|
|
1
|
-
-
|
1
|
+
-if (Rails.env.production? || Rails.env.staging?) && !Rails.application.config.google_analytics.account.blank?
|
2
|
+
- segment = "" if local_assigns[:segment].nil?
|
3
|
+
- segment = (segment + "_") unless segment.blank?
|
4
|
+
- segment_account = segment + "account"
|
2
5
|
:javascript
|
3
6
|
var _gaq = _gaq || [];
|
4
|
-
_gaq.push(['_setAccount', '#{h Rails.application.config.google_analytics.
|
7
|
+
_gaq.push(['_setAccount', '#{h Rails.application.config.google_analytics.send(segment_account)}']);
|
5
8
|
_gaq.push(['_setDomainName', '#{h Rails.application.config.google_analytics.domain}']);
|
6
9
|
_gaq.push(['_setAllowHash', false]);
|
7
10
|
_gaq.push(['_setAllowLinker', true]);
|
@@ -3,7 +3,7 @@
|
|
3
3
|
%head
|
4
4
|
%title= "#{yield :title}"
|
5
5
|
= stylesheet_link_tag :storefront
|
6
|
-
= render :partial => 'layouts/google_analytics'
|
6
|
+
= render :partial => 'layouts/google_analytics', :locals => { :segment => "storefront" }
|
7
7
|
%body
|
8
8
|
.container
|
9
9
|
= render :partial => 'layouts/flash.html', :locals => { :flash => flash }
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<h2>Set your password</h2>
|
2
|
+
|
3
|
+
<%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => { :method => :put } do |f| %>
|
4
|
+
<%= devise_error_messages! %>
|
5
|
+
<%= f.hidden_field :invitation_token %>
|
6
|
+
|
7
|
+
<p><%= f.label :password %><br />
|
8
|
+
<%= f.password_field :password %></p>
|
9
|
+
|
10
|
+
<p><%= f.label :password_confirmation %><br />
|
11
|
+
<%= f.password_field :password_confirmation %></p>
|
12
|
+
|
13
|
+
<p><%= f.submit "Set my password" %></p>
|
14
|
+
<% end %>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<h2>Send invitation</h2>
|
2
|
+
|
3
|
+
<%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>
|
4
|
+
<%= devise_error_messages! %>
|
5
|
+
|
6
|
+
<% resource.class.invite_key_fields.each do |field| -%>
|
7
|
+
<p><%= f.label field %><br />
|
8
|
+
<%= f.text_field field %></p>
|
9
|
+
<% end -%>
|
10
|
+
|
11
|
+
<p><%= f.submit "Send an invitation" %></p>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<%= link_to "Home", after_sign_in_path_for(resource_name) %><br />
|
@@ -0,0 +1,11 @@
|
|
1
|
+
="Hello #{@resource.person.first_name},"
|
2
|
+
|
3
|
+
%p
|
4
|
+
=@resource.organization.membership_kit.invitation_email_text_copy.html_safe
|
5
|
+
|
6
|
+
= link_to 'Setup your account now', accept_invitation_url(@resource, :invitation_token => @resource.invitation_token)
|
7
|
+
|
8
|
+
%p
|
9
|
+
="Thanks!"
|
10
|
+
%br
|
11
|
+
=@resource.organization.name
|
@@ -0,0 +1,68 @@
|
|
1
|
+
- content_for :header do
|
2
|
+
%h1 Configure Membership Kit
|
3
|
+
|
4
|
+
#edit-membership-kit
|
5
|
+
=form_for @kit do |f|
|
6
|
+
.row-fluid.bottom-room
|
7
|
+
.span3
|
8
|
+
%strong= f.label :marketing_copy_heading, "Marketing Copy Top", :class => 'control-label'
|
9
|
+
.guide
|
10
|
+
%p
|
11
|
+
This text will appear at the top of your
|
12
|
+
=link_to "Membership Storefront", store_memberships_path(current_user.current_organization.cached_slug)
|
13
|
+
.span9
|
14
|
+
= f.text_area :marketing_copy_heading, :class => "input-xxlarge wysihtml5", :rows => "8"
|
15
|
+
|
16
|
+
.row-fluid.bottom-room
|
17
|
+
.span3
|
18
|
+
%strong= f.label :marketing_copy_sidebar, "Marketing Copy Sidebar", :class => 'control-label'
|
19
|
+
.guide
|
20
|
+
%p
|
21
|
+
This text will appear on the right sidebar of your
|
22
|
+
=link_to "Membership Storefront", store_memberships_path(current_user.current_organization.cached_slug)
|
23
|
+
.span9
|
24
|
+
= f.text_area :marketing_copy_sidebar, :class => "input-xxlarge wysihtml5", :rows => "8"
|
25
|
+
|
26
|
+
.row-fluid.bottom-room
|
27
|
+
.span3
|
28
|
+
%strong= f.label :thanks_copy, "Thanks Copy", :class => 'control-label'
|
29
|
+
.guide
|
30
|
+
Ut porta risus et lectus lobortis, vitae ultricies massa placerat. In non dapibus augue.
|
31
|
+
%p
|
32
|
+
=link_to "Preview", "#thanks-preview-modal", 'data-toggle' => 'modal'
|
33
|
+
.span9
|
34
|
+
= f.text_area :thanks_copy, :class => "input-xxlarge", :rows => "8"
|
35
|
+
|
36
|
+
.row-fluid.bottom-room
|
37
|
+
.span3
|
38
|
+
%strong= f.label :invitation_email_text_copy, "Welcome Email Copy", :class => 'control-label'
|
39
|
+
.guide
|
40
|
+
Ut porta risus et lectus lobortis, vitae ultricies massa placerat. In non dapibus augue.
|
41
|
+
%p
|
42
|
+
=link_to "Preview", "#invite-preview-modal", 'data-toggle' => 'modal'
|
43
|
+
.span9
|
44
|
+
= f.text_area :invitation_email_text_copy, :class => "input-xxlarge", :rows => "8"
|
45
|
+
|
46
|
+
=f.submit "Save", :class => "btn btn-primary"
|
47
|
+
|
48
|
+
#thanks-preview-modal.modal
|
49
|
+
.modal-header
|
50
|
+
.close{'data-dismiss'=>'modal'} x
|
51
|
+
%h3 Thanks Page Preview
|
52
|
+
|
53
|
+
.modal-body
|
54
|
+
#thanks-preview
|
55
|
+
(Thanks preview)
|
56
|
+
.modal-footer
|
57
|
+
= link_to "Close", "#", :class => "btn", 'data-dismiss'=>'modal'
|
58
|
+
|
59
|
+
#invite-preview-modal.modal
|
60
|
+
.modal-header
|
61
|
+
.close{'data-dismiss'=>'modal'} x
|
62
|
+
%h3 Invitation Email Preview
|
63
|
+
|
64
|
+
.modal-body
|
65
|
+
#email-preview
|
66
|
+
(Email preview)
|
67
|
+
.modal-footer
|
68
|
+
= link_to "Close", "#", :class => "btn", 'data-dismiss'=>'modal'
|