fat_free_crm 0.11.3 → 0.11.4

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.

Files changed (637) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +2 -2
  3. data/CHANGELOG +6 -1
  4. data/CONTRIBUTORS +40 -1
  5. data/Capfile +5 -0
  6. data/Gemfile +25 -6
  7. data/Gemfile.lock +128 -86
  8. data/README.md +23 -16
  9. data/{vendor → app}/assets/images/delete.png +0 -0
  10. data/app/assets/javascripts/admin/fields.js.coffee +62 -0
  11. data/app/assets/javascripts/application.js.erb +8 -1
  12. data/app/assets/javascripts/crm.js +44 -46
  13. data/app/assets/javascripts/crm_chosen.js.coffee +10 -7
  14. data/app/assets/javascripts/datepicker.js.coffee +15 -0
  15. data/app/assets/javascripts/format_buttons.js.coffee +48 -0
  16. data/app/assets/javascripts/{admin/field_groups.js.coffee → groups.js.coffee} +0 -0
  17. data/app/assets/javascripts/lists.js.coffee +1 -1
  18. data/app/assets/javascripts/search.js.coffee +56 -38
  19. data/app/assets/stylesheets/admin/{field_groups.css.scss → fields.css.scss} +4 -0
  20. data/app/assets/stylesheets/advanced_search.css.scss +79 -0
  21. data/app/assets/stylesheets/application.css.erb +4 -0
  22. data/app/assets/stylesheets/base.scss +3 -3
  23. data/app/assets/stylesheets/common.scss +72 -25
  24. data/app/assets/stylesheets/fields.scss +14 -0
  25. data/app/assets/stylesheets/format_buttons.css.scss +30 -0
  26. data/app/assets/stylesheets/groups.css.scss +3 -0
  27. data/app/assets/stylesheets/header.scss +7 -6
  28. data/{vendor/plugins/.gitkeep → app/assets/stylesheets/index_headers.css.scss} +0 -0
  29. data/app/assets/stylesheets/print.css.scss +12 -3
  30. data/app/assets/stylesheets/rails.scss +12 -3
  31. data/app/controllers/admin/application_controller.rb +1 -1
  32. data/app/controllers/admin/field_groups_controller.rb +2 -0
  33. data/app/controllers/admin/fields_controller.rb +41 -17
  34. data/app/controllers/admin/groups_controller.rb +70 -0
  35. data/app/controllers/admin/tags_controller.rb +1 -0
  36. data/app/controllers/admin/users_controller.rb +8 -7
  37. data/app/controllers/application_controller.rb +34 -5
  38. data/app/controllers/comments_controller.rb +2 -3
  39. data/app/controllers/entities/accounts_controller.rb +30 -37
  40. data/app/controllers/entities/campaigns_controller.rb +56 -29
  41. data/app/controllers/entities/contacts_controller.rb +24 -26
  42. data/app/controllers/entities/leads_controller.rb +38 -37
  43. data/app/controllers/entities/opportunities_controller.rb +28 -34
  44. data/app/controllers/entities_controller.rb +71 -43
  45. data/app/controllers/home_controller.rb +29 -27
  46. data/app/controllers/tasks_controller.rb +18 -17
  47. data/app/controllers/users_controller.rb +12 -8
  48. data/app/helpers/accounts_helper.rb +58 -16
  49. data/app/helpers/addresses_helper.rb +4 -1
  50. data/app/helpers/admin/fields_helper.rb +3 -4
  51. data/app/helpers/application_helper.rb +147 -100
  52. data/app/helpers/campaigns_helper.rb +2 -9
  53. data/app/helpers/fields_helper.rb +0 -1
  54. data/app/helpers/groups_helper.rb +2 -0
  55. data/app/helpers/home_helper.rb +11 -0
  56. data/app/helpers/leads_helper.rb +2 -9
  57. data/app/helpers/opportunities_helper.rb +2 -9
  58. data/app/helpers/{crm_tags_helper.rb → tags_helper.rb} +9 -8
  59. data/app/helpers/tasks_helper.rb +5 -21
  60. data/app/helpers/users_helper.rb +14 -7
  61. data/app/helpers/versions_helper.rb +46 -0
  62. data/app/inputs/date_time_input.rb +8 -25
  63. data/app/inputs/datepair_input.rb +77 -0
  64. data/app/inputs/datetimepair_input.rb +37 -0
  65. data/app/mailers/user_mailer.rb +10 -0
  66. data/app/models/entities/account.rb +18 -11
  67. data/app/models/entities/account_contact.rb +4 -3
  68. data/app/models/entities/account_opportunity.rb +0 -1
  69. data/app/models/entities/campaign.rb +6 -7
  70. data/app/models/entities/contact.rb +53 -25
  71. data/app/models/entities/contact_opportunity.rb +0 -1
  72. data/app/models/entities/lead.rb +24 -13
  73. data/app/models/entities/opportunity.rb +34 -16
  74. data/app/models/fields/custom_field.rb +29 -13
  75. data/app/models/fields/custom_field_date_pair.rb +58 -0
  76. data/app/models/fields/custom_field_datetime_pair.rb +28 -0
  77. data/app/models/fields/custom_field_pair.rb +54 -0
  78. data/app/models/fields/field.rb +60 -43
  79. data/app/models/fields/field_group.rb +0 -9
  80. data/app/models/observers/entity_observer.rb +29 -0
  81. data/app/models/observers/opportunity_observer.rb +3 -0
  82. data/app/models/polymorphic/address.rb +14 -0
  83. data/app/models/polymorphic/avatar.rb +13 -1
  84. data/app/models/polymorphic/email.rb +1 -1
  85. data/app/models/polymorphic/task.rb +14 -13
  86. data/app/models/setting.rb +14 -21
  87. data/app/models/users/ability.rb +25 -4
  88. data/app/models/users/group.rb +13 -0
  89. data/app/models/users/permission.rb +3 -1
  90. data/app/models/users/preference.rb +1 -2
  91. data/app/models/users/user.rb +25 -3
  92. data/app/views/accounts/_account.html.haml +5 -39
  93. data/app/views/accounts/_edit.html.haml +3 -2
  94. data/app/views/accounts/_index_brief.html.haml +32 -0
  95. data/app/views/accounts/_index_long.html.haml +42 -0
  96. data/app/views/accounts/_new.html.haml +3 -2
  97. data/app/views/accounts/_sidebar_index.html.haml +3 -4
  98. data/app/views/accounts/_sidebar_show.html.haml +2 -2
  99. data/app/views/accounts/_title_bar.html.haml +11 -0
  100. data/app/views/accounts/_top_section.html.haml +1 -1
  101. data/app/views/accounts/create.js.rjs +1 -2
  102. data/app/views/accounts/destroy.js.rjs +1 -1
  103. data/app/views/accounts/edit.js.rjs +0 -2
  104. data/app/views/accounts/index.html.haml +6 -13
  105. data/app/views/accounts/index.js.rjs +3 -1
  106. data/app/views/accounts/index.xls.builder +82 -0
  107. data/app/views/accounts/new.js.rjs +0 -2
  108. data/app/views/accounts/show.html.haml +17 -15
  109. data/app/views/accounts/show.js.erb +2 -0
  110. data/app/views/admin/custom_fields/_base_field.html.haml +21 -0
  111. data/app/views/admin/custom_fields/_check_boxes_field.html.haml +6 -0
  112. data/app/views/admin/custom_fields/_date_field.html.haml +14 -0
  113. data/app/views/admin/custom_fields/_date_pair_field.html.haml +21 -0
  114. data/app/views/admin/custom_fields/_datetime_field.html.haml +14 -0
  115. data/app/views/admin/custom_fields/_datetime_pair_field.html.haml +21 -0
  116. data/app/views/admin/custom_fields/_radio_field.html.haml +6 -0
  117. data/app/views/admin/custom_fields/_select_field.html.haml +25 -0
  118. data/app/views/admin/custom_fields/_string_field.html.haml +2 -0
  119. data/app/views/admin/field_groups/_field_group.html.haml +7 -5
  120. data/app/views/admin/field_groups/_top_section.html.haml +4 -3
  121. data/app/views/admin/field_groups/create.js.rjs +1 -2
  122. data/app/views/admin/fields/_field.html.haml +5 -3
  123. data/app/views/admin/fields/_form.html.haml +35 -0
  124. data/app/views/admin/fields/_subform.html.haml +6 -0
  125. data/app/views/admin/fields/create.js.erb +19 -0
  126. data/app/views/admin/fields/destroy.js.erb +9 -0
  127. data/app/views/admin/fields/edit.js.erb +1 -0
  128. data/app/views/admin/fields/index.html.haml +11 -8
  129. data/app/views/admin/fields/update.js.erb +13 -0
  130. data/app/views/admin/groups/_edit.html.haml +12 -0
  131. data/app/views/admin/groups/_form.html.haml +13 -0
  132. data/app/views/admin/groups/_group.html.haml +15 -0
  133. data/app/views/admin/groups/_new.html.haml +12 -0
  134. data/app/views/admin/groups/create.js.rjs +11 -0
  135. data/app/views/admin/{fields → groups}/destroy.js.rjs +3 -3
  136. data/app/views/admin/groups/edit.js.rjs +21 -0
  137. data/app/views/admin/groups/index.html.haml +18 -0
  138. data/app/views/admin/groups/index.js.rjs +2 -0
  139. data/app/views/admin/groups/new.js.rjs +9 -0
  140. data/app/views/admin/groups/show.html.haml +11 -0
  141. data/app/views/admin/groups/update.js.rjs +10 -0
  142. data/app/views/admin/users/_profile.html.haml +13 -1
  143. data/app/views/admin/users/_user.html.haml +7 -2
  144. data/app/views/admin/users/index.js.rjs +1 -0
  145. data/app/views/application/index.atom.builder +1 -1
  146. data/app/views/application/index.rss.builder +1 -1
  147. data/app/views/application/show.atom.builder +32 -0
  148. data/app/views/application/show.rss.builder +29 -0
  149. data/app/views/campaigns/_campaign.html.haml +5 -21
  150. data/app/views/campaigns/_edit.html.haml +3 -2
  151. data/app/views/campaigns/_index_brief.html.haml +15 -0
  152. data/app/views/campaigns/_index_long.html.haml +20 -0
  153. data/app/views/campaigns/_new.html.haml +4 -2
  154. data/app/views/campaigns/_sidebar_index.html.haml +3 -3
  155. data/app/views/campaigns/_title_bar.html.haml +11 -0
  156. data/app/views/campaigns/_top_section.html.haml +2 -2
  157. data/app/views/campaigns/create.js.rjs +1 -4
  158. data/app/views/campaigns/destroy.js.rjs +1 -1
  159. data/app/views/campaigns/edit.js.rjs +0 -4
  160. data/app/views/campaigns/index.html.haml +6 -13
  161. data/app/views/campaigns/index.js.rjs +3 -1
  162. data/app/views/campaigns/index.xls.builder +75 -0
  163. data/app/views/campaigns/new.js.rjs +0 -4
  164. data/app/views/campaigns/show.html.haml +17 -15
  165. data/app/views/campaigns/show.js.erb +2 -0
  166. data/app/views/campaigns/update.js.rjs +0 -2
  167. data/app/views/comments/_comment.html.haml +6 -5
  168. data/app/views/comments/_edit.html.haml +5 -5
  169. data/app/views/comments/_new.html.haml +6 -5
  170. data/app/views/comments/create.js.rjs +1 -1
  171. data/app/views/contacts/_contact.html.haml +5 -52
  172. data/app/views/contacts/_contacts.html.haml +1 -0
  173. data/app/views/contacts/_edit.html.haml +3 -2
  174. data/app/views/contacts/_index_brief.html.haml +25 -0
  175. data/app/views/contacts/_index_full.html.haml +57 -0
  176. data/app/views/contacts/_index_long.html.haml +43 -0
  177. data/app/views/contacts/_new.html.haml +4 -2
  178. data/app/views/contacts/_section_extra.html.haml +26 -0
  179. data/app/views/contacts/_section_general.html.haml +22 -0
  180. data/app/views/contacts/_sidebar_index.html.haml +0 -3
  181. data/app/views/contacts/_sidebar_show.html.haml +2 -10
  182. data/app/views/contacts/_title_bar.html.haml +11 -0
  183. data/app/views/contacts/_top_section.html.haml +1 -1
  184. data/app/views/contacts/create.js.rjs +1 -2
  185. data/app/views/contacts/destroy.js.rjs +1 -1
  186. data/app/views/contacts/edit.js.rjs +0 -2
  187. data/app/views/contacts/index.html.haml +6 -14
  188. data/app/views/contacts/index.js.rjs +3 -1
  189. data/app/views/contacts/index.xls.builder +102 -0
  190. data/app/views/contacts/new.js.rjs +0 -2
  191. data/app/views/contacts/show.html.haml +15 -15
  192. data/app/views/contacts/show.js.erb +2 -0
  193. data/app/views/entities/_basic_search.html.haml +22 -0
  194. data/app/views/entities/_permissions.html.haml +41 -0
  195. data/app/views/entities/_search.html.haml +15 -0
  196. data/app/views/entities/_section_custom_fields.html.haml +11 -0
  197. data/app/views/entities/_title_bar.html.haml +12 -0
  198. data/app/views/entities/attach.js.rjs +1 -1
  199. data/app/views/entities/opportunities.js.rjs +1 -1
  200. data/app/views/entities/versions.js.erb +3 -0
  201. data/app/views/fields/_edit_custom_field_group.html.haml +8 -0
  202. data/app/views/fields/_group.html.haml +11 -20
  203. data/app/views/fields/_group_table.html.haml +13 -0
  204. data/app/views/fields/_group_view.html.haml +7 -0
  205. data/app/views/fields/_groups.html.haml +1 -4
  206. data/app/views/fields/_sidebar_show.html.haml +5 -4
  207. data/app/views/home/_account.html.haml +29 -0
  208. data/app/views/home/_activity.html.haml +16 -6
  209. data/app/views/home/_opportunity.html.haml +41 -0
  210. data/app/views/home/_options.html.haml +1 -1
  211. data/app/views/home/_task.html.haml +46 -0
  212. data/app/views/home/index.html.haml +32 -1
  213. data/app/views/home/index.js.rjs +1 -0
  214. data/app/views/layouts/_header.html.haml +3 -3
  215. data/app/views/layouts/_sidebar.html.haml +1 -3
  216. data/app/views/layouts/_tabbed.html.haml +2 -3
  217. data/app/views/layouts/_tabless.html.haml +1 -1
  218. data/app/views/layouts/admin/_header.html.haml +1 -1
  219. data/app/views/layouts/application.html.haml +7 -8
  220. data/app/views/layouts/header.xls.builder +8 -0
  221. data/app/views/leads/_contact.html.haml +1 -2
  222. data/app/views/leads/_convert.html.haml +1 -2
  223. data/app/views/leads/_convert_permissions.html.haml +21 -11
  224. data/app/views/leads/_edit.html.haml +3 -2
  225. data/app/views/leads/_index_brief.html.haml +41 -0
  226. data/app/views/leads/_index_long.html.haml +62 -0
  227. data/app/views/leads/_lead.html.haml +5 -62
  228. data/app/views/leads/_new.html.haml +4 -2
  229. data/app/views/leads/_opportunity.html.haml +1 -1
  230. data/app/views/leads/_sidebar_index.html.haml +3 -3
  231. data/app/views/leads/_sidebar_show.html.haml +3 -3
  232. data/app/views/leads/_status.html.haml +1 -1
  233. data/app/views/leads/_title_bar.html.haml +16 -0
  234. data/app/views/leads/convert.js.rjs +0 -1
  235. data/app/views/leads/create.js.rjs +1 -2
  236. data/app/views/leads/destroy.js.rjs +1 -1
  237. data/app/views/leads/edit.js.rjs +0 -2
  238. data/app/views/leads/index.html.haml +6 -13
  239. data/app/views/leads/index.js.rjs +3 -1
  240. data/app/views/leads/index.xls.builder +100 -0
  241. data/app/views/leads/new.js.rjs +0 -2
  242. data/app/views/leads/promote.js.rjs +0 -1
  243. data/app/views/leads/show.html.haml +13 -18
  244. data/app/views/leads/show.js.erb +2 -0
  245. data/app/views/{shared/_lists.html.haml → lists/_sidebar.html.haml} +0 -0
  246. data/app/views/lists/create.js.rjs +1 -1
  247. data/app/views/opportunities/_edit.html.haml +3 -2
  248. data/app/views/opportunities/_index_brief.html.haml +29 -0
  249. data/app/views/opportunities/_index_long.html.haml +59 -0
  250. data/app/views/opportunities/_new.html.haml +4 -2
  251. data/app/views/opportunities/_opportunity.html.haml +5 -57
  252. data/app/views/opportunities/_sidebar_index.html.haml +3 -3
  253. data/app/views/opportunities/_sidebar_show.html.haml +2 -2
  254. data/app/views/opportunities/_title_bar.html.haml +11 -0
  255. data/app/views/opportunities/_top_section.html.haml +2 -2
  256. data/app/views/opportunities/create.js.rjs +4 -6
  257. data/app/views/opportunities/destroy.js.rjs +1 -1
  258. data/app/views/opportunities/edit.js.rjs +0 -3
  259. data/app/views/opportunities/index.html.haml +6 -14
  260. data/app/views/opportunities/index.js.rjs +3 -1
  261. data/app/views/opportunities/index.xls.builder +69 -0
  262. data/app/views/opportunities/new.js.rjs +1 -5
  263. data/app/views/opportunities/show.html.haml +14 -14
  264. data/app/views/opportunities/show.js.erb +2 -0
  265. data/app/views/opportunities/update.js.rjs +0 -1
  266. data/app/views/passwords/new.html.haml +1 -1
  267. data/app/views/shared/_add_comment.html.haml +8 -0
  268. data/app/views/shared/_address.html.haml +1 -1
  269. data/app/views/shared/_address_show.html.haml +1 -1
  270. data/app/views/shared/_edit_comment.html.haml +2 -2
  271. data/app/views/shared/_export.html.haml +2 -1
  272. data/app/views/shared/_paginate_with_per_page.html.haml +14 -0
  273. data/app/views/shared/_recently.html.haml +1 -1
  274. data/app/views/shared/_search.html.haml +1 -1
  275. data/app/views/shared/_tags.html.haml +1 -2
  276. data/app/views/shared/_tasks.html.haml +2 -2
  277. data/app/views/tasks/_completed.html.haml +3 -3
  278. data/app/views/tasks/_new.html.haml +1 -1
  279. data/app/views/tasks/_pending.html.haml +2 -3
  280. data/app/views/tasks/_sidebar_index.html.haml +2 -2
  281. data/app/views/tasks/_top_section.html.haml +5 -3
  282. data/app/views/tasks/create.js.rjs +3 -4
  283. data/app/views/tasks/edit.js.rjs +2 -4
  284. data/app/views/tasks/index.html.haml +1 -1
  285. data/app/views/tasks/index.xls.builder +47 -0
  286. data/app/views/tasks/new.js.rjs +0 -2
  287. data/app/views/tasks/update.js.rjs +0 -1
  288. data/app/views/user_mailer/assigned_entity_notification.html.haml +3 -0
  289. data/app/views/users/_user.html.haml +2 -2
  290. data/app/views/users/_user_report.html.haml +6 -0
  291. data/app/views/users/opportunities_overview.html.haml +16 -0
  292. data/app/views/users/show.html.haml +2 -3
  293. data/app/views/users/update.js.rjs +1 -1
  294. data/app/views/versions/_version.html.haml +4 -19
  295. data/app/views/versions/_version_item.html.haml +8 -0
  296. data/app/views/versions/_versions.html.haml +9 -9
  297. data/config/application.rb +10 -2
  298. data/config/deploy.example.rb +47 -0
  299. data/config/environments/development.rb +1 -0
  300. data/config/environments/production.rb +1 -3
  301. data/config/environments/staging.rb +1 -1
  302. data/config/initializers/action_mailer.rb +10 -8
  303. data/config/initializers/custom_fields.rb +21 -0
  304. data/config/initializers/gravatar.rb +7 -0
  305. data/config/initializers/paper_trail.rb +1 -0
  306. data/config/initializers/ransack.rb +15 -0
  307. data/config/initializers/simple_form.rb +1 -2
  308. data/config/initializers/views.rb +42 -0
  309. data/config/locales/cz_fat_free_crm.yml +0 -10
  310. data/config/locales/de_fat_free_crm.yml +23 -21
  311. data/config/locales/en-GB_fat_free_crm.yml +241 -25
  312. data/config/locales/en-US_fat_free_crm.yml +139 -57
  313. data/config/locales/en-US_ransack.yml +92 -0
  314. data/config/locales/es_fat_free_crm.yml +0 -6
  315. data/config/locales/fr-CA_fat_free_crm.yml +0 -6
  316. data/config/locales/fr_fat_free_crm.yml +3 -14
  317. data/config/locales/it_fat_free_crm.yml +0 -11
  318. data/config/locales/ja_fat_free_crm.yml +0 -10
  319. data/config/locales/pl_fat_free_crm.yml +0 -6
  320. data/config/locales/pt-BR_fat_free_crm.yml +0 -6
  321. data/config/locales/ru_fat_free_crm.yml +0 -9
  322. data/config/locales/sv-SE_fat_free_crm.yml +0 -10
  323. data/config/locales/th_fat_free_crm.yml +0 -6
  324. data/config/locales/zh-CN.yml +4 -0
  325. data/config/locales/zh-CN_fat_free_crm.yml +78 -47
  326. data/config/routes.rb +13 -0
  327. data/config/settings.default.yml +20 -20
  328. data/db/demo/addresses.yml +2 -2
  329. data/db/migrate/20100928030598_create_sessions.rb +5 -0
  330. data/db/migrate/20100928030627_acts_as_taggable_on_migration.rb +6 -6
  331. data/db/migrate/20111201030535_add_field_groups_klass_name.rb +2 -1
  332. data/db/migrate/20120406082136_create_groups.rb +19 -0
  333. data/db/migrate/20120510025219_add_not_null_constraints_for_timestamp_columns.rb +21 -0
  334. data/db/migrate/20120528102124_increase_length_of_version_events.rb +9 -0
  335. data/db/migrate/20120801032706_add_pair_id_to_fields.rb +5 -0
  336. data/db/migrate/20121003063155_add_settings_to_custom_fields.rb +5 -0
  337. data/db/migrate/20121221033947_fix_country_mapping.rb +32 -0
  338. data/db/schema.rb +25 -6
  339. data/fat_free_crm.gemspec +16 -13
  340. data/lib/fat_free_crm.rb +2 -0
  341. data/lib/fat_free_crm/comment_extensions.rb +23 -0
  342. data/lib/fat_free_crm/core_ext/array.rb +8 -2
  343. data/lib/fat_free_crm/fields.rb +24 -2
  344. data/lib/fat_free_crm/gem_dependencies.rb +7 -1
  345. data/lib/fat_free_crm/permissions.rb +47 -26
  346. data/lib/fat_free_crm/version.rb +1 -1
  347. data/lib/fat_free_crm/view_factory.rb +95 -0
  348. data/lib/plugins/country_select/lib/country_select.rb +393 -374
  349. data/lib/tasks/{plugins.rake → db/migrate.rake} +1 -1
  350. data/lib/tasks/{schema_upgrade.rake → db/schema.rake} +2 -1
  351. data/lib/tasks/{mail_processing.rake → ffcrm/comment_replies.rake} +2 -21
  352. data/lib/tasks/ffcrm/config.rake +33 -0
  353. data/lib/tasks/{demo.rake → ffcrm/demo.rake} +3 -2
  354. data/lib/tasks/ffcrm/dropbox.rake +42 -0
  355. data/lib/tasks/ffcrm/settings.rake +46 -0
  356. data/lib/tasks/{fat_free_crm.rake → ffcrm/setup.rake} +1 -39
  357. data/lib/tasks/ffcrm/update_data.rake +256 -0
  358. data/{acceptance → spec/acceptance}/acceptance_helper.rb +5 -4
  359. data/{acceptance → spec/acceptance}/accounts_spec.rb +36 -10
  360. data/spec/acceptance/admin/groups_spec.rb +26 -0
  361. data/spec/acceptance/admin/users_spec.rb +34 -0
  362. data/spec/acceptance/campaigns_spec.rb +101 -0
  363. data/spec/acceptance/contacts_spec.rb +101 -0
  364. data/spec/acceptance/dashboard_spec.rb +62 -0
  365. data/spec/acceptance/leads_spec.rb +109 -0
  366. data/spec/acceptance/opportunities_overview_spec.rb +82 -0
  367. data/spec/acceptance/opportunities_spec.rb +103 -0
  368. data/{acceptance → spec/acceptance}/support/browser.rb +0 -0
  369. data/{acceptance → spec/acceptance}/support/headless.rb +0 -0
  370. data/{acceptance → spec/acceptance}/support/helpers.rb +8 -1
  371. data/{acceptance → spec/acceptance}/support/maintain_sessions.rb +0 -0
  372. data/spec/acceptance/support/paths.rb +42 -0
  373. data/spec/acceptance/support/selector_helpers.rb +31 -0
  374. data/spec/acceptance/tasks_spec.rb +85 -0
  375. data/spec/controllers/admin/groups_controller_spec.rb +5 -0
  376. data/spec/controllers/admin/users_controller_spec.rb +2 -3
  377. data/spec/controllers/applications_controller_spec.rb +40 -0
  378. data/spec/controllers/comments_controller_spec.rb +5 -6
  379. data/spec/controllers/emails_controller_spec.rb +1 -2
  380. data/spec/controllers/entities/accounts_controller_spec.rb +65 -81
  381. data/spec/controllers/entities/campaigns_controller_spec.rb +69 -85
  382. data/spec/controllers/entities/contacts_controller_spec.rb +78 -95
  383. data/spec/controllers/entities/leads_controller_spec.rb +105 -127
  384. data/spec/controllers/entities/opportunities_controller_spec.rb +88 -103
  385. data/spec/controllers/entities_controller_spec.rb +39 -0
  386. data/spec/controllers/home_controller_spec.rb +101 -11
  387. data/spec/controllers/tasks_controller_spec.rb +27 -32
  388. data/spec/controllers/users_controller_spec.rb +95 -28
  389. data/spec/factories/account_factories.rb +2 -2
  390. data/spec/factories/opportunity_factories.rb +12 -4
  391. data/spec/factories/task_factories.rb +4 -0
  392. data/spec/factories/user_factories.rb +9 -2
  393. data/spec/helpers/application_helper_spec.rb +15 -1
  394. data/spec/helpers/groups_helper_spec.rb +15 -0
  395. data/spec/helpers/users_helper_spec.rb +26 -4
  396. data/spec/lib/comment_extensions_spec.rb +29 -0
  397. data/spec/lib/core_ext/{string.rb → string_spec.rb} +0 -1
  398. data/spec/lib/fields_spec.rb +104 -0
  399. data/spec/lib/permissions_spec.rb +144 -0
  400. data/spec/lib/view_factory_spec.rb +68 -0
  401. data/spec/mailers/subscription_mailer_spec.rb +18 -4
  402. data/spec/mailers/user_mailer_spec.rb +134 -0
  403. data/spec/models/entities/account_spec.rb +44 -4
  404. data/spec/models/entities/campaign_spec.rb +3 -4
  405. data/spec/models/entities/contact_spec.rb +45 -5
  406. data/spec/models/entities/lead_spec.rb +3 -4
  407. data/spec/models/entities/opportunity_spec.rb +105 -9
  408. data/spec/models/fields/custom_field_date_pair_spec.rb +106 -0
  409. data/spec/models/fields/custom_field_pair_spec.rb +94 -0
  410. data/spec/models/fields/custom_field_spec.rb +43 -23
  411. data/spec/models/fields/field_spec.rb +3 -5
  412. data/spec/models/observers/entity_observer_spec.rb +65 -0
  413. data/spec/models/polymorphic/task_spec.rb +74 -118
  414. data/spec/models/polymorphic/version_spec.rb +18 -18
  415. data/spec/models/users/group_spec.rb +5 -0
  416. data/spec/models/users/permission_spec.rb +18 -1
  417. data/spec/models/users/preference_spec.rb +5 -1
  418. data/spec/models/users/user_spec.rb +55 -8
  419. data/spec/shared/models.rb +54 -0
  420. data/spec/spec_helper.rb +82 -87
  421. data/spec/support/auth_macros.rb +2 -3
  422. data/spec/views/accounts/_edit.haml_spec.rb +1 -2
  423. data/spec/views/accounts/_new.haml_spec.rb +1 -2
  424. data/spec/views/accounts/create.rjs_spec.rb +1 -3
  425. data/spec/views/accounts/edit.rjs_spec.rb +3 -4
  426. data/spec/views/accounts/index.haml_spec.rb +9 -6
  427. data/spec/views/accounts/new.rjs_spec.rb +2 -9
  428. data/spec/views/accounts/show.haml_spec.rb +1 -2
  429. data/spec/views/accounts/update.rjs_spec.rb +2 -3
  430. data/spec/views/admin/users/_create.haml_spec.rb +1 -2
  431. data/spec/views/admin/users/create.rjs_spec.rb +1 -2
  432. data/spec/views/campaigns/_edit.haml_spec.rb +2 -3
  433. data/spec/views/campaigns/_new.haml_spec.rb +2 -3
  434. data/spec/views/campaigns/create.rjs_spec.rb +0 -3
  435. data/spec/views/campaigns/destroy.rjs_spec.rb +1 -2
  436. data/spec/views/campaigns/edit.rjs_spec.rb +3 -6
  437. data/spec/views/campaigns/index.haml_spec.rb +6 -3
  438. data/spec/views/campaigns/new.rjs_spec.rb +2 -13
  439. data/spec/views/campaigns/show.haml_spec.rb +4 -6
  440. data/spec/views/campaigns/update.rjs_spec.rb +2 -7
  441. data/spec/views/contacts/_edit.haml_spec.rb +6 -7
  442. data/spec/views/contacts/_new.haml_spec.rb +2 -3
  443. data/spec/views/contacts/create.rjs_spec.rb +1 -3
  444. data/spec/views/contacts/edit.rjs_spec.rb +3 -4
  445. data/spec/views/contacts/index.haml_spec.rb +6 -3
  446. data/spec/views/contacts/new.rjs_spec.rb +2 -11
  447. data/spec/views/contacts/show.haml_spec.rb +1 -2
  448. data/spec/views/contacts/update.rjs_spec.rb +2 -3
  449. data/spec/views/home/index.haml_spec.rb +6 -2
  450. data/spec/views/home/index.rjs_spec.rb +1 -2
  451. data/spec/views/home/options.rjs_spec.rb +1 -2
  452. data/spec/views/leads/_convert.haml_spec.rb +1 -2
  453. data/spec/views/leads/_edit.haml_spec.rb +2 -3
  454. data/spec/views/leads/_new.haml_spec.rb +2 -3
  455. data/spec/views/leads/_sidebar_show.haml_spec.rb +1 -2
  456. data/spec/views/leads/convert.rjs_spec.rb +3 -5
  457. data/spec/views/leads/edit.rjs_spec.rb +4 -5
  458. data/spec/views/leads/index.haml_spec.rb +6 -3
  459. data/spec/views/leads/new.rjs_spec.rb +2 -11
  460. data/spec/views/leads/promote.rjs_spec.rb +3 -5
  461. data/spec/views/leads/show.haml_spec.rb +1 -2
  462. data/spec/views/leads/update.rjs_spec.rb +2 -3
  463. data/spec/views/opportunities/_edit.haml_spec.rb +5 -6
  464. data/spec/views/opportunities/_new.haml_spec.rb +2 -4
  465. data/spec/views/opportunities/create.rjs_spec.rb +0 -2
  466. data/spec/views/opportunities/edit.rjs_spec.rb +3 -4
  467. data/spec/views/opportunities/index.haml_spec.rb +7 -4
  468. data/spec/views/opportunities/new.rjs_spec.rb +2 -12
  469. data/spec/views/opportunities/show.haml_spec.rb +1 -2
  470. data/spec/views/opportunities/update.rjs_spec.rb +2 -3
  471. data/spec/views/tasks/_edit.haml_spec.rb +1 -3
  472. data/spec/views/tasks/complete.rjs_spec.rb +2 -3
  473. data/spec/views/tasks/create.rjs_spec.rb +2 -2
  474. data/spec/views/tasks/edit.rjs_spec.rb +1 -2
  475. data/spec/views/tasks/new.rjs_spec.rb +1 -18
  476. data/spec/views/users/avatar.rjs_spec.rb +1 -2
  477. data/spec/views/users/change_password.rjs_spec.rb +1 -2
  478. data/spec/views/users/edit.rjs_spec.rb +1 -2
  479. data/spec/views/users/password.rjs_spec.rb +1 -1
  480. data/spec/views/users/update.rjs_spec.rb +1 -2
  481. data/spec/views/users/upload_avatar.rjs_spec.rb +6 -7
  482. data/vendor/assets/images/brief.png +0 -0
  483. data/vendor/assets/images/chosen-sprite.png +0 -0
  484. data/vendor/assets/images/full.png +0 -0
  485. data/vendor/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  486. data/vendor/assets/images/jquery-ui/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  487. data/vendor/assets/images/jquery-ui/ui-bg_flat_100_ffffff_40x100.png +0 -0
  488. data/vendor/assets/images/jquery-ui/ui-bg_flat_25_3875d7_40x100.png +0 -0
  489. data/vendor/assets/images/jquery-ui/ui-bg_flat_55_ffffff_40x100.png +0 -0
  490. data/vendor/assets/images/jquery-ui/ui-bg_flat_65_3875d7_40x100.png +0 -0
  491. data/vendor/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
  492. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  493. data/vendor/assets/images/jquery-ui/{ui-icons_ef8c08_256x240.png → ui-icons_0073ea_256x240.png} +0 -0
  494. data/vendor/assets/images/jquery-ui/ui-icons_466bb1_256x240.png +0 -0
  495. data/vendor/assets/images/jquery-ui/{ui-icons_ffd27a_256x240.png → ui-icons_ff0084_256x240.png} +0 -0
  496. data/vendor/assets/images/long.png +0 -0
  497. data/vendor/assets/javascripts/chosen-jquery.js +3 -0
  498. data/vendor/assets/javascripts/chosen-prototype.js +3 -0
  499. data/vendor/assets/javascripts/chosen.jquery.coffee +574 -0
  500. data/vendor/assets/javascripts/chosen.proto.coffee +580 -0
  501. data/vendor/assets/javascripts/jquery.disable.js +23 -0
  502. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-addon.js +1882 -0
  503. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-af.js +20 -0
  504. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ca.js +20 -0
  505. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-cz.js +20 -0
  506. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-de.js +20 -0
  507. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-el.js +20 -0
  508. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-es.js +20 -0
  509. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-et.js +20 -0
  510. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fi.js +20 -0
  511. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fr-CA.js +20 -0
  512. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fr.js +20 -0
  513. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-gl.js +20 -0
  514. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-he.js +20 -0
  515. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-hu.js +20 -0
  516. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-id.js +20 -0
  517. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-it.js +20 -0
  518. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ja.js +20 -0
  519. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ko.js +20 -0
  520. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-lt.js +20 -0
  521. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-nl.js +20 -0
  522. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-no.js +20 -0
  523. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-pl.js +20 -0
  524. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-pt.js +20 -0
  525. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ro.js +20 -0
  526. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ru.js +20 -0
  527. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-sk.js +20 -0
  528. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-sv.js +20 -0
  529. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-tr.js +20 -0
  530. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-vi.js +20 -0
  531. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-zh-CN.js +20 -0
  532. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-zh-TW.js +20 -0
  533. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-cz.js +23 -0
  534. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-de.js +23 -0
  535. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-en-GB.js +23 -0
  536. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-es.js +23 -0
  537. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-fr.js +23 -0
  538. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-it.js +23 -0
  539. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-ja.js +23 -0
  540. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-pl.js +23 -0
  541. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-pt-BR.js +23 -0
  542. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-ru.js +23 -0
  543. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-sv-SE.js +23 -0
  544. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-th.js +23 -0
  545. data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-zh-CN.js +23 -0
  546. data/vendor/assets/javascripts/lib/abstract-chosen.coffee +110 -0
  547. data/vendor/assets/javascripts/lib/select-parser.coffee +51 -0
  548. data/vendor/assets/stylesheets/chosen.css.sass +361 -0
  549. data/vendor/assets/stylesheets/{jquery-ui.custom.css.erb → jquery-ui.custom.css} +70 -70
  550. data/zeus.json +21 -0
  551. metadata +304 -140
  552. data/acceptance/support/database_cleaner.rb +0 -16
  553. data/acceptance/support/paths.rb +0 -9
  554. data/app/views/accounts/_options.html.haml +0 -20
  555. data/app/views/accounts/_permissions.html.haml +0 -24
  556. data/app/views/accounts/options.js.rjs +0 -10
  557. data/app/views/admin/fields/_edit.html.haml +0 -9
  558. data/app/views/admin/fields/_new.html.haml +0 -10
  559. data/app/views/admin/fields/_options.html.haml +0 -12
  560. data/app/views/admin/fields/_top_section.html.haml +0 -54
  561. data/app/views/admin/fields/create.js.rjs +0 -16
  562. data/app/views/admin/fields/edit.js.rjs +0 -35
  563. data/app/views/admin/fields/index.js.rjs +0 -6
  564. data/app/views/admin/fields/new.js.rjs +0 -8
  565. data/app/views/admin/fields/options.js.rjs +0 -10
  566. data/app/views/admin/fields/update.js.rjs +0 -17
  567. data/app/views/campaigns/_options.html.haml +0 -20
  568. data/app/views/campaigns/_permissions.html.haml +0 -24
  569. data/app/views/campaigns/options.js.rjs +0 -10
  570. data/app/views/contacts/_options.html.haml +0 -21
  571. data/app/views/contacts/_permissions.html.haml +0 -24
  572. data/app/views/contacts/options.js.rjs +0 -10
  573. data/app/views/entities/_advanced_search.html.haml +0 -12
  574. data/app/views/entities/_condition_fields.html.haml +0 -14
  575. data/app/views/entities/_grouping_fields.html.haml +0 -12
  576. data/app/views/entities/advanced_search.js.rjs +0 -9
  577. data/app/views/entities/versions.js.rjs +0 -3
  578. data/app/views/leads/_options.html.haml +0 -21
  579. data/app/views/leads/_permissions.html.haml +0 -28
  580. data/app/views/leads/options.js.rjs +0 -10
  581. data/app/views/opportunities/_options.html.haml +0 -20
  582. data/app/views/opportunities/_permissions.html.haml +0 -24
  583. data/app/views/opportunities/options.js.rjs +0 -10
  584. data/app/views/shared/_outline.html.haml +0 -9
  585. data/app/views/shared/_per_page.html.haml +0 -10
  586. data/app/views/shared/_sort_by.html.haml +0 -10
  587. data/config/initializers/cancan.rb +0 -151
  588. data/config/initializers/squeel.rb +0 -5
  589. data/public/blank_iframe.html +0 -2
  590. data/spec/views/accounts/options.rjs_spec.rb +0 -59
  591. data/spec/views/campaigns/options.rjs_spec.rb +0 -60
  592. data/spec/views/contacts/options.rjs_spec.rb +0 -61
  593. data/spec/views/leads/options.rjs_spec.rb +0 -61
  594. data/spec/views/opportunities/options.rjs_spec.rb +0 -60
  595. data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  596. data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  597. data/vendor/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
  598. data/vendor/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  599. data/vendor/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  600. data/vendor/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  601. data/vendor/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  602. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  603. data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  604. data/vendor/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
  605. data/vendor/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
  606. data/vendor/assets/javascripts/calendar_date_select/calendar_date_select.js +0 -446
  607. data/vendor/assets/javascripts/calendar_date_select/format_american.js +0 -35
  608. data/vendor/assets/javascripts/calendar_date_select/format_danish.js +0 -31
  609. data/vendor/assets/javascripts/calendar_date_select/format_db.js +0 -27
  610. data/vendor/assets/javascripts/calendar_date_select/format_euro_24hr.js +0 -7
  611. data/vendor/assets/javascripts/calendar_date_select/format_euro_24hr_ymd.js +0 -7
  612. data/vendor/assets/javascripts/calendar_date_select/format_finnish.js +0 -32
  613. data/vendor/assets/javascripts/calendar_date_select/format_french.js +0 -24
  614. data/vendor/assets/javascripts/calendar_date_select/format_hyphen_ampm.js +0 -37
  615. data/vendor/assets/javascripts/calendar_date_select/format_iso_date.js +0 -29
  616. data/vendor/assets/javascripts/calendar_date_select/format_italian.js +0 -24
  617. data/vendor/assets/javascripts/calendar_date_select/locale/ar.js +0 -10
  618. data/vendor/assets/javascripts/calendar_date_select/locale/da.js +0 -11
  619. data/vendor/assets/javascripts/calendar_date_select/locale/de.js +0 -11
  620. data/vendor/assets/javascripts/calendar_date_select/locale/es.js +0 -11
  621. data/vendor/assets/javascripts/calendar_date_select/locale/fi.js +0 -10
  622. data/vendor/assets/javascripts/calendar_date_select/locale/fr.js +0 -11
  623. data/vendor/assets/javascripts/calendar_date_select/locale/it.js +0 -9
  624. data/vendor/assets/javascripts/calendar_date_select/locale/ja.js +0 -11
  625. data/vendor/assets/javascripts/calendar_date_select/locale/nl.js +0 -11
  626. data/vendor/assets/javascripts/calendar_date_select/locale/pl.js +0 -11
  627. data/vendor/assets/javascripts/calendar_date_select/locale/pt.js +0 -11
  628. data/vendor/assets/javascripts/calendar_date_select/locale/ru.js +0 -10
  629. data/vendor/assets/javascripts/calendar_date_select/locale/sl.js +0 -11
  630. data/vendor/assets/javascripts/calendar_date_select/locale/sv.js +0 -9
  631. data/vendor/assets/stylesheets/calendar_date_select/blue.css +0 -130
  632. data/vendor/assets/stylesheets/calendar_date_select/default.css +0 -135
  633. data/vendor/assets/stylesheets/calendar_date_select/green.css +0 -142
  634. data/vendor/assets/stylesheets/calendar_date_select/plain.css +0 -128
  635. data/vendor/assets/stylesheets/calendar_date_select/red.css +0 -135
  636. data/vendor/assets/stylesheets/calendar_date_select/silver.css +0 -133
  637. data/vendor/plugins/.gitkeep~master +0 -0
