fat_free_crm 0.12.3 → 0.13.0

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 (521) hide show
  1. checksums.yaml +5 -13
  2. data/.travis.yml +1 -11
  3. data/Gemfile +7 -19
  4. data/Gemfile.lock +166 -166
  5. data/Procfile +1 -1
  6. data/README.md +20 -20
  7. data/app/assets/javascripts/admin/fields.js.coffee +3 -3
  8. data/app/assets/javascripts/application.js.erb +3 -0
  9. data/app/assets/javascripts/crm.js +1 -0
  10. data/app/assets/javascripts/crm_comments.js.coffee +66 -0
  11. data/app/assets/javascripts/lists.js.coffee +45 -2
  12. data/app/assets/javascripts/search.js.coffee +2 -0
  13. data/app/assets/javascripts/timeago.js +17 -0
  14. data/app/assets/stylesheets/advanced_search.css.scss +49 -25
  15. data/app/assets/stylesheets/application.css.erb +3 -0
  16. data/app/assets/stylesheets/common.scss +13 -0
  17. data/app/assets/stylesheets/format_buttons.css.scss +15 -10
  18. data/app/assets/stylesheets/header.scss +3 -0
  19. data/app/assets/stylesheets/lists.css.scss +4 -0
  20. data/app/controllers/admin/fields_controller.rb +5 -5
  21. data/app/controllers/admin/users_controller.rb +1 -3
  22. data/app/controllers/application_controller.rb +23 -23
  23. data/app/controllers/comments_controller.rb +3 -31
  24. data/app/controllers/entities/accounts_controller.rb +3 -3
  25. data/app/controllers/entities/campaigns_controller.rb +4 -4
  26. data/app/controllers/entities/contacts_controller.rb +2 -2
  27. data/app/controllers/entities/leads_controller.rb +3 -3
  28. data/app/controllers/entities/opportunities_controller.rb +4 -3
  29. data/app/controllers/entities_controller.rb +6 -6
  30. data/app/controllers/home_controller.rb +1 -1
  31. data/app/controllers/lists_controller.rb +8 -1
  32. data/app/controllers/tasks_controller.rb +1 -1
  33. data/app/controllers/users_controller.rb +46 -23
  34. data/app/helpers/admin/application_helper.rb +1 -3
  35. data/app/helpers/admin/field_groups_helper.rb +2 -1
  36. data/app/helpers/application_helper.rb +37 -16
  37. data/app/helpers/home_helper.rb +1 -2
  38. data/app/helpers/leads_helper.rb +5 -6
  39. data/app/helpers/tasks_helper.rb +36 -50
  40. data/app/models/entities/account.rb +10 -7
  41. data/app/models/entities/campaign.rb +4 -4
  42. data/app/models/entities/contact.rb +8 -5
  43. data/app/models/entities/lead.rb +8 -8
  44. data/app/models/entities/opportunity.rb +13 -18
  45. data/app/models/fields/custom_field.rb +10 -0
  46. data/app/models/fields/field.rb +3 -3
  47. data/app/models/fields/field_group.rb +1 -1
  48. data/app/models/list.rb +1 -0
  49. data/app/models/polymorphic/address.rb +3 -3
  50. data/app/models/polymorphic/comment.rb +2 -4
  51. data/app/models/polymorphic/task.rb +32 -27
  52. data/app/models/setting.rb +3 -9
  53. data/app/models/users/ability.rb +2 -13
  54. data/app/models/users/user.rb +12 -15
  55. data/app/views/accounts/_edit.html.haml +1 -1
  56. data/app/views/accounts/_index_brief.html.haml +3 -3
  57. data/app/views/accounts/_index_long.html.haml +3 -3
  58. data/app/views/accounts/_new.html.haml +1 -1
  59. data/app/views/accounts/create.js.haml +17 -0
  60. data/app/views/accounts/destroy.js.haml +6 -0
  61. data/app/views/accounts/edit.js.haml +32 -0
  62. data/app/views/accounts/index.js.haml +11 -0
  63. data/app/views/accounts/index.xls.builder +9 -7
  64. data/app/views/accounts/new.js.haml +11 -0
  65. data/app/views/accounts/show.js.haml +5 -0
  66. data/app/views/accounts/update.js.haml +17 -0
  67. data/app/views/admin/field_groups/_edit.html.haml +1 -1
  68. data/app/views/admin/field_groups/_new.html.haml +1 -1
  69. data/app/views/admin/field_groups/confirm.js.haml +7 -0
  70. data/app/views/admin/field_groups/create.js.haml +20 -0
  71. data/app/views/admin/field_groups/destroy.js.haml +9 -0
  72. data/app/views/admin/field_groups/edit.js.haml +12 -0
  73. data/app/views/admin/field_groups/new.js.haml +8 -0
  74. data/app/views/admin/field_groups/update.js.haml +8 -0
  75. data/app/views/admin/fields/_field.html.haml +2 -2
  76. data/app/views/admin/fields/_form.html.haml +2 -2
  77. data/app/views/admin/fields/create.js.haml +17 -0
  78. data/app/views/admin/fields/destroy.js.haml +8 -0
  79. data/app/views/admin/fields/edit.js.haml +3 -0
  80. data/app/views/admin/fields/update.js.haml +13 -0
  81. data/app/views/admin/groups/_edit.html.haml +1 -1
  82. data/app/views/admin/groups/_new.html.haml +1 -1
  83. data/app/views/admin/groups/create.js.haml +10 -0
  84. data/app/views/admin/groups/destroy.js.haml +9 -0
  85. data/app/views/admin/groups/edit.js.haml +14 -0
  86. data/app/views/admin/groups/index.html.haml +1 -1
  87. data/app/views/admin/groups/index.js.haml +2 -0
  88. data/app/views/admin/groups/new.js.haml +9 -0
  89. data/app/views/admin/groups/update.js.haml +9 -0
  90. data/app/views/admin/tags/_edit.html.haml +1 -1
  91. data/app/views/admin/tags/_new.html.haml +1 -1
  92. data/app/views/admin/tags/confirm.js.haml +7 -0
  93. data/app/views/admin/tags/create.js.haml +11 -0
  94. data/app/views/admin/tags/destroy.js.haml +10 -0
  95. data/app/views/admin/tags/edit.js.haml +20 -0
  96. data/app/views/admin/tags/new.js.haml +7 -0
  97. data/app/views/admin/tags/update.js.haml +9 -0
  98. data/app/views/admin/users/_edit.html.haml +1 -1
  99. data/app/views/admin/users/_new.html.haml +1 -1
  100. data/app/views/admin/users/_user.html.haml +1 -1
  101. data/app/views/admin/users/confirm.js.haml +7 -0
  102. data/app/views/admin/users/create.js.haml +10 -0
  103. data/app/views/admin/users/destroy.js.haml +10 -0
  104. data/app/views/admin/users/edit.js.haml +20 -0
  105. data/app/views/admin/users/index.js.haml +2 -0
  106. data/app/views/admin/users/new.js.haml +9 -0
  107. data/app/views/admin/users/reactivate.js.haml +3 -0
  108. data/app/views/admin/users/suspend.js.haml +3 -0
  109. data/app/views/admin/users/update.js.haml +9 -0
  110. data/app/views/authentications/new.html.haml +1 -1
  111. data/app/views/campaigns/_edit.html.haml +1 -1
  112. data/app/views/campaigns/_new.html.haml +1 -1
  113. data/app/views/campaigns/create.js.haml +20 -0
  114. data/app/views/campaigns/destroy.js.haml +6 -0
  115. data/app/views/campaigns/edit.js.haml +33 -0
  116. data/app/views/campaigns/index.js.haml +11 -0
  117. data/app/views/campaigns/index.xls.builder +9 -7
  118. data/app/views/campaigns/new.js.haml +11 -0
  119. data/app/views/campaigns/show.js.haml +5 -0
  120. data/app/views/campaigns/update.js.haml +20 -0
  121. data/app/views/comments/_comment.html.haml +1 -1
  122. data/app/views/comments/_edit.html.haml +1 -1
  123. data/app/views/comments/_new.html.haml +3 -2
  124. data/app/views/comments/create.js.haml +14 -0
  125. data/app/views/comments/destroy.js.haml +5 -0
  126. data/app/views/comments/edit.js.haml +11 -0
  127. data/app/views/comments/update.js.haml +9 -0
  128. data/app/views/contacts/_edit.html.haml +1 -1
  129. data/app/views/contacts/_index_full.html.haml +1 -1
  130. data/app/views/contacts/_index_long.html.haml +2 -1
  131. data/app/views/contacts/_new.html.haml +1 -1
  132. data/app/views/contacts/_section_general.html.haml +3 -3
  133. data/app/views/contacts/create.js.haml +23 -0
  134. data/app/views/contacts/destroy.js.haml +9 -0
  135. data/app/views/contacts/edit.js.haml +35 -0
  136. data/app/views/contacts/index.js.haml +11 -0
  137. data/app/views/contacts/index.xls.builder +9 -7
  138. data/app/views/contacts/new.js.haml +13 -0
  139. data/app/views/contacts/show.js.haml +5 -0
  140. data/app/views/contacts/update.js.haml +22 -0
  141. data/app/views/emails/destroy.js.haml +5 -0
  142. data/app/views/entities/_permissions.html.haml +1 -1
  143. data/app/views/entities/attach.js.haml +21 -0
  144. data/app/views/entities/contacts.js.haml +3 -0
  145. data/app/views/entities/discard.js.haml +6 -0
  146. data/app/views/entities/leads.js.haml +3 -0
  147. data/app/views/entities/opportunities.js.haml +3 -0
  148. data/app/views/entities/subscription_update.js.haml +4 -0
  149. data/app/views/entities/versions.js.haml +3 -0
  150. data/app/views/fields/group.js.erb +3 -0
  151. data/app/views/home/_account.html.haml +3 -3
  152. data/app/views/home/_opportunity.html.haml +3 -3
  153. data/app/views/home/index.atom.builder +3 -3
  154. data/app/views/home/index.js.haml +7 -0
  155. data/app/views/home/index.rss.builder +2 -2
  156. data/app/views/home/options.js.haml +7 -0
  157. data/app/views/layouts/_footer.html.haml +0 -4
  158. data/app/views/layouts/_sidebar.html.haml +1 -0
  159. data/app/views/layouts/_tabbed.html.haml +1 -4
  160. data/app/views/layouts/admin/application.html.haml +0 -1
  161. data/app/views/layouts/application.html.haml +5 -7
  162. data/app/views/leads/_convert.html.haml +1 -1
  163. data/app/views/leads/_edit.html.haml +1 -1
  164. data/app/views/leads/_index_long.html.haml +2 -2
  165. data/app/views/leads/_new.html.haml +1 -1
  166. data/app/views/leads/convert.js.haml +35 -0
  167. data/app/views/leads/create.js.haml +21 -0
  168. data/app/views/leads/destroy.js.haml +9 -0
  169. data/app/views/leads/edit.js.haml +35 -0
  170. data/app/views/leads/index.js.haml +11 -0
  171. data/app/views/leads/index.xls.builder +9 -7
  172. data/app/views/leads/new.js.haml +11 -0
  173. data/app/views/leads/promote.js.haml +26 -0
  174. data/app/views/leads/reject.js.haml +12 -0
  175. data/app/views/leads/show.js.haml +5 -0
  176. data/app/views/leads/update.js.haml +26 -0
  177. data/app/views/lists/_personal_sidebar.html.haml +28 -0
  178. data/app/views/lists/_sidebar.html.haml +10 -7
  179. data/app/views/lists/create.js.haml +10 -0
  180. data/app/views/lists/destroy.js.haml +1 -0
  181. data/app/views/opportunities/_edit.html.haml +1 -1
  182. data/app/views/opportunities/_index_brief.html.haml +3 -3
  183. data/app/views/opportunities/_index_long.html.haml +3 -3
  184. data/app/views/opportunities/_new.html.haml +1 -2
  185. data/app/views/opportunities/_top_section.html.haml +4 -0
  186. data/app/views/opportunities/contacts.js.haml +3 -0
  187. data/app/views/opportunities/create.js.haml +29 -0
  188. data/app/views/opportunities/destroy.js.haml +13 -0
  189. data/app/views/opportunities/edit.js.haml +35 -0
  190. data/app/views/opportunities/index.js.haml +11 -0
  191. data/app/views/opportunities/index.xls.builder +9 -7
  192. data/app/views/opportunities/new.js.haml +13 -0
  193. data/app/views/opportunities/show.js.haml +5 -0
  194. data/app/views/opportunities/update.js.haml +25 -0
  195. data/app/views/passwords/edit.html.haml +1 -1
  196. data/app/views/passwords/new.html.haml +1 -1
  197. data/app/views/shared/_comment.html.haml +1 -1
  198. data/app/views/shared/_inline_styles.html.haml +1 -1
  199. data/app/views/tasks/_edit.html.haml +1 -1
  200. data/app/views/tasks/_new.html.haml +1 -1
  201. data/app/views/tasks/complete.js.haml +14 -0
  202. data/app/views/tasks/create.js.haml +39 -0
  203. data/app/views/tasks/destroy.js.haml +7 -0
  204. data/app/views/tasks/discard.js.haml +1 -0
  205. data/app/views/tasks/edit.js.haml +26 -0
  206. data/app/views/tasks/filter.js.haml +4 -0
  207. data/app/views/tasks/index.xls.builder +7 -5
  208. data/app/views/tasks/new.js.haml +8 -0
  209. data/app/views/tasks/update.js.haml +19 -0
  210. data/app/views/users/_password.html.haml +1 -1
  211. data/app/views/users/_profile.html.haml +1 -1
  212. data/app/views/users/avatar.js.haml +9 -0
  213. data/app/views/users/change_password.js.haml +13 -0
  214. data/app/views/users/edit.js.haml +9 -0
  215. data/app/views/users/new.html.haml +1 -1
  216. data/app/views/users/password.js.haml +10 -0
  217. data/app/views/users/update.js.haml +9 -0
  218. data/app/views/users/upload_avatar.js.haml +7 -0
  219. data/app/views/versions/_version.html.haml +1 -1
  220. data/config/application.rb +1 -4
  221. data/config/environments/production.rb +3 -2
  222. data/config/initializers/custom_field_ransack_translations.rb +15 -0
  223. data/config/initializers/locale.rb +9 -1
  224. data/config/initializers/secret_token.rb +1 -25
  225. data/config/initializers/views.rb +20 -20
  226. data/config/locales/cz.yml +245 -211
  227. data/config/locales/cz_fat_free_crm.yml +105 -181
  228. data/config/locales/de.yml +162 -118
  229. data/config/locales/de_fat_free_crm.yml +760 -731
  230. data/config/locales/de_ransack.yml +91 -0
  231. data/config/locales/en-GB.yml +158 -119
  232. data/config/locales/en-GB_fat_free_crm.yml +161 -279
  233. data/config/locales/en-US.yml +158 -121
  234. data/config/locales/en-US_fat_free_crm.yml +185 -179
  235. data/config/locales/en-US_ransack.yml +81 -82
  236. data/config/locales/es.yml +164 -123
  237. data/config/locales/es_fat_free_crm.yml +151 -209
  238. data/config/locales/fr-CA.yml +167 -130
  239. data/config/locales/fr-CA_fat_free_crm.yml +142 -202
  240. data/config/locales/fr.yml +170 -125
  241. data/config/locales/fr_fat_free_crm.yml +199 -302
  242. data/config/locales/it.yml +158 -122
  243. data/config/locales/it_fat_free_crm.yml +105 -168
  244. data/config/locales/ja.yml +162 -131
  245. data/config/locales/ja_fat_free_crm.yml +118 -188
  246. data/config/locales/pl.yml +168 -132
  247. data/config/locales/pl_fat_free_crm.yml +115 -186
  248. data/config/locales/pt-BR.yml +160 -127
  249. data/config/locales/pt-BR_fat_free_crm.yml +125 -182
  250. data/config/locales/ru.yml +256 -233
  251. data/config/locales/ru_fat_free_crm.yml +136 -193
  252. data/config/locales/sv-SE.yml +164 -181
  253. data/config/locales/sv-SE_fat_free_crm.yml +129 -193
  254. data/config/locales/th_fat_free_crm.yml +114 -194
  255. data/config/locales/zh-CN.yml +176 -149
  256. data/config/locales/zh-CN_fat_free_crm.yml +78 -167
  257. data/config/routes.rb +1 -1
  258. data/config/settings.default.yml +74 -23
  259. data/custom_plan.rb +11 -0
  260. data/db/migrate/20131207033244_add_user_id_to_lists.rb +6 -0
  261. data/db/schema.rb +4 -1
  262. data/fat_free_crm.gemspec +3 -3
  263. data/lib/fat_free_crm.rb +1 -11
  264. data/lib/fat_free_crm/export_csv.rb +3 -3
  265. data/lib/fat_free_crm/fields.rb +10 -0
  266. data/lib/fat_free_crm/gem_dependencies.rb +1 -2
  267. data/lib/fat_free_crm/i18n.rb +9 -5
  268. data/lib/fat_free_crm/version.rb +2 -2
  269. data/lib/fat_free_crm/view_factory.rb +8 -5
  270. data/lib/tasks/ffcrm/config.rake +9 -12
  271. data/lib/tasks/ffcrm/missing_translations.rake +2 -1
  272. data/spec/controllers/admin/users_controller_spec.rb +6 -4
  273. data/spec/controllers/applications_controller_spec.rb +4 -4
  274. data/spec/controllers/authentications_controller_spec.rb +15 -15
  275. data/spec/controllers/comments_controller_spec.rb +9 -87
  276. data/spec/controllers/emails_controller_spec.rb +1 -1
  277. data/spec/controllers/entities/accounts_controller_spec.rb +7 -7
  278. data/spec/controllers/entities/campaigns_controller_spec.rb +5 -5
  279. data/spec/controllers/entities/contacts_controller_spec.rb +7 -7
  280. data/spec/controllers/entities/leads_controller_spec.rb +14 -14
  281. data/spec/controllers/entities/opportunities_controller_spec.rb +8 -8
  282. data/spec/controllers/home_controller_spec.rb +6 -6
  283. data/spec/controllers/tasks_controller_spec.rb +7 -7
  284. data/spec/controllers/users_controller_spec.rb +22 -50
  285. data/spec/features/support/selector_helpers.rb +1 -6
  286. data/spec/features/tasks_spec.rb +2 -2
  287. data/spec/helpers/application_helper_spec.rb +15 -15
  288. data/spec/lib/fields_spec.rb +29 -29
  289. data/spec/lib/mail_processor/base_spec.rb +7 -7
  290. data/spec/lib/mail_processor/dropbox_spec.rb +3 -3
  291. data/spec/lib/view_factory_spec.rb +14 -14
  292. data/spec/models/entities/opportunity_spec.rb +1 -1
  293. data/spec/models/fields/custom_field_date_pair_spec.rb +14 -14
  294. data/spec/models/fields/custom_field_pair_spec.rb +13 -13
  295. data/spec/models/fields/custom_field_spec.rb +5 -5
  296. data/spec/models/fields/field_spec.rb +2 -2
  297. data/spec/models/observers/entity_observer_spec.rb +2 -2
  298. data/spec/models/users/user_spec.rb +7 -7
  299. data/spec/routing/comments_routing_spec.rb +0 -9
  300. data/spec/shared/controllers.rb +75 -77
  301. data/spec/shared/models.rb +1 -1
  302. data/spec/spec_helper.rb +1 -2
  303. data/spec/support/auth_macros.rb +3 -3
  304. data/spec/support/mail_processor_mocks.rb +13 -13
  305. data/spec/views/accounts/_edit.haml_spec.rb +1 -1
  306. data/spec/views/accounts/{create.rjs_spec.rb → create.js.haml_spec.rb} +9 -14
  307. data/spec/views/accounts/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +6 -8
  308. data/spec/views/accounts/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +10 -18
  309. data/spec/views/accounts/{index.rjs_spec.rb → index.js.haml_spec.rb} +7 -11
  310. data/spec/views/accounts/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  311. data/spec/views/accounts/show.haml_spec.rb +1 -1
  312. data/spec/views/accounts/{update.rjs_spec.rb → update.js.haml_spec.rb} +16 -25
  313. data/spec/views/admin/field_groups/create.js.haml_spec.rb +31 -0
  314. data/spec/views/admin/field_groups/destroy.js.haml_spec.rb +31 -0
  315. data/spec/views/admin/field_groups/edit.js.haml_spec.rb +24 -0
  316. data/spec/views/admin/field_groups/new.js.haml_spec.rb +25 -0
  317. data/spec/views/admin/field_groups/update.js.haml_spec.rb +30 -0
  318. data/spec/views/admin/users/_create.haml_spec.rb +1 -1
  319. data/spec/views/admin/users/{create.rjs_spec.rb → create.js.haml_spec.rb} +6 -9
  320. data/spec/views/admin/users/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +6 -7
  321. data/spec/views/admin/users/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +6 -12
  322. data/spec/views/admin/users/index.haml_spec.rb +0 -0
  323. data/spec/views/admin/users/{index.rjs_spec.rb → index.js.haml_spec.rb} +3 -5
  324. data/spec/views/admin/users/{new.rjs_spec.rb → new.js.haml_spec.rb} +4 -6
  325. data/spec/views/admin/users/{reactivate.rjs_spec.rb → reactivate.js.haml_spec.rb} +2 -4
  326. data/spec/views/admin/users/show.haml_spec.rb +0 -0
  327. data/spec/views/admin/users/{suspend.rjs_spec.rb → suspend.js.haml_spec.rb} +2 -4
  328. data/spec/views/admin/users/{update.rjs_spec.rb → update.js.haml_spec.rb} +6 -10
  329. data/spec/views/campaigns/{create.rjs_spec.rb → create.js.haml_spec.rb} +9 -14
  330. data/spec/views/campaigns/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +6 -7
  331. data/spec/views/campaigns/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +11 -19
  332. data/spec/views/campaigns/{index.rjs_spec.rb → index.js.haml_spec.rb} +5 -9
  333. data/spec/views/campaigns/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  334. data/spec/views/campaigns/{update.rjs_spec.rb → update.js.haml_spec.rb} +14 -21
  335. data/spec/views/comments/{new.rjs_spec.rb → edit.js.haml_spec.rb} +12 -9
  336. data/spec/views/contacts/{create.rjs_spec.rb → create.js.haml_spec.rb} +9 -16
  337. data/spec/views/contacts/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +6 -8
  338. data/spec/views/contacts/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +12 -19
  339. data/spec/views/contacts/index.haml_spec.rb +1 -1
  340. data/spec/views/contacts/{index.rjs_spec.rb → index.js.html_spec.rb} +7 -11
  341. data/spec/views/contacts/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -7
  342. data/spec/views/contacts/{update.rjs_spec.rb → update.js.haml_spec.rb} +20 -35
  343. data/spec/views/home/{index.rjs_spec.rb → index.js.haml_spec.rb} +2 -4
  344. data/spec/views/home/{options.rjs_spec.rb → options.js.haml_spec.rb} +7 -12
  345. data/spec/views/leads/{convert.rjs_spec.rb → convert.js.haml_spec.rb} +12 -20
  346. data/spec/views/leads/{create.rjs_spec.rb → create.js.haml_spec.rb} +13 -19
  347. data/spec/views/leads/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +9 -12
  348. data/spec/views/leads/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +12 -20
  349. data/spec/views/leads/{index.rjs_spec.rb → index.js.haml_spec.rb} +5 -9
  350. data/spec/views/leads/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  351. data/spec/views/leads/{promote.rjs_spec.rb → promote.js.haml_spec.rb} +28 -43
  352. data/spec/views/leads/{reject.rjs_spec.rb → reject.js.haml_spec.rb} +10 -17
  353. data/spec/views/leads/{update.rjs_spec.rb → update.js.haml_spec.rb} +25 -38
  354. data/spec/views/opportunities/{create.rjs_spec.rb → create.js.haml_spec.rb} +16 -26
  355. data/spec/views/opportunities/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +13 -16
  356. data/spec/views/opportunities/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +10 -18
  357. data/spec/views/opportunities/{index.rjs_spec.rb → index.js.haml_spec.rb} +7 -12
  358. data/spec/views/opportunities/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  359. data/spec/views/opportunities/{update.rjs_spec.rb → update.js.haml_spec.rb} +29 -46
  360. data/spec/views/tasks/_edit.haml_spec.rb +1 -1
  361. data/spec/views/tasks/{complete.rjs_spec.rb → complete.js.haml_spec.rb} +9 -14
  362. data/spec/views/tasks/{create.rjs_spec.rb → create.js.haml_spec.rb} +25 -33
  363. data/spec/views/tasks/{destroy.rjs_spec.rb → destroy.js.haml_spec.rb} +9 -11
  364. data/spec/views/tasks/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +9 -14
  365. data/spec/views/tasks/index.haml_spec.rb +1 -2
  366. data/spec/views/tasks/{new.rjs_spec.rb → new.js.haml_spec.rb} +6 -8
  367. data/spec/views/tasks/{update.rjs_spec.rb → update.js.haml_spec.rb} +28 -41
  368. data/spec/views/users/{avatar.rjs_spec.rb → avatar.js.haml_spec.rb} +7 -9
  369. data/spec/views/users/{change_password.rjs_spec.rb → change_password.js.haml_spec.rb} +10 -12
  370. data/spec/views/users/{edit.rjs_spec.rb → edit.js.haml_spec.rb} +8 -10
  371. data/spec/views/users/{password.rjs_spec.rb → password.js.haml_spec.rb} +9 -11
  372. data/spec/views/users/{update.rjs_spec.rb → update.js.haml_spec.rb} +7 -15
  373. data/spec/views/users/{upload_avatar.rjs_spec.rb → upload_avatar.js.haml_spec.rb} +8 -10
  374. data/vendor/assets/javascripts/ajax-chosen-jquery.js +2 -0
  375. data/vendor/assets/javascripts/ajax-chosen-prototype.js +2 -0
  376. data/vendor/assets/javascripts/ajax-chosen.jquery.coffee +81 -0
  377. data/vendor/assets/javascripts/ajax-chosen.proto.coffee +98 -0
  378. data/vendor/assets/javascripts/jquery_timeago/index.js +17 -0
  379. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.cz.js +18 -0
  380. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.de.js +18 -0
  381. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.en-GB.js +20 -0
  382. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.en-US.js +20 -0
  383. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.es.js +18 -0
  384. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.fr-CA.js +17 -0
  385. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.fr.js +17 -0
  386. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.it.js +16 -0
  387. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.ja.js +19 -0
  388. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.js +194 -0
  389. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.pl.js +31 -0
  390. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.pt-BR.js +18 -0
  391. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.ru.js +34 -0
  392. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.sv-SE.js +18 -0
  393. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.th.js +20 -0
  394. data/vendor/assets/javascripts/jquery_timeago/jquery.timeago.zh-CN.js +20 -0
  395. data/zeus.json +2 -1
  396. metadata +240 -245
  397. data/app/assets/images/delete.png +0 -0
  398. data/app/assets/images/iconset_attribution.png +0 -0
  399. data/app/views/accounts/create.js.rjs +0 -14
  400. data/app/views/accounts/destroy.js.rjs +0 -3
  401. data/app/views/accounts/edit.js.rjs +0 -33
  402. data/app/views/accounts/index.js.rjs +0 -8
  403. data/app/views/accounts/new.js.rjs +0 -9
  404. data/app/views/accounts/show.js.erb +0 -2
  405. data/app/views/accounts/update.js.rjs +0 -17
  406. data/app/views/admin/field_groups/confirm.js.rjs +0 -6
  407. data/app/views/admin/field_groups/create.js.rjs +0 -20
  408. data/app/views/admin/field_groups/destroy.js.rjs +0 -11
  409. data/app/views/admin/field_groups/edit.js.rjs +0 -14
  410. data/app/views/admin/field_groups/new.js.rjs +0 -9
  411. data/app/views/admin/field_groups/update.js.rjs +0 -9
  412. data/app/views/admin/fields/create.js.erb +0 -19
  413. data/app/views/admin/fields/destroy.js.erb +0 -9
  414. data/app/views/admin/fields/edit.js.erb +0 -1
  415. data/app/views/admin/fields/update.js.erb +0 -13
  416. data/app/views/admin/groups/create.js.rjs +0 -11
  417. data/app/views/admin/groups/destroy.js.rjs +0 -11
  418. data/app/views/admin/groups/edit.js.rjs +0 -21
  419. data/app/views/admin/groups/index.js.rjs +0 -2
  420. data/app/views/admin/groups/new.js.rjs +0 -9
  421. data/app/views/admin/groups/update.js.rjs +0 -10
  422. data/app/views/admin/tags/confirm.js.rjs +0 -6
  423. data/app/views/admin/tags/create.js.rjs +0 -12
  424. data/app/views/admin/tags/destroy.js.rjs +0 -11
  425. data/app/views/admin/tags/edit.js.rjs +0 -21
  426. data/app/views/admin/tags/new.js.rjs +0 -8
  427. data/app/views/admin/tags/update.js.rjs +0 -10
  428. data/app/views/admin/users/confirm.js.rjs +0 -6
  429. data/app/views/admin/users/create.js.rjs +0 -11
  430. data/app/views/admin/users/destroy.js.rjs +0 -11
  431. data/app/views/admin/users/edit.js.rjs +0 -21
  432. data/app/views/admin/users/index.js.rjs +0 -3
  433. data/app/views/admin/users/new.js.rjs +0 -8
  434. data/app/views/admin/users/reactivate.js.rjs +0 -3
  435. data/app/views/admin/users/suspend.js.rjs +0 -3
  436. data/app/views/admin/users/update.js.rjs +0 -10
  437. data/app/views/campaigns/create.js.rjs +0 -18
  438. data/app/views/campaigns/destroy.js.rjs +0 -3
  439. data/app/views/campaigns/edit.js.rjs +0 -34
  440. data/app/views/campaigns/index.js.rjs +0 -8
  441. data/app/views/campaigns/new.js.rjs +0 -9
  442. data/app/views/campaigns/show.js.erb +0 -2
  443. data/app/views/campaigns/update.js.rjs +0 -21
  444. data/app/views/comments/create.js.rjs +0 -11
  445. data/app/views/comments/destroy.js.rjs +0 -6
  446. data/app/views/comments/edit.js.rjs +0 -11
  447. data/app/views/comments/new.js.rjs +0 -14
  448. data/app/views/comments/update.js.rjs +0 -11
  449. data/app/views/contacts/create.js.rjs +0 -19
  450. data/app/views/contacts/destroy.js.rjs +0 -7
  451. data/app/views/contacts/edit.js.rjs +0 -36
  452. data/app/views/contacts/index.js.rjs +0 -8
  453. data/app/views/contacts/new.js.rjs +0 -11
  454. data/app/views/contacts/show.js.erb +0 -2
  455. data/app/views/contacts/update.js.rjs +0 -22
  456. data/app/views/emails/destroy.js.rjs +0 -6
  457. data/app/views/entities/attach.js.rjs +0 -24
  458. data/app/views/entities/contacts.js.rjs +0 -3
  459. data/app/views/entities/discard.js.rjs +0 -7
  460. data/app/views/entities/leads.js.rjs +0 -3
  461. data/app/views/entities/opportunities.js.rjs +0 -3
  462. data/app/views/entities/subscription_update.js.rjs +0 -4
  463. data/app/views/entities/versions.js.erb +0 -3
  464. data/app/views/fields/group.js.rjs +0 -7
  465. data/app/views/home/index.js.rjs +0 -7
  466. data/app/views/home/options.js.rjs +0 -8
  467. data/app/views/leads/convert.js.rjs +0 -37
  468. data/app/views/leads/create.js.rjs +0 -19
  469. data/app/views/leads/destroy.js.rjs +0 -7
  470. data/app/views/leads/edit.js.rjs +0 -36
  471. data/app/views/leads/index.js.rjs +0 -8
  472. data/app/views/leads/new.js.rjs +0 -9
  473. data/app/views/leads/promote.js.rjs +0 -27
  474. data/app/views/leads/reject.js.rjs +0 -10
  475. data/app/views/leads/show.js.erb +0 -2
  476. data/app/views/leads/update.js.rjs +0 -27
  477. data/app/views/lists/create.js.rjs +0 -9
  478. data/app/views/lists/destroy.js.rjs +0 -1
  479. data/app/views/opportunities/contacts.js.rjs +0 -3
  480. data/app/views/opportunities/create.js.rjs +0 -29
  481. data/app/views/opportunities/destroy.js.rjs +0 -11
  482. data/app/views/opportunities/edit.js.rjs +0 -36
  483. data/app/views/opportunities/index.js.rjs +0 -8
  484. data/app/views/opportunities/new.js.rjs +0 -12
  485. data/app/views/opportunities/show.js.erb +0 -2
  486. data/app/views/opportunities/update.js.rjs +0 -26
  487. data/app/views/tasks/complete.js.rjs +0 -17
  488. data/app/views/tasks/create.js.rjs +0 -41
  489. data/app/views/tasks/destroy.js.rjs +0 -7
  490. data/app/views/tasks/discard.rjs +0 -1
  491. data/app/views/tasks/edit.js.rjs +0 -23
  492. data/app/views/tasks/filter.js.rjs +0 -1
  493. data/app/views/tasks/new.js.rjs +0 -9
  494. data/app/views/tasks/update.js.rjs +0 -21
  495. data/app/views/users/avatar.js.rjs +0 -10
  496. data/app/views/users/change_password.js.rjs +0 -15
  497. data/app/views/users/edit.js.rjs +0 -10
  498. data/app/views/users/password.js.rjs +0 -11
  499. data/app/views/users/update.js.rjs +0 -10
  500. data/app/views/users/upload_avatar.js.rjs +0 -8
  501. data/lib/fat_free_crm/secret_token_generator.rb +0 -65
  502. data/spec/lib/secret_token_generator_spec.rb +0 -79
  503. data/spec/models/users/abilities/user_ability_spec.rb +0 -58
  504. data/spec/support/rjs_support.rb +0 -14
  505. data/vendor/assets/images/brief.png +0 -0
  506. data/vendor/assets/images/full.png +0 -0
  507. data/vendor/assets/images/long.png +0 -0
  508. data/vendor/assets/images/tab_icons/accounts.png +0 -0
  509. data/vendor/assets/images/tab_icons/accounts_active.png +0 -0
  510. data/vendor/assets/images/tab_icons/campaigns.png +0 -0
  511. data/vendor/assets/images/tab_icons/campaigns_active.png +0 -0
  512. data/vendor/assets/images/tab_icons/contacts.png +0 -0
  513. data/vendor/assets/images/tab_icons/contacts_active.png +0 -0
  514. data/vendor/assets/images/tab_icons/dashboard.png +0 -0
  515. data/vendor/assets/images/tab_icons/dashboard_active.png +0 -0
  516. data/vendor/assets/images/tab_icons/leads.png +0 -0
  517. data/vendor/assets/images/tab_icons/leads_active.png +0 -0
  518. data/vendor/assets/images/tab_icons/opportunities.png +0 -0
  519. data/vendor/assets/images/tab_icons/opportunities_active.png +0 -0
  520. data/vendor/assets/images/tab_icons/tasks.png +0 -0
  521. data/vendor/assets/images/tab_icons/tasks_active.png +0 -0
