Merge branch 'master' into mass_commercials
This commit is contained in:
commit
cccc28dab7
167 changed files with 1422 additions and 452 deletions
|
|
@ -1,19 +1,11 @@
|
|||
# This configuration was generated by
|
||||
# `rubocop --auto-gen-config`
|
||||
# on 2017-07-14 12:03:16 +0000 using RuboCop version 0.49.1.
|
||||
# on 2017-11-27 22:40:12 +0530 using RuboCop version 0.51.0.
|
||||
# The point is for the user to remove these configuration records
|
||||
# one by one as the offenses are removed from the code base.
|
||||
# Note that changes in the inspected code, or installation of new
|
||||
# versions of RuboCop, may require this file to be generated again.
|
||||
|
||||
# Offense count: 15
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: Include, TreatCommentsAsGroupSeparators.
|
||||
# Include: **/Gemfile, **/gems.rb
|
||||
Bundler/OrderedGems:
|
||||
Exclude:
|
||||
- 'Gemfile'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||
|
|
@ -46,7 +38,7 @@ Layout/EmptyLineAfterMagicComment:
|
|||
Exclude:
|
||||
- 'spec/models/conference_spec.rb'
|
||||
|
||||
# Offense count: 104
|
||||
# Offense count: 109
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# SupportedStyles: empty_lines, no_empty_lines
|
||||
|
|
@ -151,7 +143,7 @@ Layout/MultilineHashBraceLayout:
|
|||
Layout/MultilineMethodCallBraceLayout:
|
||||
Enabled: false
|
||||
|
||||
# Offense count: 55
|
||||
# Offense count: 53
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
||||
# SupportedStyles: aligned, indented, indented_relative_to_receiver
|
||||
|
|
@ -192,10 +184,11 @@ Layout/SpaceAroundOperators:
|
|||
Exclude:
|
||||
- 'lib/tasks/data.rake'
|
||||
|
||||
# Offense count: 416
|
||||
# Offense count: 463
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles, SupportedStylesForEmptyBraces.
|
||||
# SupportedStyles: space, no_space
|
||||
# SupportedStylesForEmptyBraces: space, no_space
|
||||
Layout/SpaceBeforeBlockBraces:
|
||||
Enabled: false
|
||||
|
||||
|
|
@ -205,20 +198,13 @@ Layout/SpaceBeforeComma:
|
|||
Exclude:
|
||||
- 'lib/tasks/data_demo.rake'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: AllowForAlignment.
|
||||
Layout/SpaceBeforeFirstArg:
|
||||
Exclude:
|
||||
- 'spec/controllers/admin/roles_controller_spec.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
Layout/SpaceBeforeSemicolon:
|
||||
Exclude:
|
||||
- 'Guardfile'
|
||||
|
||||
# Offense count: 51
|
||||
# Offense count: 54
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SupportedStylesForEmptyBraces, SpaceBeforeBlockParameters.
|
||||
# SupportedStyles: space, no_space
|
||||
|
|
@ -293,6 +279,13 @@ Lint/IneffectiveAccessModifier:
|
|||
- 'app/models/conference.rb'
|
||||
|
||||
# Offense count: 2
|
||||
Lint/RescueWithoutErrorClass:
|
||||
Exclude:
|
||||
- 'app/controllers/users/omniauth_callbacks_controller.rb'
|
||||
- 'lib/tasks/migrate_config.rake'
|
||||
|
||||
# Offense count: 2
|
||||
# Cop supports --auto-correct.
|
||||
Lint/ScriptPermission:
|
||||
Exclude:
|
||||
- 'Guardfile'
|
||||
|
|
@ -305,49 +298,41 @@ Lint/UnusedBlockArgument:
|
|||
Exclude:
|
||||
- 'lib/tasks/user.rake'
|
||||
|
||||
# Offense count: 114
|
||||
# Offense count: 136
|
||||
Metrics/AbcSize:
|
||||
Max: 86
|
||||
|
||||
# Offense count: 233
|
||||
# Offense count: 258
|
||||
# Configuration parameters: CountComments, ExcludedMethods.
|
||||
Metrics/BlockLength:
|
||||
Max: 471
|
||||
|
||||
# Offense count: 23
|
||||
# Offense count: 28
|
||||
Metrics/CyclomaticComplexity:
|
||||
Max: 12
|
||||
Exclude:
|
||||
- 'app/models/track.rb'
|
||||
Max: 14
|
||||
|
||||
# Offense count: 2353
|
||||
# Offense count: 2774
|
||||
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
||||
# URISchemes: http, https
|
||||
Metrics/LineLength:
|
||||
Max: 619
|
||||
|
||||
# Offense count: 120
|
||||
# Offense count: 133
|
||||
# Configuration parameters: CountComments.
|
||||
Metrics/MethodLength:
|
||||
Max: 56
|
||||
Exclude:
|
||||
- 'app/models/admin_ability.rb'
|
||||
|
||||
# Offense count: 3
|
||||
# Offense count: 4
|
||||
# Configuration parameters: CountComments.
|
||||
Metrics/ModuleLength:
|
||||
Max: 159
|
||||
Exclude:
|
||||
- 'app/helpers/format_helper.rb'
|
||||
|
||||
# Offense count: 15
|
||||
Metrics/PerceivedComplexity:
|
||||
Max: 16
|
||||
Exclude:
|
||||
- 'app/models/track.rb'
|
||||
Max: 171
|
||||
|
||||
# Offense count: 20
|
||||
Style/AccessorMethodName:
|
||||
Metrics/PerceivedComplexity:
|
||||
Max: 16
|
||||
|
||||
# Offense count: 20
|
||||
Naming/AccessorMethodName:
|
||||
Exclude:
|
||||
- 'app/controllers/admin/events_controller.rb'
|
||||
- 'app/controllers/application_controller.rb'
|
||||
|
|
@ -356,6 +341,51 @@ Style/AccessorMethodName:
|
|||
- 'app/models/target.rb'
|
||||
- 'app/models/user.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
||||
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
||||
Naming/FileName:
|
||||
Exclude:
|
||||
- 'Gemfile'
|
||||
- 'Vagrantfile'
|
||||
|
||||
# Offense count: 2
|
||||
# Configuration parameters: Blacklist.
|
||||
# Blacklist: END, (?-mix:EO[A-Z]{1})
|
||||
Naming/HeredocDelimiterNaming:
|
||||
Exclude:
|
||||
- 'spec/factories/users.rb'
|
||||
- 'spec/models/user_spec.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist, MethodDefinitionMacros.
|
||||
# NamePrefix: is_, has_, have_
|
||||
# NamePrefixBlacklist: is_, has_, have_
|
||||
# NameWhitelist: is_a?
|
||||
# MethodDefinitionMacros: define_method, define_singleton_method
|
||||
Naming/PredicateName:
|
||||
Exclude:
|
||||
- 'spec/**/*'
|
||||
- 'app/models/comment.rb'
|
||||
- 'app/models/contact.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# SupportedStyles: snake_case, normalcase, non_integer
|
||||
Naming/VariableNumber:
|
||||
Exclude:
|
||||
- 'spec/models/ticket_purchase_spec.rb'
|
||||
|
||||
# Offense count: 4
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: AutoCorrect.
|
||||
Performance/HashEachMethods:
|
||||
Exclude:
|
||||
- 'app/controllers/admin/conferences_controller.rb'
|
||||
- 'app/helpers/application_helper.rb'
|
||||
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
||||
- 'spec/factories/event_users.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
|
|
@ -386,7 +416,14 @@ Style/ConditionalAssignment:
|
|||
- 'db/migrate/20140610165551_migrate_data_person_to_user.rb'
|
||||
- 'db/migrate/20140820124117_undo_wrong_migration20140801080705_add_users_to_events.rb'
|
||||
|
||||
# Offense count: 464
|
||||
# Offense count: 9
|
||||
Style/DateTime:
|
||||
Exclude:
|
||||
- 'app/models/conference.rb'
|
||||
- 'app/models/program.rb'
|
||||
- 'spec/models/conference_spec.rb'
|
||||
|
||||
# Offense count: 488
|
||||
Style/Documentation:
|
||||
Enabled: false
|
||||
|
||||
|
|
@ -419,14 +456,13 @@ Style/EmptyMethod:
|
|||
- 'db/migrate/20130216122155_set_registration_defaults_to_false.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
|
||||
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
|
||||
Style/FileName:
|
||||
# Cop supports --auto-correct.
|
||||
Style/Encoding:
|
||||
Exclude:
|
||||
- 'Gemfile'
|
||||
- 'Vagrantfile'
|
||||
- 'app/uploaders/picture_uploader.rb'
|
||||
- 'spec/models/conference_spec.rb'
|
||||
|
||||
# Offense count: 24
|
||||
# Offense count: 32
|
||||
# Configuration parameters: MinBodyLength.
|
||||
Style/GuardClause:
|
||||
Enabled: false
|
||||
|
|
@ -445,7 +481,6 @@ Style/HashSyntax:
|
|||
# Configuration parameters: MaxLineLength.
|
||||
Style/IfUnlessModifier:
|
||||
Exclude:
|
||||
- 'app/controllers/admin/booths_controller.rb'
|
||||
- 'app/controllers/admin/events_controller.rb'
|
||||
- 'app/controllers/api/v1/events_controller.rb'
|
||||
- 'app/controllers/conference_registrations_controller.rb'
|
||||
|
|
@ -454,7 +489,6 @@ Style/IfUnlessModifier:
|
|||
- 'app/models/commercial.rb'
|
||||
- 'app/models/conference.rb'
|
||||
- 'app/models/email_settings.rb'
|
||||
- 'app/models/ticket_purchase.rb'
|
||||
- 'app/models/user.rb'
|
||||
- 'db/migrate/20151031092713_change_conference_id_to_venue_id_in_rooms.rb'
|
||||
- 'lib/tasks/events_registrations.rake'
|
||||
|
|
@ -469,7 +503,7 @@ Style/LineEndConcatenation:
|
|||
- 'spec/features/conference_spec.rb'
|
||||
- 'spec/features/registration_periods_spec.rb'
|
||||
|
||||
# Offense count: 6
|
||||
# Offense count: 9
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# SupportedStyles: require_parentheses, require_no_parentheses, require_no_parentheses_except_multiline
|
||||
|
|
@ -498,12 +532,14 @@ Style/MutableConstant:
|
|||
|
||||
# Offense count: 4
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: Whitelist.
|
||||
# Whitelist: be, be_a, be_an, be_between, be_falsey, be_kind_of, be_instance_of, be_truthy, be_within, eq, eql, end_with, include, match, raise_error, respond_to, start_with
|
||||
Style/NestedParenthesizedCalls:
|
||||
Exclude:
|
||||
- 'spec/features/conference_spec.rb'
|
||||
- 'spec/models/conference_spec.rb'
|
||||
|
||||
# Offense count: 26
|
||||
# Offense count: 27
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
|
||||
# SupportedStyles: skip_modifier_ifs, always
|
||||
|
|
@ -548,6 +584,12 @@ Style/OptionalArguments:
|
|||
Exclude:
|
||||
- 'app/models/event.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
Style/OrAssignment:
|
||||
Exclude:
|
||||
- 'app/controllers/schedules_controller.rb'
|
||||
|
||||
# Offense count: 3
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: AllowSafeAssignment.
|
||||
|
|
@ -557,7 +599,7 @@ Style/ParenthesesAroundCondition:
|
|||
- 'app/controllers/application_controller.rb'
|
||||
- 'app/helpers/format_helper.rb'
|
||||
|
||||
# Offense count: 14
|
||||
# Offense count: 15
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: PreferredDelimiters.
|
||||
Style/PercentLiteralDelimiters:
|
||||
|
|
@ -571,20 +613,9 @@ Style/PercentLiteralDelimiters:
|
|||
- 'app/models/contact.rb'
|
||||
- 'app/models/registration.rb'
|
||||
- 'app/models/subscription.rb'
|
||||
- 'app/models/track.rb'
|
||||
- 'app/uploaders/picture_uploader.rb'
|
||||
- 'spec/models/program_spec.rb'
|
||||
- 'app/models/track.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
||||
# NamePrefix: is_, has_, have_
|
||||
# NamePrefixBlacklist: is_, has_, have_
|
||||
# NameWhitelist: is_a?
|
||||
Style/PredicateName:
|
||||
Exclude:
|
||||
- 'spec/**/*'
|
||||
- 'app/models/comment.rb'
|
||||
- 'app/models/contact.rb'
|
||||
|
||||
# Offense count: 1
|
||||
# Cop supports --auto-correct.
|
||||
|
|
@ -607,16 +638,6 @@ Style/RedundantParentheses:
|
|||
Exclude:
|
||||
- 'app/controllers/admin/base_controller.rb'
|
||||
|
||||
# Offense count: 9
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: AllowMultipleReturnValues.
|
||||
Style/RedundantReturn:
|
||||
Exclude:
|
||||
- 'app/helpers/application_helper.rb'
|
||||
- 'app/helpers/format_helper.rb'
|
||||
- 'app/helpers/paths_helper.rb'
|
||||
- 'app/helpers/users_helper.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
|
||||
|
|
@ -662,7 +683,7 @@ Style/StringLiteralsInInterpolation:
|
|||
Exclude:
|
||||
- 'lib/tasks/dump_db.rake'
|
||||
|
||||
# Offense count: 73
|
||||
# Offense count: 79
|
||||
# Cop supports --auto-correct.
|
||||
# Configuration parameters: EnforcedStyle, MinSize, SupportedStyles.
|
||||
# SupportedStyles: percent, brackets
|
||||
|
|
@ -701,17 +722,3 @@ Style/TrailingCommaInLiteral:
|
|||
- 'Guardfile'
|
||||
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
|
||||
- 'spec/models/conference_spec.rb'
|
||||
|
||||
# Offense count: 3
|
||||
# Cop supports --auto-correct.
|
||||
Style/UnneededInterpolation:
|
||||
Exclude:
|
||||
- 'app/helpers/format_helper.rb'
|
||||
- 'spec/controllers/admin/conferences_controller_spec.rb'
|
||||
|
||||
# Offense count: 2
|
||||
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
||||
# SupportedStyles: snake_case, normalcase, non_integer
|
||||
Style/VariableNumber:
|
||||
Exclude:
|
||||
- 'spec/models/ticket_purchase_spec.rb'
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ before_script:
|
|||
- cp config/database.yml.travis config/database.yml
|
||||
- cp config/secrets.yml.example config/secrets.yml
|
||||
- mysql -u root -e 'create database osem_test;'
|
||||
- RAILS_ENV=test bundle exec rake db:migrate --trace
|
||||
- RAILS_ENV=test bundle exec rake db:schema:load --trace
|
||||
script:
|
||||
- "./travis_script.sh $TEST_SUITE"
|
||||
env:
|
||||
|
|
|
|||
14
Dockerfile
14
Dockerfile
|
|
@ -16,6 +16,12 @@ RUN cd /usr/bin && \
|
|||
tar -xf dockerize.tar.gz && \
|
||||
rm dockerize.tar.gz
|
||||
|
||||
# dumb-init for a proper PID 1
|
||||
RUN cd /tmp && \
|
||||
wget https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \
|
||||
dpkg -i dumb-init_1.2.0_amd64.deb && \
|
||||
rm dumb-init_1.2.0_amd64.deb
|
||||
|
||||
# explicitly add Gemfile and install dependencies using bundler to make use of
|
||||
# Docker's caching
|
||||
WORKDIR /osem/
|
||||
|
|
@ -25,12 +31,13 @@ RUN bundle install --without test development
|
|||
|
||||
# add OSEM files and prepare them for use inside a Docker container
|
||||
COPY . /osem/
|
||||
RUN chown osem.osem /osem/ -R && \
|
||||
RUN chown -R osem.root /osem/ && \
|
||||
chmod -R g=u /osem/ && \
|
||||
mv /osem/config/database.yml.docker /osem/config/database.yml
|
||||
|
||||
# data directory is used to cache the secret key in a file
|
||||
ENV DATA_DIR /data
|
||||
RUN install -d -m 0700 -o osem $DATA_DIR
|
||||
RUN install -d -m 0770 -o osem -g root $DATA_DIR
|
||||
VOLUME ["$DATA_DIR"]
|
||||
|
||||
USER osem
|
||||
|
|
@ -42,4 +49,7 @@ COPY docker/init.sh /init.sh
|
|||
# from a webserver
|
||||
ENV RAILS_SERVE_STATIC_FILES 1
|
||||
|
||||
# Runs "/usr/bin/dumb-init -- /my/script --with --args"
|
||||
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
||||
|
||||
CMD ["bash", "/init.sh"]
|
||||
|
|
|
|||
49
Gemfile
49
Gemfile
|
|
@ -6,7 +6,10 @@ if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4')
|
|||
end
|
||||
|
||||
# as web framework
|
||||
gem 'rails', '~> 4.2.8'
|
||||
gem 'rails', '~> 5.0.5'
|
||||
|
||||
# Use Puma as the app server
|
||||
gem 'puma', '~> 3.0'
|
||||
|
||||
# enables serving assets in production and setting your logger to standard out
|
||||
# both of which are required to run an application on a twelve-factor provider
|
||||
|
|
@ -27,11 +30,11 @@ gem 'paper_trail'
|
|||
|
||||
# for upload management
|
||||
gem 'carrierwave'
|
||||
gem 'mini_magick'
|
||||
gem 'carrierwave-bombshelter'
|
||||
gem 'mini_magick'
|
||||
|
||||
# for internationalizing
|
||||
gem 'rails-i18n', '~> 4.0.0'
|
||||
gem 'rails-i18n', '~> 5.0.0'
|
||||
|
||||
# as authentification framework
|
||||
gem 'devise'
|
||||
|
|
@ -40,12 +43,15 @@ gem 'devise_ichain_authenticatable'
|
|||
# for openID authentication
|
||||
gem 'omniauth'
|
||||
gem 'omniauth-facebook'
|
||||
gem 'omniauth-openid'
|
||||
gem 'omniauth-google-oauth2'
|
||||
gem 'omniauth-github'
|
||||
gem 'omniauth-google-oauth2'
|
||||
gem 'omniauth-openid'
|
||||
|
||||
# Bot-filtering
|
||||
gem 'recaptcha', require: 'recaptcha/rails'
|
||||
|
||||
# as authorization framework
|
||||
gem 'cancancan'
|
||||
gem 'cancancan', '~> 2.0'
|
||||
|
||||
# for roles
|
||||
gem 'rolify'
|
||||
|
|
@ -57,8 +63,8 @@ gem 'unobtrusive_flash', '>=3'
|
|||
gem 'transitions', :require => %w( transitions active_record/transitions )
|
||||
|
||||
# for comments
|
||||
gem 'awesome_nested_set', '~> 3.1.3'
|
||||
gem 'acts_as_commentable_with_threading'
|
||||
gem 'awesome_nested_set', '~> 3.1.3'
|
||||
|
||||
# as templating language
|
||||
gem 'haml-rails'
|
||||
|
|
@ -70,11 +76,11 @@ gem 'sass-rails', '>= 4.0.2'
|
|||
gem 'uglifier', '>= 1.3.0'
|
||||
|
||||
# as the front-end framework
|
||||
gem 'bootstrap-sass', '~> 3.3.4.1'
|
||||
gem 'autoprefixer-rails'
|
||||
gem 'formtastic-bootstrap'
|
||||
gem 'formtastic', '~> 3.1.1'
|
||||
gem 'bootstrap-sass', '~> 3.3.4.1'
|
||||
gem 'cocoon'
|
||||
gem 'formtastic', '~> 3.1.5'
|
||||
gem 'formtastic-bootstrap'
|
||||
|
||||
# as the JavaScript library
|
||||
gem 'jquery-rails'
|
||||
|
|
@ -105,8 +111,8 @@ source 'https://rails-assets.org' do
|
|||
gem 'rails-assets-waypoints'
|
||||
# for markdown editors
|
||||
gem 'rails-assets-bootstrap-markdown'
|
||||
gem 'rails-assets-to-markdown'
|
||||
gem 'rails-assets-markdown'
|
||||
gem 'rails-assets-to-markdown'
|
||||
end
|
||||
|
||||
# as date picker
|
||||
|
|
@ -126,9 +132,9 @@ gem 'gravtastic'
|
|||
gem 'country_select'
|
||||
|
||||
# as PDF generator
|
||||
gem 'prawn-qrcode', '~> 0.2.2.1'
|
||||
gem 'prawn_rails'
|
||||
gem 'rqrcode'
|
||||
gem 'prawn-qrcode', '~> 0.2.2.1'
|
||||
|
||||
# to render XLS spreadsheets
|
||||
gem 'axlsx', git: 'https://github.com/randym/axlsx.git'
|
||||
|
|
@ -154,12 +160,11 @@ gem 'rdoc-generator-fivefish'
|
|||
|
||||
# for visitor tracking
|
||||
gem 'ahoy_matey'
|
||||
gem 'activeuuid'
|
||||
gem 'piwik_analytics', '~> 1.0.1'
|
||||
|
||||
# for recurring jobs
|
||||
gem 'whenever', :require => false
|
||||
gem 'delayed_job_active_record'
|
||||
gem 'whenever', :require => false
|
||||
|
||||
# to run scripts
|
||||
gem 'daemons'
|
||||
|
|
@ -182,6 +187,10 @@ gem 'cloudinary'
|
|||
# for setting app configuration in the environment
|
||||
gem 'dotenv-rails'
|
||||
|
||||
# configurable toggles for functionality
|
||||
# https://github.com/mgsnova/feature
|
||||
gem 'feature'
|
||||
|
||||
# For countable.js
|
||||
gem "countable-rails", "~> 0.0.1"
|
||||
|
||||
|
|
@ -209,10 +218,10 @@ gem 'nokogiri', '>= 1.8.1'
|
|||
group :development do
|
||||
# to launch specs when files are modified
|
||||
gem 'guard-rspec'
|
||||
gem 'spring-commands-rspec'
|
||||
gem 'haml_lint', '~> 0.24.0'
|
||||
gem 'spring-commands-rspec'
|
||||
# for static code analisys
|
||||
gem 'rubocop', '~> 0.49.0', require: false
|
||||
gem 'rubocop', '~> 0.51.0', require: false
|
||||
# as database
|
||||
gem 'sqlite3'
|
||||
# to open mails
|
||||
|
|
@ -227,11 +236,11 @@ end
|
|||
|
||||
group :test do
|
||||
# as test framework
|
||||
gem 'rspec-rails', '~> 3.5', '>= 3.5.2'
|
||||
gem 'database_cleaner'
|
||||
gem 'capybara'
|
||||
gem 'poltergeist'
|
||||
gem 'database_cleaner'
|
||||
gem 'phantomjs', :require => 'phantomjs/poltergeist'
|
||||
gem 'poltergeist'
|
||||
gem 'rspec-rails', '~> 3.5', '>= 3.5.2'
|
||||
# for measuring test coverage
|
||||
gem 'coveralls', require: false
|
||||
# for describing models
|
||||
|
|
@ -246,6 +255,8 @@ group :test do
|
|||
gem 'stripe-ruby-mock'
|
||||
# For validating JSON schemas
|
||||
gem 'json-schema'
|
||||
# For using 'assigns' in tests
|
||||
gem 'rails-controller-testing'
|
||||
end
|
||||
|
||||
group :development, :test do
|
||||
|
|
|
|||
187
Gemfile.lock
187
Gemfile.lock
|
|
@ -12,62 +12,65 @@ GEM
|
|||
remote: https://rubygems.org/
|
||||
remote: https://rails-assets.org/
|
||||
specs:
|
||||
actionmailer (4.2.9)
|
||||
actionpack (= 4.2.9)
|
||||
actionview (= 4.2.9)
|
||||
activejob (= 4.2.9)
|
||||
actioncable (5.0.5)
|
||||
actionpack (= 5.0.5)
|
||||
nio4r (>= 1.2, < 3.0)
|
||||
websocket-driver (~> 0.6.1)
|
||||
actionmailer (5.0.5)
|
||||
actionpack (= 5.0.5)
|
||||
actionview (= 5.0.5)
|
||||
activejob (= 5.0.5)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
actionpack (4.2.9)
|
||||
actionview (= 4.2.9)
|
||||
activesupport (= 4.2.9)
|
||||
rack (~> 1.6)
|
||||
rack-test (~> 0.6.2)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (5.0.5)
|
||||
actionview (= 5.0.5)
|
||||
activesupport (= 5.0.5)
|
||||
rack (~> 2.0)
|
||||
rack-test (~> 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
||||
actionview (4.2.9)
|
||||
activesupport (= 4.2.9)
|
||||
actionview (5.0.5)
|
||||
activesupport (= 5.0.5)
|
||||
builder (~> 3.1)
|
||||
erubis (~> 2.7.0)
|
||||
rails-dom-testing (~> 1.0, >= 1.0.5)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
||||
active_model_serializers (0.9.4)
|
||||
activemodel (>= 3.2)
|
||||
activejob (4.2.9)
|
||||
activesupport (= 4.2.9)
|
||||
globalid (>= 0.3.0)
|
||||
activemodel (4.2.9)
|
||||
activesupport (= 4.2.9)
|
||||
builder (~> 3.1)
|
||||
activerecord (4.2.9)
|
||||
activemodel (= 4.2.9)
|
||||
activesupport (= 4.2.9)
|
||||
arel (~> 6.0)
|
||||
activesupport (4.2.9)
|
||||
activejob (5.0.5)
|
||||
activesupport (= 5.0.5)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (5.0.5)
|
||||
activesupport (= 5.0.5)
|
||||
activerecord (5.0.5)
|
||||
activemodel (= 5.0.5)
|
||||
activesupport (= 5.0.5)
|
||||
arel (~> 7.0)
|
||||
activesupport (5.0.5)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (~> 0.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.3, >= 0.3.4)
|
||||
tzinfo (~> 1.1)
|
||||
activeuuid (0.6.1)
|
||||
activerecord (>= 3.1)
|
||||
uuidtools
|
||||
acts_as_commentable_with_threading (1.2.0)
|
||||
activerecord (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
awesome_nested_set (>= 2.0)
|
||||
acts_as_list (0.4.0)
|
||||
acts_as_list (0.9.7)
|
||||
activerecord (>= 3.0)
|
||||
addressable (2.5.1)
|
||||
public_suffix (~> 2.0, >= 2.0.2)
|
||||
ahoy_matey (1.0.0)
|
||||
ahoy_matey (1.6.0)
|
||||
addressable
|
||||
browser (>= 0.4.0)
|
||||
browser (~> 2.0)
|
||||
geocoder
|
||||
referer-parser
|
||||
rack-attack (< 6)
|
||||
railties
|
||||
referer-parser (>= 0.3.0)
|
||||
request_store
|
||||
safely_block (>= 0.1.1)
|
||||
user_agent_parser
|
||||
uuidtools
|
||||
arel (6.0.4)
|
||||
arel (7.1.4)
|
||||
ast (2.3.0)
|
||||
autoprefixer-rails (7.1.1)
|
||||
execjs
|
||||
|
|
@ -86,10 +89,10 @@ GEM
|
|||
bootstrap-switch-rails (3.0.2)
|
||||
bootstrap3-datetimepicker-rails (3.0.3)
|
||||
momentjs-rails (>= 2.8.1)
|
||||
browser (0.6.0)
|
||||
browser (2.5.1)
|
||||
builder (3.2.3)
|
||||
byebug (9.0.6)
|
||||
cancancan (1.13.1)
|
||||
cancancan (2.0.0)
|
||||
capybara (2.6.2)
|
||||
addressable
|
||||
mime-types (>= 1.16)
|
||||
|
|
@ -144,7 +147,7 @@ GEM
|
|||
daemons (1.1.9)
|
||||
dante (0.2.0)
|
||||
database_cleaner (1.3.0)
|
||||
debug_inspector (0.0.2)
|
||||
debug_inspector (0.0.3)
|
||||
delayed_job (4.1.3)
|
||||
activesupport (>= 3.0, < 5.2)
|
||||
delayed_job_active_record (4.1.2)
|
||||
|
|
@ -166,6 +169,7 @@ GEM
|
|||
dotenv-rails (2.2.1)
|
||||
dotenv (= 2.2.1)
|
||||
railties (>= 3.2, < 5.2)
|
||||
errbase (0.0.3)
|
||||
erubis (2.7.0)
|
||||
execjs (2.6.0)
|
||||
factory_girl (4.5.0)
|
||||
|
|
@ -179,15 +183,16 @@ GEM
|
|||
multipart-post (>= 1.2, < 3)
|
||||
fastimage (2.0.0)
|
||||
addressable (~> 2)
|
||||
feature (1.4.0)
|
||||
ffi (1.9.18)
|
||||
font-awesome-rails (4.7.0.2)
|
||||
railties (>= 3.2, < 5.2)
|
||||
formatador (0.2.5)
|
||||
formtastic (3.1.3)
|
||||
formtastic (3.1.5)
|
||||
actionpack (>= 3.2.13)
|
||||
formtastic-bootstrap (3.1.1)
|
||||
formtastic (>= 3.0)
|
||||
geocoder (1.2.2)
|
||||
geocoder (1.4.4)
|
||||
globalid (0.4.0)
|
||||
activesupport (>= 4.2.0)
|
||||
gravtastic (3.2.6)
|
||||
|
|
@ -290,6 +295,7 @@ GEM
|
|||
mysql2 (0.4.9)
|
||||
nenv (0.3.0)
|
||||
netrc (0.11.0)
|
||||
nio4r (2.1.0)
|
||||
nokogiri (1.8.1)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
notiffany (0.1.1)
|
||||
|
|
@ -324,9 +330,9 @@ GEM
|
|||
activerecord (>= 3.0, < 6.0)
|
||||
activesupport (>= 3.0, < 6.0)
|
||||
request_store (~> 1.1)
|
||||
parallel (1.11.2)
|
||||
parser (2.4.0.0)
|
||||
ast (~> 2.2)
|
||||
parallel (1.12.0)
|
||||
parser (2.4.0.2)
|
||||
ast (~> 2.3)
|
||||
pdf-core (0.2.5)
|
||||
phantomjs (2.1.1.0)
|
||||
piwik_analytics (1.0.2)
|
||||
|
|
@ -353,23 +359,27 @@ GEM
|
|||
method_source (~> 0.8.1)
|
||||
slop (~> 3.4)
|
||||
public_suffix (2.0.5)
|
||||
rack (1.6.8)
|
||||
puma (3.10.0)
|
||||
rack (2.0.3)
|
||||
rack-attack (5.0.1)
|
||||
rack
|
||||
rack-openid (1.3.1)
|
||||
rack (>= 1.1.0)
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rails (4.2.9)
|
||||
actionmailer (= 4.2.9)
|
||||
actionpack (= 4.2.9)
|
||||
actionview (= 4.2.9)
|
||||
activejob (= 4.2.9)
|
||||
activemodel (= 4.2.9)
|
||||
activerecord (= 4.2.9)
|
||||
activesupport (= 4.2.9)
|
||||
bundler (>= 1.3.0, < 2.0)
|
||||
railties (= 4.2.9)
|
||||
sprockets-rails
|
||||
rails (5.0.5)
|
||||
actioncable (= 5.0.5)
|
||||
actionmailer (= 5.0.5)
|
||||
actionpack (= 5.0.5)
|
||||
actionview (= 5.0.5)
|
||||
activejob (= 5.0.5)
|
||||
activemodel (= 5.0.5)
|
||||
activerecord (= 5.0.5)
|
||||
activesupport (= 5.0.5)
|
||||
bundler (>= 1.3.0)
|
||||
railties (= 5.0.5)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-assets-bootstrap (3.3.6)
|
||||
rails-assets-jquery (>= 1.9.1, < 3)
|
||||
rails-assets-bootstrap-markdown (2.10.0)
|
||||
|
|
@ -387,30 +397,32 @@ GEM
|
|||
rails-assets-to-markdown (1.3.0)
|
||||
rails-assets-trianglify (0.4.0)
|
||||
rails-assets-waypoints (4.0.0)
|
||||
rails-deprecated_sanitizer (1.0.3)
|
||||
activesupport (>= 4.2.0.alpha)
|
||||
rails-dom-testing (1.0.8)
|
||||
activesupport (>= 4.2.0.beta, < 5.0)
|
||||
nokogiri (~> 1.6)
|
||||
rails-deprecated_sanitizer (>= 1.0.1)
|
||||
rails-controller-testing (1.0.2)
|
||||
actionpack (~> 5.x, >= 5.0.1)
|
||||
actionview (~> 5.x, >= 5.0.1)
|
||||
activesupport (~> 5.x)
|
||||
rails-dom-testing (2.0.3)
|
||||
activesupport (>= 4.2.0)
|
||||
nokogiri (>= 1.6)
|
||||
rails-html-sanitizer (1.0.3)
|
||||
loofah (~> 2.0)
|
||||
rails-i18n (4.0.8)
|
||||
rails-i18n (5.0.4)
|
||||
i18n (~> 0.7)
|
||||
railties (~> 4.0)
|
||||
railties (~> 5.0)
|
||||
rails_12factor (0.0.3)
|
||||
rails_serve_static_assets
|
||||
rails_stdout_logging
|
||||
rails_serve_static_assets (0.0.4)
|
||||
rails_stdout_logging (0.0.3)
|
||||
railties (4.2.9)
|
||||
actionpack (= 4.2.9)
|
||||
activesupport (= 4.2.9)
|
||||
railties (5.0.5)
|
||||
actionpack (= 5.0.5)
|
||||
activesupport (= 5.0.5)
|
||||
method_source
|
||||
rake (>= 0.8.7)
|
||||
thor (>= 0.18.1, < 2.0)
|
||||
rainbow (2.2.2)
|
||||
rake
|
||||
rake (12.0.0)
|
||||
rake (12.3.0)
|
||||
rb-fsevent (0.10.2)
|
||||
rb-inotify (0.9.10)
|
||||
ffi (>= 0.5.0, < 2)
|
||||
|
|
@ -420,8 +432,10 @@ GEM
|
|||
loggability (~> 0.12)
|
||||
rdoc (~> 5.0)
|
||||
yajl-ruby (~> 1.3)
|
||||
recaptcha (4.6.2)
|
||||
json
|
||||
redcarpet (3.2.3)
|
||||
referer-parser (0.2.1)
|
||||
referer-parser (0.3.0)
|
||||
request_store (1.1.0)
|
||||
responders (2.4.0)
|
||||
actionpack (>= 4.2.0, < 5.3)
|
||||
|
|
@ -458,19 +472,21 @@ GEM
|
|||
rspec-mocks (~> 3.6.0)
|
||||
rspec-support (~> 3.6.0)
|
||||
rspec-support (3.6.0)
|
||||
rubocop (0.49.1)
|
||||
rubocop (0.51.0)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 2.3.3.1, < 3.0)
|
||||
powerpack (~> 0.1)
|
||||
rainbow (>= 1.99.1, < 3.0)
|
||||
rainbow (>= 2.2.2, < 3.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (~> 1.0, >= 1.0.1)
|
||||
ruby-oembed (0.8.14)
|
||||
ruby-openid (2.5.0)
|
||||
ruby-progressbar (1.8.1)
|
||||
ruby-progressbar (1.9.0)
|
||||
ruby_dep (1.5.0)
|
||||
rubyzip (1.2.1)
|
||||
safe_yaml (1.0.4)
|
||||
safely_block (0.2.0)
|
||||
errbase
|
||||
sass (3.2.19)
|
||||
sass-rails (5.0.6)
|
||||
railties (>= 4.0.0, < 6)
|
||||
|
|
@ -497,10 +513,10 @@ GEM
|
|||
sprockets (3.7.1)
|
||||
concurrent-ruby (~> 1.0)
|
||||
rack (> 1, < 3)
|
||||
sprockets-rails (2.3.3)
|
||||
actionpack (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
sprockets (>= 2.8, < 4.0)
|
||||
sprockets-rails (3.2.1)
|
||||
actionpack (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
sqlite3 (1.3.9)
|
||||
stripe (1.43.0)
|
||||
rest-client (~> 1.4)
|
||||
|
|
@ -531,11 +547,11 @@ GEM
|
|||
unicode_utils (1.4.0)
|
||||
unobtrusive_flash (3.1.0)
|
||||
railties
|
||||
user_agent_parser (2.1.5)
|
||||
user_agent_parser (2.4.0)
|
||||
uuidtools (2.1.5)
|
||||
warden (1.2.4)
|
||||
rack (>= 1.0)
|
||||
web-console (2.2.1)
|
||||
web-console (2.3.0)
|
||||
activemodel (>= 4.0)
|
||||
binding_of_caller (>= 0.7.2)
|
||||
railties (>= 4.0)
|
||||
|
|
@ -552,14 +568,13 @@ GEM
|
|||
chronic (>= 0.6.3)
|
||||
xpath (2.0.0)
|
||||
nokogiri (~> 1.3)
|
||||
yajl-ruby (1.3.0)
|
||||
yajl-ruby (1.3.1)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
active_model_serializers
|
||||
activeuuid
|
||||
acts_as_commentable_with_threading
|
||||
acts_as_list
|
||||
ahoy_matey
|
||||
|
|
@ -571,7 +586,7 @@ DEPENDENCIES
|
|||
bootstrap-switch-rails (~> 3.0.0)
|
||||
bootstrap3-datetimepicker-rails (~> 3.0.2)
|
||||
byebug
|
||||
cancancan
|
||||
cancancan (~> 2.0)
|
||||
capybara
|
||||
carrierwave
|
||||
carrierwave-bombshelter
|
||||
|
|
@ -589,8 +604,9 @@ DEPENDENCIES
|
|||
dotenv-rails
|
||||
factory_girl_rails
|
||||
faker
|
||||
feature
|
||||
font-awesome-rails
|
||||
formtastic (~> 3.1.1)
|
||||
formtastic (~> 3.1.5)
|
||||
formtastic-bootstrap
|
||||
gravtastic
|
||||
guard-rspec
|
||||
|
|
@ -621,7 +637,8 @@ DEPENDENCIES
|
|||
poltergeist
|
||||
prawn-qrcode (~> 0.2.2.1)
|
||||
prawn_rails
|
||||
rails (~> 4.2.8)
|
||||
puma (~> 3.0)
|
||||
rails (~> 5.0.5)
|
||||
rails-assets-bootstrap-markdown!
|
||||
rails-assets-date.format!
|
||||
rails-assets-holderjs!
|
||||
|
|
@ -633,16 +650,18 @@ DEPENDENCIES
|
|||
rails-assets-to-markdown!
|
||||
rails-assets-trianglify!
|
||||
rails-assets-waypoints!
|
||||
rails-i18n (~> 4.0.0)
|
||||
rails-controller-testing
|
||||
rails-i18n (~> 5.0.0)
|
||||
rails_12factor
|
||||
rdoc-generator-fivefish
|
||||
recaptcha
|
||||
redcarpet
|
||||
responders (~> 2.0)
|
||||
rolify
|
||||
rqrcode
|
||||
rspec-activemodel-mocks
|
||||
rspec-rails (~> 3.5, >= 3.5.2)
|
||||
rubocop (~> 0.49.0)
|
||||
rubocop (~> 0.51.0)
|
||||
ruby-oembed
|
||||
sass-rails (>= 4.0.2)
|
||||
selectize-rails
|
||||
|
|
@ -663,4 +682,4 @@ DEPENDENCIES
|
|||
whenever
|
||||
|
||||
BUNDLED WITH
|
||||
1.15.4
|
||||
1.16.0
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ There are two configurations to deploy OSEM with Docker: *evaluation mode* and *
|
|||
|
||||
If you want to evaluate OSEM to see if it fits your needs, the default configuration in `docker-compose.env` will work perfectly fine for you.
|
||||
For convenience reasons, `docker-compose.yml` already contains a [MailHog](https://github.com/mailhog/MailHog) service configuration. MailHog
|
||||
is going to catch every email sent by OSEM and displays them on a special web service. Thus, it eliminitates the need to set up an SMTP server just to try out OSEM.
|
||||
is going to catch every email sent by OSEM and displays them on a special web service. Thus, it eliminates the need to set up an SMTP server just to try out OSEM.
|
||||
Just point your browser to http://localhost:8025 to get access to registration confirmation links etc.
|
||||
|
||||
Run `docker-compose up --build` to start the services. On first run, it will take a few minutes to initialize the database. Thus, wait a few minutes before you open up
|
||||
|
|
@ -105,6 +105,7 @@ There are a couple of environment variables you can set to configure OSEM. Check
|
|||
| CLOUDINARY_URL | *string* | Configure your cloudinary.com cloud name and api key/secret
|
||||
| STRIPE_PUBLISHABLE_KEY | *string* | Publishable Key for Stripe Gateway
|
||||
| STRIPE_SECRET_KEY | *string* | Secret Key for Stripe Gateway
|
||||
| OSEM_REDIS_URL | *string* | Redis server URL e.g. redis://localhost:6379/1
|
||||
|
||||
### Online Ticket Payments
|
||||
We use [Stripe](https://stripe.com) for accepting your ticket payments securely over the web.
|
||||
|
|
|
|||
|
|
@ -79,11 +79,23 @@ $(function () {
|
|||
|
||||
$("#conference-start-datepicker").on("dp.change",function (e) {
|
||||
$('#conference-end-datepicker').data("DateTimePicker").setMinDate(e.date);
|
||||
if (!$('#conference-end-datepicker').val()) {
|
||||
$('#conference-end-datepicker').data("DateTimePicker").setDate(e.date);
|
||||
}
|
||||
});
|
||||
|
||||
$("#conference-start-datepicker").change(function (e) {
|
||||
$('#conference-start-datepicker').val()?$('#conference-end-datepicker').data("DateTimePicker").setMinDate(e.date):$('#conference-end-datepicker').data("DateTimePicker").setMinDate(null);
|
||||
});
|
||||
|
||||
$("#conference-end-datepicker").on("dp.change",function (e) {
|
||||
$('#conference-start-datepicker').data("DateTimePicker").setMaxDate(e.date);
|
||||
});
|
||||
|
||||
$("#conference-end-datepicker").change(function (e) {
|
||||
$('#conference-end-datepicker').val()?$('#conference-start-datepicker').data("DateTimePicker").setMaxDate(e.date):$('#conference-start-datepicker').data("DateTimePicker").setMaxDate(null);
|
||||
});
|
||||
|
||||
$("#registration-period-start-datepicker").on("dp.change",function (e) {
|
||||
$('#registration-period-end-datepicker').data("DateTimePicker").setMinDate(e.date);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
@import "bootstrap/mixins";
|
||||
|
||||
html {
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
|
|
@ -104,3 +106,12 @@ p.comment-body {
|
|||
.qr-image{
|
||||
margin-left: 120px;
|
||||
}
|
||||
|
||||
.g-recaptcha {
|
||||
@include clearfix;
|
||||
padding-bottom: 12px;
|
||||
|
||||
div {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
module Admin
|
||||
class BaseController < ApplicationController
|
||||
before_filter :verify_user_admin
|
||||
before_action :verify_user_admin
|
||||
|
||||
private
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,24 @@ module Admin
|
|||
load_and_authorize_resource :conference, find_by: :short_title
|
||||
load_and_authorize_resource through: :conference
|
||||
|
||||
def index; end
|
||||
def index
|
||||
@file_name = "booths_for_#{@conference.short_title}"
|
||||
@booth_export_option = params[:booth_export_option]
|
||||
respond_to do |format|
|
||||
format.html
|
||||
# Explicity call #to_json to avoid the use of EventSerializer
|
||||
format.json { render json: Booth.where(state: :confirmed, program: @program).to_json }
|
||||
format.xlsx do
|
||||
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.xlsx\""
|
||||
render 'booths'
|
||||
end
|
||||
format.pdf { render 'booths' }
|
||||
format.csv do
|
||||
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.csv\""
|
||||
render 'booths'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def show; end
|
||||
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ module Admin
|
|||
private
|
||||
|
||||
def cfp_params
|
||||
params.require(:cfp).permit(:start_date, :end_date, :cfp_type)
|
||||
params.require(:cfp).permit(:start_date, :end_date, :description, :cfp_type)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -193,6 +193,7 @@ module Admin
|
|||
def edit
|
||||
@conferences = Conference.all
|
||||
@date_string = date_string(@conference.start_date, @conference.end_date)
|
||||
@affected_event_count = @conference.program.events.scheduled(@conference.program.selected_schedule_id).count
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.json { render json: @conference.to_json }
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ module Admin
|
|||
class RegistrationsController < Admin::BaseController
|
||||
load_and_authorize_resource :conference, find_by: :short_title
|
||||
load_and_authorize_resource :registration, through: :conference
|
||||
before_filter :set_user, except: [:index]
|
||||
before_action :set_user, except: [:index]
|
||||
|
||||
def index
|
||||
authorize! :show, Registration.new(conference_id: @conference.id)
|
||||
|
|
|
|||
|
|
@ -7,7 +7,25 @@ module Admin
|
|||
# Show flash message with ajax calls
|
||||
after_action :prepare_unobtrusive_flash, only: :toggle_cfp_inclusion
|
||||
|
||||
def index; end
|
||||
def index
|
||||
@file_name = "tracks_for_#{@conference.short_title}"
|
||||
@track_export_option = params[:track_export_option]
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
# Explicity call #to_json to avoid the use of EventSerializer
|
||||
format.json { render json: Track.where(state: :confirmed, program: @program).to_json }
|
||||
format.xlsx do
|
||||
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.xlsx\""
|
||||
render 'tracks'
|
||||
end
|
||||
format.pdf { render 'tracks' }
|
||||
format.csv do
|
||||
response.headers['Content-Disposition'] = "attachment; filename=\"#{@file_name}.csv\""
|
||||
render 'tracks'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def show
|
||||
respond_to do |format|
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
class ApplicationController < ActionController::Base
|
||||
before_filter :set_paper_trail_whodunnit
|
||||
before_action :set_paper_trail_whodunnit
|
||||
include ApplicationHelper
|
||||
add_flash_types :error
|
||||
protect_from_forgery with: :exception
|
||||
before_filter :get_conferences
|
||||
before_filter :store_location
|
||||
protect_from_forgery with: :exception, prepend: true
|
||||
before_action :get_conferences
|
||||
before_action :store_location
|
||||
# Ensure every controller authorizes resource or skips authorization (skip_authorization_check)
|
||||
check_authorization unless: :devise_controller?
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
class ConferenceRegistrationsController < ApplicationController
|
||||
before_filter :authenticate_user!, except: [:new, :create]
|
||||
before_action :authenticate_user!, except: [:new, :create]
|
||||
load_resource :conference, find_by: :short_title
|
||||
authorize_resource :conference_registrations, class: Registration, except: [:new, :create]
|
||||
before_action :set_registration, only: [:edit, :update, :destroy, :show]
|
||||
|
|
|
|||
|
|
@ -4,4 +4,10 @@ class OrganizationsController < ApplicationController
|
|||
def index
|
||||
@organizations = Organization.all
|
||||
end
|
||||
|
||||
def conferences
|
||||
@current = @organization.conferences.upcoming.reorder(start_date: :asc)
|
||||
@antiquated = @organization.conferences.past
|
||||
render '/conferences/index'
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
class RegistrationsController < Devise::RegistrationsController
|
||||
before_action :configure_permitted_parameters, if: :devise_controller?
|
||||
prepend_before_action :check_captcha, only: [:create]
|
||||
|
||||
def edit
|
||||
@openids = Openid.where(user_id: current_user.id).order(:provider)
|
||||
|
|
@ -21,14 +21,34 @@ class RegistrationsController < Devise::RegistrationsController
|
|||
edit_user_registration_path(resource)
|
||||
end
|
||||
|
||||
def configure_permitted_parameters
|
||||
devise_parameter_sanitizer.permit(:account_update) do |u|
|
||||
u
|
||||
.permit(:email, :password, :password_confirmation, :current_password, :username, :email_public)
|
||||
end
|
||||
devise_parameter_sanitizer.permit(:sign_up) do |u|
|
||||
u
|
||||
.permit(:email, :password, :password_confirmation, :name, :username)
|
||||
private
|
||||
|
||||
def sign_up_params
|
||||
params.require(:user).permit(
|
||||
:email,
|
||||
:password,
|
||||
:password_confirmation,
|
||||
:name,
|
||||
:username
|
||||
)
|
||||
end
|
||||
|
||||
def account_update_params
|
||||
params.require(:user).permit(
|
||||
:email,
|
||||
:password,
|
||||
:password_confirmation,
|
||||
:current_password,
|
||||
:username,
|
||||
:email_public
|
||||
)
|
||||
end
|
||||
|
||||
def check_captcha
|
||||
unless Feature.inactive?(:recaptcha) || verify_recaptcha
|
||||
self.resource = resource_class.new sign_up_params
|
||||
resource.validate # Look for any other validation errors besides Recaptcha
|
||||
respond_with_navigational(resource) { render :new }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
class SubscriptionsController < ApplicationController
|
||||
before_filter :authenticate_user!
|
||||
before_action :authenticate_user!
|
||||
load_resource :conference, find_by: :short_title
|
||||
load_and_authorize_resource only: [:create, :destroy], through: :conference
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
class TicketPurchasesController < ApplicationController
|
||||
before_filter :authenticate_user!
|
||||
before_action :authenticate_user!
|
||||
load_resource :conference, find_by: :short_title
|
||||
authorize_resource :conference_registrations, class: Registration
|
||||
authorize_resource
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
class TicketsController < ApplicationController
|
||||
before_filter :authenticate_user!
|
||||
before_action :authenticate_user!
|
||||
load_resource :conference, find_by: :short_title
|
||||
load_resource :ticket, through: :conference
|
||||
authorize_resource :conference_registrations, class: Registration
|
||||
before_filter :check_load_resource, only: :index
|
||||
before_action :check_load_resource, only: :index
|
||||
|
||||
def index; end
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ module ApplicationHelper
|
|||
else
|
||||
ts = all.join
|
||||
end
|
||||
return ts
|
||||
ts
|
||||
end
|
||||
|
||||
def difficulty_levels(conference)
|
||||
|
|
@ -80,7 +80,7 @@ module ApplicationHelper
|
|||
else
|
||||
ts = all.join
|
||||
end
|
||||
return ts
|
||||
ts
|
||||
end
|
||||
|
||||
def unread_notifications(user)
|
||||
|
|
@ -163,6 +163,12 @@ module ApplicationHelper
|
|||
end
|
||||
end
|
||||
|
||||
def rescheduling_hint(affected_event_count)
|
||||
if affected_event_count > 0
|
||||
"You have #{affected_event_count} scheduled #{'event'.pluralize(affected_event_count)}. Changing the conference hours will unschedule those scheduled outside the conference hours."
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# ====Gets
|
||||
# a conference object
|
||||
|
|
@ -171,4 +177,18 @@ module ApplicationHelper
|
|||
def hidden_if_conference_over(conference)
|
||||
'hidden' if Date.today > conference.end_date
|
||||
end
|
||||
|
||||
def nav_root_link_for(conference)
|
||||
link_text = (
|
||||
conference.try(:organization).try(:name) ||
|
||||
ENV['OSEM_NAME'] ||
|
||||
'OSEM'
|
||||
)
|
||||
link_to(
|
||||
link_text,
|
||||
root_path,
|
||||
class: 'navbar-brand',
|
||||
title: 'Open Source Event Manager'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -101,17 +101,17 @@ module FormatHelper
|
|||
|
||||
def icon_for_todo(bool)
|
||||
if bool
|
||||
return 'fa fa-check'
|
||||
'fa fa-check'
|
||||
else
|
||||
return 'fa fa-times'
|
||||
'fa fa-times'
|
||||
end
|
||||
end
|
||||
|
||||
def class_for_todo(bool)
|
||||
if bool
|
||||
return 'todolist-ok'
|
||||
'todolist-ok'
|
||||
else
|
||||
return 'todolist-missing'
|
||||
'todolist-missing'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -122,7 +122,7 @@ module FormatHelper
|
|||
plural || singular.pluralize
|
||||
end
|
||||
|
||||
"#{word}"
|
||||
word
|
||||
end
|
||||
|
||||
# Returns black or white deppending on what of them contrast more with the
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ module PathsHelper
|
|||
|
||||
def active_nav_li(link)
|
||||
if current_page?(link)
|
||||
return 'active'
|
||||
'active'
|
||||
else
|
||||
return ''
|
||||
''
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ module UsersHelper
|
|||
providers << provider if !ENV["OSEM_#{provider.upcase}_KEY"].blank? && !ENV["OSEM_#{provider.upcase}_SECRET"].blank?
|
||||
end
|
||||
|
||||
return providers.uniq
|
||||
providers.uniq
|
||||
end
|
||||
|
||||
# Receives a hash, generated from User model, function get_roles
|
||||
|
|
|
|||
2
app/jobs/application_job.rb
Normal file
2
app/jobs/application_job.rb
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
class ApplicationJob < ActiveJob::Base
|
||||
end
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
class ConferenceCfpUpdateMailJob < ActiveJob::Base
|
||||
class ConferenceCfpUpdateMailJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(conference)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class ConferenceDateUpdateMailJob < ActiveJob::Base
|
||||
class ConferenceDateUpdateMailJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(conference)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class ConferenceRegistrationDateUpdateMailJob < ActiveJob::Base
|
||||
class ConferenceRegistrationDateUpdateMailJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(conference)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class ConferenceScheduleUpdateMailJob < ActiveJob::Base
|
||||
class ConferenceScheduleUpdateMailJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(conference)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class ConferenceVenueUpdateMailJob < ActiveJob::Base
|
||||
class ConferenceVenueUpdateMailJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(conference)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class EventCommentMailJob < ActiveJob::Base
|
||||
class EventCommentMailJob < ApplicationJob
|
||||
queue_as :default
|
||||
|
||||
def perform(comment)
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ class Ability
|
|||
|
||||
# Abilities for not signed in users (guests)
|
||||
def not_signed_in
|
||||
can [:index], Organization
|
||||
can [:index, :conferences], Organization
|
||||
can [:index], Conference
|
||||
can [:show], Conference do |conference|
|
||||
conference.splashpage && conference.splashpage.public == true
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
module Ahoy
|
||||
class Event < ActiveRecord::Base
|
||||
class Event < ApplicationRecord
|
||||
self.table_name = 'ahoy_events'
|
||||
|
||||
belongs_to :visit
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Answer < ActiveRecord::Base
|
||||
class Answer < ApplicationRecord
|
||||
has_many :qanswers
|
||||
has_many :questions, through: :qanswers
|
||||
|
||||
|
|
|
|||
3
app/models/application_record.rb
Normal file
3
app/models/application_record.rb
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
class ApplicationRecord < ActiveRecord::Base
|
||||
self.abstract_class = true
|
||||
end
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
class Booth < ActiveRecord::Base
|
||||
class Booth < ApplicationRecord
|
||||
include ActiveRecord::Transitions
|
||||
has_paper_trail ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class BoothRequest < ActiveRecord::Base
|
||||
class BoothRequest < ApplicationRecord
|
||||
belongs_to :booth
|
||||
belongs_to :user
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Campaign < ActiveRecord::Base
|
||||
class Campaign < ApplicationRecord
|
||||
validates :name, :utm_campaign, presence: true
|
||||
|
||||
has_many :targets, dependent: :nullify
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# cannot delete program if there are events submitted
|
||||
|
||||
class Cfp < ActiveRecord::Base
|
||||
class Cfp < ApplicationRecord
|
||||
TYPES = %w(events booths tracks).freeze
|
||||
|
||||
has_paper_trail ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Comment < ActiveRecord::Base
|
||||
class Comment < ApplicationRecord
|
||||
acts_as_nested_set scope: %i(commentable_id commentable_type)
|
||||
validates :body, presence: true
|
||||
validates :user, presence: true
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Commercial < ActiveRecord::Base
|
||||
class Commercial < ApplicationRecord
|
||||
require 'oembed'
|
||||
|
||||
belongs_to :commercialable, polymorphic: true
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Conference < ActiveRecord::Base
|
||||
class Conference < ApplicationRecord
|
||||
include RevisionCount
|
||||
require 'uri'
|
||||
serialize :events_per_week, Hash
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Contact < ActiveRecord::Base
|
||||
class Contact < ApplicationRecord
|
||||
has_paper_trail on: [:update], ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
||||
belongs_to :conference
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class DifficultyLevel < ActiveRecord::Base
|
||||
class DifficultyLevel < ApplicationRecord
|
||||
belongs_to :program
|
||||
has_many :events, dependent: :nullify
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class EmailSettings < ActiveRecord::Base
|
||||
class EmailSettings < ApplicationRecord
|
||||
belongs_to :conference
|
||||
|
||||
has_paper_trail on: [:update], ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Event < ActiveRecord::Base
|
||||
class Event < ApplicationRecord
|
||||
include ActiveRecord::Transitions
|
||||
include RevisionCount
|
||||
has_paper_trail on: [:create, :update], ignore: [:updated_at, :guid, :week], meta: { conference_id: :conference_id }
|
||||
|
|
@ -204,11 +204,12 @@ class Event < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def speaker_names
|
||||
result = Set.new
|
||||
speakers.each do |speaker|
|
||||
result.add(speaker.name)
|
||||
end
|
||||
result.to_a.to_sentence
|
||||
speakers.map(&:name).join(', ')
|
||||
end
|
||||
|
||||
# Returns emails of all the speaker belongs to a particular event
|
||||
def speaker_emails
|
||||
speakers.map(&:email).join(', ')
|
||||
end
|
||||
|
||||
##
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class EventSchedule < ActiveRecord::Base
|
||||
class EventSchedule < ApplicationRecord
|
||||
belongs_to :schedule
|
||||
belongs_to :event
|
||||
belongs_to :room
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class EventType < ActiveRecord::Base
|
||||
class EventType < ApplicationRecord
|
||||
belongs_to :program
|
||||
has_many :events, dependent: :restrict_with_error
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class EventUser < ActiveRecord::Base
|
||||
class EventUser < ApplicationRecord
|
||||
# TODO: Do we need these roles?
|
||||
ROLES = [%w[Speaker speaker], %w[Submitter submitter], %w[Moderator moderator]]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class EventsRegistration < ActiveRecord::Base
|
||||
class EventsRegistration < ApplicationRecord
|
||||
belongs_to :registration
|
||||
belongs_to :event
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Lodging < ActiveRecord::Base
|
||||
class Lodging < ApplicationRecord
|
||||
belongs_to :conference
|
||||
|
||||
has_paper_trail ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Openid < ActiveRecord::Base
|
||||
class Openid < ApplicationRecord
|
||||
belongs_to :user
|
||||
validates :provider, :uid, presence: true
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Organization < ActiveRecord::Base
|
||||
class Organization < ApplicationRecord
|
||||
resourcify :roles, dependent: :delete_all
|
||||
|
||||
has_paper_trail
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Payment < ActiveRecord::Base
|
||||
class Payment < ApplicationRecord
|
||||
has_many :ticket_purchases
|
||||
belongs_to :user
|
||||
belongs_to :conference
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class PhysicalTicket < ActiveRecord::Base
|
||||
class PhysicalTicket < ApplicationRecord
|
||||
belongs_to :ticket_purchase
|
||||
has_one :ticket, through: :ticket_purchase
|
||||
has_one :conference, through: :ticket_purchase
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# cannot delete program if there are events submitted
|
||||
|
||||
class Program < ActiveRecord::Base
|
||||
class Program < ApplicationRecord
|
||||
has_paper_trail on: [:update], ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
||||
belongs_to :conference
|
||||
|
|
@ -42,7 +42,8 @@ class Program < ActiveRecord::Base
|
|||
has_many :event_schedules, through: :events
|
||||
|
||||
has_many :event_users, through: :events
|
||||
has_many :speakers, -> { distinct }, through: :event_users, source: :user do
|
||||
has_many :program_events_speakers, -> {where(event_role: 'speaker')}, through: :events, source: :event_users
|
||||
has_many :speakers, -> { distinct }, through: :program_events_speakers, source: :user do
|
||||
def confirmed
|
||||
joins(:events).where(events: { state: :confirmed })
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Qanswer < ActiveRecord::Base
|
||||
class Qanswer < ApplicationRecord
|
||||
belongs_to :question
|
||||
belongs_to :answer, dependent: :delete
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Question < ActiveRecord::Base
|
||||
class Question < ApplicationRecord
|
||||
belongs_to :question_type
|
||||
has_and_belongs_to_many :conferences
|
||||
|
||||
|
|
|
|||
|
|
@ -1,3 +1,3 @@
|
|||
class QuestionType < ActiveRecord::Base
|
||||
class QuestionType < ApplicationRecord
|
||||
has_many :questions
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Registration < ActiveRecord::Base
|
||||
class Registration < ApplicationRecord
|
||||
belongs_to :user
|
||||
belongs_to :conference
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class RegistrationPeriod < ActiveRecord::Base
|
||||
class RegistrationPeriod < ApplicationRecord
|
||||
belongs_to :conference
|
||||
|
||||
has_paper_trail ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Resource < ActiveRecord::Base
|
||||
class Resource < ApplicationRecord
|
||||
belongs_to :conference
|
||||
validates :name, :used, :quantity, presence: true
|
||||
validates :used, :quantity, numericality: { greater_than_or_equal_to: 0, only_integer: true }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Role < ActiveRecord::Base
|
||||
class Role < ApplicationRecord
|
||||
belongs_to :resource, polymorphic: true
|
||||
has_many :users_roles
|
||||
has_many :users, through: :users_roles
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Room < ActiveRecord::Base
|
||||
class Room < ApplicationRecord
|
||||
include RevisionCount
|
||||
belongs_to :venue
|
||||
has_many :event_schedules, dependent: :destroy
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Schedule < ActiveRecord::Base
|
||||
class Schedule < ApplicationRecord
|
||||
belongs_to :program
|
||||
belongs_to :track
|
||||
has_many :event_schedules, dependent: :destroy
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Splashpage < ActiveRecord::Base
|
||||
class Splashpage < ApplicationRecord
|
||||
belongs_to :conference
|
||||
|
||||
has_paper_trail ignore: [:updated_at], meta: { conference_id: :conference_id }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Sponsor < ActiveRecord::Base
|
||||
class Sponsor < ApplicationRecord
|
||||
belongs_to :sponsorship_level
|
||||
belongs_to :conference
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class SponsorshipLevel < ActiveRecord::Base
|
||||
class SponsorshipLevel < ApplicationRecord
|
||||
validates :title, presence: true
|
||||
belongs_to :conference
|
||||
acts_as_list scope: :conference
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Subscription < ActiveRecord::Base
|
||||
class Subscription < ApplicationRecord
|
||||
belongs_to :conference
|
||||
belongs_to :user
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Target < ActiveRecord::Base
|
||||
class Target < ApplicationRecord
|
||||
include ActionView::Helpers::TextHelper
|
||||
|
||||
default_scope { order('due_date ASC') }
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Ticket < ActiveRecord::Base
|
||||
class Ticket < ApplicationRecord
|
||||
belongs_to :conference
|
||||
has_many :ticket_purchases, dependent: :destroy
|
||||
has_many :buyers, -> { distinct }, through: :ticket_purchases, source: :user
|
||||
|
|
@ -61,7 +61,7 @@ class Ticket < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def tickets_turnover_total(id)
|
||||
tickets = TicketPurchase.where(ticket_id: id)
|
||||
tickets = TicketPurchase.where(ticket_id: id).paid
|
||||
tickets.inject(0){ |sum, ticket| sum + (ticket.amount_paid * ticket.quantity) }
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class TicketPurchase < ActiveRecord::Base
|
||||
class TicketPurchase < ApplicationRecord
|
||||
belongs_to :ticket
|
||||
belongs_to :user
|
||||
belongs_to :conference
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class TicketScanning < ActiveRecord::Base
|
||||
class TicketScanning < ApplicationRecord
|
||||
belongs_to :physical_ticket
|
||||
|
||||
before_create :mark_user_present
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Track < ActiveRecord::Base
|
||||
class Track < ApplicationRecord
|
||||
include ActiveRecord::Transitions
|
||||
include RevisionCount
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ end
|
|||
class UserDisabled < StandardError
|
||||
end
|
||||
|
||||
class User < ActiveRecord::Base
|
||||
class User < ApplicationRecord
|
||||
rolify
|
||||
has_many :physical_tickets, through: :ticket_purchases do
|
||||
def by_conference(conference)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class UsersRole < ActiveRecord::Base
|
||||
class UsersRole < ApplicationRecord
|
||||
belongs_to :role
|
||||
belongs_to :user
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Vchoice < ActiveRecord::Base
|
||||
class Vchoice < ApplicationRecord
|
||||
belongs_to :vday
|
||||
belongs_to :vposition
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Vday < ActiveRecord::Base
|
||||
class Vday < ApplicationRecord
|
||||
belongs_to :conference
|
||||
|
||||
has_many :vchoices
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Venue < ActiveRecord::Base
|
||||
class Venue < ApplicationRecord
|
||||
belongs_to :conference
|
||||
has_one :commercial, as: :commercialable, dependent: :destroy
|
||||
has_many :rooms, dependent: :destroy
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Visit < ActiveRecord::Base
|
||||
class Visit < ApplicationRecord
|
||||
has_many :ahoy_events, class_name: 'Ahoy::Event'
|
||||
belongs_to :user
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Vote < ActiveRecord::Base
|
||||
class Vote < ApplicationRecord
|
||||
belongs_to :user
|
||||
belongs_to :event
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
class Vposition < ActiveRecord::Base
|
||||
class Vposition < ApplicationRecord
|
||||
belongs_to :conference
|
||||
|
||||
has_many :vchoices
|
||||
|
|
|
|||
19
app/views/admin/booths/_all_booths.csv.haml
Normal file
19
app/views/admin/booths/_all_booths.csv.haml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
- headers = ['Booth ID',
|
||||
'Title',
|
||||
'Description',
|
||||
'Reasoning',
|
||||
'Submitter Name',
|
||||
'Submitter Relationship',
|
||||
'Website Url',
|
||||
'State']
|
||||
= CSV.generate_line ['All booths']
|
||||
= CSV.generate_line headers
|
||||
- @booths.each do |booth|
|
||||
= CSV.generate_line([booth.id,
|
||||
booth.title,
|
||||
booth.description,
|
||||
booth.reasoning,
|
||||
booth.submitter.name,
|
||||
booth.submitter_relationship,
|
||||
booth.website_url,
|
||||
booth.state]).html_safe
|
||||
26
app/views/admin/booths/_all_booths.pdf.prawn
Normal file
26
app/views/admin/booths/_all_booths.pdf.prawn
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
|
||||
booths_array = []
|
||||
header_array = ['Booth ID',
|
||||
'Title',
|
||||
'Description',
|
||||
'Reasoning',
|
||||
'Submitter Name',
|
||||
'Submitter Relationship',
|
||||
'Website Url',
|
||||
'State']
|
||||
booths_array << header_array
|
||||
@booths.each do |booth|
|
||||
row = []
|
||||
row << booth.id
|
||||
row << booth.title
|
||||
row << booth.description
|
||||
row << booth.reasoning
|
||||
row << booth.submitter.name
|
||||
row << booth.submitter_relationship
|
||||
row << booth.website_url
|
||||
row << booth.state
|
||||
booths_array << row
|
||||
end
|
||||
pdf.text "#{@conference.short_title} booths", font_size: 25, align: :center
|
||||
pdf.table booths_array, header: true, cell_style: {size: 8, border_width: 1},column_widths: [45,70,153,152,70,80,105,45]
|
||||
end
|
||||
27
app/views/admin/booths/_all_booths.xlsx.axlsx
Normal file
27
app/views/admin/booths/_all_booths.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
wb.add_worksheet(name: 'all booths') do |sheet|
|
||||
bold_style = wb.styles.add_style(b: true)
|
||||
wrap_text = wb.styles.add_style alignment: {wrap_text: true}
|
||||
row = ['Booth ID',
|
||||
'Title',
|
||||
'Description',
|
||||
'Reasoning',
|
||||
'Submitter Name',
|
||||
'Submitter Relationship',
|
||||
'Website Url',
|
||||
'State']
|
||||
|
||||
sheet.add_row row, style: bold_style
|
||||
@booths.each do |booth|
|
||||
row = []
|
||||
row << booth.id
|
||||
row << booth.title
|
||||
row << booth.description
|
||||
row << booth.reasoning
|
||||
row << booth.submitter.name
|
||||
row << booth.submitter_relationship
|
||||
row << booth.website_url
|
||||
row << booth.state
|
||||
sheet.add_row row , style: wrap_text
|
||||
sheet.column_widths 10,20,35,35,20,30,35,10
|
||||
end
|
||||
end
|
||||
19
app/views/admin/booths/_confirmed_booths.csv.haml
Normal file
19
app/views/admin/booths/_confirmed_booths.csv.haml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
- headers = ['Booth ID',
|
||||
'Title',
|
||||
'Description',
|
||||
'Reasoning',
|
||||
'Submitter Name',
|
||||
'Submitter Relationship',
|
||||
'Website Url',
|
||||
'State']
|
||||
= CSV.generate_line ['All booths']
|
||||
= CSV.generate_line headers
|
||||
- @booths.confirmed.each do |booth|
|
||||
= CSV.generate_line([booth.id,
|
||||
booth.title,
|
||||
booth.description,
|
||||
booth.reasoning,
|
||||
booth.submitter.name,
|
||||
booth.submitter_relationship,
|
||||
booth.website_url,
|
||||
booth.state]).html_safe
|
||||
26
app/views/admin/booths/_confirmed_booths.pdf.prawn
Normal file
26
app/views/admin/booths/_confirmed_booths.pdf.prawn
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
prawn_document(force_download: true, filename: "#{@file_name}.pdf", page_layout: :landscape) do |pdf|
|
||||
booths_array = []
|
||||
header_array = ['Booth ID',
|
||||
'Title',
|
||||
'Description',
|
||||
'Reasoning',
|
||||
'Submitter Name',
|
||||
'Submitter Relationship',
|
||||
'Website Url',
|
||||
'State']
|
||||
booths_array << header_array
|
||||
@booths.confirmed.each do |booth|
|
||||
row = []
|
||||
row << booth.id
|
||||
row << booth.title
|
||||
row << booth.description
|
||||
row << booth.reasoning
|
||||
row << booth.submitter.name
|
||||
row << booth.submitter_relationship
|
||||
row << booth.website_url
|
||||
row << booth.state
|
||||
booths_array << row
|
||||
end
|
||||
pdf.text "#{@conference.short_title} booths", font_size: 25, align: :center
|
||||
pdf.table booths_array, header: true, cell_style: {size: 8, border_width: 1},column_widths: [45,70,153,152,70,80,105,45]
|
||||
end
|
||||
27
app/views/admin/booths/_confirmed_booths.xlsx.axlsx
Normal file
27
app/views/admin/booths/_confirmed_booths.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
wb.add_worksheet(name: 'all booths') do |sheet|
|
||||
bold_style = wb.styles.add_style(b: true)
|
||||
wrap_text = wb.styles.add_style alignment: {wrap_text: true}
|
||||
row = ['Booth ID',
|
||||
'Title',
|
||||
'Description',
|
||||
'Reasoning',
|
||||
'Submitter Name',
|
||||
'Submitter Relationship',
|
||||
'Website Url',
|
||||
'State']
|
||||
sheet.add_row row, style: bold_style
|
||||
|
||||
@booths.confirmed.each do |booth|
|
||||
row = []
|
||||
row << booth.id
|
||||
row << booth.title
|
||||
row << booth.description
|
||||
row << booth.reasoning
|
||||
row << booth.submitter.name
|
||||
row << booth.submitter_relationship
|
||||
row << booth.website_url
|
||||
row << booth.state
|
||||
sheet.add_row row , style: wrap_text
|
||||
sheet.column_widths 10,20,35,35,20,30,35,10
|
||||
end
|
||||
end
|
||||
4
app/views/admin/booths/booths.csv.haml
Normal file
4
app/views/admin/booths/booths.csv.haml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
- if @booth_export_option == 'confirmed'
|
||||
= render 'confirmed_booths'
|
||||
- elsif @booth_export_option == 'all'
|
||||
= render 'all_booths'
|
||||
5
app/views/admin/booths/booths.pdf.prawn
Normal file
5
app/views/admin/booths/booths.pdf.prawn
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
if @booth_export_option == 'confirmed'
|
||||
render 'confirmed_booths'
|
||||
elsif @booth_export_option == 'all'
|
||||
render 'all_booths'
|
||||
end
|
||||
7
app/views/admin/booths/booths.xlsx.axlsx
Normal file
7
app/views/admin/booths/booths.xlsx.axlsx
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
wb = xlsx_package.workbook
|
||||
xlsx_package.use_autowidth = true
|
||||
if @booth_export_option == 'confirmed'
|
||||
render partial: 'confirmed_booths', locals: { wb: wb }
|
||||
elsif @booth_export_option == 'all'
|
||||
render partial: 'all_booths', locals: { wb: wb }
|
||||
end
|
||||
|
|
@ -3,6 +3,30 @@
|
|||
.page-header
|
||||
%h1
|
||||
Booths
|
||||
.pull-right
|
||||
- if can? :read, Booth
|
||||
.btn-group
|
||||
.btn-group
|
||||
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||
Export PDF
|
||||
%span.caret
|
||||
%ul.dropdown-menu{ role: 'menu' }
|
||||
%li= link_to 'All Booths', admin_conference_booths_path(@conference.short_title, format: :pdf, booth_export_option: 'all')
|
||||
%li= link_to 'Confirmed Booths', admin_conference_booths_path(@conference.short_title, format: :pdf, booth_export_option: 'confirmed')
|
||||
.btn-group
|
||||
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||
Export CSV
|
||||
%span.caret
|
||||
%ul.dropdown-menu{ role: 'menu' }
|
||||
%li= link_to 'All', admin_conference_booths_path(@conference.short_title, format: :csv, booth_export_option: 'all')
|
||||
%li= link_to 'Confirmed', admin_conference_booths_path(@conference.short_title, format: :csv, booth_export_option: 'confirmed')
|
||||
.btn-group
|
||||
%button.btn.btn-default.dropdown-toggle{ 'data-toggle' => 'dropdown', type: 'button', class: 'btn btn-success' }
|
||||
Export XLS
|
||||
%span.caret
|
||||
%ul.dropdown-menu{ role: 'menu' }
|
||||
%li= link_to 'All', admin_conference_booths_path(@conference.short_title, format: :xlsx, booth_export_option: 'all')
|
||||
%li= link_to 'Confirmed', admin_conference_booths_path(@conference.short_title, format: :xlsx, booth_export_option: 'confirmed')
|
||||
= "(#{@booths.length})" if @booths.any?
|
||||
%p.text-muted
|
||||
All the booth requests
|
||||
|
|
|
|||
|
|
@ -11,6 +11,10 @@
|
|||
%dd
|
||||
= @cfp.end_date.strftime('%A, %B %e. %Y')
|
||||
%dt
|
||||
Days Left:
|
||||
Description
|
||||
%dd
|
||||
= markdown(@cfp.description)
|
||||
%dt
|
||||
Days Left
|
||||
%dd
|
||||
= pluralize(@cfp.remaining_days, 'day')
|
||||
|
|
|
|||
|
|
@ -10,6 +10,10 @@
|
|||
End Date:
|
||||
%dd#end_date
|
||||
= @cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||
%dt
|
||||
Description:
|
||||
%dd#description
|
||||
= markdown(@cfp.description)
|
||||
%dt
|
||||
Days Left:
|
||||
%dd
|
||||
|
|
|
|||
|
|
@ -8,5 +8,6 @@
|
|||
= f.input :start_date, as: :string, input_html: { id: 'registration-period-start-datepicker', start_date: @conference.start_date, end_date: @conference.end_date, readonly: 'readonly' }
|
||||
= f.input :end_date, as: :string, input_html: { id: 'registration-period-end-datepicker', readonly: 'readonly' }
|
||||
= f.input :cfp_type, as: :select, collection: (@cfp.new_record? ? @program.remaining_cfp_types : [@cfp.cfp_type] + @program.remaining_cfp_types).map {|type| ["#{type.capitalize}", type]}, include_blank: false, label: 'Type', input_html: { class: 'select-help-toggle' }
|
||||
= f.input :description, input_html: {rows: 2, data: { provide: 'markdown-editable' } }, hint: markdown_hint
|
||||
%p.text-right
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
|
||||
|
|
|
|||
|
|
@ -10,6 +10,10 @@
|
|||
End Date:
|
||||
%dd#end_date
|
||||
= @cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||
%dt
|
||||
Description:
|
||||
%dd#description
|
||||
= markdown(@cfp.description)
|
||||
%dt
|
||||
Days Left:
|
||||
%dd
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
%th Type
|
||||
%th Start Date
|
||||
%th End Date
|
||||
%th Description
|
||||
%th Days Left
|
||||
%th Actions
|
||||
%tbody
|
||||
|
|
@ -24,6 +25,9 @@
|
|||
= cfp.start_date.strftime('%A, %B %-d. %Y')
|
||||
%td
|
||||
= cfp.end_date.strftime('%A, %B %-d. %Y')
|
||||
%td
|
||||
%p
|
||||
= truncate(cfp.description)
|
||||
%td
|
||||
= pluralize(cfp.remaining_days, 'day')
|
||||
%td
|
||||
|
|
|
|||
|
|
@ -22,11 +22,11 @@
|
|||
= f.input :timezone, as: :time_zone, hint: 'The conference time zone'
|
||||
= f.input :start_date, as: :string, input_html: { id: 'conference-start-datepicker', readonly: 'readonly' }
|
||||
= f.input :end_date, as: :string, input_html: { id: 'conference-end-datepicker', readonly: 'readonly' }
|
||||
= f.input :start_hour, input_html: {size: 2, type: 'number', min: 0, max: 23}
|
||||
= f.input :end_hour, input_html: {size: 2, type: 'number', min: 1, max: 24}
|
||||
= f.input :start_hour, input_html: {size: 2, type: 'number', min: 0, max: 23}, hint: rescheduling_hint(@affected_event_count)
|
||||
= f.input :end_hour, input_html: {size: 2, type: 'number', min: 1, max: 24}, hint: rescheduling_hint(@affected_event_count)
|
||||
= f.inputs name: 'Registrations' do
|
||||
= f.input :registration_limit, as: :number, in: 0..9999, hint: 'Limit the number of registrations to the conference (0 no limit). Please note that the registration limit doesn\'t apply to speakers of confirmed events (they will still be able to register even if it has been reached). You currently have ' + pluralize(@conference.registrations.count, 'registration')
|
||||
= f.inputs name: 'Booths' do
|
||||
= f.input :booth_limit, as: :number, in: 0..9999,
|
||||
hint: 'Booth limit is the maximum number of booths that you can accept for this conference. By setting this number (0 no limit) you can be sure that you are not going to accept more booths than the conference can accommodate. You currently have ' + pluralize(@conference.booths.accepted.count, 'accepted booth') +'.'
|
||||
= f.action :submit, as: :button, button_html: {class: 'btn btn-primary'}
|
||||
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary', data: { confirm: 'Are you sure you want to proceed?' } }
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
'Start time',
|
||||
'Submitter',
|
||||
'Speaker',
|
||||
'Speaker Email',
|
||||
'Event Type',
|
||||
'Track',
|
||||
'Difficulty Level',
|
||||
|
|
@ -12,8 +13,15 @@
|
|||
= CSV.generate_line ['All Events']
|
||||
= CSV.generate_line headers
|
||||
- @events.each do |event|
|
||||
= CSV.generate_line([event.id, event.title, event.abstract, (event.time.present? ? "#{event.time.strftime("%Y-%m-%d")} #{event.time.strftime("%I:%M%p")} " : ''),
|
||||
event.submitter.name, event.speaker_names, event.event_type.title,
|
||||
= CSV.generate_line([event.id,
|
||||
event.title,
|
||||
event.abstract,
|
||||
(event.time.present? ? "#{event.time.strftime("%Y-%m-%d")}#{event.time.strftime("%I:%M%p")} " : ''),
|
||||
event.submitter.name,
|
||||
event.speaker_names,
|
||||
event.speaker_emails,
|
||||
event.event_type.title,
|
||||
(event.track.present? ? event.track.name : ''),
|
||||
(event.difficulty_level.present? ? event.difficulty_level.title : ''),
|
||||
(event.room.present? ? event.room.name : ''), event.state]).html_safe
|
||||
(event.room.present? ? event.room.name : ''),
|
||||
event.state]).html_safe
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue