153 Commits

Author SHA1 Message Date
f52ec0411d gremium und studien factory und specs 2019-01-13 15:13:31 +01:00
92d63b71ed neuigkeit factory small fix 2019-01-13 13:35:06 +01:00
30cbe8923f neuigkeit controller spec 2019-01-13 13:24:00 +01:00
1b15fdf385 very small fix for neuigkeit controller 2019-01-13 10:12:01 +01:00
d7c8342817 additional neuigkeit test 2019-01-13 10:11:25 +01:00
71d14c83ae rewriting some factories 2019-01-13 10:01:22 +01:00
fea219ba92 forst neuigkeit controller spec 2019-01-07 23:32:23 +01:00
1b065cd3f0 nes neuigkeiten model specs 2019-01-07 23:31:55 +01:00
67bfa0f699 Merge branch 'master' into prep_upgrade 2019-01-05 16:20:37 +01:00
ff20774889 improve tests for lva 2019-01-05 16:18:30 +01:00
f7f8937197 started increasing test coverage for lva 2019-01-05 02:56:47 +01:00
c713fdd0d0 ignore coverage folder 2019-01-05 02:56:08 +01:00
bc8f4cfce3 small fixes for neuigkeit spec 2019-01-05 02:55:35 +01:00
5759ba79e0 increase test coverage for meetings 2019-01-05 02:54:50 +01:00
70e415446a simplecov added to determine test coverage 2019-01-05 02:53:04 +01:00
82cd127370 Remove generated documentation from version control 2019-01-02 18:52:35 +01:00
72e18f9e29 generated documentation 2019-01-01 19:04:08 +01:00
e873916095 no longer ignore Gemfile.lock and adding Gemfile.lock 2018-12-30 09:33:19 +01:00
6ebb36d840 no longer ignore Gemfile.lock 2018-12-30 09:32:28 +01:00
f6c3cda045 fixes in fotogallery 2018-12-29 01:04:16 +01:00
a20c6fa673 Corrected solr config + minor bugfixes 2018-09-17 12:05:47 +02:00
Andreas Stephanides
52ffe0c701 added developer login strategy for testing 2018-06-02 12:01:18 +02:00
Andreas Stephanides
52fcabf2dc fix login menu 2018-05-26 08:52:26 +02:00
Andreas Stephanides
c03a60c236 developer login added 2018-05-26 08:50:54 +02:00
1cf84c90ae test 2018-05-20 23:35:38 +02:00
2e732561e8 infoscreenframe 2018-05-20 23:29:34 +02:00
a8f353f213 fixes for production Gemfile 2018-05-20 22:21:34 +02:00
6ba20206ab Merge remote-tracking branch 'origin/stable-production' into stable-production 2018-05-20 21:31:56 +02:00
Andreas Stephanides
2ae99b4b9e remove http header language detection 2018-05-20 21:20:43 +02:00
Andreas Stephanides
f61681c5d0 moved views from theme blue2 to default removed override by theme 2018-05-20 21:18:37 +02:00
1b91d99b24 Merge remote-tracking branch 'origin/master' into stable-production 2018-05-14 21:14:40 +02:00
28906eb5fb write True small 2018-05-14 21:13:42 +02:00
745c4413f4 fix the solr path for production 2018-05-14 21:00:17 +02:00
ac7e7f3462 Merge remote-tracking branch 'origin/master' into stable-production 2018-05-14 20:26:09 +02:00
e55a71e77d rake version set to 10 2018-05-14 20:26:04 +02:00
502aae5c27 merge latest 2018-05-14 20:17:30 +02:00
c2ebdcbefc merge master and stable 2018-05-14 19:58:17 +02:00
734a137563 testtmp 2018-05-14 18:55:37 +02:00
9f1de3d9d0 diverse hot fixes von der productive Version auf fetruby 2018-05-14 17:56:17 +02:00
Pet
0f683ac974 Found out the testrby is on Mogok ;) 2018-04-12 23:25:25 +02:00
Pet
5ffecf7087 Updated Lackis infoscreen layout 2018-04-12 22:48:20 +02:00
Pet
965db4dec0 Updated Lackis infoscreen layout 2018-04-12 22:45:00 +02:00
Pet
6aecb4b4a8 Updated Lackis infoscreen layout 2018-04-12 22:43:10 +02:00
Pet
b1616a6d6d Updated Lackis infoscreen layout 2018-04-12 22:39:48 +02:00
Pet
122bf6c6d4 Updated Lackis infoscreen layout 2018-04-12 22:37:00 +02:00
Pet
829bdb97be Updated Lackis infoscreen layout 2018-04-12 22:35:10 +02:00
Pet
6c91513ff8 Updated Lackis infoscreen layout 2018-04-12 22:33:00 +02:00
Pet
d1a496a017 Updated Lackis infoscreen layout 2018-04-12 22:29:34 +02:00
Pet
eb95f7a5e4 Updated Lackis infoscreen layout 2018-04-12 22:26:46 +02:00
Pet
de225627b1 Updated Lackis infoscreen layout 2018-04-12 22:20:44 +02:00
Pet
08aa459f57 Updated Lackis infoscreen layout 2018-04-12 22:16:06 +02:00
Pet
2b6890a6e6 Updated Lackis infoscreen layout 2018-04-12 22:14:55 +02:00
Pet
04ce26754a Updated Lackis infoscreen layout 2018-04-12 22:10:14 +02:00
Pet
163e1adfc2 Updated Lackis infoscreen layout 2018-04-12 22:04:47 +02:00
Pet
e5a5ec85ef Updated Lackis infoscreen layout 2018-04-12 22:02:50 +02:00
Pet
256d9f09fb Updated Lackis infoscreen layout 2018-04-12 21:58:19 +02:00
Pet
e3c6721811 Updated Lackis infoscreen layout 2018-04-12 21:55:05 +02:00
Pet
e5f0d75b79 Updated Lackis infoscreen layout 2018-04-12 21:47:07 +02:00
Pet
07bb853501 Updated Lackis infoscreen layout 2018-04-12 21:42:03 +02:00
Pet
af5b081a3b Updated Lackis infoscreen layout 2018-04-12 20:54:08 +02:00
Pet
24f3e90235 Updated Lackis infoscreen layout 2018-04-12 20:51:16 +02:00
Pet
ef1135962e Implemented Lackis infoscreen layout 2018-04-12 20:33:09 +02:00
Pet
22cf26f76c changed infoscreen layout 2018-03-28 16:06:52 +02:00
Pet
0c7614b41d removed the wrong login window 2018-03-27 23:09:18 +02:00
Pet
0fedeb2bde changed etherpad link 2018-03-27 22:03:17 +02:00
Pet
146885abae changed etherpad link 2018-03-27 22:01:20 +02:00
Pet
c38139d6f1 changed the etherpad url 2018-03-26 22:18:50 +02:00
ruby fuer rvm
8cb6ec785c no sunspot pid file 2018-03-10 07:10:03 +00:00
root
b8903c6d9a ignore pid files 2018-03-10 06:59:53 +00:00
Andreas Stephanides
242d05f4fa AutoCommit Mit Aug 23 10:03:01 CEST 2017 2017-08-23 10:03:01 +02:00
Andreas Stephanides
070e0dfedb fixing blue2 index 2017-07-27 09:23:02 +02:00
ruby
610e6ae3dd new design 2017-07-25 17:11:51 +02:00
Andreas Stephanides
6c4873d869 AutoCommit Die Jul 25 11:03:01 CEST 2017 2017-07-25 11:03:01 +02:00
Andreas Stephanides
09d5e7b880 Merge branch 'master' of https://git.triton.fet.at/git/fetsite 2017-07-25 10:21:50 +02:00
Andreas Stephanides
6b37d44c9a AutoCommit Die Jul 25 10:03:02 CEST 2017 2017-07-25 10:03:02 +02:00
peter
20088b868f added header image to infoscreen 2017-06-01 00:06:20 +02:00
peter
f1fbd3bef3 added header image to infoscreen 2017-05-31 23:58:38 +02:00
peter
17a43097e7 added header image to infoscreen 2017-05-31 23:55:56 +02:00
peter
3498535d8c added header image to infoscreen 2017-05-31 23:54:11 +02:00
peter
d313e712f1 added header image to infoscreen 2017-05-31 23:52:47 +02:00
peter
bb4adf2eb7 added header image to infoscreen 2017-05-31 23:47:38 +02:00
peter
09532fc74c added header image to infoscreen 2017-05-31 23:41:51 +02:00
peter
29d5c8dac7 added header image to infoscreen 2017-05-31 23:39:50 +02:00
peter
926431c0a2 added header image to infoscreen 2017-05-31 23:38:02 +02:00
peter
d95e1a3399 added header image to infoscreen 2017-05-31 23:35:58 +02:00
peter
d6fa4e1dc7 added header image to infoscreen 2017-05-31 23:27:07 +02:00
peter
6528e8a320 added header image to infoscreen 2017-05-31 23:24:35 +02:00
peter
18beead785 added header image to infoscreen 2017-05-31 23:16:34 +02:00
peter
3baf44c057 added header image to infoscreen 2017-05-31 23:08:43 +02:00
peter
9ec7a76d4a added header image to infoscreen 2017-05-31 23:03:13 +02:00
peter
3b6590f369 added header image to infoscreen 2017-05-31 23:01:07 +02:00
peter
708911ba4e added header image to infoscreen 2017-05-31 22:55:09 +02:00
peter
797d2a1d31 added header image to infoscreen 2017-05-31 22:54:01 +02:00
peter
7ad484cdd7 added header image to infoscreen 2017-05-31 22:52:06 +02:00
peter
aca92e1107 added header image to infoscreen 2017-05-31 22:46:11 +02:00
peter
f13fbafaae added header image to infoscreen 2017-05-31 22:45:42 +02:00
peter
f6738a5226 added header image to infoscreen 2017-05-31 22:42:31 +02:00
peter
2f4a9e4f10 added header image to infoscreen 2017-05-31 22:40:19 +02:00
peter
dff490163e added header image to infoscreen 2017-05-31 22:39:03 +02:00
peter
20a7091800 added header image to infoscreen 2017-05-31 22:38:10 +02:00
peter
ff49499204 added header image to infoscreen 2017-05-31 22:36:18 +02:00
peter
8b3e1ee225 added header image to infoscreen 2017-05-31 22:32:14 +02:00
peter
dc4f161ce4 added header image to infoscreen 2017-05-31 22:29:42 +02:00
peter
5c5236062b added header image to infoscreen 2017-05-31 22:20:53 +02:00
peter
43af1114e8 added header image to infoscreen 2017-05-31 22:16:54 +02:00
peter
0772d51c71 added header image to infoscreen 2017-05-31 22:15:34 +02:00
peter
f2293513c1 added header image to infoscreen 2017-05-31 22:14:12 +02:00
peter
87cad802d7 added header image to infoscreen 2017-05-31 22:12:39 +02:00
peter
2e4a0680df added header image to infoscreen 2017-05-31 22:07:11 +02:00
peter
4ca664a091 added header image to infoscreen 2017-05-31 22:04:03 +02:00
peter
02c766f428 added header image to infoscreen 2017-05-31 22:03:05 +02:00
peter
75e5b8e267 added header image to infoscreen 2017-05-31 21:59:47 +02:00
peter
7d008cb599 added header image to infoscreen 2017-05-31 21:51:41 +02:00
peter
b1fc24af80 set config.serve_static_assets = false 2017-05-31 21:49:21 +02:00
peter
7477b028c5 set config.serve_static_assets = false 2017-05-31 21:44:51 +02:00
peter
fddaa0dcb6 set config.serve_static_assets = false 2017-05-31 21:40:47 +02:00
peter
4ed7e92385 set config.serve_static_assets = true 2017-05-31 21:35:24 +02:00
peter
82876f34a8 changed infoscreen layout 2017-05-31 21:29:54 +02:00
peter
3d97153fa5 changed infoscreen layout 2017-05-31 21:28:09 +02:00
peter
6e10830b83 changed infoscreen layout 2017-05-31 21:05:06 +02:00
peter
8ad15aafd2 changed infoscreen layout 2017-05-31 21:03:43 +02:00
peter
d4948fff5e changed infoscreen layout 2017-05-31 15:11:59 +02:00
peter
8ea2109b27 changed infoscreen layout 2017-05-31 15:10:40 +02:00
peter
f72466f1cd changed infoscreen layout 2017-05-31 15:09:05 +02:00
peter
cba94e926c changed infoscreen layout 2017-05-31 15:07:47 +02:00
peter
f522a83813 changed infoscreen layout 2017-05-31 15:05:53 +02:00
peter
94d67463a9 changed infoscreen layout 2017-05-31 15:03:08 +02:00
peter
38656a1e75 changed infoscreen layout 2017-05-31 15:01:35 +02:00
peter
503b9eb732 changed infoscreen layout 2017-05-31 14:59:25 +02:00
peter
ffee3b8dfb changed infoscreen layout 2017-05-31 14:57:01 +02:00
peter
978f617131 changed infoscreen layout 2017-05-31 14:54:07 +02:00
peter
cf2a8adf49 changed infoscreen layout 2017-05-31 14:49:35 +02:00
peter
14e563ef95 changed infoscreen layout 2017-05-31 12:35:30 +02:00
Pet
5660cd7748 added testtext 2017-05-31 12:14:00 +02:00
Andreas Stephanides
af5d055014 change timeout for inforscreen 2017-05-29 09:56:46 +02:00
Andreas Stephanides
453dd7867d change timeout for inforscreen 2017-05-29 09:44:09 +02:00
root
bbfb5e6a1d Merge branch 'latest' of https://git.triton.fet.at/git/fetsite into latest 2017-05-13 23:04:50 +02:00
Andreas Stephanides
4ed35f184c https-etherpad 2017-05-12 07:18:19 +02:00
ruby
37aab0ef59 Merge branch 'latest' of https://git.triton.fet.at/git/fetsite into latest 2017-05-09 15:13:08 +02:00
ruby
c53d34191a fixes to init script 2017-05-09 15:11:28 +02:00
ruby
61c5624b16 blue2 default2 2017-05-09 15:11:00 +02:00
ruby
a1ef7028fd local solr sunspot 2017-05-09 15:10:40 +02:00
Andreas Stephanides
b5f1ae9e69 APIKEY 2017-05-09 13:39:52 +02:00
Andreas Stephanides
6a9fe8243b fix apth for ETHERPAD Key 2017-05-09 13:38:32 +02:00
Andreas Stephanides
1f581ab819 delete empty files 2017-05-09 13:31:45 +02:00
root
e73315bd41 fix neuigkeiten 2017-05-04 17:56:47 +02:00
Andreas Stephanides
491e360141 small fixes incl. solr 2017-04-18 19:03:09 +02:00
Andreas Stephanides
28226df76c Merge remote-tracking branch 'fetmaster/master' 2017-04-17 13:20:01 +02:00
Andreas Stephanides
14598fbbd9 add a README 2017-04-03 15:26:29 +02:00
Andreas Stephanides
ffaa57c914 starttopic nil 2017-04-03 15:26:19 +02:00
Andreas Stephanides
cd439ecf02 solr config update 2017-04-03 15:26:01 +02:00
Andreas Stephanides
328adfe3a5 calentries view fixed 2017-04-03 15:25:40 +02:00
Andreas Stephanides
e0312386e7 no boost for studium 2017-04-03 15:25:22 +02:00
93 changed files with 2361 additions and 1210 deletions

14
.gitignore vendored
View File