@@ -76,6 +76,9 @@ $color_footer: grey;
76
76
  padding: 0px;
77
77
  text-align: center;
78
78
  width: 100%;
79
+ i.fa {
80
+ font-size: 130%;
81
+ vertical-align:text-top; }
79
82
  ul {
80
83
  // :margin 0px 25%, 18% for 5th tab
81
84
  margin-left: 15px; }
@@ -6,3 +6,7 @@
6
6
  // Place all the styles related to the Lists controller here.
7
7
  // They will automatically be included in application.css.
8
8
  // You can use Sass (SCSS) here: http://sass-lang.com/
9
+ #lists, #personal_lists {
10
+ i.fa {font-size: 130%}
11
+ a:hover {background:none; color:#0033cc}
12
+ }
@@ -33,7 +33,7 @@ class Admin::FieldsController < Admin::ApplicationController
33
33
  #----------------------------------------------------------------------------
34
34
  def edit
35
35
  @field = Field.find(params[:id])
36
- respond_with(@field)
36
+ respond_with(@field)
37
37
  end
38
38
 
39
39
  # POST /fields
@@ -41,7 +41,7 @@ class Admin::FieldsController < Admin::ApplicationController
41
41
  #----------------------------------------------------------------------------
42
42
  def create
43
43
  as = params[:field][:as]
