Merge pull request #2914 from hennevogel/next-rails/rails7

Rails7
This commit is contained in:
Henne Vogelsang 2022-02-24 16:12:13 +01:00 committed by GitHub
commit 457fbd1d5a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
239 changed files with 2715 additions and 2786 deletions

View file

@ -26,7 +26,7 @@ jobs:
echo "BUNDLE_CACHE_PATH=vendor/cache.next" >> $GITHUB_ENV
- uses: ruby/setup-ruby@v1
with:
ruby-version: 2.5
ruby-version: 3.1.0
bundler-cache: true
- name: Prepare spec
run: |

View file

@ -16,7 +16,7 @@ jobs:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: 2.5
ruby-version: 3.1.0
bundler-cache: true
- run: bundle exec rubocop
- run: bundle exec haml-lint app/views
@ -34,7 +34,7 @@ jobs:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: 2.5
ruby-version: 3.1
bundler-cache: true
- name: Prepare spec
run: |

View file

@ -1,12 +1,12 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2021-08-13 12:49:18 UTC using RuboCop version 1.19.0.
# on 2022-02-10 16:47:29 UTC using RuboCop version 1.25.1.
# 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: 1
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation, Include.
# Include: **/*.gemfile, **/Gemfile, **/gems.rb
@ -14,13 +14,12 @@ Bundler/OrderedGems:
Exclude:
- 'Gemfile'
# Offense count: 5
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: IndentationWidth.
Layout/AssignmentIndentation:
Exclude:
- 'app/helpers/format_helper.rb'
- 'config/environments/development.rb'
# Offense count: 4
# Cop supports --auto-correct.
@ -33,6 +32,7 @@ Layout/ClosingParenthesisIndentation:
# Offense count: 14
# Cop supports --auto-correct.
# Configuration parameters: AllowForAlignment.
Layout/CommentIndentation:
Exclude:
- 'app/controllers/admin/comments_controller.rb'
@ -42,13 +42,6 @@ Layout/CommentIndentation:
- 'app/models/track.rb'
- 'spec/features/volunteers_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: AllowBorderComment, AllowMarginComment.
Layout/EmptyComment:
Exclude:
- 'config/initializers/formtastic.rb'
# Offense count: 3
# Cop supports --auto-correct.
Layout/EmptyLineAfterGuardClause:
@ -62,7 +55,7 @@ Layout/EmptyLineAfterMagicComment:
Exclude:
- 'spec/models/conference_spec.rb'
# Offense count: 113
# Offense count: 108
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: empty_lines, no_empty_lines
@ -75,17 +68,13 @@ Layout/EmptyLinesAroundExceptionHandlingKeywords:
Exclude:
- 'app/models/payment.rb'
# Offense count: 13
# Offense count: 6
# Cop supports --auto-correct.
# Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
Layout/ExtraSpacing:
Exclude:
- 'Guardfile'
- 'app/controllers/application_controller.rb'
- 'app/views/admin/events/_all_with_comments.xlsx.axlsx'
- 'bin/rails'
- 'config.ru'
- 'config/environments/test.rb'
- 'db/migrate/20140623101032_create_ahoy_events.rb'
- 'db/migrate/20140701123203_add_events_per_week_to_conference.rb'
- 'db/migrate/20140719160903_create_delayed_jobs.rb'
@ -140,12 +129,11 @@ Layout/IndentationWidth:
Exclude:
- 'app/controllers/users_controller.rb'
# Offense count: 4
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment.
Layout/LeadingCommentSpace:
Exclude:
- 'Guardfile'
- 'app/models/comment.rb'
# Offense count: 32
@ -179,14 +167,14 @@ Layout/MultilineHashBraceLayout:
- 'config/routes.rb'
- 'spec/models/event_spec.rb'
# Offense count: 36
# Offense count: 35
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: symmetrical, new_line, same_line
Layout/MultilineMethodCallBraceLayout:
Enabled: false
# Offense count: 56
# Offense count: 55
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: aligned, indented, indented_relative_to_receiver
@ -241,14 +229,13 @@ Layout/SpaceAroundMethodCallOperator:
- 'spec/features/organizer_ability_spec.rb'
- 'spec/models/program_spec.rb'
# Offense count: 3
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator.
# SupportedStylesForExponentOperator: space, no_space
Layout/SpaceAroundOperators:
Exclude:
- 'app/views/admin/events/_all_with_comments.xlsx.axlsx'
- 'config/environments/test.rb'
- 'lib/tasks/data.rake'
# Offense count: 139
@ -278,12 +265,6 @@ Layout/SpaceBeforeFirstArg:
Exclude:
- 'app/controllers/admin/booths_controller.rb'
# Offense count: 1
# Cop supports --auto-correct.
Layout/SpaceBeforeSemicolon:
Exclude:
- 'Guardfile'
# Offense count: 8
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBrackets.
@ -339,7 +320,7 @@ Layout/SpaceInsideHashLiteralBraces:
# Offense count: 4
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: space, no_space
# SupportedStyles: space, compact, no_space
Layout/SpaceInsideParens:
Exclude:
- 'app/views/admin/registrations/index.xlsx.axlsx'
@ -371,11 +352,17 @@ Lint/AmbiguousBlockAssociation:
- 'spec/controllers/schedules_controller_spec.rb'
- 'spec/models/user_spec.rb'
# Offense count: 1
# Configuration parameters: AllowSafeAssignment.
Lint/AssignmentInCondition:
# Offense count: 13
# Cop supports --auto-correct.
Lint/AmbiguousOperatorPrecedence:
Exclude:
- 'bin/spring'
- 'app/controllers/application_controller.rb'
- 'app/helpers/conference_helper.rb'
- 'app/models/admin_ability.rb'
- 'app/models/commercial.rb'
- 'app/models/conference.rb'
- 'app/models/track.rb'
- 'app/pdfs/ticket_pdf.rb'
# Offense count: 1
# Configuration parameters: AllowedMethods.
@ -409,31 +396,12 @@ Lint/IneffectiveAccessModifier:
- 'app/models/commercial.rb'
- 'app/models/conference.rb'
# Offense count: 1
# Cop supports --auto-correct.
Lint/NonDeterministicRequireOrder:
Exclude:
- 'spec/spec_helper.rb'
# Offense count: 1
# Cop supports --auto-correct.
Lint/RedundantCopDisableDirective:
Exclude:
- 'spec/support/save_feature_failures.rb'
# Offense count: 2
# Cop supports --auto-correct.
Lint/ScriptPermission:
Exclude:
- 'Guardfile'
- 'Rakefile'
# Offense count: 1
# Configuration parameters: AllowComments, AllowNil.
Lint/SuppressedException:
Exclude:
- 'bin/rspec'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
@ -455,16 +423,16 @@ Lint/UriRegexp:
- 'app/models/commercial.rb'
- 'app/models/contact.rb'
# Offense count: 128
# Offense count: 127
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
Metrics/AbcSize:
Max: 71
# Offense count: 315
# Offense count: 313
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
# IgnoredMethods: refine
Metrics/BlockLength:
Max: 1344
Max: 1341
# Offense count: 1
# Configuration parameters: CountBlocks.
@ -476,12 +444,12 @@ Metrics/BlockNesting:
Metrics/ClassLength:
Max: 652
# Offense count: 28
# Offense count: 29
# Configuration parameters: IgnoredMethods.
Metrics/CyclomaticComplexity:
Max: 16
# Offense count: 150
# Offense count: 152
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
Metrics/MethodLength:
Max: 56
@ -491,7 +459,7 @@ Metrics/MethodLength:
Metrics/ModuleLength:
Max: 173
# Offense count: 25
# Offense count: 26
# Configuration parameters: IgnoredMethods.
Metrics/PerceivedComplexity:
Max: 19
@ -510,15 +478,6 @@ Naming/HeredocDelimiterNaming:
- 'spec/factories/users.rb'
- 'spec/models/user_spec.rb'
# Offense count: 10
# Configuration parameters: CheckIdentifiers, CheckConstants, CheckVariables, CheckStrings, CheckSymbols, CheckComments, CheckFilepaths, FlaggedTerms.
Naming/InclusiveLanguage:
Exclude:
- 'app/controllers/admin/contacts_controller.rb'
- 'app/controllers/users_controller.rb'
- 'app/uploaders/picture_uploader.rb'
- 'config/application.rb'
# Offense count: 2
# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
# AllowedNames: at, by, db, id, in, io, ip, of, on, os, pp, to
@ -618,7 +577,7 @@ RSpec/DescribedClass:
- 'spec/serializers/speaker_serializer_spec.rb'
- 'spec/serializers/track_serializer_spec.rb'
# Offense count: 13
# Offense count: 11
# Cop supports --auto-correct.
# Configuration parameters: AllowConsecutiveOneLiners.
RSpec/EmptyLineAfterExample:
@ -649,7 +608,7 @@ RSpec/EmptyLineAfterFinalLet:
- 'spec/models/payment_spec.rb'
- 'spec/models/ticket_spec.rb'
# Offense count: 16
# Offense count: 17
# Cop supports --auto-correct.
RSpec/EmptyLineAfterHook:
Exclude:
@ -682,7 +641,7 @@ RSpec/EmptyLineAfterSubject:
RSpec/ExampleLength:
Max: 187
# Offense count: 19
# Offense count: 18
# Cop supports --auto-correct.
# Configuration parameters: CustomTransform, IgnoredWords.
RSpec/ExampleWording:
@ -829,7 +788,7 @@ RSpec/MultipleDescribes:
- 'spec/controllers/application_controller_spec.rb'
- 'spec/models/conference_spec.rb'
# Offense count: 279
# Offense count: 277
RSpec/MultipleExpectations:
Max: 97
@ -951,7 +910,7 @@ Style/AccessorGrouping:
- 'app/models/payment.rb'
# Offense count: 12
# Cop supports --auto-correct.
# Cop supports --auto-correct-all.
Style/CaseLikeIf:
Exclude:
- 'app/controllers/admin/roles_controller.rb'
@ -1007,14 +966,6 @@ Style/ConditionalAssignment:
Style/Documentation:
Enabled: false
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: allowed_in_returns, forbidden
Style/DoubleNegation:
Exclude:
- 'config/environments/production.rb'
# Offense count: 2
# Cop supports --auto-correct.
Style/EmptyCaseCondition:
@ -1042,37 +993,22 @@ Style/EmptyMethod:
- 'db/migrate/20130206192339_rename_attending_social_events_with_partner.rb'
- 'db/migrate/20130216122155_set_registration_defaults_to_false.rb'
# Offense count: 4
# Offense count: 3
# Cop supports --auto-correct.
Style/Encoding:
Exclude:
- 'app/uploaders/picture_uploader.rb'
- 'config/initializers/formtastic.rb'
- 'config/initializers/money.rb'
- 'spec/models/conference_spec.rb'
# Offense count: 11
# Offense count: 3
# Cop supports --auto-correct.
Style/ExpandPathArguments:
Exclude:
- 'Rakefile'
- 'bin/bundle'
- 'bin/rails'
- 'bin/rspec'
- 'bin/setup'
- 'bin/update'
- 'config.ru'
- 'config/application.rb'
- 'config/environment.rb'
- 'spec/spec_helper.rb'
# Offense count: 9
# Cop supports --auto-correct.
Style/ExplicitBlockArgument:
Exclude:
- 'Guardfile'
# Offense count: 48
# Offense count: 41
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
@ -1085,7 +1021,7 @@ Style/GlobalStdStream:
Exclude:
- 'config/environments/production.rb'
# Offense count: 28
# Offense count: 29
# Configuration parameters: MinBodyLength.
Style/GuardClause:
Enabled: false
@ -1114,25 +1050,22 @@ Style/HashLikeCase:
Exclude:
- 'app/helpers/versions_helper.rb'
# Offense count: 7
# Offense count: 358
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
# Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
# SupportedShorthandSyntax: always, never, either
Style/HashSyntax:
Exclude:
- 'Gemfile'
- 'app/views/admin/events/events.xlsx.axlsx'
- 'app/views/admin/registrations/index.xlsx.axlsx'
- 'lib/tasks/user.rake'
Enabled: false
# Offense count: 2
# Cop supports --auto-correct.
# Cop supports --auto-correct-all.
Style/HashTransformValues:
Exclude:
- 'app/controllers/admin/comments_controller.rb'
- 'app/helpers/chart_helper.rb'
# Offense count: 59
# Offense count: 61
# Cop supports --auto-correct.
Style/IfUnlessModifier:
Enabled: false
@ -1144,6 +1077,12 @@ Style/LineEndConcatenation:
- 'spec/features/conference_spec.rb'
- 'spec/features/registration_periods_spec.rb'
# Offense count: 1
# Cop supports --auto-correct-all.
Style/MapToHash:
Exclude:
- 'app/controllers/admin/comments_controller.rb'
# Offense count: 9
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
@ -1154,12 +1093,9 @@ Style/MethodDefParentheses:
- 'app/models/user.rb'
- 'lib/tasks/demo_data_for_development.rake'
# Offense count: 4
# Offense count: 1
Style/MixinUsage:
Exclude:
- 'bin/setup'
- 'bin/update'
- 'config/application.rb'
- 'spec/spec_helper.rb'
# Offense count: 7
@ -1213,12 +1149,12 @@ Style/NumericLiteralPrefix:
# Offense count: 7
# Cop supports --auto-correct.
# Configuration parameters: Strict.
# Configuration parameters: Strict, AllowedNumbers.
Style/NumericLiterals:
MinDigits: 15
# Offense count: 36
# Cop supports --auto-correct.
# Cop supports --auto-correct-all.
# Configuration parameters: EnforcedStyle, IgnoredMethods.
# SupportedStyles: predicate, comparison
Style/NumericPredicate:
@ -1266,14 +1202,28 @@ Style/ParenthesesAroundCondition:
- 'app/controllers/application_controller.rb'
- 'app/helpers/format_helper.rb'
# Offense count: 21
# Offense count: 19
# Cop supports --auto-correct.
# Configuration parameters: PreferredDelimiters.
Style/PercentLiteralDelimiters:
Enabled: false
Exclude:
- 'Gemfile'
- 'app/controllers/admin/users_controller.rb'
- 'app/models/cfp.rb'
- 'app/models/comment.rb'
- 'app/models/commercial.rb'
- 'app/models/conference.rb'
- 'app/models/contact.rb'
- 'app/models/registration.rb'
- 'app/models/subscription.rb'
- 'app/models/track.rb'
- 'app/uploaders/picture_uploader.rb'
- 'config/deploy.rb'
- 'config/initializers/formtastic.rb'
- 'spec/models/program_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Cop supports --auto-correct-all.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: short, verbose
Style/PreferredHashMethods:
@ -1308,7 +1258,7 @@ Style/RedundantCondition:
- 'app/models/ticket.rb'
# Offense count: 3
# Cop supports --auto-correct.
# Cop supports --auto-correct-all.
# Configuration parameters: SafeForConstants.
Style/RedundantFetchBlock:
Exclude:
@ -1336,13 +1286,12 @@ Style/RedundantReturn:
- 'app/controllers/admin/events_controller.rb'
- 'app/controllers/admin/organizations_controller.rb'
# Offense count: 3
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, AllowInnerSlashes.
# SupportedStyles: slashes, percent_r, mixed
Style/RegexpLiteral:
Exclude:
- 'Guardfile'
- 'app/uploaders/picture_uploader.rb'
# Offense count: 2
@ -1363,13 +1312,6 @@ Style/SignalException:
- 'lib/tasks/user.rake'
- 'spec/support/flash.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: AllowIfMethodIsEmpty.
Style/SingleLineMethods:
Exclude:
- 'Guardfile'
# Offense count: 6
# Cop supports --auto-correct.
# Configuration parameters: AllowModifier.
@ -1382,13 +1324,20 @@ Style/SoleNestedConditional:
- 'db/migrate/20140801170430_move_event_media_to_commercial.rb'
- 'db/migrate/20151018152439_create_programs_table.rb'
# Offense count: 31
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: RequireEnglish.
# SupportedStyles: use_perl_names, use_english_names
Style/SpecialGlobalVars:
EnforcedStyle: use_perl_names
# Offense count: 31
# Cop supports --auto-correct-all.
# Configuration parameters: Mode.
Style/StringConcatenation:
Enabled: false
# Offense count: 31
# Offense count: 35
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
# SupportedStyles: single_quotes, double_quotes
@ -1396,7 +1345,6 @@ Style/StringLiterals:
Exclude:
- 'Gemfile'
- 'bin/rspec'
- 'bin/spring'
- 'config/deploy.rb'
- 'config/environments/production.rb'
- 'config/puma.rb'
@ -1416,7 +1364,7 @@ Style/StringLiteralsInInterpolation:
- 'app/views/admin/events/_confirmed_events.xlsx.axlsx'
- 'lib/tasks/dump_db.rake'
# Offense count: 108
# Offense count: 109
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, MinSize.
# SupportedStyles: percent, brackets
@ -1424,7 +1372,7 @@ Style/SymbolArray:
Enabled: false
# Offense count: 10
# Cop supports --auto-correct.
# Cop supports --auto-correct-all.
# Configuration parameters: AllowMethodsWithArguments, IgnoredMethods.
# IgnoredMethods: respond_to, define_method
Style/SymbolProc:
@ -1445,14 +1393,6 @@ Style/TernaryParentheses:
Exclude:
- 'app/helpers/format_helper.rb'
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyleForMultiline.
# SupportedStylesForMultiline: comma, consistent_comma, no_comma
Style/TrailingCommaInArrayLiteral:
Exclude:
- 'Guardfile'
# Offense count: 21
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyleForMultiline.
@ -1476,9 +1416,9 @@ Style/WordArray:
EnforcedStyle: percent
MinSize: 6
# Offense count: 533
# Offense count: 532
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# URISchemes: http, https
Layout/LineLength:
Max: 619

