fat_free_crm 0.11.3 → 0.11.4
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.
- data/.gitignore +1 -0
- data/.travis.yml +2 -2
- data/CHANGELOG +6 -1
- data/CONTRIBUTORS +40 -1
- data/Capfile +5 -0
- data/Gemfile +25 -6
- data/Gemfile.lock +128 -86
- data/README.md +23 -16
- data/{vendor → app}/assets/images/delete.png +0 -0
- data/app/assets/javascripts/admin/fields.js.coffee +62 -0
- data/app/assets/javascripts/application.js.erb +8 -1
- data/app/assets/javascripts/crm.js +44 -46
- data/app/assets/javascripts/crm_chosen.js.coffee +10 -7
- data/app/assets/javascripts/datepicker.js.coffee +15 -0
- data/app/assets/javascripts/format_buttons.js.coffee +48 -0
- data/app/assets/javascripts/{admin/field_groups.js.coffee → groups.js.coffee} +0 -0
- data/app/assets/javascripts/lists.js.coffee +1 -1
- data/app/assets/javascripts/search.js.coffee +56 -38
- data/app/assets/stylesheets/admin/{field_groups.css.scss → fields.css.scss} +4 -0
- data/app/assets/stylesheets/advanced_search.css.scss +79 -0
- data/app/assets/stylesheets/application.css.erb +4 -0
- data/app/assets/stylesheets/base.scss +3 -3
- data/app/assets/stylesheets/common.scss +72 -25
- data/app/assets/stylesheets/fields.scss +14 -0
- data/app/assets/stylesheets/format_buttons.css.scss +30 -0
- data/app/assets/stylesheets/groups.css.scss +3 -0
- data/app/assets/stylesheets/header.scss +7 -6
- data/{vendor/plugins/.gitkeep → app/assets/stylesheets/index_headers.css.scss} +0 -0
- data/app/assets/stylesheets/print.css.scss +12 -3
- data/app/assets/stylesheets/rails.scss +12 -3
- data/app/controllers/admin/application_controller.rb +1 -1
- data/app/controllers/admin/field_groups_controller.rb +2 -0
- data/app/controllers/admin/fields_controller.rb +41 -17
- data/app/controllers/admin/groups_controller.rb +70 -0
- data/app/controllers/admin/tags_controller.rb +1 -0
- data/app/controllers/admin/users_controller.rb +8 -7
- data/app/controllers/application_controller.rb +34 -5
- data/app/controllers/comments_controller.rb +2 -3
- data/app/controllers/entities/accounts_controller.rb +30 -37
- data/app/controllers/entities/campaigns_controller.rb +56 -29
- data/app/controllers/entities/contacts_controller.rb +24 -26
- data/app/controllers/entities/leads_controller.rb +38 -37
- data/app/controllers/entities/opportunities_controller.rb +28 -34
- data/app/controllers/entities_controller.rb +71 -43
- data/app/controllers/home_controller.rb +29 -27
- data/app/controllers/tasks_controller.rb +18 -17
- data/app/controllers/users_controller.rb +12 -8
- data/app/helpers/accounts_helper.rb +58 -16
- data/app/helpers/addresses_helper.rb +4 -1
- data/app/helpers/admin/fields_helper.rb +3 -4
- data/app/helpers/application_helper.rb +147 -100
- data/app/helpers/campaigns_helper.rb +2 -9
- data/app/helpers/fields_helper.rb +0 -1
- data/app/helpers/groups_helper.rb +2 -0
- data/app/helpers/home_helper.rb +11 -0
- data/app/helpers/leads_helper.rb +2 -9
- data/app/helpers/opportunities_helper.rb +2 -9
- data/app/helpers/{crm_tags_helper.rb → tags_helper.rb} +9 -8
- data/app/helpers/tasks_helper.rb +5 -21
- data/app/helpers/users_helper.rb +14 -7
- data/app/helpers/versions_helper.rb +46 -0
- data/app/inputs/date_time_input.rb +8 -25
- data/app/inputs/datepair_input.rb +77 -0
- data/app/inputs/datetimepair_input.rb +37 -0
- data/app/mailers/user_mailer.rb +10 -0
- data/app/models/entities/account.rb +18 -11
- data/app/models/entities/account_contact.rb +4 -3
- data/app/models/entities/account_opportunity.rb +0 -1
- data/app/models/entities/campaign.rb +6 -7
- data/app/models/entities/contact.rb +53 -25
- data/app/models/entities/contact_opportunity.rb +0 -1
- data/app/models/entities/lead.rb +24 -13
- data/app/models/entities/opportunity.rb +34 -16
- data/app/models/fields/custom_field.rb +29 -13
- data/app/models/fields/custom_field_date_pair.rb +58 -0
- data/app/models/fields/custom_field_datetime_pair.rb +28 -0
- data/app/models/fields/custom_field_pair.rb +54 -0
- data/app/models/fields/field.rb +60 -43
- data/app/models/fields/field_group.rb +0 -9
- data/app/models/observers/entity_observer.rb +29 -0
- data/app/models/observers/opportunity_observer.rb +3 -0
- data/app/models/polymorphic/address.rb +14 -0
- data/app/models/polymorphic/avatar.rb +13 -1
- data/app/models/polymorphic/email.rb +1 -1
- data/app/models/polymorphic/task.rb +14 -13
- data/app/models/setting.rb +14 -21
- data/app/models/users/ability.rb +25 -4
- data/app/models/users/group.rb +13 -0
- data/app/models/users/permission.rb +3 -1
- data/app/models/users/preference.rb +1 -2
- data/app/models/users/user.rb +25 -3
- data/app/views/accounts/_account.html.haml +5 -39
- data/app/views/accounts/_edit.html.haml +3 -2
- data/app/views/accounts/_index_brief.html.haml +32 -0
- data/app/views/accounts/_index_long.html.haml +42 -0
- data/app/views/accounts/_new.html.haml +3 -2
- data/app/views/accounts/_sidebar_index.html.haml +3 -4
- data/app/views/accounts/_sidebar_show.html.haml +2 -2
- data/app/views/accounts/_title_bar.html.haml +11 -0
- data/app/views/accounts/_top_section.html.haml +1 -1
- data/app/views/accounts/create.js.rjs +1 -2
- data/app/views/accounts/destroy.js.rjs +1 -1
- data/app/views/accounts/edit.js.rjs +0 -2
- data/app/views/accounts/index.html.haml +6 -13
- data/app/views/accounts/index.js.rjs +3 -1
- data/app/views/accounts/index.xls.builder +82 -0
- data/app/views/accounts/new.js.rjs +0 -2
- data/app/views/accounts/show.html.haml +17 -15
- data/app/views/accounts/show.js.erb +2 -0
- data/app/views/admin/custom_fields/_base_field.html.haml +21 -0
- data/app/views/admin/custom_fields/_check_boxes_field.html.haml +6 -0
- data/app/views/admin/custom_fields/_date_field.html.haml +14 -0
- data/app/views/admin/custom_fields/_date_pair_field.html.haml +21 -0
- data/app/views/admin/custom_fields/_datetime_field.html.haml +14 -0
- data/app/views/admin/custom_fields/_datetime_pair_field.html.haml +21 -0
- data/app/views/admin/custom_fields/_radio_field.html.haml +6 -0
- data/app/views/admin/custom_fields/_select_field.html.haml +25 -0
- data/app/views/admin/custom_fields/_string_field.html.haml +2 -0
- data/app/views/admin/field_groups/_field_group.html.haml +7 -5
- data/app/views/admin/field_groups/_top_section.html.haml +4 -3
- data/app/views/admin/field_groups/create.js.rjs +1 -2
- data/app/views/admin/fields/_field.html.haml +5 -3
- data/app/views/admin/fields/_form.html.haml +35 -0
- data/app/views/admin/fields/_subform.html.haml +6 -0
- data/app/views/admin/fields/create.js.erb +19 -0
- data/app/views/admin/fields/destroy.js.erb +9 -0
- data/app/views/admin/fields/edit.js.erb +1 -0
- data/app/views/admin/fields/index.html.haml +11 -8
- data/app/views/admin/fields/update.js.erb +13 -0
- data/app/views/admin/groups/_edit.html.haml +12 -0
- data/app/views/admin/groups/_form.html.haml +13 -0
- data/app/views/admin/groups/_group.html.haml +15 -0
- data/app/views/admin/groups/_new.html.haml +12 -0
- data/app/views/admin/groups/create.js.rjs +11 -0
- data/app/views/admin/{fields → groups}/destroy.js.rjs +3 -3
- data/app/views/admin/groups/edit.js.rjs +21 -0
- data/app/views/admin/groups/index.html.haml +18 -0
- data/app/views/admin/groups/index.js.rjs +2 -0
- data/app/views/admin/groups/new.js.rjs +9 -0
- data/app/views/admin/groups/show.html.haml +11 -0
- data/app/views/admin/groups/update.js.rjs +10 -0
- data/app/views/admin/users/_profile.html.haml +13 -1
- data/app/views/admin/users/_user.html.haml +7 -2
- data/app/views/admin/users/index.js.rjs +1 -0
- data/app/views/application/index.atom.builder +1 -1
- data/app/views/application/index.rss.builder +1 -1
- data/app/views/application/show.atom.builder +32 -0
- data/app/views/application/show.rss.builder +29 -0
- data/app/views/campaigns/_campaign.html.haml +5 -21
- data/app/views/campaigns/_edit.html.haml +3 -2
- data/app/views/campaigns/_index_brief.html.haml +15 -0
- data/app/views/campaigns/_index_long.html.haml +20 -0
- data/app/views/campaigns/_new.html.haml +4 -2
- data/app/views/campaigns/_sidebar_index.html.haml +3 -3
- data/app/views/campaigns/_title_bar.html.haml +11 -0
- data/app/views/campaigns/_top_section.html.haml +2 -2
- data/app/views/campaigns/create.js.rjs +1 -4
- data/app/views/campaigns/destroy.js.rjs +1 -1
- data/app/views/campaigns/edit.js.rjs +0 -4
- data/app/views/campaigns/index.html.haml +6 -13
- data/app/views/campaigns/index.js.rjs +3 -1
- data/app/views/campaigns/index.xls.builder +75 -0
- data/app/views/campaigns/new.js.rjs +0 -4
- data/app/views/campaigns/show.html.haml +17 -15
- data/app/views/campaigns/show.js.erb +2 -0
- data/app/views/campaigns/update.js.rjs +0 -2
- data/app/views/comments/_comment.html.haml +6 -5
- data/app/views/comments/_edit.html.haml +5 -5
- data/app/views/comments/_new.html.haml +6 -5
- data/app/views/comments/create.js.rjs +1 -1
- data/app/views/contacts/_contact.html.haml +5 -52
- data/app/views/contacts/_contacts.html.haml +1 -0
- data/app/views/contacts/_edit.html.haml +3 -2
- data/app/views/contacts/_index_brief.html.haml +25 -0
- data/app/views/contacts/_index_full.html.haml +57 -0
- data/app/views/contacts/_index_long.html.haml +43 -0
- data/app/views/contacts/_new.html.haml +4 -2
- data/app/views/contacts/_section_extra.html.haml +26 -0
- data/app/views/contacts/_section_general.html.haml +22 -0
- data/app/views/contacts/_sidebar_index.html.haml +0 -3
- data/app/views/contacts/_sidebar_show.html.haml +2 -10
- data/app/views/contacts/_title_bar.html.haml +11 -0
- data/app/views/contacts/_top_section.html.haml +1 -1
- data/app/views/contacts/create.js.rjs +1 -2
- data/app/views/contacts/destroy.js.rjs +1 -1
- data/app/views/contacts/edit.js.rjs +0 -2
- data/app/views/contacts/index.html.haml +6 -14
- data/app/views/contacts/index.js.rjs +3 -1
- data/app/views/contacts/index.xls.builder +102 -0
- data/app/views/contacts/new.js.rjs +0 -2
- data/app/views/contacts/show.html.haml +15 -15
- data/app/views/contacts/show.js.erb +2 -0
- data/app/views/entities/_basic_search.html.haml +22 -0
- data/app/views/entities/_permissions.html.haml +41 -0
- data/app/views/entities/_search.html.haml +15 -0
- data/app/views/entities/_section_custom_fields.html.haml +11 -0
- data/app/views/entities/_title_bar.html.haml +12 -0
- data/app/views/entities/attach.js.rjs +1 -1
- data/app/views/entities/opportunities.js.rjs +1 -1
- data/app/views/entities/versions.js.erb +3 -0
- data/app/views/fields/_edit_custom_field_group.html.haml +8 -0
- data/app/views/fields/_group.html.haml +11 -20
- data/app/views/fields/_group_table.html.haml +13 -0
- data/app/views/fields/_group_view.html.haml +7 -0
- data/app/views/fields/_groups.html.haml +1 -4
- data/app/views/fields/_sidebar_show.html.haml +5 -4
- data/app/views/home/_account.html.haml +29 -0
- data/app/views/home/_activity.html.haml +16 -6
- data/app/views/home/_opportunity.html.haml +41 -0
- data/app/views/home/_options.html.haml +1 -1
- data/app/views/home/_task.html.haml +46 -0
- data/app/views/home/index.html.haml +32 -1
- data/app/views/home/index.js.rjs +1 -0
- data/app/views/layouts/_header.html.haml +3 -3
- data/app/views/layouts/_sidebar.html.haml +1 -3
- data/app/views/layouts/_tabbed.html.haml +2 -3
- data/app/views/layouts/_tabless.html.haml +1 -1
- data/app/views/layouts/admin/_header.html.haml +1 -1
- data/app/views/layouts/application.html.haml +7 -8
- data/app/views/layouts/header.xls.builder +8 -0
- data/app/views/leads/_contact.html.haml +1 -2
- data/app/views/leads/_convert.html.haml +1 -2
- data/app/views/leads/_convert_permissions.html.haml +21 -11
- data/app/views/leads/_edit.html.haml +3 -2
- data/app/views/leads/_index_brief.html.haml +41 -0
- data/app/views/leads/_index_long.html.haml +62 -0
- data/app/views/leads/_lead.html.haml +5 -62
- data/app/views/leads/_new.html.haml +4 -2
- data/app/views/leads/_opportunity.html.haml +1 -1
- data/app/views/leads/_sidebar_index.html.haml +3 -3
- data/app/views/leads/_sidebar_show.html.haml +3 -3
- data/app/views/leads/_status.html.haml +1 -1
- data/app/views/leads/_title_bar.html.haml +16 -0
- data/app/views/leads/convert.js.rjs +0 -1
- data/app/views/leads/create.js.rjs +1 -2
- data/app/views/leads/destroy.js.rjs +1 -1
- data/app/views/leads/edit.js.rjs +0 -2
- data/app/views/leads/index.html.haml +6 -13
- data/app/views/leads/index.js.rjs +3 -1
- data/app/views/leads/index.xls.builder +100 -0
- data/app/views/leads/new.js.rjs +0 -2
- data/app/views/leads/promote.js.rjs +0 -1
- data/app/views/leads/show.html.haml +13 -18
- data/app/views/leads/show.js.erb +2 -0
- data/app/views/{shared/_lists.html.haml → lists/_sidebar.html.haml} +0 -0
- data/app/views/lists/create.js.rjs +1 -1
- data/app/views/opportunities/_edit.html.haml +3 -2
- data/app/views/opportunities/_index_brief.html.haml +29 -0
- data/app/views/opportunities/_index_long.html.haml +59 -0
- data/app/views/opportunities/_new.html.haml +4 -2
- data/app/views/opportunities/_opportunity.html.haml +5 -57
- data/app/views/opportunities/_sidebar_index.html.haml +3 -3
- data/app/views/opportunities/_sidebar_show.html.haml +2 -2
- data/app/views/opportunities/_title_bar.html.haml +11 -0
- data/app/views/opportunities/_top_section.html.haml +2 -2
- data/app/views/opportunities/create.js.rjs +4 -6
- data/app/views/opportunities/destroy.js.rjs +1 -1
- data/app/views/opportunities/edit.js.rjs +0 -3
- data/app/views/opportunities/index.html.haml +6 -14
- data/app/views/opportunities/index.js.rjs +3 -1
- data/app/views/opportunities/index.xls.builder +69 -0
- data/app/views/opportunities/new.js.rjs +1 -5
- data/app/views/opportunities/show.html.haml +14 -14
- data/app/views/opportunities/show.js.erb +2 -0
- data/app/views/opportunities/update.js.rjs +0 -1
- data/app/views/passwords/new.html.haml +1 -1
- data/app/views/shared/_add_comment.html.haml +8 -0
- data/app/views/shared/_address.html.haml +1 -1
- data/app/views/shared/_address_show.html.haml +1 -1
- data/app/views/shared/_edit_comment.html.haml +2 -2
- data/app/views/shared/_export.html.haml +2 -1
- data/app/views/shared/_paginate_with_per_page.html.haml +14 -0
- data/app/views/shared/_recently.html.haml +1 -1
- data/app/views/shared/_search.html.haml +1 -1
- data/app/views/shared/_tags.html.haml +1 -2
- data/app/views/shared/_tasks.html.haml +2 -2
- data/app/views/tasks/_completed.html.haml +3 -3
- data/app/views/tasks/_new.html.haml +1 -1
- data/app/views/tasks/_pending.html.haml +2 -3
- data/app/views/tasks/_sidebar_index.html.haml +2 -2
- data/app/views/tasks/_top_section.html.haml +5 -3
- data/app/views/tasks/create.js.rjs +3 -4
- data/app/views/tasks/edit.js.rjs +2 -4
- data/app/views/tasks/index.html.haml +1 -1
- data/app/views/tasks/index.xls.builder +47 -0
- data/app/views/tasks/new.js.rjs +0 -2
- data/app/views/tasks/update.js.rjs +0 -1
- data/app/views/user_mailer/assigned_entity_notification.html.haml +3 -0
- data/app/views/users/_user.html.haml +2 -2
- data/app/views/users/_user_report.html.haml +6 -0
- data/app/views/users/opportunities_overview.html.haml +16 -0
- data/app/views/users/show.html.haml +2 -3
- data/app/views/users/update.js.rjs +1 -1
- data/app/views/versions/_version.html.haml +4 -19
- data/app/views/versions/_version_item.html.haml +8 -0
- data/app/views/versions/_versions.html.haml +9 -9
- data/config/application.rb +10 -2
- data/config/deploy.example.rb +47 -0
- data/config/environments/development.rb +1 -0
- data/config/environments/production.rb +1 -3
- data/config/environments/staging.rb +1 -1
- data/config/initializers/action_mailer.rb +10 -8
- data/config/initializers/custom_fields.rb +21 -0
- data/config/initializers/gravatar.rb +7 -0
- data/config/initializers/paper_trail.rb +1 -0
- data/config/initializers/ransack.rb +15 -0
- data/config/initializers/simple_form.rb +1 -2
- data/config/initializers/views.rb +42 -0
- data/config/locales/cz_fat_free_crm.yml +0 -10
- data/config/locales/de_fat_free_crm.yml +23 -21
- data/config/locales/en-GB_fat_free_crm.yml +241 -25
- data/config/locales/en-US_fat_free_crm.yml +139 -57
- data/config/locales/en-US_ransack.yml +92 -0
- data/config/locales/es_fat_free_crm.yml +0 -6
- data/config/locales/fr-CA_fat_free_crm.yml +0 -6
- data/config/locales/fr_fat_free_crm.yml +3 -14
- data/config/locales/it_fat_free_crm.yml +0 -11
- data/config/locales/ja_fat_free_crm.yml +0 -10
- data/config/locales/pl_fat_free_crm.yml +0 -6
- data/config/locales/pt-BR_fat_free_crm.yml +0 -6
- data/config/locales/ru_fat_free_crm.yml +0 -9
- data/config/locales/sv-SE_fat_free_crm.yml +0 -10
- data/config/locales/th_fat_free_crm.yml +0 -6
- data/config/locales/zh-CN.yml +4 -0
- data/config/locales/zh-CN_fat_free_crm.yml +78 -47
- data/config/routes.rb +13 -0
- data/config/settings.default.yml +20 -20
- data/db/demo/addresses.yml +2 -2
- data/db/migrate/20100928030598_create_sessions.rb +5 -0
- data/db/migrate/20100928030627_acts_as_taggable_on_migration.rb +6 -6
- data/db/migrate/20111201030535_add_field_groups_klass_name.rb +2 -1
- data/db/migrate/20120406082136_create_groups.rb +19 -0
- data/db/migrate/20120510025219_add_not_null_constraints_for_timestamp_columns.rb +21 -0
- data/db/migrate/20120528102124_increase_length_of_version_events.rb +9 -0
- data/db/migrate/20120801032706_add_pair_id_to_fields.rb +5 -0
- data/db/migrate/20121003063155_add_settings_to_custom_fields.rb +5 -0
- data/db/migrate/20121221033947_fix_country_mapping.rb +32 -0
- data/db/schema.rb +25 -6
- data/fat_free_crm.gemspec +16 -13
- data/lib/fat_free_crm.rb +2 -0
- data/lib/fat_free_crm/comment_extensions.rb +23 -0
- data/lib/fat_free_crm/core_ext/array.rb +8 -2
- data/lib/fat_free_crm/fields.rb +24 -2
- data/lib/fat_free_crm/gem_dependencies.rb +7 -1
- data/lib/fat_free_crm/permissions.rb +47 -26
- data/lib/fat_free_crm/version.rb +1 -1
- data/lib/fat_free_crm/view_factory.rb +95 -0
- data/lib/plugins/country_select/lib/country_select.rb +393 -374
- data/lib/tasks/{plugins.rake → db/migrate.rake} +1 -1
- data/lib/tasks/{schema_upgrade.rake → db/schema.rake} +2 -1
- data/lib/tasks/{mail_processing.rake → ffcrm/comment_replies.rake} +2 -21
- data/lib/tasks/ffcrm/config.rake +33 -0
- data/lib/tasks/{demo.rake → ffcrm/demo.rake} +3 -2
- data/lib/tasks/ffcrm/dropbox.rake +42 -0
- data/lib/tasks/ffcrm/settings.rake +46 -0
- data/lib/tasks/{fat_free_crm.rake → ffcrm/setup.rake} +1 -39
- data/lib/tasks/ffcrm/update_data.rake +256 -0
- data/{acceptance → spec/acceptance}/acceptance_helper.rb +5 -4
- data/{acceptance → spec/acceptance}/accounts_spec.rb +36 -10
- data/spec/acceptance/admin/groups_spec.rb +26 -0
- data/spec/acceptance/admin/users_spec.rb +34 -0
- data/spec/acceptance/campaigns_spec.rb +101 -0
- data/spec/acceptance/contacts_spec.rb +101 -0
- data/spec/acceptance/dashboard_spec.rb +62 -0
- data/spec/acceptance/leads_spec.rb +109 -0
- data/spec/acceptance/opportunities_overview_spec.rb +82 -0
- data/spec/acceptance/opportunities_spec.rb +103 -0
- data/{acceptance → spec/acceptance}/support/browser.rb +0 -0
- data/{acceptance → spec/acceptance}/support/headless.rb +0 -0
- data/{acceptance → spec/acceptance}/support/helpers.rb +8 -1
- data/{acceptance → spec/acceptance}/support/maintain_sessions.rb +0 -0
- data/spec/acceptance/support/paths.rb +42 -0
- data/spec/acceptance/support/selector_helpers.rb +31 -0
- data/spec/acceptance/tasks_spec.rb +85 -0
- data/spec/controllers/admin/groups_controller_spec.rb +5 -0
- data/spec/controllers/admin/users_controller_spec.rb +2 -3
- data/spec/controllers/applications_controller_spec.rb +40 -0
- data/spec/controllers/comments_controller_spec.rb +5 -6
- data/spec/controllers/emails_controller_spec.rb +1 -2
- data/spec/controllers/entities/accounts_controller_spec.rb +65 -81
- data/spec/controllers/entities/campaigns_controller_spec.rb +69 -85
- data/spec/controllers/entities/contacts_controller_spec.rb +78 -95
- data/spec/controllers/entities/leads_controller_spec.rb +105 -127
- data/spec/controllers/entities/opportunities_controller_spec.rb +88 -103
- data/spec/controllers/entities_controller_spec.rb +39 -0
- data/spec/controllers/home_controller_spec.rb +101 -11
- data/spec/controllers/tasks_controller_spec.rb +27 -32
- data/spec/controllers/users_controller_spec.rb +95 -28
- data/spec/factories/account_factories.rb +2 -2
- data/spec/factories/opportunity_factories.rb +12 -4
- data/spec/factories/task_factories.rb +4 -0
- data/spec/factories/user_factories.rb +9 -2
- data/spec/helpers/application_helper_spec.rb +15 -1
- data/spec/helpers/groups_helper_spec.rb +15 -0
- data/spec/helpers/users_helper_spec.rb +26 -4
- data/spec/lib/comment_extensions_spec.rb +29 -0
- data/spec/lib/core_ext/{string.rb → string_spec.rb} +0 -1
- data/spec/lib/fields_spec.rb +104 -0
- data/spec/lib/permissions_spec.rb +144 -0
- data/spec/lib/view_factory_spec.rb +68 -0
- data/spec/mailers/subscription_mailer_spec.rb +18 -4
- data/spec/mailers/user_mailer_spec.rb +134 -0
- data/spec/models/entities/account_spec.rb +44 -4
- data/spec/models/entities/campaign_spec.rb +3 -4
- data/spec/models/entities/contact_spec.rb +45 -5
- data/spec/models/entities/lead_spec.rb +3 -4
- data/spec/models/entities/opportunity_spec.rb +105 -9
- data/spec/models/fields/custom_field_date_pair_spec.rb +106 -0
- data/spec/models/fields/custom_field_pair_spec.rb +94 -0
- data/spec/models/fields/custom_field_spec.rb +43 -23
- data/spec/models/fields/field_spec.rb +3 -5
- data/spec/models/observers/entity_observer_spec.rb +65 -0
- data/spec/models/polymorphic/task_spec.rb +74 -118
- data/spec/models/polymorphic/version_spec.rb +18 -18
- data/spec/models/users/group_spec.rb +5 -0
- data/spec/models/users/permission_spec.rb +18 -1
- data/spec/models/users/preference_spec.rb +5 -1
- data/spec/models/users/user_spec.rb +55 -8
- data/spec/shared/models.rb +54 -0
- data/spec/spec_helper.rb +82 -87
- data/spec/support/auth_macros.rb +2 -3
- data/spec/views/accounts/_edit.haml_spec.rb +1 -2
- data/spec/views/accounts/_new.haml_spec.rb +1 -2
- data/spec/views/accounts/create.rjs_spec.rb +1 -3
- data/spec/views/accounts/edit.rjs_spec.rb +3 -4
- data/spec/views/accounts/index.haml_spec.rb +9 -6
- data/spec/views/accounts/new.rjs_spec.rb +2 -9
- data/spec/views/accounts/show.haml_spec.rb +1 -2
- data/spec/views/accounts/update.rjs_spec.rb +2 -3
- data/spec/views/admin/users/_create.haml_spec.rb +1 -2
- data/spec/views/admin/users/create.rjs_spec.rb +1 -2
- data/spec/views/campaigns/_edit.haml_spec.rb +2 -3
- data/spec/views/campaigns/_new.haml_spec.rb +2 -3
- data/spec/views/campaigns/create.rjs_spec.rb +0 -3
- data/spec/views/campaigns/destroy.rjs_spec.rb +1 -2
- data/spec/views/campaigns/edit.rjs_spec.rb +3 -6
- data/spec/views/campaigns/index.haml_spec.rb +6 -3
- data/spec/views/campaigns/new.rjs_spec.rb +2 -13
- data/spec/views/campaigns/show.haml_spec.rb +4 -6
- data/spec/views/campaigns/update.rjs_spec.rb +2 -7
- data/spec/views/contacts/_edit.haml_spec.rb +6 -7
- data/spec/views/contacts/_new.haml_spec.rb +2 -3
- data/spec/views/contacts/create.rjs_spec.rb +1 -3
- data/spec/views/contacts/edit.rjs_spec.rb +3 -4
- data/spec/views/contacts/index.haml_spec.rb +6 -3
- data/spec/views/contacts/new.rjs_spec.rb +2 -11
- data/spec/views/contacts/show.haml_spec.rb +1 -2
- data/spec/views/contacts/update.rjs_spec.rb +2 -3
- data/spec/views/home/index.haml_spec.rb +6 -2
- data/spec/views/home/index.rjs_spec.rb +1 -2
- data/spec/views/home/options.rjs_spec.rb +1 -2
- data/spec/views/leads/_convert.haml_spec.rb +1 -2
- data/spec/views/leads/_edit.haml_spec.rb +2 -3
- data/spec/views/leads/_new.haml_spec.rb +2 -3
- data/spec/views/leads/_sidebar_show.haml_spec.rb +1 -2
- data/spec/views/leads/convert.rjs_spec.rb +3 -5
- data/spec/views/leads/edit.rjs_spec.rb +4 -5
- data/spec/views/leads/index.haml_spec.rb +6 -3
- data/spec/views/leads/new.rjs_spec.rb +2 -11
- data/spec/views/leads/promote.rjs_spec.rb +3 -5
- data/spec/views/leads/show.haml_spec.rb +1 -2
- data/spec/views/leads/update.rjs_spec.rb +2 -3
- data/spec/views/opportunities/_edit.haml_spec.rb +5 -6
- data/spec/views/opportunities/_new.haml_spec.rb +2 -4
- data/spec/views/opportunities/create.rjs_spec.rb +0 -2
- data/spec/views/opportunities/edit.rjs_spec.rb +3 -4
- data/spec/views/opportunities/index.haml_spec.rb +7 -4
- data/spec/views/opportunities/new.rjs_spec.rb +2 -12
- data/spec/views/opportunities/show.haml_spec.rb +1 -2
- data/spec/views/opportunities/update.rjs_spec.rb +2 -3
- data/spec/views/tasks/_edit.haml_spec.rb +1 -3
- data/spec/views/tasks/complete.rjs_spec.rb +2 -3
- data/spec/views/tasks/create.rjs_spec.rb +2 -2
- data/spec/views/tasks/edit.rjs_spec.rb +1 -2
- data/spec/views/tasks/new.rjs_spec.rb +1 -18
- data/spec/views/users/avatar.rjs_spec.rb +1 -2
- data/spec/views/users/change_password.rjs_spec.rb +1 -2
- data/spec/views/users/edit.rjs_spec.rb +1 -2
- data/spec/views/users/password.rjs_spec.rb +1 -1
- data/spec/views/users/update.rjs_spec.rb +1 -2
- data/spec/views/users/upload_avatar.rjs_spec.rb +6 -7
- data/vendor/assets/images/brief.png +0 -0
- data/vendor/assets/images/chosen-sprite.png +0 -0
- data/vendor/assets/images/full.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_0_eeeeee_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_100_ffffff_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_25_3875d7_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_55_ffffff_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_65_3875d7_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
- data/vendor/assets/images/jquery-ui/{ui-icons_ef8c08_256x240.png → ui-icons_0073ea_256x240.png} +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_466bb1_256x240.png +0 -0
- data/vendor/assets/images/jquery-ui/{ui-icons_ffd27a_256x240.png → ui-icons_ff0084_256x240.png} +0 -0
- data/vendor/assets/images/long.png +0 -0
- data/vendor/assets/javascripts/chosen-jquery.js +3 -0
- data/vendor/assets/javascripts/chosen-prototype.js +3 -0
- data/vendor/assets/javascripts/chosen.jquery.coffee +574 -0
- data/vendor/assets/javascripts/chosen.proto.coffee +580 -0
- data/vendor/assets/javascripts/jquery.disable.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-addon.js +1882 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-af.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ca.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-cz.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-de.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-el.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-es.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-et.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fi.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fr-CA.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-fr.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-gl.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-he.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-hu.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-id.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-it.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ja.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ko.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-lt.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-nl.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-no.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-pl.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-pt.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ro.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-ru.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-sk.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-sv.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-tr.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-vi.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-zh-CN.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery-ui-timepicker-zh-TW.js +20 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-cz.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-de.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-en-GB.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-es.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-fr.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-it.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-ja.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-pl.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-pt-BR.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-ru.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-sv-SE.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-th.js +23 -0
- data/vendor/assets/javascripts/jquery_ui_datepicker/jquery.ui.datepicker-zh-CN.js +23 -0
- data/vendor/assets/javascripts/lib/abstract-chosen.coffee +110 -0
- data/vendor/assets/javascripts/lib/select-parser.coffee +51 -0
- data/vendor/assets/stylesheets/chosen.css.sass +361 -0
- data/vendor/assets/stylesheets/{jquery-ui.custom.css.erb → jquery-ui.custom.css} +70 -70
- data/zeus.json +21 -0
- metadata +304 -140
- data/acceptance/support/database_cleaner.rb +0 -16
- data/acceptance/support/paths.rb +0 -9
- data/app/views/accounts/_options.html.haml +0 -20
- data/app/views/accounts/_permissions.html.haml +0 -24
- data/app/views/accounts/options.js.rjs +0 -10
- data/app/views/admin/fields/_edit.html.haml +0 -9
- data/app/views/admin/fields/_new.html.haml +0 -10
- data/app/views/admin/fields/_options.html.haml +0 -12
- data/app/views/admin/fields/_top_section.html.haml +0 -54
- data/app/views/admin/fields/create.js.rjs +0 -16
- data/app/views/admin/fields/edit.js.rjs +0 -35
- data/app/views/admin/fields/index.js.rjs +0 -6
- data/app/views/admin/fields/new.js.rjs +0 -8
- data/app/views/admin/fields/options.js.rjs +0 -10
- data/app/views/admin/fields/update.js.rjs +0 -17
- data/app/views/campaigns/_options.html.haml +0 -20
- data/app/views/campaigns/_permissions.html.haml +0 -24
- data/app/views/campaigns/options.js.rjs +0 -10
- data/app/views/contacts/_options.html.haml +0 -21
- data/app/views/contacts/_permissions.html.haml +0 -24
- data/app/views/contacts/options.js.rjs +0 -10
- data/app/views/entities/_advanced_search.html.haml +0 -12
- data/app/views/entities/_condition_fields.html.haml +0 -14
- data/app/views/entities/_grouping_fields.html.haml +0 -12
- data/app/views/entities/advanced_search.js.rjs +0 -9
- data/app/views/entities/versions.js.rjs +0 -3
- data/app/views/leads/_options.html.haml +0 -21
- data/app/views/leads/_permissions.html.haml +0 -28
- data/app/views/leads/options.js.rjs +0 -10
- data/app/views/opportunities/_options.html.haml +0 -20
- data/app/views/opportunities/_permissions.html.haml +0 -24
- data/app/views/opportunities/options.js.rjs +0 -10
- data/app/views/shared/_outline.html.haml +0 -9
- data/app/views/shared/_per_page.html.haml +0 -10
- data/app/views/shared/_sort_by.html.haml +0 -10
- data/config/initializers/cancan.rb +0 -151
- data/config/initializers/squeel.rb +0 -5
- data/public/blank_iframe.html +0 -2
- data/spec/views/accounts/options.rjs_spec.rb +0 -59
- data/spec/views/campaigns/options.rjs_spec.rb +0 -60
- data/spec/views/contacts/options.rjs_spec.rb +0 -61
- data/spec/views/leads/options.rjs_spec.rb +0 -61
- data/spec/views/opportunities/options.rjs_spec.rb +0 -60
- data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
- data/vendor/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
- data/vendor/assets/javascripts/calendar_date_select/calendar_date_select.js +0 -446
- data/vendor/assets/javascripts/calendar_date_select/format_american.js +0 -35
- data/vendor/assets/javascripts/calendar_date_select/format_danish.js +0 -31
- data/vendor/assets/javascripts/calendar_date_select/format_db.js +0 -27
- data/vendor/assets/javascripts/calendar_date_select/format_euro_24hr.js +0 -7
- data/vendor/assets/javascripts/calendar_date_select/format_euro_24hr_ymd.js +0 -7
- data/vendor/assets/javascripts/calendar_date_select/format_finnish.js +0 -32
- data/vendor/assets/javascripts/calendar_date_select/format_french.js +0 -24
- data/vendor/assets/javascripts/calendar_date_select/format_hyphen_ampm.js +0 -37
- data/vendor/assets/javascripts/calendar_date_select/format_iso_date.js +0 -29
- data/vendor/assets/javascripts/calendar_date_select/format_italian.js +0 -24
- data/vendor/assets/javascripts/calendar_date_select/locale/ar.js +0 -10
- data/vendor/assets/javascripts/calendar_date_select/locale/da.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/de.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/es.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/fi.js +0 -10
- data/vendor/assets/javascripts/calendar_date_select/locale/fr.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/it.js +0 -9
- data/vendor/assets/javascripts/calendar_date_select/locale/ja.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/nl.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/pl.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/pt.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/ru.js +0 -10
- data/vendor/assets/javascripts/calendar_date_select/locale/sl.js +0 -11
- data/vendor/assets/javascripts/calendar_date_select/locale/sv.js +0 -9
- data/vendor/assets/stylesheets/calendar_date_select/blue.css +0 -130
- data/vendor/assets/stylesheets/calendar_date_select/default.css +0 -135
- data/vendor/assets/stylesheets/calendar_date_select/green.css +0 -142
- data/vendor/assets/stylesheets/calendar_date_select/plain.css +0 -128
- data/vendor/assets/stylesheets/calendar_date_select/red.css +0 -135
- data/vendor/assets/stylesheets/calendar_date_select/silver.css +0 -133
- 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 '
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
81
|
-
|
82
|
-
|
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
|
-
|
data/lib/fat_free_crm/version.rb
CHANGED
@@ -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
|
-
|
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
|
-
['
|
34
|
-
['Anguilla', 'AV'],
|
39
|
+
['Aland Islands', 'AX'],
|
35
40
|
['Albania', 'AL'],
|
36
|
-
['
|
37
|
-
['
|
41
|
+
['Algeria', 'DZ'],
|
42
|
+
['American Samoa', 'AS'],
|
43
|
+
['Andorra', 'AD'],
|
38
44
|
['Angola', 'AO'],
|
39
|
-
['
|
45
|
+
['Anguilla', 'AI'],
|
46
|
+
['Antarctica', 'AQ'],
|
47
|
+
['Antigua and Barbuda', 'AG'],
|
40
48
|
['Argentina', 'AR'],
|
41
|
-
['
|
42
|
-
['
|
43
|
-
['Australia', '
|
44
|
-
['
|
45
|
-
['
|
46
|
-
['
|
47
|
-
['
|
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
|
-
['
|
58
|
+
['Belarus', 'BY'],
|
50
59
|
['Belgium', 'BE'],
|
51
|
-
['
|
52
|
-
['
|
53
|
-
['
|
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
|
-
['
|
64
|
-
['
|
65
|
-
['
|
66
|
-
['
|
67
|
-
['
|
68
|
-
['
|
69
|
-
['
|
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
|
-
['
|
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
|
-
['
|
79
|
-
['
|
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
|
-
['
|
82
|
-
['Christmas Island', 'KT'],
|
95
|
+
['Curacao', 'CW'],
|
83
96
|
['Cyprus', 'CY'],
|
84
|
-
['Czech Republic', '
|
85
|
-
['
|
97
|
+
['Czech Republic', 'CZ'],
|
98
|
+
['Denmark', 'DK'],
|
86
99
|
['Djibouti', 'DJ'],
|
87
|
-
['
|
88
|
-
['
|
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
|
-
['
|
104
|
+
['El Salvador', 'SV'],
|
105
|
+
['Equatorial Guinea', 'GQ'],
|
95
106
|
['Eritrea', 'ER'],
|
96
|
-
['
|
107
|
+
['Estonia', 'EE'],
|
97
108
|
['Ethiopia', 'ET'],
|
98
|
-
['
|
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
|
-
['
|
105
|
-
['
|
106
|
-
['
|
107
|
-
['
|
108
|
-
['
|
109
|
-
['
|
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
|
-
['
|
114
|
-
['Guinea', 'GV'],
|
125
|
+
['Grenada', 'GD'],
|
115
126
|
['Guadeloupe', 'GP'],
|
116
|
-
['
|
117
|
-
['Greece', 'GR'],
|
118
|
-
['South Georgia and the South Sandwich Islands', 'SX'],
|
127
|
+
['Guam', 'GU'],
|
119
128
|
['Guatemala', 'GT'],
|
120
|
-
['
|
121
|
-
['Guinea
|
129
|
+
['Guernsey', 'GG'],
|
130
|
+
['Guinea', 'GN'],
|
131
|
+
['Guinea-Bissau', 'GW'],
|
122
132
|
['Guyana', 'GY'],
|
123
|
-
['
|
133
|
+
['Haiti', 'HT'],
|
124
134
|
['Heard Island and McDonald Islands', 'HM'],
|
125
|
-
['
|
126
|
-
['
|
127
|
-
['
|
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
|
-
['
|
131
|
-
['
|
142
|
+
['Iran, Islamic Republic of', 'IR'],
|
143
|
+
['Iraq', 'IQ'],
|
144
|
+
['Ireland', 'IE'],
|
132
145
|
['Isle of Man', 'IM'],
|
133
|
-
['
|
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
|
-
['
|
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
|
-
['
|
146
|
-
['
|
147
|
-
['
|
148
|
-
['
|
149
|
-
['
|
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
|
-
['
|
166
|
-
['
|
167
|
-
['
|
168
|
-
['
|
169
|
-
['
|
170
|
-
['
|
171
|
-
['
|
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
|
-
['
|
182
|
-
['
|
183
|
-
['
|
177
|
+
['Marshall Islands', 'MH'],
|
178
|
+
['Martinique', 'MQ'],
|
179
|
+
['Mauritania', 'MR'],
|
180
|
+
['Mauritius', 'MU'],
|
181
|
+
['Mayotte', 'YT'],
|
184
182
|
['Mexico', 'MX'],
|
185
|
-
['
|
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
|
-
['
|
191
|
+
['Myanmar', 'MM'],
|
192
|
+
['Namibia', 'NA'],
|
193
|
+
['Nauru', 'NR'],
|
194
|
+
['Nepal', 'NP'],
|
195
|
+
['Netherlands', 'NL'],
|
188
196
|
['New Caledonia', 'NC'],
|
189
|
-
['
|
197
|
+
['New Zealand', 'NZ'],
|
198
|
+
['Nicaragua', 'NI'],
|
199
|
+
['Niger', 'NE'],
|
200
|
+
['Nigeria', 'NG'],
|
201
|
+
['Niue', 'NU'],
|
190
202
|
['Norfolk Island', 'NF'],
|
191
|
-
['
|
192
|
-
['Nicaragua', 'NU'],
|
193
|
-
['Netherlands', 'NL'],
|
203
|
+
['Northern Mariana Islands', 'MP'],
|
194
204
|
['Norway', 'NO'],
|
195
|
-
['
|
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
|
-
['
|
208
|
-
['
|
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
|
-
['
|
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
|
-
['
|
222
|
-
['
|
223
|
-
['
|
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
|
-
['
|
232
|
-
['
|
238
|
+
['Singapore', 'SG'],
|
239
|
+
['Sint Maarten (Dutch part)', 'SX'],
|
240
|
+
['Slovakia', 'SK'],
|
241
|
+
['Slovenia', 'SI'],
|
242
|
+
['Solomon Islands', 'SB'],
|
233
243
|
['Somalia', 'SO'],
|
234
|
-
['
|
235
|
-
['
|
236
|
-
['
|
237
|
-
['
|
238
|
-
['
|
239
|
-
['
|
240
|
-
['
|
241
|
-
['
|
242
|
-
['
|
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
|
-
['
|
245
|
-
['
|
246
|
-
['
|
247
|
-
['
|
248
|
-
['
|
249
|
-
['
|
250
|
-
['Turkey', '
|
251
|
-
['
|
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
|
-
['
|
261
|
-
['
|
262
|
-
['
|
263
|
-
['
|
264
|
-
['U.S.
|
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
|
-
['
|
269
|
-
['Yemen', '
|
270
|
-
['
|
271
|
-
['
|
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
|
-
:
|
281
|
-
:AV => 'Anguilla',
|
292
|
+
:AX => 'Aland Islands',
|
282
293
|
:AL => 'Albania',
|
283
|
-
:
|
284
|
-
:
|
294
|
+
:DZ => 'Algeria',
|
295
|
+
:AS => 'American Samoa',
|
296
|
+
:AD => 'Andorra',
|
285
297
|
:AO => 'Angola',
|
286
|
-
:
|
298
|
+
:AI => 'Anguilla',
|
299
|
+
:AQ => 'Antarctica',
|
300
|
+
:AG => 'Antigua and Barbuda',
|
287
301
|
:AR => 'Argentina',
|
288
|
-
:
|
289
|
-
:
|
290
|
-
:
|
291
|
-
:
|
292
|
-
:
|
293
|
-
:
|
294
|
-
:
|
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
|
-
:
|
311
|
+
:BY => 'Belarus',
|
297
312
|
:BE => 'Belgium',
|
298
|
-
:
|
299
|
-
:
|
300
|
-
:
|
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
|
-
:
|
311
|
-
:
|
312
|
-
:
|
313
|
-
:
|
314
|
-
:
|
315
|
-
:
|
316
|
-
:
|
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
|
-
:
|
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
|
-
:
|
326
|
-
:
|
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
|
-
:
|
329
|
-
:KT => 'Christmas Island',
|
348
|
+
:CW => 'Curacao',
|
330
349
|
:CY => 'Cyprus',
|
331
|
-
:
|
332
|
-
:
|
350
|
+
:CZ => 'Czech Republic',
|
351
|
+
:DK => 'Denmark',
|
333
352
|
:DJ => 'Djibouti',
|
334
|
-
:
|
335
|
-
:DO => '
|
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
|
-
:
|
357
|
+
:SV => 'El Salvador',
|
358
|
+
:GQ => 'Equatorial Guinea',
|
342
359
|
:ER => 'Eritrea',
|
343
|
-
:
|
360
|
+
:EE => 'Estonia',
|
344
361
|
:ET => 'Ethiopia',
|
345
|
-
:
|
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
|
-
:
|
352
|
-
:
|
353
|
-
:
|
354
|
-
:
|
355
|
-
:
|
356
|
-
:
|
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
|
-
:
|
361
|
-
:GV => 'Guinea',
|
378
|
+
:GD => 'Grenada',
|
362
379
|
:GP => 'Guadeloupe',
|
363
|
-
:
|
364
|
-
:GR => 'Greece',
|
365
|
-
:SX => 'South Georgia and the South Sandwich Islands',
|
380
|
+
:GU => 'Guam',
|
366
381
|
:GT => 'Guatemala',
|
367
|
-
:
|
368
|
-
:
|
382
|
+
:GG => 'Guernsey',
|
383
|
+
:GN => 'Guinea',
|
384
|
+
:GW => 'Guinea-Bissau',
|
369
385
|
:GY => 'Guyana',
|
370
|
-
:
|
386
|
+
:HT => 'Haiti',
|
371
387
|
:HM => 'Heard Island and McDonald Islands',
|
372
|
-
:
|
373
|
-
:
|
374
|
-
:
|
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
|
-
:
|
378
|
-
:
|
395
|
+
:IR => 'Iran, Islamic Republic of',
|
396
|
+
:IQ => 'Iraq',
|
397
|
+
:IE => 'Ireland',
|
379
398
|
:IM => 'Isle of Man',
|
380
|
-
:
|
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
|
-
:
|
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
|
-
:
|
393
|
-
:
|
394
|
-
:
|
395
|
-
:
|
396
|
-
:
|
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
|
-
:
|
413
|
-
:
|
414
|
-
:
|
415
|
-
:
|
416
|
-
:
|
417
|
-
:
|
418
|
-
:
|
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
|
-
:
|
429
|
-
:
|
430
|
-
:
|
430
|
+
:MH => 'Marshall Islands',
|
431
|
+
:MQ => 'Martinique',
|
432
|
+
:MR => 'Mauritania',
|
433
|
+
:MU => 'Mauritius',
|
434
|
+
:YT => 'Mayotte',
|
431
435
|
:MX => 'Mexico',
|
432
|
-
:
|
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
|
-
:
|
444
|
+
:MM => 'Myanmar',
|
445
|
+
:NA => 'Namibia',
|
446
|
+
:NR => 'Nauru',
|
447
|
+
:NP => 'Nepal',
|
448
|
+
:NL => 'Netherlands',
|
435
449
|
:NC => 'New Caledonia',
|
436
|
-
:
|
450
|
+
:NZ => 'New Zealand',
|
451
|
+
:NI => 'Nicaragua',
|
452
|
+
:NE => 'Niger',
|
453
|
+
:NG => 'Nigeria',
|
454
|
+
:NU => 'Niue',
|
437
455
|
:NF => 'Norfolk Island',
|
438
|
-
:
|
439
|
-
:NU => 'Nicaragua',
|
440
|
-
:NL => 'Netherlands',
|
456
|
+
:MP => 'Northern Mariana Islands',
|
441
457
|
:NO => 'Norway',
|
442
|
-
:
|
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
|
-
:
|
455
|
-
:
|
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
|
-
:
|
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
|
-
:
|
469
|
-
:
|
470
|
-
:
|
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
|
-
:
|
479
|
-
:
|
491
|
+
:SG => 'Singapore',
|
492
|
+
:SX => 'Sint Maarten (Dutch part)',
|
493
|
+
:SK => 'Slovakia',
|
494
|
+
:SI => 'Slovenia',
|
495
|
+
:SB => 'Solomon Islands',
|
480
496
|
:SO => 'Somalia',
|
481
|
-
:
|
482
|
-
:
|
483
|
-
:
|
484
|
-
:
|
485
|
-
:
|
486
|
-
:
|
487
|
-
:
|
488
|
-
:
|
489
|
-
:
|
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
|
-
:
|
492
|
-
:
|
493
|
-
:
|
494
|
-
:
|
495
|
-
:
|
496
|
-
:TN => '
|
497
|
-
:
|
498
|
-
:
|
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
|
-
:
|
508
|
-
:
|
509
|
-
:
|
510
|
-
:
|
511
|
-
:
|
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
|
-
:
|
516
|
-
:
|
517
|
-
:
|
518
|
-
:
|
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
|
-
|