44
- @field =
44
+ @field =
45
45
  if as =~ /pair/
46
46
  CustomFieldPair.create_pair(params).first
47
47
  elsif as.present?
@@ -91,7 +91,7 @@ class Admin::FieldsController < Admin::ApplicationController
91
91
 
92
92
  render :nothing => true
93
93
  end
94
-
94
+
95
95
  # GET /fields/subform
96
96
  #----------------------------------------------------------------------------
97
97
  def subform
@@ -108,7 +108,7 @@ class Admin::FieldsController < Admin::ApplicationController
108
108
 
109
109
  respond_with(@field) do |format|
110
110
  format.html { render :partial => 'admin/fields/subform' }
111
- end
111
+ end
112
112
  end
113
-
113
+
114
114
  end
@@ -77,9 +77,7 @@ class Admin::UsersController < Admin::ApplicationController
77
77
  # DELETE /admin/users/1.xml AJAX
78
78
  #----------------------------------------------------------------------------
79
79
  def destroy
80
- unless @user.destroy
81
- flash[:warning] = t(:msg_cant_delete_user, @user.full_name)
82
- end
80
+ flash[:warning] = t(:msg_cant_delete_user, @user.full_name) unless @user.destroy
83
81
 
84
82
  respond_with(@user)
85
83
  end