View file

@ -1 +1 @@
2.5.9
3.1.0

View file

@ -1,5 +1,6 @@
FROM registry.opensuse.org/opensuse/infrastructure/dale/containers/osem/base:latest
ARG CONTAINER_USERID
ENV NOKOGIRI_USE_SYSTEM_LIBRARIES=1
# Configure our user
RUN usermod -u $CONTAINER_USERID osem
@ -12,13 +13,15 @@ COPY Gemfile /osem/
COPY Gemfile.lock /osem/
RUN chown -R osem /osem
# Add our files
# Install bundler & foreman
RUN gem.ruby3.1 install bundler -v "$(grep -A 1 "BUNDLED WITH" /osem/Gemfile.lock | tail -n 1)"; \
gem.ruby3.1 install foreman
# Continue as user
USER osem
WORKDIR /osem/
# Install bundler & foreman
RUN sudo gem install bundler:1.17.3 foreman
# Install our bundle
RUN export NOKOGIRI_USE_SYSTEM_LIBRARIES=1; bundle install --jobs=3 --retry=3
RUN bundle install --jobs=3 --retry=3
CMD ["foreman", "start"]

20
Gemfile
View file

@ -5,7 +5,7 @@ end
source 'https://rubygems.org'
ruby ENV['OSEM_RUBY_VERSION'] || '2.5.9'
ruby ENV['OSEM_RUBY_VERSION'] || '3.1.0'
# rails-assets requires >= 1.8.4
if Gem::Version.new(Bundler::VERSION) < Gem::Version.new('1.8.4')
@ -14,7 +14,7 @@ end
# as web framework
if next?
gem 'rails', '~> 6'
gem 'rails', '~> 7'
else
gem 'rails', '~> 5.2'
end
@ -85,8 +85,6 @@ gem 'uglifier', '>= 1.3.0'
gem 'autoprefixer-rails'
gem 'bootstrap-sass', '~> 3.4.0'
gem 'cocoon'
gem 'formtastic', '~> 3.1.5'
gem 'formtastic-bootstrap'
# as the JavaScript library
gem 'jquery-rails'
@ -143,6 +141,9 @@ gem 'country_select'
# as PDF generator
gem 'prawn-qrcode'
gem 'prawn-rails'
# FIXME: for prawn, matrix isn't in the default set of Ruby 3.1 anymore
# see https://github.com/prawnpdf/prawn/commit/3658d5125c3b20eb11484c3b039ca6b89dc7d1b7
gem 'matrix', '~> 0.4'
# for QR code generation
gem 'rqrcode'
@ -165,9 +166,6 @@ gem 'font-awesome-rails'
# for markdown
gem 'redcarpet'
# for visitor tracking
gem 'piwik_analytics', '~> 1.0.1'
# for recurring jobs
gem 'delayed_job_active_record'
gem 'whenever', :require => false
@ -228,16 +226,12 @@ gem 'dalli'
gem 'icalendar'
# Use guard and spring for testing in development
group :development do
# to launch specs when files are modified
gem 'guard-rspec'
gem 'haml_lint'
gem 'spring-commands-rspec'
# for static code analisys
gem 'rubocop', require: false
gem 'rubocop-rspec', require: false
gem 'rubocop-rails', require: false
gem 'haml_lint'
# to open mails
gem 'letter_opener'
gem 'letter_opener_web'
@ -265,7 +259,7 @@ group :test do
# for mocking external requests
gem 'webmock'
# for mocking Stripe responses in tests
gem 'stripe-ruby-mock'
gem 'stripe-ruby-mock', '~> 3.1.0.rc3'
# For validating JSON schemas
gem 'json-schema'
# For using 'assigns' in tests

View file

