Compare commits

..

No commits in common. "master" and "depfu/update/temple-0.10.4" have entirely different histories.

75 changed files with 352 additions and 351 deletions

View file

@ -1 +1 @@
3.4.10
3.4.5

View file

@ -1,28 +1,20 @@
FROM registry.opensuse.org/opensuse/infrastructure/dale/containers/osem/base:latest
EXPOSE 5000
ENV RAILS_ENV=production
ENV RAILS_SERVE_STATIC_FILES=true
# Add our files
COPY --chown=1000:1000 . /osem/
# Install foreman
RUN gem install foreman
# Install bundler & foreman
RUN gem install bundler -v "$(grep -A 1 "BUNDLED WITH" /osem/Gemfile.lock | tail -n 1)"; \
gem install foreman
USER osem
WORKDIR /osem/
RUN rm -rf /osem/public/system/sponsors; mkdir -p /osem/public/system/sponsors; \
rm -rf /osem/public/assets; mkdir -p /osem/public/assets; \
rm -rf /osem/log; mkdir -p /osem/public/assets
# Install our bundle
RUN bundle config set --local without 'test development'; \
bundle config set --local path 'vendor/bundle'; \
bundle config build.nokogiri --use-system-libraries; \
bundle install --jobs=4 --retry=3
RUN bundle config set --local without 'test development'
RUN bundle install --jobs=3 --retry=3
# Generate assets
RUN bundle exec rake assets:precompile

View file

@ -183,8 +183,6 @@ gem 'sprockets-rails'
# for multiple speakers select on proposal/event forms
gem 'selectize-rails'
# Pin to solve https://github.com/mperham/connection_pool/issues/212
gem "connection_pool", "< 3"
# memcached binary connector
gem 'dalli'
@ -195,7 +193,7 @@ gem 'icalendar'
gem 'lograge'
group :development do
# for static code analysis
# for static code analisys
gem 'rubocop', require: false
gem 'rubocop-rspec', require: false
gem 'rubocop-rails', require: false

View file