@@ -145,7 +145,7 @@ private
145
145
 
146
146
  #----------------------------------------------------------------------------
147
147
  def can_signup?
148
- User.can_signup?
148
+ [ :allowed, :needs_approval ].include? Setting.user_signup
149
149
  end
150
150
 
151
151
  #----------------------------------------------------------------------------
@@ -199,10 +199,10 @@ private
199
199
  flash[:warning] = t(:msg_asset_not_available, asset)
200
200
 
201
201
  respond_to do |format|
202
- format.html { redirect_to(redirection_url) }
202
+ format.html { redirect_to :action => :index }
203
203
  format.js { render(:update) { |page| page.reload } }
204
- format.json { render :text => flash[:warning], :status => :not_found }
205
- format.xml { render :xml => [flash[:warning]], :status => :not_found }
204
+ format.json { render :text => flash[:warning], :status => :not_found }
205
+ format.xml { render :text => flash[:warning], :status => :not_found }
206
206
  end
207
207
  end
208
208
 
@@ -213,32 +213,32 @@ private
213
213
 
214
214
  url = send("#{related.pluralize}_path")
215
215
  respond_to do |format|
216
- format.html { redirect_to(url) }
217
- format.js { render(:update) { |page| page.redirect_to(url) } }
218
- format.json { render :text => flash[:warning], :status => :not_found }
219
- format.xml { render :xml => [flash[:warning]], :status => :not_found }
216
+ format.html { redirect_to url }
217
+ format.js { render(:update) { |page| page.redirect_to url } }
218
+ format.json { render :text => flash[:warning], :status => :not_found }
219
+ format.xml { render :text => flash[:warning], :status => :not_found }
220
220
  end