@@ -17,6 +17,7 @@
17
17
 
18
18
  require 'rails/all'
19
19
  require 'jquery-rails'
20
+ require 'select2-rails'
20
21
  require 'prototype-rails'
21
22
  require 'haml'
22
23
  require 'sass'
@@ -32,9 +33,14 @@ require 'authlogic'
32
33
  require 'chosen-rails'
33
34
  require 'ajax-chosen-rails'
34
35
  require 'ransack'
36
+ require 'ransack_ui'
35
37
  require 'paper_trail'
36
38
  require 'cancan'
37
- require 'squeel'
39
+ require 'rails3-jquery-autocomplete'
40
+ require 'valium'
41
+ require 'ffaker'
42
+ require 'premailer'
43
+ require 'nokogiri'
38
44
 
39
45
  # Load redcloth if available (for textile markup in emails)
40
46
  begin
@@ -35,8 +35,7 @@ module FatFreeCRM
35
35
  has_many :permissions, :as => :asset
36
36
 
37
37
  scope :my, lambda {
38
- current_ability = Ability.new(User.current_user)
39
- accessible_by(current_ability).readonly(false)
38
+ accessible_by(User.current_ability)
40
39
  }
41
40
 
42
41
  include FatFreeCRM::Permissions::InstanceMethods
