Compare commits
234 commits
depfu/upda
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
abbd12cc96 | ||
|
|
68c5f5e32b | ||
|
|
ef82ef8941 | ||
|
|
e267adf8b7 | ||
|
|
a5718c7ac9 | ||
|
|
4c23286900 | ||
|
|
9ccd5f0cb4 | ||
|
|
892b5bf729 | ||
|
|
7cd8156c90 | ||
|
|
c6b66dcce2 | ||
|
|
d2ce016030 | ||
|
|
9fbccfcaea | ||
|
|
83b746ef4c | ||
|
|
18bba1ae8c | ||
|
|
a2f13d90b7 | ||
|
|
f2e63bb570 | ||
|
|
ddfb343d75 | ||
|
|
fc3d09808f | ||
|
|
379886ed84 | ||
|
|
b0d261adae | ||
|
|
47351fb163 | ||
|
|
51cb804410 | ||
|
|
cbaf7d33b5 | ||
|
|
e6988e8418 | ||
|
|
4dbb1bba27 | ||
|
|
399d174fa9 | ||
|
|
1cd22381fc | ||
|
|
f525469c52 | ||
|
|
6aef4883a3 | ||
|
|
4b6895f31d | ||
|
|
83148dfea1 | ||
|
|
d5a056d7cf | ||
|
|
1346187fa6 | ||
|
|
70f61787b6 | ||
|
|
6341d1e3b3 | ||
|
|
cb5ad735c4 | ||
|
|
de4400a01f | ||
|
|
4c19375c6a | ||
|
|
03a8035eb9 | ||
|
|
00c5740869 | ||
|
|
8125ffa818 | ||
|
|
75344ae4a0 | ||
|
|
f66eb8393c | ||
|
|
bd149ff255 | ||
|
|
9b5f97c00a | ||
|
|
c0fe3d9083 | ||
|
|
a9198a0576 | ||
|
|
c6b012868d | ||
|
|
f4230eece1 | ||
|
|
010169f9b4 | ||
|
|
580943c28d | ||
|
|
0e7eb51f7e | ||
|
|
0861ca9dbc | ||
|
|
dc1ce6318b | ||
|
|
96f712a1f8 | ||
|
|
c8e6fabed1 | ||
|
|
c9a4604fc2 | ||
|
|
6289a9cd57 | ||
|
|
76509f739d | ||
|
|
6e74df2b10 | ||
|
|
22aa9a33db | ||
|
|
71679bb95b | ||
|
|
c972db79d4 | ||
|
|
45cc3ef1bd | ||
|
|
c8b94ce8b7 | ||
|
|
36d97ac405 | ||
|
|
14b636cd85 | ||
|
|
0df9272151 | ||
|
|
ce9e49a510 | ||
|
|
9d43a47ebb | ||
|
|
baaf6f9378 | ||
|
|
953b712719 | ||
|
|
57846bf7ee | ||
|
|
db13f563b2 | ||
|
|
ee48f02425 | ||
|
|
99d0e2257b | ||
|
|
bd241868a4 | ||
|
|
533f09a6dd | ||
|
|
e4d15aa1f7 | ||
|
|
ba59f4b5c8 | ||
|
|
2dde4af593 | ||
|
|
fb5d37453f | ||
|
|
dc6bd8f352 | ||
|
|
95c81938d0 | ||
|
|
b846b3fca9 | ||
|
|
d652179f59 | ||
|
|
8ca6e62104 | ||
|
|
14b022d8c7 | ||
|
|
24d018773d | ||
|
|
70128c8280 | ||
|
|
b1c7d3619c | ||
|
|
91ab8c7814 | ||
|
|
a4386334ed | ||
|
|
a826113f51 | ||
|
|
0e94be0774 | ||
|
|
9ff37fe106 | ||
|
|
3494b91f4d | ||
|
|
ad92fd4b9b | ||
|
|
e6875c6c1c | ||
|
|
7e5c874d5e | ||
|
|
76c9a5330e | ||
|
|
d6e36f2845 | ||
|
|
d588fb00da | ||
|
|
bb3868f351 | ||
|
|
d69255dbbd | ||
|
|
cf87cc6280 | ||
|
|
bead2ecff7 | ||
|
|
c9e927d4fa | ||
|
|
48748cb466 | ||
|
|
f52b58ec40 | ||
|
|
c8d33018e4 | ||
|
|
8943807c04 | ||
|
|
44db914089 | ||
|
|
486eb1922a | ||
|
|
23d2ee5ced | ||
|
|
891842c8c3 | ||
|
|
c894c80e14 | ||
|
|
df0d263a46 | ||
|
|
1b7f8569a6 | ||
|
|
b9b2a75f70 | ||
|
|
a7a022e68e | ||
|
|
2f575a52fc | ||
|
|
ba53909d3a | ||
|
|
6e84eca20a | ||
|
|
db7fdc4964 | ||
|
|
5cb70ba0bb | ||
|
|
25f73b54cb | ||
|
|
b500f5722b | ||
|
|
81e0c4254e | ||
|
|
c380cdf97e | ||
|
|
bb0181f651 | ||
|
|
08fcfee6e9 | ||
|
|
b67265f8ce | ||
|
|
12cc7527cd | ||
|
|
17b7330e28 | ||
|
|
5b04b8892d | ||
|
|
4ba2eee42e | ||
|
|
ae34a6d625 | ||
|
|
b96263be5f | ||
|
|
89c5861b79 | ||
|
|
f564fc6d65 | ||
|
|
ff391e296a | ||
|
|
5a7a5c21dd | ||
|
|
901070f7e5 | ||
|
|
13601bf818 | ||
|
|
5c054c8618 | ||
|
|
743834af83 | ||
|
|
e7335430e7 | ||
|
|
e911c4285c | ||
|
|
3c7cb02a2e | ||
|
|
c407d2f4a7 | ||
|
|
b0c53a8e9d | ||
|
|
00787f45df | ||
|
|
f3f2887ba8 | ||
|
|
173d12ad91 | ||
|
|
972cbdfa69 | ||
|
|
77568760e6 | ||
|
|
14836a04a8 | ||
|
|
ae30f6ec23 | ||
|
|
e13485d14e | ||
|
|
e17acb7ea5 | ||
|
|
01adc1cce0 | ||
|
|
35e667375c | ||
|
|
8fd68a525f | ||
|
|
4fc8726c41 | ||
|
|
0f7f610aba | ||
|
|
44502ea5fa | ||
|
|
d9c76e1a8d | ||
|
|
3f6938d0ee | ||
|
|
e703d1dcf4 | ||
|
|
2083fde297 | ||
|
|
c2238b9025 | ||
|
|
7d9739349b | ||
|
|
fe8b4b71e4 | ||
|
|
688a8e3561 | ||
|
|
9dd52fddf5 | ||
|
|
8d3808e1bb | ||
|
|
5e34a09983 | ||
|
|
58f4746ace | ||
|
|
69e00aae8e | ||
|
|
cb767c8e77 | ||
|
|
0aa688dfd8 | ||
|
|
6445e5c340 | ||
|
|
4ba2a241ec | ||
|
|
768f42a0b3 | ||
|
|
19d28def75 | ||
|
|
e98cce5294 | ||
|
|
e67184cfac | ||
|
|
93662dc489 | ||
|
|
eca537daf7 | ||
|
|
270cd76e45 | ||
|
|
7439fb4dfb | ||
|
|
0540401c71 | ||
|
|
60cb627275 | ||
|
|
1ab2b3b276 | ||
|
|
6072110906 | ||
|
|
9d4cf0799e | ||
|
|
677044b490 | ||
|
|
14578a80fd | ||
|
|
b63afc4630 | ||
|
|
ce2ee2a925 | ||
|
|
ff140c1969 | ||
|
|
d45e6797cf | ||
|
|
499f007810 | ||
|
|
0af86f55c3 | ||
|
|
2756a9e84b | ||
|
|
762809b031 | ||
|
|
6e276b2787 | ||
|
|
3d2e03a091 | ||
|
|
d8faa3afc3 | ||
|
|
6668f90910 | ||
|
|
dd9dede062 | ||
|
|
aaff07e48b | ||
|
|
9a398da9c8 | ||
|
|
e8ea0f1c25 | ||
|
|
3e5871a8ab | ||
|
|
1aeb87854c | ||
|
|
86781095cd | ||
|
|
3c7ec664c1 | ||
|
|
3266406626 | ||
|
|
3351030c84 | ||
|
|
ebf972a69b | ||
|
|
d0cb4d01f9 | ||
|
|
9725ada314 | ||
|
|
49c4832100 | ||
|
|
84cde8f7b1 | ||
|
|
89eb6af498 | ||
|
|
8d1fd67a8e | ||
|
|
c9e863a2de | ||
|
|
59270e0691 | ||
|
|
378ba175d5 | ||
|
|
8336f0cce5 | ||
|
|
c5cbf38639 | ||
|
|
97cc0b3d6a |
76 changed files with 352 additions and 353 deletions
|
|
@ -1 +1 @@
|
|||
3.4.5
|
||||
3.4.10
|
||||
|
|
|
|||
|
|
@ -1,20 +1,28 @@
|
|||
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 bundler & foreman
|
||||
RUN gem install bundler -v "$(grep -A 1 "BUNDLED WITH" /osem/Gemfile.lock | tail -n 1)"; \
|
||||
gem install foreman
|
||||
# Install foreman
|
||||
RUN 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'
|
||||
RUN bundle install --jobs=3 --retry=3
|
||||
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
|
||||
|
||||
# Generate assets
|
||||
RUN bundle exec rake assets:precompile
|
||||
|
|
|
|||
4
Gemfile
4
Gemfile
|
|
@ -183,6 +183,8 @@ 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'
|
||||
|
||||
|
|
@ -193,7 +195,7 @@ gem 'icalendar'
|
|||
gem 'lograge'
|
||||
|
||||
group :development do
|
||||
# for static code analisys
|
||||
# for static code analysis
|
||||
gem 'rubocop', require: false
|
||||
gem 'rubocop-rspec', require: false
|
||||
gem 'rubocop-rails', require: false
|
||||
|
|
|
|||
410
Gemfile.lock
410
Gemfile.lock
|
|
@ -2,71 +2,73 @@ GEM
|
|||
remote: https://rubygems.org/
|
||||
specs:
|
||||
Ascii85 (2.0.1)
|
||||
actioncable (7.2.2.1)
|
||||
actionpack (= 7.2.2.1)
|
||||
activesupport (= 7.2.2.1)
|
||||
actioncable (7.2.3)
|
||||
actionpack (= 7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
zeitwerk (~> 2.6)
|
||||
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)
|
||||
actionmailbox (7.2.3)
|
||||
actionpack (= 7.2.3)
|
||||
activejob (= 7.2.3)
|
||||
activerecord (= 7.2.3)
|
||||
activestorage (= 7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
mail (>= 2.8.0)
|
||||
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)
|
||||
actionmailer (7.2.3)
|
||||
actionpack (= 7.2.3)
|
||||
actionview (= 7.2.3)
|
||||
activejob (= 7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
mail (>= 2.8.0)
|
||||
rails-dom-testing (~> 2.2)
|
||||
actionpack (7.2.2.1)
|
||||
actionview (= 7.2.2.1)
|
||||
activesupport (= 7.2.2.1)
|
||||
actionpack (7.2.3)
|
||||
actionview (= 7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
cgi
|
||||
nokogiri (>= 1.8.5)
|
||||
racc
|
||||
rack (>= 2.2.4, < 3.2)
|
||||
rack (>= 2.2.4, < 3.3)
|
||||
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.2.1)
|
||||
actionpack (= 7.2.2.1)
|
||||
activerecord (= 7.2.2.1)
|
||||
activestorage (= 7.2.2.1)
|
||||
activesupport (= 7.2.2.1)
|
||||
actiontext (7.2.3)
|
||||
actionpack (= 7.2.3)
|
||||
activerecord (= 7.2.3)
|
||||
activestorage (= 7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
globalid (>= 0.6.0)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (7.2.2.1)
|
||||
activesupport (= 7.2.2.1)
|
||||
actionview (7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
builder (~> 3.1)
|
||||
cgi
|
||||
erubi (~> 1.11)
|
||||
rails-dom-testing (~> 2.2)
|
||||
rails-html-sanitizer (~> 1.6)
|
||||
active_model_serializers (0.10.15)
|
||||
active_model_serializers (0.10.16)
|
||||
actionpack (>= 4.1)
|
||||
activemodel (>= 4.1)
|
||||
case_transform (>= 0.2)
|
||||
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
|
||||
activejob (7.2.2.1)
|
||||
activesupport (= 7.2.2.1)
|
||||
activejob (7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
globalid (>= 0.3.6)
|
||||
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)
|
||||
activemodel (7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
activerecord (7.2.3)
|
||||
activemodel (= 7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
timeout (>= 0.4.0)
|
||||
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)
|
||||
activestorage (7.2.3)
|
||||
actionpack (= 7.2.3)
|
||||
activejob (= 7.2.3)
|
||||
activerecord (= 7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
marcel (~> 1.0)
|
||||
activesupport (7.2.2.1)
|
||||
activesupport (7.2.3)
|
||||
base64
|
||||
benchmark (>= 0.3)
|
||||
bigdecimal
|
||||
|
|
@ -82,32 +84,37 @@ GEM
|
|||
activerecord (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
awesome_nested_set (>= 2.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)
|
||||
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)
|
||||
ajax-datatables-rails (1.3.1)
|
||||
zeitwerk
|
||||
archive-zip (0.12.0)
|
||||
io-like (~> 0.3.0)
|
||||
anonymous_loader (0.1.3)
|
||||
version_gem (~> 1.1, >= 1.1.14)
|
||||
archive-zip (0.13.1)
|
||||
io-like (~> 0.4.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.20)
|
||||
benchmark (0.4.1)
|
||||
bigdecimal (3.2.2)
|
||||
bcrypt (3.1.22)
|
||||
benchmark (0.5.0)
|
||||
bigdecimal (3.3.1)
|
||||
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 (11.1.3)
|
||||
cancancan (3.3.0)
|
||||
byebug (12.0.0)
|
||||
cancancan (3.6.1)
|
||||
capybara (3.40.0)
|
||||
addressable
|
||||
matrix
|
||||
|
|
@ -117,7 +124,7 @@ GEM
|
|||
rack-test (>= 0.6.3)
|
||||
regexp_parser (>= 1.5, < 3.0)
|
||||
xpath (~> 3.2)
|
||||
carrierwave (3.1.2)
|
||||
carrierwave (3.1.3)
|
||||
activemodel (>= 6.0.0)
|
||||
activesupport (>= 6.0.0)
|
||||
addressable (~> 2.6)
|
||||
|
|
@ -130,15 +137,16 @@ GEM
|
|||
fastimage
|
||||
case_transform (0.2)
|
||||
activesupport
|
||||
caxlsx (4.2.0)
|
||||
caxlsx (4.3.0)
|
||||
htmlentities (~> 4.3, >= 4.3.4)
|
||||
marcel (~> 1.0)
|
||||
nokogiri (~> 1.10, >= 1.10.4)
|
||||
rubyzip (>= 1.3.0, < 3)
|
||||
rubyzip (>= 2.4, < 4)
|
||||
caxlsx_rails (0.6.2)
|
||||
actionpack (>= 3.1)
|
||||
caxlsx (>= 3.0)
|
||||
chartkick (4.1.3)
|
||||
cgi (0.5.1)
|
||||
chartkick (5.2.1)
|
||||
childprocess (5.1.0)
|
||||
logger (~> 1.5)
|
||||
chronic (0.10.2)
|
||||
|
|
@ -150,13 +158,13 @@ GEM
|
|||
faraday-multipart (~> 1.0, >= 1.0.4)
|
||||
ostruct
|
||||
cocoon (1.2.15)
|
||||
concurrent-ruby (1.3.5)
|
||||
connection_pool (2.5.3)
|
||||
concurrent-ruby (1.3.7)
|
||||
connection_pool (2.5.5)
|
||||
countable-rails (0.0.1)
|
||||
railties (>= 3.1)
|
||||
crack (0.4.5)
|
||||
rexml
|
||||
crass (1.0.6)
|
||||
crass (1.0.7)
|
||||
csv (3.3.5)
|
||||
daemons (1.4.0)
|
||||
dalli (2.7.11)
|
||||
|
|
@ -167,39 +175,40 @@ GEM
|
|||
activerecord (>= 5.a)
|
||||
database_cleaner-core (~> 2.0)
|
||||
database_cleaner-core (2.0.1)
|
||||
date (3.4.1)
|
||||
delayed_job (4.1.13)
|
||||
date (3.5.1)
|
||||
delayed_job (4.2.0)
|
||||
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 (4.9.4)
|
||||
devise (5.0.4)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0)
|
||||
railties (>= 7.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.1.8)
|
||||
dotenv-rails (3.1.8)
|
||||
dotenv (= 3.1.8)
|
||||
dotenv (3.2.0)
|
||||
dotenv-rails (3.2.0)
|
||||
dotenv (= 3.2.0)
|
||||
railties (>= 6.1)
|
||||
drb (2.2.3)
|
||||
erb (5.0.2)
|
||||
erb (6.0.6)
|
||||
erubi (1.13.1)
|
||||
erubis (2.7.0)
|
||||
execjs (2.8.1)
|
||||
factory_bot (6.5.4)
|
||||
factory_bot (6.5.6)
|
||||
activesupport (>= 6.1.0)
|
||||
factory_bot_rails (6.5.0)
|
||||
factory_bot_rails (6.5.1)
|
||||
factory_bot (~> 6.5)
|
||||
railties (>= 6.1.0)
|
||||
faker (3.5.2)
|
||||
i18n (>= 1.8.11, < 2)
|
||||
faraday (2.13.4)
|
||||
faraday (2.14.3)
|
||||
faraday-net_http (>= 2.0, < 3.5)
|
||||
json
|
||||
logger
|
||||
|
|
@ -207,46 +216,42 @@ GEM
|
|||
faraday (>= 1, < 3)
|
||||
faraday-multipart (1.1.1)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (3.4.1)
|
||||
net-http (>= 0.5.0)
|
||||
fastimage (2.4.0)
|
||||
faraday-net_http (3.4.4)
|
||||
net-http (~> 0.5)
|
||||
fastimage (2.4.1)
|
||||
feature (1.4.0)
|
||||
ffi (1.17.2)
|
||||
ffi (1.17.4)
|
||||
font-awesome-sass (6.7.2)
|
||||
sassc (~> 2.0)
|
||||
geckodriver-helper (0.24.0)
|
||||
archive-zip (~> 0.7)
|
||||
globalid (1.2.1)
|
||||
globalid (1.3.0)
|
||||
activesupport (>= 6.1)
|
||||
gravtastic (3.2.6)
|
||||
haml (5.2.2)
|
||||
temple (>= 0.8.0)
|
||||
haml (6.3.0)
|
||||
temple (>= 0.8.2)
|
||||
thor
|
||||
tilt
|
||||
haml-rails (2.0.1)
|
||||
haml-rails (2.1.0)
|
||||
actionpack (>= 5.1)
|
||||
activesupport (>= 5.1)
|
||||
haml (>= 4.0.6, < 6.0)
|
||||
html2haml (>= 1.0.1)
|
||||
haml (>= 4.0.6)
|
||||
railties (>= 5.1)
|
||||
haml_lint (0.37.1)
|
||||
haml (>= 4.0, < 5.3)
|
||||
haml_lint (0.66.0)
|
||||
haml (>= 5.0)
|
||||
parallel (~> 1.10)
|
||||
rainbow
|
||||
rubocop (>= 0.50.0)
|
||||
rubocop (>= 1.0)
|
||||
sysexits (~> 1.1)
|
||||
hashdiff (1.0.1)
|
||||
hashdiff (1.2.1)
|
||||
hashery (2.1.2)
|
||||
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)
|
||||
hashie (5.1.0)
|
||||
logger
|
||||
htmlentities (4.4.2)
|
||||
i18n (1.14.8)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n_data (0.13.0)
|
||||
icalendar (2.11.2)
|
||||
icalendar (2.12.4)
|
||||
base64
|
||||
ice_cube (~> 0.16)
|
||||
logger
|
||||
|
|
@ -255,10 +260,11 @@ GEM
|
|||
image_processing (1.14.0)
|
||||
mini_magick (>= 4.9.5, < 6)
|
||||
ruby-vips (>= 2.0.17, < 3)
|
||||
io-console (0.8.1)
|
||||
io-like (0.3.1)
|
||||
irb (1.15.2)
|
||||
io-console (0.8.2)
|
||||
io-like (0.4.0)
|
||||
irb (1.18.0)
|
||||
pp (>= 0.6.0)
|
||||
prism (>= 1.3.0)
|
||||
rdoc (>= 4.0.0)
|
||||
reline (>= 0.4.2)
|
||||
iso-639 (0.3.8)
|
||||
|
|
@ -268,19 +274,20 @@ GEM
|
|||
jquery-rails
|
||||
railties (>= 3.1)
|
||||
sass-rails
|
||||
jquery-rails (4.4.0)
|
||||
jquery-rails (4.6.1)
|
||||
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.13.2)
|
||||
json-schema (2.8.1)
|
||||
addressable (>= 2.4)
|
||||
json (2.21.2)
|
||||
json-schema (6.0.0)
|
||||
addressable (~> 2.8)
|
||||
bigdecimal (~> 3.1)
|
||||
jsonapi-renderer (0.2.2)
|
||||
jwt (3.1.2)
|
||||
jwt (3.2.0)
|
||||
base64
|
||||
language_server-protocol (3.17.0.5)
|
||||
language_server-protocol (3.17.0.6)
|
||||
launchy (3.1.1)
|
||||
addressable (~> 2.8)
|
||||
childprocess (~> 5.0)
|
||||
|
|
@ -302,24 +309,26 @@ GEM
|
|||
activesupport (>= 4)
|
||||
railties (>= 4)
|
||||
request_store (~> 1.0)
|
||||
loofah (2.24.1)
|
||||
loofah (2.25.2)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.12.0)
|
||||
mail (2.8.1)
|
||||
mail (2.9.1)
|
||||
logger
|
||||
mini_mime (>= 0.1.1)
|
||||
net-imap
|
||||
net-pop
|
||||
net-smtp
|
||||
marcel (1.0.4)
|
||||
matrix (0.4.2)
|
||||
mina (1.2.4)
|
||||
open4 (~> 1.3.4)
|
||||
matrix (0.4.3)
|
||||
mina (1.2.5)
|
||||
rake
|
||||
mini_magick (5.3.0)
|
||||
mini_magick (5.3.2)
|
||||
logger
|
||||
mini_mime (1.1.5)
|
||||
mini_portile2 (2.8.9)
|
||||
minitest (5.25.5)
|
||||
minitest (6.0.6)
|
||||
drb (~> 2.0)
|
||||
prism (~> 1.5)
|
||||
monetize (1.9.4)
|
||||
money (~> 6.12)
|
||||
money (6.13.8)
|
||||
|
|
@ -330,12 +339,12 @@ GEM
|
|||
money (~> 6.13.2)
|
||||
railties (>= 3.0)
|
||||
multi_json (1.17.0)
|
||||
multi_xml (0.7.2)
|
||||
bigdecimal (~> 3.1)
|
||||
multi_xml (0.9.1)
|
||||
bigdecimal (>= 3.1, < 5)
|
||||
multipart-post (2.4.1)
|
||||
net-http (0.6.0)
|
||||
uri
|
||||
net-imap (0.5.9)
|
||||
net-http (0.9.1)
|
||||
uri (>= 0.11.1)
|
||||
net-imap (0.6.6)
|
||||
date
|
||||
net-protocol
|
||||
net-pop (0.1.2)
|
||||
|
|
@ -344,22 +353,25 @@ GEM
|
|||
timeout
|
||||
net-smtp (0.5.1)
|
||||
net-protocol
|
||||
next_rails (1.4.6)
|
||||
next_rails (1.4.8)
|
||||
rainbow (>= 3)
|
||||
nio4r (2.7.4)
|
||||
nokogiri (1.18.9)
|
||||
nio4r (2.7.5)
|
||||
nokogiri (1.19.4)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
oauth2 (2.0.12)
|
||||
oauth2 (2.0.25)
|
||||
anonymous_loader (~> 0.1, >= 0.1.3)
|
||||
auth-sanitizer (~> 0.2, >= 0.2.3)
|
||||
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.3)
|
||||
version_gem (>= 1.1.8, < 3)
|
||||
omniauth (2.1.3)
|
||||
snaky_hash (~> 2.0, >= 2.0.7)
|
||||
version_gem (~> 1.1, >= 1.1.14)
|
||||
omniauth (2.1.4)
|
||||
hashie (>= 3.4.6)
|
||||
logger
|
||||
rack (>= 2.2.3)
|
||||
rack-protection
|
||||
omniauth-facebook (8.0.0)
|
||||
|
|
@ -367,13 +379,13 @@ GEM
|
|||
omniauth-github (2.0.1)
|
||||
omniauth (~> 2.0)
|
||||
omniauth-oauth2 (~> 1.8)
|
||||
omniauth-google-oauth2 (1.2.1)
|
||||
omniauth-google-oauth2 (1.2.2)
|
||||
jwt (>= 2.9.2)
|
||||
oauth2 (~> 2.0)
|
||||
omniauth (~> 2.0)
|
||||
omniauth-oauth2 (~> 1.8)
|
||||
omniauth-oauth2 (1.8.0)
|
||||
oauth2 (>= 1.4, < 3)
|
||||
omniauth-oauth2 (1.9.0)
|
||||
oauth2 (>= 2.0.2, < 3)
|
||||
omniauth (~> 2.0)
|
||||
omniauth-openid (2.0.2)
|
||||
omniauth (>= 1.1)
|
||||
|
|
@ -383,27 +395,26 @@ 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.9.0)
|
||||
parser (3.3.12.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.14.1)
|
||||
pdf-reader (2.15.1)
|
||||
Ascii85 (>= 1.0, < 3.0, != 2.0.0)
|
||||
afm (~> 0.2.1)
|
||||
afm (>= 0.2.1, < 2)
|
||||
hashery (~> 2.0)
|
||||
ruby-rc4
|
||||
ttfunk
|
||||
pg (1.6.1)
|
||||
pp (0.6.2)
|
||||
pg (1.6.3)
|
||||
pp (0.6.3)
|
||||
prettyprint
|
||||
prawn (2.5.0)
|
||||
matrix (~> 0.4)
|
||||
|
|
@ -420,43 +431,43 @@ GEM
|
|||
prawn-table (0.2.2)
|
||||
prawn (>= 1.3.0, < 3.0.0)
|
||||
prettyprint (0.2.0)
|
||||
prism (1.4.0)
|
||||
psych (5.2.6)
|
||||
prism (1.9.0)
|
||||
psych (5.3.1)
|
||||
date
|
||||
stringio
|
||||
public_suffix (6.0.2)
|
||||
puma (6.6.1)
|
||||
public_suffix (7.0.5)
|
||||
puma (8.0.2)
|
||||
nio4r (~> 2.0)
|
||||
racc (1.8.1)
|
||||
rack (3.1.16)
|
||||
rack (3.2.6)
|
||||
rack-openid (1.4.2)
|
||||
rack (>= 1.1.0)
|
||||
ruby-openid (>= 2.1.8)
|
||||
rack-protection (4.1.1)
|
||||
rack-protection (4.2.1)
|
||||
base64 (>= 0.1.0)
|
||||
logger (>= 1.6.0)
|
||||
rack (>= 3.0.0, < 4)
|
||||
rack-session (2.1.1)
|
||||
rack-session (2.1.2)
|
||||
base64 (>= 0.1.0)
|
||||
rack (>= 3.0.0)
|
||||
rack-test (2.2.0)
|
||||
rack (>= 1.3)
|
||||
rackup (2.2.1)
|
||||
rackup (2.3.1)
|
||||
rack (>= 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)
|
||||
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)
|
||||
bundler (>= 1.15.0)
|
||||
railties (= 7.2.2.1)
|
||||
railties (= 7.2.3)
|
||||
rails-controller-testing (1.0.5)
|
||||
actionpack (>= 5.0.1.rc1)
|
||||
actionview (>= 5.0.1.rc1)
|
||||
|
|
@ -465,63 +476,65 @@ GEM
|
|||
activesupport (>= 5.0.0)
|
||||
minitest
|
||||
nokogiri (>= 1.6)
|
||||
rails-html-sanitizer (1.6.2)
|
||||
loofah (~> 2.21)
|
||||
rails-html-sanitizer (1.7.1)
|
||||
loofah (~> 2.25, >= 2.25.2)
|
||||
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.2.1)
|
||||
actionpack (= 7.2.2.1)
|
||||
activesupport (= 7.2.2.1)
|
||||
railties (7.2.3)
|
||||
actionpack (= 7.2.3)
|
||||
activesupport (= 7.2.3)
|
||||
cgi
|
||||
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.3.0)
|
||||
rdoc (6.14.2)
|
||||
rake (13.4.2)
|
||||
rdoc (7.2.0)
|
||||
erb
|
||||
psych (>= 4.0.0)
|
||||
recaptcha (5.8.1)
|
||||
json
|
||||
tsort
|
||||
recaptcha (5.21.2)
|
||||
redcarpet (3.6.1)
|
||||
regexp_parser (2.11.1)
|
||||
reline (0.6.2)
|
||||
regexp_parser (2.11.3)
|
||||
reline (0.6.3)
|
||||
io-console (~> 0.5)
|
||||
request_store (1.7.0)
|
||||
rack (>= 1.4)
|
||||
responders (3.1.1)
|
||||
actionpack (>= 5.2)
|
||||
railties (>= 5.2)
|
||||
rexml (3.4.1)
|
||||
responders (3.2.0)
|
||||
actionpack (>= 7.0)
|
||||
railties (>= 7.0)
|
||||
rexml (3.4.4)
|
||||
rolify (6.0.0)
|
||||
rqrcode (2.0.0)
|
||||
rqrcode (3.1.0)
|
||||
chunky_png (~> 1.0)
|
||||
rqrcode_core (~> 1.0)
|
||||
rqrcode_core (1.1.0)
|
||||
rspec-activemodel-mocks (1.1.0)
|
||||
rqrcode_core (~> 2.0)
|
||||
rqrcode_core (2.0.0)
|
||||
rspec-activemodel-mocks (1.3.0)
|
||||
activemodel (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
rspec-mocks (>= 2.99, < 4.0)
|
||||
rspec-core (3.13.5)
|
||||
rspec-core (3.13.6)
|
||||
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.5)
|
||||
rspec-mocks (3.13.8)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.13.0)
|
||||
rspec-rails (8.0.2)
|
||||
rspec-rails (8.0.4)
|
||||
actionpack (>= 7.2)
|
||||
activesupport (>= 7.2)
|
||||
railties (>= 7.2)
|
||||
rspec-core (~> 3.13)
|
||||
rspec-expectations (~> 3.13)
|
||||
rspec-mocks (~> 3.13)
|
||||
rspec-support (~> 3.13)
|
||||
rspec-support (3.13.4)
|
||||
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)
|
||||
rubocop (1.79.2)
|
||||
json (~> 2.3)
|
||||
language_server-protocol (~> 3.17.0.2)
|
||||
|
|
@ -546,7 +559,7 @@ GEM
|
|||
lint_roller (~> 1.1)
|
||||
rubocop (>= 1.75.0, < 2.0)
|
||||
rubocop-ast (>= 1.38.0, < 2.0)
|
||||
rubocop-rails (2.33.1)
|
||||
rubocop-rails (2.33.3)
|
||||
activesupport (>= 4.2.0)
|
||||
lint_roller (~> 1.1)
|
||||
rack (>= 1.1)
|
||||
|
|
@ -563,11 +576,9 @@ GEM
|
|||
ruby-openid (2.9.2)
|
||||
ruby-progressbar (1.13.0)
|
||||
ruby-rc4 (0.1.5)
|
||||
ruby-vips (2.2.4)
|
||||
ruby-vips (2.3.0)
|
||||
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)
|
||||
|
|
@ -591,21 +602,20 @@ 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.0.0)
|
||||
simplecov-cobertura (3.1.0)
|
||||
rexml
|
||||
simplecov (~> 0.19)
|
||||
simplecov-html (0.13.2)
|
||||
simplecov_json_formatter (0.1.4)
|
||||
snaky_hash (2.0.3)
|
||||
snaky_hash (2.0.7)
|
||||
hashie (>= 0.1.0, < 6)
|
||||
version_gem (>= 1.1.8, < 3)
|
||||
version_gem (~> 1.1, >= 1.1.14)
|
||||
sprockets (4.2.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
logger
|
||||
|
|
@ -614,8 +624,8 @@ GEM
|
|||
actionpack (>= 4.0)
|
||||
activesupport (>= 4.0)
|
||||
sprockets (>= 3.0.0)
|
||||
ssrf_filter (1.3.0)
|
||||
stringio (3.1.7)
|
||||
ssrf_filter (1.5.0)
|
||||
stringio (3.2.0)
|
||||
stripe (5.43.0)
|
||||
stripe-ruby-mock (3.1.0.rc3)
|
||||
dante (>= 0.2.0)
|
||||
|
|
@ -623,11 +633,12 @@ GEM
|
|||
stripe (> 5, < 6)
|
||||
sysexits (1.2.0)
|
||||
temple (0.10.4)
|
||||
thor (1.4.0)
|
||||
tilt (2.0.10)
|
||||
thor (1.5.0)
|
||||
tilt (2.6.1)
|
||||
timecop (0.9.4)
|
||||
timeout (0.4.3)
|
||||
timeout (0.6.1)
|
||||
transitions (1.2.1)
|
||||
tsort (0.2.0)
|
||||
ttfunk (1.8.0)
|
||||
bigdecimal (~> 3.1)
|
||||
turbolinks (5.2.1)
|
||||
|
|
@ -637,14 +648,14 @@ GEM
|
|||
concurrent-ruby (~> 1.0)
|
||||
uglifier (4.2.0)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
unicode-display_width (3.1.4)
|
||||
unicode-emoji (~> 4.0, >= 4.0.4)
|
||||
unicode-emoji (4.0.4)
|
||||
unicode-display_width (3.2.0)
|
||||
unicode-emoji (~> 4.1)
|
||||
unicode-emoji (4.2.0)
|
||||
unobtrusive_flash (3.3.1)
|
||||
railties
|
||||
uri (1.0.3)
|
||||
uri (1.1.1)
|
||||
useragent (0.16.11)
|
||||
version_gem (1.1.8)
|
||||
version_gem (1.1.14)
|
||||
warden (1.2.9)
|
||||
rack (>= 2.0.9)
|
||||
web-console (4.1.0)
|
||||
|
|
@ -661,7 +672,7 @@ GEM
|
|||
crack (>= 0.3.2)
|
||||
hashdiff (>= 0.4.0, < 2.0.0)
|
||||
websocket (1.2.11)
|
||||
websocket-driver (0.8.0)
|
||||
websocket-driver (0.8.2)
|
||||
base64
|
||||
websocket-extensions (>= 0.1.0)
|
||||
websocket-extensions (0.1.5)
|
||||
|
|
@ -669,7 +680,7 @@ GEM
|
|||
chronic (>= 0.6.3)
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
zeitwerk (2.7.3)
|
||||
zeitwerk (2.7.5)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
|
@ -693,6 +704,7 @@ DEPENDENCIES
|
|||
climate_control
|
||||
cloudinary
|
||||
cocoon
|
||||
connection_pool (< 3)
|
||||
countable-rails
|
||||
daemons
|
||||
dalli
|
||||
|
|
@ -775,7 +787,7 @@ DEPENDENCIES
|
|||
whenever
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.4.5
|
||||
ruby 3.4.10
|
||||
|
||||
BUNDLED WITH
|
||||
2.6.9
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
Gemfile
|
||||
1
Gemfile.next
Normal file
1
Gemfile.next
Normal file
|
|
@ -0,0 +1 @@
|
|||
Gemfile
|
||||
16
INSTALL.md
16
INSTALL.md
|
|
@ -26,21 +26,22 @@ 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 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:
|
||||
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:
|
||||
|
||||
<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>
|
||||
- https://heroku.com
|
||||
- https://render.com
|
||||
- https://fly.io
|
||||
|
||||
## 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 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.
|
||||
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.
|
||||
|
||||
## Deploy via docker/docker-compose
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
1. Configure OSEM (at least `SECRET_KEY_BASE`)
|
||||
```
|
||||
|
|
@ -53,12 +54,13 @@ 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 production_web bundle exec rake db:bootstrap
|
||||
docker-compose -f docker-compose.yml.production-example run --rm osem bundle exec rake db:setup
|
||||
```
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -8,6 +8,10 @@
|
|||
|
||||
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).
|
||||
|
||||
|
|
@ -15,4 +19,7 @@ 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 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).
|
||||
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
|
||||
|
||||
|
|
|
|||
37
app.json
37
app.json
|
|
@ -1,37 +0,0 @@
|
|||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
$navbar-default-bg: #299a0b;
|
||||
$navbar-default-bg: #005cb3;
|
||||
$navbar-default-link-active-bg: #DFE0DF;
|
||||
$navbar-default-border: 1px solid #d4d4d4;
|
||||
$navbar-default-color: #ffffff;
|
||||
|
|
|
|||
|
|
@ -130,8 +130,7 @@ module Admin
|
|||
end
|
||||
|
||||
def booth_params
|
||||
params.require(:booth).permit(:title, :description, :reasoning, :state, :picture, :conference_id,
|
||||
:created_at, :updated_at, :submitter_relationship, :website_url, responsible_ids: [])
|
||||
params.require(:booth).permit(:title, :description, :reasoning, :picture, :website_url, :submitter_relationship, responsible_ids: [])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ module Admin
|
|||
private
|
||||
|
||||
def difficulty_level_params
|
||||
params.require(:difficulty_level).permit(:title, :description, :color, :conference_id)
|
||||
params.require(:difficulty_level).permit(:title, :description, :color)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -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, :conference_id, :description)
|
||||
params.require(:event_type).permit(:title, :length, :minimum_abstract_length, :maximum_abstract_length, :color, :description)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ module Admin
|
|||
end
|
||||
|
||||
def comment_params
|
||||
params.require(:comment).permit(:commentable, :body, :user_id)
|
||||
params.require(:comment).permit(:body)
|
||||
end
|
||||
|
||||
def update_state(transition, notice, mail = false, subject = false, send_mail = false)
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ module Admin
|
|||
private
|
||||
|
||||
def lodging_params
|
||||
params.require(:lodging).permit(:name, :description, :picture, :picture_cache, :website_link, :conference_id)
|
||||
params.require(:lodging).permit(:name, :description, :picture, :picture_cache, :website_link)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ module Admin
|
|||
private
|
||||
|
||||
def question_params
|
||||
params.require(:question).permit(:title, :global, :answer_ids, :question_type_id, :conference_id, answers_attributes: [:id, :title])
|
||||
params.require(:question).permit(:title, :global, :answer_ids, :question_type_id, answers_attributes: [:id, :title])
|
||||
end
|
||||
|
||||
def conference_params
|
||||
|
|
|
|||
|
|
@ -82,8 +82,7 @@ module Admin
|
|||
|
||||
def registration_params
|
||||
params.require(:registration).permit(
|
||||
:user_id, :conference_id, :attended,
|
||||
:volunteer, :other_special_needs, :accepted_code_of_conduct,
|
||||
:attended, :volunteer, :other_special_needs, :accepted_code_of_conduct,
|
||||
vchoice_ids: [], qanswer_ids: [], qanswers_attributes: [], event_ids: []
|
||||
)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ module Admin
|
|||
private
|
||||
|
||||
def resource_params
|
||||
params.require(:resource).permit(:name, :description, :quantity, :used, :conference_id)
|
||||
params.require(:resource).permit(:name, :description, :quantity, :used)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -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] = "Coud not add role #{@role.name} to #{user.email}"
|
||||
flash[:error] = "Could not add role #{@role.name} to #{user.email}"
|
||||
end
|
||||
|
||||
respond_to do |format|
|
||||
|
|
|
|||
|
|
@ -52,14 +52,14 @@ module Admin
|
|||
private
|
||||
|
||||
def sponsor_params
|
||||
params.require(:sponsor).permit(:name, :description, :website_url, :picture, :picture_cache, :sponsorship_level_id, :conference_id)
|
||||
params.require(:sponsor).permit(:name, :description, :website_url, :picture, :picture_cache, :sponsorship_level_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 atleast one sponsorship level to add a sponsor'
|
||||
alert: 'You need to create at least one sponsorship level to add a sponsor'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ module Admin
|
|||
private
|
||||
|
||||
def sponsorship_level_params
|
||||
params.require(:sponsorship_level).permit(:title, :conference_id)
|
||||
params.require(:sponsorship_level).permit(:title)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ module Admin
|
|||
private
|
||||
|
||||
def ticket_params
|
||||
params.require(:ticket).permit(:conference, :title, :url, :description, :conference_id, :price_cents, :price_currency, :price, :registration_ticket)
|
||||
params.require(:ticket).permit(:title, :url, :description, :price_cents, :price_currency, :price, :registration_ticket)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -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, :conference_id)
|
||||
params.require(:venue).permit(:name, :street, :postalcode, :city, :country, :longitude, :latitude, :description, :website, :picture, :picture_cache, :lodgings_attributes)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ module Admin
|
|||
end
|
||||
|
||||
elsif @version.event == 'create' && @version.item
|
||||
# if @version represets a create event and is not currently deleted
|
||||
# if @version represents a create event and is not currently deleted
|
||||
@version.item.destroy
|
||||
flash[:notice] = 'The selected change was successfully reverted'
|
||||
|
||||
|
|
|
|||
|
|
@ -94,7 +94,6 @@ class BoothsController < ApplicationController
|
|||
private
|
||||
|
||||
def booth_params
|
||||
params.require(:booth).permit(:title, :description, :reasoning, :state, :picture, :conference_id,
|
||||
:created_at, :updated_at, :submitter_relationship, :website_url, responsible_ids: [])
|
||||
params.require(:booth).permit(:title, :description, :reasoning, :picture, :website_url, :submitter_relationship, responsible_ids: [])
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -110,7 +110,6 @@ class ConferenceRegistrationsController < ApplicationController
|
|||
def registration_params
|
||||
params.require(:registration)
|
||||
.permit(
|
||||
:conference_id,
|
||||
:volunteer, :accepted_code_of_conduct,
|
||||
vchoice_ids: [], qanswer_ids: [],
|
||||
qanswers_attributes: [],
|
||||
|
|
|
|||
|
|
@ -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 beetween the start and the end time.
|
||||
# the schedule takes you to the current time if it is between 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
|
||||
|
|
|
|||
|
|
@ -31,10 +31,4 @@ 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
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ module ConferenceHelper
|
|||
location += "#{v.country_name}, " if v.country_name
|
||||
e.location = location
|
||||
end
|
||||
e.categories = conference.title, "Difficulty: #{proposal.difficulty_level.title}", "Track: #{proposal.track.name}"
|
||||
e.categories = conference.title, "Audience: #{proposal.difficulty_level.title}", "Track: #{proposal.track.name}"
|
||||
end
|
||||
end
|
||||
calendar
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ module DateTimeHelper
|
|||
##
|
||||
# Gets a datetime object
|
||||
# ====Returns
|
||||
# * +String+ -> formated datetime object
|
||||
# * +String+ -> formatted datetime object
|
||||
def format_datetime(obj)
|
||||
return unless obj
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ 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
|
||||
|
|
@ -151,6 +152,8 @@ 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)
|
||||
|
|
@ -162,6 +165,8 @@ 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
|
||||
|
|
|
|||
|
|
@ -422,7 +422,7 @@ class Conference < ApplicationRecord
|
|||
|
||||
##
|
||||
# Returns a hash with affiliation =>
|
||||
# {value: count of registration whose user has that affilation, color: color}
|
||||
# {value: count of registration whose user has that affiliation, 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 beetween the start and the
|
||||
# current hour, in case that the current hour is between 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
|
||||
|
||||
# Auxiliar function which is used in next_color and returns each component of
|
||||
# Auxiliary 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 beetween 0 and 24
|
||||
# and that both hours are between 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 diffculty level
|
||||
# * +False+ -> No difficulty 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 diffculty level
|
||||
# * +False+ -> No difficulty level
|
||||
def event_types_set?
|
||||
program.event_types.any?
|
||||
end
|
||||
|
|
|
|||
|
|
@ -94,7 +94,7 @@ class Event < ApplicationRecord
|
|||
}.freeze
|
||||
|
||||
##
|
||||
# Checkes if the event has a start_time and a room for the selected schedule if there is any
|
||||
# Checks if the event has a start_time and a room for the selected schedule if there is any
|
||||
# ====Returns
|
||||
# * +true+ or +false+
|
||||
def scheduled?
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ class Program < ApplicationRecord
|
|||
end
|
||||
|
||||
##
|
||||
# Checcks if the program has rating enabled
|
||||
# Checks if the program has rating enabled
|
||||
#
|
||||
# ====Returns
|
||||
# * +false+ -> If rating is not enabled
|
||||
|
|
|
|||
|
|
@ -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 convertions between currencies!
|
||||
# If we would allow different currencies per conference we also have to handle conversions between currencies!
|
||||
validate :tickets_of_conference_have_same_currency
|
||||
|
||||
validates :price_cents, :price_currency, :title, presence: true
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ class User < ApplicationRecord
|
|||
}.freeze
|
||||
|
||||
##
|
||||
# Checkes if the user attended the event
|
||||
# Checks 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
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
Edit Difficulty Level
|
||||
Edit Audience
|
||||
= @difficulty_level.title
|
||||
.row
|
||||
.col-md-8
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
.row
|
||||
.col-md-12
|
||||
.page-header
|
||||
%h1 Difficulty Levels
|
||||
%h1 Audiences
|
||||
%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 Difficulty Level', new_admin_conference_program_difficulty_level_path(@conference.short_title), class: 'btn btn-primary'
|
||||
= link_to 'Add Audience', new_admin_conference_program_difficulty_level_path(@conference.short_title), class: 'btn btn-primary'
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
Create Difficulty Level
|
||||
Create Audience
|
||||
.row
|
||||
.col-md-8
|
||||
= render partial: 'form'
|
||||
|
|
|
|||
|
|
@ -82,7 +82,7 @@
|
|||
%th
|
||||
%b Track
|
||||
%th
|
||||
%b Difficulty
|
||||
%b Audience
|
||||
%th
|
||||
%b State
|
||||
%th
|
||||
|
|
|
|||
|
|
@ -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 a difficulty level', edit_admin_conference_program_event_path(@event.program.conference.short_title, @event)
|
||||
%td= link_to 'Add an Audience 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
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
%dd
|
||||
= tracks(@conference)
|
||||
%dt
|
||||
Difficulty Levels:
|
||||
Audiences:
|
||||
%dd
|
||||
= difficulty_levels(@conference)
|
||||
%dt
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
%p
|
||||
Setup the time frame in which people can registrer to your conference
|
||||
Setup the time frame in which people can register to your conference
|
||||
= form_for(@registration_period, url: admin_conference_registration_period_path(@conference.short_title)) do |f|
|
||||
.form-group
|
||||
= f.label :start_date
|
||||
|
|
|
|||
|
|
@ -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']
|
||||
row = ['Attended', 'Name', 'Nickname', 'Affilιation', 'Email', 'Ticket Token']
|
||||
|
||||
@conference.questions.each do |question|
|
||||
row << question.title
|
||||
|
|
@ -18,6 +18,7 @@ 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 : '' )
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
.col-md-12
|
||||
.page-header
|
||||
%h1
|
||||
Edit Tack
|
||||
Edit Track
|
||||
= @track.name
|
||||
.row
|
||||
.col-md-12
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
= f.file_field :picture
|
||||
= f.hidden_field :picture_cache
|
||||
%span.help-block
|
||||
This will be displayed on the venue are of the splash page.
|
||||
This will be displayed on the venue area of the splash page.
|
||||
.form-group
|
||||
= f.label :street
|
||||
%abbr{title: 'This field is required'} *
|
||||
|
|
|
|||
|
|
@ -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, comunity manager, etc
|
||||
e.g. employee, community manager, etc
|
||||
.form-group
|
||||
= f.label :website_url, 'Website URL'
|
||||
%abbr{title: 'This field is required'} *
|
||||
|
|
|
|||
|
|
@ -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 'Difficulty Levels', admin_conference_program_difficulty_levels_path(@conference.short_title)
|
||||
= link_to 'Audience', 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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
= f.label :difficulty_level, 'Audience'
|
||||
= 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
|
||||
|
|
|
|||
|
|
@ -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 a difficulty level', edit_conference_program_proposal_path(event.program.conference.short_title, event)
|
||||
= link_to 'Add an Audience', edit_conference_program_proposal_path(event.program.conference.short_title, event)
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@
|
|||
%dl#proposal-info
|
||||
.col-md-12
|
||||
%dt Date:
|
||||
%dd= @event_schedule.start_time.strftime("%Y %B %e - %H:%M") if @event_schedule
|
||||
%dd= @event_schedule.start_time.strftime("%Y %B %e - %-I:%M %p") 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 Difficulty:
|
||||
%dt Audience:
|
||||
%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 %H:%M")
|
||||
= event.program.selected_event_schedules.find { |es| es.event == event }.start_time.strftime("%Y %B %e %-I:%M %p")
|
||||
%br
|
||||
%dt Room:
|
||||
%dd
|
||||
|
|
|
|||
|
|
@ -17,9 +17,7 @@
|
|||
- interval_count.times do
|
||||
%th.date
|
||||
%span
|
||||
= (td_start_time).strftime("%H:")
|
||||
%span
|
||||
= (td_start_time).strftime("%M")
|
||||
= (td_start_time).strftime("%-I:%M %p")
|
||||
- td_start_time += @step_minutes
|
||||
- start_room_time = start_time
|
||||
- @rooms.each do |room|
|
||||
|
|
|
|||
|
|
@ -24,9 +24,9 @@
|
|||
%span.track
|
||||
%span.fa-solid.fa-clock
|
||||
%span.label{ style: "background-color: grey" }
|
||||
= event_schedule.start_time.strftime('%H:%M')
|
||||
= event_schedule.start_time.strftime('%-I:%M %p')
|
||||
\-
|
||||
= event_schedule.end_time.strftime('%H:%M')
|
||||
= event_schedule.end_time.strftime('%-I:%M %p')
|
||||
%span.track
|
||||
%span.fa-solid.fa-location-dot
|
||||
%span.label{ style: "background-color: grey" }
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@
|
|||
}
|
||||
});
|
||||
|
||||
// hide the right and left controls when neccesary after moving the carousel
|
||||
// hide the right and left controls when necessary after moving the carousel
|
||||
$('.carousel').on('slid.bs.carousel', '',
|
||||
function(){
|
||||
$(this).children('.left.carousel-control').show();
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@
|
|||
|
||||
/ 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
|
||||
|
|
@ -30,15 +29,11 @@
|
|||
= 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 }
|
||||
- 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
|
||||
.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
|
||||
= render partial: 'event', locals: { event: event_schedule.event, event_schedule: event_schedule }
|
||||
|
||||
/ confirmed events that are not scheduled
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@
|
|||
});
|
||||
});
|
||||
|
||||
// hide the right and left controls when neccesary after moving the carousel
|
||||
// hide the right and left controls when necessary after moving the carousel
|
||||
$('.carousel').on('slid.bs.carousel', '',
|
||||
function(){
|
||||
$(this).children('.left.carousel-control').show();
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
%th Updated Attribute
|
||||
|
||||
%th{ class: "#{'hidden' if version.event == 'create'}" }
|
||||
Prevous Value
|
||||
Previous Value
|
||||
|
||||
%th{ class: "#{'hidden' if version.event == 'destroy'}" }
|
||||
New Value
|
||||
|
|
|
|||
0
bin/bundle
Executable file → Normal file
0
bin/bundle
Executable file → Normal file
0
bin/bundle_report
Executable file → Normal file
0
bin/bundle_report
Executable file → Normal file
0
bin/delayed_job
Executable file → Normal file
0
bin/delayed_job
Executable file → Normal file
0
bin/deprecations
Executable file → Normal file
0
bin/deprecations
Executable file → Normal file
0
bin/gem-next-diff
Executable file → Normal file
0
bin/gem-next-diff
Executable file → Normal file
0
bin/next
Executable file → Normal file
0
bin/next
Executable file → Normal file
0
bin/rails
Executable file → Normal file
0
bin/rails
Executable file → Normal file
0
bin/rake
Executable file → Normal file
0
bin/rake
Executable file → Normal file
0
bin/rspec
Executable file → Normal file
0
bin/rspec
Executable file → Normal file
|
|
@ -1,24 +1,25 @@
|
|||
services:
|
||||
production_database:
|
||||
image: postgres:12-alpine
|
||||
postgres:
|
||||
image: postgres:16-alpine
|
||||
environment:
|
||||
PGDATA: /var/lib/postgresql/data/pgdata
|
||||
POSTGRES_USER: osem
|
||||
POSTGRES_PASSWORD: mysecretpassword
|
||||
volumes:
|
||||
- osem_production_database:/var/lib/postgresql/data/pgdata
|
||||
production_web:
|
||||
osem:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile.production
|
||||
depends_on:
|
||||
- production_database
|
||||
- postgres
|
||||
ports:
|
||||
- 8080:3000
|
||||
- 80:5000
|
||||
env_file: .env.production # see dotenv.example file
|
||||
environment:
|
||||
OSEM_DB_HOST: production_database
|
||||
RAILS_SERVE_STATIC_FILES: 'true'
|
||||
command: foreman start -p 3000
|
||||
OSEM_DB_HOST: postgres
|
||||
OSEM_DB_USER: osem
|
||||
OSEM_DB_PASSWORD: mysecretpassword
|
||||
volumes:
|
||||
- osem_production_web_data:/osem/public/system
|
||||
- osem_production_web_assets:/osem/public/assets
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
# The name of the host the database runs on
|
||||
# OSEM_DB_HOST=database
|
||||
|
||||
# The port the databse runs on
|
||||
# The port the database runs on
|
||||
# OSEM_DB_PORT=3306
|
||||
|
||||
# The user to access the database with
|
||||
|
|
|
|||
|
|
@ -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 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 = 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.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
|
||||
|
|
|
|||
|
|
@ -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 abou 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 about 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)
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace :user do
|
|||
end
|
||||
end
|
||||
|
||||
desc "Set email_public attrubute true for all users"
|
||||
desc "Set email_public attribute true for all users"
|
||||
task :set_email_public => :environment do
|
||||
User.update_all email_public: true
|
||||
end
|
||||
|
|
|
|||
11
railway.json
11
railway.json
|
|
@ -1,11 +0,0 @@
|
|||
{
|
||||
"$schema": "https://railway.app/railway.schema.json",
|
||||
"build": {
|
||||
"builder": "nixpacks"
|
||||
},
|
||||
"deploy": {
|
||||
"startCommand": "foreman start -p 3000",
|
||||
"restartPolicyType": "ON_FAILURE",
|
||||
"restartPolicyMaxRetries": 2
|
||||
}
|
||||
}
|
||||
|
|
@ -264,5 +264,31 @@ 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
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
FactoryBot.define do
|
||||
factory :comment do
|
||||
body { 'Most interresting comment ever, created by a girl.' }
|
||||
body { 'Most interesting comment ever, created by a girl.' }
|
||||
user
|
||||
association :commentable, factory: :event
|
||||
end
|
||||
|
|
|
|||
0
spec/models/conference_spec.rb
Executable file → Normal file
0
spec/models/conference_spec.rb
Executable file → Normal file
Loading…
Add table
Add a link
Reference in a new issue