221
221
  end
222
222
 
223
223
  #----------------------------------------------------------------------------
224
224
  def respond_to_access_denied
225
- flash[:warning] = t(:msg_not_authorized, default: 'You are not authorized to take this action.')
226
- respond_to do |format|
227
- format.html { redirect_to(redirection_url) }
228
- format.js { render(:update) { |page| page.reload } }
229
- format.json { render :text => flash[:warning], :status => :unauthorized }
230
- format.xml { render :xml => [flash[:warning]], :status => :unauthorized }
231
- end
232
- end
225
+ if self.action_name == "show"
226
+ flash[:warning] = t(:msg_asset_not_authorized, asset)
233
227
 
234
- #----------------------------------------------------------------------------
235
- def redirection_url
236
- # Try to redirect somewhere sensible. Note: not all controllers have an index action
237
- url = if current_user.present?
238
- (respond_to?(:index) and self.action_name != 'index') ? { action: 'index' } : root_url
239
228
  else
240
- login_url
229
+ flick = case self.action_name
230
+ when "destroy" then "delete"
231
+ when "promote" then "convert"
232
+ else self.action_name
233
+ end
234
+ flash[:warning] = t(:msg_cant_do, :action => flick, :asset => asset)
241
235
  end
242
- end
243
236
 
237
+ respond_to do |format|
238
+ format.html { redirect_to :action => :index }
239
+ format.js { render(:update) { |page| page.reload } }
240
+ format.json { render :text => flash[:warning], :status => :unauthorized }
241
+ format.xml { render :text => flash[:warning], :status => :unauthorized }
242
+ end
243
+ end
244
244
  end