@@ -48,44 +47,67 @@ module FatFreeCRM
48
47
 
49
48
  module InstanceMethods
50
49
 
50
+ # Save shared permissions to the model, if any.
51
+ #--------------------------------------------------------------------------
52
+ %w(group user).each do |model|
53
+ class_eval %Q{
54
+
55
+ def #{model}_ids=(value)
56
+ if access != "Shared"
57
+ remove_permissions
58
+ else
59
+ value.map!{|c| c.split(',')} if value.map{|v| v.to_s.include?(',')}.any? # fix for a bug in "Chosen" which gives values like ["", "1,2,3"]
60
+ value = value.flatten.reject(&:blank?).uniq.map(&:to_i)
61
+ permissions_to_remove = Permission.find_all_by_#{model}_id_and_asset_id_and_asset_type(self.#{model}_ids - value, self.id, self.class)
62
+ permissions_to_remove.each {|p| (permissions.delete(p); p.destroy)}
63
+ (value - self.#{model}_ids).each {|id| permissions.build(:#{model}_id => id)}
64
+ end
65
+ end
66
+
67
+ def #{model}_ids
68
+ permissions.map(&:#{model}_id).compact
69
+ end
70
+ }
71
+ end
72
+
73
+ # Remove all shared permissions if no longer shared
74
+ #--------------------------------------------------------------------------
75
+ def access=(value)
76
+ remove_permissions unless value == 'Shared'
77
+ super(value)
78
+ end
79
+
80
+ # Removes all permissions on an object
81
+ #--------------------------------------------------------------------------
82
+ def remove_permissions
83
+ # we don't use dependent => :destroy so must manually remove
84
+ permissions_to_remove = Permission.find_all_by_asset_id_and_asset_type(self.id, self.class)
85
+ permissions_to_remove.each {|p| (permissions.delete(p); p.destroy)}
86
+ end
87
+
51
88
  # Save the model along with its permissions if any.
52
89
  #--------------------------------------------------------------------------
53
- def save_with_permissions(users)
54
- if users && self[:access] == "Shared"
55
- users.each { |id| self.permissions << Permission.new(:user_id => id, :asset => self) }
56
- end
90
+ def save_with_permissions(users = nil)
91
+ ActiveSupport::Deprecation.warn "save_with_permissions is deprecated and may be removed from future releases, use user_ids and group_ids inside attributes instead."
57
92
  save
58
93
  end
59
94
 
60
95
  # Update the model along with its permissions if any.
61
96
  #--------------------------------------------------------------------------
62
- def update_with_permissions(attributes, users)
63
- if attributes[:access] != "Shared"
64
- self.permissions.delete_all
65
- elsif !users.blank? # Check if we have the same users this time around.
66
- existing_users = self.permissions.map(&:user_id)
67
- if (existing_users.size != users.size) || (existing_users - users != [])
68
- self.permissions.delete_all
69
- users.each do |id|
70
- self.permissions << Permission.new(:user_id => id, :asset => self)
71
- end
72
- end
73
- end
97
+ def update_with_permissions(attributes, users = nil)
98
+ ActiveSupport::Deprecation.warn "update_with_permissions is deprecated and may be removed from future releases, use user_ids and group_ids inside attributes instead."
74
99
  update_attributes(attributes)
75
100
  end
76
101
 
77
102
  # Save the model copying other model's permissions.
78
103
  #--------------------------------------------------------------------------
79
104
  def save_with_model_permissions(model)
80
- self.access = model.access
81
- if model.access == "Shared"
82
- model.permissions.each do |permission|
83
- self.permissions << Permission.new(:user_id => permission.user_id, :asset => self)
84
- end
85
- end
105
+ self.access = model.access
106
+ self.user_ids = model.user_ids
107
+ self.group_ids = model.group_ids
86
108
  save
87
109
  end
88
-
110
+
89
111
  end
90
112
 
91
113
  module SingletonMethods
@@ -95,4 +117,3 @@ module FatFreeCRM
95
117
  end # FatFreeCRM
96
118
 
97
119
  ActiveRecord::Base.send(:include, FatFreeCRM::Permissions)
98
-
@@ -19,7 +19,7 @@ module FatFreeCRM
19
19
  module VERSION #:nodoc:
20
20
  MAJOR = 0
21
21
  MINOR = 11
22
- TINY = 3
22
+ TINY = 4
23
23
  PRE = nil
24
24
 
25
25
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
@@ -0,0 +1,95 @@
1
+ # Fat Free CRM
2
+ # Copyright (C) 2008-2011 by Michael Dvorkin
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU Affero General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU Affero General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Affero General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+ #------------------------------------------------------------------------------
17
+
18
+ module FatFreeCRM
19
+
20
+ # A view factory keeps track of views and the contexts in which they are available.
21
+ #----------------------------------------------------------------------------
22
+ #
23
+ # The context that a view is available for is defined by 'controllers' and 'actions'
24
+ # controllers => ['contacts'] means that the view is available when the contacts controller is used
25
+ # actions => [:index, show] means that the view is available for search listings AND individual records
26
+ # template => 'contacts/index_full' is the partial that is rendered for this view
27
+ # Icon is optional. If specified, it will be passed to asset_path.
28
+ #
29
+ class ViewFactory
30
+
31
+ include Comparable
32
+
33
+ @@views = []
34
+ attr_accessor :id, :name, :icon, :title, :controllers, :actions, :template
35
+
36
+ # Class methods
37
+ #----------------------------------------------------------------------------
38
+ class << self
39
+
40
+ # Register with the view factory
41
+ #----------------------------------------------------------------------------
42
+ def register(view)
43
+ @@views << view unless @@views.map(&:id).include?(view.id)
44
+ end
45
+
46
+ # Return views that are available based on context
47
+ #----------------------------------------------------------------------------
48
+ def views_for(options = {})
49
+ controller = options[:controller]
50
+ action = options[:action]
51
+ name = options[:name] #optional
52
+ @@views.select do |view|
53
+ view.controllers.include?(controller) and view.actions.include?(action) and (name.present? ? view.name == name : true)
54
+ end
55
+ end
56
+
57
+ # Return template name of the current view
58
+ # pass in options[:name] to specify view name
59
+ #----------------------------------------------------------------------------
60
+ def template_for_current_view(options = {})
61
+ view = views_for(options).first
62
+ view && view.template
63
+ end
64
+
65
+ end
66
+
67
+ # Instance methods
68
+ #----------------------------------------------------------------------------
69
+ def initialize(options = {})
70
+ self.name = options[:name]
71
+ self.title = options[:title]
72
+ self.icon = options[:icon] # optional
73
+ self.controllers = options[:controllers] || []
74
+ self.actions = options[:actions] || []
75
+ self.template = options[:template]
76
+ self.id = generate_id
77
+ self.class.register(self)
78
+ end
79
+
80
+ # Define view equivalence. They are the same if they have the same id.
81
+ #----------------------------------------------------------------------------
82
+ def <=>(other)
83
+ id <=> other.id
84
+ end
85
+
86
+ private
87
+
88
+ # This defines what it means for one view to be different to another
89
+ #----------------------------------------------------------------------------
90
+ def generate_id
91
+ [name, controllers.sort, actions.sort].flatten.map(&:to_s).map(&:underscore).join('_')
92
+ end
93
+
94
+ end
95
+ end
@@ -18,7 +18,15 @@ module ActionView
18
18
  priority_countries = ["United States", "Argentina", "Australia", "Brasil", "Canada", "Finland", "France", "Germany", "Italy", "Japan", "Mexico", "Norway", "Poland", "Portugal", "Spain", "Sweden", "Russia", "United Kingdom"]
19
19
  end
20
20
 
21
- country_options += options_for_select(priority_countries, selected)
21
+ # Add iso code for priority countries
22
+ priority_countries_iso = COUNTRIES.select{|c| priority_countries.include?(c[0]) }
23
+
24
+ # Add iso code for selected countries if not nil
25
+ unless selected.nil?
26
+ selected = COUNTRIES.select{|c| selected.include?(c[1]) }.flatten
27
+ end
28
+
29
+ country_options += options_for_select(priority_countries_iso, selected)
22
30
  country_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
23
31
 
24
32
  other_countries = COUNTRIES.select{|c| !priority_countries.include?(c[0]) }
@@ -27,497 +35,509 @@ module ActionView
27
35
  # All the countries included in the country_options output.
28
36
 
29
37
  COUNTRIES = [
30
- ['Andorra', 'AN'],
31
- ['United Arab Emirates', 'AE'],
32
38
  ['Afghanistan', 'AF'],
33
- ['Antigua and Barbuda', 'AC'],
34
- ['Anguilla', 'AV'],
39
+ ['Aland Islands', 'AX'],
35
40
  ['Albania', 'AL'],
36
- ['Armenia', 'AM'],
37
- ['Netherlands Antilles', 'NT'],
41
+ ['Algeria', 'DZ'],
42
+ ['American Samoa', 'AS'],
43
+ ['Andorra', 'AD'],
38
44
  ['Angola', 'AO'],
39
- ['Antarctica', 'AY'],
45
+ ['Anguilla', 'AI'],
46
+ ['Antarctica', 'AQ'],
47
+ ['Antigua and Barbuda', 'AG'],
40
48
  ['Argentina', 'AR'],
41
- ['American Samoa', 'AQ'],
42
- ['Austria', 'AU'],
43
- ['Australia', 'AS'],
44
- ['Aruba', 'AA'],
45
- ['Aland Islands', 'FI'],
46
- ['Azerbaijan', 'AJ'],
47
- ['Bosnia and Herzegovina', 'BK'],
49
+ ['Armenia', 'AM'],
50
+ ['Aruba', 'AW'],
51
+ ['Australia', 'AU'],
52
+ ['Austria', 'AT'],
53
+ ['Azerbaijan', 'AZ'],
54
+ ['Bahamas', 'BS'],
55
+ ['Bahrain', 'BH'],
56
+ ['Bangladesh', 'BD'],
48
57
  ['Barbados', 'BB'],
49
- ['Bangladesh', 'BG'],
58
+ ['Belarus', 'BY'],
50
59
  ['Belgium', 'BE'],
51
- ['Burkina Faso', 'UV'],
52
- ['Bulgaria', 'BU'],
53
- ['Bahrain', 'BA'],
54
- ['Burundi', 'BY'],
55
- ['Benin', 'BN'],
56
- ['Bermuda', 'BD'],
57
- ['Brunei', 'BX'],
58
- ['Bolivia', 'BL'],
59
- ['Brazil', 'BR'],
60
- ['Bahamas', 'BF'],
60
+ ['Belize', 'BZ'],
61
+ ['Benin', 'BJ'],
62
+ ['Bermuda', 'BM'],
61
63
  ['Bhutan', 'BT'],
64
+ ['Bolivia, Plurinational State of', 'BO'],
65
+ ['Bonaire, Sint Eustatius and Saba', 'BQ'],
66
+ ['Bosnia and Herzegovina', 'BA'],
67
+ ['Botswana', 'BW'],
62
68
  ['Bouvet Island', 'BV'],
63
- ['Botswana', 'BC'],
64
- ['Belarus', 'BO'],
65
- ['Belize', 'BH'],
66
- ['Canada', 'CA'],
67
- ['Cocos (Keeling) Islands', 'CK'],
68
- ['Congo (Kinshasa)', 'CG'],
69
- ['Central African Republic', 'CT'],
70
- ['Congo (Brazzaville)', 'CF'],
71
- ['Switzerland', 'SZ'],
72
- ['Ivory Coast', 'IV'],
73
- ['Cook Islands', 'CW'],
74
- ['Chile', 'CI'],
69
+ ['Brazil', 'BR'],
70
+ ['British Indian Ocean Territory', 'IO'],
71
+ ['Brunei Darussalam', 'BN'],
72
+ ['Bulgaria', 'BG'],
73
+ ['Burkina Faso', 'BF'],
74
+ ['Burundi', 'BI'],
75
+ ['Cambodia', 'KH'],
75
76
  ['Cameroon', 'CM'],
76
- ['China', 'CH'],
77
+ ['Canada', 'CA'],
78
+ ['Cape Verde', 'CV'],
79
+ ['Cayman Islands', 'KY'],
80
+ ['Central African Republic', 'CF'],
81
+ ['Chad', 'TD'],
82
+ ['Chile', 'CL'],
83
+ ['China', 'CN'],
84
+ ['Christmas Island', 'CX'],
85
+ ['Cocos (Keeling) Islands', 'CC'],
77
86
  ['Colombia', 'CO'],
78
- ['Costa Rica', 'CS'],
79
- ['Serbia And Montenegro', 'YI'],
87
+ ['Comoros', 'KM'],
88
+ ['Congo', 'CG'],
89
+ ['Congo, the Democratic Republic of the', 'CD'],
90
+ ['Cook Islands', 'CK'],
91
+ ['Costa Rica', 'CR'],
92
+ ['Cote d\'Ivoire', 'CI'],
93
+ ['Croatia', 'HR'],
80
94
  ['Cuba', 'CU'],
81
- ['Cape Verde', 'CV'],
82
- ['Christmas Island', 'KT'],
95
+ ['Curacao', 'CW'],
83
96
  ['Cyprus', 'CY'],
84
- ['Czech Republic', 'EZ'],
85
- ['Germany', 'GM'],
97
+ ['Czech Republic', 'CZ'],
98
+ ['Denmark', 'DK'],
86
99
  ['Djibouti', 'DJ'],
87
- ['Denmark', 'DA'],
88
- ['Dominica', 'DO'],
89
- ['Dominican Republic', 'DR'],
90
- ['Algeria', 'AG'],
100
+ ['Dominica', 'DM'],
101
+ ['Dominican Republic', 'DO'],
91
102
  ['Ecuador', 'EC'],
92
- ['Estonia', 'EN'],
93
103
  ['Egypt', 'EG'],
94
- ['Western Sahara', 'WI'],
104
+ ['El Salvador', 'SV'],
105
+ ['Equatorial Guinea', 'GQ'],
95
106
  ['Eritrea', 'ER'],
96
- ['Spain', 'SP'],
107
+ ['Estonia', 'EE'],
97
108
  ['Ethiopia', 'ET'],
98
- ['Finland', 'FI'],
99
- ['Fiji', 'FJ'],
100
- ['Falkland Islands', 'FK'],
101
- ['Micronesia', 'FM'],
109
+ ['Falkland Islands (Malvinas)', 'FK'],
102
110
  ['Faroe Islands', 'FO'],
111
+ ['Fiji', 'FJ'],
112
+ ['Finland', 'FI'],
103
113
  ['France', 'FR'],
104
- ['Gabon', 'GB'],
105
- ['United Kingdom', 'UK'],
106
- ['Grenada', 'GJ'],
107
- ['Georgia', 'GG'],
108
- ['French Guiana', 'FG'],
109
- ['Guernsey', 'GK'],
114
+ ['French Guiana', 'GF'],
115
+ ['French Polynesia', 'PF'],
116
+ ['French Southern Territories', 'TF'],
117
+ ['Gabon', 'GA'],
118
+ ['Gambia', 'GM'],
119
+ ['Georgia', 'GE'],
120
+ ['Germany', 'DE'],
110
121
  ['Ghana', 'GH'],
111
122
  ['Gibraltar', 'GI'],
123
+ ['Greece', 'GR'],
112
124
  ['Greenland', 'GL'],
113
- ['Gambia', 'GA'],
114
- ['Guinea', 'GV'],
125
+ ['Grenada', 'GD'],
115
126
  ['Guadeloupe', 'GP'],
116
- ['Equatorial Guinea', 'EK'],
117
- ['Greece', 'GR'],
118
- ['South Georgia and the South Sandwich Islands', 'SX'],
127
+ ['Guam', 'GU'],
119
128
  ['Guatemala', 'GT'],
120
- ['Guam', 'GQ'],
121
- ['Guinea-Bissau', 'PU'],
129
+ ['Guernsey', 'GG'],
130
+ ['Guinea', 'GN'],
131
+ ['Guinea-Bissau', 'GW'],
122
132
  ['Guyana', 'GY'],
123
- ['Hong Kong S.A.R., China', 'HK'],
133
+ ['Haiti', 'HT'],
124
134
  ['Heard Island and McDonald Islands', 'HM'],
125
- ['Honduras', 'HO'],
126
- ['Croatia', 'HR'],
127
- ['Haiti', 'HA'],
135
+ ['Holy See (Vatican City State)', 'VA'],
136
+ ['Honduras', 'HN'],
137
+ ['Hong Kong', 'HK'],
128
138
  ['Hungary', 'HU'],
139
+ ['Iceland', 'IS'],
140
+ ['India', 'IN'],
129
141
  ['Indonesia', 'ID'],
130
- ['Ireland', 'EI'],
131
- ['Israel', 'IS'],
142
+ ['Iran, Islamic Republic of', 'IR'],
143
+ ['Iraq', 'IQ'],
144
+ ['Ireland', 'IE'],
132
145
  ['Isle of Man', 'IM'],
133
- ['India', 'IN'],
134
- ['British Indian Ocean Territory', 'IO'],
135
- ['Iraq', 'IZ'],
136
- ['Iran', 'IR'],
137
- ['Iceland', 'IC'],
146
+ ['Israel', 'IL'],
138
147
  ['Italy', 'IT'],
139
- ['Jersey', 'JE'],
140
148
  ['Jamaica', 'JM'],
149
+ ['Japan', 'JP'],
150
+ ['Jersey', 'JE'],
141
151
  ['Jordan', 'JO'],
142
- ['Japan', 'JA'],
152
+ ['Kazakhstan', 'KZ'],
143
153
  ['Kenya', 'KE'],
154
+ ['Kiribati', 'KI'],
155
+ ['Korea, Democratic People\'s Republic of', 'KP'],
156
+ ['Korea, Republic of', 'KR'],
157
+ ['Kosovo', 'XK'],
158
+ ['Kuwait', 'KW'],
144
159
  ['Kyrgyzstan', 'KG'],
145
- ['Cambodia', 'CB'],
146
- ['Kiribati', 'KR'],
147
- ['Comoros', 'CN'],
148
- ['Saint Kitts and Nevis', 'SC'],
149
- ['North Korea', 'KN'],
150
- ['South Korea', 'KS'],
151
- ['Kuwait', 'KU'],
152
- ['Cayman Islands', 'CJ'],
153
- ['Kazakhstan', 'KZ'],
154
- ['Laos', 'LA'],
155
- ['Lebanon', 'LE'],
156
- ['Saint Lucia', 'ST'],
157
- ['Liechtenstein', 'LS'],
158
- ['Sri Lanka', 'CE'],
159
- ['Liberia', 'LI'],
160
- ['Lesotho', 'LT'],
161
- ['Lithuania', 'LH'],
162
- ['Luxembourg', 'LU'],
163
- ['Latvia', 'LG'],
160
+ ['Lao People\'s Democratic Republic', 'LA'],
161
+ ['Latvia', 'LV'],
162
+ ['Lebanon', 'LB'],
163
+ ['Lesotho', 'LS'],
164
+ ['Liberia', 'LR'],
164
165
  ['Libya', 'LY'],
165
- ['Morocco', 'MO'],
166
- ['Monaco', 'MN'],
167
- ['Moldova', 'MD'],
168
- ['Montenegro', 'MJ'],
169
- ['Madagascar', 'MA'],
170
- ['Marshall Islands', 'RM'],
171
- ['Macedonia', 'MK'],
166
+ ['Liechtenstein', 'LI'],
167
+ ['Lithuania', 'LT'],
168
+ ['Luxembourg', 'LU'],
169
+ ['Macao', 'MO'],
170
+ ['Macedonia, The Former Yugoslav Republic of', 'MK'],
171
+ ['Madagascar', 'MG'],
172
+ ['Malawi', 'MW'],
173
+ ['Malaysia', 'MY'],
174
+ ['Maldives', 'MV'],
172
175
  ['Mali', 'ML'],
173
- ['Myanmar', 'BM'],
174
- ['Mongolia', 'MG'],
175
- ['Macao S.A.R., China', 'MC'],
176
- ['Northern Mariana Islands', 'CQ'],
177
- ['Martinique', 'MB'],
178
- ['Mauritania', 'MR'],
179
- ['Montserrat', 'MH'],
180
176
  ['Malta', 'MT'],
181
- ['Mauritius', 'MP'],
182
- ['Maldives', 'MV'],
183
- ['Malawi', 'MI'],
177
+ ['Marshall Islands', 'MH'],
178
+ ['Martinique', 'MQ'],
179
+ ['Mauritania', 'MR'],
180
+ ['Mauritius', 'MU'],
181
+ ['Mayotte', 'YT'],
184
182
  ['Mexico', 'MX'],
185
- ['Malaysia', 'MY'],
183
+ ['Micronesia, Federated States of', 'FM'],
184
+ ['Moldova, Republic of', 'MD'],
185
+ ['Monaco', 'MC'],
186
+ ['Mongolia', 'MN'],
187
+ ['Montenegro', 'ME'],
188
+ ['Montserrat', 'MS'],
189
+ ['Morocco', 'MA'],
186
190
  ['Mozambique', 'MZ'],
187
- ['Namibia', 'WA'],
191
+ ['Myanmar', 'MM'],
192
+ ['Namibia', 'NA'],
193
+ ['Nauru', 'NR'],
194
+ ['Nepal', 'NP'],
195
+ ['Netherlands', 'NL'],
188
196
  ['New Caledonia', 'NC'],
189
- ['Niger', 'NG'],
197
+ ['New Zealand', 'NZ'],
198
+ ['Nicaragua', 'NI'],
199
+ ['Niger', 'NE'],
200
+ ['Nigeria', 'NG'],
201
+ ['Niue', 'NU'],
190
202
  ['Norfolk Island', 'NF'],
191
- ['Nigeria', 'NI'],
192
- ['Nicaragua', 'NU'],
193
- ['Netherlands', 'NL'],
203
+ ['Northern Mariana Islands', 'MP'],
194
204
  ['Norway', 'NO'],
195
- ['Nepal', 'NP'],
196
- ['Nauru', 'NR'],
197
- ['Niue', 'NE'],
198
- ['New Zealand', 'NZ'],
199
- ['Oman', 'MU'],
200
- ['Panama', 'PM'],
201
- ['Peru', 'PE'],
202
- ['French Polynesia', 'FP'],
203
- ['Papua New Guinea', 'PP'],
204
- ['Philippines', 'RP'],
205
+ ['Oman', 'OM'],
205
206
  ['Pakistan', 'PK'],
207
+ ['Palau', 'PW'],
208
+ ['Palestinian Territory, Occupied', 'PS'],
209
+ ['Panama', 'PA'],
210
+ ['Papua New Guinea', 'PG'],
211
+ ['Paraguay', 'PY'],
212
+ ['Peru', 'PE'],
213
+ ['Philippines', 'PH'],
214
+ ['Pitcairn', 'PN'],
206
215
  ['Poland', 'PL'],
207
- ['Saint Pierre and Miquelon', 'SB'],
208
- ['Pitcairn', 'PC'],
209
- ['Puerto Rico', 'RQ'],
210
- ['Palestinian Territory', 'WE'],
211
- ['Portugal', 'PO'],
212
- ['Palau', 'PS'],
213
- ['Paraguay', 'PA'],
216
+ ['Portugal', 'PT'],
217
+ ['Puerto Rico', 'PR'],
214
218
  ['Qatar', 'QA'],
215
219
  ['Reunion', 'RE'],
216
220
  ['Romania', 'RO'],
217
- ['Serbia', 'RB'],
218
- ['Russia', 'RS'],
221
+ ['Russian Federation', 'RU'],
219
222
  ['Rwanda', 'RW'],
223
+ ['Saint Barthelemy', 'BL'],
224
+ ['Saint Helena, Ascension and Tristan da Cunha', 'SH'],
225
+ ['Saint Kitts and Nevis', 'KN'],
226
+ ['Saint Lucia', 'LC'],
227
+ ['Saint Martin (French part)', 'MF'],
228
+ ['Saint Pierre and Miquelon', 'PM'],
229
+ ['Saint Vincent and the Grenadines', 'VC'],
230
+ ['Samoa', 'WS'],
231
+ ['San Marino', 'SM'],
232
+ ['Sao Tome and Principe', 'ST'],
220
233
  ['Saudi Arabia', 'SA'],
221
- ['Solomon Islands', 'BP'],
222
- ['Seychelles', 'SE'],
223
- ['Sudan', 'SU'],
224
- ['Sweden', 'SW'],
225
- ['Singapore', 'SN'],
226
- ['Saint Helena', 'SH'],
227
- ['Slovenia', 'SI'],
228
- ['Svalbard and Jan Mayen', 'SV'],
229
- ['Slovakia', 'LO'],
234
+ ['Senegal', 'SN'],
235
+ ['Serbia', 'RS'],
236
+ ['Seychelles', 'SC'],
230
237
  ['Sierra Leone', 'SL'],
231
- ['San Marino', 'SM'],
232
- ['Senegal', 'SG'],
238
+ ['Singapore', 'SG'],
239
+ ['Sint Maarten (Dutch part)', 'SX'],
240
+ ['Slovakia', 'SK'],
241
+ ['Slovenia', 'SI'],
242
+ ['Solomon Islands', 'SB'],
233
243
  ['Somalia', 'SO'],
234
- ['Suriname', 'NS'],
235
- ['Sao Tome and Principe', 'TP'],
236
- ['El Salvador', 'ES'],
237
- ['Syria', 'SY'],
238
- ['Swaziland', 'WZ'],
239
- ['Turks and Caicos Islands', 'TK'],
240
- ['Chad', 'CD'],
241
- ['French Southern Territories', 'FS'],
242
- ['Togo', 'TO'],
244
+ ['South Africa', 'ZA'],
245
+ ['South Georgia and the South Sandwich Islands', 'GS'],
246
+ ['South Sudan', 'SS'],
247
+ ['Spain', 'ES'],
248
+ ['Sri Lanka', 'LK'],
249
+ ['Sudan', 'SD'],
250
+ ['Suriname', 'SR'],
251
+ ['Svalbard and Jan Mayen', 'SJ'],
252
+ ['Swaziland', 'SZ'],
253
+ ['Sweden', 'SE'],
254
+ ['Switzerland', 'CH'],
255
+ ['Syrian Arab Republic', 'SY'],
256
+ ['Taiwan, Province of China', 'TW'],
257
+ ['Tajikistan', 'TJ'],
258
+ ['Tanzania, United Republic of', 'TZ'],
243
259
  ['Thailand', 'TH'],
244
- ['Tajikistan', 'TI'],
245
- ['Tokelau', 'TL'],
246
- ['East Timor', 'TT'],
247
- ['Turkmenistan', 'TX'],
248
- ['Tunisia', 'TS'],
249
- ['Tonga', 'TN'],
250
- ['Turkey', 'TU'],
251
- ['Trinidad and Tobago', 'TD'],
260
+ ['Timor-Leste', 'TL'],
261
+ ['Togo', 'TG'],
262
+ ['Tokelau', 'TK'],
263
+ ['Tonga', 'TO'],
264
+ ['Trinidad and Tobago', 'TT'],
265
+ ['Tunisia', 'TN'],
266
+ ['Turkey', 'TR'],
267
+ ['Turkmenistan', 'TM'],
268
+ ['Turks and Caicos Islands', 'TC'],
252
269
  ['Tuvalu', 'TV'],
253
- ['Taiwan', 'TW'],
254
- ['Tanzania', 'TZ'],
255
- ['Ukraine', 'UP'],
256
270
  ['Uganda', 'UG'],
271
+ ['Ukraine', 'UA'],
272
+ ['United Arab Emirates', 'AE'],
273
+ ['United Kingdom', 'GB'],
257
274
  ['United States', 'US'],
275
+ ['United States Minor Outlying Islands', 'UM'],
258
276
  ['Uruguay', 'UY'],
259
277
  ['Uzbekistan', 'UZ'],
260
- ['Vatican', 'VT'],
261
- ['Saint Vincent and the Grenadines', 'VC'],
262
- ['Venezuela', 'VE'],
263
- ['British Virgin Islands', 'VI'],
264
- ['U.S. Virgin Islands', 'VQ'],
265
- ['Vietnam', 'VM'],
266
- ['Vanuatu', 'NH'],
278
+ ['Vanuatu', 'VU'],
279
+ ['Venezuela, Bolivarian Republic of', 'VE'],
280
+ ['Viet Nam', 'VN'],
281
+ ['Virgin Islands, British', 'VG'],
282
+ ['Virgin Islands, U.S.', 'VI'],
267
283
  ['Wallis and Futuna', 'WF'],
268
- ['Samoa', 'WS'],
269
- ['Yemen', 'YM'],
270
- ['Mayotte', 'MF'],
271
- ['South Africa', 'SF'],
272
- ['Zambia', 'ZA'],
273
- ['Zimbabwe', 'ZI']
284
+ ['Western Sahara', 'EH'],
285
+ ['Yemen', 'YE'],
286
+ ['Zambia', 'ZM'],
287
+ ['Zimbabwe', 'ZW']
274
288
  ].sort unless const_defined?("COUNTRIES")
275
289
 
276
290
  COUNTRIES_HASH = {
277
- :AN => 'Andorra',
278
- :AE => 'United Arab Emirates',
279
291
  :AF => 'Afghanistan',
280
- :AC => 'Antigua and Barbuda',
281
- :AV => 'Anguilla',
292
+ :AX => 'Aland Islands',
282
293
  :AL => 'Albania',
283
- :AM => 'Armenia',
284
- :NT => 'Netherlands Antilles',
294
+ :DZ => 'Algeria',
295
+ :AS => 'American Samoa',
296
+ :AD => 'Andorra',
285
297
  :AO => 'Angola',
286
- :AY => 'Antarctica',
298
+ :AI => 'Anguilla',
299
+ :AQ => 'Antarctica',
300
+ :AG => 'Antigua and Barbuda',
287
301
  :AR => 'Argentina',
288
- :AQ => 'American Samoa',
289
- :AU => 'Austria',
290
- :AS => 'Australia',
291
- :AA => 'Aruba',
292
- :FI => 'Aland Islands',
293
- :AJ => 'Azerbaijan',
294
- :BK => 'Bosnia and Herzegovina',
302
+ :AM => 'Armenia',
303
+ :AW => 'Aruba',
304
+ :AU => 'Australia',
305
+ :AT => 'Austria',
306
+ :AZ => 'Azerbaijan',
307
+ :BS => 'Bahamas',
308
+ :BH => 'Bahrain',
309
+ :BD => 'Bangladesh',
295
310
  :BB => 'Barbados',
296
- :BG => 'Bangladesh',
311
+ :BY => 'Belarus',
297
312
  :BE => 'Belgium',
298
- :UV => 'Burkina Faso',
299
- :BU => 'Bulgaria',
300
- :BA => 'Bahrain',
301
- :BY => 'Burundi',
302
- :BN => 'Benin',
303
- :BD => 'Bermuda',
304
- :BX => 'Brunei',
305
- :BL => 'Bolivia',
306
- :BR => 'Brazil',
307
- :BF => 'Bahamas',
313
+ :BZ => 'Belize',
314
+ :BJ => 'Benin',
315
+ :BM => 'Bermuda',
308
316
  :BT => 'Bhutan',
317
+ :BO => 'Bolivia, Plurinational State of',
318
+ :BQ => 'Bonaire, Sint Eustatius and Saba',
319
+ :BA => 'Bosnia and Herzegovina',
320
+ :BW => 'Botswana',
309
321
  :BV => 'Bouvet Island',
310
- :BC => 'Botswana',
311
- :BO => 'Belarus',
312
- :BH => 'Belize',
313
- :CA => 'Canada',
314
- :CK => 'Cocos (Keeling) Islands',
315
- :CG => 'Congo (Kinshasa)',
316
- :CT => 'Central African Republic',
317
- :CF => 'Congo (Brazzaville)',
318
- :SZ => 'Switzerland',
319
- :IV => 'Ivory Coast',
320
- :CW => 'Cook Islands',
321
- :CI => 'Chile',
322
+ :BR => 'Brazil',
323
+ :IO => 'British Indian Ocean Territory',
324
+ :BN => 'Brunei Darussalam',
325
+ :BG => 'Bulgaria',
326
+ :BF => 'Burkina Faso',
327
+ :BI => 'Burundi',
328
+ :KH => 'Cambodia',
322
329
  :CM => 'Cameroon',
323
- :CH => 'China',
330
+ :CA => 'Canada',
331
+ :CV => 'Cape Verde',
332
+ :KY => 'Cayman Islands',
333
+ :CF => 'Central African Republic',
334
+ :TD => 'Chad',
335
+ :CL => 'Chile',
336
+ :CN => 'China',
337
+ :CX => 'Christmas Island',
338
+ :CC => 'Cocos (Keeling) Islands',
324
339
  :CO => 'Colombia',
325
- :CS => 'Costa Rica',
326
- :YI => 'Serbia And Montenegro',
340
+ :KM => 'Comoros',
341
+ :CG => 'Congo',
342
+ :CD => 'Congo, the Democratic Republic of the',
343
+ :CK => 'Cook Islands',
344
+ :CR => 'Costa Rica',
345
+ :CI => 'Cote d\'Ivoire',
346
+ :HR => 'Croatia',
327
347
  :CU => 'Cuba',
328
- :CV => 'Cape Verde',
329
- :KT => 'Christmas Island',
348
+ :CW => 'Curacao',
330
349
  :CY => 'Cyprus',
331
- :EZ => 'Czech Republic',
332
- :GM => 'Germany',
350
+ :CZ => 'Czech Republic',
351
+ :DK => 'Denmark',
333
352
  :DJ => 'Djibouti',
334
- :DA => 'Denmark',
335
- :DO => 'Dominica',
336
- :DR => 'Dominican Republic',
337
- :AG => 'Algeria',
353
+ :DM => 'Dominica',
354
+ :DO => 'Dominican Republic',
338
355
  :EC => 'Ecuador',
339
- :EN => 'Estonia',
340
356
  :EG => 'Egypt',
341
- :WI => 'Western Sahara',
357
+ :SV => 'El Salvador',
358
+ :GQ => 'Equatorial Guinea',
342
359
  :ER => 'Eritrea',
343
- :SP => 'Spain',
360
+ :EE => 'Estonia',
344
361
  :ET => 'Ethiopia',
345
- :FI => 'Finland',
346
- :FJ => 'Fiji',
347
- :FK => 'Falkland Islands',
348
- :FM => 'Micronesia',
362
+ :FK => 'Falkland Islands (Malvinas)',
349
363
  :FO => 'Faroe Islands',
364
+ :FJ => 'Fiji',
365
+ :FI => 'Finland',
350
366
  :FR => 'France',
351
- :GB => 'Gabon',
352
- :UK => 'United Kingdom',
353
- :GJ => 'Grenada',
354
- :GG => 'Georgia',
355
- :FG => 'French Guiana',
356
- :GK => 'Guernsey',
367
+ :GF => 'French Guiana',
368
+ :PF => 'French Polynesia',
369
+ :TF => 'French Southern Territories',
370
+ :GA => 'Gabon',
371
+ :GM => 'Gambia',
372
+ :GE => 'Georgia',
373
+ :DE => 'Germany',
357
374
  :GH => 'Ghana',
358
375
  :GI => 'Gibraltar',
376
+ :GR => 'Greece',
359
377
  :GL => 'Greenland',
360
- :GA => 'Gambia',
361
- :GV => 'Guinea',
378
+ :GD => 'Grenada',
362
379
  :GP => 'Guadeloupe',
363
- :EK => 'Equatorial Guinea',
364
- :GR => 'Greece',
365
- :SX => 'South Georgia and the South Sandwich Islands',
380
+ :GU => 'Guam',
366
381
  :GT => 'Guatemala',
367
- :GQ => 'Guam',
368
- :PU => 'Guinea-Bissau',
382
+ :GG => 'Guernsey',
383
+ :GN => 'Guinea',
384
+ :GW => 'Guinea-Bissau',
369
385
  :GY => 'Guyana',
370
- :HK => 'Hong Kong S.A.R., China',
386
+ :HT => 'Haiti',
371
387
  :HM => 'Heard Island and McDonald Islands',
372
- :HO => 'Honduras',
373
- :HR => 'Croatia',
374
- :HA => 'Haiti',
388
+ :VA => 'Holy See (Vatican City State)',
389
+ :HN => 'Honduras',
390
+ :HK => 'Hong Kong',
375
391
  :HU => 'Hungary',
392
+ :IS => 'Iceland',
393
+ :IN => 'India',
376
394
  :ID => 'Indonesia',
377
- :EI => 'Ireland',
378
- :IS => 'Israel',
395
+ :IR => 'Iran, Islamic Republic of',
396
+ :IQ => 'Iraq',
397
+ :IE => 'Ireland',
379
398
  :IM => 'Isle of Man',
380
- :IN => 'India',
381
- :IO => 'British Indian Ocean Territory',
382
- :IZ => 'Iraq',
383
- :IR => 'Iran',
384
- :IC => 'Iceland',
399
+ :IL => 'Israel',
385
400
  :IT => 'Italy',
386
- :JE => 'Jersey',
387
401
  :JM => 'Jamaica',
402
+ :JP => 'Japan',
403
+ :JE => 'Jersey',
388
404
  :JO => 'Jordan',
389
- :JA => 'Japan',
405
+ :KZ => 'Kazakhstan',
390
406
  :KE => 'Kenya',
407
+ :KI => 'Kiribati',
408
+ :KP => 'Korea, Democratic People\'s Republic of',
409
+ :KR => 'Korea, Republic of',
410
+ :XK => 'Kosovo',
411
+ :KW => 'Kuwait',
391
412
  :KG => 'Kyrgyzstan',
392
- :CB => 'Cambodia',
393
- :KR => 'Kiribati',
394
- :CN => 'Comoros',
395
- :SC => 'Saint Kitts and Nevis',
396
- :KN => 'North Korea',
397
- :KS => 'South Korea',
398
- :KU => 'Kuwait',
399
- :CJ => 'Cayman Islands',
400
- :KZ => 'Kazakhstan',
401
- :LA => 'Laos',
402
- :LE => 'Lebanon',
403
- :ST => 'Saint Lucia',
404
- :LS => 'Liechtenstein',
405
- :CE => 'Sri Lanka',
406
- :LI => 'Liberia',
407
- :LT => 'Lesotho',
408
- :LH => 'Lithuania',
409
- :LU => 'Luxembourg',
410
- :LG => 'Latvia',
413
+ :LA => 'Lao People\'s Democratic Republic',
414
+ :LV => 'Latvia',
415
+ :LB => 'Lebanon',
416
+ :LS => 'Lesotho',
417
+ :LR => 'Liberia',
411
418
  :LY => 'Libya',
412
- :MO => 'Morocco',
413
- :MN => 'Monaco',
414
- :MD => 'Moldova',
415
- :MJ => 'Montenegro',
416
- :MA => 'Madagascar',
417
- :RM => 'Marshall Islands',
418
- :MK => 'Macedonia',
419
+ :LI => 'Liechtenstein',
420
+ :LT => 'Lithuania',
421
+ :LU => 'Luxembourg',
422
+ :MO => 'Macao',
423
+ :MK => 'Macedonia, The Former Yugoslav Republic of',
424
+ :MG => 'Madagascar',
425
+ :MW => 'Malawi',
426
+ :MY => 'Malaysia',
427
+ :MV => 'Maldives',
419
428
  :ML => 'Mali',
420
- :BM => 'Myanmar',
421
- :MG => 'Mongolia',
422
- :MC => 'Macao S.A.R., China',
423
- :CQ => 'Northern Mariana Islands',
424
- :MB => 'Martinique',
425
- :MR => 'Mauritania',
426
- :MH => 'Montserrat',
427
429
  :MT => 'Malta',
428
- :MP => 'Mauritius',
429
- :MV => 'Maldives',
430
- :MI => 'Malawi',
430
+ :MH => 'Marshall Islands',
431
+ :MQ => 'Martinique',
432
+ :MR => 'Mauritania',
433
+ :MU => 'Mauritius',
434
+ :YT => 'Mayotte',
431
435
  :MX => 'Mexico',
432
- :MY => 'Malaysia',
436
+ :FM => 'Micronesia, Federated States of',
437
+ :MD => 'Moldova, Republic of',
438
+ :MC => 'Monaco',
439
+ :MN => 'Mongolia',
440
+ :ME => 'Montenegro',
441
+ :MS => 'Montserrat',
442
+ :MA => 'Morocco',
433
443
  :MZ => 'Mozambique',
434
- :WA => 'Namibia',
444
+ :MM => 'Myanmar',
445
+ :NA => 'Namibia',
446
+ :NR => 'Nauru',
447
+ :NP => 'Nepal',
448
+ :NL => 'Netherlands',
435
449
  :NC => 'New Caledonia',
436
- :NG => 'Niger',
450
+ :NZ => 'New Zealand',
451
+ :NI => 'Nicaragua',
452
+ :NE => 'Niger',
453
+ :NG => 'Nigeria',
454
+ :NU => 'Niue',
437
455
  :NF => 'Norfolk Island',
438
- :NI => 'Nigeria',
439
- :NU => 'Nicaragua',
440
- :NL => 'Netherlands',
456
+ :MP => 'Northern Mariana Islands',
441
457
  :NO => 'Norway',
442
- :NP => 'Nepal',
443
- :NR => 'Nauru',
444
- :NE => 'Niue',
445
- :NZ => 'New Zealand',
446
- :MU => 'Oman',
447
- :PM => 'Panama',
448
- :PE => 'Peru',
449
- :FP => 'French Polynesia',
450
- :PP => 'Papua New Guinea',
451
- :RP => 'Philippines',
458
+ :OM => 'Oman',
452
459
  :PK => 'Pakistan',
460
+ :PW => 'Palau',
461
+ :PS => 'Palestinian Territory, Occupied',
462
+ :PA => 'Panama',
463
+ :PG => 'Papua New Guinea',
464
+ :PY => 'Paraguay',
465
+ :PE => 'Peru',
466
+ :PH => 'Philippines',
467
+ :PN => 'Pitcairn',
453
468
  :PL => 'Poland',
454
- :SB => 'Saint Pierre and Miquelon',
455
- :PC => 'Pitcairn',
456
- :RQ => 'Puerto Rico',
457
- :WE => 'Palestinian Territory',
458
- :PO => 'Portugal',
459
- :PS => 'Palau',
460
- :PA => 'Paraguay',
469
+ :PT => 'Portugal',
470
+ :PR => 'Puerto Rico',
461
471
  :QA => 'Qatar',
462
472
  :RE => 'Reunion',
463
473
  :RO => 'Romania',
464
- :RB => 'Serbia',
465
- :RS => 'Russia',
474
+ :RU => 'Russian Federation',
466
475
  :RW => 'Rwanda',
476
+ :BL => 'Saint Barthelemy',
477
+ :SH => 'Saint Helena, Ascension and Tristan da Cunha',
478
+ :KN => 'Saint Kitts and Nevis',
479
+ :LC => 'Saint Lucia',
480
+ :MF => 'Saint Martin (French part)',
481
+ :PM => 'Saint Pierre and Miquelon',
482
+ :VC => 'Saint Vincent and the Grenadines',
483
+ :WS => 'Samoa',
484
+ :SM => 'San Marino',
485
+ :ST => 'Sao Tome and Principe',
467
486
  :SA => 'Saudi Arabia',
468
- :BP => 'Solomon Islands',
469
- :SE => 'Seychelles',
470
- :SU => 'Sudan',
471
- :SW => 'Sweden',
472
- :SN => 'Singapore',
473
- :SH => 'Saint Helena',
474
- :SI => 'Slovenia',
475
- :SV => 'Svalbard and Jan Mayen',
476
- :LO => 'Slovakia',
487
+ :SN => 'Senegal',
488
+ :RS => 'Serbia',
489
+ :SC => 'Seychelles',
477
490
  :SL => 'Sierra Leone',
478
- :SM => 'San Marino',
479
- :SG => 'Senegal',
491
+ :SG => 'Singapore',
492
+ :SX => 'Sint Maarten (Dutch part)',
493
+ :SK => 'Slovakia',
494
+ :SI => 'Slovenia',
495
+ :SB => 'Solomon Islands',
480
496
  :SO => 'Somalia',
481
- :NS => 'Suriname',
482
- :TP => 'Sao Tome and Principe',
483
- :ES => 'El Salvador',
484
- :SY => 'Syria',
485
- :WZ => 'Swaziland',
486
- :TK => 'Turks and Caicos Islands',
487
- :CD => 'Chad',
488
- :FS => 'French Southern Territories',
489
- :TO => 'Togo',
497
+ :ZA => 'South Africa',
498
+ :GS => 'South Georgia and the South Sandwich Islands',
499
+ :SS => 'South Sudan',
500
+ :ES => 'Spain',
501
+ :LK => 'Sri Lanka',
502
+ :SD => 'Sudan',
503
+ :SR => 'Suriname',
504
+ :SJ => 'Svalbard and Jan Mayen',
505
+ :SZ => 'Swaziland',
506
+ :SE => 'Sweden',
507
+ :CH => 'Switzerland',
508
+ :SY => 'Syrian Arab Republic',
509
+ :TW => 'Taiwan, Province of China',
510
+ :TJ => 'Tajikistan',
511
+ :TZ => 'Tanzania, United Republic of',
490
512
  :TH => 'Thailand',
491
- :TI => 'Tajikistan',
492
- :TL => 'Tokelau',
493
- :TT => 'East Timor',
494
- :TX => 'Turkmenistan',
495
- :TS => 'Tunisia',
496
- :TN => 'Tonga',
497
- :TU => 'Turkey',
498
- :TD => 'Trinidad and Tobago',
513
+ :TL => 'Timor-Leste',
514
+ :TG => 'Togo',
515
+ :TK => 'Tokelau',
516
+ :TO => 'Tonga',
517
+ :TT => 'Trinidad and Tobago',
518
+ :TN => 'Tunisia',
519
+ :TR => 'Turkey',
520
+ :TM => 'Turkmenistan',
521
+ :TC => 'Turks and Caicos Islands',
499
522
  :TV => 'Tuvalu',
500
- :TW => 'Taiwan',
501
- :TZ => 'Tanzania',
502
- :UP => 'Ukraine',
503
523
  :UG => 'Uganda',
524
+ :UA => 'Ukraine',
525
+ :AE => 'United Arab Emirates',
526
+ :GB => 'United Kingdom',
504
527
  :US => 'United States',
528
+ :UM => 'United States Minor Outlying Islands',
505
529
  :UY => 'Uruguay',
506
530
  :UZ => 'Uzbekistan',
507
- :VT => 'Vatican',
508
- :VC => 'Saint Vincent and the Grenadines',
509
- :VE => 'Venezuela',
510
- :VI => 'British Virgin Islands',
511
- :VQ => 'U.S. Virgin Islands',
512
- :VM => 'Vietnam',
513
- :NH => 'Vanuatu',
531
+ :VU => 'Vanuatu',
532
+ :VE => 'Venezuela, Bolivarian Republic of',
533
+ :VN => 'Viet Nam',
534
+ :VG => 'Virgin Islands, British',
535
+ :VI => 'Virgin Islands, U.S.',
514
536
  :WF => 'Wallis and Futuna',
515
- :WS => 'Samoa',
516
- :YM => 'Yemen',
517
- :MF => 'Mayotte',
518
- :SF => 'South Africa',
519
- :ZA => 'Zambia',
520
- :ZI => 'Zimbabwe',
537
+ :EH => 'Western Sahara',
538
+ :YE => 'Yemen',
539
+ :ZM => 'Zambia',
540
+ :ZW => 'Zimbabwe',
521
541
  :WW => 'Worldwide'
522
542
  }
523
543
  end
@@ -548,4 +568,3 @@ module ActionView
548
568
  end
549
569
  end
550
570
  end
551
-