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.
- 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
|
-
|