@@ -6,8 +6,6 @@
6
6
  class CommentsController < ApplicationController
7
7
  before_filter :require_user
8
8
 
9
-
10
-
11
9
  # GET /comments
12
10
  # GET /comments.json
13
11
  # GET /comments.xml
@@ -31,24 +29,6 @@ class CommentsController < ApplicationController
31
29
  end
32
30
  end
33
31
 
34
- # GET /comments/new
35
- # GET /comments/new.json
36
- # GET /comments/new.xml AJAX
37
- #----------------------------------------------------------------------------
38
- def new
39
- @comment = Comment.new
40
- @commentable = extract_commentable_name(params)
41
-
42
- if @commentable
43
- update_commentable_session
44
- unless @commentable.classify.constantize.my.find_by_id(params[:"#{@commentable}_id"])
45
- respond_to_related_not_found(@commentable) and return
46
- end
47
- end
48
-
49
- respond_with(@comment)
50
- end
51
-
52
32
  # GET /comments/1/edit AJAX
53
33
  #----------------------------------------------------------------------------
54
34
  def edit
@@ -73,10 +53,10 @@ class CommentsController < ApplicationController
73
53
  model, id = @comment.commentable_type, @comment.commentable_id
74
54
  unless model.constantize.my.find_by_id(id)
75
55
  respond_to_related_not_found(model.downcase)
56
+ else
57
+ @comment.save
58
+ respond_with(@comment)
76
59
  end
77
-
78
- @comment.save
79
- respond_with(@comment)
80
60
  end
81
61
 
82
62
  # PUT /comments/1
@@ -106,12 +86,4 @@ private
106
86
  params.keys.detect {|x| x =~ /_id$/ }.try(:sub, /_id$/, '')
107
87
  end
108
88
 
109
- #----------------------------------------------------------------------------
110
- def update_commentable_session
111
- if params[:cancel].true?
112
- session.delete("#{@commentable}_new_comment")
113
- else
114
- session["#{@commentable}_new_comment"] = true
115
- end
116
- end
117
89
  end
@@ -105,7 +105,7 @@ class AccountsController < EntitiesController
105
105
  current_user.pref[:accounts_sort_by] = Account::sort_by_map[params[:sort_by]] if params[:sort_by]
106
106
  @accounts = get_accounts(:page => 1, :per_page => params[:per_page])
107
107
  set_options # Refresh options
108
-
108
+
109
109
  respond_with(@accounts) do |format|