@ -2,73 +2,71 @@ GEM
remote: https://rubygems.org/
specs:
Ascii85 (2.0.1)
actioncable (7.2.3)
actionpack (= 7.2.3)
activesupport (= 7.2.3)
actioncable (7.2.2.1)
actionpack (= 7.2.2.1)
activesupport (= 7.2.2.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (7.2.3)
actionpack (= 7.2.3)
activejob (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
actionmailbox (7.2.2.1)
actionpack (= 7.2.2.1)
activejob (= 7.2.2.1)
activerecord (= 7.2.2.1)
activestorage (= 7.2.2.1)
activesupport (= 7.2.2.1)
mail (>= 2.8.0)
actionmailer (7.2.3)
actionpack (= 7.2.3)
actionview (= 7.2.3)
activejob (= 7.2.3)
activesupport (= 7.2.3)
actionmailer (7.2.2.1)
actionpack (= 7.2.2.1)
actionview (= 7.2.2.1)
activejob (= 7.2.2.1)
activesupport (= 7.2.2.1)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
actionpack (7.2.3)
actionview (= 7.2.3)
activesupport (= 7.2.3)
cgi
actionpack (7.2.2.1)
actionview (= 7.2.2.1)
activesupport (= 7.2.2.1)
nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4, < 3.3)
rack (>= 2.2.4, < 3.2)
rack-session (>= 1.0.1)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
actiontext (7.2.3)
actionpack (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
actiontext (7.2.2.1)
actionpack (= 7.2.2.1)
activerecord (= 7.2.2.1)
activestorage (= 7.2.2.1)
activesupport (= 7.2.2.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.2.3)
activesupport (= 7.2.3)
actionview (7.2.2.1)
activesupport (= 7.2.2.1)
builder (~> 3.1)
cgi
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
active_model_serializers (0.10.16)
active_model_serializers (0.10.15)
actionpack (>= 4.1)
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
activejob (7.2.3)
activesupport (= 7.2.3)
activejob (7.2.2.1)
activesupport (= 7.2.2.1)
globalid (>= 0.3.6)
activemodel (7.2.3)
activesupport (= 7.2.3)
activerecord (7.2.3)
activemodel (= 7.2.3)
activesupport (= 7.2.3)
activemodel (7.2.2.1)
activesupport (= 7.2.2.1)
activerecord (7.2.2.1)
activemodel (= 7.2.2.1)
activesupport (= 7.2.2.1)
timeout (>= 0.4.0)
activestorage (7.2.3)
actionpack (= 7.2.3)
activejob (= 7.2.3)
activerecord (= 7.2.3)
activesupport (= 7.2.3)
activestorage (7.2.2.1)
actionpack (= 7.2.2.1)
activejob (= 7.2.2.1)
activerecord (= 7.2.2.1)
activesupport (= 7.2.2.1)
marcel (~> 1.0)
activesupport (7.2.3)
activesupport (7.2.2.1)
base64
benchmark (>= 0.3)
bigdecimal
@ -84,37 +82,32 @@ GEM
activerecord (>= 3.0)
activesupport (>= 3.0)
awesome_nested_set (>= 2.0)
acts_as_list (1.2.6)
activerecord (>= 6.1)
activesupport (>= 6.1)
addressable (2.9.0)
public_suffix (>= 2.0.2, < 8.0)
afm (1.0.0)
acts_as_list (1.0.4)
activerecord (>= 4.2)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
afm (0.2.2)
ajax-datatables-rails (1.3.1)
zeitwerk
anonymous_loader (0.1.3)
version_gem (~> 1.1, >= 1.1.14)
archive-zip (0.13.1)
io-like (~> 0.4.0)
archive-zip (0.12.0)
io-like (~> 0.3.0)
ast (2.4.3)
auth-sanitizer (0.2.3)
version_gem (~> 1.1, >= 1.1.14)
autoprefixer-rails (10.3.1.0)
execjs (~> 2)
awesome_nested_set (3.8.0)
activerecord (>= 4.0.0, < 8.1)
base64 (0.3.0)
bcrypt (3.1.22)
benchmark (0.5.0)
bigdecimal (3.3.1)
bcrypt (3.1.20)
benchmark (0.4.1)
bigdecimal (3.2.2)
bindex (0.8.1)
bootstrap-sass (3.4.1)
autoprefixer-rails (>= 5.2.1)
sassc (>= 2.0.0)
bootstrap-switch-rails (3.3.3)
builder (3.3.0)
byebug (12.0.0)
cancancan (3.6.1)
byebug (11.1.3)
cancancan (3.3.0)
capybara (3.40.0)
addressable
matrix
@ -124,7 +117,7 @@ GEM
rack-test (>= 0.6.3)
regexp_parser (>= 1.5, < 3.0)
xpath (~> 3.2)
carrierwave (3.1.3)
carrierwave (3.1.2)
activemodel (>= 6.0.0)
activesupport (>= 6.0.0)
addressable (~> 2.6)
@ -137,16 +130,15 @@ GEM
fastimage
case_transform (0.2)
activesupport
caxlsx (4.3.0)
caxlsx (4.2.0)
htmlentities (~> 4.3, >= 4.3.4)
marcel (~> 1.0)
nokogiri (~> 1.10, >= 1.10.4)
rubyzip (>= 2.4, < 4)
rubyzip (>= 1.3.0, < 3)
caxlsx_rails (0.6.2)
actionpack (>= 3.1)
caxlsx (>= 3.0)
cgi (0.5.1)
chartkick (5.2.1)
chartkick (4.1.3)
childprocess (5.1.0)
logger (~> 1.5)
chronic (0.10.2)
@ -158,13 +150,13 @@ GEM
faraday-multipart (~> 1.0, >= 1.0.4)
ostruct
cocoon (1.2.15)
concurrent-ruby (1.3.7)
connection_pool (2.5.5)
concurrent-ruby (1.3.5)
connection_pool (2.5.3)
countable-rails (0.0.1)
railties (>= 3.1)
crack (0.4.5)
rexml
crass (1.0.7)
crass (1.0.6)
csv (3.3.5)
daemons (1.4.0)
dalli (2.7.11)
@ -175,40 +167,39 @@ GEM
activerecord (>= 5.a)
database_cleaner-core (~> 2.0)
database_cleaner-core (2.0.1)
date (3.5.1)
delayed_job (4.2.0)
date (3.4.1)
delayed_job (4.1.13)
activesupport (>= 3.0, < 9.0)
benchmark
logger
delayed_job_active_record (4.1.11)
activerecord (>= 3.0, < 9.0)
delayed_job (>= 3.0, < 5)
devise (5.0.4)
devise (4.9.4)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 7.0)
railties (>= 4.1.0)
responders
warden (~> 1.2.3)
devise_ichain_authenticatable (0.3.2)
devise (>= 2.2)
diff-lcs (1.6.2)
docile (1.4.1)
dotenv (3.2.0)
dotenv-rails (3.2.0)
dotenv (= 3.2.0)
dotenv (3.1.8)
dotenv-rails (3.1.8)
dotenv (= 3.1.8)
railties (>= 6.1)
drb (2.2.3)
erb (6.0.6)
erb (5.0.2)
erubi (1.13.1)
erubis (2.7.0)
execjs (2.8.1)
factory_bot (6.5.6)
factory_bot (6.5.4)
activesupport (>= 6.1.0)
factory_bot_rails (6.5.1)
factory_bot_rails (6.5.0)
factory_bot (~> 6.5)
railties (>= 6.1.0)
faker (3.5.2)
i18n (>= 1.8.11, < 2)
faraday (2.14.3)
faraday (2.13.4)
faraday-net_http (>= 2.0, < 3.5)
json
logger
@ -216,42 +207,46 @@ GEM
faraday (>= 1, < 3)
faraday-multipart (1.1.1)
multipart-post (~> 2.0)
faraday-net_http (3.4.4)
net-http (~> 0.5)
fastimage (2.4.1)
faraday-net_http (3.4.1)
net-http (>= 0.5.0)
fastimage (2.4.0)
feature (1.4.0)
ffi (1.17.4)
ffi (1.17.2)
font-awesome-sass (6.7.2)
sassc (~> 2.0)
geckodriver-helper (0.24.0)
archive-zip (~> 0.7)
globalid (1.3.0)
globalid (1.2.1)
activesupport (>= 6.1)
gravtastic (3.2.6)
haml (6.3.0)
temple (>= 0.8.2)
thor
haml (5.2.2)
temple (>= 0.8.0)
tilt
haml-rails (2.1.0)
haml-rails (2.0.1)
actionpack (>= 5.1)
activesupport (>= 5.1)
haml (>= 4.0.6)
haml (>= 4.0.6, < 6.0)
html2haml (>= 1.0.1)
railties (>= 5.1)
haml_lint (0.66.0)
haml (>= 5.0)
haml_lint (0.37.1)
haml (>= 4.0, < 5.3)
parallel (~> 1.10)
rainbow
rubocop (>= 1.0)
rubocop (>= 0.50.0)
sysexits (~> 1.1)
hashdiff (1.2.1)
hashdiff (1.0.1)
hashery (2.1.2)
hashie (5.1.0)
logger
htmlentities (4.4.2)
i18n (1.14.8)
hashie (5.0.0)
html2haml (2.2.0)
erubis (~> 2.7.0)
haml (>= 4.0, < 6)
nokogiri (>= 1.6.0)
ruby_parser (~> 3.5)
htmlentities (4.3.4)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
i18n_data (0.13.0)
icalendar (2.12.4)
icalendar (2.11.2)
base64
ice_cube (~> 0.16)
logger
@ -260,11 +255,10 @@ GEM
image_processing (1.14.0)
mini_magick (>= 4.9.5, < 6)
ruby-vips (>= 2.0.17, < 3)
io-console (0.8.2)
io-like (0.4.0)
irb (1.18.0)
io-console (0.8.1)
io-like (0.3.1)
irb (1.15.2)
pp (>= 0.6.0)
prism (>= 1.3.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
iso-639 (0.3.8)
@ -274,20 +268,19 @@ GEM
jquery-rails
railties (>= 3.1)
sass-rails
jquery-rails (4.6.1)
jquery-rails (4.4.0)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (6.0.1)
railties (>= 3.2.16)
json (2.21.2)
json-schema (6.0.0)
addressable (~> 2.8)
bigdecimal (~> 3.1)
json (2.13.2)
json-schema (2.8.1)
addressable (>= 2.4)
jsonapi-renderer (0.2.2)
jwt (3.2.0)
jwt (3.1.2)
base64
language_server-protocol (3.17.0.6)
language_server-protocol (3.17.0.5)
launchy (3.1.1)
addressable (~> 2.8)
childprocess (~> 5.0)
@ -309,26 +302,24 @@ GEM
activesupport (>= 4)
railties (>= 4)
request_store (~> 1.0)
loofah (2.25.2)
loofah (2.24.1)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.9.1)
logger
mail (2.8.1)
mini_mime (>= 0.1.1)
net-imap
net-pop
net-smtp
marcel (1.0.4)
matrix (0.4.3)
mina (1.2.5)
matrix (0.4.2)
mina (1.2.4)
open4 (~> 1.3.4)
rake
mini_magick (5.3.2)
mini_magick (5.3.0)
logger
mini_mime (1.1.5)
mini_portile2 (2.8.9)
minitest (6.0.6)
drb (~> 2.0)
prism (~> 1.5)
minitest (5.25.5)
monetize (1.9.4)
money (~> 6.12)
money (6.13.8)
@ -339,12 +330,12 @@ GEM
money (~> 6.13.2)
railties (>= 3.0)
multi_json (1.17.0)
multi_xml (0.9.1)
bigdecimal (>= 3.1, < 5)
multi_xml (0.7.2)
bigdecimal (~> 3.1)
multipart-post (2.4.1)
net-http (0.9.1)
uri (>= 0.11.1)
net-imap (0.6.6)
net-http (0.6.0)
uri
net-imap (0.5.9)
date
net-protocol
net-pop (0.1.2)
@ -353,25 +344,22 @@ GEM
timeout
net-smtp (0.5.1)
net-protocol
next_rails (1.4.8)
next_rails (1.4.6)
rainbow (>= 3)
nio4r (2.7.5)
nokogiri (1.19.4)
nio4r (2.7.4)
nokogiri (1.18.9)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oauth2 (2.0.25)
anonymous_loader (~> 0.1, >= 0.1.3)
auth-sanitizer (~> 0.2, >= 0.2.3)
oauth2 (2.0.12)
faraday (>= 0.17.3, < 4.0)
jwt (>= 1.0, < 4.0)
logger (~> 1.2)
multi_xml (~> 0.5)
rack (>= 1.2, < 4)
snaky_hash (~> 2.0, >= 2.0.7)
version_gem (~> 1.1, >= 1.1.14)
omniauth (2.1.4)
snaky_hash (~> 2.0, >= 2.0.3)
version_gem (>= 1.1.8, < 3)
omniauth (2.1.3)
hashie (>= 3.4.6)
logger
rack (>= 2.2.3)
rack-protection
omniauth-facebook (8.0.0)
@ -379,13 +367,13 @@ GEM
omniauth-github (2.0.1)
omniauth (~> 2.0)
omniauth-oauth2 (~> 1.8)
omniauth-google-oauth2 (1.2.2)
omniauth-google-oauth2 (1.2.1)
jwt (>= 2.9.2)
oauth2 (~> 2.0)
omniauth (~> 2.0)
omniauth-oauth2 (~> 1.8)
omniauth-oauth2 (1.9.0)
oauth2 (>= 2.0.2, < 3)
omniauth-oauth2 (1.8.0)
oauth2 (>= 1.4, < 3)
omniauth (~> 2.0)
omniauth-openid (2.0.2)
omniauth (>= 1.1)
@ -395,26 +383,27 @@ GEM
omniauth-rails_csrf_protection (1.0.0)
actionpack (>= 4.2)
omniauth (~> 2.0)
open4 (1.3.4)
orm_adapter (0.5.0)
ostruct (0.6.3)
paper_trail (16.0.0)
activerecord (>= 6.1)
request_store (~> 1.4)
parallel (1.27.0)
parser (3.3.12.0)
parser (3.3.9.0)
ast (~> 2.4.1)
racc
pdf-core (0.10.0)
pdf-inspector (1.3.0)
pdf-reader (>= 1.0, < 3.0.a)
pdf-reader (2.15.1)
pdf-reader (2.14.1)
Ascii85 (>= 1.0, < 3.0, != 2.0.0)
afm (>= 0.2.1, < 2)
afm (~> 0.2.1)
hashery (~> 2.0)
ruby-rc4
ttfunk
pg (1.6.3)
pp (0.6.3)
pg (1.6.1)
pp (0.6.2)
prettyprint
prawn (2.5.0)
matrix (~> 0.4)
@ -431,43 +420,43 @@ GEM
prawn-table (0.2.2)
prawn (>= 1.3.0, < 3.0.0)
prettyprint (0.2.0)
prism (1.9.0)
psych (5.3.1)
prism (1.4.0)
psych (5.2.6)
date
stringio
public_suffix (7.0.5)
puma (8.0.2)
public_suffix (6.0.2)
puma (6.6.1)
nio4r (~> 2.0)
racc (1.8.1)
rack (3.2.6)
rack (3.1.16)
rack-openid (1.4.2)
rack (>= 1.1.0)
ruby-openid (>= 2.1.8)
rack-protection (4.2.1)
rack-protection (4.1.1)
base64 (>= 0.1.0)
logger (>= 1.6.0)
rack (>= 3.0.0, < 4)
rack-session (2.1.2)
rack-session (2.1.1)
base64 (>= 0.1.0)
rack (>= 3.0.0)
rack-test (2.2.0)
rack (>= 1.3)
rackup (2.3.1)
rackup (2.2.1)
rack (>= 3)
rails (7.2.3)
actioncable (= 7.2.3)
actionmailbox (= 7.2.3)
actionmailer (= 7.2.3)
actionpack (= 7.2.3)
actiontext (= 7.2.3)
actionview (= 7.2.3)
activejob (= 7.2.3)
activemodel (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
rails (7.2.2.1)
actioncable (= 7.2.2.1)
actionmailbox (= 7.2.2.1)
actionmailer (= 7.2.2.1)
actionpack (= 7.2.2.1)
actiontext (= 7.2.2.1)
actionview (= 7.2.2.1)
activejob (= 7.2.2.1)
activemodel (= 7.2.2.1)
activerecord (= 7.2.2.1)
activestorage (= 7.2.2.1)
activesupport (= 7.2.2.1)
bundler (>= 1.15.0)
railties (= 7.2.3)
railties (= 7.2.2.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@ -476,65 +465,63 @@ GEM
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
rails-html-sanitizer (1.7.1)
loofah (~> 2.25, >= 2.25.2)
rails-html-sanitizer (1.6.2)
loofah (~> 2.21)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
rails-i18n (7.0.1)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
railties (7.2.3)
actionpack (= 7.2.3)
activesupport (= 7.2.3)
cgi
railties (7.2.2.1)
actionpack (= 7.2.2.1)
activesupport (= 7.2.2.1)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
thor (~> 1.0, >= 1.2.2)
tsort (>= 0.2)
zeitwerk (~> 2.6)
rainbow (3.1.1)
rake (13.4.2)
rdoc (7.2.0)
rake (13.3.0)
rdoc (6.14.2)
erb
psych (>= 4.0.0)
tsort
recaptcha (5.21.2)
recaptcha (5.8.1)
json
redcarpet (3.6.1)
regexp_parser (2.11.3)
reline (0.6.3)
regexp_parser (2.11.1)
reline (0.6.2)
io-console (~> 0.5)
request_store (1.7.0)
rack (>= 1.4)
responders (3.2.0)
actionpack (>= 7.0)
railties (>= 7.0)
rexml (3.4.4)
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
rexml (3.4.1)
rolify (6.0.0)
rqrcode (3.1.0)
rqrcode (2.0.0)
chunky_png (~> 1.0)
rqrcode_core (~> 2.0)
rqrcode_core (2.0.0)
rspec-activemodel-mocks (1.3.0)
rqrcode_core (~> 1.0)
rqrcode_core (1.1.0)
rspec-activemodel-mocks (1.1.0)
activemodel (>= 3.0)
activesupport (>= 3.0)
rspec-mocks (>= 2.99, < 4.0)
rspec-core (3.13.6)
rspec-core (3.13.5)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.5)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-mocks (3.13.8)
rspec-mocks (3.13.5)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (8.0.4)
rspec-rails (8.0.2)
actionpack (>= 7.2)
activesupport (>= 7.2)
railties (>= 7.2)
rspec-core (>= 3.13.0, < 5.0.0)
rspec-expectations (>= 3.13.0, < 5.0.0)
rspec-mocks (>= 3.13.0, < 5.0.0)
rspec-support (>= 3.13.0, < 5.0.0)
rspec-support (3.13.7)
rspec-core (~> 3.13)
rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13)
rspec-support (~> 3.13)
rspec-support (3.13.4)
rubocop (1.79.2)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
@ -559,7 +546,7 @@ GEM
lint_roller (~> 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
rubocop-rails (2.33.3)
rubocop-rails (2.33.1)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
@ -576,9 +563,11 @@ GEM
ruby-openid (2.9.2)
ruby-progressbar (1.13.0)
ruby-rc4 (0.1.5)
ruby-vips (2.3.0)
ruby-vips (2.2.4)
ffi (~> 1.12)
logger
ruby_parser (3.17.0)
sexp_processor (~> 4.15, >= 4.15.1)
rubyzip (2.4.1)
sass-rails (6.0.0)
sassc-rails (~> 2.1, >= 2.1.1)
@ -602,20 +591,21 @@ GEM
sentry-ruby (5.26.0)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
sexp_processor (4.15.3)
shoulda-matchers (6.5.0)
activesupport (>= 5.2.0)
simplecov (0.22.0)
docile (~> 1.1)
simplecov-html (~> 0.11)
simplecov_json_formatter (~> 0.1)
simplecov-cobertura (3.1.0)
simplecov-cobertura (3.0.0)
rexml
simplecov (~> 0.19)
simplecov-html (0.13.2)
simplecov_json_formatter (0.1.4)
snaky_hash (2.0.7)
snaky_hash (2.0.3)
hashie (>= 0.1.0, < 6)
version_gem (~> 1.1, >= 1.1.14)
version_gem (>= 1.1.8, < 3)
sprockets (4.2.2)
concurrent-ruby (~> 1.0)
logger
@ -624,8 +614,8 @@ GEM
actionpack (>= 4.0)
activesupport (>= 4.0)
sprockets (>= 3.0.0)
ssrf_filter (1.5.0)
stringio (3.2.0)
ssrf_filter (1.3.0)
stringio (3.1.7)
stripe (5.43.0)
stripe-ruby-mock (3.1.0.rc3)
dante (>= 0.2.0)
@ -633,12 +623,11 @@ GEM
stripe (> 5, < 6)
sysexits (1.2.0)
temple (0.10.4)
thor (1.5.0)
tilt (2.6.1)
thor (1.4.0)
tilt (2.0.10)
timecop (0.9.4)
timeout (0.6.1)
timeout (0.4.3)
transitions (1.2.1)
tsort (0.2.0)
ttfunk (1.8.0)
bigdecimal (~> 3.1)
turbolinks (5.2.1)
@ -648,14 +637,14 @@ GEM
concurrent-ruby (~> 1.0)
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
unicode-emoji (4.2.0)
unicode-display_width (3.1.4)
unicode-emoji (~> 4.0, >= 4.0.4)
unicode-emoji (4.0.4)
unobtrusive_flash (3.3.1)
railties
uri (1.1.1)
uri (1.0.3)
useragent (0.16.11)
version_gem (1.1.14)
version_gem (1.1.8)
warden (1.2.9)
rack (>= 2.0.9)
web-console (4.1.0)
@ -672,7 +661,7 @@ GEM
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
websocket (1.2.11)
websocket-driver (0.8.2)
websocket-driver (0.8.0)
base64
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
@ -680,7 +669,7 @@ GEM
chronic (>= 0.6.3)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.7.5)
zeitwerk (2.7.3)
PLATFORMS
ruby
@ -704,7 +693,6 @@ DEPENDENCIES
climate_control
cloudinary
cocoon
connection_pool (< 3)
countable-rails
daemons
dalli
@ -787,7 +775,7 @@ DEPENDENCIES
whenever
RUBY VERSION
ruby 3.4.10
ruby 3.4.5
BUNDLED WITH
2.6.9

View file

@ -1 +0,0 @@
Gemfile

1
Gemfile.next Symbolic link
View file

@ -0,0 +1 @@
Gemfile

View file

@ -26,22 +26,21 @@ You can find the latest OSEM releases on our [release page](https://github.com/o
## Deploy to the cloud
The easiest way to deploy OSEM is to use one of the many platform as a service (PaaS) providers that support Ruby on Rails.
There are too many to list, here are a few we have seen OSEM deployed to:
The easiest way to deploy OSEM is to use one of the many platform as a service providers that support ruby on rails. We have prepared OSEM to be used with [heroku](https://heroku.com). So if you have an account there, you can deploy OSEM by pressing this button:
- https://heroku.com
- https://render.com
- https://fly.io
<a href="https://heroku.com/deploy?template=https://github.com/openSUSE/osem/tree/v1.0">
<img src="https://www.herokucdn.com/deploy/button.svg" alt="Deploy">
</a>
## Deploy to your own server
We recommend to run OSEM in production with [mod\_passenger](https://www.phusionpassenger.com/download/#open_source)
and the [apache web-server](https://www.apache.org/). There are tons of guides on how to deploy rails apps on various
base operating systems, [check DuckDuckGo](https://duckduckgo.com/?t=h_&q=ruby+on+rails+apache+passenger). Of course there are also other options for the application server and reverse proxy, pick your poison.
base operating systems. [Check Google](https://encrypted.google.com/search?hl=en&q=ruby%20on%20rails%20apache%20passenger). Of course there are also other options for the application server and reverse proxy, pick your poison.
## Deploy via docker/docker-compose
There is a rudimentary docker-compose configuration for production usage (`docker-compose.yml.production-example`). It brings OSEM up on port 80. It uses persistent storage volumes for all the data your users might create. You can start it with
There is a rudimentary docker-compose configuration for production usage (`docker-compose.yml.production-example`). It brings [OSEM up](http://0.0.0.0:8080) on port 8080. It uses persistent storage volumes for all the data users might create. You can start it with
1. Configure OSEM (at least `SECRET_KEY_BASE`)
```
@ -54,13 +53,12 @@ There is a rudimentary docker-compose configuration for production usage (`docke
```
1. Setup the database (only once)
```
docker-compose -f docker-compose.yml.production-example run --rm osem bundle exec rake db:setup
docker-compose -f docker-compose.yml.production-example run --rm production_web bundle exec rake db:bootstrap
```
1. Start the services
```
docker-compose -f docker-compose.yml.production-example up
```
1. Visit http://0.0.0.0
## Configuration
OSEM is configured through environment variables and falls back to sensible defaults. See the [dotenv.example](https://github.com/openSUSE/osem/blob/master/dotenv.example) for all possible configuration options. However here is a list of things you most likely want to configure because otherwise things will not work as expected.

View file

@ -8,10 +8,6 @@
An event management tool tailored to Free and Open Source Software conferences.
## Trial
Check out our demo at https://osem.copyleft.dev
## Installation
Please refer to our [installation guide](INSTALL.md).
@ -19,7 +15,4 @@ Please refer to our [installation guide](INSTALL.md).
Please refer to our [contributing guide](CONTRIBUTING.md).
## Contact
GitHub issues are the primary way for communicating about specific proposed changes to this project. If you have other questions feel free chat us up in the #osem channel on [libera.chat IRC](https://libera.chat).
https://web.libera.chat/#osem
GitHub issues are the primary way for communicating about specific proposed changes to this project. If you have other questions feel free to subscribe to the [opensuse-web@opensuse.org](http://lists.opensuse.org/opensuse-web/) mailinglist, all OSEM contributors are on that list! Additionally you can use #osem channel on [libera.chat IRC](https://libera.chat).

37
app.json Normal file
View file

@ -0,0 +1,37 @@
{
"name": "osem",
"description": "Open Source Event Manager",
"repository": "https://github.com/openSUSE/osem",
"env": {
"CLOUDINARY_URL": {
"description": "Create a https://cloudinary.com account and set the cloud url here. It starts with cloudinary://",
"required": false
},
"SECRET_KEY_BASE": {
"description": "A key to verify sessions. At least 40 characters. For instance: https://www.randomlists.com/string?base=16&length=64&qty=1",
"generator": "secret"
},
"NOKOGIRI_USE_SYSTEM_LIBRARIES": "1",
"RAILS_ENV": "production",
"RACK_ENV": "production"
},
"scripts": {
"postdeploy": "bundle exec rake db:schema:load db:seed"
},
"formation": {
"web": {
"quantity": 1
},
"worker": {
"quantity": 1
}
},
"addons": [
{
"plan": "heroku-postgresql"
},
{
"plan": "sendgrid"
}
]
}

View file

@ -130,7 +130,8 @@ module Admin
end
def booth_params
params.require(:booth).permit(:title, :description, :reasoning, :picture, :website_url, :submitter_relationship, responsible_ids: [])
params.require(:booth).permit(:title, :description, :reasoning, :state, :picture, :conference_id,
:created_at, :updated_at, :submitter_relationship, :website_url, responsible_ids: [])
end
end
end

View file

@ -51,7 +51,7 @@ module Admin
private
def difficulty_level_params
params.require(:difficulty_level).permit(:title, :description, :color)
params.require(:difficulty_level).permit(:title, :description, :color, :conference_id)
end
end
end

View file

@ -49,7 +49,7 @@ module Admin
private
def event_type_params
params.require(:event_type).permit(:title, :length, :minimum_abstract_length, :maximum_abstract_length, :color, :description)
params.require(:event_type).permit(:title, :length, :minimum_abstract_length, :maximum_abstract_length, :color, :conference_id, :description)
end
end
end

View file

@ -178,7 +178,7 @@ module Admin
end
def comment_params
params.require(:comment).permit(:body)
params.require(:comment).permit(:commentable, :body, :user_id)
end
def update_state(transition, notice, mail = false, subject = false, send_mail = false)

View file

@ -49,7 +49,7 @@ module Admin
private
def lodging_params
params.require(:lodging).permit(:name, :description, :picture, :picture_cache, :website_link)
params.require(:lodging).permit(:name, :description, :picture, :picture_cache, :website_link, :conference_id)
end
end
end

View file

@ -11,7 +11,7 @@ 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?

View file

@ -97,7 +97,7 @@ module Admin
private
def question_params
params.require(:question).permit(:title, :global, :answer_ids, :question_type_id, answers_attributes: [:id, :title])
params.require(:question).permit(:title, :global, :answer_ids, :question_type_id, :conference_id, answers_attributes: [:id, :title])
end
def conference_params

View file

@ -82,7 +82,8 @@ module Admin
def registration_params
params.require(:registration).permit(
:attended, :volunteer, :other_special_needs, :accepted_code_of_conduct,
:user_id, :conference_id, :attended,
:volunteer, :other_special_needs, :accepted_code_of_conduct,
vchoice_ids: [], qanswer_ids: [], qanswers_attributes: [], event_ids: []
)
end

View file

@ -48,7 +48,7 @@ module Admin
private
def resource_params
params.require(:resource).permit(:name, :description, :quantity, :used)
params.require(:resource).permit(:name, :description, :quantity, :used, :conference_id)
end
end
end

View file

@ -94,7 +94,7 @@ module Admin
elsif user.add_role @role.name, role_resource
flash[:notice] = "Successfully added role #{@role.name} to user #{user.email}"
else
flash[:error] = "Could not add role #{@role.name} to #{user.email}"
flash[:error] = "Coud not add role #{@role.name} to #{user.email}"
end
respond_to do |format|

View file

@ -52,14 +52,14 @@ module Admin
private
def sponsor_params
params.require(:sponsor).permit(:name, :description, :website_url, :picture, :picture_cache, :sponsorship_level_id)
params.require(:sponsor).permit(:name, :description, :website_url, :picture, :picture_cache, :sponsorship_level_id, :conference_id)
end
def sponsorship_level_required
return unless @conference.sponsorship_levels.empty?
redirect_to admin_conference_sponsorship_levels_path(conference_id: @conference.short_title),
alert: 'You need to create at least one sponsorship level to add a sponsor'
alert: 'You need to create atleast one sponsorship level to add a sponsor'
end
end
end

View file

@ -61,7 +61,7 @@ module Admin
private
def sponsorship_level_params
params.require(:sponsorship_level).permit(:title)
params.require(:sponsorship_level).permit(:title, :conference_id)
end
end
end

View file

@ -52,7 +52,7 @@ module Admin
private
def ticket_params
params.require(:ticket).permit(:title, :url, :description, :price_cents, :price_currency, :price, :registration_ticket)
params.require(:ticket).permit(:conference, :title, :url, :description, :conference_id, :price_cents, :price_currency, :price, :registration_ticket)
end
end
end

View file

@ -46,7 +46,7 @@ module Admin
private
def venue_params
params.require(:venue).permit(:name, :street, :postalcode, :city, :country, :longitude, :latitude, :description, :website, :picture, :picture_cache, :lodgings_attributes)
params.require(:venue).permit(:name, :street, :postalcode, :city, :country, :longitude, :latitude, :description, :website, :picture, :picture_cache, :lodgings_attributes, :conference_id)
end
end
end

View file

@ -45,7 +45,7 @@ module Admin
end
elsif @version.event == 'create' && @version.item
# if @version represents a create event and is not currently deleted
# if @version represets a create event and is not currently deleted
@version.item.destroy
flash[:notice] = 'The selected change was successfully reverted'

View file

@ -94,6 +94,7 @@ class BoothsController < ApplicationController
private
def booth_params
params.require(:booth).permit(:title, :description, :reasoning, :picture, :website_url, :submitter_relationship, responsible_ids: [])
params.require(:booth).permit(:title, :description, :reasoning, :state, :picture, :conference_id,
:created_at, :updated_at, :submitter_relationship, :website_url, responsible_ids: [])
end
end

View file

@ -110,6 +110,7 @@ class ConferenceRegistrationsController < ApplicationController
def registration_params
params.require(:registration)
.permit(
:conference_id,
:volunteer, :accepted_code_of_conduct,
vchoice_ids: [], qanswer_ids: [],
qanswers_attributes: [],

View file

@ -39,7 +39,7 @@ class SchedulesController < ApplicationController
@current_day = @conference.current_conference_day
@day = @current_day.present? ? @current_day : @dates.first
if @current_day
# the schedule takes you to the current time if it is between the start and the end time.
# the schedule takes you to the current time if it is beetween the start and the end time.
@hour_column = @conference.hours_from_start_time(@conf_start, @conference.end_hour)
end
# Ids of the @event_schedules of confrmed self_organized tracks along with the selected_schedule_id

View file

@ -31,4 +31,10 @@ class TicketPurchasesController < ApplicationController
def index
@unpaid_ticket_purchases = current_user.ticket_purchases.by_conference(@conference).unpaid
end
private
def ticket_purchase_params
params.require(:ticket_purchase).permit(:ticket_id, :user_id, :conference_id, :quantity)
end
end

View file

@ -45,7 +45,7 @@ module ConferenceHelper
location += "#{v.country_name}, " if v.country_name
e.location = location
end
e.categories = conference.title, "Audience: #{proposal.difficulty_level.title}", "Track: #{proposal.track.name}"
e.categories = conference.title, "Difficulty: #{proposal.difficulty_level.title}", "Track: #{proposal.track.name}"
end
end
calendar

View file

@ -17,7 +17,7 @@ module DateTimeHelper
##
# Gets a datetime object
# ====Returns
# * +String+ -> formatted datetime object
# * +String+ -> formated datetime object
def format_datetime(obj)
return unless obj

View file

@ -21,7 +21,6 @@ class Ability
can [:show], Conference do |conference|
conference.splashpage&.public == true
end
can :code_of_conduct, Conference
# Can view the schedule
can [:schedule, :events], Conference do |conference|
conference.program.cfp && conference.program.schedule_public
@ -152,8 +151,6 @@ class Ability
can :manage, Registration, conference_id: conf_ids_for_organizer
# To access conference/proposals
can :manage, Event, program: { conference_id: conf_ids_for_organizer }
can :manage, Commercial, commercialable_type: 'Event',
commercialable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_organizer).pluck(:id)).pluck(:id)
# To access comment link in menu bar
can :index, Comment, commentable_type: 'Event',
commentable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_organizer).pluck(:id)).pluck(:id)
@ -165,8 +162,6 @@ class Ability
commentable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_cfp).pluck(:id)).pluck(:id)
# To access conference/proposals
can :manage, Event, program: { conference_id: conf_ids_for_cfp }
can :manage, Commercial, commercialable_type: 'Event',
commercialable_id: Event.where(program_id: Program.where(conference_id: conf_ids_for_cfp).pluck(:id)).pluck(:id)
end
if conf_ids_for_info_desk

View file

@ -422,7 +422,7 @@ class Conference < ApplicationRecord
##
# Returns a hash with affiliation =>
# {value: count of registration whose user has that affiliation, color: color}
# {value: count of registration whose user has that affilation, color: color}
# In case that the affiliation is blank, it groups them in None and
# if the number of persons that have an affiliation are less than the 2% of
# the total number of registered people, they are grouped in others.
@ -696,7 +696,7 @@ class Conference < ApplicationRecord
end
# Returns the number of hours since the conference start hour (9) to the
# current hour, in case that the current hour is between the start and the
# current hour, in case that the current hour is beetween the start and the
# end hour (20). Otherwise, returns 0
def hours_from_start_time(start_hour, end_hour)
current_time = Time.find_zone(timezone).now
@ -744,7 +744,7 @@ class Conference < ApplicationRecord
'#' + next_color_component(:r, i) + next_color_component(:g, i) + next_color_component(:b, i)
end
# Auxiliary function which is used in next_color and returns each component of
# Auxiliar function which is used in next_color and returns each component of
# the color. We make use of big prime numbers to avoid repetition and to make
# consecutive colors clearly different.
def next_color_component(component, i)
@ -787,7 +787,7 @@ class Conference < ApplicationRecord
##
# Checks if start hour of the conference is greater or equal than the end hour
# and that both hours are between 0 and 24
# and that both hours are beetween 0 and 24
#
# Reports an error when such a condition is found
def valid_times_range?
@ -922,7 +922,7 @@ class Conference < ApplicationRecord
#
# ====Returns
# * +True+ -> One difficulty level or more
# * +False+ -> No difficulty level
# * +False+ -> No diffculty level
def difficulty_levels_set?
program.difficulty_levels.any?
end
@ -932,7 +932,7 @@ class Conference < ApplicationRecord
#
# ====Returns
# * +True+ -> One difficulty level or more
# * +False+ -> No difficulty level
# * +False+ -> No diffculty level
def event_types_set?
program.event_types.any?
end

View file

@ -94,7 +94,7 @@ class Event < ApplicationRecord
}.freeze
##
# Checks if the event has a start_time and a room for the selected schedule if there is any
# Checkes if the event has a start_time and a room for the selected schedule if there is any
# ====Returns
# * +true+ or +false+
def scheduled?

View file

@ -133,7 +133,7 @@ class Program < ApplicationRecord
end
##
# Checks if the program has rating enabled
# Checcks if the program has rating enabled
#
# ====Returns
# * +false+ -> If rating is not enabled

View file

@ -13,7 +13,7 @@ class Ticket < ApplicationRecord
scope :for_registration, -> { where(registration_ticket: true) }
# This validation is for the sake of simplicity.
# If we would allow different currencies per conference we also have to handle conversions between currencies!
# If we would allow different currencies per conference we also have to handle convertions between currencies!
validate :tickets_of_conference_have_same_currency
validates :price_cents, :price_currency, :title, presence: true

View file

@ -111,7 +111,7 @@ class User < ApplicationRecord
}.freeze
##
# Checks if the user attended the event
# Checkes if the user attended the event
# This is used for events that require registration
# The user must have registered to attend the event
# Gets an event

View file

@ -2,7 +2,7 @@
.col-md-12
.page-header
%h1
Edit Audience
Edit Difficulty Level
= @difficulty_level.title
.row
.col-md-8

View file

@ -1,7 +1,7 @@
.row
.col-md-12
.page-header
%h1 Audiences
%h1 Difficulty Levels
%p.text-muted
Classify your conference.program.events by difficulty
.row
@ -32,4 +32,4 @@
data: { confirm: "Do you really want to delete #{difficulty_level.title}? Attention: This difficulty level will be removed from all Events that have it set" }
.row
.col-md-12.text-right
= link_to 'Add Audience', new_admin_conference_program_difficulty_level_path(@conference.short_title), class: 'btn btn-primary'
= link_to 'Add Difficulty Level', new_admin_conference_program_difficulty_level_path(@conference.short_title), class: 'btn btn-primary'

View file

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

View file

@ -82,7 +82,7 @@
%th
%b Track
%th
%b Audience
%b Difficulty
%th
%b State
%th

View file

@ -92,7 +92,7 @@
%td{ 'class' => class_for_todo(progress_status['track']) }
%span{ 'class' => [icon_for_todo(progress_status['track']), 'fa-lg'] }
%tr
%td= link_to 'Add an Audience level', edit_admin_conference_program_event_path(@event.program.conference.short_title, @event)
%td= link_to 'Add a difficulty level', edit_admin_conference_program_event_path(@event.program.conference.short_title, @event)
%td{ 'class' => class_for_todo(progress_status['difficulty_level']) }
%span{ 'class' => [icon_for_todo(progress_status['difficulty_level']), 'fa-lg'] }
#proposal-commercials.tab-pane

View file

@ -28,7 +28,7 @@
%dd
= tracks(@conference)
%dt
Audiences:
Difficulty Levels:
%dd
= difficulty_levels(@conference)
%dt

View file

@ -1,5 +1,5 @@
%p
Setup the time frame in which people can register to your conference
Setup the time frame in which people can registrer to your conference
= form_for(@registration_period, url: admin_conference_registration_period_path(@conference.short_title)) do |f|
.form-group
= f.label :start_date

View file

@ -3,7 +3,7 @@
wb = xlsx_package.workbook
wb.add_worksheet(name: 'registrations') do |sheet|
bold_style = wb.styles.add_style(b: true)
row = ['Attended', 'Name', 'Nickname', 'Affilιation', 'Email', 'Ticket Token']
row = ['Attended', 'Name', 'Nickname', 'Affilιation', 'Email']
@conference.questions.each do |question|
row << question.title
@ -18,7 +18,6 @@ wb.add_worksheet(name: 'registrations') do |sheet|
row << registration.nickname
row << registration.affiliation
row << registration.email
row << registration.user.physical_tickets.by_conference(@conference).first&.token
@conference.questions.each do |question|
qa = registration.qanswers.find_by(question: question)
answer = ( qa ? qa.answer.title : '' )

View file

@ -17,7 +17,7 @@
url = update_selected_schedule_admin_conference_program_track_path(@conference.short_title, @schedule.track) + '?[track][selected_schedule_id]='
else
value = @schedule.id == @selected_schedule.try(:id)
url = admin_conference_program_path(@conference.short_title) + '?program[selected_schedule_id]='
url = admin_conference_program_path(@conference.short_title) + '?[program][selected_schedule_id]='
end
= check_box_tag @conference.short_title, @schedule.id, value, url: url,
class: 'switch-checkbox-schedule'

View file

@ -2,7 +2,7 @@
.col-md-12
.page-header
%h1
Edit Track
Edit Tack
= @track.name
.row
.col-md-12

View file

@ -33,7 +33,7 @@
= f.file_field :picture
= f.hidden_field :picture_cache
%span.help-block
This will be displayed on the venue area of the splash page.
This will be displayed on the venue are of the splash page.
.form-group
= f.label :street
%abbr{title: 'This field is required'} *

View file

@ -18,7 +18,7 @@
%abbr{title: 'This field is required'} *
= f.text_field :submitter_relationship, rows: 5, required: true, class: 'form-control'
%span.help-block
e.g. employee, community manager, etc
e.g. employee, comunity manager, etc
.form-group
= f.label :website_url, 'Website URL'
%abbr{title: 'This field is required'} *

View file

@ -80,7 +80,7 @@
= link_to 'Event Types', admin_conference_program_event_types_path(@conference.short_title)
- if can? :update, @conference.program.difficulty_levels.build, conference_id: @conference.id
%li{class: active_nav_li(admin_conference_program_difficulty_levels_path(@conference.short_title))}
= link_to 'Audience', admin_conference_program_difficulty_levels_path(@conference.short_title)
= link_to 'Difficulty Levels', admin_conference_program_difficulty_levels_path(@conference.short_title)
- if can? :update, @conference.program.schedules.build
%li{class: active_nav_li(admin_conference_schedules_path(@conference.short_title))}
= link_to 'Schedules', admin_conference_schedules_path(@conference.short_title)

View file

@ -37,7 +37,7 @@
= f.select :language, @program.languages_list, { include_blank: false}, { class: 'select-help-toggle form-control' }
- if display_details
- if @conference.program.difficulty_levels.any?
= f.label :difficulty_level, 'Audience'
= f.label :difficulty_level
= f.select :difficulty_level_id, @conference.program.difficulty_levels.map{|level| [level.title, level.id ] }, {include_blank: false}, { class: 'select-help-toggle form-control' }
= render 'shared/select_help_text', f: f, for: :difficulty_level_id, options: @conference.program.difficulty_levels do |difficulty_level|
= difficulty_level.description

View file

@ -27,4 +27,4 @@
= link_to 'Add a track', edit_conference_program_proposal_path(event.program.conference.short_title, event)
%li{'class'=>class_for_todo(progress_status['difficulty_level'])}
%span{'class'=>icon_for_todo(progress_status['difficulty_level'])}
= link_to 'Add an Audience', edit_conference_program_proposal_path(event.program.conference.short_title, event)
= link_to 'Add a difficulty level', edit_conference_program_proposal_path(event.program.conference.short_title, event)

View file

@ -73,7 +73,7 @@
%dl#proposal-info
.col-md-12
%dt Date:
%dd= @event_schedule.start_time.strftime("%Y %B %e - %-I:%M %p") if @event_schedule
%dd= @event_schedule.start_time.strftime("%Y %B %e - %H:%M") if @event_schedule
.col-md-12
%dt Duration:
%dd= show_time(@event.event_type.length)
@ -95,7 +95,7 @@
%span.label{style: "background-color: #{@event.track.color}; color: #{ contrast_color(@event.track.color) }"}
= @event.track.name
.col-md-12
%dt Audience:
%dt Difficulty:
%dd
- if @event.difficulty_level
%span.label{style: "background-color: #{@event.difficulty_level.color}; color: #{ contrast_color(@event.difficulty_level.color) };"}
@ -118,7 +118,7 @@
%dl
%dt Start Time:
%dd
= event.program.selected_event_schedules.find { |es| es.event == event }.start_time.strftime("%Y %B %e %-I:%M %p")
= event.program.selected_event_schedules.find { |es| es.event == event }.start_time.strftime("%Y %B %e %H:%M")
%br
%dt Room:
%dd

View file

@ -17,7 +17,9 @@
- interval_count.times do
%th.date
%span
= (td_start_time).strftime("%-I:%M %p")
= (td_start_time).strftime("%H:")
%span
= (td_start_time).strftime("%M")
- td_start_time += @step_minutes
- start_room_time = start_time
- @rooms.each do |room|

View file

@ -24,9 +24,9 @@
%span.track
%span.fa-solid.fa-clock
%span.label{ style: "background-color: grey" }
= event_schedule.start_time.strftime('%-I:%M %p')
= event_schedule.start_time.strftime('%H:%M')
\-
= event_schedule.end_time.strftime('%-I:%M %p')
= event_schedule.end_time.strftime('%H:%M')
%span.track
%span.fa-solid.fa-location-dot
%span.label{ style: "background-color: grey" }

View file

@ -42,7 +42,7 @@
}
});
// hide the right and left controls when necessary after moving the carousel
// hide the right and left controls when neccesary after moving the carousel
$('.carousel').on('slid.bs.carousel', '',
function(){
$(this).children('.left.carousel-control').show();

View file

@ -21,6 +21,7 @@
/ scheduled events
- date = nil
- time = nil
- @events_schedules.each do |event_schedule|
- unless event_schedule.start_time.strftime('%Y-%m-%d').eql?(date)
.col-xs-12.col-md-12
@ -29,11 +30,15 @@
= date = event_schedule.start_time.strftime('%Y-%m-%d')
%a{ title: "Go up", class: "pull-right", href: "#program" }
%i{ class: "fa-solid fa-angles-up fa-lg", 'aria-hidden' => true }
.col-xs-12.col-md-1
.start-time
= event_schedule.start_time.strftime('%-I:%M %p')
.col-xs-12.col-md-11
.new-time-event
- unless event_schedule.start_time.strftime('%H:%M').eql?(time)
.col-xs-12.col-md-1
.start-time
= time = event_schedule.start_time.strftime('%H:%M')
.col-xs-12.col-md-11
.new-time-event
= render partial: 'event', locals: { event: event_schedule.event, event_schedule: event_schedule }
- else
.col-xs-12.col-md-11.col-md-offset-1
= render partial: 'event', locals: { event: event_schedule.event, event_schedule: event_schedule }
/ confirmed events that are not scheduled

View file

@ -43,7 +43,7 @@
});
});
// hide the right and left controls when necessary after moving the carousel
// hide the right and left controls when neccesary after moving the carousel
$('.carousel').on('slid.bs.carousel', '',
function(){
$(this).children('.left.carousel-control').show();

View file

@ -12,7 +12,7 @@
%th Updated Attribute
%th{ class: "#{'hidden' if version.event == 'create'}" }
Previous Value
Prevous Value
%th{ class: "#{'hidden' if version.event == 'destroy'}" }
New Value

0
bin/bundle Normal file → Executable file
View file

0
bin/bundle_report Normal file → Executable file
View file

0
bin/delayed_job Normal file → Executable file
View file

0
bin/deprecations Normal file → Executable file
View file

0
bin/gem-next-diff Normal file → Executable file
View file

0
bin/next Normal file → Executable file
View file

0
bin/rails Normal file → Executable file
View file

0
bin/rake Normal file → Executable file
View file

0
bin/rspec Normal file → Executable file
View file

View file

@ -1,25 +1,24 @@
services:
postgres:
image: postgres:16-alpine
production_database:
image: postgres:12-alpine
environment:
PGDATA: /var/lib/postgresql/data/pgdata
POSTGRES_USER: osem
POSTGRES_PASSWORD: mysecretpassword
volumes:
- osem_production_database:/var/lib/postgresql/data/pgdata
osem:
production_web:
build:
context: .
dockerfile: Dockerfile.production
depends_on:
- postgres
- production_database
ports:
- 80:5000
- 8080:3000
env_file: .env.production # see dotenv.example file
environment:
OSEM_DB_HOST: postgres
OSEM_DB_USER: osem
OSEM_DB_PASSWORD: mysecretpassword
OSEM_DB_HOST: production_database
RAILS_SERVE_STATIC_FILES: 'true'
command: foreman start -p 3000
volumes:
- osem_production_web_data:/osem/public/system
- osem_production_web_assets:/osem/public/assets

View file

@ -12,7 +12,7 @@
# The name of the host the database runs on
# OSEM_DB_HOST=database
# The port the database runs on
# The port the databse runs on
# OSEM_DB_PORT=3306
# The user to access the database with

View file

@ -6,7 +6,7 @@ namespace :data do
task demo: :environment do
include FactoryBot::Syntax::Methods
conference = create(:full_conference, title: 'Open Source Event Manager Demo', short_title: 'osemdemo' ,description: "This is an [Open Source Event Manager](http://osem.io/) demo instance. You can log in as **admin** with the password **password123** or you [sign up](/accounts/sign_up) as a user. We hope you enjoy checking out all the functionality, if you have questions do not hesitate to contact us on [IRC](https://web.libera.chat/#osem) or file an issue on [GitHub](https://github.com/openSUSE/osem).\r\n\r\n## Data will be destroyed every thirty minutes! (next reset: #{29.minutes.after})")
conference = create(:full_conference, title: 'Open Source Event Manager Demo', short_title: 'osemdemo' ,description: "This is a [Open Source Event Manager](http://osem.io/) demo instance. You can log in as **admin** with the password **password123** or just you just [sign up](/accounts/sign_up) with your own user. We hope you enjoy checking out all the functionality, if you have questions don't hesitate to [contact us](http://osem.io/#contact)!\r\n\r\n## Data will be destroyed every thirty minutes or whenever someone updates the [OSEM source code on github](https://github.com/openSUSE/osem/commits/master).")
conference.contact.update(email: 'osemdemo@osem.io', sponsor_email: 'osemdemo@osem.io')
create(:admin, email: 'admin@osem.io', username: 'admin', password: 'password123', password_confirmation: 'password123')
end

View file

@ -7,7 +7,7 @@ namespace :data do
task surveys: :environment do
conference = create(:full_conference, start_date: Date.current, end_date: Date.current + 1.day)
survey_after_conference_active = create(:survey, surveyable: conference, target: :after_conference, title: 'Survey about the conference', start_date: conference.start_date - 1.day, end_date: conference.end_date + 5.days, description: 'Survey about the conference. You can already see it.')
# survey_after_conference_inactive = create(:survey, surveyable: conference, target: :after_conference, title: 'Survey about the conference', start_date: conference.start_date + 1.day, end_date: conference.end_date + 5.days, description: 'Survey about the conference. Not available yet!')
# survey_after_conference_inactive = create(:survey, surveyable: conference, target: :after_conference, title: 'Survey about the conference', start_date: conference.start_date + 1.day, end_date: conference.end_date + 5.days, description: 'Survey abou the conference. Not available yet!')
# survey_on_registration = create(:survey, surveyable: conference, target: :during_registration, title: 'Survey during registation', start_date: conference.registration_period.start_date, end_date: conference.registration_period.end_date, description: 'Survey during registration.')
create(:boolean_non_mandatory, survey: survey_after_conference_active)

View file

@ -16,7 +16,7 @@ namespace :user do
end
end
desc "Set email_public attribute true for all users"
desc "Set email_public attrubute true for all users"
task :set_email_public => :environment do
User.update_all email_public: true
end

11
railway.json Normal file
View file

@ -0,0 +1,11 @@
{
"$schema": "https://railway.app/railway.schema.json",
"build": {
"builder": "nixpacks"
},
"deploy": {
"startCommand": "foreman start -p 3000",
"restartPolicyType": "ON_FAILURE",
"restartPolicyMaxRetries": 2
}
}

View file

@ -264,31 +264,5 @@ describe 'User' do
it{ should_not be_able_to(:edit, other_self_organized_track) }
it{ should_not be_able_to(:update, other_self_organized_track) }
end
context 'when user is organizer of conference' do
let(:conference) { create(:conference) }
let(:user) { create(:organizer, resource: conference) }
let(:event_in_conference) { create(:event, program: conference.program) }
let(:event_in_other_conference) { create(:event) }
let(:commercial_in_conference) { create(:commercial, commercialable: event_in_conference) }
let(:commercial_in_other_conference) { create(:commercial, commercialable: event_in_other_conference) }
it{ should be_able_to(:create, event_in_conference.commercials.new) }
it{ should be_able_to(:manage, commercial_in_conference) }
it{ should_not be_able_to(:manage, commercial_in_other_conference) }
end
context 'when user is on cfp team of conference' do
let(:conference) { create(:conference) }
let(:user) { create(:cfp_user, resource: conference) }
let(:event_in_conference) { create(:event, program: conference.program) }
let(:event_in_other_conference) { create(:event) }
let(:commercial_in_conference) { create(:commercial, commercialable: event_in_conference) }
let(:commercial_in_other_conference) { create(:commercial, commercialable: event_in_other_conference) }
it{ should be_able_to(:create, event_in_conference.commercials.new) }
it{ should be_able_to(:manage, commercial_in_conference) }
it{ should_not be_able_to(:manage, commercial_in_other_conference) }
end
end
end

View file

@ -4,7 +4,7 @@
FactoryBot.define do
factory :comment do
body { 'Most interesting comment ever, created by a girl.' }
body { 'Most interresting comment ever, created by a girl.' }
user
association :commentable, factory: :event
end

0
spec/models/conference_spec.rb Normal file → Executable file
View file