@ -1,6 +1,29 @@
GEM
remote: https://rails-assets.org/
specs:
rails-assets-bootstrap (3.3.6)
rails-assets-jquery (>= 1.9.1, < 3)
rails-assets-bootstrap-markdown (2.10.0)
rails-assets-bootstrap (~> 3)
rails-assets-bootstrap-select (1.13.3)
rails-assets-bootstrap (>= 3.0.0)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-date.format (1.2.3)
rails-assets-holderjs (2.9.6)
rails-assets-jquery (2.2.4)
rails-assets-jquery-smooth-scroll (2.2.0)
rails-assets-jquery (>= 1.7.0)
rails-assets-markdown (0.5.0)
rails-assets-momentjs (2.22.2)
rails-assets-spectrum (1.8.0)
rails-assets-jquery (>= 1.7.2)
rails-assets-tinycolor (1.4.1)
rails-assets-to-markdown (3.1.1)
rails-assets-trianglify (1.2.0)
rails-assets-waypoints (4.0.1)
GEM
remote: https://rubygems.org/
remote: https://rails-assets.org/
specs:
Ascii85 (1.1.0)
actioncable (5.2.6)
@ -66,8 +89,8 @@ GEM
ast (2.4.2)
autoprefixer-rails (10.3.3.0)
execjs (~> 2)
awesome_nested_set (3.4.0)
activerecord (>= 4.0.0, < 7.0)
awesome_nested_set (3.5.0)
activerecord (>= 4.0.0, < 7.1)
aws_cf_signer (0.1.3)
bcrypt (3.1.16)
bindex (0.8.1)
@ -110,7 +133,7 @@ GEM
caxlsx_rails (0.6.2)
actionpack (>= 3.1)
caxlsx (>= 3.0)
chartkick (3.4.2)
chartkick (4.1.3)
childprocess (3.0.0)
chronic (0.10.2)
chunky_png (1.4.0)
@ -119,7 +142,6 @@ GEM
aws_cf_signer
rest-client (>= 2.0.0)
cocoon (1.2.15)
coderay (1.1.3)
colorize (0.8.1)
concurrent-ruby (1.1.9)
countable-rails (0.0.1)
@ -147,7 +169,7 @@ GEM
delayed_job_active_record (4.1.6)
activerecord (>= 3.0, < 6.2)
delayed_job (>= 3.0, < 5)
devise (4.8.0)
devise (4.8.1)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
@ -197,30 +219,11 @@ GEM
ffi (1.15.4)
font-awesome-rails (4.7.0.7)
railties (>= 3.2, < 7)
formatador (0.3.0)
formtastic (3.1.5)
actionpack (>= 3.2.13)
formtastic-bootstrap (3.1.1)
formtastic (>= 3.0)
geckodriver-helper (0.24.0)
archive-zip (~> 0.7)
globalid (0.4.2)
activesupport (>= 4.2.0)
gravtastic (3.2.6)
guard (2.18.0)
formatador (>= 0.2.4)
listen (>= 2.7, < 4.0)
lumberjack (>= 1.0.12, < 2.0)
nenv (~> 0.1)
notiffany (~> 0.0)
pry (>= 0.13.0)
shellany (~> 0.0)
thor (>= 0.18.1)
guard-compat (1.2.1)
guard-rspec (4.7.3)
guard (~> 2.1)
guard-compat (~> 1.1)
rspec (>= 2.99.0, < 4.0)
haml (5.2.2)
temple (>= 0.8.0)
tilt
@ -248,7 +251,7 @@ GEM
http-accept (1.7.0)
http-cookie (1.0.4)
domain_name (~> 0.5)
i18n (1.8.10)
i18n (1.9.1)
concurrent-ruby (~> 1.0)
i18n_data (0.13.0)
icalendar (2.7.1)
@ -285,16 +288,13 @@ GEM
actionmailer (>= 3.2)
letter_opener (~> 1.0)
railties (>= 3.2)
listen (3.7.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.12.0)
loofah (2.13.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
lumberjack (1.2.8)
mail (2.7.1)
mini_mime (>= 0.1.1)
marcel (1.0.1)
matrix (0.4.2)
method_source (1.0.0)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
@ -304,8 +304,8 @@ GEM
rake
mini_magick (4.11.0)
mini_mime (1.1.1)
mini_portile2 (2.6.1)
minitest (5.14.4)
mini_portile2 (2.7.1)
minitest (5.15.0)
momentjs-rails (2.20.1)
railties (>= 3.1)
monetize (1.9.4)
@ -321,17 +321,13 @@ GEM
multi_xml (0.6.0)
multipart-post (2.1.1)
mysql2 (0.5.3)
nenv (0.3.0)
netrc (0.11.0)
next_rails (1.0.4)
colorize (>= 0.8.1)
nio4r (2.5.8)
nokogiri (1.12.5)
mini_portile2 (~> 2.6.1)
nokogiri (1.13.1)
mini_portile2 (~> 2.7.0)
racc (~> 1.4)
notiffany (0.1.3)
nenv (~> 0.1)
shellany (~> 0.0)
oauth2 (1.4.7)
faraday (>= 0.8, < 2.0)
jwt (>= 1.0, < 3.0)
@ -363,11 +359,11 @@ GEM
omniauth (~> 2.0)
open4 (1.3.4)
orm_adapter (0.5.0)
paper_trail (12.1.0)
paper_trail (12.2.0)
activerecord (>= 5.2)
request_store (~> 1.1)
parallel (1.20.1)
parser (3.0.2.0)
parallel (1.21.0)
parser (3.1.0.0)
ast (~> 2.4.1)
pdf-core (0.9.0)
pdf-inspector (1.3.0)
@ -379,10 +375,6 @@ GEM
ruby-rc4
ttfunk
pg (1.2.3)
piwik_analytics (1.0.2)
actionpack
activesupport
rails (>= 3.0.0)
prawn (2.4.0)
pdf-core (~> 0.9.0)
ttfunk (~> 1.7)
@ -395,13 +387,10 @@ GEM
prawn-table
prawn-table (0.2.2)
prawn (>= 1.3.0, < 3.0.0)
pry (0.14.1)
coderay (~> 1.1)
method_source (~> 1.0)
public_suffix (4.0.6)
puma (4.3.9)
nio4r (~> 2.0)
racc (1.5.2)
racc (1.6.0)
rack (2.2.3)
rack-openid (1.4.2)
rack (>= 1.1.0)
@ -423,26 +412,6 @@ GEM
bundler (>= 1.3.0)
railties (= 5.2.6)
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)
rails-assets-bootstrap (~> 3)
rails-assets-bootstrap-select (1.13.3)
rails-assets-bootstrap (>= 3.0.0)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-date.format (1.2.3)
rails-assets-holderjs (2.9.6)
rails-assets-jquery (2.2.4)
rails-assets-jquery-smooth-scroll (2.2.0)
rails-assets-jquery (>= 1.7.0)
rails-assets-markdown (0.5.0)
rails-assets-momentjs (2.22.2)
rails-assets-spectrum (1.8.0)
rails-assets-jquery (>= 1.7.2)
rails-assets-tinycolor (1.4.1)
rails-assets-to-markdown (3.1.1)
rails-assets-trianglify (1.2.0)
rails-assets-waypoints (4.0.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@ -461,7 +430,7 @@ GEM
method_source
rake (>= 0.8.7)
thor (>= 0.19.0, < 2.0)
rainbow (3.0.0)
rainbow (3.1.1)
rake (13.0.6)
rb-fsevent (0.11.0)
rb-inotify (0.10.1)
@ -469,8 +438,8 @@ GEM
recaptcha (4.14.0)
json
redcarpet (3.5.1)
regexp_parser (2.1.1)
request_store (1.5.0)
regexp_parser (2.2.0)
request_store (1.5.1)
rack (>= 1.4)
responders (3.0.1)
actionpack (>= 5.0)
@ -486,10 +455,6 @@ GEM
chunky_png (~> 1.0)
rqrcode_core (~> 1.0)
rqrcode_core (1.2.0)
rspec (3.6.0)
rspec-core (~> 3.6.0)
rspec-expectations (~> 3.6.0)
rspec-mocks (~> 3.6.0)
rspec-activemodel-mocks (1.1.0)
activemodel (>= 3.0)
activesupport (>= 3.0)
@ -511,16 +476,16 @@ GEM
rspec-mocks (~> 3.6.0)
rspec-support (~> 3.6.0)
rspec-support (3.6.0)
rubocop (1.19.1)
rubocop (1.25.1)
parallel (~> 1.10)
parser (>= 3.0.0.0)
parser (>= 3.1.0.0)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml
rubocop-ast (>= 1.9.1, < 2.0)
rubocop-ast (>= 1.15.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.11.0)
rubocop-ast (1.15.1)
parser (>= 3.0.1.1)
rubocop-rails (2.11.3)
activesupport (>= 4.2.0)
@ -563,7 +528,6 @@ GEM
concurrent-ruby
faraday
sexp_processor (4.15.3)
shellany (0.0.1)
shoulda-matchers (4.5.1)
activesupport (>= 4.2.0)
simplecov (0.21.2)
@ -581,9 +545,6 @@ GEM
activesupport (>= 4.2.0)
sort_alphabetical (1.1.0)
unicode_utils (>= 1.2.2)
spring (2.1.1)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
sprockets (3.7.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
@ -594,13 +555,13 @@ GEM
sqlite3 (1.4.2)
ssrf_filter (1.0.7)
stripe (5.38.0)
stripe-ruby-mock (3.0.1)
stripe-ruby-mock (3.1.0.rc3)
dante (>= 0.2.0)
multi_json (~> 1.0)
stripe (> 5, < 6)
sysexits (1.2.0)
temple (0.8.2)
thor (1.1.0)
thor (1.2.1)
thread_safe (0.3.6)
tilt (2.0.10)
timecop (0.9.4)
@ -616,7 +577,7 @@ GEM
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
unicode-display_width (2.0.0)
unicode-display_width (2.1.0)
unicode_utils (1.4.0)
unobtrusive_flash (3.3.1)
railties
@ -679,11 +640,8 @@ DEPENDENCIES
faker
feature
font-awesome-rails
formtastic (~> 3.1.5)
formtastic-bootstrap
geckodriver-helper
gravtastic
guard-rspec
haml-rails
haml_lint
icalendar
@ -695,6 +653,7 @@ DEPENDENCIES
leaflet-rails
letter_opener
letter_opener_web
matrix (~> 0.4)
mina
mini_magick
money-rails
@ -710,7 +669,6 @@ DEPENDENCIES
paper_trail
pdf-inspector
pg
piwik_analytics (~> 1.0.1)
prawn-qrcode
prawn-rails
puma (~> 4.3)
@ -746,11 +704,10 @@ DEPENDENCIES
shoulda-matchers
simplecov-cobertura
skylight
spring-commands-rspec
sprockets-rails
sqlite3
stripe
stripe-ruby-mock
stripe-ruby-mock (~> 3.1.0.rc3)
timecop
transitions
turbolinks
@ -762,7 +719,7 @@ DEPENDENCIES
whenever
RUBY VERSION
ruby 2.5.9p229
ruby 3.1.0
BUNDLED WITH
1.17.3
2.3.3

View file

@ -1,76 +1,105 @@
GEM
remote: https://rubygems.org/
remote: https://rails-assets.org/
specs:
rails-assets-bootstrap (3.4.1)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-bootstrap-markdown (2.10.0)
rails-assets-bootstrap (~> 3)
rails-assets-bootstrap-select (1.13.10)
rails-assets-bootstrap (>= 3.0.0)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-date.format (1.2.3)
rails-assets-holderjs (2.9.6)
rails-assets-jquery (3.4.1)
rails-assets-jquery-smooth-scroll (2.2.0)
rails-assets-jquery (>= 1.7.0)
rails-assets-markdown (0.5.0)
rails-assets-momentjs (2.22.2)
rails-assets-spectrum (1.8.0)
rails-assets-jquery (>= 1.7.2)
rails-assets-tinycolor (1.4.1)
rails-assets-to-markdown (3.1.1)
rails-assets-trianglify (1.2.0)
rails-assets-waypoints (4.0.1)
GEM
remote: https://rubygems.org/
specs:
Ascii85 (1.1.0)
actioncable (6.1.4)
actionpack (= 6.1.4)
activesupport (= 6.1.4)
actioncable (7.0.1)
actionpack (= 7.0.1)
activesupport (= 7.0.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailbox (6.1.4)
actionpack (= 6.1.4)
activejob (= 6.1.4)
activerecord (= 6.1.4)
activestorage (= 6.1.4)
activesupport (= 6.1.4)
actionmailbox (7.0.1)
actionpack (= 7.0.1)
activejob (= 7.0.1)
activerecord (= 7.0.1)
activestorage (= 7.0.1)
activesupport (= 7.0.1)
mail (>= 2.7.1)
actionmailer (6.1.4)
actionpack (= 6.1.4)
actionview (= 6.1.4)
activejob (= 6.1.4)
activesupport (= 6.1.4)
net-imap
net-pop
net-smtp
actionmailer (7.0.1)
actionpack (= 7.0.1)
actionview (= 7.0.1)
activejob (= 7.0.1)
activesupport (= 7.0.1)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.0)
actionpack (6.1.4)
actionview (= 6.1.4)
activesupport (= 6.1.4)
rack (~> 2.0, >= 2.0.9)
actionpack (7.0.1)
actionview (= 7.0.1)
activesupport (= 7.0.1)
rack (~> 2.0, >= 2.2.0)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
actiontext (6.1.4)
actionpack (= 6.1.4)
activerecord (= 6.1.4)
activestorage (= 6.1.4)
activesupport (= 6.1.4)
actiontext (7.0.1)
actionpack (= 7.0.1)
activerecord (= 7.0.1)
activestorage (= 7.0.1)
activesupport (= 7.0.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (6.1.4)
activesupport (= 6.1.4)
actionview (7.0.1)
activesupport (= 7.0.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
active_model_serializers (0.10.12)
actionpack (>= 4.1, < 6.2)
activemodel (>= 4.1, < 6.2)
active_model_serializers (0.10.13)
actionpack (>= 4.1, < 7.1)
activemodel (>= 4.1, < 7.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
activejob (6.1.4)
activesupport (= 6.1.4)
activejob (7.0.1)
activesupport (= 7.0.1)
globalid (>= 0.3.6)
activemodel (6.1.4)
activesupport (= 6.1.4)
activerecord (6.1.4)
activemodel (= 6.1.4)
activesupport (= 6.1.4)
activestorage (6.1.4)
actionpack (= 6.1.4)
activejob (= 6.1.4)
activerecord (= 6.1.4)
activesupport (= 6.1.4)
marcel (~> 1.0.0)
activemodel (7.0.1)
activesupport (= 7.0.1)
activerecord (7.0.1)
activemodel (= 7.0.1)
activesupport (= 7.0.1)
activestorage (7.0.1)
actionpack (= 7.0.1)
activejob (= 7.0.1)
activerecord (= 7.0.1)
activesupport (= 7.0.1)
marcel (~> 1.0)
mini_mime (>= 1.1.0)
activesupport (6.1.4)
activesupport (7.0.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
zeitwerk (~> 2.3)
acts_as_commentable_with_threading (2.0.1)
activerecord (>= 4.0)
activesupport (>= 4.0)
awesome_nested_set (>= 3.0)
acts_as_commentable_with_threading (1.2.0)
activerecord (>= 3.0)
activesupport (>= 3.0)
awesome_nested_set (>= 2.0)
acts_as_list (1.0.4)
activerecord (>= 4.2)
addressable (2.8.0)
@ -83,8 +112,8 @@ GEM
ast (2.4.2)
autoprefixer-rails (10.3.1.0)
execjs (~> 2)
awesome_nested_set (3.4.0)
activerecord (>= 4.0.0, < 7.0)
awesome_nested_set (3.5.0)
activerecord (>= 4.0.0, < 7.1)
aws_cf_signer (0.1.3)
bcrypt (3.1.16)
bindex (0.8.1)
@ -127,7 +156,7 @@ GEM
caxlsx_rails (0.6.2)
actionpack (>= 3.1)
caxlsx (>= 3.0)
chartkick (3.4.2)
chartkick (4.1.3)
childprocess (3.0.0)
chronic (0.10.2)
chunky_png (1.4.0)
@ -136,7 +165,6 @@ GEM
aws_cf_signer
rest-client (>= 2.0.0)
cocoon (1.2.15)
coderay (1.1.3)
colorize (0.8.1)
concurrent-ruby (1.1.9)
countable-rails (0.0.1)
@ -159,12 +187,12 @@ GEM
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
delayed_job (4.1.9)
activesupport (>= 3.0, < 6.2)
delayed_job_active_record (4.1.6)
activerecord (>= 3.0, < 6.2)
delayed_job (4.1.10)
activesupport (>= 3.0, < 8.0)
delayed_job_active_record (4.1.7)
activerecord (>= 3.0, < 8.0)
delayed_job (>= 3.0, < 5)
devise (4.8.0)
devise (4.8.1)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
@ -173,6 +201,7 @@ GEM
devise_ichain_authenticatable (0.3.2)
devise (>= 2.2)
diff-lcs (1.4.4)
digest (3.1.0)
docile (1.4.0)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
@ -212,32 +241,13 @@ GEM
fastimage (2.2.5)
feature (1.4.0)
ffi (1.15.3)
font-awesome-rails (4.7.0.7)
railties (>= 3.2, < 7)
formatador (0.3.0)
formtastic (3.1.5)
actionpack (>= 3.2.13)
formtastic-bootstrap (3.1.1)
formtastic (>= 3.0)
font-awesome-rails (4.7.0.8)
railties (>= 3.2, < 8.0)
geckodriver-helper (0.24.0)
archive-zip (~> 0.7)
globalid (0.5.2)
globalid (1.0.0)
activesupport (>= 5.0)
gravtastic (3.2.6)
guard (2.18.0)
formatador (>= 0.2.4)
listen (>= 2.7, < 4.0)
lumberjack (>= 1.0.12, < 2.0)
nenv (~> 0.1)
notiffany (~> 0.0)
pry (>= 0.13.0)
shellany (~> 0.0)
thor (>= 0.18.1)
guard-compat (1.2.1)
guard-rspec (4.7.3)
guard (~> 2.1)
guard-compat (~> 1.1)
rspec (>= 2.99.0, < 4.0)
haml (5.2.2)
temple (>= 0.8.0)
tilt
@ -265,7 +275,7 @@ GEM
http-accept (1.7.0)
http-cookie (1.0.4)
domain_name (~> 0.5)
i18n (1.8.10)
i18n (1.9.1)
concurrent-ruby (~> 1.0)
i18n_data (0.13.0)
icalendar (2.7.1)
@ -275,6 +285,7 @@ GEM
mini_magick (>= 4.9.5, < 5)
ruby-vips (>= 2.0.17, < 3)
io-like (0.3.1)
io-wait (0.2.1)
iso-639 (0.3.5)
jquery-datatables-rails (3.4.0)
actionpack (>= 3.1)
@ -298,20 +309,18 @@ GEM
rails (>= 4.2.0)
letter_opener (1.7.0)
launchy (~> 2.2)
letter_opener_web (1.4.0)
actionmailer (>= 3.2)
letter_opener (~> 1.0)
railties (>= 3.2)
listen (3.6.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.12.0)
letter_opener_web (2.0.0)
actionmailer (>= 5.2)
letter_opener (~> 1.7)
railties (>= 5.2)
rexml
loofah (2.13.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
lumberjack (1.2.8)
mail (2.7.1)
mini_mime (>= 0.1.1)
marcel (1.0.1)
matrix (0.4.2)
method_source (1.0.0)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
@ -320,9 +329,9 @@ GEM
open4 (~> 1.3.4)
rake
mini_magick (4.11.0)
mini_mime (1.1.0)
mini_portile2 (2.6.1)
minitest (5.14.4)
mini_mime (1.1.2)
mini_portile2 (2.7.1)
minitest (5.15.0)
momentjs-rails (2.20.1)
railties (>= 3.1)
monetize (1.9.4)
@ -338,17 +347,28 @@ GEM
multi_xml (0.6.0)
multipart-post (2.1.1)
mysql2 (0.5.3)
nenv (0.3.0)
net-imap (0.2.3)
digest
net-protocol
strscan
net-pop (0.1.1)
digest
net-protocol
timeout
net-protocol (0.1.2)
io-wait
timeout
net-smtp (0.3.1)
digest
net-protocol
timeout
netrc (0.11.0)
next_rails (1.0.4)
colorize (>= 0.8.1)
nio4r (2.5.8)
nokogiri (1.12.3)
mini_portile2 (~> 2.6.1)
nokogiri (1.13.1)
mini_portile2 (~> 2.7.0)
racc (~> 1.4)
notiffany (0.1.3)
nenv (~> 0.1)
shellany (~> 0.0)
oauth2 (1.4.7)
faraday (>= 0.8, < 2.0)
jwt (>= 1.0, < 3.0)
@ -380,11 +400,11 @@ GEM
omniauth (~> 2.0)
open4 (1.3.4)
orm_adapter (0.5.0)
paper_trail (12.0.0)
paper_trail (12.2.0)
activerecord (>= 5.2)
request_store (~> 1.1)
parallel (1.20.1)
parser (3.0.2.0)
parallel (1.21.0)
parser (3.1.0.0)
ast (~> 2.4.1)
pdf-core (0.9.0)
pdf-inspector (1.3.0)
@ -396,10 +416,6 @@ GEM
ruby-rc4
ttfunk
pg (1.2.3)
piwik_analytics (1.0.2)
actionpack
activesupport
rails (>= 3.0.0)
prawn (2.4.0)
pdf-core (~> 0.9.0)
ttfunk (~> 1.7)
@ -412,13 +428,10 @@ GEM
prawn-table
prawn-table (0.2.2)
prawn (>= 1.3.0, < 3.0.0)
pry (0.14.1)
coderay (~> 1.1)
method_source (~> 1.0)
public_suffix (4.0.6)
puma (4.3.8)
nio4r (~> 2.0)
racc (1.5.2)
racc (1.6.0)
rack (2.2.3)
rack-openid (1.4.2)
rack (>= 1.1.0)
@ -427,41 +440,20 @@ GEM
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
rails (6.1.4)
actioncable (= 6.1.4)
actionmailbox (= 6.1.4)
actionmailer (= 6.1.4)
actionpack (= 6.1.4)
actiontext (= 6.1.4)
actionview (= 6.1.4)
activejob (= 6.1.4)
activemodel (= 6.1.4)
activerecord (= 6.1.4)
activestorage (= 6.1.4)
activesupport (= 6.1.4)
rails (7.0.1)
actioncable (= 7.0.1)
actionmailbox (= 7.0.1)
actionmailer (= 7.0.1)
actionpack (= 7.0.1)
actiontext (= 7.0.1)
actionview (= 7.0.1)
activejob (= 7.0.1)
activemodel (= 7.0.1)
activerecord (= 7.0.1)
activestorage (= 7.0.1)
activesupport (= 7.0.1)
bundler (>= 1.15.0)
railties (= 6.1.4)
sprockets-rails (>= 2.0.0)
rails-assets-bootstrap (3.4.1)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-bootstrap-markdown (2.10.0)
rails-assets-bootstrap (~> 3)
rails-assets-bootstrap-select (1.13.10)
rails-assets-bootstrap (>= 3.0.0)
rails-assets-jquery (>= 1.9.1, < 4)
rails-assets-date.format (1.2.3)
rails-assets-holderjs (2.9.6)
rails-assets-jquery (3.4.1)
rails-assets-jquery-smooth-scroll (2.2.0)
rails-assets-jquery (>= 1.7.0)
rails-assets-markdown (0.5.0)
rails-assets-momentjs (2.22.2)
rails-assets-spectrum (1.8.0)
rails-assets-jquery (>= 1.7.2)
rails-assets-tinycolor (1.4.1)
rails-assets-to-markdown (3.1.1)
rails-assets-trianglify (1.2.0)
rails-assets-waypoints (4.0.1)
railties (= 7.0.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@ -469,27 +461,25 @@ GEM
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.3.0)
rails-html-sanitizer (1.4.2)
loofah (~> 2.3)
rails-i18n (6.0.0)
rails-i18n (7.0.1)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 7)
railties (6.1.4)
actionpack (= 6.1.4)
activesupport (= 6.1.4)
railties (>= 6.0.0, < 8)
railties (7.0.1)
actionpack (= 7.0.1)
activesupport (= 7.0.1)
method_source
rake (>= 0.13)
rake (>= 12.2)
thor (~> 1.0)
rainbow (3.0.0)
zeitwerk (~> 2.5)
rainbow (3.1.1)
rake (13.0.6)
rb-fsevent (0.11.0)
rb-inotify (0.10.1)
ffi (~> 1.0)
recaptcha (5.8.1)
json
redcarpet (3.5.1)
regexp_parser (2.1.1)
request_store (1.5.0)
regexp_parser (2.2.0)
request_store (1.5.1)
rack (>= 1.4)
responders (3.0.1)
actionpack (>= 5.0)
@ -505,10 +495,6 @@ GEM
chunky_png (~> 1.0)
rqrcode_core (~> 1.0)
rqrcode_core (1.1.0)
rspec (3.10.0)
rspec-core (~> 3.10.0)
rspec-expectations (~> 3.10.0)
rspec-mocks (~> 3.10.0)
rspec-activemodel-mocks (1.1.0)
activemodel (>= 3.0)
activesupport (>= 3.0)
@ -530,16 +516,16 @@ GEM
rspec-mocks (~> 3.10)
rspec-support (~> 3.10)
rspec-support (3.10.2)
rubocop (1.19.0)
rubocop (1.25.1)
parallel (~> 1.10)
parser (>= 3.0.0.0)
parser (>= 3.1.0.0)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml
rubocop-ast (>= 1.9.1, < 2.0)
rubocop-ast (>= 1.15.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.10.0)
rubocop-ast (1.15.1)
parser (>= 3.0.1.1)
rubocop-rails (2.11.3)
activesupport (>= 4.2.0)
@ -579,7 +565,6 @@ GEM
concurrent-ruby
faraday
sexp_processor (4.15.3)
shellany (0.0.1)
shoulda-matchers (4.5.1)
activesupport (>= 4.2.0)
simplecov (0.21.2)
@ -595,9 +580,6 @@ GEM
activesupport (>= 5.2.0)
sort_alphabetical (1.1.0)
unicode_utils (>= 1.2.2)
spring (2.1.1)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
sprockets (4.0.2)
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
@ -607,16 +589,18 @@ GEM
sprockets (>= 3.0.0)
sqlite3 (1.4.2)
ssrf_filter (1.0.7)
stripe (5.38.0)
stripe-ruby-mock (3.0.1)
stripe (5.43.0)
stripe-ruby-mock (3.1.0.rc3)
dante (>= 0.2.0)
multi_json (~> 1.0)
stripe (> 5, < 6)
strscan (3.0.1)
sysexits (1.2.0)
temple (0.8.2)
thor (1.1.0)
thor (1.2.1)
tilt (2.0.10)
timecop (0.9.4)
timeout (0.2.0)
transitions (1.2.1)
ttfunk (1.7.0)
turbolinks (5.2.1)
@ -629,7 +613,7 @@ GEM
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
unicode-display_width (2.0.0)
unicode-display_width (2.1.0)
unicode_utils (1.4.0)
unobtrusive_flash (3.3.1)
railties
@ -655,7 +639,7 @@ GEM
chronic (>= 0.6.3)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.4.2)
zeitwerk (2.5.4)
PLATFORMS
ruby
@ -693,11 +677,8 @@ DEPENDENCIES
faker
feature
font-awesome-rails
formtastic (~> 3.1.5)
formtastic-bootstrap
geckodriver-helper
gravtastic
guard-rspec
haml-rails
haml_lint
icalendar
@ -709,6 +690,7 @@ DEPENDENCIES
leaflet-rails
letter_opener
letter_opener_web
matrix (~> 0.4)
mina
mini_magick
money-rails
@ -724,11 +706,10 @@ DEPENDENCIES
paper_trail
pdf-inspector
pg
piwik_analytics (~> 1.0.1)
prawn-qrcode
prawn-rails
puma (~> 4.3)
rails (~> 6)
rails (~> 7)
rails-assets-bootstrap-markdown!
rails-assets-bootstrap-select!
rails-assets-date.format!
@ -760,11 +741,10 @@ DEPENDENCIES
shoulda-matchers
simplecov-cobertura
skylight
spring-commands-rspec
sprockets-rails
sqlite3
stripe
stripe-ruby-mock
stripe-ruby-mock (~> 3.1.0.rc3)
timecop
transitions
turbolinks
@ -776,7 +756,7 @@ DEPENDENCIES
whenever
RUBY VERSION
ruby 2.5.9p229
ruby 3.1.0
BUNDLED WITH
1.17.3
2.3.3

View file

@ -1,66 +0,0 @@
#!/usr/bin/ruby
# frozen_string_literal: true
#
# More info at https://github.com/guard/guard#readme
guard_opts = {
all_on_start: true,
all_after_pass: true,
cmd: 'spring rspec'
}
def model_specs ; 'spec/models' end
def model_spec(model)
"spec/models/#{model}_spec.rb"
end
def all_testunit_tests
[
model_tests,
controller_tests,
helper_tests,
integration_tests,
]
end
def all_specs
[
model_specs,
]
end
def startup_guards
watch(%r{^Gemfile$}) { yield }
watch(%r{^Gemfile.lock$}) { yield }
watch(%r{^config/routes.rb$}) { yield }
watch(%r{^config/application\.rb$}) { yield }
watch(%r{^config/environment\.rb$}) { yield }
watch(%r{^config/environments/.+\.rb$}) { yield }
watch(%r{^config/initializers/.+\.rb$}) { yield }
watch(%r{^db/schema\.rb$}) { yield }
watch(%r{^spec/spec_helper\.rb$}) { yield }
end
def rspec_guards
watch(%r{^spec/factories/.+\.rb$}) { all_specs }
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
end
group :rspec do
guard 'rspec', guard_opts do
#startup_guards { all_specs }
rspec_guards
#all_specs
end
end
# group :bundler do
# guard 'bundler' do
# watch('Gemfile')
# # Uncomment next line if Gemfile contain `gemspec' command
# # watch(/^.+\.gemspec/)
# end
# end

View file

@ -1,9 +1,6 @@
#!/usr/bin/env rake
# frozen_string_literal: true
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require File.expand_path('../config/application', __FILE__)
require_relative 'config/application'
Osem::Application.load_tasks
Rails.application.load_tasks

View file

@ -1,7 +1,7 @@
// This is a sprockets 4.0 manifest file
//
//= link webui/application.css
//= link webui/application.js
//= link application.css
//= link application.js
//= link_tree ../images
//= link_tree ../fonts

View file

@ -12,7 +12,6 @@
//
//= require jquery
//= require jquery_ujs
//= require jquery.mobile.custom.min
//= require jquery-ui/widgets/draggable
//= require jquery-ui/widgets/droppable
//= require waypoints/jquery.waypoints

File diff suppressed because one or more lines are too long

View file

@ -94,11 +94,6 @@ $(function () {
return false;
});
$("#event-comment-link").click(function(){
$("#comments-div").toggle();
return false;
});
$(".comment-reply").hide();
$(".user-details-popover").popover();
$("#comments-div").hide();

View file

@ -1,6 +1,5 @@
/*
*= require strap-on
*= require formtastic-bootstrap
*= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
*= require osem
*= require osem-rating

View file

@ -53,7 +53,7 @@ module Admin
def update
@url = admin_conference_booth_path(@conference.short_title, @booth.id)
@booth.update_attributes(booth_params)
@booth.update(booth_params)
if @booth.save
redirect_to admin_conference_booths_path,

View file

@ -35,7 +35,7 @@ module Admin
send_mail_on_cfp_dates_updates = @cfp.notify_on_cfp_date_update?
if @cfp.update_attributes(cfp_params)
if @cfp.update(cfp_params)
ConferenceCfpUpdateMailJob.perform_later(@conference) if send_mail_on_cfp_dates_updates
redirect_to admin_conference_program_cfps_path(@conference.short_title),
notice: 'Call for papers successfully updated.'

View file

@ -68,7 +68,6 @@ module Admin
def new
@conference = Conference.new
@organizations = Organization.accessible_by(current_ability, :update).pluck(:name, :id)
end
def create
@ -91,7 +90,7 @@ module Admin
@conference.assign_attributes(conference_params)
send_mail_on_conf_update = @conference.notify_on_dates_changed?
if @conference.update_attributes(conference_params)
if @conference.update(conference_params)
ConferenceDateUpdateMailJob.perform_later(@conference) if send_mail_on_conf_update
redirect_to edit_admin_conference_path(id: @conference.short_title),
notice: 'Conference was successfully updated.'

View file

@ -28,7 +28,7 @@ module Admin
end
def update
if @difficulty_level.update_attributes(difficulty_level_params)
if @difficulty_level.update(difficulty_level_params)
redirect_to admin_conference_program_difficulty_levels_path(conference_id: @conference.short_title),
notice: 'Difficulty level successfully updated.'
else

View file

@ -26,7 +26,7 @@ module Admin
end
def update
if @event_type.update_attributes(event_type_params)
if @event_type.update(event_type_params)
redirect_to admin_conference_program_event_types_path(conference_id: @conference.short_title),
notice: 'Event type successfully updated.'
else

View file

@ -72,7 +72,7 @@ module Admin
def update
@languages = @program.languages_list
if @event.update_attributes(event_params)
if @event.update(event_params)
if request.xhr?
render js: 'index'
@ -142,7 +142,7 @@ module Admin
@votes = @event.votes.includes(:user)
if (votes = current_user.votes.find_by_event_id(params[:id]))
votes.update_attributes(rating: params[:rating])
votes.update(rating: params[:rating])
else
@myvote = @event.votes.build
@myvote.user = current_user

View file

@ -26,7 +26,7 @@ module Admin
def edit; end
def update
if @lodging.update_attributes(lodging_params)
if @lodging.update(lodging_params)
redirect_to admin_conference_lodgings_path(conference_id: @conference.short_title),
notice: 'Lodging successfully updated.'
else

View file

@ -27,7 +27,7 @@ module Admin
def edit; end
def update
if @organization.update_attributes(organization_params)
if @organization.update(organization_params)
redirect_to admin_organizations_path,
notice: 'Organization successfully updated'
else

View file

@ -12,11 +12,12 @@ module Admin
def update
authorize! :update, @conference.program
@program = @conference.program
params['program']['languages'] = params['program']['languages'].join(',') if params['program']['languages'].present?
@program.assign_attributes(program_params)
send_mail_on_schedule_public = @program.notify_on_schedule_public?
event_schedules_count_was = @program.event_schedules.count
if @program.update_attributes(program_params)
if @program.save
ConferenceScheduleUpdateMailJob.perform_later(@conference) if send_mail_on_schedule_public
respond_to do |format|
format.html do
@ -40,7 +41,7 @@ module Admin
private
def program_params
params.require(:program).permit(:rating, :schedule_public, :schedule_interval, :schedule_fluid, :languages, :blind_voting, :voting_start_date, :voting_end_date, :selected_schedule_id)
params.require(:program).permit(:rating, :schedule_public, :schedule_interval, :schedule_fluid, :blind_voting, :voting_start_date, :voting_end_date, :selected_schedule_id, :languages)
end
end
end

View file

@ -3,7 +3,7 @@
module Admin
class QuestionsController < Admin::BaseController
load_and_authorize_resource :conference, find_by: :short_title
load_and_authorize_resource through: :conference, except: [:new, :create]
load_and_authorize_resource except: [:new, :create]
def index
authorize! :index, Question.new(conference_id: @conference.id)
@ -48,7 +48,7 @@ module Admin
# PUT questions/1
def update
if @question.update_attributes(question_params)
if @question.update(question_params)
redirect_to admin_conference_questions_path(conference_id: @conference.short_title), notice: "Question '#{@question.title}' for #{@conference.short_title} successfully updated."
else
redirect_to admin_conference_questions_path(conference_id: @conference.short_title), notice: "Update of questions for #{@conference.short_title} failed. #{@question.errors.full_messages.join('. ')}"
@ -58,7 +58,7 @@ module Admin
# Update questions used for the conference
def update_conference
authorize! :update, Question.new(conference_id: @conference.id)
if @conference.update_attributes(conference_params)
if @conference.update(conference_params)
redirect_to admin_conference_questions_path(conference_id: @conference.short_title), notice: "Questions for #{@conference.short_title} successfully updated."
else
redirect_to admin_conference_questions_path(conference_id: @conference.short_title), notice: "Update of questions for #{@conference.short_title} failed."

View file

@ -20,7 +20,7 @@ module Admin
respond_to do |format|
format.html
format.json do
render json: RegistrationDatatable.new(view_context, conference: @conference)
render json: RegistrationDatatable.new({}, conference: @conference, view_context: view_context)
end
format.pdf { render 'index', layout: false }
format.xlsx do
@ -37,9 +37,9 @@ module Admin
def edit; end
def update
@user.update_attributes(user_params)
@user.update(user_params)
@registration.update_attributes(registration_params)
@registration.update(registration_params)
if @registration.save
redirect_to admin_conference_registrations_path(@conference.short_title),
notice: "Successfully updated registration for #{@registration.user.email}!"

View file

@ -25,7 +25,7 @@ module Admin
end
def update
if @resource.update_attributes(resource_params)
if @resource.update(resource_params)
redirect_to admin_conference_resources_path(conference_id: @conference.short_title),
notice: 'Resource successfully updated.'
else

View file

@ -36,7 +36,7 @@ module Admin
def update
role_name = @role.name
if @role.update_attributes(role_params)
if @role.update(role_params)
url = if @track
admin_conference_program_track_role_path(@conference.short_title, @track, @role.name)
else

View file

@ -26,7 +26,7 @@ module Admin
end
def update
if @room.update_attributes(room_params)
if @room.update(room_params)
redirect_to admin_conference_venue_rooms_path(conference_id: @conference.short_title),
notice: 'Room successfully updated.'
else

View file

@ -25,7 +25,7 @@ module Admin
end
def update
if @splashpage.update_attributes(splashpage_params)
if @splashpage.update(splashpage_params)
redirect_to admin_conference_splashpage_path,
notice: 'Splashpage successfully updated.'
else

View file

@ -28,7 +28,7 @@ module Admin
end
def update
if @sponsor.update_attributes(sponsor_params)
if @sponsor.update(sponsor_params)
redirect_to admin_conference_sponsors_path(
conference_id: @conference.short_title),
notice: 'Sponsor successfully updated.'

View file

@ -27,7 +27,7 @@ module Admin
end
def update
if @sponsorship_level.update_attributes(sponsorship_level_params)
if @sponsorship_level.update(sponsorship_level_params)
redirect_to admin_conference_sponsorship_levels_path(
conference_id: @conference.short_title),
notice: 'Sponsorship level successfully updated.'

View file

@ -28,7 +28,7 @@ module Admin
# PUT questions/1
def update
if @survey_question.update_attributes(survey_question_params)
if @survey_question.update(survey_question_params)
redirect_to admin_conference_survey_path(@conference.short_title, @survey), notice: 'Successfully updated Survey Question.'
else
@url = admin_conference_survey_survey_question_path(@conference.short_title, @survey, @survey_question)

View file

@ -28,7 +28,7 @@ module Admin
end
def update
if @survey.update_attributes(survey_params)
if @survey.update(survey_params)
redirect_to admin_conference_surveys_path(@conference.short_title)
else
@url = admin_conference_survey_path(@conference.short_title, @survey)

View file

@ -17,7 +17,7 @@ module Admin
def create
@ticket = @conference.tickets.new(ticket_params)
if @ticket.save(ticket_params)
if @ticket.save
redirect_to admin_conference_tickets_path(conference_id: @conference.short_title),
notice: 'Ticket successfully created.'
else
@ -29,7 +29,7 @@ module Admin
def edit; end
def update
if @ticket.update_attributes(ticket_params)
if @ticket.update(ticket_params)
redirect_to admin_conference_tickets_path(conference_id: @conference.short_title),
notice: 'Ticket successfully updated.'
else

View file

@ -56,7 +56,7 @@ module Admin
def edit; end
def update
if @track.update_attributes(track_params)
if @track.update(track_params)
redirect_to admin_conference_program_tracks_path(conference_id: @conference.short_title),
notice: 'Track successfully updated.'
else
@ -122,7 +122,7 @@ module Admin
end
def update_selected_schedule
if @track.update_attributes(params.require(:track).permit(:selected_schedule_id))
if @track.update(params.require(:track).permit(:selected_schedule_id))
respond_to do |format|
format.js { render json: {} }
end

View file

@ -23,7 +23,7 @@ module Admin
respond_to do |format|
format.html
format.json do
render json: UserDatatable.new(view_context)
render json: UserDatatable.new(view_context: view_context)
end
end
end
@ -56,7 +56,7 @@ module Admin
end
end
if @user.update_attributes(user_params)
if @user.update(user_params)
redirect_to admin_users_path, notice: "Updated #{@user.name} (#{@user.email})!" + message
else
redirect_to admin_users_path, error: "Could not update #{@user.name} (#{@user.email}). #{@user.errors.full_messages.join('. ')}."

View file

@ -25,7 +25,7 @@ module Admin
end
def update
if @venue.update_attributes(venue_params)
if @venue.update(venue_params)
redirect_to admin_conference_venue_path(conference_id: @conference.short_title),
notice: 'Venue was successfully updated.'
else

View file

@ -26,7 +26,7 @@ module Admin
end
def update
if @conference.update_attributes(conference_params)
if @conference.update(conference_params)
redirect_to admin_conference_volunteers_info_path(conference_id: params[:conference_id]), notice: 'Volunteering options were successfully updated.'
else
redirect_to admin_conference_volunteers_info_path(conference_id: params[:conference_id]), error: "Volunteering options update failed: #{@conference.errors.full_messages.join '. '}"

View file

@ -36,7 +36,7 @@ class BoothsController < ApplicationController
def update
@url = conference_booth_path(@conference.short_title, @booth.id)
@booth.update_attributes(booth_params)
@booth.update(booth_params)
if @booth.save
redirect_to conference_booths_path,

View file

@ -24,7 +24,7 @@ class ConferenceRegistrationsController < ApplicationController
end
authorize! :new, @registration, message: message
# @user variable needs to be set so that _sign_up_form_embedded works properly
# @user needs to be set for devise/registrations/new_embedded
@user = @registration.build_user
end
@ -42,7 +42,7 @@ class ConferenceRegistrationsController < ApplicationController
@registration = @conference.registrations.new(registration_params)
@user = if current_user.nil?
# @user variable needs to be set so that _sign_up_form_embedded works properly
# @user needs to be set for devise/registrations/new_embedded
@registration.build_user(user_params)
else
current_user
@ -72,7 +72,7 @@ class ConferenceRegistrationsController < ApplicationController
end
def update
if @registration.update_attributes(registration_params)
if @registration.update(registration_params)
redirect_to conference_conference_registration_path(@conference.short_title),
notice: 'Registration was successfully updated.'
else

View file

@ -3,16 +3,6 @@
class RegistrationsController < Devise::RegistrationsController
prepend_before_action :check_captcha, only: [:create]
def edit
@openids = Openid.where(user_id: current_user.id).order(:provider)
super
end
def update
@openids = Openid.where(user_id: current_user.id).order(:provider)
super
end
protected
def after_update_path_for(resource)

View file

@ -27,14 +27,14 @@ class SurveysController < ApplicationController
reply_text = survey_submission[survey_question.id.to_s].reject(&:blank?).join(',')
if reply
reply.update_attributes(text: reply_text) unless reply.text == reply_text
reply.update(text: reply_text) unless reply.text == reply_text
else
survey_question.survey_replies.create!(text: reply_text, user: current_user)
end
user_survey_submission = @survey.survey_submissions.find_by(user: current_user)
if user_survey_submission
user_survey_submission.update_attributes(updated_at: Time.current)
user_survey_submission.update_attribute(:updated_at, Time.current)
else
@survey.survey_submissions.create!(user: current_user)
end

View file

@ -31,7 +31,7 @@ class TracksController < ApplicationController
end
def update
if @track.update_attributes(track_params)
if @track.update(track_params)
redirect_to conference_program_tracks_path(conference_id: @conference.short_title),
notice: 'Track request successfully updated.'
else

View file

@ -1,6 +1,7 @@
# frozen_string_literal: true
class UsersController < ApplicationController
before_action :authenticate_user!, only: :search
load_and_authorize_resource
# GET /users/1
@ -22,6 +23,14 @@ class UsersController < ApplicationController
end
end
def search
respond_to do |format|
format.json do
render json: { users: User.where('username like ?', "%#{params[:query]}%").select(:username, :id) }
end
end
end
private
# Only allow a trusted parameter "white list" through.

View file

@ -1,8 +1,15 @@
# frozen_string_literal: true
class RegistrationDatatable < AjaxDatatablesRails::Base
class RegistrationDatatable < AjaxDatatablesRails::ActiveRecord
extend Forwardable
def_delegator :@view, :edit_admin_conference_registration_path
def initialize(params, opts = {})
@view = opts[:view_context]
super
end
def view_columns
@view_columns ||= {
id: { source: 'Registration.id', cond: :eq },

View file

@ -1,6 +1,8 @@
# frozen_string_literal: true
class UserDatatable < AjaxDatatablesRails::Base
extend Forwardable
def_delegator :@view, :show_roles
def_delegator :@view, :admin_user_path
def_delegator :@view, :edit_admin_user_path

View file

@ -88,14 +88,6 @@ module ApplicationHelper
end
end
def redirect_back_or_to(options = {}, response_status = {})
if request.env['HTTP_REFERER']
redirect_back(fallback_location: root_path)
else
redirect_to options, response_status
end
end
def concurrent_events(event)
return nil unless event.scheduled? && event.program.selected_event_schedules
@ -123,14 +115,6 @@ module ApplicationHelper
user_selector_input(:speakers, form, '', true)
end
def responsibles_selector_input(form)
user_selector_input(
:responsibles,
form,
"The people responsible for the #{t 'booth'}. You can only select existing users."
)
end
def user_selector_input(field, form, hint = '', multiple = true)
users = User.where(is_disabled: false).pluck(:id, :name, :username, :email).map { |user| [user[0], user[1].blank? ? user[2] : user[1], user[2], user[3]] }.sort_by { |user| user[1].downcase }
form.input(

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module EventTypesHelper
##
# Includes functions related to event_types
##
##
# ====Returns
# * +String+ -> number of registrations / max allowed registrations
def event_type_select_options(event_types = {})
event_types.map { |type| ["#{type.title} - #{show_time(type.length)}", type.id] }
end
end

View file

@ -46,14 +46,6 @@ module EventsHelper
end
end
def track_selector_input(form)
if @program.tracks.confirmed.cfp_active.any?
form.input :track_id, as: :select,
collection: @program.tracks.confirmed.cfp_active.pluck(:name, :id),
include_blank: '(Please select)'
end
end
def rating_tooltip(event, max_rating)
"#{event.average_rating}/#{max_rating}, #{pluralize(event.voters.length, 'vote')}"
end

View file

@ -10,6 +10,8 @@ module UsersHelper
end
def omniauth_configured
return Devise.omniauth_providers if OmniAuth.config.test_mode
providers = []
Devise.omniauth_providers.each do |provider|
provider_key = "#{provider}_key"

View file

@ -28,8 +28,8 @@ class Conference < ApplicationRecord
delegate :city, :country_name, to: :venue, allow_nil: true
delegate :name, :street, to: :venue, prefix: true, allow_nil: true
has_many :physical_tickets, through: :ticket_purchases
has_many :ticket_purchases, dependent: :destroy
has_many :physical_tickets, through: :ticket_purchases
has_many :payments, dependent: :destroy
has_many :supporters, through: :ticket_purchases, source: :user
has_many :tickets, dependent: :destroy

View file

@ -268,7 +268,7 @@ class Program < ApplicationRecord
def normalize_event_types_length
event_types.each do |event_type|
new_length = event_type.length > schedule_interval ? event_type.length - (event_type.length % schedule_interval) : schedule_interval
event_type.update_attributes length: new_length
event_type.update_attribute(:length, new_length)
end
end
end

View file

@ -77,7 +77,7 @@ class TicketPurchase < ApplicationRecord
end
def pay(payment)
update_attributes(paid: true, payment: payment)
update(paid: true, payment: payment)
PhysicalTicket.transaction do
quantity.times { physical_tickets.create }
end

View file

@ -7,7 +7,6 @@ class UserDisabled < StandardError
end
class User < ApplicationRecord
rolify
# prevent N+1 queries with has_cached_role? by preloading roles *always*
default_scope { preload(:roles) }
@ -17,8 +16,15 @@ class User < ApplicationRecord
where('ticket_purchases.conference_id = ?', conference)
end
end
has_many :tickets, through: :ticket_purchases, source: :ticket do
def for_registration conference
where(conference: conference, registration_ticket: true).first
end
end
has_many :users_roles
has_many :roles, through: :users_roles, dependent: :destroy
rolify
has_paper_trail on: [:create, :update], ignore: [:sign_in_count, :remember_created_at, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip, :unconfirmed_email,
:avatar_content_type, :avatar_file_size, :avatar_updated_at, :updated_at, :confirmation_sent_at, :confirmation_token, :reset_password_token]
@ -69,11 +75,7 @@ class User < ApplicationRecord
end
has_many :events_registrations, through: :registrations
has_many :payments, dependent: :destroy
has_many :tickets, through: :ticket_purchases, source: :ticket do
def for_registration conference
where(conference: conference, registration_ticket: true).first
end
end
has_many :votes, dependent: :destroy
has_many :voted_events, through: :votes, source: :events
has_many :subscriptions, dependent: :destroy
@ -154,9 +156,9 @@ class User < ApplicationRecord
raise UserDisabled if user&.is_disabled
if user
user.update_attributes(email: attributes[:email],
last_sign_in_at: user.current_sign_in_at,
current_sign_in_at: Time.current)
user.update(email: attributes[:email],
last_sign_in_at: user.current_sign_in_at,
current_sign_in_at: Time.current)
else
begin
user = create!(username: username, email: attributes[:email])

View file

@ -51,7 +51,7 @@ class TicketPdf < Prawn::Document
when 'http', 'ftp:' # CDNs
begin
open(@conference.picture.ticket.url)
rescue OpenURI::HTTPError
rescue OpenURI::HTTPError, Errno::ENOENT
nil
end
when '/sys' # local storage

View file

@ -1,5 +1,9 @@
%h1
Editing
= @booth.title
= render 'booths/form'
.row
.col-md-12
.page-header
%h1
Edit #{t'booth'}
= @booth.title
.row
.col-md-8
= render 'booths/form'

View file

@ -1,3 +1,8 @@
%h1 New #{t'booth'}
= render 'booths/form'
.row
.col-md-12
.page-header
%h1
New #{t'booth'}
.row
.col-md-8
= render 'booths/form'

View file

@ -1,28 +1,20 @@
.row
.col-md-12
.page-header
%h1
Call for
= cfp.cfp_type.capitalize
.row
.col-md-8
= semantic_form_for(cfp, url: cfp_form_url(cfp, conference),
html: { multipart: true,
data: { end_conference: conference.end_date.to_s } }) do |f|
= f.input :cfp_type, as: :hidden
= f.input :start_date, as: :string,
input_html: { class: 'form-control',
id: 'registration-period-start-datepicker' }
= f.input :end_date, as: :string,
input_html: { class: 'form-control',
id: 'registration-period-end-datepicker' }
= f.input :description, hint: markdown_hint,
input_html: { rows: 2, data: { provide: 'markdown' } }
- if cfp.cfp_type == 'events'
= f.input :enable_registrations, as: :boolean,
hint: 'Allow submitters to request registration?'
- else
= f.input :enable_registrations, as: :hidden
%p.text-right
= f.action :submit, as: :button,
button_html: { class: 'btn btn-primary' }
= form_for(@cfp, url: (@cfp.new_record? ? admin_conference_program_cfps_path : admin_conference_program_cfp_path(@conference.short_title, @cfp)), data: { end_conference: @conference.end_date.to_s }) do |f|
= f.hidden_field :cfp_type
.form-group
= f.label :start_date, "Start Date"
= f.text_field :start_date, class: 'form-control', id: 'registration-period-start-datepicker', start_date: @conference.start_date, end_date: @conference.end_date
.form-group
= f.label :end_date, "End Date"
= f.text_field :end_date, class: 'form-control', id: 'registration-period-end-datepicker', start_date: @conference.start_date, end_date: @conference.end_date
.form-group
= f.label :description, "Description"
= f.text_area :description, rows: 2, data: { provide: 'markdown' }
%span.help-block
= markdown_hint
- if @cfp.cfp_type == 'events'
.checkbox
%label
= f.check_box :enable_registrations
Allow submitters to request registration?
%p.text-right
= f.submit nil, { class: 'btn btn-success' }

View file

@ -1 +1,9 @@
= render 'form', cfp: @cfp, conference: @conference
.row
.col-md-12
.page-header
%h1
Call for
= @cfp.cfp_type.capitalize
.row
.col-md-8
= render 'form'

View file

@ -1 +1,9 @@
= render 'form', cfp: @cfp, conference: @conference
.row
.col-md-12
.page-header
%h1
Call for
= @cfp.cfp_type.capitalize
.row
.col-md-8
= render 'form'

View file

@ -13,10 +13,13 @@
#resource-placeholder{ style: 'background-color:#d3d3d3; float: left; width: 400px; height: 250px; margin: 5px; border-width: 1px; border-style: solid; border-color: rgba(0,0,0,.2);' }
.row
.col-md-6
= semantic_form_for(@commercial, url: admin_conference_commercials_path(conference_id: @conference.short_title)) do |f|
= f.input :url, label: 'URL', as: :string, input_html: { required: 'required', autofocus: true },
hint: 'Just paste the url of your video/photo provider. YouTube, Vimeo, SpeakerDeck, SlideShare, Instagram, Flickr.'
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary pull-right', disabled: true }
= form_for(@commercial, url: admin_conference_commercials_path(conference_id: @conference.short_title)) do |f|
.form-group
= f.label :url
= f.url_field :url, required: 'required', autofocus: true, class: 'form-control'
%span.help-block
Just paste the url of your video/photo provider. YouTube, Vimeo, SpeakerDeck, SlideShare, Instagram, Flickr.
= f.submit nil, { class: 'btn btn-primary pull-right', id: 'commercial_submit_action', disabled: true }
%hr
- @commercials.each_slice(3) do |slice|
@ -29,9 +32,13 @@
= render partial: 'shared/media_item', locals: { commercial: commercial }
.caption
- if can? :update, commercial
= semantic_form_for commercial, url: admin_conference_commercial_path(conference_id: @conference.short_title, id: commercial) do |f|
= f.input :url, label: 'URL', as: :string, input_html: { id: "commercial_url_#{commercial.id}", required: 'required' }, hint: 'Just paste the url of your video/photo provider'
= f.action :submit, as: :button, button_html: { class: 'btn btn-success' }, label: 'Update'
= form_for commercial, url: admin_conference_commercial_path(conference_id: @conference.short_title, id: commercial) do |f|
.form-group
= f.label :url
= f.url_field :url, id: "commercial_url_#{commercial.id}", required: 'required'
%span.help-block
Just paste the url of your video/photo provider
= f.submit nil, { class: 'btn btn-success' }
- if can? :destroy, commercial
= link_to 'Delete', admin_conference_commercial_path(@conference.short_title, commercial.id),
method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger'

View file

@ -0,0 +1,95 @@
%h4
Basic Information
%hr
- if f.object.new_record?
.form-group
= f.label :organization, "Organization"
= f.select :organization_id, Organization.accessible_by(current_ability, :update).pluck(:name, :id)
.form-group
= f.label :title, "Title"
%abbr{title: 'This field is required'} *
= f.text_field :title, required: true, class: 'form-control', placeholder: 'Title'
%span.help-block
The name of your conference as it shall appear throughout the site. Example: 'openSUSE Conference 2013'
.form-group
= f.label :title, "Short Title"
%abbr{title: 'This field is required'} *
= f.text_field :short_title, required: true, pattern: '[a-zA-Z0-9_-]+', title: 'Only letters, numbers, underscores, and dashes.', prepend: conferences_url + '/', class: 'form-control', placeholder: 'Short Title'
%span.help-block
A short and unique handle for your conference, using only letters, numbers, underscores, and dashes. This will be used to identify your conference in URLs etc. Example:
%em
froscon2011
- unless f.object.new_record? # We are showing more fields on the edit form
.form-group
= f.text_area :description, rows: 5, data: { provide: 'markdown' }, class: 'form-control'
%span.help-block
= markdown_hint('A description of the conference.')
.form-group
= f.color_field :color, size: 6, class: 'form-control'
%span.help-block
The color will be used for the dashboard, for instance.
.form-group
= f.label :picture, 'Conference Logo'
- if f.object.picture?
= image_tag f.object.picture.thumb.url
= f.file_field :picture
%span.help-block
This will be displayed on the front page.
= f.hidden_field :picture_cache
= f.select :ticket_layout, Conference.ticket_layouts.keys, {}, class: 'form-control'
%span.help-block
Layout type for tickets of the conference.
%h4
Scheduling
%hr
= f.time_zone_select :timezone, nil, { default: 'UTC' }, { class: 'form-control' }
%span.help-block
Please select in what time zone your conference will take place.
.form-group
= f.label :start_date, "Start Date"
%abbr{title: 'This field is required'} *
= f.text_field :start_date, id: 'conference-start-datepicker', required: true, class: 'form-control'
.form-group
= f.label :end_date, "End Date"
%abbr{title: 'This field is required'} *
= f.text_field :end_date, id: 'conference-end-datepicker', required: true, class: 'form-control'
- unless f.object.new_record? # We are showing more fields on the edit form
.form-group
= f.number_field :start_hour, size: 2, min: 0, max: 23, class: 'form-control'
%span.help-block
= rescheduling_hint(@affected_event_count)
.form-group
= f.number_field :end_hour, size: 2, min: 1, max: 24, class: 'form-control'
%span.help-block
= rescheduling_hint(@affected_event_count)
%h4
Registrations
%hr
.form-group
= f.number_field :registration_limit, in: 0..9999, class: 'form-control'
%span.help-block
Limit the number of registrations to the conference (0 no limit). Please note that the registration limit
does not apply to speakers of confirmed events, they will still be able to register even if the limit has been reached.
You currently have
= pluralize(@conference.registrations.count, 'registration')
%h4
Booths
%hr
.form-group
= f.number_field :booth_limit, in: 0..9999, class: 'form-control'
%span.help-block
= (t'booth').capitalize
limit is the maximum number of
= (t'booth').pluralize
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
= (t'booth').pluralize
than the conference can accommodate. You currently have
= pluralize(@conference.booths.accepted.count, "accepted #{t'booth'}") + '.'
%p.text-right
- if f.object.new_record?
= f.submit nil, { class: 'btn btn-success' }
- else
= f.submit nil, { class: 'btn btn-success', data: { confirm: 'Are you sure you want to proceed?' } }

View file

@ -6,27 +6,5 @@
The most basic settings of your conference
.row
.col-md-8
= semantic_form_for(@conference, url: admin_conference_path(@conference.short_title), html: {multipart: true}) do |f|
= f.input :title, hint: "The full title of the conference, e.g. 'openSUSE Conference 2014'"
= f.input :short_title, hint: "A short title, e.g. 'oSC14', to be used in URLs"
= f.input :description, hint: markdown_hint('A description of the conference.'), input_html: { rows: 5, data: { provide: 'markdown' } }
= f.input :color, hint: 'The color will be used eg for the dashboard.', input_html: {size: 6, type: 'color'}
= f.label 'Conference Logo'
%br
- if @conference.picture?
= image_tag @conference.picture.thumb.url
= f.input :picture, label: false, hint: 'This will be displayed on the front page.'
= f.hidden_field :picture_cache
= f.input :ticket_layout, as: :select, collection: Conference.ticket_layouts.keys, hint: "Layout type for tickets of the conference."
= f.inputs name: 'Scheduling' do
= 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}, 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: "#{(t'booth').capitalize } limit is the maximum number of #{(t'booth').pluralize} 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 #{(t'booth').pluralize} than the conference can accommodate. You currently have " + pluralize(@conference.booths.accepted.count, "accepted #{t'booth'}") +'.'
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary', data: { confirm: 'Are you sure you want to proceed?' } }
= form_for(@conference, url: admin_conference_path(@conference.short_title), html: {multipart: true}) do |f|
= render partial: 'form_fields', locals: { f: f }

View file

@ -1,15 +1,4 @@
.row
.col-md-8
= semantic_form_for(@conference, url: admin_conferences_path) do |f|
= f.inputs 'Basic Information' do
= f.input :organization, as: :select, collection: @organizations
= f.input :title, hint: "The name of your conference as it shall appear throughout the site. Example: 'OpenSUSE Conference 2013'",
input_html: { required: 'required' }
= f.input :short_title, hint: "A short and unique handle for your conference, using only letters, numbers, underscores, and dashes. This will be used to identify your conference in URLs etc. Example: 'froscon2011'",
input_html: { required: 'required', pattern: '[a-zA-Z0-9_-]+', title: 'Only letters, numbers, underscores, and dashes.' }, prepend: conferences_url + '/'
= f.inputs 'Scheduling' do
= f.input :timezone, as: :time_zone, default: Time.zone.name, hint: 'Please select in what time zone your conference will take place.'
= f.input :start_date, as: :string, input_html: { id: 'conference-start-datepicker', required: 'required' }
= f.input :end_date, as: :string, input_html: { id: 'conference-end-datepicker', required: 'required' }
= f.actions do
= f.action :submit, button_html: {class: 'btn btn-success pull-right'}
= form_for(@conference, url: admin_conferences_path) do |f|
= render partial: 'form_fields', locals: { f: f }

View file

@ -6,17 +6,53 @@
How people can contact you
.row
.col-md-8
= semantic_form_for(@contact, url: admin_conference_contact_path(@conference.short_title), html: {multipart: true}) do |f|
= f.inputs name: 'Mail' do
= f.input :email, input_html: { autofocus: true }, hint: 'Contact email address for your conference. Will be used as reply-to address in emails sent out by the system.'
= f.input :sponsor_email, hint: 'This will appear in the sponsor segment of the splash for the sponsors to contact to the organizers'
= f.inputs name: 'Social Media' do
= f.input :social_tag, hint: "The hashtag you'll use on Twitter and Google+. Don't include the '#' sign!'"
= f.input :blog, hint: 'This will appear in the social media section as a link to your conference blog.'
= f.input :facebook, hint: 'This will appear in the social media section as a link to the Facebook page of your Conference'
= f.input :googleplus, label: 'Google+ Url', hint: 'This will appear in the social media section as a link to the Google+ Page of your Conference'
= f.input :twitter, hint: 'This will appear in the social media section as a link to the Twitter Page of your Conference'
= f.input :instagram, hint: 'This will appear in the social media section as a link to the Instagram Page of your Conference'
= f.input :mastodon, hint: 'This will appear in the social media section as a link to the Mastodon Page of your Conference'
= f.input :youtube, hint: 'This will appear in the social media section as a link to the YouTube channel for your conference.'
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= form_for(@contact, url: admin_conference_contact_path(@conference.short_title), html: {multipart: true}) do |f|
%h4
Mail
%hr
.form-group
= f.label :email
= f.email_field :email, autofocus: true, class: 'form-control'
%span.help-block
Contact email address for your conference. Will be used as reply-to address in emails sent out by the system.
= f.label :sponsor_email
= f.email_field :sponsor_email, class: 'form-control'
%span.help-block
This will appear in the sponsor segment of the splash for the sponsors to contact to the organizers.
%h4
Social Media
%hr
.form-group
= f.label :social_tag
= f.text_field :social_tag, class: 'form-control'
%span.help-block
The hashtag you'll use on Twitter and Google+. Don't include the '#' sign!
= f.label :blog, 'Blog URL'
= f.url_field :blog, class: 'form-control'
%span.help-block
This will appear in the social media section as a link to your conference blog.
= f.label :facebook, 'Facebook URL'
= f.url_field :facebook, class: 'form-control'
%span.help-block
This will appear in the social media section as a link to the Facebook page of your Conference'
= f.label :googleplus, 'Google+ URL'
= f.url_field :googleplus, class: 'form-control'
%span.help-block
This will appear in the social media section as a link to the Google+ Page of your Conference'
= f.label :twitter, 'Twitter URL'
= f.url_field :twitter, class: 'form-control'
%span.help-block
This will appear in the social media section as a link to the Twitter Page of your Conference'
= f.label :instagram, 'Insta URL'
= f.url_field :instagram, class: 'form-control'
%span.help-block
This will appear in the social media section as a link to the Instagram Page of your Conference
= f.label :mastodon, 'Mastodon URL'
= f.url_field :mastodon, class: 'form-control'
%span.help-block
This will appear in the social media section as a link to the Mastodon Page of your Conference
= f.label :youtube, 'Youtube URL'
= f.url_field :youtube, class: 'form-control'
%span.help-block
This will appear in the social media section as a link to the YouTube channel for your conference.
= f.submit nil, class: 'btn btn-primary'

View file

@ -1,16 +1,13 @@
.row
.col-md-12
.page-header
%h1
- if @difficulty_level.new_record?
New
Difficulty Level
= @difficulty_level.title
.row
.col-md-8
= semantic_form_for(@difficulty_level, url: (@difficulty_level.new_record? ? admin_conference_program_difficulty_levels_path : admin_conference_program_difficulty_level_path(@conference.short_title, @difficulty_level))) do |f|
= f.input :title, input_html: { autofocus: true }, required: true
= f.input :description, input_html: {rows: 3, class: 'span6'}
= f.input :color, input_html: {size: 6, type: 'color'}
%p.text-right
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= form_for(@difficulty_level, url: (@difficulty_level.new_record? ? admin_conference_program_difficulty_levels_path : admin_conference_program_difficulty_level_path(@conference.short_title, @difficulty_level))) do |f|
.form-group
= f.label :title
%abbr{title: 'This field is required'} *
= f.text_field :title, autofocus: true , required: true, class: 'form-control'
.form-group
= f.label :description
= f.text_area :description, rows: 3, class: 'span6 form-control'
.form-group
= f.label :color
= f.color_field :color, class: 'form-control'
%p.text-right
= f.submit nil, class: 'btn btn-primary'

View file

@ -0,0 +1,9 @@
.row
.col-md-12
.page-header
%h1
Edit Difficulty Level
= @difficulty_level.title
.row
.col-md-8
= render partial: 'form'

View file

@ -0,0 +1,8 @@
.row
.col-md-12
.page-header
%h1
Create Difficulty Level
.row
.col-md-8
= render partial: 'form'

View file

@ -1,6 +1,6 @@
.row
.col-md-8
= semantic_form_for(@settings, url: admin_conference_email_path(@conference.short_title, @conference.email_settings), html: {multipart: true}) do |f|
= form_for(@settings, url: admin_conference_email_path(@conference.short_title, @conference.email_settings), html: {multipart: true}) do |f|
.row
.col-md-12
%div{ role: 'tabpanel' }
@ -19,43 +19,77 @@
/ Tab panes
.tab-content
#onboarding.tab-pane.active{ role: 'tabpanel' }
= f.input :send_on_registration, label: 'Send an email when the user registers for the conference?', input_html: {'data-name' => 'email_settings_registration_subject', 'class' => 'send_on_radio'}
= f.input :registration_subject
= f.input :registration_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_registration, data: {name: 'email_settings_registration_subject'}, class: 'send_on_radio'
Send an email when the user registers for the conference?
.form-group
= f.label :registration_subject, 'Subject'
= f.text_field :registration_subject, class: 'form-control'
.form-group
= f.label :registration_body, 'Body'
= f.text_area :registration_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_registration_subject', 'data-subject-text' => 'Thank you for registering',
'data-body-input-id' => 'email_settings_registration_body',
'data-body-text' => "Dear {name},\n\nThank you for Registering for the conference {conference}.\nPlease complete your registration by filling out your travel information.\n\nIf you are unable to attend please unregister online:\n{registrationlink}\n\nFeel free to contact us with any questions or concerns.\nWe look forward to see you there.\n\nBest wishes\n\n{conference} Team" } Load Template
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'registration_help' } Show Help
= render partial: 'help', locals: { id: 'registration_help', show_event_variables: false }
#proposal.tab-pane{ role: 'tabpanel' }
= f.input :send_on_submitted_proposal, label: 'Send an email when the proposal is submitted', input_html: { 'data-name' => 'email_settings_proposal_submited_subject', 'class' => 'send_on_radio' }
= f.input :submitted_proposal_subject
= f.input :submitted_proposal_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_submitted_proposal, data: { name: 'email_settings_proposal_submited_subject'}, class: 'send_on_radio'
Send an email when the proposal is submitted
.form-group
= f.label :submitted_proposal_subject, 'Subject'
= f.text_field :submitted_proposal_subject, class: 'form-control'
.form-group
= f.label :submitted_proposal_body, 'Body'
= f.text_area :submitted_proposal_body, input_html: { rows: 10, cols: 20 }, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_submitted_proposal_subject', 'data-subject-text' => 'Your proposal has been submitted successfully', 'data-body-input-id' => 'email_settings_submitted_proposal_body', 'data-body-text' => "Dear {name}\n\nThank you for submitting your proposal {eventtitle}.\n\nOur team will review it and get back to you as soon as possible.\n\nFeel free to contact us with any questions or concerns.\n\nBest wishes\n\n{conference} Team" } Load Template
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'submitted_proposal_help' } Show Help
= render partial: 'help', locals: { id: 'submitted_proposal_help', show_event_variables: true }
= f.input :send_on_accepted, label: 'Send an email when the proposal is accepted?', input_html: { 'data-name' => 'email_settings_accepted_subject', 'class' => 'send_on_radio' }
= f.input :accepted_subject
= f.input :accepted_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_accepted, data: { name: 'email_settings_accepted_subject' }, class: 'send_on_radio'
Send an email when the proposal is accepted?
.form-group
= f.label :accepted_subject, 'Subject'
= f.text_field :accepted_subject, class: 'form-control'
.form-group
= f.label :accepted_body, 'Body'
= f.text_area :accepted_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_accepted_subject',
'data-subject-text' => 'Your submission has been accepted',
'data-body-input-id' => 'email_settings_accepted_body',
'data-body-text' => "Dear {name}\n\nWe are very pleased to inform you that your submission {eventtitle} has been accepted for the conference {conference}.\n\nThe public page of your submission can be found at:\n{proposalslink}\nIf you haven´t already registered for {conference}, please do as soon as possible:\n{registrationlink}\n\nFeel free to contact us with any questions or concerns.\n\nWe look forward to seeing you there.\n\nBest wishes\n\n{conference} Team" } Load Template
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'accepted_help' } Show Help
= render partial: 'help', locals: { id: 'accepted_help', show_event_variables: true }
= f.input :send_on_rejected, label: 'Send an email when the proposal is rejected?', input_html: { 'data-name' => 'email_settings_rejected_subject', 'class' => 'send_on_radio' }
= f.input :rejected_subject
= f.input :rejected_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_rejected, data: { name: 'email_settings_rejected_subject'}, class: 'send_on_radio'
Send an email when the proposal is rejected?
.form-group
= f.label :rejected_subject, 'Subject'
= f.text_field :rejected_subject, class: 'form-control'
.form-group
= f.label :rejected_body, 'Body'
= f.text_area :rejected_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_rejected_subject',
'data-subject-text' => 'Your submission has been rejected',
'data-body-input-id' => 'email_settings_rejected_body',
'data-body-text' => "Dear {name},\n\nThank you for your submission {eventtitle} for the conference {conference}.\nAfter careful consideration we are sorry to inform you that your submission has been rejected.\n\n\nBest wishes\n\n{conference} Team" } Load Template
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'rejected_help' } Show Help
= render partial: 'help', locals: {id: 'rejected_help', show_event_variables: true}
= f.input :send_on_confirmed_without_registration, label: "Send an email when a user has a confirmed proposal, but isn't yet registered?", input_html: {'data-name' => 'email_settings_confirmed_without_registration_subject', 'class' => 'send_on_radio'}
= f.input :confirmed_without_registration_subject
= f.input :confirmed_without_registration_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_confirmed_without_registration, data: {name: 'email_settings_confirmed_without_registration_subject'}, class: 'send_on_radio'
Send an email when a user has a confirmed proposal, but isn't yet registered?
.form-group
= f.label :confirmed_without_registration_subject, 'Subject'
= f.text_field :confirmed_without_registration_subject, class: 'form-control'
.form-group
= f.label :confirmed_without_registration_body, 'Body'
= f.text_area :confirmed_without_registration_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_confirmed_without_registration_subject',
'data-subject-text' => 'Your proposal has been confirmed without registration',
'data-body-input-id' => 'email_settings_confirmed_without_registration_body',
@ -63,27 +97,48 @@
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'confirmed_help' } Show Help
= render partial: 'help', locals: {id: 'confirmed_help', show_event_variables: true}
#notifications.tab-pane{ role: 'tabpanel' }
= f.input :send_on_conference_dates_updated, label: 'This is to notify all participants that the conference dates has been changed.', input_html: { 'data-name' => 'email_settings_conference_dates_updated_subject', 'class' => 'send_on_radio' }
= f.input :conference_dates_updated_subject
= f.input :conference_dates_updated_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_conference_dates_updated, data: { name: 'email_settings_conference_dates_updated_subject'}, class: 'send_on_radio'
Send an email when to all participants if the conference dates are changed?
.form-group
= f.label :conference_dates_updated_subject, 'Subject'
= f.text_field :conference_dates_updated_subject, class: 'form-control'
.form-group
= f.label :conference_dates_updated_body, 'Body'
= f.text_area :conference_dates_updated_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_conference_dates_updated_subject',
'data-subject-text' => 'The dates of the conference have changed',
'data-body-input-id' => 'email_settings_conference_dates_updated_body',
'data-body-text' => "Dear {name},\n\nThe date of {conference} has changed.\n New Dates : {conference_start_date} - {conference_end_date}.\n\nFeel free to contact us with any questions or concerns.\n\nWe look forward to seeing you there.\n\nBest wishes\n\n{conference} Team" } Load Template
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'updated_dates_help' } Show Help
= render partial: 'help', locals: {id: 'updated_dates_help', show_event_variables: false}
= f.input :send_on_conference_registration_dates_updated, label: 'This is to notify all participants that the conference registration dates has been changed.', input_html: {'data-name' => 'email_settings_conference_registration_dates_updated_subject', 'class' => 'send_on_radio'}
= f.input :conference_registration_dates_updated_subject
= f.input :conference_registration_dates_updated_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_conference_registration_dates_updated, data: { name: 'email_settings_conference_registration_dates_updated_subject' }, class: 'send_on_radio'
Send an email when to all participants if the conference registration dates changed?
.form-group
= f.label :conference_registration_dates_updated_subject, 'Subject'
= f.text_field :conference_registration_dates_updated_subject, class: 'form-control'
.form-group
= f.label :conference_registration_dates_updated_body, 'Body'
= f.text_area :conference_registration_dates_updated_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_conference_registration_dates_updated_subject',
'data-subject-text' => 'The registration dates have changed',
'data-body-input-id' => 'email_settings_conference_registration_dates_updated_body',
'data-body-text' => "Dear {name},\n\nThe registration date of {conference} has changed.\n New Dates : {registration_start_date} - {registration_end_date}.\n\nFeel free to contact us with any questions or concerns.\n\nWe look forward to seeing you there.\n\nBest wishes\n\n{conference} Team" } Load Template
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'updated_registrations_dates_help' } Show Help
= render partial: 'help', locals: {id: 'updated_registrations_dates_help', show_event_variables: false}
= f.input :send_on_venue_updated, label: 'Send an email on updating the Venue.', input_html: { 'data-name' => 'email_settings_venue_updated_subject', 'class' => 'send_on_radio' }
= f.input :venue_updated_subject
= f.input :venue_updated_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_venue_updated, data: { name: 'email_settings_venue_updated_subject'}, class: 'send_on_radio'
Send an email on updating the Venue?
.form-group
= f.label :venue_updated_subject, 'Subject'
= f.text_field :venue_updated_subject, class: 'form-control'
.form-group
= f.label :venue_updated_body, 'Body'
= f.text_area :venue_updated_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_venue_updated_subject',
'data-subject-text' => 'The venue has changed',
'data-body-input-id' => 'email_settings_venue_updated_body',
@ -91,18 +146,32 @@
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'updated_venue_help' } Show Help
= render partial: 'help', locals: {id: 'updated_venue_help', show_event_variables: false}
#cfp.tab-pane{ role: 'tabpanel' }
= f.input :send_on_program_schedule_public, hint: 'This will notify all participants when the dates are updated or when the schedule is made public'
= f.input :program_schedule_public_subject, hint: 'This subject will used whenever dates are updated or when the schedule is made public'
= f.input :program_schedule_public_body, input_html: { rows: 10, cols: 20 }
.checkbox
%labl
= f.check_box :send_on_program_schedule_public
Send an email when to all participants if the schedule is made public?
.form-group
= f.label :program_schedule_public_subject, 'Subject'
= f.text_field :program_schedule_public_subject, class: 'form-control'
.form-group
= f.label :program_schedule_public_body, 'Body'
= f.text_area :program_schedule_public_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_program_schedule_public_subject',
'data-subject-text' => 'The schedule has been released',
'data-body-input-id' => 'email_settings_program_schedule_public_body',
'data-body-text' => "Dear {name},\n\nThe schedule for {conference} has been announced.\nLink to Schedule {schedule_link}\n\nBest wishes\n{conference} Team" } Load Template
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'updated_cfp_help' } Show Help
= render partial: 'help', locals: {id: 'updated_cfp_help', show_event_variables: false}
= f.input :send_on_cfp_dates_updated, hint: 'This will notify all participants when the dates are updated or when the schedule is made public'
= f.input :cfp_dates_updated_subject, hint: 'This subject will used whenever dates are updated or when the schedule is made public'
= f.input :cfp_dates_updated_body, input_html: { rows: 10, cols: 20 }
.checkbox
%label
= f.check_box :send_on_cfp_dates_updated
Send an email when to all participants if call for paper dates are updated?
.form-group
= f.label :cfp_dates_updated_subject, 'Subject'
= f.text_field :cfp_dates_updated_subject, class: 'form-control'
.form-group
= f.label :cfp_dates_updated_body, 'Body'
= f.text_area :cfp_dates_updated_body, rows: 10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_cfp_dates_updated_subject',
'data-subject-text' => 'The Call for Papers dates have changed',
'data-body-input-id' => 'email_settings_cfp_dates_updated_body',
@ -110,18 +179,30 @@
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'updated_cfp_help' } Show Help
= render partial: 'help', locals: {id: 'updated_cfp_help', show_event_variables: false}
#booth.tab-pane{ role: 'tabpanel' }
= f.input :send_on_booths_acceptance
= f.input :booths_acceptance_subject
= f.input :booths_acceptance_body, input_html: { rows:10, cols: 20 }
.check_box
%label
= f.check_box :send_on_booths_acceptance
.form-group
= f.label :booths_acceptance_subject, 'Subject'
= f.text_field :booths_acceptance_subject, class: 'form-control'
.form-group
= f.label :booths_acceptance_body, 'Body'
= f.text_area :booths_acceptance_body, rows:10, cols: 20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_booths_acceptance_subject',
'data-subject-text' => "Your #{t'booth'} has been accepted!",
'data-body-input-id' => 'email_settings_booths_acceptance_body',
'data-body-text' => "Dear {name},\n\nWe are pleased to inform you that your #{t'booth'} request {booth_title} has been accepted for the conference {conference}.\nPlease click the confirm button to let us know you can make it as soon as possible!\n\nFeel free to contact us with any questions or concerns.\n\nWe are looking forward to seeing you there.\n\nBest wishes\n\n{conference} Team"} Load Template
%a.btn.btn-link.control_label.template_help_link{ 'data-name' => 'booth_acceptance_help' } Show help
= render partial: 'help', locals: {id: 'booth_acceptance_help', show_event_variables: false}
= f.input :send_on_booths_rejection
= f.input :booths_rejection_subject
= f.input :booths_rejection_body, input_html: { rows:10, cols:20 }
.checkbox
%label
= f.check_box :send_on_booths_rejection
.form-group
= f.label :booths_rejection_subject, 'Subject'
= f.text_field :booths_rejection_subject, class: 'form-control'
.form-group
= f.label :booths_rejection_body, 'Body'
= f.text_area :booths_rejection_body, rows:10, cols:20, class: 'form-control'
%a.btn.btn-link.control_label.load_template{ 'data-subject-input-id' => 'email_settings_booths_rejection_subject',
'data-subject-text' => "Your #{t'booth'} request has been rejected",
'data-body-input-id' => 'email_settings_booths_rejection_body',
@ -131,4 +212,4 @@
.row
.col-md-12
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= f.submit nil, { class: 'btn btn-primary' }

View file

@ -1,19 +1,29 @@
.row
.col-md-12
.page-header
%h1
- if @event_type.new_record?
New
Event Type
= @event_type.title
.row
.col-md-12
= semantic_form_for(@event_type, url: (@event_type.new_record? ? admin_conference_program_event_types_path : admin_conference_program_event_type_path(@conference.short_title, @event_type))) do |f|
= f.input :title, input_html: { autofocus: true }
= f.input :length, input_html: {size: 3, type: 'number', step: @event_type.program.schedule_interval, min: @event_type.program.schedule_interval}
= f.input :description
= f.input :minimum_abstract_length, input_html: {size: 3}
= f.input :maximum_abstract_length, input_html: {size: 3}
= f.input :color, input_html: { size: 6, type: 'color' }
%p.text-right
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= form_for(@event_type, url: (@event_type.new_record? ? admin_conference_program_event_types_path : admin_conference_program_event_type_path(@conference.short_title, @event_type))) do |f|
.form-group
= f.label :title
%abbr{title: 'This field is required'} *
= f.text_field :title, autofocus: true, required: true, class: 'form-control'
.form-group
= f.label :length
= f.number_field :length, size: 3, step: @event_type.program.schedule_interval, min: @event_type.program.schedule_interval, class: 'form-control'
%span.help-block
In steps of
= @event_type.program.schedule_interval
and minimum
= @event_type.program.schedule_interval
.form-group
= f.label :description
= f.text_field :description, class: 'form-control'
.form-group
= f.label :minimum_abstract_length
%abbr{title: 'This field is required'} *
= f.number_field :minimum_abstract_length, size: 3, required: true, class: 'form-control'
.form-group
= f.label :maximum_abstract_length
%abbr{title: 'This field is required'} *
= f.number_field :maximum_abstract_length, size: 3, required: true, class: 'form-control'
.form-group
= f.label :color
= f.color_field :color, class: 'form-control'
%p.text-right
= f.submit nil, class: 'btn btn-primary'

View file

@ -0,0 +1,9 @@
.row
.col-md-12
.page-header
%h1
Edit Event Type
= @event_type.title
.row
.col-md-8
= render partial: 'form'

View file

@ -0,0 +1,8 @@
.row
.col-md-12
.page-header
%h1
Create Event Type
.row
.col-md-8
= render partial: 'form'

View file

@ -6,8 +6,9 @@
%div
%a.pull-right.comment-reply-link{ href: '#' } Reply
.comment-reply
= semantic_form_for :comment, url: comment_admin_conference_program_event_path(@conference.short_title, comment.commentable_id), method: :post do |f|
= f.input :body
= form_for :comment, url: comment_admin_conference_program_event_path(@conference.short_title, comment.commentable_id), method: :post do |f|
.form-group
= f.text_area :body, class: 'form-control'
%input{ name: 'parent', type: 'hidden', value: comment.id }
%input{ name: 'authenticity_token', type: 'hidden', value: '#{form_authenticity_token}' }
%button.btn.btn-primary.pull-right{ name: 'button', type: 'submit' } Add Reply

View file

@ -122,17 +122,19 @@
- cache [@conference, @event, @comments] do
.row
= link_to "Comments (#{@comment_count})", '#', id: 'event-comment-link'
#comments-div
.col-md-12
%h4
Comments
= "(#{@comment_count})"
= link_to('#comment-collapse', class: 'btn btn-link', role: 'button', data: {toggle: "collapse" }) do
Show
%hr
%ul.media
%div
.row-fluid
= semantic_form_for :comment, url: comment_admin_conference_program_event_path(@conference.short_title, @event.id), method: :post do |f|
= f.input :body
= f.submit 'Add Comment', class: 'btn btn-primary pull-right'
%br
%br
- @comments.each do |comment|
%div
= render partial: 'nested_comments', locals: { comment: comment, padding: 0}
.collapse#comment-collapse
- @comments.each do |comment|
= render partial: 'nested_comments', locals: { comment: comment, padding: 0}
= form_for(:comment, url: comment_admin_conference_program_event_path(@conference.short_title, @event.id), method: :post) do |f|
.form-group
= f.text_area :body, class: 'form-control'
.text-right
= f.submit nil, class: 'btn btn-primary'

View file

@ -28,21 +28,21 @@
.modal-dialog
.modal-content
.modal-header
%h1 Add commercials to events
.text-muted
Upload your file with data in the following format:
%b Event_ID:Commercial_Link
, eg.
%br
%b 11:https://youtube.com/myvideo
%h1
Add commercials to events
.modal-body
= semantic_form_for '',
url: mass_upload_commercials_admin_conference_program_path(@conference.short_title),
method: :post do |f|
= f.input 'file', as: :file
= form_for('', url: mass_upload_commercials_admin_conference_program_path(@conference.short_title), method: :post) do |f|
.form-group
= f.file_field 'file', as: :file
%span.help-block
Upload your file with data in the following format:
%b Event_ID:Commercial_Link
for instance:
%pre
11:https://youtube.com/myvideo
23:https://vimeo.com/myvideo
.modal-footer
= f.submit 'Add', class: 'btn btn-primary'
= f.submit nil, class: 'btn btn-primary'
.row
.col-md-4
= render 'donut_chart', title: 'Events state',

View file

@ -1,19 +1,20 @@
.row
.col-md-12
.page-header
%h1
- if @lodging.new_record?
New
Lodging
= @lodging.name
.row
.col-md-8
= semantic_form_for(@lodging, url: (@lodging.new_record? ? admin_conference_lodgings_path : admin_conference_lodging_path(@conference.short_title, @lodging))) do |f|
= f.input :name, input_html: { autofocus: true}
= f.input :website_link, input_html: { type: :url }
= f.input :description, input_html: { rows: 5, cols: 20, data: { provide: 'markdown' } }, hint: markdown_hint
- if @lodging.picture?
= image_tag @lodging.picture.thumb.url
= f.input :picture
%p.text-right
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= form_for(@lodging, url: (@lodging.new_record? ? admin_conference_lodgings_path : admin_conference_lodging_path(@conference.short_title, @lodging))) do |f|
.form-group
= f.label :name
%abbr{title: 'This field is required'} *
= f.text_field :name, require: true, autofocus: true, class: 'form-control'
.form-group
= f.label :website_link
= f.url_field :website_link, class: 'form-control'
.form-group
= f.label :description
= f.text_area :description, rows: 5, cols: 20, data: { provide: 'markdown' }, class: 'form-control'
%span.help-block
= markdown_hint
.form-group
- if @lodging.picture?
= image_tag @lodging.picture.thumb.url
= f.label :picture
= f.file_field :picture, class: 'form-control'
%p.text-right
= f.submit nil, { class: 'btn btn-primary' }

View file

@ -0,0 +1,9 @@
.row
.col-md-12
.page-header
%h1
Edit Lodging
= @lodging.name
.row
.col-md-8
= render partial: 'form'

View file

@ -0,0 +1,8 @@
.row
.col-md-12
.page-header
%h1
Create Lodging
.row
.col-md-8
= render partial: 'form'

View file

@ -1,20 +1,22 @@
= semantic_form_for(@organization, url: (@organization.new_record? ? admin_organizations_path : admin_organization_path(@organization))) do |f|
= f.inputs name: 'Organization details' do
= f.input :name, as: :string, required: true
= f.input :description, as: :text,
input_html: { rows: 10, data: { provide: 'markdown' } },
hint: markdown_hint,
placeholder: 'Decribe about your organization...'
= f.input :code_of_conduct, as: :text,
input_html: { rows: 10, data: { provide: 'markdown' } },
hint: markdown_hint,
placeholder: 'Rules governing behavior and dispute resolution...'
= form_for(@organization, url: (@organization.new_record? ? admin_organizations_path : admin_organization_path(@organization))) do |f|
.form-group
= f.label :name, "Name"
%abbr{title: 'This field is required'} *
= f.text_field :name, required: true, class: 'form-control', placeholder: 'Name'
.form-group
= f.text_area :description, rows: 10, data: { provide: 'markdown' }, class: 'form-control', placeholder: 'Decribe about your organization...'
%span.help-block
= markdown_hint
.form-group
= f.text_area :code_of_conduct, rows: 10, data: { provide: 'markdown' }, class: 'form-control', placeholder: 'Rules governing behavior and dispute resolution...'
%span.help-block
= markdown_hint
.form-group
= image_tag f.object.picture.thumb.url if f.object.picture?
- if @organization.picture?
= image_tag(@organization.picture.thumb.url, width: '20%')
= f.input :picture
= f.file_field :picture
%p.text-right
- if @organization.new_record?
= f.submit 'Create Organization', class: 'btn btn-success'
- else
= f.submit 'Update Organization', class: 'btn btn-success'
%button{type: 'submit', class: 'btn btn-success'}
- if @organization.new_record?
Create Organization
- else
Update Organization

View file

@ -0,0 +1,9 @@
.row
.col-md-12
.page-header
%h1
Edit Organization
= @organization.name
.row
.col-md-8
= render partial: 'form'

View file

@ -0,0 +1,8 @@
.row
.col-md-12
.page-header
%h1
Create Organization
.row
.col-md-8
= render partial: 'form'

View file

@ -8,15 +8,11 @@
.row.col-md-3
- if ( can? :assign_org_admins, @organization )
= semantic_form_for :user,
url: assign_org_admins_admin_organization_path(@organization,
@role.name), method: :post do |u|
= u.label 'Add user by email: '
.input-group
= u.input :email, label: false, placeholder: "User's email"
.input-group-btn
= u.submit 'Add', id: 'user-add', class: 'btn btn-primary'
= form_for :user, url: assign_org_admins_admin_organization_path(@organization, @role.name), method: :post do |f|
.form-group
= f.label :email, 'Add user by email: '
= f.text_field :email, placeholder: "User's email", class: 'form-control', required: true
= f.submit 'Add', id: 'user-add', class: 'btn btn-primary'
.row
.col-md-12

View file

@ -1,17 +1,51 @@
.row
.col-md-12
.page-header
%h1 Program
.row
.col-md-8
= semantic_form_for(@program, url: admin_conference_program_path(@conference.short_title), html: {multipart: true}) do |f|
= f.input :schedule_public, label: 'Show Schedule on the home and splash page'
= f.input :schedule_fluid, label: 'Allow submitters to change their event after it is scheduled'
= f.input :rating, hint: 'Enter the number of different rating levels you want to have for voting on proposals. Enter 0 if you do not want to vote on proposals.'
= f.input :languages, hint: "Enter the languages allowed for events as values of #{link_to('ISO 639-1', 'http://www.loc.gov/standards/iso639-2/php/code_list.php', target: "_blank")} language codes separated with commas. The first language would be the default language. Leave it blank if you do not want to specify languages.".html_safe
= f.input :schedule_interval, input_html: { autofocus: true }, hint: "It is the minimal time interval of your schedule. The value should be 5, 6, 10, 12, 15, 20, 30 or 60. Warning! Some events could be unscheduled when changing this value."
= f.input :blind_voting, hint: 'Enable this feature if you do not want to show voting results and voters prior to user submitting a vote. For the feature to work you need to set the voting dates below as well'
= f.input :voting_start_date, as: :string, input_html: { id: 'datetimepicker-voting_start_date', value: (f.object.voting_start_date.to_formatted_s(:db_without_seconds) unless f.object.voting_start_date.nil?) }
= f.input :voting_end_date, as: :string, input_html: { id: 'datetimepicker-voting_end_date', value: (f.object.voting_end_date.to_formatted_s(:db_without_seconds) unless f.object.voting_end_date.nil?) }
%p.text-right
= f.action :submit, as: :button, button_html: {class: 'btn btn-primary'}
= form_for(@program, url: admin_conference_program_path(@conference.short_title), html: {multipart: true}) do |f|
.checkbox
%label
= f.check_box :schedule_public
Show Schedule on the home and splash page
.checkbox
%label
= f.check_box :schedule_fluid
Allow submitters to change their event after it is scheduled
%h4
Voting
%hr
.form-group
= f.label :rating
= f.number_field :rating, class: 'form-control'
%span.help-block
Enter the number of different rating levels you want to have for voting on proposals.
Enter 0 if you do not want to vote on proposals.
.checkbox
%label
= f.check_box :blind_voting
Enable blind voting
%span.help-block
If you do not want to show other peoples votes prior to submitting a vote.
For the feature to work you need to set the voting dates below as well
.form-group
= f.label :voting_start_date
= f.text_field :voting_start_date, id: 'datetimepicker-voting_start_date', value: (f.object.voting_start_date.to_formatted_s(:db_without_seconds) unless f.object.voting_start_date.nil?), class: 'form-control'
= f.label :voting_end_date
= f.text_field :voting_end_date, id: 'datetimepicker-voting_end_date', value: (f.object.voting_end_date.to_formatted_s(:db_without_seconds) unless f.object.voting_end_date.nil?), class: 'form-control'
%h4
Languages
%hr
%p
Current Languages:
- if f.object.languages.present?
= f.object.languages_list.to_sentence
- else
Any Language
.form-group
= f.label :languages
= f.select :languages, I18nData.languages.invert, { include_blank: 'Any Language', include_hidden: false }, { multiple: true, class: 'form-control' }
%span.help-block
The languages allowed for events.
.form-group
= f.number_field :schedule_interval, autofocus: true, class: 'form-control'
%span.help-block
It is the minimal time interval of your schedule. The value should be 5, 6, 10, 12, 15, 20, 30 or 60.
Warning! Some events could be unscheduled when changing this value.
%p.text-right
= f.submit nil, class: 'btn btn-primary'

View file

@ -0,0 +1,8 @@
.row
.col-md-12
.page-header
%h1
Edit Program
.row
.col-md-8
= render partial: 'form'

View file

@ -0,0 +1,8 @@
.row
.col-md-12
.page-header
%h1
Create Program
.row
.col-md-8
= render partial: 'form'

View file

@ -34,7 +34,10 @@
%dt
Languages:
%dd
= @program.languages
- if @program.languages.present?
= @program.languages_list.to_sentence
- else
Any Language
%dt
Public Schedule
%dd#schedule_public

View file

@ -1,4 +1,3 @@
.nested-fields
= f.inputs do
= f.input :title
= remove_association_link :answer, f
= f.text_field :title
= remove_association_link :answer, f

View file

@ -1,10 +1,17 @@
.row
.col-md-6
%legend Question
= f.input :title, label: 'Your Question'
= f.input :question_type
= f.input :global, label: 'Make Global',
hint: '(Global questions are available for selection to all conferences)'
.form-group
= f.label :title, 'Your Question'
= f.text_field :title, class: 'form-control'
.form-group
= f.select :question_type_id, QuestionType.all.pluck(:title, :id), {}, { class: 'form-control' }
.checkbox
%label
= f.check_box :global
Make Global
%span.help-block
Global questions are available for selection to all conferences
.col-md-6.hidden{id: 'answers_col'}
= dynamic_association :answers, 'Answers', f,
hint: 'Insert your answers in the order you want them to appear'

View file

@ -2,8 +2,6 @@
Edit Question
%h3
"#{@question.title}"
= semantic_form_for(@question, url: admin_conference_question_path(@conference.short_title, @question.id)) do |f|
= form_for(@question, url: admin_conference_question_path(@conference.short_title, @question.id)) do |f|
= render partial: 'form', locals: {f: f}
= f.submit 'Save', class: 'btn btn-primary', confirm: 'Are you sure you want to make these changes?'

View file

@ -11,7 +11,7 @@
.row
.col-md-12
- if @questions.count > 0
= semantic_form_for(@conference, url: update_conference_admin_conference_questions_path(@conference.short_title)) do |f|
= form_for(@conference, url: update_conference_admin_conference_questions_path(@conference.short_title)) do |f|
.questions{id: 'myquestions'}
= render partial: 'questions'
- if can? :update, Question.new(conference_id: @conference.id)
@ -25,7 +25,7 @@
%h3{id: 'new-question-header'}
Add new question
.modal-body
= semantic_form_for(@new_question, url: admin_conference_questions_path(@conference.short_title), method: :post) do |f|
= form_for(@new_question, url: admin_conference_questions_path(@conference.short_title), method: :post) do |f|
= render partial: 'form', locals: {f: f}
%button{class: 'btn btn-primary'}
Save

View file

@ -1,11 +1,11 @@
.row
.col-md-12
.page-header
%h1 Registration Period
.row
.col-md-8
= semantic_form_for(@registration_period, url: admin_conference_registration_period_path(@conference.short_title)) do |f|
= f.input :start_date, as: :string, input_html: { id: 'registration-period-start-datepicker', start_date: @conference.start_date, end_date: @conference.end_date }
= f.input :end_date, as: :string, input_html: { id: 'registration-period-end-datepicker' }
%p.text-right
= f.submit 'Save Registration Period', class: 'btn btn-primary'
= form_for(@registration_period, url: admin_conference_registration_period_path(@conference.short_title)) do |f|
.form-group
= f.label :start_date
%abbr{title: 'This field is required'} *
= f.text_field :start_date, required: true, 'data-end-conference': @conference.end_date.to_s, id: 'registration-period-start-datepicker', class: 'form-control'
.form-group
= f.label :end_date
%abbr{title: 'This field is required'} *
= f.text_field :end_date, required: true, id: 'registration-period-end-datepicker', class: 'form-control'
%p.text-right
= f.submit 'Save Registration Period', class: 'btn btn-primary'

View file

@ -0,0 +1,8 @@
.row
.col-md-12
.page-header
%h1
Edit Registration Period
.row
.col-md-8
= render partial: 'form'

View file

@ -0,0 +1,8 @@
.row
.col-md-12
.page-header
%h1
New Registration Period
.row
.col-md-8
= render partial: 'form'

View file

@ -7,12 +7,20 @@
= link_to 'Edit User', edit_admin_user_path(@user), class: 'btn btn-primary pull-right' if can? :edit, @user
.row
.col-md-6
= semantic_form_for(@registration, url: admin_conference_registration_path(@conference.short_title, @registration)) do |f|
= f.inputs 'Personal Information' do
= semantic_fields_for :user do |u|
= u.input :name, as: :string
= u.input :nickname, as: :string
= u.input :affiliation, placeholder: 'Company/User Group/nothing', as: :string
= f.inputs 'Registration Information' do
= form_for(@registration, url: admin_conference_registration_path(@conference.short_title, @registration)) do |f|
%h4
Personal Information
%hr
= fields_for :user do |u|
.form-group
= u.label :name
= u.text_field :name, class: 'form-control'
= u.label :nickname
= u.text_field :nickname, class: 'form-control'
= u.label :affiliation
= u.text_field :affiliation, placeholder: 'Company/User Group etc.', class: 'form-control'
%h4
Registration Information
%hr
= render partial: 'conference_registrations/registration_info', locals: { f: f }
= f.action :submit, button_html: { class: 'btn btn-primary' }
= f.submit nil, class: 'btn btn-primary'

View file

@ -1,16 +1,20 @@
.row
.col-md-12
.page-header
%h1
- if @resource.new_record?
New
Resource
.row
.col-md-8
= semantic_form_for(@resource, :url => (@resource.new_record? ? admin_conference_resources_path : admin_conference_resource_path(@conference.short_title, @resource))) do |f|
= f.input :name, input_html: { autofocus: true }
= f.input :description, input_html: { rows: 5, data: { provide: 'markdown' } }
= f.input :used
= f.input :quantity
%p.text-right
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= form_for(@resource, :url => (@resource.new_record? ? admin_conference_resources_path : admin_conference_resource_path(@conference.short_title, @resource))) do |f|
.form-group
= f.label :name
%abbr{title: 'This field is required'} *
= f.text_field :name, required: true, autofocus: true, class: 'form-control'
.form-group
= f.label :description
= f.text_area :description, rows: 5, data: { provide: 'markdown' }, class: 'form-control'
%span.help-block
= markdown_hint
.form-group
= f.label :used
%abbr{title: 'This field is required'} *
= f.number_field :used, required: true, class: 'form-control'
.form-group
= f.label :quantity
%abbr{title: 'This field is required'} *
= f.number_field :quantity, required: true, class: 'form-control'
%p.text-right
= f.submit nil, { class: 'btn btn-primary' }

View file

@ -0,0 +1,9 @@
.row
.col-md-12
.page-header
%h1
Edit Resource
= @resource.name
.row
.col-md-8
= render 'form'

View file

@ -1 +1,8 @@
= render 'form'
.row
.col-md-12
.page-header
%h1
Create Resource
.row
.col-md-8
= render 'form'

View file

@ -1,15 +1,5 @@
.row
.col-md-12
.page-header
%h2
Role
= @role.name.titleize
.text-muted
= @role.description
= semantic_form_for @role, url: @url do |f|
.row
.col-md-5
= f.input :description, input_html: { autofocus: true }
= f.action :submit, as: :button, button_html: { class: 'btn btn-primary' }
= form_for @role, url: @url do |f|
.form-group
= f.label :description
= f.text_field :description, autofocus: true, class: 'form-control'
= f.submit nil, { class: 'btn btn-primary' }

View file

@ -0,0 +1,11 @@
.row
.col-md-12
.page-header
%h2
Role
= @role.name.titleize
.text-muted
= @role.description
.row
.col-md-5
= render partial: 'form'

Some files were not shown because too many files have changed in this diff Show more