110
110
  format.js { render :index }
111
111
  end
@@ -116,7 +116,7 @@ class AccountsController < EntitiesController
116
116
  def filter
117
117
  session[:accounts_filter] = params[:category]
118
118
  @accounts = get_accounts(:page => 1, :per_page => params[:per_page])
119
-
119
+
120
120
  respond_with(@accounts) do |format|
121
121
  format.js { render :index }
122
122
  end
@@ -136,7 +136,7 @@ private
136
136
  @accounts = get_accounts(:page => current_page - 1) if current_page > 1
137
137
  render :index and return
138
138
  end
139
- # At this point render default destroy.js.rjs template.
139
+ # At this point render default destroy.js
140
140
  else # :html request
141
141
  self.current_page = 1 # Reset current page to 1 to make sure it stays valid.
142
142
  flash[:notice] = t(:msg_asset_deleted, @account.name)
@@ -32,7 +32,7 @@ class CampaignsController < EntitiesController
32
32
  @comment = Comment.new
33
33
  @timeline = timeline(@campaign)
34
34
  end
35
-
35
+
36
36
  format.js do
37
37
  @stage = Setting.unroll(:opportunity_stage)
38
38
  @comment = Comment.new
@@ -143,7 +143,7 @@ class CampaignsController < EntitiesController
143
143
  current_user.pref[:campaigns_sort_by] = Campaign::sort_by_map[params[:sort_by]] if params[:sort_by]
144
144
  @campaigns = get_campaigns(:page => 1, :per_page => params[:per_page])
145
145
  set_options # Refresh options
146
-
146
+
147
147
  respond_with(@campaigns) do |format|
148
148
  format.js { render :index }
149
149
  end
@@ -154,7 +154,7 @@ class CampaignsController < EntitiesController
154
154
  def filter
155
155
  session[:campaigns_filter] = params[:status]
156
156
  @campaigns = get_campaigns(:page => 1, :per_page => params[:per_page])
157
-
157
+
158
158
  respond_with(@campaigns) do |format|
159
159
  format.js { render :index }
160
160
  end
@@ -174,7 +174,7 @@ private
174
174
  @campaigns = get_campaigns(:page => current_page - 1) if current_page > 1
175
175
  render :index and return
176
176
  end
177
- # At this point render destroy.js.rjs
177
+ # At this point render destroy.js
178
178
  else # :html request
179
179
  self.current_page = 1
180
180
  flash[:notice] = t(:msg_asset_deleted, @campaign.name)
@@ -135,7 +135,7 @@ class ContactsController < EntitiesController
135
135
 
136
136
  @contacts = get_contacts(:page => 1, :per_page => params[:per_page]) # Start on the first page.
137
137
  set_options # Refresh options
138
-
138
+
139
139
  respond_with(@contacts) do |format|
140
140
  format.js { render :index }
141
141
  end
@@ -167,7 +167,7 @@ class ContactsController < EntitiesController
167
167
  else
168
168
  self.current_page = 1
169
169
  end
170
- # At this point render destroy.js.rjs
170
+ # At this point render destroy.js
171
171
  else
172
172
  self.current_page = 1
173
173
  flash[:notice] = t(:msg_asset_deleted, @contact.full_name)
@@ -176,7 +176,7 @@ class LeadsController < EntitiesController
176
176
 
177
177
  @leads = get_leads(:page => 1, :per_page => params[:per_page]) # Start one the first page.
178
178
  set_options # Refresh options
179
-
179
+
180
180
  respond_with(@leads) do |format|
181
181
  format.js { render :index }
182
182
  end
@@ -187,7 +187,7 @@ class LeadsController < EntitiesController
187
187
  def filter
188
188
  session[:leads_filter] = params[:status]
189
189
  @leads = get_leads(:page => 1, :per_page => params[:per_page]) # Start one the first page.
190
-
190
+
191
191
  respond_with(@leads) do |format|
192
192
  format.js { render :index }
193
193
  end
@@ -221,7 +221,7 @@ private
221
221
  else # Called from related asset.
222
222
  self.current_page = 1 # Reset current page to 1 to make sure it stays valid.
223
223
  @campaign = @lead.campaign # Reload lead's campaign if any.
224
- end # Render destroy.js.rjs
224
+ end # Render destroy.js
225
225
  else # :html destroy
226
226
  self.current_page = 1
227
227
  flash[:notice] = t(:msg_asset_deleted, @lead.full_name)
@@ -39,7 +39,8 @@ class OpportunitiesController < EntitiesController
39
39
  model, id = params[:related].split('_')
40
40
  if related = model.classify.constantize.my.find_by_id(id)
41
41
  instance_variable_set("@#{model}", related)
42
- @account = related.account if related.respond_to?(:account)
42
+ @account = related.account if related.respond_to?(:account) && !related.account.nil?
43
+ @campaign = related.campaign if related.respond_to?(:campaign)
43
44
  else
44
45
  respond_to_related_not_found(model) and return
45
46
  end
@@ -149,7 +150,7 @@ class OpportunitiesController < EntitiesController
149
150
  def redraw
150
151
  @opportunities = get_opportunities(:page => 1, :per_page => params[:per_page])
151
152
  set_options # Refresh options
152
-
153
+
153
154
  respond_with(@opportunities) do |format|
154
155
  format.js { render :index }
155
156
  end
@@ -182,7 +183,7 @@ private
182
183
  else # Called from related asset.
183
184
  self.current_page = 1
184
185
  end
185
- # At this point render destroy.js.rjs
186
+ # At this point render destroy.js
186
187
  else
187
188
  self.current_page = 1
188
189
  flash[:notice] = t(:msg_asset_deleted, @opportunity.name)
@@ -7,7 +7,7 @@ class EntitiesController < ApplicationController
7
7
  before_filter :require_user
8
8
  before_filter :set_current_tab, :only => [ :index, :show ]
9
9
  before_filter :set_view, :only => [ :index, :show, :redraw ]
10
-
10
+
11
11
  before_filter :set_options, :only => :index
12
12
  before_filter :load_ransack_search, :only => :index
13
13
 
@@ -43,8 +43,8 @@ class EntitiesController < ApplicationController
43
43
  entity.subscribed_users += [current_user.id]
44
44
  entity.save
45
45
 
46
- respond_with(entity) do |format|
47
- format.js { render 'subscription_update' }
46
+ respond_with(@entity) do |format|
47
+ format.js { render 'subscription_update', :entity => entity }
48
48
  end
49
49
  end
50
50
 
@@ -55,7 +55,7 @@ class EntitiesController < ApplicationController
55
55
  entity.save
56
56
 
57
57
  respond_with(entity) do |format|
58
- format.js { render 'subscription_update' }
58
+ format.js { render 'subscription_update', :entity => entity }
59
59
  end
60
60
  end
61
61
 
@@ -111,7 +111,7 @@ protected
111
111
  def entities
112
112
  instance_variable_get("@#{controller_name}") || klass.my
113
113
  end
114
-
114
+
115
115
  def set_options
116
116
  unless params[:cancel].true?
117
117
  klass = controller_name.classify.constantize
@@ -167,7 +167,7 @@ private
167
167
  end
168
168
  scope = scope.paginate(:page => current_page, :per_page => per_page)
169
169
  end
170
-
170
+
171
171
  scope
172
172
  end
173
173
 
@@ -6,6 +6,7 @@
6
6
  class HomeController < ApplicationController
