dm_event 4.2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +23 -0
- data/README.md +33 -0
- data/Rakefile +36 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/at/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/be/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/ch/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/de/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/es/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/fr/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/it/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/nl/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/pl/icon-64x44.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/100x38.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/200x75.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/250x94.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/28x7.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/320x120.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/42x11.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/75x28.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/icon-32x22.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/icon-32x24.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/icon-48x32.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/icon-48x34.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/icon-64x42.png +0 -0
- data/app/assets/images/dm_event/payment_logos/sofort/uk/icon-64x44.png +0 -0
- data/app/assets/javascripts/dm_event/admin.js +94 -0
- data/app/assets/stylesheets/dm_event/admin.css +152 -0
- data/app/assets/stylesheets/dm_event/application.css +65 -0
- data/app/controllers/dm_event/admin/admin_controller.rb +13 -0
- data/app/controllers/dm_event/admin/registrations_controller.rb +411 -0
- data/app/controllers/dm_event/admin/workshop_prices_controller.rb +73 -0
- data/app/controllers/dm_event/admin/workshops_controller.rb +147 -0
- data/app/controllers/dm_event/application_controller.rb +23 -0
- data/app/controllers/dm_event/payments_controller.rb +83 -0
- data/app/controllers/dm_event/registrations_controller.rb +368 -0
- data/app/datatables/registration_datatable.rb +117 -0
- data/app/helpers/dm_event/application_helper.rb +4 -0
- data/app/helpers/dm_event/registrations_helper.rb +14 -0
- data/app/helpers/dm_event/workshops_helper.rb +41 -0
- data/app/mailers/payment_reminder_mailer.rb +25 -0
- data/app/mailers/registration_notify_mailer.rb +31 -0
- data/app/models/dm_event/concerns/ability.rb +38 -0
- data/app/models/dm_event/concerns/registration_state_email.rb +80 -0
- data/app/models/dm_event/concerns/registration_state_machine.rb +218 -0
- data/app/models/dm_event/concerns/user_profile.rb +20 -0
- data/app/models/dm_event/model_decorators.rb +6 -0
- data/app/models/dm_event/permitted_params.rb +35 -0
- data/app/models/payment.rb +48 -0
- data/app/models/registration.rb +297 -0
- data/app/models/workshop.rb +247 -0
- data/app/models/workshop_price.rb +118 -0
- data/app/presenters/event_common_presenter.rb +31 -0
- data/app/presenters/registration_presenter.rb +34 -0
- data/app/presenters/workshop_presenter.rb +22 -0
- data/app/views/dm_event/admin/registrations/_form.html.erb +297 -0
- data/app/views/dm_event/admin/registrations/action_state.js.erb +1 -0
- data/app/views/dm_event/admin/registrations/edit.html.erb +1 -0
- data/app/views/dm_event/admin/registrations/index.html.erb +0 -0
- data/app/views/dm_event/admin/workshop_prices/_form.html.erb +62 -0
- data/app/views/dm_event/admin/workshop_prices/edit.html.erb +2 -0
- data/app/views/dm_event/admin/workshop_prices/index.html.erb +31 -0
- data/app/views/dm_event/admin/workshop_prices/new.html.erb +2 -0
- data/app/views/dm_event/admin/workshops/_form.html.erb +61 -0
- data/app/views/dm_event/admin/workshops/_header_menu.html.erb +21 -0
- data/app/views/dm_event/admin/workshops/_registration_stats.html.erb +58 -0
- data/app/views/dm_event/admin/workshops/additional_configuration.html.erb +47 -0
- data/app/views/dm_event/admin/workshops/edit.html.erb +2 -0
- data/app/views/dm_event/admin/workshops/edit_system_email.html.erb +75 -0
- data/app/views/dm_event/admin/workshops/financials.html.erb +179 -0
- data/app/views/dm_event/admin/workshops/index.html.erb +100 -0
- data/app/views/dm_event/admin/workshops/lost_users.html.erb +44 -0
- data/app/views/dm_event/admin/workshops/new.html.erb +2 -0
- data/app/views/dm_event/admin/workshops/show.html.erb +47 -0
- data/app/views/dm_event/admin/workshops/user_outstanding_balances.html.erb +29 -0
- data/app/views/dm_event/liquid_tags/_funding_project_status.html.erb +27 -0
- data/app/views/dm_event/payments/_registrations_paypal_standard.html.erb +23 -0
- data/app/views/dm_event/payments/_registrations_sofort.html.erb +18 -0
- data/app/views/dm_event/registrations/_section_address.html.erb +30 -0
- data/app/views/dm_event/registrations/_section_custom_fields.html.erb +7 -0
- data/app/views/dm_event/registrations/_section_prices.html.erb +33 -0
- data/app/views/dm_event/registrations/_workshop_price.html.erb +18 -0
- data/app/views/dm_event/registrations/choose_payment.html.erb +5 -0
- data/app/views/dm_event/registrations/closed.html.erb +14 -0
- data/app/views/dm_event/registrations/new.html.erb +30 -0
- data/app/views/dm_event/registrations/success.html.erb +15 -0
- data/app/views/layouts/email_templates/dm_event_email_layout.html.erb +318 -0
- data/app/views/layouts/email_templates/dm_event_email_layout.text.erb +1 -0
- data/app/views/layouts/email_templates/dm_event_payment_reminder.html.erb +22 -0
- data/app/views/layouts/email_templates/dm_event_payment_reminder.text.erb +19 -0
- data/app/views/layouts/email_templates/dm_event_registration_notify.html.erb +21 -0
- data/app/views/layouts/email_templates/dm_event_registration_notify.text.erb +13 -0
- data/config/initializers/dm_event.rb +1 -0
- data/config/initializers/liquid_init.rb +2 -0
- data/config/locales/ems.cs.yml +51 -0
- data/config/locales/ems.de.yml +51 -0
- data/config/locales/ems.en.yml +51 -0
- data/config/locales/ems.fi.yml +51 -0
- data/config/locales/ems.ja.yml +51 -0
- data/config/routes.rb +40 -0
- data/db/migrate/20130510155617_create_events.rb +98 -0
- data/db/migrate/20130516124327_add_locale_to_registration.rb +5 -0
- data/db/migrate/20130516204454_add_user_profile_to_registration.rb +11 -0
- data/db/migrate/20130518092324_add_require_address.rb +7 -0
- data/db/migrate/20130609145812_add_workshop_published.rb +5 -0
- data/db/migrate/20130624134506_add_amount_currency.rb +16 -0
- data/db/migrate/20130703131515_add_workshop_currency.rb +5 -0
- data/db/migrate/20130913083529_add_event_funding_type.rb +6 -0
- data/db/migrate/20130914105736_add_enable_payments.rb +5 -0
- data/db/migrate/20130916160033_add_sidebar_to_workshop.rb +5 -0
- data/db/migrate/20130917161700_add_show_address.rb +5 -0
- data/db/migrate/20131116180719_add_default_funding_goal.rb +8 -0
- data/db/migrate/20131127165445_add_payment_reminder.rb +5 -0
- data/db/migrate/20140122204702_add_event_image.rb +5 -0
- data/db/migrate/20140523165342_add_workshop_summary.rb +5 -0
- data/db/migrate/20140605052208_add_uuid_to_registration.rb +10 -0
- data/db/migrate/20140707152124_add_registration_comment_count.rb +5 -0
- data/db/migrate/20140708142312_add_payment_comment.rb +20 -0
- data/db/migrate/20150709125105_add_payment_reminder_history.rb +16 -0
- data/db/migrate/20160810081542_add_bcc_contact_email.rb +5 -0
- data/db/migrate/20160821150120_index_foreign_keys_in_ems_registrations.rb +9 -0
- data/db/migrate/20160821150121_index_foreign_keys_in_ems_workshop_price_translations.rb +5 -0
- data/db/migrate/20160821150122_index_foreign_keys_in_ems_workshop_prices.rb +6 -0
- data/db/migrate/20160821150123_index_foreign_keys_in_ems_workshop_translations.rb +5 -0
- data/db/migrate/20160821150124_index_foreign_keys_in_ems_workshops.rb +6 -0
- data/lib/dm_event/engine.rb +20 -0
- data/lib/dm_event/liquid/tags/funding_project_status.rb +55 -0
- data/lib/dm_event.rb +4 -0
- data/lib/tasks/dm_event_tasks.rake +4 -0
- data/spec/controllers/registrations_controller_spec.rb +152 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +15 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/models/ability.rb +10 -0
- data/spec/dummy/app/models/user.rb +6 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config/application.rb +26 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +37 -0
- data/spec/dummy/config/environments/production.rb +82 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/assets.rb +8 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +11 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20141114170927_add_globalize_countries.dm_core.rb +50 -0
- data/spec/dummy/db/migrate/20141114170928_devise_create_users.dm_core.rb +46 -0
- data/spec/dummy/db/migrate/20141114170929_add_user_fields.dm_core.rb +14 -0
- data/spec/dummy/db/migrate/20141114170930_rolify_create_roles.dm_core.rb +20 -0
- data/spec/dummy/db/migrate/20141114170931_add_last_access.dm_core.rb +10 -0
- data/spec/dummy/db/migrate/20141114170932_create_versions.dm_core.rb +19 -0
- data/spec/dummy/db/migrate/20141114170933_add_object_changes_column_to_versions.dm_core.rb +12 -0
- data/spec/dummy/db/migrate/20141114170934_create_dm_core_accounts.dm_core.rb +13 -0
- data/spec/dummy/db/migrate/20141114170935_add_account_to_users.dm_core.rb +9 -0
- data/spec/dummy/db/migrate/20141114170936_create_preferences.dm_core.rb +13 -0
- data/spec/dummy/db/migrate/20141114170937_create_comments.dm_core.rb +22 -0
- data/spec/dummy/db/migrate/20141114170938_add_activity.dm_core.rb +21 -0
- data/spec/dummy/db/migrate/20141114170939_add_type_to_comments.dm_core.rb +9 -0
- data/spec/dummy/db/migrate/20141114170940_add_category.dm_core.rb +28 -0
- data/spec/dummy/db/migrate/20141114170941_create_email_table.dm_core.rb +26 -0
- data/spec/dummy/db/migrate/20141114170942_add_user_profile.dm_core.rb +46 -0
- data/spec/dummy/db/migrate/20141114170943_add_profile_email.dm_core.rb +14 -0
- data/spec/dummy/db/migrate/20141114170944_create_payment_history.dm_core.rb +37 -0
- data/spec/dummy/db/migrate/20141114170945_change_anchor_field.dm_core.rb +10 -0
- data/spec/dummy/db/migrate/20141114170946_create_user_site_profile.dm_core.rb +27 -0
- data/spec/dummy/db/migrate/20141114170947_add_avatar.dm_core.rb +12 -0
- data/spec/dummy/db/migrate/20141114170948_add_notify_to_payment_history.dm_core.rb +8 -0
- data/spec/dummy/db/migrate/20141114170949_acts_as_votable_migration.dm_core.rb +28 -0
- data/spec/dummy/db/migrate/20141114170950_add_user_site_profile_uuid.dm_core.rb +19 -0
- data/spec/dummy/db/migrate/20141114170951_add_invoice_id.dm_core.rb +7 -0
- data/spec/dummy/db/migrate/20141114170952_acts_as_follower_migration.dm_core.rb +18 -0
- data/spec/dummy/db/migrate/20141114170953_rename_invoice_id.dm_core.rb +12 -0
- data/spec/dummy/db/migrate/20141114170954_add_core_addresses.dm_core.rb +18 -0
- data/spec/dummy/db/migrate/20141114170955_papertrail_increase_column.dm_core.rb +9 -0
- data/spec/dummy/db/migrate/20141114170956_acts_as_taggable_on_migration.dm_core.rb +32 -0
- data/spec/dummy/db/migrate/20141114170957_add_missing_unique_indices.dm_core.rb +23 -0
- data/spec/dummy/db/migrate/20141114170958_add_taggings_counter_cache_to_tags.dm_core.rb +16 -0
- data/spec/dummy/db/migrate/20141114170959_create_custom_fields.dm_core.rb +40 -0
- data/spec/dummy/db/migrate/20141114170960_add_missing_taggable_index.dm_core.rb +11 -0
- data/spec/dummy/db/migrate/20141119103740_create_cms.dm_cms.rb +92 -0
- data/spec/dummy/db/migrate/20141119103741_add_account_to_cms.dm_cms.rb +11 -0
- data/spec/dummy/db/migrate/20141119103742_create_blog.dm_cms.rb +62 -0
- data/spec/dummy/db/migrate/20141119103743_add_notification_sent.dm_cms.rb +6 -0
- data/spec/dummy/db/migrate/20141119103744_add_blog_comment.dm_cms.rb +8 -0
- data/spec/dummy/db/migrate/20141119103745_add_blog_image.dm_cms.rb +6 -0
- data/spec/dummy/db/migrate/20141119103746_rename_snippet_slug.dm_cms.rb +14 -0
- data/spec/dummy/db/migrate/20141119103747_add_requires_subscription_blog.dm_cms.rb +8 -0
- data/spec/dummy/db/migrate/20141119103748_add_pages_ranked_model.dm_cms.rb +23 -0
- data/spec/dummy/db/migrate/20141119103749_add_blog_owner.dm_cms.rb +7 -0
- data/spec/dummy/db/migrate/20141119103750_create_media_files.dm_cms.rb +30 -0
- data/spec/dummy/db/migrate/20141119103751_add_cmspage_summary.dm_cms.rb +7 -0
- data/spec/dummy/db/migrate/20141119103752_add_blog_image_email_header.dm_cms.rb +6 -0
- data/spec/dummy/db/migrate/20141119103753_add_header_image.dm_cms.rb +10 -0
- data/spec/dummy/db/migrate/20160128154135_add_favored_locale.dm_core.rb +17 -0
- data/spec/dummy/db/migrate/20160128154136_update_papertrail_v4.dm_core.rb +41 -0
- data/spec/dummy/db/schema.rb +677 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/account_factory.rb +7 -0
- data/spec/factories/registration_factory.rb +13 -0
- data/spec/factories/workshop_factory.rb +25 -0
- data/spec/factories/workshop_price_factory.rb +19 -0
- data/spec/models/registration_spec.rb +83 -0
- data/spec/models/workshop_spec.rb +26 -0
- data/spec/rails_helper.rb +70 -0
- data/spec/spec_helper.rb +85 -0
- data/spec/support/accounts.rb +17 -0
- data/spec/support/devise.rb +44 -0
- data/spec/support/fix_locale.rb +57 -0
- metadata +520 -0
@@ -0,0 +1,73 @@
|
|
1
|
+
class DmEvent::Admin::WorkshopPricesController < DmEvent::Admin::AdminController
|
2
|
+
include DmEvent::PermittedParams
|
3
|
+
|
4
|
+
before_filter :workshop_lookup, :only => [:index, :new, :create]
|
5
|
+
before_filter :price_lookup, :except => [:index, :new, :create]
|
6
|
+
|
7
|
+
#------------------------------------------------------------------------------
|
8
|
+
def index
|
9
|
+
@workshop_prices = @workshop.workshop_prices
|
10
|
+
end
|
11
|
+
|
12
|
+
#------------------------------------------------------------------------------
|
13
|
+
def new
|
14
|
+
@workshop_price = @workshop.workshop_prices.build(price_currency: @workshop.base_currency)
|
15
|
+
end
|
16
|
+
|
17
|
+
#------------------------------------------------------------------------------
|
18
|
+
def edit
|
19
|
+
end
|
20
|
+
|
21
|
+
#------------------------------------------------------------------------------
|
22
|
+
def create
|
23
|
+
attributes = WorkshopPrice.prepare_prices(workshop_price_params.merge(price_currency: @workshop.base_currency))
|
24
|
+
@workshop_price = @workshop.workshop_prices.new(attributes)
|
25
|
+
if @workshop_price.save
|
26
|
+
redirect_to admin_workshop_workshop_prices_url(@workshop), notice: 'Price was successfully created.'
|
27
|
+
else
|
28
|
+
render action: :new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#------------------------------------------------------------------------------
|
33
|
+
def update
|
34
|
+
attributes = WorkshopPrice.prepare_prices(workshop_price_params.merge(price_currency: @workshop.base_currency))
|
35
|
+
if @workshop_price.update_attributes(attributes)
|
36
|
+
redirect_to admin_workshop_workshop_prices_url(@workshop), notice: 'Price was successfully updated.'
|
37
|
+
else
|
38
|
+
render action: :edit
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
#------------------------------------------------------------------------------
|
43
|
+
def destroy
|
44
|
+
if @workshop_price.registrations.count == 0
|
45
|
+
@workshop_price.destroy
|
46
|
+
redirect_to admin_workshop_workshop_prices_url(@workshop), notice: 'Price was successfully deleted.'
|
47
|
+
else
|
48
|
+
redirect_to admin_workshop_workshop_prices_url(@workshop), error: 'Registrations are using this price - unable to delete'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
#------------------------------------------------------------------------------
|
53
|
+
def sort
|
54
|
+
@workshop_price.update_attribute(:row_order_position, params[:item][:row_order_position])
|
55
|
+
|
56
|
+
#--- this action will be called via ajax
|
57
|
+
render nothing: true
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
#------------------------------------------------------------------------------
|
63
|
+
def workshop_lookup
|
64
|
+
@workshop = Workshop.friendly.find(params[:workshop_id])
|
65
|
+
end
|
66
|
+
|
67
|
+
#------------------------------------------------------------------------------
|
68
|
+
def price_lookup
|
69
|
+
@workshop_price = WorkshopPrice.find(params[:id])
|
70
|
+
@workshop = @workshop_price.workshop
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
class DmEvent::Admin::WorkshopsController < DmEvent::Admin::AdminController
|
2
|
+
include DmEvent::PermittedParams
|
3
|
+
include DmCore::PermittedParams
|
4
|
+
include CsvExporter
|
5
|
+
|
6
|
+
before_filter :workshop_lookup, except: [:index, :new, :create, :user_outstanding_balances]
|
7
|
+
|
8
|
+
helper DmEvent::WorkshopsHelper
|
9
|
+
|
10
|
+
#------------------------------------------------------------------------------
|
11
|
+
def index
|
12
|
+
@workshops = Workshop.upcoming
|
13
|
+
@workshops_past = Workshop.past
|
14
|
+
end
|
15
|
+
|
16
|
+
#------------------------------------------------------------------------------
|
17
|
+
def new
|
18
|
+
@workshop = Workshop.new
|
19
|
+
end
|
20
|
+
|
21
|
+
#------------------------------------------------------------------------------
|
22
|
+
def edit
|
23
|
+
end
|
24
|
+
|
25
|
+
#------------------------------------------------------------------------------
|
26
|
+
def create
|
27
|
+
@workshop = Workshop.new(workshop_params)
|
28
|
+
if @workshop.save
|
29
|
+
redirect_to admin_workshop_url(@workshop), notice: 'Workshop was successfully created.'
|
30
|
+
else
|
31
|
+
render action: :new
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
#------------------------------------------------------------------------------
|
36
|
+
def update
|
37
|
+
if @workshop.update_attributes(workshop_params)
|
38
|
+
redirect_to admin_workshop_url(@workshop), notice: 'Workshop was successfully updated.'
|
39
|
+
else
|
40
|
+
render action: :edit
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
#------------------------------------------------------------------------------
|
45
|
+
def show
|
46
|
+
@registrations = @workshop.registrations
|
47
|
+
|
48
|
+
respond_to do |format|
|
49
|
+
format.html # show.html.erb
|
50
|
+
format.json { render json: RegistrationDatatable.new(view_context) }
|
51
|
+
format.xls { data_export(Registration.csv_columns(@workshop), @registrations, filename: @workshop.slug, expressions: true, format: 'xls') }
|
52
|
+
format.csv { data_export(Registration.csv_columns(@workshop), @registrations, filename: @workshop.slug, expressions: true, format: 'csv') }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
#------------------------------------------------------------------------------
|
57
|
+
def destroy
|
58
|
+
@workshop.destroy
|
59
|
+
redirect_to admin_workshops_url, notice: 'Workshop was successfully deleted.'
|
60
|
+
end
|
61
|
+
|
62
|
+
# Edit/create of the registration state emails. :email_type is passed in
|
63
|
+
# to determine which one we're editing
|
64
|
+
#------------------------------------------------------------------------------
|
65
|
+
def edit_system_email
|
66
|
+
redirect_to(admin_workshop_url(@workshop), error: 'Invalid system email type') if params[:email_type].blank?
|
67
|
+
# [todo] verify that the email_type is one of the Registration.aasm.states
|
68
|
+
|
69
|
+
@system_email = @workshop.send("#{params[:email_type]}_email") || @workshop.send("build_#{params[:email_type]}_email")
|
70
|
+
@system_email.email_type = params[:email_type]
|
71
|
+
if put_or_post?
|
72
|
+
@system_email.attributes = system_email_params
|
73
|
+
if @system_email.save
|
74
|
+
redirect_to edit_system_email_admin_workshop_path(@workshop, email_type: @system_email.email_type), notice: 'Email was successfully updated.'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
#------------------------------------------------------------------------------
|
80
|
+
def financials
|
81
|
+
@financials = @workshop.financial_details
|
82
|
+
@payments = PaymentHistory.where(owner_type: 'Registration', owner_id: @workshop.registrations.pluck(:id)).includes(:user_profile, owner: [:user_profile])
|
83
|
+
end
|
84
|
+
|
85
|
+
# Generate a list of all outstanding balances
|
86
|
+
#------------------------------------------------------------------------------
|
87
|
+
def user_outstanding_balances
|
88
|
+
@unpaid = Registration.unpaid.includes(:user_profile, :workshop_price)
|
89
|
+
@unpaid = @unpaid.to_a.delete_if {|i| i.balance_owed.zero?}.group_by {|i| i.full_name}.sort_by {|i| i[0].downcase}
|
90
|
+
end
|
91
|
+
|
92
|
+
# Handle any additional configuration, such as selecting the attached blog/forum
|
93
|
+
#------------------------------------------------------------------------------
|
94
|
+
def additional_configuration
|
95
|
+
if put_or_post?
|
96
|
+
if @workshop.valid?
|
97
|
+
new_blog_id = params[:workshop].delete(:cms_blog).to_i
|
98
|
+
if @workshop.cms_blog.try(:id) != new_blog_id
|
99
|
+
@workshop.cms_blog = new_blog_id == 0 ? nil : CmsBlog.find(new_blog_id)
|
100
|
+
end
|
101
|
+
|
102
|
+
new_forum_id = params[:workshop].delete(:forum).to_i
|
103
|
+
if @workshop.forum.try(:id) != new_forum_id
|
104
|
+
@workshop.forum = new_forum_id == 0 ? nil : Forum.find(new_forum_id)
|
105
|
+
end
|
106
|
+
|
107
|
+
#--- remove any extra "custom_field" attributes left during the field definition
|
108
|
+
if params[:workshop][:custom_field_defs_attributes]
|
109
|
+
params[:workshop][:custom_field_defs_attributes].each_key {|key| params[:workshop][:custom_field_defs_attributes][key].delete(:custom_field)}
|
110
|
+
end
|
111
|
+
|
112
|
+
@workshop.update_attributes(workshop_params)
|
113
|
+
redirect_to additional_configuration_admin_workshop_url(@workshop), notice: 'Workshop was successfully updated.'
|
114
|
+
else
|
115
|
+
render action: :additional_configuration
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
#------------------------------------------------------------------------------
|
121
|
+
def send_payment_reminder_emails
|
122
|
+
status = @workshop.send_payment_reminder_emails(params[:registration_id])
|
123
|
+
msg = "Reminder emails sent ==> Success: #{status[:success]} Failed: #{status[:failed]}"
|
124
|
+
status[:failed] > 0 ? (flash[:warning] = msg) : (flash[:notice] = msg)
|
125
|
+
redirect_to financials_admin_workshop_url(@workshop)
|
126
|
+
end
|
127
|
+
|
128
|
+
#------------------------------------------------------------------------------
|
129
|
+
def lost_users
|
130
|
+
if put_or_post?
|
131
|
+
@days_ago = params[:lost_users][:days_ago].to_i
|
132
|
+
@days_ago = 60 if @days_ago > 60
|
133
|
+
else
|
134
|
+
@days_ago = 10
|
135
|
+
end
|
136
|
+
# @lost_users = Workshop.lost_users(@days_ago)
|
137
|
+
@lost_users = @workshop.lost_users(@days_ago)
|
138
|
+
end
|
139
|
+
|
140
|
+
private
|
141
|
+
|
142
|
+
#------------------------------------------------------------------------------
|
143
|
+
def workshop_lookup
|
144
|
+
@workshop = Workshop.friendly.find(params[:id])
|
145
|
+
end
|
146
|
+
|
147
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Subclass from main ApplicationController, which will subclass from DmCore
|
2
|
+
#------------------------------------------------------------------------------
|
3
|
+
class DmEvent::ApplicationController < ::ApplicationController
|
4
|
+
include ApplicationHelper
|
5
|
+
|
6
|
+
#--- these are needed to support rendering layouts built for the CMS
|
7
|
+
helper DmCms::RenderHelper
|
8
|
+
helper DmCore::LiquidHelper
|
9
|
+
helper DmCms::PagesHelper
|
10
|
+
include DmCore::RenderHelper
|
11
|
+
|
12
|
+
#before_filter :authenticate_user!
|
13
|
+
|
14
|
+
rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
#------------------------------------------------------------------------------
|
19
|
+
def record_not_found
|
20
|
+
flash[:error] = "The event or registration you were looking for could not be found."
|
21
|
+
redirect_to event_root_path
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
ActionView::Base.send(:include, ActiveMerchant::Billing::Integrations::ActionViewHelper)
|
2
|
+
|
3
|
+
class DmEvent::PaymentsController < DmEvent::ApplicationController
|
4
|
+
include ActiveMerchant::Billing::Integrations
|
5
|
+
|
6
|
+
protect_from_forgery :except => [:paypal_ipn, :sofort_ipn]
|
7
|
+
|
8
|
+
# TODO Not fully working yet
|
9
|
+
#------------------------------------------------------------------------------
|
10
|
+
def paypal_ipn
|
11
|
+
logger.error('===> Enter: controller::paypal_ipn')
|
12
|
+
notify = Paypal::Notification.new(request.raw_post)
|
13
|
+
Payment.event_payment_ipn(notify, 'paypal')
|
14
|
+
|
15
|
+
render :nothing => true
|
16
|
+
end
|
17
|
+
|
18
|
+
# TODO Not fully working yet
|
19
|
+
#------------------------------------------------------------------------------
|
20
|
+
def sofort_ipn
|
21
|
+
logger.error('===> Enter: controller::sofort_ipn')
|
22
|
+
notify = Directebanking::Notification.new(request.raw_post, credential4: current_account.preferred_sofort_notification_password)
|
23
|
+
Payment.event_payment_ipn(notify, 'sofort')
|
24
|
+
|
25
|
+
render :nothing => true
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
=begin
|
33
|
+
include Ultracart::UltracartHelper
|
34
|
+
|
35
|
+
# This function is called by UltraCart when an item is purchased from the online
|
36
|
+
# store. The entire order is sent. Initially, we will look for the
|
37
|
+
# registration code we place in a ticket order, and mark the appropriate record
|
38
|
+
# as payed in the database. But this also sets up the possibility of keeping
|
39
|
+
# our own records purchase records and doing our own reporting.
|
40
|
+
#------------------------------------------------------------------------------
|
41
|
+
def verify_payment
|
42
|
+
#--- the specifics for order have already been parsed into the params block
|
43
|
+
receipts = EventPayment.verify_payment(current_account, params)
|
44
|
+
|
45
|
+
receipts.each do |r|
|
46
|
+
begin
|
47
|
+
email_receipt(EventRegistration.receiptcode_to_id(r[:receiptcode]), r[:cost_cents], r[:description])
|
48
|
+
rescue Exception => e
|
49
|
+
#--- if there is a problem sending the receipt, we should send place it on a queue for
|
50
|
+
#--- sending later TODO. But we need to do the render below so that Ultracart
|
51
|
+
#--- doesn't send the notification again.
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
render :nothing => true, :status => 200
|
56
|
+
end
|
57
|
+
|
58
|
+
#------------------------------------------------------------------------------
|
59
|
+
def generate_shoppingcart_link(registration)
|
60
|
+
anchor_id = PaymentHistory.generate_anchor_id(registration.receiptcode)
|
61
|
+
item_options = [{:name => 'registration_code', :value => anchor_id}]
|
62
|
+
options = {
|
63
|
+
:MerchantID => current_account.preferred(:ultracart_merchant_id),
|
64
|
+
:ThemeCode => current_account.preferred(:ultracart_theme_code),
|
65
|
+
:BillingFirstName => registration.firstname,
|
66
|
+
:BillingLastName => registration.lastname,
|
67
|
+
:BillingAddress1 => registration.address,
|
68
|
+
:BillingAddress2 => registration.address2,
|
69
|
+
:BillingCity => registration.city,
|
70
|
+
:BillingState => registration.state,
|
71
|
+
:BillingPostalCode => registration.zipcode,
|
72
|
+
:BillingCountry => registration.country.english_name,
|
73
|
+
:BillingDayPhone => registration.phone,
|
74
|
+
:Email => registration.email,
|
75
|
+
:OVERRIDECATALOGURL => current_account.preferred(:ultracart_continue_shopping_url),
|
76
|
+
:OVERRIDECONTINUESHOPPINGURL => current_account.preferred(:ultracart_continue_shopping_url),
|
77
|
+
:item_options => item_options
|
78
|
+
}
|
79
|
+
options[:ImmediateCheckout] = true if registration.event_workshop.shoppingcart_immediate_checkout
|
80
|
+
|
81
|
+
url_for_ultracart(registration.item_code, Ultracart::Config.cart_url, true, options)
|
82
|
+
end
|
83
|
+
=end
|