artfully_ose 1.3.0.pre1 → 1.3.0.pre2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/mailchimp_kits_controller.rb +71 -0
- data/app/controllers/mailchimp_webhooks_controller.rb +25 -0
- data/app/controllers/membership_comps_controller.rb +6 -0
- data/app/controllers/people_controller.rb +1 -1
- data/app/helpers/mailchimp_helper.rb +14 -0
- data/app/models/action_feed.rb +126 -0
- data/app/views/kits/_list.html.haml +10 -2
- data/app/views/layouts/application.html.haml +0 -2
- data/app/views/mailchimp_kits/activate.html.haml +19 -0
- data/app/views/mailchimp_kits/edit.html.haml +20 -0
- data/app/views/mailchimp_kits/lists.html.haml +48 -0
- data/app/views/organizations/_basics.html.haml +42 -0
- data/app/views/organizations/_connection_form.html.haml +0 -21
- data/app/views/organizations/show.html.haml +23 -21
- data/config/routes.rb +9 -0
- data/db/migrate/20141009191355_add_donated_to_searches.artfully_ose_engine.rb +5 -0
- data/lib/artfully_ose/version.rb +1 -1
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2227e62aa7b96bf9b47c53b10e6f7be5e505b8d2
|
4
|
+
data.tar.gz: 2730b7c985317b350a7375e3d323ce1625652f77
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1d9292c210b7f9eb3a73b4ab50be727c9a2963b494475ce7b2638d7f3ca8f1d5958972af8fb1f14c146b054be255d74c6dde8c7148933caa07a395061a94988
|
7
|
+
data.tar.gz: e94e5cda62a1e681e59f7dfffe0621018b3ea8c9c84c414e8ed4d51aac6bf7d58bc0ad6b0d8410d306e4f1379d3241a57a73d0283fbefb7a18f4dcba8d4feb33
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class MailchimpKitsController < ApplicationController
|
2
|
+
rescue_from CanCan::AccessDenied do |exception|
|
3
|
+
flash[:alert] = exception.message
|
4
|
+
redirect_to root_path, :alert => exception.message
|
5
|
+
end
|
6
|
+
|
7
|
+
rescue_from Gibbon::GibbonError do |exception|
|
8
|
+
if exception.message =~ /api_key/
|
9
|
+
redirect_to edit_mailchimp_kit_path(params[:id])
|
10
|
+
end
|
11
|
+
redirect_to root_path, :alert => "There was a problem with mailchimp, please try again"
|
12
|
+
end
|
13
|
+
|
14
|
+
before_filter do
|
15
|
+
authorize! :edit, current_user.current_organization
|
16
|
+
end
|
17
|
+
|
18
|
+
def edit
|
19
|
+
@kit = Kit.find(params[:id])
|
20
|
+
authorize! :edit, @kit
|
21
|
+
end
|
22
|
+
|
23
|
+
def update
|
24
|
+
@kit = Kit.find(params[:id])
|
25
|
+
authorize! :edit, @kit
|
26
|
+
|
27
|
+
unless params[:mailchimp_kit][:api_key].nil?
|
28
|
+
params[:mailchimp_kit][:api_key] = params[:mailchimp_kit][:api_key].strip
|
29
|
+
end
|
30
|
+
|
31
|
+
@kit.old_api_key = @kit.api_key
|
32
|
+
if @kit.update_attributes(params[:mailchimp_kit])
|
33
|
+
redirect_to lists_mailchimp_kit_url(@kit)
|
34
|
+
else
|
35
|
+
params[:new_api_key] = true
|
36
|
+
flash[:error] = "We could not validate your api key. Please make sure it is correct and try again."
|
37
|
+
render :edit
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def lists
|
42
|
+
@kit = Kit.find(params[:id])
|
43
|
+
authorize! :edit, @kit
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_list
|
47
|
+
@kit = Kit.find(params[:id])
|
48
|
+
end
|
49
|
+
|
50
|
+
def manage
|
51
|
+
kit = Kit.find(params[:id])
|
52
|
+
authorize! :edit, kit
|
53
|
+
|
54
|
+
kit.change_lists(params[:lists] || [])
|
55
|
+
kit.update_attributes(mailchimp_kit_params)
|
56
|
+
redirect_to current_user.current_organization, :notice => "Great! We're syncing your MailChimp lists with Artful.ly and will email when we're done."
|
57
|
+
end
|
58
|
+
|
59
|
+
def hide_alert
|
60
|
+
kit = Kit.find(params[:id])
|
61
|
+
kit.hide_default_list_alert = true
|
62
|
+
kit.save
|
63
|
+
head :ok
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def mailchimp_kit_params
|
69
|
+
params.fetch(:mailchimp_kit).slice(:default_list_id, :fan_subscribe_question)
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class MailchimpWebhooksController < ApplicationController
|
2
|
+
skip_before_filter :authenticate_user!
|
3
|
+
skip_before_filter :metric_logged_in
|
4
|
+
|
5
|
+
def show
|
6
|
+
MailchimpKit.find(params[:id])
|
7
|
+
head :ok
|
8
|
+
end
|
9
|
+
|
10
|
+
def update
|
11
|
+
mailchimp_kit = MailchimpKit.find(params[:id])
|
12
|
+
|
13
|
+
if mailchimp_kit.attached_lists.none? { |list| list[:list_id] == params[:list_id] }
|
14
|
+
head 422
|
15
|
+
return
|
16
|
+
end
|
17
|
+
|
18
|
+
if !mailchimp_kit.cancelled?
|
19
|
+
job = MailchimpSyncJob.new(mailchimp_kit, :type => "webhook_#{params[:type]}", :data => params[:data], :list_id => params[:list_id])
|
20
|
+
Delayed::Job.enqueue(job, :queue => "mailchimp")
|
21
|
+
end
|
22
|
+
|
23
|
+
head :ok
|
24
|
+
end
|
25
|
+
end
|
@@ -3,6 +3,12 @@ class MembershipCompsController < ArtfullyOseController
|
|
3
3
|
|
4
4
|
def new
|
5
5
|
@membership_types = current_organization.membership_types.all
|
6
|
+
|
7
|
+
if @membership_types.empty?
|
8
|
+
flash[:notice] = "To comp a memberhsip to a patron you'll need to create a memebership type first."
|
9
|
+
redirect_to new_membership_type_path and return
|
10
|
+
end
|
11
|
+
|
6
12
|
@membership_types_hash = {}
|
7
13
|
@membership_types.each {|mt| @membership_types_hash[mt.id] = {:allow_multiple_memberships => mt.allow_multiple_memberships?,:formatted_ends_at => I18n.l(mt.ends_at, :format => :date_for_input)}}
|
8
14
|
|
@@ -75,7 +75,7 @@ class PeopleController < ArtfullyOseController
|
|
75
75
|
single_optin = params.fetch("single_optin", false) == "true"
|
76
76
|
@person.update_and_note_subscriptions!(current_user, subscribed_lists, groupings, single_optin)
|
77
77
|
flash[:notice] << "Your changes have been saved." +
|
78
|
-
(have_duplicate_addresses ? " We didn
|
78
|
+
(have_duplicate_addresses ? " We didn't save some addresses because they were duplicates." : "")
|
79
79
|
else
|
80
80
|
errs = [@person.errors.delete(:"relationships.base")].flatten + [@person.errors.full_messages.to_sentence].flatten
|
81
81
|
flash[:alert] = errs.blank? ? "Sorry, we couldn't save your changes. Make sure you entered a first name, last name or email address." : errs.compact
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module MailchimpHelper
|
2
|
+
def default_list_options(kit)
|
3
|
+
lists = kit.attached_lists.map { |list| [list[:list_name], list[:list_id]] }
|
4
|
+
options_for_select(lists, kit.default_list_id)
|
5
|
+
end
|
6
|
+
|
7
|
+
def default_list_prompt(kit)
|
8
|
+
if kit.attached_lists.empty?
|
9
|
+
"Please select lists above"
|
10
|
+
else
|
11
|
+
"Select a list"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
class ActionFeed
|
2
|
+
attr_accessor :organization_id, :redis
|
3
|
+
include ActionView::Helpers::SanitizeHelper
|
4
|
+
cattr_accessor :redis
|
5
|
+
|
6
|
+
def self.for(organization_id)
|
7
|
+
af = ActionFeed.new
|
8
|
+
af.organization_id = organization_id
|
9
|
+
@@redis ||= RedisManager.connection
|
10
|
+
af
|
11
|
+
end
|
12
|
+
|
13
|
+
def key
|
14
|
+
"feed:#{organization_id}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def burst_key
|
18
|
+
"burst:#{organization_id}"
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# If the action is ON TOP, add it to the top of the feed
|
23
|
+
# If the action is *in* the top, rebuild the feed
|
24
|
+
# Otherwise do nothing
|
25
|
+
#
|
26
|
+
def add(action)
|
27
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] checking action [#{action.id}]")
|
28
|
+
|
29
|
+
if(is_top? action.id)
|
30
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] adding action [#{action.id}]")
|
31
|
+
# lpush!
|
32
|
+
@@redis.lpush(self.key, for_dashboard(action))
|
33
|
+
@@redis.ltrim(self.key, 0, 24)
|
34
|
+
else
|
35
|
+
delay_time = action.can_wait? ? 300 : 10
|
36
|
+
self.rebuild_later(delay_time)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def feed
|
41
|
+
begin
|
42
|
+
@@redis.lrange(self.key, 0, 24)
|
43
|
+
rescue Exception => e
|
44
|
+
Airbrake.notify(e, :parameters => {:error_message => "Redis error getting action feed"})
|
45
|
+
[]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def is_top?(action_id)
|
50
|
+
id = Action.recent(self.organization_id).limit(1).pluck(:id).first
|
51
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] top action is [#{id}]")
|
52
|
+
action_in_top = (action_id == id)
|
53
|
+
|
54
|
+
if (action_in_top)
|
55
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] action [#{action_id}] is on top")
|
56
|
+
end
|
57
|
+
|
58
|
+
action_in_top
|
59
|
+
end
|
60
|
+
|
61
|
+
def in_top?(action_id)
|
62
|
+
ids = Action.recent(self.organization_id).limit(25).pluck(:id)
|
63
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] top actions #{ids}")
|
64
|
+
action_in_top = ids.include?(action_id)
|
65
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] action [#{action_id}] is in top [#{action_in_top}]")
|
66
|
+
action_in_top
|
67
|
+
end
|
68
|
+
|
69
|
+
def rebuild_if_necessary(action, and_delay=false)
|
70
|
+
if ((action.deleted_at.present?) || (self.in_top? action.id))
|
71
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] rebuild_if_necessary")
|
72
|
+
and_delay ? self.rebuild_later : self.rebuild
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def rebuild_later(delay_time = 10)
|
77
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] rebuild_later")
|
78
|
+
|
79
|
+
RedisManager.burst_job(burst_key, delay_time) do
|
80
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] scheduling rebuild")
|
81
|
+
job = ActionFeed::RebuildJob.new(self.organization_id)
|
82
|
+
Delayed::Job.enqueue(job, {:queue => "feed", :run_at => delay_time.seconds.from_now})
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
#
|
87
|
+
# To rebuild now. Not terribly slow but still use with caution
|
88
|
+
#
|
89
|
+
def rebuild
|
90
|
+
Rails.logger.debug("ACTION_FEED [#{self.key}] rebuilding")
|
91
|
+
actions = Action.recent(self.organization_id).limit(25)
|
92
|
+
self.destroy
|
93
|
+
actions.each do |action|
|
94
|
+
# rpush!
|
95
|
+
@@redis.rpush(self.key, for_dashboard(action))
|
96
|
+
end
|
97
|
+
@@redis.ltrim(self.key, 0, 24)
|
98
|
+
actions
|
99
|
+
end
|
100
|
+
|
101
|
+
def destroy
|
102
|
+
@@redis.del(key)
|
103
|
+
end
|
104
|
+
|
105
|
+
def for_dashboard(action)
|
106
|
+
template = File.read("#{ArtfullyOse::Engine.root}/app/views/index/_action.html.haml")
|
107
|
+
haml_engine = Haml::Engine.new(template)
|
108
|
+
|
109
|
+
base = Class.new do
|
110
|
+
include ArtfullyOseHelper
|
111
|
+
include ActionView::Helpers::DateHelper
|
112
|
+
end.new
|
113
|
+
|
114
|
+
scope = base
|
115
|
+
output = haml_engine.render(scope, {:action => action})
|
116
|
+
output.gsub("'","\'") # necessary to escape single '
|
117
|
+
output = sanitize(output)
|
118
|
+
output
|
119
|
+
end
|
120
|
+
|
121
|
+
class RebuildJob < Struct.new(:organization_id)
|
122
|
+
def perform
|
123
|
+
ActionFeed.for(self.organization_id).rebuild
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
@@ -5,5 +5,13 @@
|
|
5
5
|
%ul
|
6
6
|
%li Paid Ticketing
|
7
7
|
%li People
|
8
|
-
%li
|
9
|
-
%li
|
8
|
+
%li Scannable Tickets
|
9
|
+
%li Fundraising/Campaigns
|
10
|
+
-if @ability.can? :manage, Kit
|
11
|
+
%li= link_to "Membership", [:edit, @organization.membership_kit]
|
12
|
+
%li= link_to "Passes", [:edit, @organization.passes_kit]
|
13
|
+
%li= link_to "Mailchimp", [:edit, @organization.kits.where(:type => "MailchimpKit").first]
|
14
|
+
-else
|
15
|
+
%li Membership
|
16
|
+
%li Passes
|
17
|
+
%li Mailchimp
|
@@ -2,8 +2,6 @@
|
|
2
2
|
%html{:lang => "en", "ng-app" => "artfully"}
|
3
3
|
%head
|
4
4
|
%title= "#{yield :title} : #{t 'artfully.page_title'}"
|
5
|
-
= stylesheet_link_tag "#{ENV['CAS_ASSET_HOST'] || ENV['CAS_BASE_URL']}/assets/memberbar.css"
|
6
|
-
= javascript_include_tag "#{ENV['CAS_ASSET_HOST'] || ENV['CAS_BASE_URL']}/assets/memberbar.js"
|
7
5
|
|
8
6
|
:plain
|
9
7
|
<link href='//fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel='stylesheet' type='text/css'>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
- content_for :header do
|
2
|
+
%h1 MailChimp Kit
|
3
|
+
|
4
|
+
.row
|
5
|
+
.span6
|
6
|
+
%p
|
7
|
+
With your activated MailChimp Kit, you can:
|
8
|
+
%ul{:style => "margin:10px;padding:10px;list-style:disc;"}
|
9
|
+
%li Push your Artful.ly contacts up to Mailchimp
|
10
|
+
%li Import your MailChimp subscribers into Artful.ly
|
11
|
+
%li Record MailChimp newsletters on Artful.ly people records
|
12
|
+
%li Let fans subscribe to a list when they checkout
|
13
|
+
|
14
|
+
.span5
|
15
|
+
.well
|
16
|
+
.center
|
17
|
+
Click the Activate button to get started
|
18
|
+
.btn-toolbar.form-actions.center
|
19
|
+
.btn-group= button_to "Activate Mailchimp", kits_path(:type => @kit.type.underscore), :class => "btn btn-success btn-large"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
- content_for :header do
|
2
|
+
%h1 MailChimp Kit
|
3
|
+
|
4
|
+
.row
|
5
|
+
.span6.offset3
|
6
|
+
- if @kit.api_key.nil? || params[:new_api_key]
|
7
|
+
= form_for @kit, :html => { :class => 'form-horizontal' } do |f|
|
8
|
+
%p
|
9
|
+
Artful.ly needs your MailChimp API key to communicate with MailChimp. Get your API key #{link_to "here", "http://admin.mailchimp.com/account/api", :target => "_blank" } and fill in that value below:
|
10
|
+
|
11
|
+
= f.text_field :api_key, :class => "span4"
|
12
|
+
|
13
|
+
= f.submit "Set API Key", :class => "btn"
|
14
|
+
- else
|
15
|
+
%p
|
16
|
+
Your MailChimp Kit is all set! If you like, you can:
|
17
|
+
%p
|
18
|
+
= link_to "Change this API key", edit_mailchimp_kit_path(@kit, :new_api_key => true)
|
19
|
+
%p
|
20
|
+
= link_to "Manage my connected lists.", lists_mailchimp_kit_path(@kit)
|
@@ -0,0 +1,48 @@
|
|
1
|
+
- content_for :header do
|
2
|
+
%h1 MailChimp Kit
|
3
|
+
|
4
|
+
.row
|
5
|
+
.span6
|
6
|
+
%p
|
7
|
+
Select which MailChimp lists you would like Artful.ly to integrate with. Subscribers to each selected list will be imported into Artful.ly.
|
8
|
+
%p
|
9
|
+
You can come back to this page and edit this list at any time.
|
10
|
+
%p
|
11
|
+
The following data will be imported from your MailChimp subscribers:
|
12
|
+
%table.table.table-bordered.table-striped.docs
|
13
|
+
%tr
|
14
|
+
%td.field EMAIL
|
15
|
+
%td This is an "email" type field. We will push the individual's email address to this field.
|
16
|
+
%tr
|
17
|
+
%td.field FNAME
|
18
|
+
%td This is is a "text" type field. We will push the individual's first name to this field.
|
19
|
+
%tr
|
20
|
+
%td.field LNAME
|
21
|
+
%td This is is a "text" type field. We will push the individual's last name to this field.
|
22
|
+
.span5
|
23
|
+
- if @kit.lists.count > 0
|
24
|
+
= form_for @kit, :url => manage_mailchimp_kit_path(@kit), :method => :post do |f|
|
25
|
+
.well
|
26
|
+
%p
|
27
|
+
Which MailChimp lists would you like to sync?
|
28
|
+
- @kit.lists.each do |list|
|
29
|
+
.list
|
30
|
+
= label_tag "", :class => "checkbox" do
|
31
|
+
= check_box_tag "lists[]", list[1], @kit.list_attached?(list[1]), :class => "list", "data-list-name" => list[0]
|
32
|
+
%span.name= list[0]
|
33
|
+
.well
|
34
|
+
= label_tag "mailchimp_kit[default_list_id]" do
|
35
|
+
Which list would you like to ask your fans to join when they check out?
|
36
|
+
.list-default
|
37
|
+
= select_tag "mailchimp_kit[default_list_id]", default_list_options(@kit), :prompt => default_list_prompt(@kit)
|
38
|
+
|
39
|
+
.well
|
40
|
+
= label_tag "mailchimp_kit[fan_subscribe_question]" do
|
41
|
+
How would you like to ask fans to subscribe to that list?
|
42
|
+
= text_field_tag "mailchimp_kit[fan_subscribe_question]", @kit.fan_subscribe_question, :maxlength => "60"
|
43
|
+
|
44
|
+
= f.submit "Save", :class => "btn btn-primary"
|
45
|
+
|
46
|
+
- else
|
47
|
+
.notice
|
48
|
+
No Mailchimp lists were attached to this account. Please make a list and try again.
|
@@ -0,0 +1,42 @@
|
|
1
|
+
.row
|
2
|
+
.span6
|
3
|
+
%ul.kv
|
4
|
+
%li.row-fluid
|
5
|
+
.key.span3 Organization Name
|
6
|
+
.value.span6= @organization.name
|
7
|
+
%li.row-fluid
|
8
|
+
.key.span3 Email
|
9
|
+
.value.span6= @organization.email
|
10
|
+
%li.row-fluid
|
11
|
+
.key.span3 Time Zone
|
12
|
+
.value.span6= @organization.time_zone
|
13
|
+
|
14
|
+
- if @ability.can? :manage, current_user.current_organization
|
15
|
+
= link_to "Edit", edit_organization_path(@organization), {:class => "btn"}
|
16
|
+
|
17
|
+
.span6
|
18
|
+
%ul
|
19
|
+
%li.row-fluid
|
20
|
+
.span4
|
21
|
+
%strong Your Central Storefront
|
22
|
+
.span8=link_to store_organization_events_url(@organization.cached_slug), store_organization_events_url(@organization.cached_slug), :target => "blank"
|
23
|
+
%p
|
24
|
+
="Patrons can visit this URL to buy tickets to your events and make donations to your organization. You can customize this URL #{link_to "here", edit_organization_path(@organization)}.".html_safe
|
25
|
+
|
26
|
+
- if @organization.has_any_storefront_kit?
|
27
|
+
#storefront-table
|
28
|
+
%h5 Storefronts
|
29
|
+
|
30
|
+
%table.table.table-compact
|
31
|
+
- [:regular_donation, :membership, :passes].each do |kit|
|
32
|
+
- if(@organization.has_kit? (kit))
|
33
|
+
%tr
|
34
|
+
%td=@organization.kit(kit).friendly_name
|
35
|
+
%td{:id => "badge_#{kit}"}
|
36
|
+
.center
|
37
|
+
-if @organization.has_active_storefront? kit
|
38
|
+
.badge.badge-success{:id => "storefront_badge_#{kit.to_s}"}
|
39
|
+
=link_to "On", [:edit, @organization.kit(kit)], :id => "configure_#{kit}", :style => "color: white; cursor: pointer;"
|
40
|
+
-else
|
41
|
+
.badge
|
42
|
+
=link_to "Off", [:edit, @organization.kit(kit)], :id => "configure_#{kit}", :style => "color: white; cursor: pointer;"
|
@@ -1,21 +0,0 @@
|
|
1
|
-
#faForm.modal
|
2
|
-
= form_for fa_user, :url => connect_organization_path(organization) do |form|
|
3
|
-
.modal-header
|
4
|
-
.close{'data-dismiss'=>'modal'} x
|
5
|
-
.row-fluid
|
6
|
-
.span2
|
7
|
-
=image_tag "falogo_50.jpg"
|
8
|
-
.span10
|
9
|
-
%h3 Connect to Fractured Atlas
|
10
|
-
.modal-body
|
11
|
-
- back ||= false
|
12
|
-
= hidden_field_tag :back, true if back
|
13
|
-
%ul
|
14
|
-
%li
|
15
|
-
= form.label :username, "Fractured Atlas Username", :class=>'control-label'
|
16
|
-
= form.text_field :username
|
17
|
-
%li
|
18
|
-
=form.label :password, "Password", :class=>'control-label'
|
19
|
-
=form.password_field :password, autocomplete: 'off'
|
20
|
-
.modal-footer
|
21
|
-
= form.submit "Connect", :class => 'btn'
|
@@ -2,26 +2,28 @@
|
|
2
2
|
- content_for :header do
|
3
3
|
%h1 Account Administration
|
4
4
|
|
5
|
-
|
6
|
-
.row
|
7
|
-
.span3
|
8
|
-
%h3{:style => "margin-top: 0px"} Details
|
9
|
-
- if can? :manage, current_user.current_organization
|
10
|
-
= link_to "Edit", edit_organization_path(@organization), {:class => "btn"}
|
11
|
-
.span9
|
12
|
-
%ul.kv
|
13
|
-
%li.row-fluid
|
14
|
-
.key.span3 Organization Name
|
15
|
-
.value.span9= @organization.name
|
16
|
-
%li.row-fluid
|
17
|
-
.key.span3 Email
|
18
|
-
.value.span9= @organization.email
|
19
|
-
%li.row-fluid
|
20
|
-
.key.span3 Time Zone
|
21
|
-
.value.span9= @organization.time_zone
|
5
|
+
- @active_tab ||= "basics"
|
22
6
|
|
23
|
-
.
|
24
|
-
|
7
|
+
%ul.nav.nav-tabs
|
8
|
+
%li{:class => "#{'active' if @active_tab=='basics'}"}
|
9
|
+
%a{:href => "#basics", "data-toggle" => "tab"} Basics
|
10
|
+
-if @ability.can? :manage, Kit
|
11
|
+
%li{:class => "#{'active' if @active_tab=='kits'}"}
|
12
|
+
%a{:href => "#kits", "data-toggle" => "tab"} Kits
|
25
13
|
|
26
|
-
|
27
|
-
|
14
|
+
-if @ability.can? :view, User
|
15
|
+
%li{:class => "#{'active' if @active_tab=='users'}"}
|
16
|
+
%a{:href => "#users", "data-toggle" => "tab"} Users
|
17
|
+
|
18
|
+
.tab-content
|
19
|
+
.tab-pane#basics{:class => "#{'active' if @active_tab=='basics'}"}
|
20
|
+
=render :partial => "basics"
|
21
|
+
-if @ability.can? :manage, Kit
|
22
|
+
.tab-pane#kits{:class => "#{'active' if @active_tab=='kits'}"}
|
23
|
+
= render :partial => "kits/list", :locals => { :kits => @kits }
|
24
|
+
-if @ability.can? :view, User
|
25
|
+
.tab-pane#users{:class => "#{'active' if @active_tab=='users'}"}
|
26
|
+
= render :partial => "user_memberships/list", :locals => { :organization => @organization }
|
27
|
+
|
28
|
+
-if @ability.can? :manage, @organization
|
29
|
+
= render :partial => 'connection_form', :locals => { :organization => @organization }
|
data/config/routes.rb
CHANGED
@@ -113,7 +113,16 @@ Rails.application.routes.draw do
|
|
113
113
|
get :alternatives, :on => :collection
|
114
114
|
post :requirements, :on => :collection
|
115
115
|
get :requirements, :on => :collection
|
116
|
+
end
|
117
|
+
resources :mailchimp_kits, :only => [ :edit, :update ] do
|
118
|
+
member do
|
119
|
+
get :lists
|
120
|
+
post :manage
|
121
|
+
post :hide_alert
|
122
|
+
end
|
116
123
|
end
|
124
|
+
resources :mailchimp_webhooks, :only => [ :show ]
|
125
|
+
post "/mailchimp_webhooks/:id" => "mailchimp_webhooks#update"
|
117
126
|
|
118
127
|
resources :membership_kits, :only => [ :edit, :update ]
|
119
128
|
resources :passes_kits, :only => [ :edit, :update ]
|
data/lib/artfully_ose/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: artfully_ose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.0.
|
4
|
+
version: 1.3.0.pre2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Artful.ly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -570,6 +570,20 @@ dependencies:
|
|
570
570
|
- - '='
|
571
571
|
- !ruby/object:Gem::Version
|
572
572
|
version: 0.4.0
|
573
|
+
- !ruby/object:Gem::Dependency
|
574
|
+
name: redis
|
575
|
+
requirement: !ruby/object:Gem::Requirement
|
576
|
+
requirements:
|
577
|
+
- - '='
|
578
|
+
- !ruby/object:Gem::Version
|
579
|
+
version: 3.2.0
|
580
|
+
type: :runtime
|
581
|
+
prerelease: false
|
582
|
+
version_requirements: !ruby/object:Gem::Requirement
|
583
|
+
requirements:
|
584
|
+
- - '='
|
585
|
+
- !ruby/object:Gem::Version
|
586
|
+
version: 3.2.0
|
573
587
|
description: A Ruby on Rails engine for running ticketing, CRM, and order management. See
|
574
588
|
http://fracturedatlas.github.com/artfully_app/ for the reference implementation
|
575
589
|
email:
|
@@ -1975,6 +1989,8 @@ files:
|
|
1975
1989
|
- app/controllers/imports_controller.rb
|
1976
1990
|
- app/controllers/index_controller.rb
|
1977
1991
|
- app/controllers/job_monitors_controller.rb
|
1992
|
+
- app/controllers/mailchimp_kits_controller.rb
|
1993
|
+
- app/controllers/mailchimp_webhooks_controller.rb
|
1978
1994
|
- app/controllers/member_cards_controller.rb
|
1979
1995
|
- app/controllers/members/index_controller.rb
|
1980
1996
|
- app/controllers/members/invitations_controller.rb
|
@@ -2043,6 +2059,7 @@ files:
|
|
2043
2059
|
- app/helpers/households_helper.rb
|
2044
2060
|
- app/helpers/imports_helper.rb
|
2045
2061
|
- app/helpers/link_helper.rb
|
2062
|
+
- app/helpers/mailchimp_helper.rb
|
2046
2063
|
- app/helpers/mailchimp_lists_for_search_helper.rb
|
2047
2064
|
- app/helpers/members_helper.rb
|
2048
2065
|
- app/helpers/membership_types_helper.rb
|
@@ -2059,6 +2076,7 @@ files:
|
|
2059
2076
|
- app/mailers/reports_mailer.rb
|
2060
2077
|
- app/models/ability.rb
|
2061
2078
|
- app/models/action.rb
|
2079
|
+
- app/models/action_feed.rb
|
2062
2080
|
- app/models/actions/change_action.rb
|
2063
2081
|
- app/models/actions/comp_action.rb
|
2064
2082
|
- app/models/actions/convert_action.rb
|
@@ -2470,6 +2488,9 @@ files:
|
|
2470
2488
|
- app/views/layouts/mail.html.haml
|
2471
2489
|
- app/views/layouts/members.html.haml
|
2472
2490
|
- app/views/layouts/storefront.html.haml
|
2491
|
+
- app/views/mailchimp_kits/activate.html.haml
|
2492
|
+
- app/views/mailchimp_kits/edit.html.haml
|
2493
|
+
- app/views/mailchimp_kits/lists.html.haml
|
2473
2494
|
- app/views/members/index/index.html.haml
|
2474
2495
|
- app/views/members/invitations/edit.html.haml
|
2475
2496
|
- app/views/members/invitations/new.html.erb
|
@@ -2527,6 +2548,7 @@ files:
|
|
2527
2548
|
- app/views/orders/passes.html.haml
|
2528
2549
|
- app/views/orders/sales.html.haml
|
2529
2550
|
- app/views/orders/show.html.haml
|
2551
|
+
- app/views/organizations/_basics.html.haml
|
2530
2552
|
- app/views/organizations/_connection_form.html.haml
|
2531
2553
|
- app/views/organizations/_form.html.haml
|
2532
2554
|
- app/views/organizations/_website_form.html.haml
|
@@ -2878,6 +2900,7 @@ files:
|
|
2878
2900
|
- db/migrate/20140905080503_create_scheduled_pledge_payments.rb
|
2879
2901
|
- db/migrate/20140909150251_add_org_to_suggested_household.rb
|
2880
2902
|
- db/migrate/20141007114614_add_order_id_to_donations.rb
|
2903
|
+
- db/migrate/20141009191355_add_donated_to_searches.artfully_ose_engine.rb
|
2881
2904
|
- db/migrate/20141021134013_add_lifetime_pledges_to_people.rb
|
2882
2905
|
- db/migrate/20141027191307_default_overwrite_member_addresses_to_false.rb
|
2883
2906
|
- db/migrate/20141031193839_update_relations.rb
|