7
7
  before_filter :require_user, :except => [ :toggle, :timezone ]
8
8
  before_filter :set_current_tab, :only => :index
9
+ before_filter "hook(:home_before_filter, self, :amazing => true)"
9
10
 
10
11
  #----------------------------------------------------------------------------
11
12
  def index
@@ -39,7 +40,6 @@ class HomeController < ApplicationController
39
40
  current_user.pref[:activity_user] = params[:user] if params[:user]
40
41
  current_user.pref[:activity_duration] = params[:duration] if params[:duration]
41
42
 
42
- @activities = get_activities
43
43
  render :index
44
44
  end
45
45
 
@@ -8,8 +8,15 @@ class ListsController < ApplicationController
8
8
  # POST /lists
9
9
  #----------------------------------------------------------------------------
10
10
  def create
11
+
12
+ if params[:is_global].to_i.zero?
13
+ params[:list][:user_id] = current_user.id
14
+ else
15
+ params[:list][:user_id] = nil
16
+ end
17
+
11
18
  # Find any existing list with the same name (case insensitive)
12
- if @list = List.find(:first, :conditions => ["lower(name) = ?", params[:list][:name].downcase])
19
+ if @list = List.where("lower(name) = ?", params[:list][:name].downcase).where({:user_id => params[:list][:user_id]}).first
13
20
  @list.update_attributes(params[:list])
14
21
  else
15
22
  @list = List.create(params[:list])
@@ -83,7 +83,7 @@ class TasksController < ApplicationController
83
83
  def update
84
84
  @view = params[:view] || "pending"
85
85
  @task = Task.tracked_by(current_user).find(params[:id])
86
- @task_before_update = @task.clone
86
+ @task_before_update = @task.dup
87
87
 
88
88
  if @task.due_at && (@task.due_at < Date.today.to_time)
89
89
  @task_before_update.bucket = "overdue"
@@ -5,30 +5,44 @@
5
5
  #------------------------------------------------------------------------------
6
6
  class UsersController < ApplicationController
7
7
 
8
+ before_filter :require_no_user, :only => [ :new, :create ]
9
+ before_filter :require_user, :only => [ :show, :redraw ]
8
10
  before_filter :set_current_tab, :only => [ :show, :opportunities_overview ] # Don't hightlight any tabs.
11
+ before_filter :require_and_assign_user, :except => [ :new, :create, :show, :avatar, :upload_avatar ]
12
+ before_filter :assign_given_or_current_user, :only => [ :show, :avatar, :upload_avatar, :edit, :update ]
9
13
 
10
- check_authorization
11
- load_and_authorize_resource # handles all security
14
+ load_resource
12
15
 
13
16
  respond_to :html, :only => [ :show, :new ]
14
17
 
15
18
  # GET /users/1
16
- # GET /users/1.js
19
+ # GET /users/1.json
20
+ # GET /users/1.xml HTML
17
21
  #----------------------------------------------------------------------------
18
22
  def show
19
- @user = current_user if params[:id].nil?
20
23
  respond_with(@user)
21
24
  end
22
25
 
23
26
  # GET /users/new
24
- # GET /users/new.js
27
+ # GET /users/new.json
28
+ # GET /users/new.xml HTML
25
29
  #----------------------------------------------------------------------------
26
30
  def new
31
+ if can_signup?
32
+ respond_with(@user)
33
+ else
34
+ redirect_to login_path
35
+ end
36
+ end
37
+
38
+ # GET /users/1/edit AJAX
39
+ #----------------------------------------------------------------------------
40
+ def edit
27
41
  respond_with(@user)
28
42
  end
29
43
 
30
44
  # POST /users
31
- # POST /users.js
45
+ # POST /users.xml HTML
32
46
  #----------------------------------------------------------------------------
33
47
  def create
34
48
  if @user.save
@@ -44,29 +58,31 @@ class UsersController < ApplicationController
44
58
  end
45
59
  end
46
60
 
47
- # GET /users/1/edit.js
48
- #----------------------------------------------------------------------------
49
- def edit
50
- respond_with(@user)
51
- end
52
-
53
61
  # PUT /users/1
54
- # PUT /users/1.js
62
+ # PUT /users/1.json
63
+ # PUT /users/1.xml AJAX
55
64
  #----------------------------------------------------------------------------
56
65
  def update
57
66
  @user.update_attributes(params[:user])
58
67
  respond_with(@user)
59
68
  end
60
69
 
70
+ # DELETE /users/1
71
+ # DELETE /users/1.xml HTML and AJAX (not directly exposed yet)
72
+ #----------------------------------------------------------------------------
73
+ def destroy
74
+ # not exposed
75
+ end
76
+
61
77
  # GET /users/1/avatar
62
- # GET /users/1/avatar.js
78
+ # GET /users/1/avatar.xml AJAX
63
79
  #----------------------------------------------------------------------------
64
80
  def avatar
65
81
  respond_with(@user)
66
82
  end
67
83
 
68
84
  # PUT /users/1/upload_avatar
69
- # PUT /users/1/upload_avatar.js
85
+ # PUT /users/1/upload_avatar.xml AJAX
70
86
  #----------------------------------------------------------------------------
71
87
  def upload_avatar
72
88
  if params[:gravatar]
@@ -90,21 +106,19 @@ class UsersController < ApplicationController
90
106
  end
91
107
 
92
108
  # GET /users/1/password
93
- # GET /users/1/password.js
109
+ # GET /users/1/password.xml AJAX
94
110
  #----------------------------------------------------------------------------
95
111
  def password
96
112
  respond_with(@user)
97
113
  end
98
114
 
99
115
  # PUT /users/1/change_password
100
- # PUT /users/1/change_password.js
116
+ # PUT /users/1/change_password.xml AJAX
101
117
  #----------------------------------------------------------------------------
102
118
  def change_password
103
119
  if @user.valid_password?(params[:current_password], true) || @user.password_hash.blank?
104
120
  unless params[:user][:password].blank?
105
- @user.password = params[:user][:password]
106
- @user.password_confirmation = params[:user][:password_confirmation]
107
- @user.save
121
+ @user.update_attributes(params[:user])
108
122
  flash[:notice] = t(:msg_password_changed)
109
123
  else
110
124
  flash[:notice] = t(:msg_password_not_changed)
@@ -116,18 +130,27 @@ class UsersController < ApplicationController
116
130
  respond_with(@user)
117
131
  end
118
132
 
119
- # POST /users/1/redraw
133
+ # POST /users/1/redraw AJAX
120
134
  #----------------------------------------------------------------------------
121
135
  def redraw
122
136
  current_user.preference[:locale] = params[:locale]
123
137
  render(:update) { |page| page.redirect_to user_path(current_user) }
124
138
  end
125
139
 
126
- # GET /users/opportunities_overview
127
- #----------------------------------------------------------------------------
128
140
  def opportunities_overview
129
141
  @users_with_opportunities = User.have_assigned_opportunities.order(:first_name)
130
142
  @unassigned_opportunities = Opportunity.unassigned.pipeline.order(:stage)
131
143
  end
132
144
 
145
+ private
146
+
147
+ #----------------------------------------------------------------------------
148
+ def require_and_assign_user
149
+ require_user
150
+ @user = current_user
151
+ end
152
+
153
+ def assign_given_or_current_user
154
+ @user = params[:id] ? User.find(params[:id]) : current_user
155
+ end
133
156
  end