fat_free_crm 0.15.0.beta → 0.15.0.beta.2

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.

Potentially problematic release.


This version of fat_free_crm might be problematic. Click here for more details.

Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +7 -0
  3. data/.rubocop_todo.yml +517 -0
  4. data/.travis.yml +1 -1
  5. data/CHANGELOG.md +145 -9
  6. data/Gemfile +11 -13
  7. data/Gemfile.lock +104 -92
  8. data/README.md +2 -9
  9. data/app/assets/javascripts/application.js.erb +1 -1
  10. data/app/assets/javascripts/crm_select2.js.coffee +0 -1
  11. data/app/controllers/application_controller.rb +6 -6
  12. data/app/controllers/comments_controller.rb +7 -5
  13. data/app/controllers/entities/contacts_controller.rb +4 -4
  14. data/app/controllers/entities/opportunities_controller.rb +3 -3
  15. data/app/controllers/entities_controller.rb +3 -2
  16. data/app/controllers/home_controller.rb +21 -14
  17. data/app/controllers/passwords_controller.rb +1 -1
  18. data/app/controllers/users_controller.rb +3 -3
  19. data/app/helpers/accounts_helper.rb +2 -2
  20. data/app/helpers/application_helper.rb +20 -19
  21. data/app/helpers/campaigns_helper.rb +1 -1
  22. data/app/helpers/opportunities_helper.rb +4 -3
  23. data/app/helpers/tasks_helper.rb +6 -4
  24. data/app/helpers/users_helper.rb +1 -1
  25. data/app/helpers/versions_helper.rb +1 -1
  26. data/app/inputs/date_pair_input.rb +1 -1
  27. data/app/inputs/date_time_input.rb +1 -1
  28. data/app/models/entities/contact.rb +1 -0
  29. data/app/models/entities/lead.rb +4 -9
  30. data/app/models/entities/opportunity.rb +3 -6
  31. data/app/models/fields/field.rb +2 -3
  32. data/app/models/polymorphic/address.rb +1 -1
  33. data/app/models/polymorphic/comment.rb +1 -1
  34. data/app/models/polymorphic/task.rb +2 -3
  35. data/app/models/polymorphic/version.rb +5 -5
  36. data/app/models/setting.rb +6 -7
  37. data/app/models/users/user.rb +2 -2
  38. data/app/views/shared/_tags.html.haml +1 -5
  39. data/config/environments/test.rb +1 -1
  40. data/config/initializers/assets.rb +1 -1
  41. data/config/initializers/paper_trail.rb +1 -1
  42. data/config/initializers/simple_form.rb +1 -1
  43. data/config/initializers/views.rb +0 -1
  44. data/config/locales/th.rb +4 -4
  45. data/config/unicorn.rb +2 -2
  46. data/db/migrate/20100928030620_remove_uuid.rb +2 -4
  47. data/db/migrate/20111201030535_add_field_groups_klass_name.rb +2 -1
  48. data/db/migrate/20120224073107_remove_default_value_and_clear_settings.rb +1 -1
  49. data/db/schema.rb +0 -2
  50. data/fat_free_crm.gemspec +5 -5
  51. data/lib/fat_free_crm.rb +1 -3
  52. data/lib/fat_free_crm/callback.rb +2 -1
  53. data/lib/fat_free_crm/core_ext/string.rb +2 -2
  54. data/lib/fat_free_crm/engine.rb +1 -1
  55. data/lib/fat_free_crm/fields.rb +1 -1
  56. data/lib/fat_free_crm/i18n.rb +1 -1
  57. data/lib/fat_free_crm/mail_processor/base.rb +8 -2
  58. data/lib/fat_free_crm/mail_processor/comment_replies.rb +2 -1
  59. data/lib/fat_free_crm/permissions.rb +1 -1
  60. data/lib/fat_free_crm/version.rb +1 -1
  61. data/lib/gravatar_image_tag.rb +2 -2
  62. data/lib/tasks/ffcrm/comment_replies.rake +2 -2
  63. data/lib/tasks/ffcrm/config.rake +7 -6
  64. data/lib/tasks/ffcrm/demo.rake +1 -1
  65. data/lib/tasks/ffcrm/dropbox.rake +2 -2
  66. data/lib/tasks/ffcrm/setup.rake +4 -2
  67. data/lib/tasks/ffcrm/update_data.rake +5 -7
  68. data/spec/controllers/entities/campaigns_controller_spec.rb +1 -1
  69. data/spec/controllers/entities/leads_controller_spec.rb +1 -1
  70. data/spec/controllers/home_controller_spec.rb +5 -5
  71. data/spec/controllers/tasks_controller_spec.rb +3 -2
  72. data/spec/factories/sequences.rb +1 -2
  73. data/spec/factories/shared_factories.rb +5 -5
  74. data/spec/factories/user_factories.rb +3 -3
  75. data/spec/models/entities/opportunity_spec.rb +1 -1
  76. data/spec/models/fields/custom_field_pair_spec.rb +2 -2
  77. data/spec/models/setting_spec.rb +1 -1
  78. data/spec/shared/controllers.rb +1 -1
  79. data/spec/support/auth_macros.rb +6 -5
  80. data/spec/support/macros.rb +1 -1
  81. data/spec/views/application/auto_complete.haml_spec.rb +3 -3
  82. data/spec/views/campaigns/show.haml_spec.rb +2 -2
  83. data/spec/views/leads/update.js.haml_spec.rb +1 -1
  84. data/spec/views/tasks/index.haml_spec.rb +1 -1
  85. data/spec/views/tasks/update.js.haml_spec.rb +7 -7
  86. metadata +29 -4
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Fat Free CRM [![TravisCI][travis-img-url]][travis-ci-url] [![Code Climate](https://codeclimate.com/github/fatfreecrm/fat_free_crm.png)](https://codeclimate.com/github/fatfreecrm/fat_free_crm)
2
2
 
3
- [travis-img-url]: https://secure.travis-ci.org/fat_free_crm/fat_free_crm.png?branch=master
4
- [travis-ci-url]: https://travis-ci.org/fat_free_crm/fat_free_crm
3
+ [travis-img-url]: https://secure.travis-ci.org/fatfreecrm/fat_free_crm.png?branch=master
4
+ [travis-ci-url]: https://travis-ci.org/fatfreecrm/fat_free_crm
5
5
 
6
6
  ### An open source, Ruby on Rails [customer relationship management][crm-wiki] platform (CRM).
7
7
 
@@ -48,13 +48,6 @@ Pull requests and bug reports are always welcome!
48
48
 
49
49
  Visit our website at http://www.fatfreecrm.com/
50
50
 
51
- ## Usage
52
- To use this; simply add to your Gemfile
53
- ```
54
- gem 'fat_free_crm'
55
- ```
56
-
57
-
58
51
 
59
52
  ## System Requirements
60
53
 
@@ -8,7 +8,7 @@
8
8
  //= require jquery-migrate
9
9
  //= require jquery_ujs
10
10
  //= require jquery-ui
11
- //= require select2
11
+ //= require select2-full
12
12
  //= require crm
13
13
  //= require crm_classes
14
14
  //= require crm_loginout
@@ -18,7 +18,6 @@
18
18
  #$(".select2_tag").each ->
19
19
  $(this).select2
20
20
  'width':'resolve'
21
- tags: $(this).data("tags")
22
21
  placeholder: $(this).data("placeholder")
23
22
  multiple: $(this).data("multiple")
24
23
 
@@ -45,7 +45,7 @@ class ApplicationController < ActionController::Base
45
45
  respond_to do |format|
46
46
  format.any(:js, :html) { render partial: 'auto_complete' }
47
47
  format.json do
48
- render json: @auto_complete.inject({}){|h, a|
48
+ render json: @auto_complete.each_with_object({}) { |a, h|
49
49
  h[a.id] = a.respond_to?(:full_name) ? h(a.full_name) : h(a.name); h
50
50
  }
51
51
  end
@@ -251,10 +251,10 @@ class ApplicationController < ActionController::Base
251
251
  #----------------------------------------------------------------------------
252
252
  def redirection_url
253
253
  # Try to redirect somewhere sensible. Note: not all controllers have an index action
254
- url = if current_user.present?
255
- (respond_to?(:index) && action_name != 'index') ? { action: 'index' } : root_url
256
- else
257
- login_url
254
+ if current_user.present?
255
+ respond_to?(:index) && action_name != 'index' ? { action: 'index' } : root_url
256
+ else
257
+ login_url
258
258
  end
259
259
  end
260
260
 
@@ -272,7 +272,7 @@ class ApplicationController < ActionController::Base
272
272
  headers['Access-Control-Allow-Headers'] = 'X-Requested-With, X-Prototype-Version, Token'
273
273
  headers['Access-Control-Max-Age'] = '1728000'
274
274
 
275
- render :text => '', :content_type => 'text/plain'
275
+ render text: '', content_type: 'text/plain'
276
276
  end
277
277
  end
278
278
  end
@@ -34,7 +34,8 @@ class CommentsController < ApplicationController
34
34
  def edit
35
35
  @comment = Comment.find(params[:id])
36
36
 
37
- model, id = @comment.commentable_type, @comment.commentable_id
37
+ model = @comment.commentable_type
38
+ id = @comment.commentable_id
38
39
  unless model.constantize.my.find_by_id(id)
39
40
  respond_to_related_not_found(model.downcase)
40
41
  end
@@ -49,12 +50,13 @@ class CommentsController < ApplicationController
49
50
  comment_params.merge(user_id: current_user.id)
50
51
  )
51
52
  # Make sure commentable object exists and is accessible to the current user.
52
- model, id = @comment.commentable_type, @comment.commentable_id
53
- unless model.constantize.my.find_by_id(id)
54
- respond_to_related_not_found(model.downcase)
55
- else
53
+ model = @comment.commentable_type
54
+ id = @comment.commentable_id
55
+ if model.constantize.my.find_by_id(id)
56
56
  @comment.save
57
57
  respond_with(@comment)
58
+ else
59
+ respond_to_related_not_found(model.downcase)
58
60
  end
59
61
  end
60
62
 
@@ -65,14 +65,14 @@ class ContactsController < EntitiesController
65
65
  @contact.add_comment_by_user(@comment_body, current_user)
66
66
  @contacts = get_contacts if called_from_index_page?
67
67
  else
68
- unless params[:account][:id].blank?
69
- @account = Account.find(params[:account][:id])
70
- else
68
+ if params[:account][:id].blank?
71
69
  if request.referer =~ /\/accounts\/(\d+)\z/
72
70
  @account = Account.find(Regexp.last_match[1]) # related account
73
71
  else
74
72
  @account = Account.new(user: current_user)
75
73
  end
74
+ else
75
+ @account = Account.find(params[:account][:id])
76
76
  end
77
77
  @opportunity = Opportunity.my.find(params[:opportunity]) unless params[:opportunity].blank?
78
78
  end
@@ -153,7 +153,7 @@ class ContactsController < EntitiesController
153
153
 
154
154
  def set_options
155
155
  super
156
- @naming = (current_user.pref[:contacts_naming] || Contact.first_name_position) unless params[:cancel].true?
156
+ @naming = (current_user.pref[:contacts_naming] || Contact.first_name_position) unless params[:cancel].true?
157
157
  end
158
158
 
159
159
  #----------------------------------------------------------------------------
@@ -79,14 +79,14 @@ class OpportunitiesController < EntitiesController
79
79
  end
80
80
  else
81
81
  @accounts = Account.my.order('name')
82
- unless params[:account][:id].blank?
83
- @account = Account.find(params[:account][:id])
84
- else
82
+ if params[:account][:id].blank?
85
83
  if request.referer =~ /\/accounts\/(\d+)\z/
86
84
  @account = Account.find(Regexp.last_match[1]) # related account
87
85
  else
88
86
  @account = Account.new(user: current_user)
89
87
  end
88
+ else
89
+ @account = Account.find(params[:account][:id])
90
90
  end
91
91
  @contact = Contact.find(params[:contact]) unless params[:contact].blank?
92
92
  @campaign = Campaign.find(params[:campaign]) unless params[:campaign].blank?
@@ -186,7 +186,8 @@ class EntitiesController < ApplicationController
186
186
  #----------------------------------------------------------------------------
187
187
  def parse_query_and_tags(search_string)
188
188
  return ['', ''] if search_string.blank?
189
- query, tags = [], []
189
+ query = []
190
+ tags = []
190
191
  search_string.strip.split(/\s+/).each do |token|
191
192
  if token.starts_with?("#")
192
193
  tags << token[1..-1]
@@ -207,7 +208,7 @@ class EntitiesController < ApplicationController
207
208
  def set_view
208
209
  if params['view']
209
210
  controller = params['controller']
210
- action = (params['action'] == 'show') ? 'show' : 'index' # create update redraw filter index actions all use index view
211
+ action = params['action'] == 'show' ? 'show' : 'index' # create update redraw filter index actions all use index view
211
212
  current_user.pref[:"#{controller}_#{action}_view"] = params['view']
212
213
  end
213
214
  end
@@ -126,23 +126,30 @@ class HomeController < ApplicationController
126
126
  # needs refactoring to use user id instead. Permuations based on name or email
127
127
  # yield incorrect results.
128
128
  def activity_user
129
- user = current_user.pref[:activity_user]
130
- if user && user != "all_users"
131
- user = if user =~ /@/ # email
132
- User.where(email: user).first
133
- else # first_name middle_name last_name any_name
134
- name_query = if user.include?(" ")
135
- user.name_permutations.map do |first, last|
136
- User.where(first_name: first, last_name: last)
137
- end.map(&:to_a).flatten.first
138
- else
139
- [User.where(first_name: user), User.where(last_name: user)].map(&:to_a).flatten.first
140
- end
141
- end
142
- end
129
+ return nil if current_user.pref[:activity_user] == "all_users"
130
+ return nil unless current_user.pref[:activity_user]
131
+
132
+ is_email = current_user.pref[:activity_user].include?("@")
133
+
134
+ user = if is_email
135
+ User.where(email: current_user.pref[:activity_user]).first
136
+ else # first_name middle_name last_name any_name
137
+ name_query(current_user.pref[:activity_user])
138
+ end
139
+
143
140
  user.is_a?(User) ? user.id : nil
144
141
  end
145
142
 
143
+ def name_query(user)
144
+ if user.include?(" ")
145
+ user.name_permutations.map do |first, last|
146
+ User.where(first_name: first, last_name: last)
147
+ end.map(&:to_a).flatten.first
148
+ else
149
+ [User.where(first_name: user), User.where(last_name: user)].map(&:to_a).flatten.first
150
+ end
151
+ end
152
+
146
153
  #----------------------------------------------------------------------------
147
154
  def activity_duration
148
155
  duration = current_user.pref[:activity_duration]
@@ -60,6 +60,6 @@ class PasswordsController < ApplicationController
60
60
  #----------------------------------------------------------------------------
61
61
  def empty_password?
62
62
  (params[:user][:password] == params[:user][:password_confirmation]) &&
63
- (params[:user][:password].blank?) # " ".blank? == true
63
+ params[:user][:password].blank? # " ".blank? == true
64
64
  end
65
65
  end
@@ -102,13 +102,13 @@ class UsersController < ApplicationController
102
102
  #----------------------------------------------------------------------------
103
103
  def change_password
104
104
  if @user.valid_password?(params[:current_password], true) || @user.password_hash.blank?
105
- unless params[:user][:password].blank?
105
+ if params[:user][:password].blank?
106
+ flash[:notice] = t(:msg_password_not_changed)
107
+ else
106
108
  @user.password = params[:user][:password]
107
109
  @user.password_confirmation = params[:user][:password_confirmation]
108
110
  @user.save
109
111
  flash[:notice] = t(:msg_password_changed)
110
- else
111
- flash[:notice] = t(:msg_password_not_changed)
112
112
  end
113
113
  else
114
114
  @user.errors.add(:current_password, t(:msg_invalid_password))
@@ -28,8 +28,8 @@ module AccountsHelper
28
28
  options[:selected] = (@account && @account.id) || 0
29
29
  accounts = ([@account] + Account.my.order(:name).limit(25)).compact.uniq
30
30
  collection_select :account, :id, accounts, :id, :name, options,
31
- :"data-placeholder" => t(:select_an_account),
32
- :"data-url" => auto_complete_accounts_path(format: 'json'),
31
+ "data-placeholder": t(:select_an_account),
32
+ "data-url": auto_complete_accounts_path(format: 'json'),
33
33
  style: "width:330px; display:none;",
34
34
  class: 'ajax_chosen'
35
35
  end
@@ -10,14 +10,14 @@ module ApplicationHelper
10
10
  @current_tab ||= tabs.first[:text] # Select first tab by default.
11
11
  tabs.each { |tab| tab[:active] = (@current_tab == tab[:text] || @current_tab == tab[:url][:controller]) }
12
12
  else
13
- fail FatFreeCRM::MissingSettings, "Tab settings are missing, please run <b>rake ffcrm:setup</b> command."
13
+ raise FatFreeCRM::MissingSettings, "Tab settings are missing, please run <b>rake ffcrm:setup</b> command."
14
14
  end
15
15
  end
16
16
 
17
17
  #----------------------------------------------------------------------------
18
18
  def tabless_layout?
19
19
  %w(authentications passwords).include?(controller.controller_name) ||
20
- ((controller.controller_name == "users") && (%w(create new).include?(controller.action_name)))
20
+ ((controller.controller_name == "users") && %w(create new).include?(controller.action_name))
21
21
  end
22
22
 
23
23
  # Show existing flash or embed hidden paragraph ready for flash[:notice]
@@ -36,7 +36,7 @@ module ApplicationHelper
36
36
  #----------------------------------------------------------------------------
37
37
  def subtitle(id, hidden = true, text = id.to_s.split("_").last.capitalize)
38
38
  content_tag("div",
39
- link_to("<small>#{ hidden ? '&#9658;' : '&#9660;' }</small> #{sanitize text}".html_safe,
39
+ link_to("<small>#{hidden ? '&#9658;' : '&#9660;'}</small> #{sanitize text}".html_safe,
40
40
  url_for(controller: :home, action: :toggle, id: id),
41
41
  remote: true,
42
42
  onclick: "crm.flip_subtitle(this)"
@@ -244,7 +244,7 @@ module ApplicationHelper
244
244
  #----------------------------------------------------------------------------
245
245
  def refresh_sidebar_for(view, action = nil, shake = nil)
246
246
  text = ""
247
- text << "$('#sidebar').html('#{ j render(partial: 'layouts/sidebar', locals: { view: view, action: action }) }');"
247
+ text << "$('#sidebar').html('#{j render(partial: 'layouts/sidebar', locals: { view: view, action: action })}');"
248
248
  text << "$('##{j shake.to_s}').effect('shake', { duration:200, distance: 3 });" if shake
249
249
  text.html_safe
250
250
  end
@@ -258,9 +258,9 @@ module ApplicationHelper
258
258
  if site == :skype
259
259
  url = "callto:" << url
260
260
  else
261
- url = "http://" << url unless url.match(/^https?:\/\//)
261
+ url = "http://" << url unless url =~ /^https?:\/\//
262
262
  end
263
- link_to(image_tag("#{site}.gif", size: "15x15"), h(url), :"data-popup" => true, title: t(:open_in_window, h(url)))
263
+ link_to(image_tag("#{site}.gif", size: "15x15"), h(url), "data-popup": true, title: t(:open_in_window, h(url)))
264
264
  end
265
265
  end.compact.join("\n").html_safe
266
266
  end
@@ -269,7 +269,8 @@ module ApplicationHelper
269
269
  #----------------------------------------------------------------------------
270
270
  def redraw(option, value, url = send("redraw_#{controller.controller_name}_path"))
271
271
  if value.is_a?(Array)
272
- param, value = value.first, value.last
272
+ param = value.first
273
+ value = value.last
273
274
  end
274
275
  %{
275
276
  if ($('##{option}').html() != '#{value}') {
@@ -361,11 +362,11 @@ module ApplicationHelper
361
362
  def links_to_export(action = :index)
362
363
  token = current_user.single_access_token
363
364
  url_params = { action: action }
364
- url_params.merge!(id: params[:id]) unless params[:id].blank?
365
- url_params.merge!(query: params[:query]) unless params[:query].blank?
366
- url_params.merge!(q: params[:q]) unless params[:q].blank?
367
- url_params.merge!(view: @view) unless @view.blank? # tasks
368
- url_params.merge!(id: params[:id]) unless params[:id].blank?
365
+ url_params[:id] = params[:id] unless params[:id].blank?
366
+ url_params[:query] = params[:query] unless params[:query].blank?
367
+ url_params[:q] = params[:q] unless params[:q].blank?
368
+ url_params[:view] = @view unless @view.blank? # tasks
369
+ url_params[:id] = params[:id] unless params[:id].blank?
369
370
 
370
371
  exports = %w(xls csv).map do |format|
371
372
  link_to(format.upcase, url_params.merge(format: format), title: I18n.t(:"to_#{format}")) unless action.to_s == "show"
@@ -439,7 +440,7 @@ module ApplicationHelper
439
440
  def section_title(id, hidden = true, text = nil, info_text = nil)
440
441
  text = id.to_s.split("_").last.capitalize if text.nil?
441
442
  content_tag("div", class: "subtitle show_attributes") do
442
- content = link_to("<small>#{ hidden ? '&#9658;' : '&#9660;' }</small> #{sanitize text}".html_safe,
443
+ content = link_to("<small>#{hidden ? '&#9658;' : '&#9660;'}</small> #{sanitize text}".html_safe,
443
444
  url_for(controller: :home, action: :toggle, id: id),
444
445
  remote: true,
445
446
  onclick: "crm.flip_subtitle(this)"
@@ -452,7 +453,7 @@ module ApplicationHelper
452
453
  # Return name of current view
453
454
  def current_view_name
454
455
  controller = params['controller']
455
- action = (params['action'] == 'show') ? 'show' : 'index' # create update redraw filter index actions all use index view
456
+ action = params['action'] == 'show' ? 'show' : 'index' # create update redraw filter index actions all use index view
456
457
  current_user.pref[:"#{controller}_#{action}_view"]
457
458
  end
458
459
 
@@ -460,7 +461,7 @@ module ApplicationHelper
460
461
  # Get template in current context with current view name
461
462
  def template_for_current_view
462
463
  controller = params['controller']
463
- action = (params['action'] == 'show') ? 'show' : 'index' # create update redraw filter index actions all use index view
464
+ action = params['action'] == 'show' ? 'show' : 'index' # create update redraw filter index actions all use index view
464
465
  template = FatFreeCRM::ViewFactory.template_for_current_view(controller: controller, action: action, name: current_view_name)
465
466
  template
466
467
  end
@@ -469,7 +470,7 @@ module ApplicationHelper
469
470
  # Generate buttons for available views given the current context
470
471
  def view_buttons
471
472
  controller = params['controller']
472
- action = (params['action'] == 'show') ? 'show' : 'index' # create update redraw filter index actions all use index view
473
+ action = params['action'] == 'show' ? 'show' : 'index' # create update redraw filter index actions all use index view
473
474
  views = FatFreeCRM::ViewFactory.views_for(controller: controller, action: action)
474
475
  return nil unless views.size > 1
475
476
  lis = ''.html_safe
@@ -481,8 +482,8 @@ module ApplicationHelper
481
482
  "#{h view.name}-button"
482
483
  end
483
484
  lis << content_tag(:li) do
484
- url = (action == "index") ? send("redraw_#{controller}_path") : send("#{controller.singularize}_path")
485
- link_to('#', title: t(view.name, default: h(view.title)), :"data-view" => h(view.name), :"data-url" => h(url), :"data-context" => action, class: classes) do
485
+ url = action == "index" ? send("redraw_#{controller}_path") : send("#{controller.singularize}_path")
486
+ link_to('#', title: t(view.name, default: h(view.title)), "data-view": h(view.name), "data-url": h(url), "data-context": action, class: classes) do
486
487
  icon = view.icon || 'fa-bars'
487
488
  content_tag(:i, nil, class: "fa #{h icon}")
488
489
  end
@@ -520,7 +521,7 @@ module ApplicationHelper
520
521
  # options = { renderer: {...} , params: {...}
521
522
  def paginate(options = {})
522
523
  collection = options.delete(:collection)
523
- options = { params: { action: 'index'}}.merge(options) if params['action'] == 'filter'
524
+ options = { params: { action: 'index' } }.merge(options) if params['action'] == 'filter'
524
525
  options = { renderer: RemoteLinkPaginationHelper::LinkRenderer }.merge(options)
525
526
  will_paginate(collection, options)
526
527
  end
@@ -29,6 +29,6 @@ module CampaignsHelper
29
29
  def campaign_summary(campaign)
30
30
  status = render file: "campaigns/_status.html.haml", locals: { campaign: campaign }
31
31
  metrics = render file: "campaigns/_metrics.html.haml", locals: { campaign: campaign }
32
- "#{t(campaign.status)}, " << [status, metrics].map { |str| strip_tags(str) }.join(' ').gsub("\n", '')
32
+ "#{t(campaign.status)}, " << [status, metrics].map { |str| strip_tags(str) }.join(' ').delete("\n")
33
33
  end
34
34
  end
@@ -13,7 +13,8 @@ module OpportunitiesHelper
13
13
  # Opportunity summary for RSS/ATOM feeds.
14
14
  #----------------------------------------------------------------------------
15
15
  def opportunity_summary(opportunity)
16
- summary, amount = [], []
16
+ summary = []
17
+ amount = []
17
18
  summary << (opportunity.stage ? t(opportunity.stage) : t(:other))
18
19
  summary << number_to_currency(opportunity.weighted_amount, precision: 0)
19
20
  unless %w(won lost).include?(opportunity.stage)
@@ -38,8 +39,8 @@ module OpportunitiesHelper
38
39
  selected_campaign = Campaign.find_by_id(options[:selected])
39
40
  campaigns = ([selected_campaign] + Campaign.my.order(:name).limit(25)).compact.uniq
40
41
  collection_select :opportunity, :campaign_id, campaigns, :id, :name, options,
41
- :"data-placeholder" => t(:select_a_campaign),
42
- :"data-url" => auto_complete_campaigns_path(format: 'json'),
42
+ "data-placeholder": t(:select_a_campaign),
43
+ "data-url": auto_complete_campaigns_path(format: 'json'),
43
44
  style: "width:330px; display:none;",
44
45
  class: 'ajax_chosen'
45
46
  end
@@ -92,23 +92,25 @@ module TasksHelper
92
92
 
93
93
  #----------------------------------------------------------------------------
94
94
  def replace_content(task, bucket = nil)
95
- partial = (task.assigned_to && task.assigned_to != current_user.id) ? "assigned" : "pending"
95
+ partial = task.assigned_to && task.assigned_to != current_user.id ? "assigned" : "pending"
96
96
  html = render(partial: "tasks/#{partial}", collection: [task], locals: { bucket: bucket })
97
- text = "$('##{dom_id(task)}').html('#{ j html }');\n".html_safe
97
+ text = "$('##{dom_id(task)}').html('#{j html}');\n".html_safe
98
+
99
+ text
98
100
  end
99
101
 
100
102
  #----------------------------------------------------------------------------
101
103
  def insert_content(task, bucket, view)
102
104
  text = "$('#list_#{bucket}').show();\n"
103
105
  html = render(partial: view, collection: [task], locals: { bucket: bucket })
104
- text << "$('##{h bucket.to_s}').prepend('#{ j html }');\n"
106
+ text << "$('##{h bucket.to_s}').prepend('#{j html}');\n"
105
107
  text << "$('##{dom_id(task)}').effect('highlight', { duration:1500 });\n"
106
108
  text.html_safe
107
109
  end
108
110
 
109
111
  #----------------------------------------------------------------------------
110
112
  def tasks_flash(message)
111
- text = "$('#flash').html('#{ sanitize(message) }');\n"
113
+ text = "$('#flash').html('#{sanitize(message)}');\n"
112
114
  text << "crm.flash('notice', true)\n"
113
115
  text.html_safe
114
116
  end
@@ -6,7 +6,7 @@
6
6
  module UsersHelper
7
7
  def language_for(user)
8
8
  if user.preference[:locale]
9
- locale, language = languages.detect { |locale, _language| locale == user.preference[:locale] }
9
+ _locale, language = languages.detect { |locale, _language| locale == user.preference[:locale] }
10
10
  end
11
11
  language || "English"
12
12
  end