artfully_ose 1.3.0.pre1 → 1.3.0.pre2
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.
- 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
|