fat_free_crm 0.11.1 → 0.11.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fat_free_crm might be problematic. Click here for more details.
- data/Gemfile +30 -12
- data/Gemfile.lock +131 -119
- data/Procfile +1 -1
- data/README.md +1 -1
- data/app/assets/images/notifications.png +0 -0
- data/app/assets/javascripts/application.js.erb +3 -0
- data/app/assets/javascripts/crm_textarea_autocomplete.js +44 -0
- data/app/assets/stylesheets/application.css.erb +2 -0
- data/app/assets/stylesheets/common.scss +7 -11
- data/app/assets/stylesheets/textarea_autocomplete.scss +42 -0
- data/app/controllers/admin/application_controller.rb +5 -5
- data/app/controllers/admin/field_groups_controller.rb +11 -51
- data/app/controllers/admin/fields_controller.rb +13 -59
- data/app/controllers/admin/plugins_controller.rb +1 -4
- data/app/controllers/admin/settings_controller.rb +0 -4
- data/app/controllers/admin/tags_controller.rb +11 -66
- data/app/controllers/admin/users_controller.rb +20 -83
- data/app/controllers/application_controller.rb +83 -69
- data/app/controllers/comments_controller.rb +12 -29
- data/app/controllers/emails_controller.rb +1 -5
- data/app/controllers/entities/accounts_controller.rb +13 -32
- data/app/controllers/entities/campaigns_controller.rb +17 -32
- data/app/controllers/entities/contacts_controller.rb +20 -38
- data/app/controllers/entities/leads_controller.rb +33 -55
- data/app/controllers/entities/opportunities_controller.rb +26 -42
- data/app/controllers/entities_controller.rb +92 -83
- data/app/controllers/home_controller.rb +1 -10
- data/app/controllers/lists_controller.rb +1 -4
- data/app/controllers/{entities/tasks_controller.rb → tasks_controller.rb} +21 -32
- data/app/controllers/users_controller.rb +6 -5
- data/app/helpers/accounts_helper.rb +32 -9
- data/app/helpers/application_helper.rb +15 -1
- data/app/helpers/campaigns_helper.rb +1 -1
- data/app/helpers/comments_helper.rb +11 -1
- data/app/helpers/leads_helper.rb +1 -1
- data/app/helpers/opportunities_helper.rb +1 -1
- data/app/{models/mailers/notifier.rb → mailers/dropbox_mailer.rb} +5 -16
- data/app/mailers/subscription_mailer.rb +37 -0
- data/{lib/tasks/dropbox.rake → app/mailers/user_mailer.rb} +11 -13
- data/app/models/entities/account.rb +3 -1
- data/app/models/entities/campaign.rb +3 -1
- data/app/models/entities/contact.rb +3 -1
- data/app/models/entities/lead.rb +6 -5
- data/app/models/entities/opportunity.rb +3 -1
- data/app/models/fields/field.rb +1 -1
- data/app/models/polymorphic/comment.rb +34 -0
- data/app/models/{entities → polymorphic}/task.rb +16 -3
- data/app/models/setting.rb +15 -15
- data/app/models/users/ability.rb +12 -5
- data/app/models/users/user.rb +7 -2
- data/app/views/accounts/index.html.haml +1 -1
- data/app/views/accounts/index.js.rjs +1 -1
- data/app/views/admin/plugins/index.html.haml +1 -7
- data/app/views/{shared/auto_complete.html.haml → application/_auto_complete.html.haml} +0 -0
- data/app/views/{shared → application}/index.atom.builder +1 -1
- data/app/views/{shared → application}/index.rss.builder +1 -1
- data/app/views/campaigns/index.html.haml +1 -1
- data/app/views/campaigns/index.js.rjs +1 -1
- data/app/views/comments/_new.html.haml +6 -0
- data/app/views/comments/_subscription_links.html.haml +13 -0
- data/app/views/comments/new.js.rjs +2 -0
- data/app/views/contacts/_top_section.html.haml +3 -13
- data/app/views/contacts/index.html.haml +1 -1
- data/app/views/contacts/index.js.rjs +1 -1
- data/app/views/{notifier/dropbox_ack_notification.html.haml → dropbox_mailer/dropbox_notification.html.haml} +2 -2
- data/app/views/{shared → entities}/attach.js.rjs +1 -1
- data/app/views/entities/contacts.js.rjs +1 -1
- data/app/views/{shared/discard.rjs → entities/discard.js.rjs} +0 -0
- data/app/views/entities/leads.js.rjs +1 -1
- data/app/views/entities/opportunities.js.rjs +1 -1
- data/app/views/entities/subscription_update.js.rjs +4 -0
- data/app/views/entities/versions.js.rjs +1 -1
- data/app/views/layouts/_footer.html.haml +1 -1
- data/app/views/layouts/application.html.haml +3 -0
- data/app/views/leads/_contact.html.haml +1 -0
- data/app/views/leads/index.html.haml +1 -1
- data/app/views/leads/index.js.rjs +1 -1
- data/app/views/opportunities/_top_section.html.haml +4 -14
- data/app/views/opportunities/index.html.haml +1 -1
- data/app/views/opportunities/index.js.rjs +1 -1
- data/app/views/subscription_mailer/comment_notification.text.erb +7 -0
- data/app/views/{notifier → user_mailer}/password_reset_instructions.html.haml +0 -0
- data/config/application.rb +3 -1
- data/config/environments/development.rb +1 -1
- data/config/environments/test.rb +3 -0
- data/config/initializers/action_mailer.rb +8 -5
- data/config/initializers/cancan.rb +151 -0
- data/config/initializers/constants.rb +1 -0
- data/config/initializers/locale.rb +20 -0
- data/config/initializers/paper_trail.rb +4 -5
- data/config/initializers/relative_url_root.rb +0 -1
- data/config/initializers/squeel.rb +5 -0
- data/config/locales/cz_fat_free_crm.yml +3 -3
- data/config/locales/de.yml +2 -2
- data/config/locales/de_fat_free_crm.yml +651 -596
- data/config/locales/en-GB_fat_free_crm.yml +3 -3
- data/config/locales/en-US_fat_free_crm.yml +13 -3
- data/config/locales/es_fat_free_crm.yml +3 -3
- data/config/locales/fr-CA_fat_free_crm.yml +3 -3
- data/config/locales/fr_fat_free_crm.yml +3 -3
- data/config/locales/it_fat_free_crm.yml +3 -3
- data/config/locales/pl_fat_free_crm.yml +3 -3
- data/config/locales/pt-BR_fat_free_crm.yml +3 -3
- data/config/locales/ru_fat_free_crm.yml +3 -3
- data/config/locales/sv-SE_fat_free_crm.yml +3 -3
- data/config/locales/th_fat_free_crm.yml +3 -3
- data/config/routes.rb +10 -0
- data/config/settings.default.yml +29 -10
- data/config/unicorn.rb +4 -0
- data/db/migrate/20111201030535_add_field_groups_klass_name.rb +3 -1
- data/db/migrate/20120314080441_add_subscribed_users_to_entities.rb +23 -0
- data/db/migrate/20120405080727_change_subscribed_users_to_set.rb +24 -0
- data/db/migrate/20120405080742_change_further_subscribed_users_to_set.rb +27 -0
- data/db/migrate/20120413034923_add_index_on_versions_item_type.rb +5 -0
- data/db/schema.rb +109 -126
- data/fat_free_crm.gemspec +12 -18
- data/lib/fat_free_crm.rb +0 -1
- data/lib/fat_free_crm/core_ext/array.rb +1 -0
- data/lib/fat_free_crm/gem_dependencies.rb +1 -0
- data/lib/fat_free_crm/mail_processor/base.rb +226 -0
- data/lib/fat_free_crm/mail_processor/comment_replies.rb +86 -0
- data/lib/fat_free_crm/mail_processor/dropbox.rb +288 -0
- data/lib/fat_free_crm/permissions.rb +6 -19
- data/lib/fat_free_crm/renderers.rb +0 -8
- data/lib/fat_free_crm/tabs.rb +1 -1
- data/lib/fat_free_crm/version.rb +1 -1
- data/lib/plugins/country_select/lib/country_select.rb +2 -2
- data/lib/tasks/mail_processing.rake +60 -0
- data/spec/controllers/admin/users_controller_spec.rb +0 -2
- data/spec/controllers/{accounts_controller_spec.rb → entities/accounts_controller_spec.rb} +7 -9
- data/spec/controllers/{campaigns_controller_spec.rb → entities/campaigns_controller_spec.rb} +7 -7
- data/spec/controllers/{contacts_controller_spec.rb → entities/contacts_controller_spec.rb} +5 -9
- data/spec/controllers/{leads_controller_spec.rb → entities/leads_controller_spec.rb} +7 -9
- data/spec/controllers/{opportunities_controller_spec.rb → entities/opportunities_controller_spec.rb} +8 -15
- data/spec/controllers/tasks_controller_spec.rb +1 -5
- data/spec/controllers/users_controller_spec.rb +5 -9
- data/spec/factories/subscription_factories.rb +6 -0
- data/spec/lib/mail_processor/base_spec.rb +164 -0
- data/spec/lib/mail_processor/comment_replies_spec.rb +63 -0
- data/spec/lib/{dropbox_spec.rb → mail_processor/dropbox_spec.rb} +73 -181
- data/spec/lib/mail_processor/sample_emails/dropbox.rb +167 -0
- data/spec/mailers/subscription_mailer_spec.rb +17 -0
- data/spec/models/{base → entities}/account_contact_spec.rb +0 -0
- data/spec/models/{base → entities}/account_opportunity_spec.rb +0 -0
- data/spec/models/{base → entities}/account_spec.rb +4 -0
- data/spec/models/{base → entities}/campaign_spec.rb +4 -0
- data/spec/models/{base → entities}/contact_opportunity_spec.rb +0 -0
- data/spec/models/{base → entities}/contact_spec.rb +4 -0
- data/spec/models/{base → entities}/lead_spec.rb +4 -0
- data/spec/models/{base → entities}/opportunity_spec.rb +4 -0
- data/spec/models/polymorphic/comment_spec.rb +15 -0
- data/spec/models/{base → polymorphic}/task_spec.rb +124 -30
- data/spec/models/polymorphic/version_spec.rb +1 -1
- data/spec/shared/controllers.rb +5 -7
- data/spec/shared/models.rb +46 -0
- data/spec/spec_helper.rb +3 -4
- data/spec/support/mail_processor_mocks.rb +30 -0
- data/spec/support/uploaded_file.rb +3 -0
- data/spec/views/{common → application}/auto_complete.haml_spec.rb +1 -1
- data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_ef8c08_256x240.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_ffd27a_256x240.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
- data/vendor/assets/javascripts/textarea_autocomplete.js +605 -0
- data/vendor/assets/stylesheets/jquery-ui.custom.css.erb +565 -0
- metadata +234 -154
- data/config/locales/simple_form.en.yml +0 -24
- data/lib/fat_free_crm/dropbox.rb +0 -439
- data/spec/lib/dropbox/email_samples.rb +0 -77
@@ -22,10 +22,6 @@ class Admin::SettingsController < Admin::ApplicationController
|
|
22
22
|
# GET /admin/settings.xml
|
23
23
|
#----------------------------------------------------------------------------
|
24
24
|
def index
|
25
|
-
respond_to do |format|
|
26
|
-
format.html # index.html.haml
|
27
|
-
format.xml { render :xml => nil }
|
28
|
-
end
|
29
25
|
end
|
30
26
|
end
|
31
27
|
|
@@ -18,114 +18,59 @@
|
|
18
18
|
class Admin::TagsController < Admin::ApplicationController
|
19
19
|
before_filter "set_current_tab('admin/tags')", :only => [ :index, :show ]
|
20
20
|
|
21
|
+
load_resource
|
22
|
+
|
21
23
|
# GET /admin/tags
|
22
24
|
# GET /admin/tags.xml HTML
|
23
25
|
#----------------------------------------------------------------------------
|
24
26
|
def index
|
25
|
-
@tags
|
26
|
-
|
27
|
-
respond_to do |format|
|
28
|
-
format.html # index.html.haml
|
29
|
-
format.js # index.js.rjs
|
30
|
-
format.xml { render :xml => Tag.all }
|
31
|
-
format.xls { send_data @tags.to_xls, :type => :xls }
|
32
|
-
format.csv { send_data @tags.to_csv, :type => :csv }
|
33
|
-
format.rss { render "shared/index.rss.builder" }
|
34
|
-
format.atom { render "shared/index.atom.builder" }
|
35
|
-
end
|
27
|
+
respond_with(@tags)
|
36
28
|
end
|
37
29
|
|
38
30
|
# GET /admin/tags/new
|
39
31
|
# GET /admin/tags/new.xml AJAX
|
40
32
|
#----------------------------------------------------------------------------
|
41
33
|
def new
|
42
|
-
@tag
|
43
|
-
|
44
|
-
respond_to do |format|
|
45
|
-
format.js # new.js.rjs
|
46
|
-
format.xml { render :xml => @tag }
|
47
|
-
end
|
34
|
+
respond_with(@tag)
|
48
35
|
end
|
49
36
|
|
50
37
|
# GET /admin/tags/1/edit AJAX
|
51
38
|
#----------------------------------------------------------------------------
|
52
39
|
def edit
|
53
|
-
@tag = Tag.find(params[:id])
|
54
|
-
|
55
40
|
if params[:previous].to_s =~ /(\d+)\z/
|
56
|
-
@previous = Tag.
|
41
|
+
@previous = Tag.find_by_id($1) || $1.to_i
|
57
42
|
end
|
58
|
-
|
59
|
-
rescue ActiveRecord::RecordNotFound
|
60
|
-
@previous ||= $1.to_i
|
61
|
-
respond_to_not_found(:js) unless @tag
|
62
43
|
end
|
63
44
|
|
64
45
|
# POST /admin/tags
|
65
46
|
# POST /admin/tags.xml AJAX
|
66
47
|
#----------------------------------------------------------------------------
|
67
48
|
def create
|
68
|
-
@tag
|
49
|
+
@tag.update_attributes(params[:tag])
|
69
50
|
|
70
|
-
|
71
|
-
if @tag.save
|
72
|
-
@tags = Tag.all
|
73
|
-
format.js # create.js.rjs
|
74
|
-
format.xml { render :xml => @tag, :status => :created, :location => @tag }
|
75
|
-
else
|
76
|
-
format.js # create.js.rjs
|
77
|
-
format.xml { render :xml => @tag.errors, :status => :unprocessable_entity }
|
78
|
-
end
|
79
|
-
end
|
51
|
+
respond_with(@tag)
|
80
52
|
end
|
81
53
|
|
82
54
|
# PUT /admin/tags/1
|
83
55
|
# PUT /admin/tags/1.xml AJAX
|
84
56
|
#----------------------------------------------------------------------------
|
85
57
|
def update
|
86
|
-
@tag
|
58
|
+
@tag.update_attributes(params[:tag])
|
87
59
|
|
88
|
-
|
89
|
-
if @tag.update_attributes(params[:tag])
|
90
|
-
format.js # update.js.rjs
|
91
|
-
format.xml { head :ok }
|
92
|
-
else
|
93
|
-
format.js # update.js.rjs
|
94
|
-
format.xml { render :xml => @tag.errors, :status => :unprocessable_entity }
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
rescue ActiveRecord::RecordNotFound
|
99
|
-
respond_to_not_found(:js, :xml)
|
60
|
+
respond_with(@tag)
|
100
61
|
end
|
101
62
|
|
102
|
-
|
103
63
|
# DELETE /admin/tags/1
|
104
64
|
# DELETE /admin/tags/1.xml AJAX
|
105
65
|
#----------------------------------------------------------------------------
|
106
66
|
def destroy
|
107
|
-
@tag
|
67
|
+
@tag.destroy
|
108
68
|
|
109
|
-
|
110
|
-
if @tag.destroy
|
111
|
-
format.js # destroy.js.rjs
|
112
|
-
format.xml { head :ok }
|
113
|
-
else
|
114
|
-
flash[:warning] = t(:msg_cant_delete_tag, @tag.name)
|
115
|
-
format.js # destroy.js.rjs
|
116
|
-
format.xml { render :xml => @tag.errors, :status => :unprocessable_entity }
|
117
|
-
end
|
118
|
-
end
|
69
|
+
respond_with(@tag)
|
119
70
|
end
|
120
71
|
|
121
72
|
# GET /admin/tags/1/confirm AJAX
|
122
73
|
#----------------------------------------------------------------------------
|
123
74
|
def confirm
|
124
|
-
@tag = Tag.find(params[:id])
|
125
|
-
|
126
|
-
rescue ActiveRecord::RecordNotFound
|
127
|
-
respond_to_not_found(:js, :xml)
|
128
75
|
end
|
129
|
-
|
130
76
|
end
|
131
|
-
|
@@ -18,59 +18,38 @@
|
|
18
18
|
class Admin::UsersController < Admin::ApplicationController
|
19
19
|
before_filter "set_current_tab('admin/users')", :only => [ :index, :show ]
|
20
20
|
|
21
|
+
load_resource
|
22
|
+
|
21
23
|
# GET /admin/users
|
22
24
|
# GET /admin/users.xml HTML
|
23
25
|
#----------------------------------------------------------------------------
|
24
26
|
def index
|
25
27
|
@users = get_users(:page => params[:page])
|
26
|
-
|
27
|
-
respond_to do |format|
|
28
|
-
format.html # index.html.haml
|
29
|
-
format.js # index.js.rjs
|
30
|
-
format.xml { render :xml => User.all }
|
31
|
-
format.xls { send_data @users.to_xls, :type => :xls }
|
32
|
-
format.csv { send_data @users.to_csv, :type => :csv }
|
33
|
-
format.rss { render "shared/index.rss.builder" }
|
34
|
-
format.atom { render "shared/index.atom.builder" }
|
35
|
-
end
|
28
|
+
respond_with(@users)
|
36
29
|
end
|
37
30
|
|
38
31
|
# GET /admin/users/1
|
39
32
|
# GET /admin/users/1.xml
|
40
33
|
#----------------------------------------------------------------------------
|
41
34
|
def show
|
42
|
-
@user
|
43
|
-
|
44
|
-
respond_to do |format|
|
45
|
-
format.html # show.html.haml
|
46
|
-
format.xml { render :xml => @user }
|
47
|
-
end
|
35
|
+
respond_with(@user)
|
48
36
|
end
|
49
37
|
|
50
38
|
# GET /admin/users/new
|
51
39
|
# GET /admin/users/new.xml AJAX
|
52
40
|
#----------------------------------------------------------------------------
|
53
41
|
def new
|
54
|
-
@user
|
55
|
-
|
56
|
-
respond_to do |format|
|
57
|
-
format.js # new.js.rjs
|
58
|
-
format.xml { render :xml => @user }
|
59
|
-
end
|
42
|
+
respond_with(@user)
|
60
43
|
end
|
61
44
|
|
62
45
|
# GET /admin/users/1/edit AJAX
|
63
46
|
#----------------------------------------------------------------------------
|
64
47
|
def edit
|
65
|
-
@user = User.find(params[:id])
|
66
|
-
|
67
48
|
if params[:previous].to_s =~ /(\d+)\z/
|
68
|
-
@previous = User.
|
49
|
+
@previous = User.find_by_id($1) || $1.to_i
|
69
50
|
end
|
70
51
|
|
71
|
-
|
72
|
-
@previous ||= $1.to_i
|
73
|
-
respond_to_not_found(:js) unless @user
|
52
|
+
respond_with(@user)
|
74
53
|
end
|
75
54
|
|
76
55
|
# POST /admin/users
|
@@ -80,17 +59,10 @@ class Admin::UsersController < Admin::ApplicationController
|
|
80
59
|
params[:user][:password_confirmation] = nil if params[:user][:password_confirmation].blank?
|
81
60
|
@user = User.new(params[:user])
|
82
61
|
@user.admin = (params[:user][:admin] == "1")
|
62
|
+
@user.save_without_session_maintenance
|
63
|
+
@users = get_users
|
83
64
|
|
84
|
-
|
85
|
-
if @user.save_without_session_maintenance
|
86
|
-
@users = get_users
|
87
|
-
format.js # create.js.rjs
|
88
|
-
format.xml { render :xml => @user, :status => :created, :location => @user }
|
89
|
-
else
|
90
|
-
format.js # create.js.rjs
|
91
|
-
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
|
92
|
-
end
|
93
|
-
end
|
65
|
+
respond_with(@user)
|
94
66
|
end
|
95
67
|
|
96
68
|
# PUT /admin/users/1
|
@@ -99,47 +71,27 @@ class Admin::UsersController < Admin::ApplicationController
|
|
99
71
|
def update
|
100
72
|
params[:user][:password_confirmation] = nil if params[:user][:password_confirmation].blank?
|
101
73
|
@user = User.find(params[:id])
|
74
|
+
@user.update_attributes(params[:user])
|
102
75
|
@user.admin = (params[:user][:admin] == "1")
|
103
76
|
|
104
|
-
|
105
|
-
if @user.update_attributes(params[:user])
|
106
|
-
format.js # update.js.rjs
|
107
|
-
format.xml { head :ok }
|
108
|
-
else
|
109
|
-
format.js # update.js.rjs
|
110
|
-
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
rescue ActiveRecord::RecordNotFound
|
115
|
-
respond_to_not_found(:js, :xml)
|
77
|
+
respond_with(@user)
|
116
78
|
end
|
117
79
|
|
118
80
|
# GET /admin/users/1/confirm AJAX
|
119
81
|
#----------------------------------------------------------------------------
|
120
82
|
def confirm
|
121
|
-
@user
|
122
|
-
|
123
|
-
rescue ActiveRecord::RecordNotFound
|
124
|
-
respond_to_not_found(:js, :xml)
|
83
|
+
respond_with(@user)
|
125
84
|
end
|
126
85
|
|
127
86
|
# DELETE /admin/users/1
|
128
87
|
# DELETE /admin/users/1.xml AJAX
|
129
88
|
#----------------------------------------------------------------------------
|
130
89
|
def destroy
|
131
|
-
@user
|
132
|
-
|
133
|
-
respond_to do |format|
|
134
|
-
if @user.destroy
|
135
|
-
format.js # destroy.js.rjs
|
136
|
-
format.xml { head :ok }
|
137
|
-
else
|
138
|
-
flash[:warning] = t(:msg_cant_delete_user, @user.full_name)
|
139
|
-
format.js # destroy.js.rjs
|
140
|
-
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
|
141
|
-
end
|
90
|
+
unless @user.destroy
|
91
|
+
flash[:warning] = t(:msg_cant_delete_user, @user.full_name)
|
142
92
|
end
|
93
|
+
|
94
|
+
respond_with(@user)
|
143
95
|
end
|
144
96
|
|
145
97
|
# POST /users/auto_complete/query AJAX
|
@@ -150,36 +102,22 @@ class Admin::UsersController < Admin::ApplicationController
|
|
150
102
|
# PUT /admin/users/1/suspend.xml AJAX
|
151
103
|
#----------------------------------------------------------------------------
|
152
104
|
def suspend
|
153
|
-
@user = User.find(params[:id])
|
154
105
|
@user.update_attribute(:suspended_at, Time.now) if @user != @current_user
|
155
106
|
|
156
|
-
|
157
|
-
format.js # suspend.js.rjs
|
158
|
-
format.xml { render :xml => @user }
|
159
|
-
end
|
160
|
-
|
161
|
-
rescue ActiveRecord::RecordNotFound
|
162
|
-
respond_to_not_found(:js, :xml)
|
107
|
+
respond_with(@user)
|
163
108
|
end
|
164
109
|
|
165
110
|
# PUT /admin/users/1/reactivate
|
166
111
|
# PUT /admin/users/1/reactivate.xml AJAX
|
167
112
|
#----------------------------------------------------------------------------
|
168
113
|
def reactivate
|
169
|
-
@user = User.find(params[:id])
|
170
114
|
@user.update_attribute(:suspended_at, nil)
|
171
115
|
|
172
|
-
|
173
|
-
format.js # reactivate.js.rjs
|
174
|
-
format.xml { render :xml => @user }
|
175
|
-
end
|
176
|
-
|
177
|
-
rescue ActiveRecord::RecordNotFound
|
178
|
-
respond_to_not_found(:js, :xml)
|
116
|
+
respond_with(@user)
|
179
117
|
end
|
180
118
|
|
119
|
+
private
|
181
120
|
|
182
|
-
private
|
183
121
|
#----------------------------------------------------------------------------
|
184
122
|
def get_users(options = {})
|
185
123
|
self.current_page = options[:page] if options[:page]
|
@@ -192,7 +130,6 @@ class Admin::UsersController < Admin::ApplicationController
|
|
192
130
|
scope = User.by_id
|
193
131
|
scope = scope.merge(@search.result)
|
194
132
|
scope = scope.text_search(current_query) if current_query.present?
|
195
|
-
scope = scope.unscoped if wants.csv?
|
196
133
|
scope = scope.paginate(:page => current_page) if wants.html? || wants.js? || wants.xml?
|
197
134
|
scope
|
198
135
|
end
|
@@ -17,24 +17,47 @@
|
|
17
17
|
|
18
18
|
class ApplicationController < ActionController::Base
|
19
19
|
|
20
|
-
helper_method :klass
|
21
|
-
helper_method :current_user_session, :current_user, :can_signup?
|
22
|
-
helper_method :called_from_index_page?, :called_from_landing_page?
|
23
|
-
|
24
20
|
before_filter :set_context
|
25
21
|
before_filter :clear_setting_cache
|
26
22
|
before_filter "hook(:app_before_filter, self)"
|
27
23
|
after_filter "hook(:app_after_filter, self)"
|
28
24
|
|
29
|
-
|
30
|
-
|
31
|
-
|
25
|
+
helper_method :current_user_session, :current_user, :can_signup?
|
26
|
+
helper_method :called_from_index_page?, :called_from_landing_page?
|
27
|
+
helper_method :klass
|
28
|
+
|
29
|
+
respond_to :html, :only => [ :index, :show, :auto_complete ]
|
30
|
+
respond_to :js
|
31
|
+
respond_to :json, :xml, :except => :edit
|
32
|
+
respond_to :atom, :csv, :rss, :xls, :only => :index
|
33
|
+
|
34
|
+
rescue_from ActiveRecord::RecordNotFound, :with => :respond_to_not_found
|
35
|
+
rescue_from CanCan::AccessDenied, :with => :respond_to_access_denied
|
36
|
+
|
37
|
+
# Common auto_complete handler for all core controllers.
|
38
|
+
#----------------------------------------------------------------------------
|
39
|
+
def auto_complete
|
40
|
+
@query = params[:auto_complete_query] || ''
|
41
|
+
@auto_complete = hook(:auto_complete, self, :query => @query, :user => @current_user)
|
42
|
+
if @auto_complete.empty?
|
43
|
+
@auto_complete = klass.my.text_search(@query).limit(10)
|
44
|
+
else
|
45
|
+
@auto_complete = @auto_complete.last
|
46
|
+
end
|
47
|
+
session[:auto_complete] = controller_name.to_sym
|
48
|
+
respond_to do |format|
|
49
|
+
format.any(:js, :html) { render :partial => 'auto_complete' }
|
50
|
+
format.json { render :json => @auto_complete.inject({}){|h,a| h[a.id] = a.name; h } }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
32
55
|
|
56
|
+
#----------------------------------------------------------------------------
|
33
57
|
def klass
|
34
58
|
@klass ||= controller_name.classify.constantize
|
35
59
|
end
|
36
60
|
|
37
|
-
private
|
38
61
|
#----------------------------------------------------------------------------
|
39
62
|
def clear_setting_cache
|
40
63
|
Setting.clear_cache!
|
@@ -94,11 +117,6 @@ private
|
|
94
117
|
end
|
95
118
|
end
|
96
119
|
|
97
|
-
#----------------------------------------------------------------------------
|
98
|
-
def get_users
|
99
|
-
@users ||= User.except(current_user)
|
100
|
-
end
|
101
|
-
|
102
120
|
#----------------------------------------------------------------------------
|
103
121
|
def store_location
|
104
122
|
session[:return_to] = request.fullpath
|
@@ -129,83 +147,79 @@ private
|
|
129
147
|
request.referer =~ %r(/#{controller}/\w+)
|
130
148
|
end
|
131
149
|
|
132
|
-
#----------------------------------------------------------------------------
|
133
|
-
def respond_to_not_found(*types)
|
134
|
-
asset = self.controller_name.singularize
|
135
|
-
flick = case self.action_name
|
136
|
-
when "destroy" then "delete"
|
137
|
-
when "promote" then "convert"
|
138
|
-
else self.action_name
|
139
|
-
end
|
140
|
-
if self.action_name == "show"
|
141
|
-
# If asset does exist, but is not viewable to the current user..
|
142
|
-
if asset.capitalize.constantize.exists?(params[:id])
|
143
|
-
flash[:warning] = t(:msg_asset_not_authorized, asset)
|
144
|
-
else
|
145
|
-
flash[:warning] = t(:msg_asset_not_available, asset)
|
146
|
-
end
|
147
|
-
else
|
148
|
-
flash[:warning] = t(:msg_cant_do, :action => flick, :asset => asset)
|
149
|
-
end
|
150
|
-
respond_to do |format|
|
151
|
-
format.html { redirect_to :action => :index } if types.include?(:html)
|
152
|
-
format.js { render(:update) { |page| page.reload } } if types.include?(:js)
|
153
|
-
format.json { render :text => flash[:warning], :status => :not_found } if types.include?(:json)
|
154
|
-
format.xml { render :text => flash[:warning], :status => :not_found } if types.include?(:xml)
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
#----------------------------------------------------------------------------
|
159
|
-
def respond_to_related_not_found(related, *types)
|
160
|
-
asset = self.controller_name.singularize
|
161
|
-
asset = "note" if asset == "comment"
|
162
|
-
flash[:warning] = t(:msg_cant_create_related, :asset => asset, :related => related)
|
163
|
-
url = send("#{related.pluralize}_path")
|
164
|
-
respond_to do |format|
|
165
|
-
format.html { redirect_to url } if types.include?(:html)
|
166
|
-
format.js { render(:update) { |page| page.redirect_to url } } if types.include?(:js)
|
167
|
-
format.json { render :text => flash[:warning], :status => :not_found } if types.include?(:json)
|
168
|
-
format.xml { render :text => flash[:warning], :status => :not_found } if types.include?(:xml)
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
150
|
# Proxy current page for any of the controllers by storing it in a session.
|
173
151
|
#----------------------------------------------------------------------------
|
174
152
|
def current_page=(page)
|
175
|
-
@current_page = session["#{controller_name}_current_page"
|
153
|
+
@current_page = session[:"#{controller_name}_current_page"] = page.to_i
|
176
154
|
end
|
177
155
|
|
178
156
|
#----------------------------------------------------------------------------
|
179
157
|
def current_page
|
180
|
-
page = params[:page] || session["#{controller_name}_current_page"
|
158
|
+
page = params[:page] || session[:"#{controller_name}_current_page"] || 1
|
181
159
|
@current_page = page.to_i
|
182
160
|
end
|
183
161
|
|
184
162
|
# Proxy current search query for any of the controllers by storing it in a session.
|
185
163
|
#----------------------------------------------------------------------------
|
186
164
|
def current_query=(query)
|
187
|
-
@current_query = session["#{controller_name}_current_query"
|
165
|
+
@current_query = session[:"#{controller_name}_current_query"] = query
|
188
166
|
end
|
189
167
|
|
190
168
|
#----------------------------------------------------------------------------
|
191
169
|
def current_query
|
192
|
-
@current_query = params[:query] || session["#{controller_name}_current_query"
|
170
|
+
@current_query = params[:query] || session[:"#{controller_name}_current_query"] || ''
|
171
|
+
end
|
172
|
+
|
173
|
+
#----------------------------------------------------------------------------
|
174
|
+
def asset
|
175
|
+
self.controller_name.singularize
|
176
|
+
end
|
177
|
+
|
178
|
+
#----------------------------------------------------------------------------
|
179
|
+
def respond_to_not_found(*types)
|
180
|
+
flash[:warning] = t(:msg_asset_not_available, asset)
|
181
|
+
|
182
|
+
respond_to do |format|
|
183
|
+
format.html { redirect_to :action => :index }
|
184
|
+
format.js { render(:update) { |page| page.reload } }
|
185
|
+
format.json { render :text => flash[:warning], :status => :not_found }
|
186
|
+
format.xml { render :text => flash[:warning], :status => :not_found }
|
187
|
+
end
|
193
188
|
end
|
194
189
|
|
195
|
-
# Somewhat simplistic parser that extracts query and hash-prefixed tags from
|
196
|
-
# the search string and returns them as two element array, for example:
|
197
|
-
#
|
198
|
-
# "#real Billy Bones #pirate" => [ "Billy Bones", "real, pirate" ]
|
199
190
|
#----------------------------------------------------------------------------
|
200
|
-
def
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
191
|
+
def respond_to_related_not_found(related, *types)
|
192
|
+
asset = "note" if asset == "comment"
|
193
|
+
flash[:warning] = t(:msg_cant_create_related, :asset => asset, :related => related)
|
194
|
+
|
195
|
+
url = send("#{related.pluralize}_path")
|
196
|
+
respond_to do |format|
|
197
|
+
format.html { redirect_to url }
|
198
|
+
format.js { render(:update) { |page| page.redirect_to url } }
|
199
|
+
format.json { render :text => flash[:warning], :status => :not_found }
|
200
|
+
format.xml { render :text => flash[:warning], :status => :not_found }
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
#----------------------------------------------------------------------------
|
205
|
+
def respond_to_access_denied
|
206
|
+
if self.action_name == "show"
|
207
|
+
flash[:warning] = t(:msg_asset_not_authorized, asset)
|
208
|
+
|
209
|
+
else
|
210
|
+
flick = case self.action_name
|
211
|
+
when "destroy" then "delete"
|
212
|
+
when "promote" then "convert"
|
213
|
+
else self.action_name
|
207
214
|
end
|
215
|
+
flash[:warning] = t(:msg_cant_do, :action => flick, :asset => asset)
|
216
|
+
end
|
217
|
+
|
218
|
+
respond_to do |format|
|
219
|
+
format.html { redirect_to :action => :index }
|
220
|
+
format.js { render(:update) { |page| page.reload } }
|
221
|
+
format.json { render :text => flash[:warning], :status => :unauthorized }
|
222
|
+
format.xml { render :text => flash[:warning], :status => :unauthorized }
|
208
223
|
end
|
209
|
-
[ query.join(" "), tags.join(", ") ]
|
210
224
|
end
|
211
225
|
end
|