@@ -28,7 +28,7 @@
/db/schema.rb
/db/structure.sql
/config/initializers/devise.rb
Gemfile.lock
# Ignore all logfiles and tempfiles.
/log/*.log
/tmp
@@ -40,15 +40,23 @@ console
/server
/public/uploads/
/public/sitemap*
/public/assets/
/vendor/*
/bak/*
/solr/*
/log/*
*#
Gemfile.lock
/config/database.yml
/config/start_topic.yml
/config/contact_topic.yml
/config/etherpad/APIKEY.*
/config/page.yml
.#*
.*
!/.gitignore
!/.gitignore
*.pid
/doc/app
coverage/*

11
Gemfile
View File

@@ -1,11 +1,11 @@
source 'https://rubygems.org'
gem 'rake', '~>10.0'
gem 'rails', '3.2.13'
gem 'sprockets', '2.2.2'
gem 'webrick', '1.3.1'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'mysql2'
gem 'mysql2', '~>0.3.10'
gem 'sqlite3'
gem 'execjs', '~>1.4.0'
@@ -33,7 +33,7 @@ gem 'jquery-rails'
# gem 'jbuilder'
# Use unicorn as the app server
gem 'unicorn'
gem 'unicorn', '~>4.8.0'
# Deploy with Capistran
# gem 'capistrano'
@@ -82,7 +82,7 @@ gem 'haml'
#gem 'wikicloth'
#gem 'gollum-lib'
gem 'awesome_nested_set'
gem 'annotate', ">=2.5.0"
gem 'annotate', "~>2.6.0"
gem 'carrierwave', "~>0.9.0"
group :development, :test do
gem 'factory_girl_rails',"~>4.5.0"
@@ -96,6 +96,7 @@ gem 'rspec-activemodel-mocks', '~>1.0.1'
gem 'rspec-html-matchers', '~>0.7.0'
gem 'rspec-expectations', '~>3.3.1'
gem 'capybara', '~>2.5.0'
gem 'simplecov'
end
gem "simple_calendar", "~> 0.1.9"
@@ -136,4 +137,4 @@ gem 'blueimp-gallery-rails'
gem 'shareable'
gem 'sunspot_test'
gem 'sunspot_test'

456
Gemfile.lock Normal file
View File

@@ -0,0 +1,456 @@
GIT
remote: git://github.com/matenia/bootstrap-kaminari-views.git
revision: 9df61d400fc144c3f33d65f3f97e4867b8e68273
specs:
bootstrap-kaminari-views (0.0.5)
kaminari (>= 0.13)
rails (>= 3.1)
GIT
remote: git://github.com/rgrove/sanitize
revision: acc7e6440139379a0c6b4b76b662ed90acd4b923
specs:
sanitize (4.6.4)
crass (~> 1.0.2)
nokogiri (>= 1.4.4)
nokogumbo (~> 1.4)
GEM
remote: https://rubygems.org/
specs:
actionmailer (3.2.13)
actionpack (= 3.2.13)
mail (~> 2.5.3)
actionpack (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
rack (~> 1.4.5)
rack-cache (~> 1.2)
rack-test (~> 0.6.1)
sprockets (~> 2.2.1)
active_record_query_trace (1.5.4)
activemodel (3.2.13)
activesupport (= 3.2.13)
builder (~> 3.0.0)
activerecord (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.13)
activemodel (= 3.2.13)
activesupport (= 3.2.13)
activesupport (3.2.13)
i18n (= 0.6.1)
multi_json (~> 1.0)
acts_as_votable (0.11.1)
addressable (2.5.2)
public_suffix (>= 2.0.2, < 4.0)
aes_key_wrap (1.0.1)
annotate (2.6.10)
activerecord (>= 3.2, <= 4.3)
rake (~> 10.4)
arel (3.0.3)
attr_required (1.0.1)
awesome_nested_set (2.1.6)
activerecord (>= 3.0.0)
bcrypt (3.1.11)
bcrypt-ruby (3.1.5)
bcrypt (>= 3.1.3)
bindata (2.4.3)
blueimp-gallery (2.11.0.1)
railties (>= 3.1.0)
blueimp-gallery-rails (2.7.0)
railties (>= 3.0, < 5.0)
bootstrap-addons-rails (0.1.2)
rails
bootstrap-sass (2.3.2.2)
sass (~> 3.2)
builder (3.0.4)
cancan (1.6.10)
capybara (2.5.0)
mime-types (>= 1.16)
nokogiri (>= 1.3.3)
rack (>= 1.0.0)
rack-test (>= 0.5.4)
xpath (~> 2.0)
carrierwave (0.9.0)
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
json (>= 1.7)
chronic (0.10.2)
climate_control (0.2.0)
cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0)
coffee-rails (3.2.2)
coffee-script (>= 2.2.0)
railties (~> 3.2.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.12.2)
crass (1.0.4)
devise (2.2.8)
bcrypt-ruby (~> 3.0)
orm_adapter (~> 0.1)
railties (~> 3.1)
warden (~> 1.2.1)
diff-lcs (1.3)
docile (1.3.1)
domain_name (0.5.20180417)
unf (>= 0.0.5, < 1.0.0)
erubis (2.7.0)
etherpad-lite (0.3.0)
rest-client (>= 1.6)
execjs (1.4.1)
multi_json (~> 1.0)
factory_girl (4.5.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.5.0)
factory_girl (~> 4.5.0)
railties (>= 3.0.0)
faraday (0.12.2)
multipart-post (>= 1.2, < 3)
fb_graph (2.7.17)
httpclient (>= 2.4)
multi_json (>= 1.3)
rack-oauth2 (>= 0.14.4)
tzinfo
ffi (1.9.23)
font-awesome-rails (4.7.0.4)
railties (>= 3.2, < 6.0)
formtastic (2.2.1)
actionpack (>= 3.0)
formtastic-bootstrap (3.0.0)
formtastic (>= 2.2)
git (1.3.0)
globalize (3.0.5)
activemodel (>= 3.0.0, < 4.0.0)
activerecord (>= 3.0.0, < 4.0.0)
globalize-accessors (0.1.5)
globalize (>= 3)
globalize-versioning (0.2.0)
activemodel (>= 3.2.0, < 5)
activerecord (>= 3.2.0, < 5)
globalize (>= 3.0.4, < 6)
paper_trail (>= 3.0.0, < 5)
haml (5.0.4)
temple (>= 0.8.0)
tilt
hashie (3.5.7)
highline (1.7.10)
hike (1.2.3)
http-cookie (1.0.3)
domain_name (~> 0.5)
httpclient (2.8.3)
i18n (0.6.1)
journey (1.0.4)
jquery-datetimepicker-rails (2.4.1.0)
jquery-fileupload-rails (0.4.1)
actionpack (>= 3.1)
railties (>= 3.1)
jquery-rails (3.1.5)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (4.1.2)
railties (>= 3.1.0)
json (2.1.0)
json-jwt (1.9.4)
activesupport
aes_key_wrap
bindata
jwt (1.5.6)
kaminari (0.17.0)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
kgio (2.11.2)
libv8 (3.16.14.19)
mail (2.5.5)
mime-types (~> 1.16)
treetop (~> 1.4.8)
meta-tags (2.9.0)
actionpack (>= 3.2.0, < 5.3)
mime-types (1.25.1)
mini_portile2 (2.3.0)
minitest (4.7.5)
multi_json (1.13.1)
multi_xml (0.6.0)
multipart-post (2.0.0)
mysql2 (0.3.21)
net-ldap (0.16.1)
netrc (0.11.0)
nokogiri (1.8.2)
mini_portile2 (~> 2.3.0)
nokogumbo (1.5.0)
nokogiri
oauth2 (1.4.0)
faraday (>= 0.8, < 0.13)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
omniauth (1.2.2)
hashie (>= 1.2, < 4)
rack (~> 1.0)
omniauth-facebook (2.0.1)
omniauth-oauth2 (~> 1.2)
omniauth-ldap (1.0.5)
net-ldap (~> 0.12)
omniauth (~> 1.0)
pyu-ruby-sasl (~> 0.0.3.2)
rubyntlm (~> 0.3.4)
omniauth-oauth2 (1.5.0)
oauth2 (~> 1.1)
omniauth (~> 1.2)
opengraph_parser (0.2.3)
addressable
nokogiri
options (2.3.2)
orm_adapter (0.5.0)
paper_trail (3.0.9)
activerecord (>= 3.0, < 5.0)
activesupport (>= 3.0, < 5.0)
paperclip (3.4.2)
activemodel (>= 3.0.0)
activerecord (>= 3.0.0)
activesupport (>= 3.0.0)
cocaine (~> 0.5.0)
mime-types
polyglot (0.3.5)
pr_geohash (1.0.0)
progress_bar (1.2.0)
highline (~> 1.6)
options (~> 2.3.0)
public_suffix (3.0.2)
pyu-ruby-sasl (0.0.3.3)
rack (1.4.7)
rack-cache (1.7.2)
rack (>= 0.4)
rack-oauth2 (1.9.2)
activesupport
attr_required
httpclient
json-jwt (>= 1.9.0)
rack
rack-ssl (1.3.4)
rack
rack-test (0.6.3)
rack (>= 1.0)
rails (3.2.13)
actionmailer (= 3.2.13)
actionpack (= 3.2.13)
activerecord (= 3.2.13)
activeresource (= 3.2.13)
activesupport (= 3.2.13)
bundler (~> 1.0)
railties (= 3.2.13)
railties (3.2.13)
actionpack (= 3.2.13)
activesupport (= 3.2.13)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
raindrops (0.19.0)
rake (10.5.0)
rb-fsevent (0.10.3)
rb-inotify (0.9.10)
ffi (>= 0.5.0, < 2)
rdoc (3.9.5)
ref (2.0.0)
rest-client (2.0.2)
http-cookie (>= 1.0.2, < 2.0)
mime-types (>= 1.16, < 4.0)
netrc (~> 0.8)
rmagick (2.16.0)
rolify (4.0.0)
rsolr (2.2.1)
builder (>= 2.1.2)
faraday (>= 0.9.0)
rspec (3.3.0)
rspec-core (~> 3.3.0)
rspec-expectations (~> 3.3.0)
rspec-mocks (~> 3.3.0)
rspec-activemodel-mocks (1.0.3)
activemodel (>= 3.0)
activesupport (>= 3.0)
rspec-mocks (>= 2.99, < 4.0)
rspec-collection_matchers (1.1.3)
rspec-expectations (>= 2.99.0.beta1)
rspec-core (3.3.2)
rspec-support (~> 3.3.0)
rspec-expectations (3.3.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.3.0)
rspec-html-matchers (0.7.3)
nokogiri (~> 1)
rspec (>= 3.0.0.a, < 4)
rspec-mocks (3.3.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.3.0)
rspec-rails (3.3.3)
actionpack (>= 3.0, < 4.3)
activesupport (>= 3.0, < 4.3)
railties (>= 3.0, < 4.3)
rspec-core (~> 3.3.0)
rspec-expectations (~> 3.3.0)
rspec-mocks (~> 3.3.0)
rspec-support (~> 3.3.0)
rspec-support (3.3.0)
rubyntlm (0.3.4)
rubyzip (1.2.1)
sass (3.5.6)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
sass-rails (3.2.6)
railties (~> 3.2.0)
sass (>= 3.1.10)
tilt (~> 1.3)
seed_dump (0.5.3)
shareable (1.1.4)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
simple_calendar (0.1.11)
rails (>= 3.0)
simplecov (0.16.1)
docile (~> 1.1)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
sitemap_generator (6.0.1)
builder (~> 3.0)
sprockets (2.2.2)
hike (~> 1.2)
multi_json (~> 1.0)
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.13)
sunspot (2.3.0)
pr_geohash (~> 1.0)
rsolr (>= 1.1.1, < 3)
sunspot_rails (2.3.0)
rails (>= 3)
sunspot (= 2.3.0)
sunspot_solr (2.3.0)
sunspot_test (0.4.1)
sunspot_rails (>= 2.1.1)
sunspot_solr
temple (0.8.0)
themes_for_rails (0.5.1)
rails (>= 3.0.0)
therubyracer (0.12.3)
libv8 (~> 3.16.14.15)
ref
thor (0.20.0)
tilt (1.4.1)
tinymce-rails (4.1.10)
railties (>= 3.1.1)
treetop (1.4.15)
polyglot
polyglot (>= 0.3.1)
tzinfo (0.3.54)
uglifier (4.1.10)
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.5)
unicorn (4.8.3)
kgio (~> 2.6)
rack
raindrops (~> 0.7)
warden (1.2.7)
rack (>= 1.0)
webrick (1.3.1)
whenever (0.10.0)
chronic (>= 0.6.3)
xpath (2.1.0)
nokogiri (~> 1.3)
yaml_db (0.6.0)
rails (>= 3.0, < 5.2)
rake (>= 0.8.7)
PLATFORMS
ruby
DEPENDENCIES
active_record_query_trace
acts_as_votable
annotate (~> 2.6.0)
awesome_nested_set
blueimp-gallery
blueimp-gallery-rails
bootstrap-addons-rails
bootstrap-kaminari-views!
bootstrap-sass (~> 2.3.2.1)
cancan (~> 1.6.0)
capybara (~> 2.5.0)
carrierwave (~> 0.9.0)
coffee-rails (~> 3.0)
devise (~> 2.2.3)
etherpad-lite
execjs (~> 1.4.0)
factory_girl_rails (~> 4.5.0)
fb_graph (~> 2.7.17)
font-awesome-rails
formtastic (~> 2.2.1)
formtastic-bootstrap (~> 3.0.0)
git
globalize (~> 3.0.4)
globalize-accessors
globalize-versioning
haml
jquery-datetimepicker-rails
jquery-fileupload-rails (= 0.4.1)
jquery-rails
jquery-ui-rails (~> 4.1.0)
kaminari
meta-tags
minitest (~> 4.7.5)
mysql2 (~> 0.3.10)
omniauth (~> 1.2.2)
omniauth-facebook (~> 2.0.0)
omniauth-ldap (~> 1.0.4)
opengraph_parser
paper_trail (~> 3.0.5)
paperclip (~> 3.4.0)
progress_bar
rails (= 3.2.13)
rake (~> 10.0)
rmagick
rolify (~> 4.0.0)
rspec-activemodel-mocks (~> 1.0.1)
rspec-collection_matchers (~> 1.1.2)
rspec-core (~> 3.3.0)
rspec-expectations (~> 3.3.1)
rspec-html-matchers (~> 0.7.0)
rspec-rails (~> 3.3.0)
rspec-support (~> 3.3.0)
rubyzip
sanitize!
sass-rails (~> 3.0)
seed_dump (~> 0.5.3)
shareable
simple_calendar (~> 0.1.9)
simplecov
sitemap_generator
sprockets (= 2.2.2)
sqlite3
sunspot_rails
sunspot_solr
sunspot_test
themes_for_rails
therubyracer
tinymce-rails (~> 4.1.0)
uglifier (>= 1.0.3)
unicorn (~> 4.8.0)
webrick (= 1.3.1)
whenever
yaml_db
BUNDLED WITH
1.16.6

View File

25
README Normal file
View File

@@ -0,0 +1,25 @@
SETUP:
install ruby 2.1.10
install requirements
apt-get ...
mkdir /srv/fetsite
cd /srv/fetsite
copy / fetch Gemfile
make User fetsite
bundle install
# Config Files kopieren:
cp /srv/fetsite/config/omniout_secrets.yml.example /srv/fetsite/config/omniout_secrets.yml
cp /srv/fetsite/config/omniout_secrets.yml.example /srv/fetsite/config/omniout_secrets.yml
touch crawler_config.yml
# Datenbank erstellen
rake db:migrate

11
README_productive.md Normal file
View File

@@ -0,0 +1,11 @@
install ruby/fetsite requirements
do all the rvm stuff
apt-get install git
chown fetsite /srv
su fetsite
cd /srv

0
Short,
View File

View File

View File

@@ -0,0 +1,134 @@
html {
background-color: #fff;
overflow: hidden;
}
body {
display: flex;
flex-flow: wrap;
height: 100vh;
justify-content: space-between;
flex-direction: column;
}
.header {
height: 200px;
width: 100%
}
svg {
padding-top: 2em;
}
.impulsPath {
fill: none;
stroke: #04669c;
stroke-miterlimit: 1;
stroke-width: 6px;
stroke-dasharray: 1946.243;
stroke-dashoffset: 0;
stroke-linejoin: round;
stroke-linecap: round;
animation: dash 10s ease-out infinite;
animation-direction: normal;
}
.FET-logotext-stroke {
fill: #fff;
}
#FET-logotext {
opacity: 0;
animation: logotext 10s ease-in infinite;
}
.content-area {
height: auto;
width: 100%;
}
.footer {
width: 100%;
height: 150px;
background-color: #04669c;
padding-bottom: 10px;
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
color: #fff;
flex-basis: bottom;
}
.footer h3,
p {
margin: 0;
padding: 0 20px;
font-family: Helvetica, Arial;
letter-spacing: 0.1em;
}
.footer h3 {
padding-top: 20px;
}
.footer .adress {
margin: auto;
text-align: left;
}
.footer .contact {
margin: auto;
text-align: center;
}
.footer .servicecontainer{
display: inline-flex;
margin: auto;
}
.footer .servicecontainer .servicetime {
margin: auto;
text-align: right;
}
.footer .servicecontainer .servicetime #time {
font-size: 0.7em
}
.footer .servicecontainer .servicestatus{
margin: auto;
width:20px;
height: 100vh; /* height: 100%;*/
padding-right: 30px;
background-color: #fff;
}
/*K E Y F R A M E S*/
@keyframes dash {
from {
stroke-dashoffset: 1946.243;
opacity: 0;
stroke-width: 0.5;
}
to {
opacity: 1;
stroke-dashoffset: 0;
stroke-width: 5px;
}
}
@keyframes logotext {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

View File

@@ -9,11 +9,9 @@
if params[:locale]
if I18n.available_locales.include?(params[:locale].to_sym)
session[:locale] = params[:locale]
else
flash.now[:notice]= "#{params[:locale]} translation not available"
logger.error flash.now[:notice]
end
end
http_header=request.env['HTTP_ACCEPT_LANGUAGE']
@@ -22,8 +20,8 @@
else
ht=nil
end
I18n.locale = session[:locale] || ht || I18n.default_locale
I18n.locale = session[:locale] || I18n.default_locale
# removed ht from selection add || ht to check http header
session[:locale] = I18n.locale
end
@@ -62,7 +60,7 @@ u=current_user
if ! u.try(:preferredtheme).nil? and ThemesForRails.available_theme_names.include?(u.preferredtheme)
u.preferredtheme
else
"blue1"
"blue2"
end
end

View File

@@ -8,7 +8,7 @@ class HomeController < ApplicationController
params[:month]= Date.today.month if params[:month].nil?
params[:year]= Date.today.year if params[:year].nil?
@calentries= (@rubriken.map {|r| r.calendar}).collect(&:calentries).flatten.select {|c| c.object !=nil}
@starttopic= @themen = Thema.where(:id=>t).first
@@ -21,7 +21,7 @@ class HomeController < ApplicationController
end
def infoscreen
authorize! :infoscreen, User
authorize! :infoscreen, User
@neuigkeiten = Neuigkeit.accessible_by(current_ability, :show).where(flag_infoscreen: true)
render layout: false
end
@@ -29,7 +29,7 @@ class HomeController < ApplicationController
t=YAML.load_file("#{::Rails.root.to_s}/config/contact_topic.yml")
@themen = Thema.where(:id=>t)
end
def treeview
def treeview
authorize! :doadmin, User
@themengruppen = Themengruppe.order(:priority).reverse
@themengruppen += Themengruppe.intern.order(:priority).reverse
@@ -54,7 +54,7 @@ class HomeController < ApplicationController
else
@logs = `tail -n #{lines} log/development.log | grep -v 'actionpack\\|railties\\|activesupport\\|::Translation'`
end
end
def startdev
render 'setup_fetsite_dev'
@@ -64,7 +64,7 @@ class HomeController < ApplicationController
end
def search
unless params['query'].nil? || params['query'].empty?
@results = Sunspot.search Neuigkeit,Rubrik, Fetprofile, Thema, Themengruppe, Lva, Studium, Modul, Modulgruppe, Gremium, Document do
fulltext params['query']
@@ -88,7 +88,7 @@ class HomeController < ApplicationController
# @themen=Thema.search(params['query']).public
# end
@themen=[]
else
@neuigkeiten=[]
@fetprofiles=[]
@@ -110,10 +110,10 @@ class HomeController < ApplicationController
unless params[:themen].nil?
t=([t].flatten+params[:themen]).uniq
end
unless params[:rmthema].nil?
unless params[:rmthema].nil?
t=t-[params[:rmthema]]
end
File.open("config/contact_topic.yml",'w'){|f| f.write(t.to_yaml)}
File.open("config/contact_topic.yml",'w'){|f| f.write(t.to_yaml)}
redirect_to admin_home_index_path
end

View File

@@ -50,7 +50,7 @@ class NeuigkeitenController < ApplicationController
end
@calentry=ce
ce.object=@neuigkeit
@neuigkeit.calentry=ce
@neuigkeit.calentries<<ce
@neuigkeit.save
render 'edit'
@@ -145,9 +145,10 @@ end
@calentries<< Calentry.new
end
def find_link
@rubrik=@neuigkeit.rubrik
if can?(:shownonpublic, Rubrik)
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
@@ -156,7 +157,8 @@ end
@calentries1=@neuigkeit.calentries
nlink_search = Neuigkeit::LINKTYPES.clone
nlink_search.collect!{|t| t.constantize}
# @nlink_search.collect!{|t| t.search(params[:query]).limit(2)}
# @nlink_search.collect!{|t| t.search(params[:query]).limit(2)}
@results= Sunspot.search nlink_search do
fulltext params[:query]
end
@@ -168,6 +170,7 @@ end
end
def create_link
@neuigkeit = Neuigkeit.find(params[:id])
@@ -178,6 +181,7 @@ end
format.js
end
end
def delete_link
@neuigkeit = Neuigkeit.find(params[:id])
@nlink = @neuigkeit.nlinks.find(params[:nlink_id])
@@ -187,6 +191,7 @@ end
format.js
end
end
def create
@neuigkeit = Neuigkeit.new(params[:neuigkeit])
@neuigkeit.author=current_user

View File

@@ -16,7 +16,7 @@ class RubrikenController < ApplicationController
@rubriken= Rubrik.accessible_by(current_ability, :show)
@neuigkeiten = Neuigkeit.accessible_by(current_ability, :list).page(params[:page]).per(3)
@calentries= (@rubriken.map {|r| r.calendar.calentries.of_month(Date.new(params[:year],params[:month],1))}).flatten.select {|c| c.object !=nil}
@calentries= (@rubriken.map {|r| r.calendar.calentries.of_month(Date.new(params[:year].to_i,params[:month].to_i,1))}).flatten.select {|c| c.object !=nil}
respond_to do |format|
format.html
format.js {render action: :show}

View File

@@ -2,11 +2,23 @@
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
skip_before_filter :verify_authenticity_token
def failure
# flash[:notice] = "Failure #{Hash.new(request.env)} #{Hash.new(params)}"
#redirect_to new_user_registration_url , :notice=>"Omniauth Login failed"
super
end
def developer
if Rails.env.development?
@user= User.find_for_developer_oauth(request.env["omniauth.auth"],current_user)
if @user
sign_in_and_redirect @user, event: :authentication
else
redirect_to new_user_registration_url
end
else
flash[:notice]=flash[:notice] + "Still not logged in "
redirect_to new_user_registration_url
end
end
def facebook
# You need to implement the method below in your model (e.g. app/models/user.rb)
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
@@ -23,7 +35,7 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
end
def ldap
logger.debug current_user.to_s
logger.debug current_user.to_s
@user=User.find_for_ldap_oauth(request.env["omniauth.auth"],current_user)
# @user=User.find_for_ldap_oauth(session["devise.ldap_data"],current_user)
# @user=User.first

View File

@@ -42,8 +42,9 @@ m.save
# current_url1({:locale=>target_locale}) .sub "/"+I18n.locale.to_s+"/", "/"+target_locale.to_s+"/"
language_path(locale: target_locale)
end
def ffi1_icon (name)
content_tag("i","", class: "ficon ffi1-"+name )
content_tag("i", "", class: "ficon ffi1-" + name )
end
def ffi2_icon (name)
@@ -54,8 +55,11 @@ m.save
end
def fa_stack(icon1, icon2)
content_tag("span", content_tag("span", content_tag("i","", class: "ficon "+" fa-"+icon1+" fa fa-stack-1x" ) + content_tag("i","", class: "ficon "+" fa-"+icon2+" fa fa-stack-2x" ),class: "fa-stack "),class:"fa-stack-sm")
h_1 = content_tag("span", content_tag("i","", class: "ficon "+" fa-"+icon1+" fa fa-stack-1x" ) + content_tag("i","", class: "ficon "+" fa-"+icon2+" fa fa-stack-2x" ),class: "fa-stack ")
h_2 = content_tag("span", h_1 ,class: "fa-stack-sm")
h_2
end
def ffi1_list
y=YAML.load_file("#{::Rails.root.to_s}/config/flatfeticon1.yml")

View File

@@ -10,7 +10,7 @@ class Document < ActiveRecord::Base
has_paper_trail
TYPS = { 1=>"fet_docs", 10=>"protocol", 11=> "agenda"}
has_many :attachments, :as=>:parent
def long_name
def long_name
if self.parent.class=="Meeting"
"<b>"+self.parent.text+ "</b>"+ self.name
else
@@ -18,20 +18,20 @@ class Document < ActiveRecord::Base
end
end
def self.new_divid_for(parent)
"document_new_parent_" + parent.class.to_s + "_" + parent.id.to_s
"document_new_parent_" + parent.class.to_s + "_" + parent.id.to_s
end
def divid
"document_"+self.id.to_s
end
def self.ether
EtherpadLite.connect('http://www.fet.at/etherpad', File.new('/srv/etherpad/etherpad-lite/APIKEY.txt'))
EtherpadLite.connect('https://www.fet.at/etherpad', File.new('config/etherpad/APIKEY.txt'))#https://www.etherpad.fet.at
end
def create_pdf
require "open3"
#url=blank_document_url({id: self.id, host: host, port: port})
# url=Rails.application.routes.url_helpers.blank_document_url({id: self.id, host: host, port: port})
file = Tempfile.new(['document', '.pdf'])
bin=Rails.application.config.pdf_bin
sin,sout,serr=Open3.popen3("#{bin} --header-html \"file://#{Rails.root}/app/views/documents/header.html\" --footer-html \"file://#{Rails.root}/app/views/documents/footer.html\" --replace title1 \"#{self.name}\" - #{file.path}")
@@ -70,20 +70,29 @@ class Document < ActiveRecord::Base
end
def move_to_etherpad
unless self.is_etherpad? || self.id.nil?
self.etherpadkey="document_"+ self.id.to_s
self.ep_pad.html = '<div>'+self.text+'</div>'
end
self.etherpadkey="document_"+ self.id.to_s
if self.text.nil?
self.ep_pad.html = '<div>'+"text"+'</div>'
else
self.ep_pad.html = '<div>'+self.text+'</div>'
end
end
end
def dump_to_etherpad
if self.is_etherpad?
self.ep_pad.html = '<div>'+self.text+'</div>'
if self.text.nil?
self.ep_pad.html = '<div>'+"text"+'</div>'
else
self.ep_pad.html = '<div>'+self.text+'</div>'
end
else
self.move_to_etherpad
end
end
def read_from_etherpad
self.text=ApplicationController.helpers.strip_control_chars( self.ep_pad.html)
end
def ep_pad
self.ep_group.pad(self.etherpadkey)
@@ -93,16 +102,16 @@ class Document < ActiveRecord::Base
Document.ether.group(Document::TYPS[t])
end
def text_stripped
ApplicationController.helpers.strip_control_chars(ApplicationController.helpers.strip_tags(text.to_s.gsub("<"," <").gsub(">","> ").to_s))
ApplicationController.helpers.strip_control_chars(ApplicationController.helpers.strip_tags(text.to_s.gsub("<"," <").gsub(">","> ").to_s))
end
searchable do
text :text, stored: true do |d|
d.text_stripped
end
text :name, :boost=>4.0, :stored=> true
text :meeting, stored: true do |d|
(d.parent.is_a?(Meeting))? d.try(:parent).try(:text).to_s : ""
text :name, :boost=>4.0, :stored=> true
text :meeting, stored: true do |d|
(d.parent.is_a?(Meeting))? d.try(:parent).try(:text).to_s : ""
end
end
def maketoc
@@ -116,20 +125,20 @@ class Document < ActiveRecord::Base
l=2
f=true;
s="<ul>"
c.each do |h|
c.each do |h|
s=s+ "</li></ul></li>"*(l-h["level"]) if (h["level"]<l) and !f
s=s+" </li>" if (h["level"]==l) and !f
s=s+" </li>" if (h["level"]==l) and !f
if (h["level"]>l)
s=s + "<ul><li>" * (h["level"]-l)
s=s + "<ul><li>" * (h["level"]-l)
else
s=s+"<li>"
end
end
s=s+h["text"]
l = h["level"]
f=false
end
s=s+"</ul>"*(l-2) if (l>2)
s=s+"</ul>"*(l-2) if (l>2)
s=s+"</ul>"
self.toc=s
end

View File

@@ -26,10 +26,13 @@ class Gremium < ActiveRecord::Base
# has_many :members, through: :memberships
searchable do
text :desc
text :name, :boost=>4.0
text :name
end
belongs_to :thema # Gehört zu einem Thema
validates :name, :presence=>true
validates :typ, :presence=>true
validates :typ, :inclusion =>{ in: Gremium::TYPEN.keys()}
scope :tabs, -> { where(:typ => [1,3]).order(:typ).order(:name) } # Gremien die in Tabs angezeigt werden (Alle Anderen nur in der Liste

View File

@@ -18,21 +18,6 @@
# typ :string(255)
#
# == Schema Information
#
# Table name: lvas
#
# id :integer not null, primary key
# name :string(255)
# desc :text
# ects :decimal
# lvanr :string(255)
# stunden :decimal
# created_at :datetime not null
# updated_at :datetime not null
# modul_id :integer
# semester_id :integer
class Lva < ActiveRecord::Base
ERLAUBTE_TYPEN = ['VO', 'UE', 'VU', 'LU', 'SE', 'PR', 'andere'];
translates :desc,:pruefungsinformation, :fallbacks_for_empty_translations => true, :versioning=> :paper_trail #true #{:gem=>:paper_trail}
@@ -113,7 +98,7 @@ class Lva < ActiveRecord::Base
url
end
# this should be more DRY
def load_tissdata
urlp="https://tiss.tuwien.ac.at/api/course/"+ lvanr.to_s.gsub(".","")+"-"
begin
@@ -202,7 +187,8 @@ class Lva < ActiveRecord::Base
end
end
# Why is this an instance method??
# How is it used?
def update_multiple(hash)
newlvas=[]
params["lvas"].each do |i,l|
@@ -237,7 +223,7 @@ class Lva < ActiveRecord::Base
lecturers.map { |l| l.name }
end
end
# is this used? in which context?
def self.update_multiple_with_modul(hash,modul)
newlvas=[]
hash.each do |i,l|
@@ -263,7 +249,7 @@ class Lva < ActiveRecord::Base
end
# is this used? in which context?
def read_et_forum
lva=self
url=lva.forumlink

View File

@@ -1,40 +1,58 @@
# coding: utf-8
# This class represents a single meeting of a group or the whole Fachschaft.
#
class Meeting < ActiveRecord::Base
belongs_to :parent, :polymorphic=>true, touch: true
belongs_to :meetingtyp
attr_accessible :desc, :intern, :name, :parent_id, :parent_type, :calentry,:calentry_attributes, :meetingtyp_id
# Meeting can belong to different kind of parents e.g. topics
belongs_to :parent, :polymorphic=>true, touch: true
# Each meeting should have a type, for more information see MeetingTyp
belongs_to :meetingtyp
# Belongs to a news article, that is usually the Announcement of that meeting
belongs_to :neuigkeit, touch: true
# has one protocol of type Document, which is of typ=10=protocol
has_one :protocol, :class_name=>'Document', :conditions=>{:typ=>10}, :as=>:parent
# has one agenda of type Document
has_one :agenda , :as=>:parent,:conditions=>{:typ=>11}, :class_name=>'Document'
# has one calentry which contains the date and time of this meeting
has_one :calentry, as: :object, :dependent=> :destroy
# has one calendar through the meetingtyp, thus each meeting is put into a calendar
has_one :calendar, :through=>:meetingtyp
# has one rubrik, thus it is associated to a rubrik
has_one :rubrik, :through=>:meetingtyp
# scope upcomming only contains meetings in the future and 1 hour into the past
scope :upcomming, includes(:calentry).where("calentries.start>?",1.hour.ago)
default_scope includes(:calentry).order("calentries.start").reverse_order
accepts_nested_attributes_for :calentry
# validate :agenda, :presence=>true
# validate :protocol, :presence=>true
# Each meeting is required to have a parent otherwise it will not be shown anywhere on the website
validate :parent, :presence=>true
# Each meeting needs a calendar entry
validate :calentry, :presence=>true
# before each validation fix the calendar entry such that it is always
before_validation :fix_calentry
# title is an alias for text
def title
self.text
end
# Text is a text representation of the meeting
def text
unless self.meetingtyp.try(:name).to_s.empty?
t = self.meetingtyp.name.to_s+", "
else
t=""
t = parent.title.to_s + ", " if self.name.empty?
end
t = self.meetingtyp.try(:name) || self.parent.try(:title) || ""
t = t + ", " unless t.empty?
t= t+ self.name.to_s
# t = t + " " + I18n.l(self.calentry.start) unless self.calentry.nil?
t = t +" "+ I18n.t("date.am")+" "+ self.calentry.text unless self.calentry.nil?
t
end
# Creante an anouncement with an author
# @param user is the author
def create_announcement(user)
if self.neuigkeit.nil?
n = Neuigkeit.new
@@ -48,32 +66,40 @@ class Meeting < ActiveRecord::Base
self.neuigkeit= n
end
end
# Update the title of the announcement to the text of this meeting
# @returns [true] if save was successful
def update_announcement
n=self.neuigkeit
n.title=self.text
n.save
end
# fixing the calendar entry and the calendar
# most importantly the calendar of the calentry
def fix_calentry
self.calentry.object=self unless self.calentry.nil?
self.calentry.calendar = self.meetingtyp.rubrik.calendar
end
def public?
! (self.intern)
end
# Create a Document that is a protocol for the meeting
def create_protocol
if self.protocol.nil?
if self.protocol.nil? # if no protocol exists
d=Document.new
d.typ=10
d.name="Protokoll"
unless self.meetingtyp.protocol.nil?
d.text=self.meetingtyp.protocol.text
end
d.save
self.protocol=d
end
# what happens if a protocol already exists?
end
# Create a calender entry for this meeting
def create_calentry
if self.calentry.nil?
ce =Calentry.new
@@ -86,9 +112,6 @@ class Meeting < ActiveRecord::Base
d=Document.new
d.typ=11
d.name="Agenda"
unless self.meetingtyp.agenda.nil?
d.text=self.meetingtyp.agenda.text
end
d.save
self.agenda=d
end
@@ -112,27 +135,17 @@ class Meeting < ActiveRecord::Base
def update_time_from_protocol
st= /Beginn[\s:]*([^<>]*)/.match(self.protocol.text)[1].to_s
st= /Anfang[\s:]*([^<>]*)/.match(self.protocol.text)[1].to_s if st.empty?
self.calentry.start=(self.calentry.start.to_date.to_s + " " +st).to_datetime unless st.empty?
st= /Ende[\s:]*([^<>]*)/.match(self.protocol.text)[1].to_s
self.calentry.ende=(self.calentry.ende.to_date.to_s + " " +st).to_datetime unless st.empty?
st= /Anfang[\s:]*([^<>]*)/.match(self.protocol.text)[1].to_s if st.nil? || st.empty?
self.calentry.start=(self.calentry.start.to_date.to_s + " " +st).to_datetime unless st.nil? || st.empty?
st= /Ende[\s:]*([^<>]*)/.match(self.protocol.text).try(:second).try(:to_s )
self.calentry.ende=(self.calentry.ende.to_date.to_s + " " +st).to_datetime unless st.nil? || st.empty?
end
def agenda_text
unless self.agenda.nil?
t= self.agenda.text
else
t= ""
end
t
return self.agenda.try(:text) || ""
end
def protocol_text
unless self.protocol.nil?
t= self.protocol.text
else
t= ""
end
t
end
return self.protocol.try(:text) || ""
end
searchable do
text :text

View File

@@ -1,7 +1,8 @@
class Meetingtyp < ActiveRecord::Base
attr_accessible :agendaintern, :desc, :name, :protocolintern, :rubrik_id, :picture
belongs_to :rubrik
validate :rubrik, :presence=>true
validates :rubrik, :presence=>true
validates :name, :presence=>true
has_many :meetings
has_one :calendar, through: :rubrik
has_one :protocol, :class_name=>'Document', :conditions=>{:typ=>10}, :as=>:parent

View File

@@ -16,9 +16,9 @@ class Neuigkeit < ActiveRecord::Base
attr_accessible :datum, :text, :title, :rubrik_id, :author_id,:picture,:picture_cache, :calentries_attributes, :flag_important
belongs_to :author, :class_name =>'User'
belongs_to :rubrik, :class_name =>'Rubrik', :foreign_key => "rubrik_id"
has_one :calendar, through: :rubrik
has_one :calendar, through: :rubrik
has_many :calentries, as: :object, :dependent=> :destroy
has_many :nlinks, :dependent=> :destroy
has_many :nlinks, :dependent=> :destroy
has_one :meeting
has_many :attachments, :as=>:parent
has_one :title_pic, :class_name=>"Attachment", :as=>:parent, :conditions=>["attachments.flag_titlepic =?", true]
@@ -60,11 +60,11 @@ class Neuigkeit < ActiveRecord::Base
end
def read_attribute(name,options={})
if translated?(name)
a=super(name,options)
a=self.translation_for(options[:locale] || I18n.locale).read_attribute(name) if self.no_fallbacks
a=super(name,options)
a=self.translation_for(options[:locale] || I18n.locale).read_attribute(name) if self.no_fallbacks
a
else
else
super(name)
end
end
@@ -91,7 +91,7 @@ class Neuigkeit < ActiveRecord::Base
!self.meeting.nil?
end
def self.published
where("datum <= ? AND datum IS NOT NULL", Time.now.to_date)
where("datum <= ? AND datum IS NOT NULL", Time.now.to_date)
end
def datum_nilsave
@@ -132,7 +132,17 @@ class Neuigkeit < ActiveRecord::Base
"...."
else
words[0..100].join(" ")+ " ..." unless words.nil?
end
end
def text_infoscreen_words
md = /<p>(?<text>[^\<\>]*)/.match Sanitize.clean(self.text,:elements=>['p'])
words=md[:text].split(" ") unless md.nil?
if words.nil? || words.empty?
"...."
else
words[0..1000].join(" ")+ " ..." unless words.nil?
end
end
def has_calentries?
@@ -143,7 +153,7 @@ class Neuigkeit < ActiveRecord::Base
end
def relevant_calentry
ce = self.calentries.min_by{|c| c.days_to_today * 1.3 * ((c.is_past?)? 2:1)} if self.is_event?
ce= self.meeting.calentry if self.has_meeting?
ce= self.meeting.calentry if self.has_meeting?
ce
end
def update_cache
@@ -151,8 +161,8 @@ class Neuigkeit < ActiveRecord::Base
self.update_column(:cache_order, (self.meeting.calentry.start.to_date - Date.today).to_i.abs * 1.3)
self.update_column(:cache_relevant_date, self.meeting.calentry.start.to_date)
self.touch
else
if self.is_event?
else
if self.is_event?
c = self.calentries.min_by{|c| c.days_to_today * 1.3 * ((c.is_past?)? 2:1)}
self.update_column(:cache_order, c.days_to_today * 1.3 * ((c.is_past?)? 2:1))
self.update_column(:cache_relevant_date, (c.is_past?) ? c.ende.to_date : c.start.to_date)
@@ -184,8 +194,8 @@ class Neuigkeit < ActiveRecord::Base
end
end
searchable do
text :text
text :text
text :datum
text :title, :boost=>3.0
text :title
end
end

View File

@@ -42,7 +42,7 @@ end
searchable do
text :desc
text :name, :boost=>4.0
text :name
end
end

View File

@@ -89,7 +89,7 @@ class Studium < ActiveRecord::Base
text :zahl
text :typ
text :abkuerzung
text :name, :boost=>3.0
text :name
end
end

View File

@@ -47,7 +47,7 @@ class Thema < ActiveRecord::Base
# make topic searchable
searchable do
text :text
text :title, :boost=>4.0
text :title
end
resourcify

View File

@@ -40,7 +40,7 @@ end
searchable do
text :text
text :title, :boost=>4.0
text :title
end
end

View File

@@ -29,13 +29,34 @@ class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable,:omniauthable, :omniauth_providers => [:facebook,:ldap]
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable,:omniauthable, :omniauth_providers => [:facebook,:ldap,:developer]
acts_as_voter
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid, :name
belongs_to :fetprofile
# attr_accessible :title, :body
def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
def self.find_for_developer_oauth(auth, signed_in_resource=nil)
# logger.debug("Developer Login started")
# logger.debug(auth.info.to_s)
# logger.debug(auth.extra.raw_info.to_s)
email = auth.info.email.to_s
logger.debug("Login E-Mail:"+"'"+ email+"'")
user= User.where(:provider=>auth.provider,:uid=>email).first
unless user
user= User.create(name: email,
provider: auth.provider,
uid: email,
email: email,
password:Devise.friendly_token[0,20])
user.add_role("fetuser")
end
user
end
def self.find_for_facebook_oauth(auth, signed_in_resource=nil)
logger.debug auth.to_s
logger.debug "DDD Username= #{auth.username}"
user = User.where(:provider => auth.provider, :uid => auth.uid).first

View File

@@ -1,33 +1,22 @@
<div id="<%= beispiel.divid %>" class="contentbox">
<div class="row-fluid">
<div class="span6" >
<div class="span5" >
<b><%=link_to ffi1_icon("note20")+" " + beispiel.name + " " + I18n.l(beispiel.datum), beispiel.beispieldatei.url, title: beispiel.desc %></b>
</div>
<div class="span1" >
<%= (beispiel.beispieldatei.size/1024.0).round(2).to_s %>KiB
</div>
<div class="span5">
<%=
if can?(:like, beispiel)
link_to ffi1_icon("like3")+" like" + "("+beispiel.get_likes.size.to_s+")", like_beispiel_path(beispiel),title: "liked by " + ((current_user.liked?(beispiel)) ? ("you and " + ((beispiel.get_likes.size - 1).to_s + " others")) : beispiel.get_likes.size.to_s), remote: true
else
"liked by " + beispiel.get_likes.size.to_s
end
%>
<%=
if can?(:dislike, beispiel)
link_to ffi1_icon("dislike")+" dislike" + "("+beispiel.get_dislikes.size.to_s+")", dislike_beispiel_path(beispiel),title:"disliked by " + ((current_user.disliked?(beispiel)) ? ("you and " + ((beispiel.get_dislikes.size - 1).to_s + " others")) : beispiel.get_dislikes.size.to_s) , remote: true
else
"disliked by " + beispiel.get_dislikes.size.to_s
end
%>
<%= link_to ff_icon("icon-pencil")+"edit", edit_beispiel_path(beispiel) if can? :edit, beispiel%>
<%= link_to fa_icon("trash")+"delete", beispiel_path(beispiel), :method=>:delete, :data=>{:confirm=>I18n.t('beispiel.sure')} if can? :delete, beispiel %>
<% link_to "Refresh", beispiel_path(beispiel,show_comments: true), remote: true %></br>
<div class="span2" >
<%= beispiel.lecturer.try(:name).to_s %>
</div>
<div class="span4">
<%= flag_link(beispiel, "goodquality")%>
<%= flag_link(beispiel, "badquality")%>
<%= flag_link(beispiel, "delete")%>
<%= like_dislike_for(beispiel) %>
<%= link_to ff_icon("icon-pencil")+"edit", edit_beispiel_path(beispiel), remote: true if can? :edit, beispiel %>
<%= link_to fa_icon("trash")+"delete", beispiel_path(beispiel), :method=>:delete, :data=>{:confirm=>I18n.t('beispiel.sure')} if can? :delete, beispiel %>
<% link_to "Refresh", beispiel_path(beispiel,show_comments: true), remote: true %></br>
</div>
</div>
<% unless beispiel.desc.nil? || beispiel.desc.empty? %>
@@ -39,4 +28,5 @@
</div>
<% end %>
<%= render_comments_for(beispiel) %>
</div>

View File

@@ -9,6 +9,7 @@
</li>
</ul>
</p>
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>

View File

@@ -22,7 +22,9 @@
<ul class='breadcrumb hidden-print'>
<% @document.versions.each do |v| %>
<li>
<%= link_to User.find(v.whodunnit).name+": "+ v.event + " (" + I18n.l(v.created_at)+ ") ", write_document_path(@document,:versionid=>v.id) unless v.whodunnit.nil? %>
<%= link_to User.find(v.whodunnit).try(:name)+": "+ v.event + " (" + I18n.l(v.created_at)+ ") ", write_document_path(@document,:versionid=>v.id) if User.exists?(v.whodunnit) unless v.whodunnit.nil? %>
<% end %> <span class="divider">/</span></li>
</ul>
<% end %>

View File

@@ -1 +1 @@
<%= link_to "weiter" , "http://www.fet.at/etherpad/p/"+@document.ep_pad.id , target: :blank %>
<%= link_to "weiter" , "https://www.fet.at/etherpad/p/"+@document.ep_pad.id , target: :blank %>

View File

@@ -65,5 +65,13 @@ end
</div>
</div>
</div>
<%= render 'layouts/pretty_toolbar' %>
<% if can?(:edit, @fetprofile) %>
<div>
<span>
<%= link_to ff_icon("icon-pencil")+I18n.t('common.edit'), edit_fetprofile_path(@fetprofile) if can?(:edit, @fetprofile) %>
<%= link_to fa_icon("trash")+I18n.t('common.delete'), fetprofile_path(@fetprofile),method: :delete, data: { confirm: "Are you sure?" } if can?(:delete, @fetprofile) %>
</span>
</div>
<% end %>
<%#= render 'layouts/pretty_toolbar' %>
</div>

View File

@@ -8,10 +8,9 @@ top: 0" %>
<% #, gallery_foto_path(@foto.gallery, ((@foto.gallery.fotos[@foto.gallery.fotos.index(@foto)+1].nil?) ? (@foto.gallery.fotos[0].try(:id).to_i) : @foto.gallery.fotos[@foto.gallery.fotos.index(@foto)+1].try(:id).to_i) ) %>
<div style="position:absolute; bottom:0; ">
<%= link_to ff_icon('icon-circle-arrow-down').html_safe, @foto.datei.url,
:class=>"btn",title: I18n.t('fotos.download')+': '+@foto.title,:target=>:blank, :style=>"" %>
:class=>"btn",title: I18n.t('fotos.download')+': '+@foto.title.to_s,:target=>:blank, :style=>"" %>
<!-- <div class="fb-like" data-href"<%= gallery_foto_path(@foto.gallery,@foto, {fotoid:@foto.id,theme: nil, locale: nil})%>" data-layout="standard" data-action="like" data-show-faces="true" data-share="true"></div>-->
<%= render_shareable :url=>gallery_foto_url(@foto.gallery,@foto, {theme: nil, locale: nil}),:static_link=>true, :buttons=>[:facebook, :twitter, :google_plus] %>
<p id="notice"><%= notice %></p>
</div>

View File

@@ -1,7 +1,7 @@
<%= content_for :header do %>
<title>Fet - Fotos: <%= @gallery.name %></title>
<%
<%
if @openfotoid.nil? || @openfotoid==0
@firstfoto= @fotos_p.first
unless @firstfoto.nil?
@@ -70,7 +70,7 @@ end
<!-- <div class="pagination pull_left" style="margin:0px 0px 0px 0px">
<ul>
<li><a href="<%= gallery_path @gallery, {:pppage => @pppage, :page => (@page==1 ? @page : @page-1)} %>"><%=I18n.t('fotos.prev')%></a></li>
<% # for i in 1..@pages do
<% # for i in 1..@pages do
i=1 %>
<li><a href="<%= gallery_path @gallery, {:pppage => @pppage, :page => i} %>"><%=i%></a></li>
<% # end %>
@@ -131,7 +131,7 @@ end
<% @fotos_p.each do |f| %>
<div class="left">
<div id="links">
<% if (@openfotoid.to_i==f.id) %>
<% if (@openfotoid.to_i==f.id) %>
<meta itemprop="image" content="<%= f.datei.resized.url %>"/>
<% end %>
<div <% if (@openfotoid.to_i==f.id) %> itemprop="primaryImageOfPage"<% else %> itemprop="hasPart" <% end %> itemscope itemtype="http://schema.org/ImageObject">
@@ -145,9 +145,12 @@ end
</div>
</div>
<%= link_to ff_icon('icon-circle-arrow-down').html_safe, f.datei.url,
:class=>"btn-small",title: I18n.t('fotos.download')+': '+f.title, rel: 'tooltip' %>
:class=>"btn-small",title: I18n.t('fotos.download').to_s+': '+f.title.to_s, rel: 'tooltip' %>
<%= link_to ff_icon('icon-remove-circle').html_safe, gallery_foto_path(@gallery, f),
:method => :delete, :class=>"btn-small btn-danger",title: I18n.t('fotos.delete')+': '+f.title, rel: 'tooltip', confirm: I18n.t('fotos.delete')+': '+f.title+', Sicher?' if can?(:delete,f) %>
:method => :delete, :class=>"btn-small btn-danger",
title: I18n.t('fotos.delete').to_s+': '+f.title.to_s, rel: 'tooltip',
confirm: I18n.t('fotos.delete').to_s+': '+f.title.to_s+',
Sicher?' if can?(:delete,f) %>
<p></p>
</div>
<% end %>
@@ -169,21 +172,21 @@ end
<%= link_to ff_icon('icon-remove-circle').html_safe, '',
:class=>"btn-small btn-danger"%>: <%= I18n.t('fotos.delete')%>
<p></p>
</div>
<% end %>
<%= render 'layouts/pretty_toolbar' %>
</div>
</div>
<%= javascript_include_tag "blueimp-gallery-all" %>
<script>
blueimp.Gallery.prototype.textFactory = function (obj, callback) {
var $element = $('<div>')
.addClass('slide-content')
.attr('title', obj.title)
.attr('histItem',obj.getAttribute('histitem'));
$.get(obj.href)
.done(function (result) {
$element.html(result);
@@ -201,13 +204,13 @@ end
return $element[0];
};
$('#openpic').click()
blueimp.Gallery.prototype.onslide = (function(_super) {
return function(index) {
history.pushState({},"Foto",String(this.list[index].getAttribute('histitem')));
return _super.apply(this, arguments);
};
};
})(blueimp.Gallery.prototype.onslide);
</script>
<style>
@@ -221,5 +224,3 @@ end
* html .fb-like{display:inline}/* ie6 inline block fix*/
*+html .fb-like{display:inline}/* ie7 inline block fix*/
</style>

View File

@@ -7,12 +7,14 @@
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="content-wrap content-column" style="max-width:100em;">
<div class="content-wrap content-column" style="max-width:90em;">
<h1><%= I18n.t('home.willkommen') %></h1>
<%= render partial: "themen/small", object: @starttopic %>
<%= raw(@starttopic.text) unless @starttopic.nil? %>
<div class="container-fluid">
<div class="row-fluid">
<div class="span5">
<div class="span4">
<ul class="linklist">
<li>
@@ -21,41 +23,43 @@
<li>
<%= link_to ffi1_icon("academic") + I18n.t('home.login'), user_omniauth_authorize_path(:ldap) ,class: :linkbox %>
</li>
<li>
<%= link_to ffi1_icon("quiz")+ I18n.t("themengruppe.faqs"), faqs_themengruppen_path,class: :linkbox %>
</li>
<li><%= link_to ffi1_icon("books19")+"Beispielsammlung", studium_path(Studium.first, {:ansicht=>'semesteransicht'}) ,class: :btn ,class: :linkbox %></li>
<li><%= link_to ffi1_icon("books19")+"Beispielsammlung", studium_path(Studium.first, {:ansicht=>'semesteransicht'}) ,class: :btn ,class: :linkbox if Studium.count > 0 %></li>
<li><%= link_to "Alte Beispielsammlung", "http://www.fet.at/alt/bin/view/Beispielsammlung/WebHome" ,class: :btn ,class: :linkbox %></li>
</ul>
<ul>
<% cache("stickytopics_startpage_"+cache_array_key(@stickythemen)) do %>
<ul class="linklist">
<% @stickythemen.each do |t1| %>
<li>
<%= link_to t1 do %>
<%= render partial: "themen/nlink", object: t %>
<%= end %>
<%= link_to t1,:class=>:linkbox do %>
<%= render partial: "themen/nlink", object: t1 %>
<% end %>
</li>
<% end %>
</ul>
<% end %>
<%= render 'beispiele' %>
<%= render 'beispiele' %>
<div class="fb-like-box" data-href="https://www.facebook.com/FachschaftET" data-colorscheme="light" data-show-faces="true" data-header="true" data-stream="false" data-show-border="true"></div>
</div>
<div class="span7">
<ul class="unstyled linkbox-list" style="margin:5px;">
<div class="span5">
<ul class="unstyled linkbox-list">
<% @neuigkeiten.each do |n| %>
<li><%= render n if can?(:show, n) %> </li>
<% end %>
</ul>
Verschiedene Styles
<ul>
<li> <%= link_to "Darkblue", home_index_path({:theme=>"darkblue"}) %></li>
<li> <%= link_to "Blue1", home_index_path({:theme=>"blue1"}) %></li>
</ul>
</div>
<li> <%= link_to "2003", home_index_path({:theme=>"2003"}) %></li>
<li> <%= link_to "white_1", home_index_path({:theme=>"white_1"}) %></li>
</ul>
<div class="span3">
<% cache("calendar_" + cache_array_key(@calentries)+params[:month].to_s+params[:year].to_s) do %>
<%= render 'calendars/calentries', :object=>@calentries %>
<% end %>
<div class="fb-like-box" data-href="https://www.facebook.com/FachschaftET" data-colorscheme="light" data-show-faces="true" data-header="true" data-stream="false" data-show-border="true"></div>
</div>
</div>
</div>

View File

@@ -3,84 +3,101 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<%= stylesheet_link_tag "themes/"+theme_name+"/application", :media => "all" unless theme_name.empty? %>
<%= stylesheet_link_tag "application", :media=>"all" if theme_name.empty? %>
<%= stylesheet_link_tag "/iframe/infoscreenframe.css" %>
<%= javascript_include_tag "application" %>
<%= javascript_include_tag "jmpress" %>
</head>
<body>
<div id ="jmpress">
<% i=1 %>
<% @neuigkeiten.each do |n| %>
<div class="step contentbox" id="step-<%=i%>" data-x="<%= i *2000 %>" data-y="<%= Random.rand(0..5)*200 %>" data-rotate="<%= Random.rand(0..18)*10 %>" style="width:1000px; height:500px; padding: 50px; display:block" data-duration="10000"><% @toolbar_elements=[];@questions=[] %>
<div class="media" style="width: 660px; height:340px; transform: scale(1.5) translate(120px,50px)" >
<div class="pull-left" href="#" style="max-width:200px;">
<% unless n.picture_robust.big_thumb.to_s.empty? %>
<p>
<br><%= link_to image_tag(n.picture_robust.big_thumb),n.picture_robust.try(:url) %>
</p>
<% end %>
<h3>
<% if n.has_calentries? %>
<div href="#">
<%= fa_icon("calendar 2x") %>
<%= n.relevant_calentry.text %>
</div>
<% elsif n.has_meeting? %>
<div href="#">
<%= fa_icon("calendar 2x") %>
<%= n.meeting.calentry.text unless n.meeting.calentry.nil? %>
</div>
<% end %>
</h3>
</div>
<div class="media-body">
<h1 itemprop="name">
<%= raw(n.title) %> <%#= link_to fa_icon("edit"), edit_rubrik_neuigkeit_path(n.rubrik, n), remote: true if can? :edit, n %>
</h1>
<div itemprop="articleBody" style="font-size:large">
<%= raw(n.text_first_words) %>
<%= content_tag(:iframe,'', width: "100%", height: "100%", name: "targetframe", allowTransparency:"true", scrolling:"no", frameborder:"0", src: "/iframe/infoscreenframe.html") %> <%#header picture/animation %>
<div id ="jmpress">
<% i=1 %>
<% @neuigkeiten.each do |n| %>
<div class="step" id="step-<%=i%>" data-x="<%= i *2000 %>" data-y="<%= Random.rand(0..5)*200 %>" style="position:absolute; height:540px; width:1230px; display: block;" data-duration="10000">
<div class="media" style="width:'95%'; height:480px;" >
<div class="pull-left" href="#" style="max-width:250px;">
<% unless n.picture_robust.big_thumb.to_s.empty? %>
<p>
<br><%= link_to image_tag(n.picture_robust.big_thumb),n.picture_robust.try(:url) %></p>
<% end %>
<h3>
<% if n.has_calentries? %>
<div href="#">
<%= fa_icon("calendar 2x") %>
<%= n.relevant_calentry.text %>
</div>
<% elsif n.has_meeting? %>
<div href="#">
<%= fa_icon("calendar 2x") %>
<%= n.meeting.calentry.text unless n.meeting.calentry.nil? %>
</div>
</div>
<% end %>
</h3>
</div>
<div class="media-body">
<h1 itemprop="name">
<%= raw(n.title) %> <%#= link_to fa_icon("edit"), edit_rubrik_neuigkeit_path(n.rubrik, n), remote: true if can? :edit, n %>
</h1>
<div itemprop="articleBody" style="font-size:large">
<%= raw(n.text_infoscreen_words) %>
</div>
</div>
</div>
</div>
<% i = i+1 %>
<% end %>
</div>
</div>
</div>
<% i = i+1 %>
<% end %>
<script>
var d = new Date();
var n = d.getDay();
var now = d.getHours() + "." + d.getMinutes();
var weekdays = [
["Sunday"],
["Monday", 9.00, 14.00],
["Tuesday", 9.00, 14.00],
["Wednesday", 9.00, 14.00],
["Thursday", 9.00, 14.00],
["Friday", 9.00, 12.00],
["Saturday"] // we are closed, sorry!
];
var day = weekdays[n];
if (now > day[1] && now < day[2]) {
document.write("<div id='footer' style='background: green; height:25px; width:50px; margin:10px; position:absolute'>");
document.write("OPEN");
document.write("</div>");
}
else {
document.write("<div id='footer' style='background: red; height:25px; width:60px; margin:10px; position:absolute'>");
document.write("CLOSED");
document.write("</div>");
}
</script>
</div>
<div class="ui-progressbar ui-widget ui-widget-content ui-corner-all" style="height:10px; z-index: 2000; left: 5px; right: 5px; bottom: 5px; height: 10px; position:absolute">
<div id="" class="ui-progressbar-value ui-widget-header ui-corner-left" style=""></div>
</div>
<script>
$(function () {
$('#jmpress').jmpress({
duration: {
barPropertyStart: '0',
barSelector: '.ui-progressbar-value'
},
initStep: function(element, eventData) {
console.log('We\'re changing to step: #' + $(element).attr('id') + '!');
}
<script>
$(function () {
$('#jmpress').jmpress({
initStep: function(element, eventData) {
console.log('We\'re changing to step: #' + $(element).attr('id') + '!');
}
});
setTimeout(function(){
window.location.reload();
/* or window.location = window.location.href; */
}, 100000);
});
setTimeout(function(){
window.location.reload();
/* or window.location = window.location.href; */
}, 100000);
});
</script>
</script>
</body>

View File

@@ -1,23 +1,49 @@
<h1> FET Intern NEU </h1>
<h1> FET Intern NEU blue2</h1>
<div class="container-fluid">
<div class="row-fluid">
<div class="span6">
<ul class="linklist">
<li>
<%= link_to "Adressliste", internlist_fetprofiles_path ,class: :linkbox %></li>
<li> <%= link_to "Admin" , admin_home_index_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("ffi1-setting")+"Neue Oberfläche" , set_preferred_theme_user_path(current_user, params: {theme: "blue2"}), class: :linkbox if can? :set_preferred_theme , current_user %>
</li></ul>
<div>
<ul class="linklist">
<li>
<%= link_to fa_icon("list")+"Adressliste", internlist_fetprofiles_path ,class: :linkbox %>
</li>
<li>
<%= link_to ff_icon("ffi1-setting")+"Admin" , admin_home_index_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("fa fa-folder")+"Treeview" , treeview_home_index_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("ffi1-newspaper9")+"Crawler" , crawler_index_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("ffi1-setting")+"Meetings" , meetingtyps_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("ffi1-setting")+"Alte Oberfläche" , set_preferred_theme_user_path(current_user, params: {theme: "blue1"}), class: :linkbox if can? :set_preferred_theme, current_user %>
</li>
</ul><br>
</div>
<div>Suche nach Protokollen
<%= semantic_form_for :search,:remote=>true, :url=>search_documents_path, :html=>{:id=>"search_form",:class=>"", :method=>'get'} do |f| %>
<%= f.input :query, :input_html => { :name => 'query' } , :label=>false, :class=>"search-query" %>
<% f.actions do %>
<% f.action :submit, :as => :input %>
<% end %>
<% end %>
<div id="searchresults">
<%= render :partial=>"documents/search_results", :object=>@results %>
</div>
</div>
<ul class="unstyled linkbox-list">
<li>
<% @themengruppen.each do |themengruppe| %>
<div class="container-fluid">
<%= render themengruppe if can?(:show,themengruppe)%>
</div>
<% end %>
</li>
<li>
<% @themengruppen.each do |themengruppe| %>
<div class="container-fluid">
<%= render themengruppe if can?(:show,themengruppe)%>
</div>
<% end %>
</li>
</ul>
<%= link_to "Users", users_path %>
@@ -25,9 +51,9 @@
<div class="span6">
<h2>Neuigkeiten</h2>
<ul class="unstyled linkbox-list">
<% @neuigkeiten.each do |n| %>
<li><%= render n if can?(:show, n) %></li>
<% end %>
<% @neuigkeiten.each do |n| %>
<li><%= render n if can?(:show, n) %></li>
<% end %>
</ul>
</div>
</div>

View File

@@ -1,71 +1,66 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="<%= absurl("/logo2014_64.png")%>">
<link rel="shortcut icon" href="https://www.fet.at/logo2014_64.png">
<link rel="alternate" hreflang="de" href="<%= url_for(params.merge(:locale=>:de))%>" />
<link rel="alternate" hreflang="en" href="<%= url_for(params.merge(:locale=>:en))%>" />
<!--<link rel="shortcut icon" href="http://www.fet.at/favicon.ico">-->
<!---->
<%= stylesheet_link_tag "themes/"+theme_name+"/application", :media => "all" unless theme_name.empty? %>
<%= stylesheet_link_tag "application", :media=>"all" if theme_name.empty? %>
<% theme_stylesheet_link_tag "test", :media => "all" %>
<% theme_stylesheet_link_tag "mod", :media=>"all" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
<% if content_for?(:header) %>
<%= yield :header %>
<% else %>
<title>Fetsite</title>
<% end %>
<%= stylesheet_link_tag "themes/"+theme_name+"/application", :media => "all" unless theme_name.empty? %>
<%= stylesheet_link_tag "application", :media=>"all" if theme_name.empty? %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
<% if content_for?(:header) %>
<%= yield :header %>
<% else %>
<title>Fetsite</title>
<% end %>
</head>
<body>
<div id="maincontainer" class="container-fluid">
<div class="row-fluid">
<div class="span10 offset1 header_span">
<% cache("menu_u"+user_signed_in?.to_s+current_user.try(:id).to_s+"l"+I18n.locale.to_s+ can?(:seeintern, User).to_s+ can?(:index,Gallery).to_s+params[:theme].to_s, expires_in: 24.hours) do %>
<div class="header_wrap">
<div class="header hidden-print">
<%= link_to home_index_path do %>
<!-- <span class="feticon-fet_logo fa-4x color-1"> </span>-->
<%= image_tag('/logo2014_64.png',{:style=>"float:left;height:50px",:height=>"50"}) %>
<% end %>
</div>
<div class="header visible-print">
<%= image_tag('/logo2014_64.png',{:style=>"float:left;height:50px",:height=>"50"}) %>
</div>
<div class="visible-print">
Fachschaft Elektrotechnik
<hr/>
</div>
<div id="menudiv" style="margin-top:12px" class="hidden-print">
<%= render :template => 'layouts/menu' %>
</div>
</div>
<% end %>
</div>
<div id="maincontainer" class="container-fluid">
<div class="row-fluid">
<div class="span10 offset1 header_span">
<% cache("menu_u"+user_signed_in?.to_s+current_user.try(:id).to_s+"l"+I18n.locale.to_s+ can?(:seeintern, User).to_s+ can?(:index,Gallery).to_s+params[:theme].to_s, expires_in: 24.hours) do %>
<div class="header_wrap">
<div class="header hidden-print">
<%= link_to home_index_path do %>
<!-- <span class="feticon-fet_logo fa-4x color-1"> </span>-->
<%= image_tag('/logo2014_64.png',{:style=>"float:left;height:50px",:height=>"50"}) %>
<% end %>
</div>
<div class="header visible-print">
<%= image_tag('/logo2014_64.png',{:style=>"float:left;height:50px",:height=>"50"}) %>
</div>
<div class="visible-print">
Fachschaft Elektrotechnik
<hr/>
</div>
<div id="menudiv" style="margin-top:12px" class="hidden-print">
<%= render :template => 'layouts/menu' %>
</div>
</div>
<% end %>
</div>
</div>
<div class="row-fluid">
<div class="span10 offset1" id="contentdiv">
<%= yield %>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span10 offset1" id="contentdiv">
<%= yield %>
</div>
</div>
</div>
<script>
$('.dropdown-toggle').click(function(e) {
e.preventDefault();
setTimeout($.proxy(function() {
if ('ontouchstart' in document.documentElement) {
$(this).siblings('.dropdown-backdrop').off().remove();
}
}, this), 0);
});
</script>
<script>
$('.dropdown-toggle').click(function(e) {
e.preventDefault();
setTimeout($.proxy(function() {
if ('ontouchstart' in document.documentElement) {
$(this).siblings('.dropdown-backdrop').off().remove();
}
}, this), 0);
});
</script>
</body>
</html>

View File

@@ -44,8 +44,20 @@
</ul></div>
</li>
<%= render 'layouts/login' %>
</ul>
<li>
<% if not user_signed_in? %>
<% if Rails.env.development? %>
<%# link_to I18n.t('home.login'), user_omniauth_authorize_path(:developer) %>
<%= render 'layouts/login' %>
<% else %>
<%= link_to ffi1_icon("academic") + I18n.t('home.login'), user_omniauth_authorize_path(:ldap) %>
<% end %>
<% else %>
<%= render 'layouts/login' %>
<% end %>
</li></ul>
<!--<span class="pull-right"><%if I18n.locale == :en %>
<%= link_to image_tag("/flaggen/png/at.png") + " Deutsch" ,switch_locale_url(:de)%>

View File

@@ -1,12 +1,10 @@
<%= content_for :header do %>
<title>Fetsite - <%= @lva.full_name %></title>
<% set_meta_tags :og => {
:url=>lva_path(:theme=>nil)
}
%>
<%= display_meta_tags %>
<title>Fetsite - <%= @lva.full_name %></title>
<% set_meta_tags :og => {
:url=>lva_path(:theme=>nil) }
%>
<%= display_meta_tags %>
<% end %>
<div itemscope itemtype="schema.org/Article" >
<div class="container-fluid">
<%= render 'studien/tabs'%>
@@ -14,106 +12,145 @@
<div class="row-fluid">
<div class="span12">
<%= render 'layouts/pretty_toolbar' %>
<%= render 'layouts/pretty_toolbar' %>
</div>
</div>
<div class="row-fluid">
<div class="span8">
<h1 itemprop="name"><%= @lva.full_name %></h1>
<meta itemprop="url" content="<%= lva_path(@lva) %>" />
<ul class="linklist">
<li>
<%= link_to ffi1_icon("live2")+"ET-Forum", @lva.forumlink, class: :linkbox, itemprop: "discussionUrl" unless @lva.forumlink.nil? or @lva.forumlink.empty?%>
</li>
<li>
<%= link_to "TISS", @lva.tisslink, class: :linkbox %>
</li>
</ul>
<div itemprop="articleBody">
<h2><%= I18n.t('lva.pruefungsinfo')%></h2>
<div class="">
<%= @lva.pruefungsinformation.to_s.html_safe %>
</div>
<h2><%= I18n.t('lva.lernaufwand')%></h2>
<div class="">
<%= @lva.lernaufwand %>
</div>
<h2><%= I18n.t('lva.desc')%></h2>
<div class="">
<%= @lva.desc.to_s.html_safe %>
</div>
</div>
<h1 itemprop="name"><%= @lva.full_name %></h1>
<meta itemprop="url" content="<%= lva_path(@lva) %>" />
<ul class="linklist">
<li>
<%= link_to ffi1_icon("live2")+"ET-Forum", @lva.forumlink, class: :linkbox, itemprop: "discussionUrl" unless @lva.forumlink.nil? or @lva.forumlink.empty?%>
</li>
<li>
<%= link_to "TISS", @lva.tisslink, class: :linkbox %>
</li>
</ul>
<div itemprop="articleBody">
<h2><%= I18n.t('lva.pruefungsinfo')%></h2>
<div class="">
<%= @lva.pruefungsinformation.to_s.html_safe %>
</div>
<h2><%= I18n.t('lva.lernaufwand')%></h2>
<div class="">
<%= @lva.lernaufwand %>
</div>
<h2><%= I18n.t('lva.desc')%></h2>
<div class="">
<%= @lva.desc.to_s.html_safe %>
</div>
</div>
</div>
<div class="span4">
<div class="contentbox">
<ul>
<li><b><%= I18n.t('lva.lvanr')%>:</b> <%=@lva.lvanr %></li>
<li><b>ECTS:</b> <%=@lva.ects %></li>
<li><b><%= I18n.t('lva.stunden')%>:</b> <%=@lva.stunden %></li>
</ul>
<h2><%= I18n.t('lva.module')%></h2>
<ul>
<% @lva.modul.each do |modul| %>
<li><b><%= link_to modul.name , modul_path(modul)%></b>
<ul>
<% modul.modulgruppen.each do |g| %>
<li><%= link_to g.studium.title_context , studium_path(g.studium)%> (<%=link_to g.name, modulgruppe_path(g)%>)</li>
<% end %>
</ul>
</li>
<% end %>
</ul>
</div>
<div class="contentbox">
<h2> <%= I18n.t "lecturers.lecturers" %> </h2>
<% @lva.lecturers.each do |lec| %>
<%= render :partial=>'lecturers/lec_lva', :object=>lec %>
<% end %>
</div>
<div class="contentbox">
<ul>
<li><b><%= I18n.t('lva.lvanr')%>:</b> <%=@lva.lvanr %></li>
<li><b>ECTS:</b> <%=@lva.ects %></li>
<li><b><%= I18n.t('lva.stunden')%>:</b> <%=@lva.stunden %></li>
</ul>
<h2><%= I18n.t('lva.module')%></h2>
<ul>
<% @lva.modul.each do |modul| %>
<li><b><%= link_to modul.name , modul_path(modul)%></b>
<ul>
<% modul.modulgruppen.each do |g| %>
<li><%= link_to g.studium.title_context , studium_path(g.studium)%> (<%=link_to g.name, modulgruppe_path(g)%>)</li>
<% end %>
</ul>
</li>
<% end %>
</ul>
</div>
<div class="contentbox">
<h2> <%= I18n.t "lecturers.lecturers" %> </h2>
<% @lva.lecturers.each do |lec| %>
<%= render :partial=>'lecturers/lec_lva', :object=>lec %>
<% end %>
</div>
</div>
</div>
<div class="row-fluid">
<div class="row-fluid">
<div class="span12">
<%= new_question_for(@lva) %>
<% unless @questions.nil? %>
<% @questions.each do |q| %>
<%= render q if can? :show, q %>
<% end %>
<% end %>
<h2><%= I18n.t("lva.bspe") %></h2>
<p><%= I18n.t("lva.ratebsp")%> <%= link_to ffi1_icon("facebook1") + I18n.t('home.fblogin'), user_omniauth_authorize_path(:facebook) ,class: :linkbox %>
<p>
<%= I18n.t("lva.ratebsp")%>
<%= link_to ffi1_icon("facebook1") + I18n.t('home.fblogin'), user_omniauth_authorize_path(:facebook) ,class: :linkbox %>
</p>
<%= link_to t("beispiel.zip") , beispiel_sammlung_lva_path(@lva), class: :linkbox %>
<% @beispiele_all.each do |b| %>
<% cache("beispiel_" +I18n.locale.to_s+b.id.to_s+can?(:delete,b).to_s+"_"+can?(:edit,b).to_s + "_" + can?(:flag, b).to_s+ can?(:comment, b).to_s + "_" + can?(:like, b).to_s + "_" + b.updated_at.try(:utc).try(:to_s) + get_theme_help(current_user).to_s) do %>
<% @beispiele.each do |b| %>
<% cache("beispiel_" +I18n.locale.to_s+b.id.to_s+can?(:delete,b).to_s+"_"+can?(:edit,b).to_s + "_" + can?(:flag, b).to_s + "_" + can?(:like, b).to_s + "_" + b.updated_at.try(:utc).try(:to_s) + get_theme_help(current_user).to_s) do %>
<%= render b%>
<% end %>
<% end %>
</div>
<% if @beispiele_badQ.count > 0 %>
<h3> Bad Quality or Outdated</h3>
<% @beispiele_badQ.each do |b| %>
<% cache("beispiel_" +I18n.locale.to_s+b.id.to_s+can?(:delete,b).to_s+"_"+can?(:edit,b).to_s + "_" + can?(:flag, b).to_s + "_" + can?(:like, b).to_s + "_" + b.updated_at.try(:utc).try(:to_s) + get_theme_help(current_user).to_s) do %>
<%= render b%>
<% end %>
<% end %>
<% end %>
<% if @beispiele_deleted.count > 0 %>
<h3> Trash</h3>
<% @beispiele_deleted.each do |b| %>
<% cache("beispiel_" +I18n.locale.to_s+b.id.to_s+can?(:delete,b).to_s+"_"+can?(:edit,b).to_s + "_" + can?(:flag, b).to_s + "_" + can?(:like, b).to_s + "_" + b.updated_at.try(:utc).try(:to_s) + get_theme_help(current_user).to_s) do %>
<%= render b%>
<% end %>
<% end %>
<% end %>
</div>
</div>
<div class="row-fluid"> <div class="span12">
<% unless @lva.nlinks.empty? %>
<h2><%= I18n.t("rubrik.title") %></h2>
<% @lva.nlinks.each do |l| %>
<%= render l.neuigkeit %>
<% end %>
<% end %>
</div></div>
<div class="row-fluid">
<div class="span12">
<% unless @lva.nlinks.empty? %>
<h2><%= I18n.t("rubrik.title") %></h2>
<% @lva.nlinks.each do |l| %>
<%= render l.neuigkeit %>
<% end %>
<% end %>
</div>
</div>
<% cache("lva_beispiel_form_bulk_"+@lva.id.to_s+I18n.locale.to_s+@lva.updated_at.to_i.to_s) do %>
<div class="row-fluid">
<div class="span12">
<%= render 'beispiele/form_bulk' %>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<%= render 'beispiele/form_bulk' %>
</div>
</div>
<% end %>
<% unless @crawlobjects.nil? %>
<div class="row-fluid">
<div class="span12">
<% @crawlobjects.each do |co| %>
<%= render co %>
<% end %>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<% @crawlobjects.each do |co| %>
<%= render co %>
<% end %>
</div>
</div>
<% end %>
</div>

View File

@@ -1,9 +1,22 @@
<div id="neuigkeit_<%= neuigkeit_view.id %>" class="contentbox" itemscope itemtype="http://schema.org/Article">
<meta itemprop="about" content="<%= neuigkeit_view.text_first_words %>"/>
<meta itemprop="sameAs" content="<%= neuigkeit_url(neuigkeit_view,:theme=>nil)%>"/>
<meta itemprop="url" content="<%= neuigkeit_url(neuigkeit_view,:theme=>nil)%>"/>
<% if neuigkeit_view.nil?
neuigkeit_view=@neuigkeit
end
%>
<div id="neuigkeit_<%= neuigkeit_view.id %>" class="contentbox" itemscope itemtype="http://schema.org/Article">
<%= meta_itemprop("about", neuigkeit_view.text_first_words) %>
<%= meta_itemprop("sameAs", neuigkeit_url(neuigkeit_view,:theme=>nil)) %>
<%= meta_itemprop("url", neuigkeit_url(neuigkeit_view,:theme=>nil)) %>
<div class="media">
<div>
<% cache("menu_neuigkeit"+ neuigkeit_view.id.to_s + can?(:edit,neuigkeit_view).to_s + can?(:find_link, neuigkeit_view).to_s + can?(:new, Survey::Question).to_s + can?(:publish, neuigkeit_view).to_s + can?(:unpublish, neuigkeit_view).to_s + neuigkeit_view.published?.to_s + neuigkeit_view.flag_important.to_s + neuigkeit_view.flag_infoscreen.to_s) do %>
<%= render partial: "menu" , object: neuigkeit_view%>
<% end %>
</div>
<div>
<%#= render 'layouts/pretty_toolbar', :object=> @toolbar_elements %>
</div>
<div class="media">
<span itemprop="articleSection">
<%= ff_icon(neuigkeit_view.rubrik.icon) unless neuigkeit_view.rubrik.icon.nil? or neuigkeit_view.rubrik.icon.empty? %>&nbsp;<%= neuigkeit_view.rubrik.name %>
</span>
@@ -15,6 +28,7 @@
</span>
<% end %>
</div>
<% unless neuigkeit_view.published? %>
<div class="sticker sticker-red"> Not Published <%= link_to "Publish", publish_rubrik_neuigkeit_path(neuigkeit_view.rubrik,neuigkeit_view),remote:true, class: :btn if can? :publish, neuigkeit_view %></div>
<% end %>
@@ -31,7 +45,7 @@
<% end %>
<div class="media-body">
<h1 itemprop="name">
<%= raw(neuigkeit_view.title) %> <%= link_to fa_icon("edit"), edit_rubrik_neuigkeit_path(neuigkeit_view.rubrik, neuigkeit_view), remote: true if can? :edit, neuigkeit_view %>
<%= raw(neuigkeit_view.title) %> <%#= link_to fa_icon("edit"), edit_rubrik_neuigkeit_path(neuigkeit_view.rubrik, neuigkeit_view), remote: true if can? :edit, neuigkeit_view %>
</h1>
<div itemprop="articleBody">
<%= raw(neuigkeit_view.text) %>
@@ -40,14 +54,19 @@
</div>
<%= render_calentries_for(neuigkeit_view)%>
<%= new_calentry_div(neuigkeit_view) %>
<% unless neuigkeit_view.meeting.nil? %>
<%= render neuigkeit_view.meeting %>
<% end%>
<%= render_attachments_for(neuigkeit_view) %>
<%= render 'layouts/pretty_toolbar', :object=> @toolbar_elements %>
</div>
<%= render_attachments_list_for(neuigkeit_view) %>
</div>
<% @questions.each do |q| %>
<%= render q if can? :show, q %>
<% end %>

View File

@@ -38,19 +38,15 @@
</p>
<%= render partial: "neuigkeit_view", object: @neuigkeit %>
<%= new_question_for(@neuigkeit) if can? :new, Survey::Question %>
<% @questions.each do |q| %>
<%= render q if can? :show, q %>
<% end %>
</div>
<div class="fb-like" data-href"<%= rubrik_neuigkeit_url(@rubrik,@neuigkeit,{themes: nil, locale: nil})%>" data-layout="standard" data-action="like" data-show-faces="true" data-share="true"></div>
<%= render_comments_for(@neuigkeit) %>
<%# link_to fa_icon("link") + "Neue Verknüpfung" , "#", id: "findlink-open" if can? :find_link, @neuigkeit %>
<%= link_to fa_icon("link") + "Neue Verknüpfung" , "#", id: "findlink-open" if can? :find_link, @neuigkeit %>
<% cache(cache_array_key(@neuigkeit.nlinks, "NLinks")) do %>
<%= render partial: 'neuigkeiten/nlink_list_whole', :object=>@neuigkeit.nlinks %>
<%= render partial: 'neuigkeiten/nlink_list_whole', :object=>@neuigkeit.nlinks %>
<% end %>
<div id="findlink-body" class="ui-dialog" style="">
@@ -62,6 +58,7 @@
<%= render partial: 'nlink_list_search_whole', object: @nlink_search %>
<% end %>
</div>
<script>
$(function(){
dialog = $( "#findlink-body" ).dialog({

View File

@@ -33,16 +33,17 @@
</div>
</div>
<% unless @calentries.nil? or @calentries.empty? or true%>
<div class="span3">
<% unless @calentries.nil? or @calentries.empty? %>
<% cache("calendar_" + @calentries.map{|c| c.id}.join('') + @calentries.max{|c|c.updated_at.to_i}.updated_at.to_i.to_s+"_"+I18n.locale.to_s+params[:month].to_s+params[:year].to_s) do %>
<%= render 'calendars/calentries', :object=>@calentries %>
<% end %>
<% end %>
<% if !current_user.nil? and current_user.has_role?(:fetuser) %>
<%= link_to calendars_url(:format=>:ics, :key=>Key.find_or_create(current_user,1).uuid) , calendars_path(:format=>:ics, :key=>Key.find_or_create(current_user,1).uuid)%>
<% end %>
</div>
</div><% end %>
</div>
</div>
</div>

View File

@@ -9,7 +9,7 @@
<div class="content-wrap content-column" style="max-width:90em;">
<h1><%= I18n.t('home.willkommen') %></h1>
<%= raw(@starttopic.text) %>
<%= raw(@starttopic.text) unless @starttopic.nil? %>
<div class="container-fluid">
@@ -26,7 +26,7 @@
<li>
<%= link_to ffi1_icon("quiz")+ I18n.t("themengruppe.faqs"), faqs_themengruppen_path,class: :linkbox %>
</li>
<li><%= link_to ffi1_icon("books19")+"Beispielsammlung", studium_path(Studium.first, {:ansicht=>'semesteransicht'}) ,class: :btn ,class: :linkbox %></li>
<li><%= link_to ffi1_icon("books19")+"Beispielsammlung", studium_path(Studium.first, {:ansicht=>'semesteransicht'}) ,class: :btn ,class: :linkbox if Studium.count >0 %></li>
<li><%= link_to "Alte Beispielsammlung", "http://www.fet.at/alt/bin/view/Beispielsammlung/WebHome" ,class: :btn ,class: :linkbox %></li>
</ul>

View File

@@ -1,32 +0,0 @@
<div id="<%= beispiel.divid %>" class="contentbox">
<div class="row-fluid">
<div class="span5" >
<b><%=link_to ffi1_icon("note20")+" " + beispiel.name + " " + I18n.l(beispiel.datum), beispiel.beispieldatei.url, title: beispiel.desc %></b>
</div>
<div class="span1" >
<%= (beispiel.beispieldatei.size/1024.0).round(2).to_s %>KiB
</div>
<div class="span2" >
<%= beispiel.lecturer.try(:name).to_s %>
</div>
<div class="span4">
<%= flag_link(beispiel, "goodquality")%>
<%= flag_link(beispiel, "badquality")%>
<%= flag_link(beispiel, "delete")%>
<%= like_dislike_for(beispiel) %>
<%= link_to ff_icon("icon-pencil")+"edit", edit_beispiel_path(beispiel), remote: true if can? :edit, beispiel %>
<%= link_to fa_icon("trash")+"delete", beispiel_path(beispiel), :method=>:delete, :data=>{:confirm=>I18n.t('beispiel.sure')} if can? :delete, beispiel %>
<% link_to "Refresh", beispiel_path(beispiel,show_comments: true), remote: true %></br>
</div>
</div>
<% unless beispiel.desc.nil? || beispiel.desc.empty? %>
<div class="row-fluid">
<div class="span12">
<%= beispiel.desc %>
</div>
</div>
<% end %>
<%= render_comments_for(beispiel) %>
</div>

View File

@@ -1,77 +0,0 @@
<%= content_for :header do %>
<title>FET - <%= @fetprofile.name %></title>
<% unless @fetprofile.picture.url.nil?
picture_url=URI(root_url)
picture_url.path=@fetprofile.picture.portrait.url
end
%>
<% set_meta_tags :og => {
:image => picture_url.to_s,
:title => @fetprofile.name.to_s ,
:type => "profile",
:url=>fetprofile_url(@fetprofile,:theme=>nil),
:profile=> {
:first_name=>@fetprofile.vorname,
:last_name=>@fetprofile.nachname
}
}
%>
<% set_meta_tags :og=>{:article=> {:published_time=>I18n.l(@neuigkeit.try(:datum).try(:to_date)) }} unless @neuigkeit.try(:datum).try(:to_date).nil? %>
<%= display_meta_tags %>
<% end %>
<%= render 'fetprofiles/tabs' %>
<div class="content-wrap content-column">
<p id="notice"><%= notice %></p>
<div style="max-width:70em" itemtype="http://schema.org/Person" itemscope>
<meta itemprop="sameAs" content="<%= fetprofile_path(@fetprofile, theme: nil) %>"/>
<meta itemprop="url" content="<%= fetprofile_path(@fetprofile, theme: nil) %>"/>
<div class="media">
<span class="pull-left" itemprop="image" itemscope itemtype="http://schema.org/ImageObject">
<span itemprop="thumbnail" itemscope itemtype="http://schema.org/ImageObject">
<%= image_tag @fetprofile.picture.portrait.url %>
<meta itemprop="url" content="<%= @fetprofile.picture.portrait.url%>" />
</span>
<meta itemprop="url" content="<%= @fetprofile.picture.url%>" />
<meta itemprop="representativeOfPage" content="true" />
</span>
<div class="media-body">
<h2><span itemprop="givenName"><%= @fetprofile.vorname %></span><span itemprop="familyName"> <%= @fetprofile.nachname %></span><% unless @fetprofile.short.empty? %><span itemprop=""> <%= @fetprofile.short %> </span><% end %></h2>
<meta itemprop="name" content="<%= @fetprofile.name %>" />
<p itemprop="email">
<%= @fetprofile.fetmail %>
</p>
<p itemprop="description">
<%= @fetprofile.desc %>
</p>
<%= render partial: "interninfo", object: @fetprofile if can?(:seeintern, @fetprofile) %>
<ul>
<% @memberships.each do |m| %>
<li>
<%= link_to gremium_path(m.gremium) do %> <%= render m %><% end %>
<%= link_to I18n.t('common.edit'), edit_fetprofile_membership_path(@fetprofile,m) if params["verwalten"] && can?(:edit, m)%>
<%= link_to I18n.t('common.delete'), [@fetprofile, m], method: :delete, data: {confirm: I18n.t('common.sure_del')} if params["verwalten"] && can?(:delete, m ) %>
</li>
<% end %>
</ul>
</div>
</div>
</div>
<% if can?(:edit, @fetprofile) %>
<div>
<span>
<%= link_to ff_icon("icon-pencil")+I18n.t('common.edit'), edit_fetprofile_path(@fetprofile) if can?(:edit, @fetprofile) %>
<%= link_to fa_icon("trash")+I18n.t('common.delete'), fetprofile_path(@fetprofile),method: :delete, data: { confirm: "Are you sure?" } if can?(:delete, @fetprofile) %>
</span>
</div>
<% end %>
<%#= render 'layouts/pretty_toolbar' %>
</div>

View File

@@ -1,67 +0,0 @@
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/de_DE/sdk.js#xfbml=1&appId=120379864660921&version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="content-wrap content-column" style="max-width:90em;">
<h1><%= I18n.t('home.willkommen') %></h1>
<%= raw(@starttopic.text) %>
<div class="container-fluid">
<div class="row-fluid">
<div class="span4">
<ul class="linklist">
<li>
<%= link_to ffi1_icon("facebook1") + I18n.t('home.fblogin'), user_omniauth_authorize_path(:facebook) ,class: :linkbox %>
</li>
<li>
<%= link_to ffi1_icon("academic") + I18n.t('home.login'), user_omniauth_authorize_path(:ldap) ,class: :linkbox %>
</li>
<li>
<%= link_to ffi1_icon("quiz")+ I18n.t("themengruppe.faqs"), faqs_themengruppen_path,class: :linkbox %>
</li>
<li><%= link_to ffi1_icon("books19")+"Beispielsammlung", studium_path(Studium.first, {:ansicht=>'semesteransicht'}) ,class: :btn ,class: :linkbox %></li>
<li><%= link_to "Alte Beispielsammlung", "http://www.fet.at/alt/bin/view/Beispielsammlung/WebHome" ,class: :btn ,class: :linkbox %></li>
</ul>
<% cache("stickytopics_startpage_"+cache_array_key(@stickythemen)) do %>
<ul class="linklist">
<% @stickythemen.each do |t1| %>
<li>
<%= link_to t1,:class=>:linkbox do %>
<%= render partial: "themen/nlink", object: t1 %>
<% end %>
</li>
<% end %>
</ul>
<% end %>
<%= render 'beispiele' %>
</div>
<div class="span5">
<ul class="unstyled linkbox-list">
<% @neuigkeiten.each do |n| %>
<li><%= render n if can?(:show, n) %> </li>
<% end %>
</ul>
</div>
<div class="span3">
<% cache("calendar_" + cache_array_key(@calentries)+params[:month].to_s+params[:year].to_s) do %>
<%= render 'calendars/calentries', :object=>@calentries %>
<% end %>
<div class="fb-like-box" data-href="https://www.facebook.com/FachschaftET" data-colorscheme="light" data-show-faces="true" data-header="true" data-stream="false" data-show-border="true"></div>
</div>
</div>
</div>
</div>

View File

@@ -1,62 +0,0 @@
<h1> FET Intern NEU blue2</h1>
<div class="container-fluid">
<div class="row-fluid">
<div class="span6">
<div>
<ul class="linklist">
<li>
<%= link_to fa_icon("list")+"Adressliste", internlist_fetprofiles_path ,class: :linkbox %>
</li>
<li>
<%= link_to ff_icon("ffi1-setting")+"Admin" , admin_home_index_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("fa fa-folder")+"Treeview" , treeview_home_index_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("ffi1-newspaper9")+"Crawler" , crawler_index_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("ffi1-setting")+"Meetings" , meetingtyps_path, class: :linkbox if current_user.has_role?(:fetadmin) %>
</li>
<li>
<%= link_to ff_icon("ffi1-setting")+"Alte Oberfläche" , set_preferred_theme_user_path(current_user, params: {theme: "blue1"}), class: :linkbox if can? :set_preferred_theme, current_user %>
</li>
</ul><br>
</div>
<div>Suche nach Protokollen
<%= semantic_form_for :search,:remote=>true, :url=>search_documents_path, :html=>{:id=>"search_form",:class=>"", :method=>'get'} do |f| %>
<%= f.input :query, :input_html => { :name => 'query' } , :label=>false, :class=>"search-query" %>
<% f.actions do %>
<% f.action :submit, :as => :input %>
<% end %>
<% end %>
<div id="searchresults">
<%= render :partial=>"documents/search_results", :object=>@results %>
</div>
</div>
<ul class="unstyled linkbox-list">
<li>
<% @themengruppen.each do |themengruppe| %>
<div class="container-fluid">
<%= render themengruppe if can?(:show,themengruppe)%>
</div>
<% end %>
</li>
</ul>
<%= link_to "Users", users_path %>
</div>
<div class="span6">
<h2>Neuigkeiten</h2>
<ul class="unstyled linkbox-list">
<% @neuigkeiten.each do |n| %>
<li><%= render n if can?(:show, n) %></li>
<% end %>
</ul>
</div>
</div>
</div>
<h2></h2>

View File

@@ -1,65 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="<%= absurl("/logo2014_64.png")%>">
<link rel="alternate" hreflang="de" href="<%= url_for(params.merge(:locale=>:de))%>" />
<link rel="alternate" hreflang="en" href="<%= url_for(params.merge(:locale=>:en))%>" />
<%= stylesheet_link_tag "themes/"+theme_name+"/application", :media => "all" unless theme_name.empty? %>
<%= stylesheet_link_tag "application", :media=>"all" if theme_name.empty? %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
<% if content_for?(:header) %>
<%= yield :header %>
<% else %>
<title>Fetsite</title>
<% end %>
</head>
<body>
<div id="maincontainer" class="container-fluid">
<div class="row-fluid">
<div class="span10 offset1 header_span">
<% cache("menu_u"+user_signed_in?.to_s+current_user.try(:id).to_s+"l"+I18n.locale.to_s+ can?(:seeintern, User).to_s+ can?(:index,Gallery).to_s+params[:theme].to_s, expires_in: 24.hours) do %>
<div class="header_wrap">
<div class="header hidden-print">
<%= link_to home_index_path do %>
<!-- <span class="feticon-fet_logo fa-4x color-1"> </span>-->
<%= image_tag('/logo2014_64.png',{:style=>"float:left;height:50px",:height=>"50"}) %>
<% end %>
</div>
<div class="header visible-print">
<%= image_tag('/logo2014_64.png',{:style=>"float:left;height:50px",:height=>"50"}) %>
</div>
<div class="visible-print">
Fachschaft Elektrotechnik
<hr/>
</div>
<div id="menudiv" style="margin-top:12px" class="hidden-print">
<%= render :template => 'layouts/menu' %>
</div>
</div>
<% end %>
</div>
</div>
<div class="row-fluid">
<div class="span10 offset1" id="contentdiv">
<%= yield %>
</div>
</div>
</div>
<script>
$('.dropdown-toggle').click(function(e) {
e.preventDefault();
setTimeout($.proxy(function() {
if ('ontouchstart' in document.documentElement) {
$(this).siblings('.dropdown-backdrop').off().remove();
}
}, this), 0);
});
</script>
</body>
</html>

View File

@@ -1,62 +0,0 @@
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<!-- <a class="brand" href="#"><% t 'home.mtitle'%></a>-->
<a class ="btn btn-navbar" data-toggle="collapse" data-parent="#menudiv" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<div class="nav-collapse collapse">
<ul class="nav nav-pills nav-stacked">
<li><%= link_to I18n.t(:home,:scope=>'home' ), home_index_path %>
</li>
<li><%= link_to I18n.t(:news,:scope=>'home' ),rubriken_path %></li>
<li><%= link_to I18n.t(:info,:scope=>'home' ),themengruppen_path %></li>
<li><%= link_to I18n.t('mitarbeiter',:scope=>'home' ),fetprofiles_path %></li>
<% if can? :index, Gallery %>
<li><%= link_to I18n.t('fotos',:scope=>'home' ),galleries_path %></li>
<% end %>
<li><%= link_to I18n.t(:studien,:scope=>'home' ), studien_path %></li>
<li> <%= link_to I18n.t("home.search"), search_home_index_path %></li>
<li> <%= link_to I18n.t("home.kontakt"), kontakt_home_index_path %></li>
<% if can?(:seeintern, User) %>
<li>
<%= link_to 'Intern' , intern_home_index_path %>
</li><% end %>
</ul>
<ul class="nav nav-pills nav-stacked pull-right">
<li>
<!--<a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" > <%= image_tag("/flaggen/png/"+I18n.locale.to_s+".png") + " " +I18n.t('sprache',:scope=>'home')%><b class="caret"></b></a>-->
<!-- Split button -->
<div class="btn-group navbar-btn">
<button type="button" class="btn btn-link dropdown-toggle" data-hover="dropdown" aria-expanded="false">
<%= image_tag("/flaggen/png/"+I18n.locale.to_s+".png") + " " +I18n.t('sprache',:scope=>'home')%>
</button>
<button type="button" class="btn btn-link dropdown-toggle" data-hover="dropdown" data-toggle="dropdown" >
<span class="caret"></span>
</button>
<ul class="dropdown-menu" role="menu">
<li><%= link_to image_tag("/flaggen/png/at.png") + " Deutsch" ,switch_locale_url(:de)%> </li>
<li><%= link_to image_tag("/flaggen/png/gb.png") + " English" ,switch_locale_url(:en)%> </li>
</ul></div>
</li>
<%= render 'layouts/login' %>
</ul>
<!--<span class="pull-right"><%if I18n.locale == :en %>
<%= link_to image_tag("/flaggen/png/at.png") + " Deutsch" ,switch_locale_url(:de)%>
<% elsif I18n.locale == :de %>
<%= link_to image_tag("/flaggen/png/gb.png") + " English" ,switch_locale_url(:en)%>
<%end %>
</span>-->
</div>
</div>
</div>
</div>

View File

@@ -1,155 +0,0 @@
<%= content_for :header do %>
<title>Fetsite - <%= @lva.full_name %></title>
<% set_meta_tags :og => {
:url=>lva_path(:theme=>nil) }
%>
<%= display_meta_tags %>
<% end %>
<div itemscope itemtype="schema.org/Article" >
<div class="container-fluid">
<%= render 'studien/tabs'%>
<p id="notice"><%= notice %></p>
<div class="row-fluid">
<div class="span12">
<%= render 'layouts/pretty_toolbar' %>
</div>
</div>
<div class="row-fluid">
<div class="span8">
<h1 itemprop="name"><%= @lva.full_name %></h1>
<meta itemprop="url" content="<%= lva_path(@lva) %>" />
<ul class="linklist">
<li>
<%= link_to ffi1_icon("live2")+"ET-Forum", @lva.forumlink, class: :linkbox, itemprop: "discussionUrl" unless @lva.forumlink.nil? or @lva.forumlink.empty?%>
</li>
<li>
<%= link_to "TISS", @lva.tisslink, class: :linkbox %>
</li>
</ul>
<div itemprop="articleBody">
<h2><%= I18n.t('lva.pruefungsinfo')%></h2>
<div class="">
<%= @lva.pruefungsinformation.to_s.html_safe %>
</div>
<h2><%= I18n.t('lva.lernaufwand')%></h2>
<div class="">
<%= @lva.lernaufwand %>
</div>
<h2><%= I18n.t('lva.desc')%></h2>
<div class="">
<%= @lva.desc.to_s.html_safe %>
</div>
</div>
</div>
<div class="span4">
<div class="contentbox">
<ul>
<li><b><%= I18n.t('lva.lvanr')%>:</b> <%=@lva.lvanr %></li>
<li><b>ECTS:</b> <%=@lva.ects %></li>
<li><b><%= I18n.t('lva.stunden')%>:</b> <%=@lva.stunden %></li>
</ul>
<h2><%= I18n.t('lva.module')%></h2>
<ul>
<% @lva.modul.each do |modul| %>
<li><b><%= link_to modul.name , modul_path(modul)%></b>
<ul>
<% modul.modulgruppen.each do |g| %>
<li><%= link_to g.studium.title_context , studium_path(g.studium)%> (<%=link_to g.name, modulgruppe_path(g)%>)</li>
<% end %>
</ul>
</li>
<% end %>
</ul>
</div>
<div class="contentbox">
<h2> <%= I18n.t "lecturers.lecturers" %> </h2>
<% @lva.lecturers.each do |lec| %>
<%= render :partial=>'lecturers/lec_lva', :object=>lec %>
<% end %>
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<%= new_question_for(@lva) %>
<% @questions.each do |q| %>
<%= render q if can? :show, q %>
<% end %>
<h2><%= I18n.t("lva.bspe") %></h2>
<p>
<%= I18n.t("lva.ratebsp")%>
<%= link_to ffi1_icon("facebook1") + I18n.t('home.fblogin'), user_omniauth_authorize_path(:facebook) ,class: :linkbox %>
</p>
<%= link_to t("beispiel.zip") , beispiel_sammlung_lva_path(@lva), class: :linkbox %>
<% @beispiele.each do |b| %>
<% cache("beispiel_" +I18n.locale.to_s+b.id.to_s+can?(:delete,b).to_s+"_"+can?(:edit,b).to_s + "_" + can?(:flag, b).to_s + "_" + can?(:like, b).to_s + "_" + b.updated_at.try(:utc).try(:to_s) + get_theme_help(current_user).to_s) do %>
<%= render b%>
<% end %>
<% end %>
<% if @beispiele_badQ.count > 0 %>
<h3> Bad Quality or Outdated</h3>
<% @beispiele_badQ.each do |b| %>
<% cache("beispiel_" +I18n.locale.to_s+b.id.to_s+can?(:delete,b).to_s+"_"+can?(:edit,b).to_s + "_" + can?(:flag, b).to_s + "_" + can?(:like, b).to_s + "_" + b.updated_at.try(:utc).try(:to_s) + get_theme_help(current_user).to_s) do %>
<%= render b%>
<% end %>
<% end %>
<% end %>
<% if @beispiele_deleted.count > 0 %>
<h3> Trash</h3>
<% @beispiele_deleted.each do |b| %>
<% cache("beispiel_" +I18n.locale.to_s+b.id.to_s+can?(:delete,b).to_s+"_"+can?(:edit,b).to_s + "_" + can?(:flag, b).to_s + "_" + can?(:like, b).to_s + "_" + b.updated_at.try(:utc).try(:to_s) + get_theme_help(current_user).to_s) do %>
<%= render b%>
<% end %>
<% end %>
<% end %>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<% unless @lva.nlinks.empty? %>
<h2><%= I18n.t("rubrik.title") %></h2>
<% @lva.nlinks.each do |l| %>
<%= render l.neuigkeit %>
<% end %>
<% end %>
</div>
</div>
<% cache("lva_beispiel_form_bulk_"+@lva.id.to_s+I18n.locale.to_s+@lva.updated_at.to_i.to_s) do %>
<div class="row-fluid">
<div class="span12">
<%= render 'beispiele/form_bulk' %>
</div>
</div>
<% end %>
<% unless @crawlobjects.nil? %>
<div class="row-fluid">
<div class="span12">
<% @crawlobjects.each do |co| %>
<%= render co %>
<% end %>
</div>
</div>
<% end %>
</div>
</div>

View File

@@ -1,72 +0,0 @@
<% if neuigkeit_view.nil?
neuigkeit_view=@neuigkeit
end
%>
<div id="neuigkeit_<%= neuigkeit_view.id %>" class="contentbox" itemscope itemtype="http://schema.org/Article">
<%= meta_itemprop("about", neuigkeit_view.text_first_words) %>
<%= meta_itemprop("sameAs", neuigkeit_url(neuigkeit_view,:theme=>nil)) %>
<%= meta_itemprop("url", neuigkeit_url(neuigkeit_view,:theme=>nil)) %>
<div>
<% cache("menu_neuigkeit"+ neuigkeit_view.id.to_s + can?(:edit,neuigkeit_view).to_s + can?(:find_link, neuigkeit_view).to_s + can?(:new, Survey::Question).to_s + can?(:publish, neuigkeit_view).to_s + can?(:unpublish, neuigkeit_view).to_s + neuigkeit_view.published?.to_s + neuigkeit_view.flag_important.to_s + neuigkeit_view.flag_infoscreen.to_s) do %>
<%= render partial: "menu" , object: neuigkeit_view%>
<% end %>
</div>
<div>
<%#= render 'layouts/pretty_toolbar', :object=> @toolbar_elements %>
</div>
<div class="media">
<span itemprop="articleSection">
<%= ff_icon(neuigkeit_view.rubrik.icon) unless neuigkeit_view.rubrik.icon.nil? or neuigkeit_view.rubrik.icon.empty? %>&nbsp;<%= neuigkeit_view.rubrik.name %>
</span>
<span class="pull-right">
<span itemprop="author"><%= neuigkeit_view.author.email.to_s unless neuigkeit_view.try(:author).try(:email).to_s %>
<%= neuigkeit_view.author.text %></span>
<% unless neuigkeit_view.try(:datum).try(:to_date).nil? %>
<%= " "+ I18n.t("neuigkeit.am")+" " %><span itemprop="datePublished"><%= I18n.l(neuigkeit_view.try(:datum).try(:to_date)) %>
</span>
<% end %>
</div>
<% unless neuigkeit_view.published? %>
<div class="sticker sticker-red"> Not Published <%= link_to "Publish", publish_rubrik_neuigkeit_path(neuigkeit_view.rubrik,neuigkeit_view),remote:true, class: :btn if can? :publish, neuigkeit_view %></div>
<% end %>
<% unless neuigkeit_view.origurl.nil? || neuigkeit_view.origurl.empty? %>
<div class="alert"><%= link_to "Zitiert von "+ neuigkeit_view.origurl, neuigkeit_view.origurl %>
</div>
<% end %>
<div class="media">
<% unless neuigkeit_view.picture_robust.big_thumb.to_s.empty? %>
<div class="pull-left" href="#">
<p><br><%= link_to image_tag(neuigkeit_view.picture_robust.big_thumb),neuigkeit_view.picture_robust.try(:url) %>
</p>
</div>
<% end %>
<div class="media-body">
<h1 itemprop="name">
<%= raw(neuigkeit_view.title) %> <%#= link_to fa_icon("edit"), edit_rubrik_neuigkeit_path(neuigkeit_view.rubrik, neuigkeit_view), remote: true if can? :edit, neuigkeit_view %>
</h1>
<div itemprop="articleBody">
<%= raw(neuigkeit_view.text) %>
</div>
</div>
</div>
<%= render_calentries_for(neuigkeit_view)%>
<%= new_calentry_div(neuigkeit_view) %>
<% unless neuigkeit_view.meeting.nil? %>
<%= render neuigkeit_view.meeting %>
<% end%>
<%= render_attachments_list_for(neuigkeit_view) %>
</div>
<% @questions.each do |q| %>
<%= render q if can? :show, q %>
<% end %>

View File

@@ -1,77 +0,0 @@
<%= content_for :header do %>
<title>Fetsite - <%= @neuigkeit.title %> (<%= @neuigkeit.rubrik.name %>)</title>
<% set_meta_tags :author => fetprofile_path(@neuigkeit.author.fetprofile) unless @neuigkeit.author.fetprofile.nil? %>
<% unless @neuigkeit.picture_robust.url.nil? %>
<%
picture_url=URI(root_url)
picture_url.path=@neuigkeit.picture_robust.url(:locale=>nil, :theme=>nil)
%>
<% end %>
<% set_meta_tags :og =>
{
:image => picture_url.to_s,
:title => @neuigkeit.title.to_s + " (" + @neuigkeit.rubrik.name.to_s + ")",
:type => "article",
:description =>@neuigkeit.text_first_words,
:url=>neuigkeit_url(:theme=>nil)
}
%>
<%= display_meta_tags %>
<% end %>
<%= render 'rubriken/tabs' %>
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/de_DE/sdk.js#xfbml=1&appId=120379864660921&version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="content-column content-wrap">
<%= link_to "Refresh", neuigkeit_path(@neuigkeit), remote: true %>
<p id="notice">
<%= notice %>
</p>
<%= render partial: "neuigkeit_view", object: @neuigkeit %>
</div>
<div class="fb-like" data-href"<%= rubrik_neuigkeit_url(@rubrik,@neuigkeit,{themes: nil, locale: nil})%>" data-layout="standard" data-action="like" data-show-faces="true" data-share="true"></div>
<%= render_comments_for(@neuigkeit) %>
<%# link_to fa_icon("link") + "Neue Verknüpfung" , "#", id: "findlink-open" if can? :find_link, @neuigkeit %>
<% cache(cache_array_key(@neuigkeit.nlinks, "NLinks")) do %>
<%= render partial: 'neuigkeiten/nlink_list_whole', :object=>@neuigkeit.nlinks %>
<% end %>
<div id="findlink-body" class="ui-dialog" style="">
<% if can? :find_link, @neuigkeit %>
Nach Element suchen:
<%= semantic_form_for :find_link, :url=>find_link_rubrik_neuigkeit_path(@rubrik,@neuigkeit), :html=>{:id=>"search_form", :method=>'get'} , :remote=> true do |f| %>
<%= f.input :query, :input_html => { :name => 'query' },:label=>false %>
<% end %>
<%= render partial: 'nlink_list_search_whole', object: @nlink_search %>
<% end %>
</div>
<script>
$(function(){
dialog = $( "#findlink-body" ).dialog({
autoOpen: false,
width: 350,
modal: true,
title: "Neue Verknüpfung hinzufügen",
buttons: {
"Fertig": function() {
dialog.dialog( "close" );
}
}
});
$("#findlink-open").on("click",function(){dialog.dialog("open")})
});
</script>

View File

@@ -225,6 +225,7 @@ Devise.setup do |config|
# up on your models and hooks.
#config.omniauth :facebook, 'appid', 'secret'
secrets = YAML.load_file("#{::Rails.root.to_s}/config/omniauth_secrets.yml")
config.omniauth :developer,:title => "Developer" unless Rails.env.production?
config.omniauth :facebook, secrets["facebook"]["appid"], secrets["facebook"]["secret"]
config.omniauth :ldap, :title => "My LDAP",
:host => secrets["ldap"]["host"],
@@ -236,6 +237,8 @@ Devise.setup do |config|
:bind_dn =>secrets["ldap"]['bind'],
:password => secrets["ldap"]['password']
# ==> Warden configuration<<
# If you want to use other strategies, that are not supported by Devise, or
# change the failure app, you can configure them inside the config.warden block.

View File

@@ -16,6 +16,7 @@ de:
savecont: "Zwischenspeichern"
intern: "Intern"
manage: "Verwalten"
new: "Neu"
home:
sprache: "Deutsch"
kontakt: "Kontakt"

View File

@@ -6,6 +6,7 @@ de:
active_members: "Aktive Mitglieder"
notactive_members: "Pension"
new_profile: "Neues Profil anlegen"
new: "Neues Profil anlegen"
gremium:
new: "Neues Gremium"
seit: "seit"

View File

@@ -72,6 +72,7 @@ end
end
end
devise_for :users , :controllers=>{:omniauth_callbacks=> "users/omniauth_callbacks"}
#match '/auth/:provider/callback', to: "session#new", via: [:get, :post]
scope '(:locale)', constraints: {:locale=>/en|de/i} do
@@ -160,8 +161,26 @@ end
resources :fragen, :only =>[:new, :edit, :update, :destroy, :create]
resources :neuigkeiten, :only => [:show] , constraints: {id: /\d+/i}
resources :neuigkeiten, :only => [:show] , constraints: {id: /\d+/i} do
member do
get 'publish'
get 'unpublish'
get 'add_calentry'
get 'rm_calentry'
get 'create_link'
get 'delete_link'
get 'find_link'
get 'publish_to_facebook'
get 'mail_to_fet'
get 'mail_preview'
get 'flag'
end
collection do
get 'newsletter_preview'
end
end
get "neuigkeiten", controller: :rubriken, action: :index, as: "neuigkeiten"
resources :rubriken do
collection do
get 'verwalten' , :action => :alle_verwalten

View File

@@ -2,8 +2,10 @@ production:
solr:
hostname: localhost
port: 8080
log_level: WARNING
path: /solr-4.10.2/default #production #ollection1 #production
# log_level: WARNING
# min_memory: 32M
# max_memory: 1G
# path: /solr-4.10.2/default #production #ollection1 #production
# solr_home: solr
# read_timeout: 2
# open_timeout: 0.5
@@ -11,10 +13,17 @@ production:
development:
solr:
hostname: localhost
port: 8982
port: 8983
log_level: INFO
path: /solr/development
path: /solr/fetsite_test
# min_memory: 32M
# max_memory: 1G
# solr:
# hostname: localhost
# port: 8983
# log_level: INFO
# path: /solr/mycore
test:
solr:
hostname: localhost

View File

@@ -1,7 +1,7 @@
#! /bin/bash
ruby_command="ruby"
rake_command="rake"
bundler_command="bundler"
bundler_command="bundle"
# Are the necessary programs installed?
command -v $ruby_command >/dev/null 2>&1 || { echo >&2 "The given ruby command does not exist. Please change the command or install ruby"; exit 1; }
@@ -14,19 +14,21 @@ echo "Generating base configs..."
# Generate clean config files if they don't exist
cp -u config/database.yml.example config/database.yml
cp -u config/omniauth_secrets.yml.example config/omniauth_secrets.yml
touch config/crawl_config.yml
echo "Bundle install..."
# Run Bundler
$bundler_command install || {echo "Bundler failed. Please run \"$bundle\_command install\" seperately and debug the errors, before running this script again";exit 1;}
$bundler_command install || { echo "Bundler failed. Please run \"$bundle\_command install\" seperately and debug the errors, before running this script again";exit 1; }
echo "Migrate the database..."
# Run the migration
$rake_command db:migrate ||{echo "Migration failed. Please run \"$rake\_command db:migrate\" seperately and debug the errors, before running this script again"; exit 1;}
$rake_command db:migrate || { echo "Migration failed. Please run \"$rake\_command db:migrate\" seperately and debug the errors, before running this script again"; exit 1; }
echo "Start the sunspot server"
# Run Sunspot
$rake_command sunspot:solr:stop &> /dev/null
$rake_command sunspot:solr:start || exit 1
bundle exec sunspot-solr start -p 8982
# Topic 1 is supposed to be the startpage topic
if [ ! -f config/start_topic.yml ]; then
@@ -34,7 +36,7 @@ if [ ! -f config/start_topic.yml ]; then
echo "1" > config/start_topic.yml
fi
# Generate fetadmin user "admin@fet.at", password: 12345678
touch config/crawl_config.yml

View File

@@ -66,7 +66,7 @@ module Flagable
value=obj.send("flag_"+flag)
cstyle=(value) ? "true" :"false"
cfm = (fc.nil? || fc["flag_"+flag].nil?) ? {} : {confirm: fc["flag_"+flag]}
link_to ff_icon(fi[flag]), url_for({controller: obj.class.name.tableize,action: :flag, flag: flag, value: !value, theme: nil, locale: nil, id: obj.id}), remote: true, class:("flag-"+cstyle +" flag-"+flag + "-"+cstyle ), id: obj.flaglinkid(flag), data: cfm
link_to ff_icon(fi[flag]), url_for({controller: obj.class.name.tableize,action: :flag, flag: flag, value: !value, theme: nil, locale: nil, id: obj.id}), remote: true, class: ("flag-"+cstyle +" flag-"+flag + "-"+cstyle ), id: obj.flaglinkid(flag), data: cfm
end
end
end

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -0,0 +1,134 @@
html {
background-color: #fff;
overflow: hidden;
}
body {
display: flex;
flex-flow: wrap;
height: 100vh;
justify-content: space-between;
flex-direction: column;
}
.header {
height: 200px;
width: 100%
}
svg {
padding-top: 2em;
}
.impulsPath {
fill: none;
stroke: #04669c;
stroke-miterlimit: 1;
stroke-width: 6px;
stroke-dasharray: 1946.243;
stroke-dashoffset: 0;
stroke-linejoin: round;
stroke-linecap: round;
animation: dash 10s ease-out infinite;
animation-direction: normal;
}
.FET-logotext-stroke {
fill: #fff;
}
#FET-logotext {
opacity: 0;
animation: logotext 10s ease-in infinite;
}
.content-area {
height: auto;
width: 100%;
}
.footer {
width: 100%;
height: 150px;
background-color: #04669c;
padding-bottom: 10px;
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
color: #fff;
flex-basis: bottom;
}
.footer h3,
p {
margin: 0;
padding: 0 20px;
font-family: Helvetica, Arial;
letter-spacing: 0.1em;
}
.footer h3 {
padding-top: 20px;
}
.footer .adress {
margin: auto;
text-align: left;
}
.footer .contact {
margin: auto;
text-align: center;
}
.footer .servicecontainer{
display: inline-flex;
margin: auto;
}
.footer .servicecontainer .servicetime {
margin: auto;
text-align: right;
}
.footer .servicecontainer .servicetime #time {
font-size: 0.7em
}
.footer .servicecontainer .servicestatus{
margin: auto;
width:20px;
height: 100%
padding-right: 30px;
background-color: #fff;
}
/*K E Y F R A M E S*/
@keyframes dash {
from {
stroke-dashoffset: 1946.243;
opacity: 0;
stroke-width: 0.5;
}
to {
opacity: 1;
stroke-dashoffset: 0;
stroke-width: 5px;
}
}
@keyframes logotext {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

View File

@@ -0,0 +1,134 @@
html {
background-color: #fff;
overflow: hidden;
}
body {
display: flex;
flex-flow: wrap;
height: 100vh;
justify-content: space-between;
flex-direction: column;
}
.header {
height: 200px;
width: 100%
}
svg {
padding-top: 2em;
}
.impulsPath {
fill: none;
stroke: #04669c;
stroke-miterlimit: 1;
stroke-width: 6px;
stroke-dasharray: 1946.243;
stroke-dashoffset: 0;
stroke-linejoin: round;
stroke-linecap: round;
animation: dash 10s ease-out infinite;
animation-direction: normal;
}
.FET-logotext-stroke {
fill: #fff;
}
#FET-logotext {
opacity: 0;
animation: logotext 10s ease-in infinite;
}
.content-area {
height: auto;
width: 100%;
}
.footer {
width: 100%;
height: 150px;
background-color: #04669c;
padding-bottom: 10px;
display: flex;
flex-wrap: nowrap;
justify-content: space-between;
color: #fff;
flex-basis: bottom;
}
.footer h3,
p {
margin: 0;
padding: 0 20px;
font-family: Helvetica, Arial;
letter-spacing: 0.1em;
}
.footer h3 {
padding-top: 20px;
}
.footer .adress {
margin: auto;
text-align: left;
}
.footer .contact {
margin: auto;
text-align: center;
}
.footer .servicecontainer{
display: inline-flex;
margin: auto;
}
.footer .servicecontainer .servicetime {
margin: auto;
text-align: right;
}
.footer .servicecontainer .servicetime #time {
font-size: 0.7em
}
.footer .servicecontainer .servicestatus{
margin: auto;
width:20px;
height: 100%
padding-right: 30px;
background-color: #fff;
}
/*K E Y F R A M E S*/
@keyframes dash {
from {
stroke-dashoffset: 1946.243;
opacity: 0;
stroke-width: 0.5;
}
to {
opacity: 1;
stroke-dashoffset: 0;
stroke-width: 5px;
}
}
@keyframes logotext {
from {
opacity: 0;
}
to {
opacity: 1;
}
}

View File

@@ -0,0 +1,104 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Infoscreen</title>
<style media="screen">
pre.code {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
padding: 10px;
height: 280px;
overflow: auto;
background: #181818;
border: solid 2px #181818;
}
#codelines {
display: none;
}
#svg {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
border: solid 2px #ccc;
width: 300px;
height: 300px;
float: left;
margin-right: 10px;
font: 1em source-sans-pro, Source Sans Pro, Helvetica, sans-serif;
}
</style>
<link rel="stylesheet" href="./infoscreenframe.css">
</head>
<body>
<div class="header">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 200">
<path id="impulsPath" class="impulsPath" d="M0,61.43H1018c2.41,0,6.77-2.28,9.12-2.28,2.66,0,8.3,6.58,11.65,6.58,3.16,0,7.47-15.07,10-15.07,4.3,0,10.38,29.62,14.18,29.62s11.89-55.47,13.67-55.47c5.32,0,10.63,86.34,14.18,86.34,4.3,0,10.63-111.15,13.42-111.15,3.54,0,8.86,123.56,13.17,123.56,3.8,0,8.36-116.85,13.55-116.85,3.42,0,8.74,100,13.67,100,3.67,0,9.24-71.15,12.91-71.15,3.42,0,10.51,41.78,12.91,41.78,3.42,0,8.48-24.56,12.41-24.56,4.43,0,7.93,12.91,12.41,12.91,5.7,0,8.3-6.58,11.65-6.58s6.77,2.28,9.12,2.28h64"/>
<g id="FET-logotext"><g id="F"><path d="M1042,82.71l12.7-35.9v-.1c.2-.3,3.8-8.5,13.1-9.6h37.9l-4,11.6h-25.8a7.19,7.19,0,0,0-4.8,3.7l-.6,1.6h14.1l-4.1,11.7h-14l-6.1,17Z"/><path class="FET-logotext-stroke" d="M1102.9,39l-2.6,7.6h-24.6a9.18,9.18,0,0,0-6.4,5l-1.6,4.4h14.1l-2.7,7.7h-14l-6.1,17h-14.2l11.7-33.2s3.3-7.5,11.5-8.5h34.9m5.7-4h-40.9c-10.4,1.3-14.5,10.4-14.7,10.8l-.1.1V46L1041,79.31l-1.9,5.3h22.7l.9-2.7,5.1-14.4H1082l.9-2.7,2.7-7.7,1.9-5.3h-13.7a5.48,5.48,0,0,1,2.3-1.4h27.1l.9-2.7,2.6-7.6,1.9-5.1Z"/></g><g id="E"><path d="M1101.3,82.71h-.2a8.59,8.59,0,0,1-6.2-3.8,9.86,9.86,0,0,1-.7-7.9l8.8-24.9.1-.1c.2-.3,4.3-8.1,13.3-9H1154l-4,11.7-26-.1a7.1,7.1,0,0,0-4.6,3.7l-.6,1.7h14.1l-4.1,11.7h-14.2l-1.1,3.1a2.37,2.37,0,0,0,.2,1.6,2.23,2.23,0,0,0,1.2.7h27l-4,11.7h-36.6Z"/><path class="FET-logotext-stroke" d="M1151.2,39l-2.6,7.7-24.8-.1a9.21,9.21,0,0,0-6.2,5l-1.7,4.4H1130l-2.7,7.7h-14.1l-1.6,4.5s-1.1,4.1,3,4.9H1139l-2.6,7.7h-35c-7.8-1.3-5.3-9.1-5.3-9.1l8.7-24.6s3.7-7.1,11.7-7.9l34.7-.2m5.6-4h-40.6c-10.1,1-14.7,9.7-14.9,10l-.1.3-.1.3-8.7,24.6v.2c-.2.5-1.6,5.4.9,9.6a10.41,10.41,0,0,0,7.5,4.7l.3.1h38.2l.9-2.7,2.6-7.7,1.8-5.3h-29l.5-1.4h14.1l.9-2.7,2.7-7.7,1.9-5.3H1122a6.42,6.42,0,0,1,2.2-1.4l24.3.1h2.9l.9-2.7,2.6-7.7,1.9-5.3Z"/></g><g id="T"><path d="M1154.3,82.71l12-34-15.1-.1.9-2.6a14.39,14.39,0,0,1,11.5-9H1204l-4.1,11.7h-15l-12.1,34.1h-18.5Z"/><path class="FET-logotext-stroke" d="M1201.2,38.91l-2.7,7.7h-15l-12.1,34.1h-14.3l12-34-15.1-.1a12.54,12.54,0,0,1,9.9-7.7h37.3m5.7-4h-43.6a16.53,16.53,0,0,0-13.1,10.3l-1.8,5.3h5.6l9.5.1-10.1,28.7-1.9,5.3h22.7l.9-2.7,11.1-31.4h15l.9-2.7,2.7-7.7,2.1-5.2Z"/></g></g>
</svg>
</div>
<div class="content-area">
<!-- Inhaltsbereich -->
</div>
<div class="footer">
<div class="adress">
<h3>Fachschaft Elektrotechnik</h3><br>
<p>Gußhausstraße 25-27<br>Room CD 01 09 (1st floor)<br>1040 Vienna</p>
</div>
<div class="contact">
<h3>Contact</h3><br>
<p>E-Mail: service@fet.at<br>Phone: +43-1-58801 49553<br></p>
</div>
<div class="servicecontainer">
<div class="servicetime">
<h3>Service times</h3><br>
<p style="text-align: right">Mon to Thur: 9am to 02pm<br>Fri: 9am to 12am<br>
<span id="time"></span>
</p>
</div>
<div class="servicestatus">
<!-- <svg class="servicestatusled">
<circle id="servicestatusled" cx="10" cy="15" r="10" style="fill: red" />
</svg> -->
</div>
</div>
</div>
<script>
var today = new Date();
today = today;
document.getElementById('time').innerHTML = today;
</script>
</body>
</html>

View File

@@ -0,0 +1,176 @@
#require 'rails_helper'
require 'spec_helper'
RSpec.describe NeuigkeitenController, :type => :controller do
let(:neuigkeit) {(FactoryGirl.create(:neuigkeit, :with_rubrik))}
let(:intern_neuigkeit) {(FactoryGirl.create(:neuigkeit,:with_intern_rubrik))}
let(:valid_session) {{}}
# setting up shared examples
let(:object_class) {Neuigkeit}
let(:object_variable) {:neuigkeit}
let(:assigned_object_variable){neuigkeit}
#let(:allow_fet_user) {allow(@controller).to receive(:current_user).and_return(fet_user)}
let(:object_url) {rubrik_neuigkeit_url(neuigkeit.rubrik,neuigkeit)}
describe "GET #show" do
let(:action) { get :show, {id: neuigkeit.id, rubrik_id: neuigkeit.rubrik.id}}
it_behaves_like "it is success"
it_behaves_like "it assigns object"
context "with internal news" do
let(:action) { get :show, {id: intern_neuigkeit.id, rubrik_id: intern_neuigkeit.rubrik.id}}
it_behaves_like "it is restricted"
context "with fet user" do
with_fet_user
it_behaves_like "it is success"
end
end
it "denys access to unpublished news" do
neuigkeit=FactoryGirl.create(:neuigkeit, :with_rubrik, :unpublished)
get :show, {id: neuigkeit.id}, valid_session
expect(response).to have_http_status(302)
end
context "with rendered views" do
render_views
before do
neuigkeit.rubrik
intern_neuigkeit
end
it "shows the name" do
action
expect(response.body).to match neuigkeit.name
end
it "has only links to external rubrik" do
get :show, {id: neuigkeit.id}, valid_session
expect(response.body).to match neuigkeit.rubrik.name
expect(response.body).not_to match intern_neuigkeit.rubrik.name
end
context "and fet user" do
with_fet_user
it "has all links to internal and external rubriken" do
action
expect(response.body).to match intern_neuigkeit.rubrik.name
expect(response.body).to match neuigkeit.rubrik.name
end
end
it "shows datum in response" do
action
expect(response.body).to match I18n.l(neuigkeit.datum.to_date)
end
end
end
describe "GET#edit" do
let(:action) { get :edit, {id: neuigkeit.id, rubrik_id: neuigkeit.rubrik.id}}
it_behaves_like "default edit action"
end
describe "GET #new" do
let(:action) { get :new, {rubrik_id: neuigkeit.rubrik.id}}
it_behaves_like "default new action"
end
describe "GET add_calentry" do
let(:action) { get :add_calentry, {id: neuigkeit.id, rubrik_id: neuigkeit.rubrik.id}}
it_behaves_like "it is restricted"
context "with fet user" do
with_fet_user
it_behaves_like "it is success"
it "renders edit template" do
expect(action).to render_template(:edit)
end
it "adds calentry to neuigkeit" do
action
expect(assigns(:neuigkeit).calentries).not_to be_empty
end
end
end
describe "GET unpublish" do
let(:action) {get :unpublish, {id: neuigkeit.id, rubrik_id: neuigkeit.rubrik.id}}
it_behaves_like "it is restricted"
context "with fet user" do
with_fet_user
it "redirects to neuigkeit" do
expect(action).to redirect_to(rubrik_neuigkeit_url(neuigkeit.rubrik,neuigkeit))
end
it "assignes unpublished neuigkeit" do
action
expect(assigns(:neuigkeit)).not_to be_published
end
end
end
describe "GET publish" do
let(:action) {get :publish, {id: neuigkeit.id, rubrik_id: neuigkeit.rubrik.id}}
it_behaves_like "it is restricted"
context "with fet user" do
with_fet_user
it "redirects to neuigkeit" do
expect(action).to redirect_to(rubrik_neuigkeit_url(neuigkeit.rubrik,neuigkeit))
end
it "assignes published neuigkeit" do
action
expect(assigns(:neuigkeit)).to be_published
end
end
end
describe "POST create" do
let(:action) {post :create, {rubrik_id: neuigkeit.rubrik.id, neuigkeit: FactoryGirl.attributes_for(:neuigkeit)}}
it_behaves_like "it is restricted"
context "with fet user" do
with_fet_user
it_behaves_like "it is success"
it "adds 1 Neuigkeit" do
expect{action}.to change { Neuigkeit.count}.by(1)
end
end
end
describe "PUT update" do
let(:action) {put :update, {id: neuigkeit.id, rubrik_id: neuigkeit.rubrik.id}}
it_behaves_like "it is a restricted action"
context "with fet user" do
with_fet_user
it_behaves_like "it assigns persisted object"
it "redirects to neuigkeit" do
expect(action).to redirect_to rubrik_neuigkeit_url(neuigkeit.rubrik, neuigkeit)
end
end
end
pending "destroy"
pending "load_toolbar_elements"
pending "publish_to_facebook"
pending "mail_to_fet"
pending "mail_preview"
pending "newsletter_preview"
pending "find_link"
pending "create_link"
pending "delete_link"
end

View File

@@ -0,0 +1,36 @@
shared_examples "public show action" do
end
shared_examples "it is a restricted action" do
it_behaves_like "it is restricted"
it_behaves_like "it assigns object"
context "with fet user" do
with_fet_user
it "redirects to object url" do
expect(action).to redirect_to(object_url)
end
end
end
shared_examples "default edit action" do
it_behaves_like "it is restricted"
it_behaves_like "it assigns object"
it_behaves_like "it assigns persisted object"
context "with fet user" do
with_fet_user
it_behaves_like "it is success"
end
end
shared_examples "default new action" do
include_examples "it assigns new object"
include_examples "it is restricted"
context "with fet user" do
with_fet_user
it_behaves_like "it is success"
it_behaves_like "it assigns new object"
end
end

View File

@@ -4,5 +4,6 @@ FactoryGirl.define do
factory :calendar do
name "MyString"
public false
association :rubrik, factory: :rubrik
end
end

View File

@@ -2,9 +2,12 @@
FactoryGirl.define do
factory :calentry do
start "2013-08-05 21:17:10"
start 1.hours.ago
ende "2013-08-05 21:17:10"
summary "MyString"
typ 1
association :calendar, factory: :calendar
end
end

View File

@@ -1,10 +1,23 @@
FactoryGirl.define do
factory :meeting do
name "MyString"
desc "MyText"
parent nil
intern false
meetingtyp nil
desc "MyText"
parent nil
intern false
meetingtyp nil
# association :calentry, factory: :calentry
after(:build) do |c|
c.calentry=FactoryGirl.build(:calentry, typ: 2)
end
trait :with_meetingtyp do
association :meetingtyp, factory: :meetingtyp
end
# trait :without_calentry do
# calentry nil
# end
end
end

View File

@@ -1,9 +1,10 @@
FactoryGirl.define do
factory :meetingtyp do
name "MyString"
desc "MyText"
agendaintern false
protocolintern false
desc "MyText"
agendaintern false
protocolintern false
association :rubrik, factory: :rubrik
end
end

View File

@@ -1,7 +1,29 @@
FactoryGirl.define do
sequence (:title) {|n| "Wichtige Neuigkeit #{n}"}
sequence (:text) {|n| "Wichtiger text #{n}"}
factory :neuigkeit do
title "WIChtige Neuigkeit"
text "<p> Das ist eine wichtige Information </p>"
title
text
datum 1.days.ago
association :author, factory: :user
trait :with_rubrik do
association :rubrik, factory: :rubrik, public: true
end
trait :with_intern_rubrik do
association :rubrik, factory: :rubrik, public: false, name: "InterneRubrik"
end
trait :with_meeting do
after(:build) do |n|
n.meeting=FactoryGirl.build(:meeting, :with_meetingtyp)
end
end
trait :unpublished do
datum nil
end
end
end

View File

@@ -2,5 +2,6 @@ FactoryGirl.define do
factory :rubrik do
name "Allgemeine"
desc "Allgemeine Test News"
end
public true
end
end

View File

@@ -0,0 +1,15 @@
FactoryGirl.define do
factory :semester do
nummer 2
factory :zero_semester do
nummer 0
end
factory :first_semester do
nummer 1
end
end
end

View File

@@ -10,7 +10,7 @@ FactoryGirl.define do
factory :other_studium do
name "Telecommunication"
desc "frueher Telekommungikation"
desc "frueher Telekommunikation"
zahl "066507"
typ "Master"
end

View File

@@ -1 +0,0 @@

View File

@@ -1,11 +1,19 @@
FactoryGirl.define do
sequence (:email) {|n| "testuser#{n}@fet.at"}
factory :user do
email "testuser@test.at"
email
password "password"
password_confirmation "password"
factory :other_user do
email "othertest@test.at"
end
trait :fetuser do
after(:create) do |user|
user.add_role("fetuser")
end
end
end
end

View File

@@ -2,4 +2,13 @@ require 'spec_helper'
describe Calendar do
pending "add some examples to (or delete) #{__FILE__}"
let(:rubrik) {FactoryGirl.create(:rubrik)}
let(:calendar) {FactoryGirl.build(:calendar, rubrik_id: rubrik.id)}
it "should be valid" do
expect(calendar).to be_valid
end
it "should be created" do
expect(calendar.save).to be true
end
end

View File

@@ -1,27 +1,35 @@
require 'spec_helper'
describe Gremium do
it "can be created" do
g=FactoryGirl.build(:gremium)
expect(g.save).to be true
end
it "is valid with all attributes" do
g = FactoryGirl.build(:gremium)
g.should be_valid
end
let(:gremium) {FactoryGirl.build(:gremium)}
let(:object_variable){gremium}
it_behaves_like "a valid object"
[:name,:typ].each do |attr|
it "should not be valid without #{attr}" do
g = FactoryGirl.build(:gremium)
g.send("#{attr}=".to_sym,nil)
it "is not valid without #{attr}" do
g = FactoryGirl.build(:gremium,attr.to_sym => nil)
expect(g).not_to be_valid
expect(g.errors[attr]).to have_at_least(1).items
end
end
it "is in tabs if typ is 1 or 3" do
pending "only accepts valid types"
pending "only accepts valid geschlecht"
it "is not valid with wrong typ" do
((-5..30).to_a-Gremium::TYPEN.keys()).each do |i|
g = FactoryGirl.build(:gremium, typ: i)
expect(g).not_to be_valid
end
end
it "is in tabs if typ is 1" do
g = FactoryGirl.create(:gremium, typ: 1)
expect(Gremium.tabs).to eq([g])
end
it "is not in tabs if typ is not 1 or 3" do
g = FactoryGirl.create(:gremium, typ: 2)
expect(Gremium.tabs).to eq([])

View File

@@ -3,9 +3,53 @@ require 'spec_helper'
describe Lva, :type=>:model do
pending "add some examples to (or delete) #{__FILE__}"
let_studium_lva
before(:each) do
@l = FactoryGirl.build(:lva)
it "should be valid" do
expect(lva).to be_valid
end
it "should respond to semesters" do
expect(lva.respond_to?(:semester)).to be true
end
it "should be give empty string for typ_n if typ is andere" do
lva.typ="andere"
expect(lva.typ_n).to eq("")
end
it "should have title as an alias for name" do
lva.name="sdfWER"
expect(lva.title).to eq("sdfWER")
end
it "should have a full name containing typ and name" do
lva.typ="VO"
expect(lva.full_name).to match "VO"
expect(lva.full_name).to match lva.name
end
it "should have a semester after fixing" do
expect(lva.semester).to be_empty
studium.semester << zerosemester
studium.save
expect(studium.semester).not_to be_empty
lva.add_semesters
expect(lva.semester).not_to be_empty
end
it "can create a valid tiss link" do
lva.lvanr="101.679"
tl=lva.tisslink
expect(tl).to match "101679"
expect(tl).to match "tiss.tuwien.ac.at"
end
it "should be able to load tissdata" do
lva.lvanr="101.679"
n=lva.name
expect(lva.name).to eq(n)
lva.load_tissdata
expect(lva.name).not_to eq(n)
end
describe "if bare" do
let(:lva) {FactoryGirl.build(:lva)}
it "should be created" do
@@ -19,9 +63,9 @@ describe Lva, :type=>:model do
expect(l.errors[:modul].size).to be(1)
end
end
it "should respond to semesters" do
expect(lva.respond_to?(:semester)).to be true
end
pending "should not be valid if it doesn't have a Semester for a studium"
pending "should not be valid without modul"
pending "should have beispiele"
pending "should be flagable"

View File

@@ -1,5 +1,159 @@
require 'spec_helper'
RSpec.describe Meeting, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
let(:user){FactoryGirl.create(:user)}
let(:rubrik) {FactoryGirl.create(:rubrik)}
let(:calendar){FactoryGirl.create(:calendar, rubrik_id: rubrik.id)}
let(:calentry){FactoryGirl.build(:calentry, calendar_id: calendar.id, typ: 2)}
let(:meetingtyp){FactoryGirl.create(:meetingtyp, rubrik_id: rubrik.id)}
let(:meeting){FactoryGirl.build(:meeting, meetingtyp_id: meetingtyp.id)}
let(:object_variable) {meeting}
it_behaves_like "a valid object"
it "should be created" do
meeting.calentry=calentry
expect(meeting).to be_valid
expect(meeting.save).to be true
end
it "should have a calendar" do
meeting.calentry=calentry
expect(meeting.calendar).not_to be_nil
end
it "should be able to create a calentry" do
meeting.create_calentry
meeting.calentry.start=1.hour.ago
meeting.calentry.dauer=7
expect(meeting).to be_valid
end
context "without calentry" do
# let(:meeting){FactoryGirl.build(:meeting, :without_calentry, meetingtyp_id: meetingtyp.id)}
it "should be creating a calentry typ 2" do
meeting.create_calentry
expect(meeting.calentry.typ).to be 2
end
end
it "should be having an alias title for text" do
expect(meeting.title).to eq(meeting.text)
end
it "should have a text that includes the name" do
expect(meeting.title).to match meeting.name
end
it " creates a neuigkeit that is valid" do
expect(meeting.neuigkeit).to be_nil
meeting.create_announcement(user)
expect(meeting.neuigkeit.class).to eq(Neuigkeit)
expect(meeting.neuigkeit).to be_valid
end
it "fixes calentry before validation" do
calentry.calendar=nil
meeting.calentry=calentry
meeting.valid?
expect(meeting.calentry.calendar).to be meeting.meetingtyp.rubrik.calendar
end
it "updates the announcement if there is one" do
meeting.calentry=calentry
expect(meeting.neuigkeit).to be_nil
meeting.create_announcement(user)
meeting.name="asdflkjhasdflkj"
meeting.save
meeting.update_announcement
expect(meeting.neuigkeit.title).to match meeting.name
end
it "doesn't create an announcement by changing the name" do
meeting.calentry=calentry
expect(meeting.neuigkeit).to be_nil
meeting.name="asdflkjhasdflkj"
meeting.save
expect(meeting.neuigkeit).to be_nil
end
it "can create a protocol" do
expect(meeting.protocol).to be_nil
meeting.create_protocol
expect(meeting.protocol).not_to be_nil
end
it "creates a protocol only once" do
meeting.create_protocol
p=meeting.protocol
meeting.protocol.text="TestTextTestTextForProtocol"
meeting.create_protocol
expect(meeting.protocol).to be p
expect(meeting.protocol.text).to match "TestTextTestTextForProtocol"
end
it "can create a calendar entry" do
expect(meeting.calentry).to be_nil
meeting.create_calentry
expect(meeting.calentry).not_to be_nil
end
it "can create an agenda" do
meeting.calentry=calentry
meeting.create_agenda
a=meeting.agenda
meeting.agenda.text="TestTextTestTextForProtocol"
meeting.create_agenda
expect(meeting.agenda).to be a
expect(meeting.agenda.text).to match "TestTextTestTextForProtocol"
end
it "can be created with date and typ" do
meeting2=Meeting.new_with_date_and_typ(nil, Date.today, meetingtyp)
expect(meeting2.calentry).not_to be_nil
expect(meeting2.meetingtyp).to be meetingtyp
end
it "gets empty text for nil protocol" do
expect(meeting.protocol_text).to eq("")
end
it "gets empty text for nil agenda" do
expect(meeting.agenda_text).to eq("")
end
it "can safly access protocol text" do
meeting.create_protocol
meeting.protocol.text="TestTextTest TextForProtocol"
expect(meeting.protocol_text).to eq("TestTextTest TextForProtocol")
end
it "can safly access agenda text" do
meeting.create_agenda
meeting.agenda.text="TestTextTest TextForProtocol"
expect(meeting.agenda_text).to eq("TestTextTest TextForProtocol")
end
it "is public by default" do
expect(meeting).to be_public
end
it "is not public if intern" do
meeting.intern=true
expect(meeting).not_to be_public
end
it "has a divid" do
meeting.calentry=calentry
meeting.save
expect(meeting.divid).to match "meeting"
expect(meeting.divid).to match meeting.id.to_s
end
it "can find start and end of a meeting by 'Beginn' und 'Ende'" do
meeting.calentry=calentry
calentry.start=2.hours.ago
meeting.create_protocol
meeting.protocol.text="Beginn: " + 1.hours.ago.to_s
meeting.update_time_from_protocol
expect(calentry.start).to be_within(1.minute).of 1.hours.ago
end
it "has a text even without meetingtyp" do
meeting.meetingtyp=nil
meeting.parent=nil
meeting.name="sdf"
expect(meeting.text).to match("sdf")
end
it "has an empty text without meetingtyp, parent, calentry or name" do
meeting.meetingtyp=nil
meeting.parent=nil
meeting.calentry=nil
meeting.name=""
expect(meeting.text).to eq("")
end
end

View File

@@ -2,4 +2,27 @@ require 'spec_helper'
RSpec.describe Meetingtyp, :type => :model do
pending "add some examples to (or delete) #{__FILE__}"
let(:rubrik) {FactoryGirl.create(:rubrik)}
let(:meetingtyp){FactoryGirl.build(:meetingtyp, rubrik_id: rubrik.id)}
it "should be created" do
expect(meetingtyp).to be_valid
expect(meetingtyp.save).to be true
end
it "should not be valid without rubrik" do
meetingtyp.rubrik=nil
expect(meetingtyp.rubrik).to be_nil
expect(meetingtyp).not_to be_valid
expect(meetingtyp.save).to be_falsey
end
it "should not be valid without a name" do
meetingtyp.name=nil
expect(meetingtyp).not_to be_valid
end
it "should return name for text" do
expect(meetingtyp.text).to be meetingtyp.name
end
end

View File

@@ -1,40 +1,71 @@
require 'spec_helper'
describe Neuigkeit do
let(:rubrik) {FactoryGirl.create(:rubrik)}
let(:user) {FactoryGirl.create(:user)}
let(:neuigkeit) {(FactoryGirl.build(:neuigkeit, rubrik_id: rubrik.id, author_id: user.id))}
let(:attachment) {FactoryGirl.build_stubbed(:attachment)}
[:title,:text, :rubrik, :author].each do |attr|
let(:neuigkeit) {(FactoryGirl.build(:neuigkeit, :with_rubrik))}
let(:intern_neuigkeit) {FactoryGirl.build(:neuigkeit, :with_intern_rubrik)}
let(:unpublished_neuigkeit){FactoryGirl.build(:neuigkeit, :unpublished,:with_rubrik)}
let(:attachment) {FactoryGirl.build_stubbed(:attachment)}
let(:calentry) {
FactoryGirl.build(:calentry, start: 1.hour.ago, ende: 5.minutes.ago)
}
let(:object_variable) {neuigkeit}
it_behaves_like "a valid object"
it "is published" do expect(neuigkeit).to be_published end
it "is public" do expect(neuigkeit).to be_public end
it "has no meeting" do expect(neuigkeit).not_to be_is_annoncement end
# it "failes" do expect(true).to be_falsey end
it "is published if datum is in the past" do
neuigkeit.datum=5.hours.ago
expect(neuigkeit).to be_published
end
it "is unpublished if datum is in the future" do
neuigkeit.datum=5.hours.from_now
expect(neuigkeit).not_to be_published
end
[ :rubrik, :author].each do |attr| # :title,:text to be discussed
it "should not be valid without #{attr}" do
neuigkeit.send("#{attr}=".to_sym,nil)
expect(neuigkeit).not_to be_valid
expect(neuigkeit.errors[attr]).to have_at_least(1).items
end
end
it "should be created" do
expect(neuigkeit).to be_valid
expect(neuigkeit.save).to be true
end
it "should be valid" do
fp = FactoryGirl.build(:neuigkeit, rubrik_id: rubrik.id, author_id: user.id)
expect(fp).to be_valid
context "with meeting" do
let(:neuigkeit) {(FactoryGirl.build(:neuigkeit, :with_rubrik, :with_meeting))}
let(:object_variable) {neuigkeit}
it_behaves_like "a valid object"
it "has meeting" do expect(neuigkeit.meeting).to be_truthy end
it "is annoncement" do expect(neuigkeit).to be_is_annoncement end
end
it "responds to attachments" do
expect(neuigkeit.respond_to?(:attachments)).to be true
end
it "uses titlepic attachments as picture" do
pending "uses titlepic attachments as picture" do # this test seems broken
expect(neuigkeit.respond_to?(:picture_robust)).to be true
attachment.flag_titlepic = true
expect { neuigkeit.attachments << attachment }.to change {neuigkeit.picture_robust}
end
it "is an event if it has a calentry" do
expect(neuigkeit.event?).to be false
expect{neuigkeit.calentries << calentry}.to change(neuigkeit, :event?)
expect(neuigkeit).not_to be_is_event
neuigkeit.calentries << calentry
expect(neuigkeit).to be_is_event
end
it "" do
end
pending "has questions"
pending "has nlinks"
pending "has calentries"

View File

@@ -2,5 +2,11 @@ require 'spec_helper'
describe Rubrik do
pending "add some examples to (or delete) #{__FILE__}"
let(:rubrik){FactoryGirl.create(:rubrik)}
it "should be valid" do
expect(rubrik).to be_valid
end
it "should be created" do
expect(rubrik.save).to be true
end
end

View File

@@ -0,0 +1,11 @@
shared_examples "a valid object" do
it "is valid" do
expect(object_variable).to be_valid
end
it "can be saved" do
expect(object_variable.save).to be_truthy
end
# it "failes" do
# expect(true).to be_falsey
# end
end

View File

@@ -2,29 +2,45 @@ require 'spec_helper'
describe Studium do
# test if it is invalid if certain attributes are missing
let(:studium) { FactoryGirl.build(:studium)}
let(:object_variable) {studium}
[:name, :zahl].each do |attr|
it "should not be valid without #{attr}" do
s = FactoryGirl.build(:studium, attr=>nil)
s.should_not be_valid
expect(s).not_to be_valid
end
end
it "should create studium with valid data" do
s=FactoryGirl.build(:studium)
lambda {
s.save!; Sunspot.commit}.should change {Studium.count()}.by(1)
end
it "should not accept double entrys" do
FactoryGirl.create(:studium)
Sunspot.commit
s=FactoryGirl.build(:studium)
s.should_not be_valid
s.should have_at_least(1).error_on(:name)
s.should have_at_least(1).error_on(:zahl)
end
it "should expect zahl to be 000.000" do
s=FactoryGirl.build(:studium, :zahl=>"000.000")
Sunspot.commit
s.should_not be_valid
it_behaves_like "a valid object"
it "should create studium with valid data" do
s=FactoryGirl.build(:studium)
lambda {
s.save!; Sunspot.commit}.should change {Studium.count()}.by(1)
end
it "should not accept double entrys" do
FactoryGirl.create(:studium)
expect(studium).not_to be_valid
expect(studium).to have_at_least(1).error_on(:name)
expect(studium).to have_at_least(1).error_on(:zahl)
end
it "expect zahl to be 000.000" do
s=FactoryGirl.build(:studium, :zahl=>"000.000")
#Sunspot.commit
s.should_not be_valid
expect(s.errors.size).to be > 0
end
end
it "is not valid with a short zahl" do
s=FactoryGirl.build(:studium, :zahl=>"123")
expect(s).not_to be_valid
end
it "has a alias title for name" do
expect(studium.title).to eq(studium.name)
end
end

View File

@@ -1,4 +1,6 @@
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'simplecov'
SimpleCov.start
ENV["RAILS_ENV"] ||= 'test'
require 'rbconfig'
@@ -14,6 +16,8 @@ require 'devise'
# in spec/support/ and its subdirectories.
Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
Dir[Rails.root.join("spec/models/shared_examples/**/*.rb")].each {|f| require f}
Dir[Rails.root.join("spec/models/shared_examples/*.rb")].each {|f| require f}
#require 'models/shared_examples/basic.rb'
Dir[Rails.root.join("spec/controllers/shared_examples/**/*.rb")].each {|f| require f}
RSpec.configure do |config|

View File

@@ -1,9 +1,31 @@
module ControllerMacros
# include Devise::TestHelpers, :type=>:controller
# include Devise::TestHelpers, :type=>:controller
def with_fet_user
let(:fet_user) {FactoryGirl.create(:other_user, :fetuser)}
before(:each) do
allow(@controller).to receive(:current_user).and_return(fet_user)
allow(@controller).to receive(:current_ability).and_return(Ability.new(fet_user))
end
end
def with_fet_admin
let(:fet_user)do
fet_user=FactoryGirl.create(:other_user)
fet_user.add_role("fetadmin")
fet_user
end
before(:each) do
allow(@controller).to receive(:current_user).and_return(fet_user)
allow(@controller).to receive(:current_ability).and_return(Ability.new(fet_user))
end
end
def login_fet_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryGirl.build(:user)
user = FactoryGirl.build(:other_user)
user = User.find_by_email(user.email) || user
user.save
user.add_role(:fetuser)
@@ -21,6 +43,7 @@ module ControllerMacros
sign_in user
end
end
def logout_user
before(:each) do
sign_out :user

View File

@@ -1,18 +1,21 @@
module ModelMacros
def let_studium_lva
let(:studium) {FactoryGirl.create(:studium)}
let(:modulgruppe){FactoryGirl.create(:modulgruppe,studium_id: studium.id)}
let(:modul) do
m=FactoryGirl.build(:other_modul);
m.modulgruppen << modulgruppe
m.save!
m
end
let(:lva) do
l=FactoryGirl.build(:lva)
l.modul << modul
l.save!
l
end
let(:studium) {FactoryGirl.create(:studium)}
let(:zerosemester) {FactoryGirl.create(:zero_semester,studium_id: studium.id)}
let(:firstsemester) {FactoryGirl.create(:first_semester)}
let(:modulgruppe){FactoryGirl.create(:modulgruppe,studium_id: studium.id)}
let(:modul) do
m=FactoryGirl.build(:other_modul)
m.modulgruppen << modulgruppe
m.save!
m
end
let(:lva) do
l=FactoryGirl.build(:lva)
l.modul << modul
l
end
end
end

View File

0
test1
View File