107 Commits

Author SHA1 Message Date
25743f8b9f error fixes 2014-06-12 13:04:20 +02:00
d24e127b90 mergeconflict Gemfilelock 2014-06-12 11:18:22 +02:00
1a48dddb62 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-06-12 11:16:40 +02:00
0526ea71f2 lvas ueberarbeitet 2014-06-11 00:55:46 +05:30
e3b6eebe1d fetprofile form fixed 2014-06-11 00:37:49 +05:30
91e04fdeb7 gremien for ueberarbeitet 2014-06-10 20:12:06 +05:30
67ccecaf51 #143
#143 fixed
themen fixed
2014-06-10 18:47:16 +05:30
6451c0f175 themen ueberarbeitet attachments verwalten 2014-06-09 23:14:05 +05:30
babbfb7d73 div kleinigkeiten(FAQ Link) 2014-06-04 23:16:25 +05:30
63e4bf8f29 Merge branch 'wiki' 2014-06-04 23:09:26 +05:30
e34aefd603 Profile +geschlecht 2014-06-04 18:59:18 +05:30
bd073e0835 Wiki integriert in HP 2014-06-03 18:23:14 +05:30
3aacb1642f geburtstag 2014-05-29 17:33:16 +05:30
adfec2446e themengruppeprivate 2014-05-27 19:42:05 +05:30
13514317c9 fetprofileprivate data 2014-05-27 19:41:35 +05:30
79c6454588 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-05-08 15:55:14 +02:00
Andreas Stephanides
015bf132a9 neuigkeiten rechte abfrage bei gremien 2014-05-08 15:53:46 +02:00
4e8ac08ddb Merge branch 'master' of https://github.com/fetsite/fetsite 2014-05-02 18:56:37 +02:00
Andreas Stephanides
667f5b680e attachments view 2014-05-02 18:55:38 +02:00
Andreas Stephanides
ad704aacd5 größerer Editor 2014-05-02 18:55:26 +02:00
Andreas Stephanides
c713a44884 Intern Bereich 2014-05-02 18:54:50 +02:00
a7f78aa5da Merge branch 'master' of https://github.com/fetsite/fetsite 2014-04-25 16:43:43 +02:00
Andreas Stephanides
ef62b73b2d gremium search fix 2014-04-25 16:43:13 +02:00
3fc4664687 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-04-24 10:56:03 +02:00
Andreas Stephanides
73a2627cd3 link Profile und Gremien an neuigkeit 2014-04-23 17:15:59 +02:00
749cf1532d Merge branch 'master' of https://github.com/fetsite/fetsite 2014-04-18 13:14:14 +02:00
Andreas Stephanides
63f3b09a5d load rubriken 2014-04-18 13:13:39 +02:00
811e6348b6 Merge branch 'master' of https://github.com/fetsite/fetsite 2014-04-18 13:04:30 +02:00
Andreas Stephanides
ae350f6d25 gremien filter fix + habils inzugefügt 2014-04-18 13:02:55 +02:00
124821515b Merge branch 'master' of https://github.com/fetsite/fetsite 2014-04-18 11:30:53 +02:00
Andreas Stephanides
b0448541b2 edit_lvas fix 2014-04-18 11:29:40 +02:00
Andreas Stephanides
a50a7c50f8 kontakt 2014-04-18 11:29:29 +02:00
Andreas Stephanides
4aafbd1831 fonts darkblue theme 2014-04-18 11:29:24 +02:00
Andreas Stephanides
78197f54b8 verschiedene Schriftarten css 2014-04-17 15:17:31 +02:00
Andreas Stephanides
65df35f6cc semester in lva edit 2014-04-17 15:14:51 +02:00
99b6f3968a Merge remote-tracking branch 'origin/master'
Conflicts:
	.gitignore
2014-04-13 15:55:25 +02:00
0cc90eb220 gitignore 2014-04-13 15:52:23 +02:00
48fcdc1d7e gemfile lock 2014-04-13 15:50:44 +02:00
Andreas Stephanides
b6e69925db webrick update 2014-04-12 18:03:48 +02:00
Andreas Stephanides
f96c3dee9a studium_edit_lvas added 2014-04-12 18:03:39 +02:00
Andreas Stephanides
7fff32bab1 getting started updated 2014-04-12 18:03:10 +02:00
Andreas Stephanides
079890b814 Merge remote-tracking branch 'thisisaname/master' 2014-04-12 12:29:30 +02:00
2a54145a52 back button studien 2014-04-11 14:58:15 +02:00
Sai
3b6a964ae6 add_favicon 2014-04-11 14:11:36 +02:00
5a4e6d5946 verdoppelung gelöscht
Verdoppelung in der Bildergalerie gelöst
2014-04-11 13:24:20 +02:00
Thomas Blazek
ae6125571f Deutsche flagge geändert 2014-04-11 13:10:37 +02:00
Andreas Stephanides
a64edc0d8d Merge branch 'master' of github.com:fetsite/fetsite 2014-04-11 13:04:27 +02:00
Andreas Stephanides
e56c1c3ce4 gemfile-lock ignore 2014-04-11 13:04:11 +02:00
Andreas Stephanides
40a34b44ca Merge branch 'master' of http://github.com/mleop/fetsite 2014-04-11 13:02:20 +02:00
Andreas Stephanides
e9be76d6e4 small fixes rubriken und themen 2014-04-11 13:02:00 +02:00
73bba9bc6f faqs oberfläche 2014-04-11 13:01:17 +02:00
68925c1463 Merge branch 'master' of http://github.com/fetsite/fetsite
gitignore conflikt behoben
2014-04-11 12:59:49 +02:00
Thomas Blazek
1ffbfe6306 Added en.png
For all locales, a flag by the same name should be present.
2014-04-11 12:52:54 +02:00
Sai
c226eb8613 added dropdown menu 2014-04-11 12:34:55 +02:00
838534887b gitignore 2014-04-11 12:07:20 +02:00
Sai
99492e9380 Merge branch 'master' of http://github.com/fetsite/fetsite 2014-04-11 11:54:49 +02:00
Andreas Stephanides
9b6907f4cb Merge branch 'master' of http://github.com/mleop/fetsite 2014-04-11 11:48:13 +02:00
4db3056e6a #96 fixed 2014-04-11 11:44:12 +02:00
Andreas Stephanides
a9cfc39bae lvas bei modulgruppen und studium hinzugefügt 2014-04-07 10:07:41 +02:00
Andreas Stephanides
8c284e6363 change precision 2014-04-06 23:07:07 +02:00
Andreas Stephanides
6159503dd9 habil & Modulgruppen name 2014-04-06 23:06:55 +02:00
Andreas Stephanides
d7de52ed38 infoansicht studien neuigkeiten added 2014-04-06 23:01:58 +02:00
Andreas Stephanides
58c46375a1 nlinks fetprofile added 2014-04-06 23:01:37 +02:00
Andreas Stephanides
4c9a3c8999 studium nlink added 2014-04-05 12:46:32 +02:00
Andreas Stephanides
b73f456f45 thema first words 2014-04-05 12:46:13 +02:00
Andreas Stephanides
8194defd35 desc and depend bulk update 2014-04-04 15:09:23 +02:00
Andreas Stephanides
87cad4b910 fix für bulk edit moduls 2014-04-04 14:50:48 +02:00
Andreas Stephanides
c3e1a23073 bulk modul edit 2014-04-04 14:13:47 +02:00
Andreas Stephanides
644f89a230 link fix 2014-04-02 15:46:08 +02:00
Andreas Stephanides
42312b6bc9 fix save modulgruppen 2014-04-02 15:32:30 +02:00
Andreas Stephanides
c0d30f3e38 neuigkeit first words fix 2014-04-02 14:31:42 +02:00
Andreas Stephanides
484776802a modul code clean up 2014-04-02 14:31:30 +02:00
Andreas Stephanides
b990510212 fix neuigkeiten model 2014-04-02 12:35:42 +02:00
Andreas Stephanides
447f2dae1b Merge branch 'master' of http://github.com/mleop/fetsite 2014-04-02 12:11:48 +02:00
Andreas Stephanides
b973e71ade einrückungen moduls 2014-04-02 12:11:00 +02:00
Andreas Stephanides
332b20f969 faq ability 2014-04-02 12:10:52 +02:00
Andreas Stephanides
71dc435d13 strip links for first words 2014-04-02 11:23:27 +02:00
Thomas Blazek
4ec176f310 Fixed desc field to, same problem 2014-04-01 10:35:54 +02:00
Thomas Blazek
35e0821f5a Merge branch 'master' of github.com:fetsite/fetsite 2014-04-01 10:28:29 +02:00
Thomas Blazek
5aedfa752e Fixed Bug when loading from tiss + typo in lvas_controller
The Bug would ALWAYS appear if Pruefungsinformation is empty at submission.
The Fix replaces the empty string with an dummy div-block.
This maybe has to be checked for all input fields.
2014-04-01 10:25:44 +02:00
4015ac71c8 ignore bak folder 2014-04-01 10:16:12 +02:00
771d101b9a welcome text 2014-03-31 21:27:19 +02:00
9dd2576701 Merge commit '0beda737a3e080f116ff8c3b053304b1fed51d9b' 2014-03-31 17:41:44 +02:00
0beda737a3 mysl bug 2014-03-31 17:10:55 +02:00
c8f6d0ddae mysql bug 2014-03-31 17:10:30 +02:00
e7b43ab025 datentyp fix 2014-03-31 16:20:36 +02:00
Andreas Stephanides
d9cfe567f7 routes für neugikeiten fixed 2014-03-31 13:19:40 +02:00
Andreas Stephanides
16799c57b6 calender icon awesome font 2014-03-31 13:19:31 +02:00
Andreas Stephanides
b36c8ddb7c modul form fixed 2014-03-31 13:19:11 +02:00
Andreas Stephanides
3afa8aa7f1 lvacontroller toolbar ausgelagert 2014-03-31 13:19:00 +02:00
Andreas Stephanides
fcdbb2248a Rechte für alle zum Beispielupload 2014-03-30 20:41:22 +02:00
Andreas Stephanides
69b5ebdaec LVA template update 2014-03-30 20:41:12 +02:00
Andreas Stephanides
46f5f713ce thema validations 2014-03-30 20:09:53 +02:00
Andreas Stephanides
1bf0940862 ability show thema 2014-03-30 20:09:40 +02:00
Andreas Stephanides
2c0f3ff0b8 THEMA TESTS 2014-03-30 20:09:02 +02:00
Andreas Stephanides
341f6db268 themengruppen show small fix 2014-03-29 14:06:44 +01:00
Andreas Stephanides
ddb230604c small fixes
removed beispiel show action
beautified search url
anchors for faqs fixed
2014-03-29 14:05:33 +01:00
Andreas Stephanides
5134e25b81 FIXED themengruppe verwalten + faqs order 2014-03-29 13:10:41 +01:00
Andreas Stephanides
7f9b0b996e nice Gremium - Themen Links 2014-03-29 12:53:49 +01:00
Andreas Stephanides
f533adc956 gemfilelock 2014-03-29 12:43:51 +01:00
Andreas Stephanides
5a083cf30a awesome font icons added 2014-03-29 12:43:37 +01:00
Andreas Stephanides
95370d4ae8 verwalten template 2014-03-29 12:43:24 +01:00
Andreas Stephanides
07f53c59bc thema verwalten added 2014-03-29 12:43:08 +01:00
Andreas Stephanides
a8401391a6 Neuigkeiten Link
Querverweise für Neuigkeiten
2014-03-29 11:30:46 +01:00
34f296e6c3 gl 2014-03-28 14:10:49 +01:00
Andreas Stephanides
1d2d3e791b Qualifikation #129
#129 closed
2014-03-25 19:41:48 +01:00
Sai
784319bb61 Typos 2014-03-12 14:56:35 +01:00
159 changed files with 2257 additions and 602 deletions

4
.gitignore vendored
View File

@@ -29,4 +29,8 @@ Gemfile.lock
console
/server
/public/uploads/
/vendor/*
/bak/*
*#
Gemfile.lock
/config/database.yml

10
Gemfile
View File

@@ -2,6 +2,7 @@ source 'https://rubygems.org'
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'
@@ -33,7 +34,7 @@ gem 'jquery-rails'
# Use unicorn as the app server
# gem 'unicorn'
# Deploy with Capistrano
# Deploy with Capistran
# gem 'capistrano'
# To use debugger
@@ -71,8 +72,9 @@ gem 'paperclip' ,'~>3.4.0'
gem 'git'
gem 'haml'
#gem 'RedCloth'
#gem 'gollum'
gem 'RedCloth'
gem 'wikicloth'
gem 'gollum-lib'
gem 'awesome_nested_set'
gem 'annotate', ">=2.5.0"
gem 'carrierwave', "~>0.9.0"
@@ -87,7 +89,7 @@ gem 'rmagick'
gem 'bootstrap-addons-rails'
gem "jquery-fileupload-rails"
gem "jquery-ui-rails","~> 4.1.1"
gem "font-awesome-rails"
# gem "jquery-sortable-rails"
gem "seed_dump", "~> 0.5.3"
#gem "themes_for_rails" ,:git =>'git://github.com/tkriplean/themes_for_rails.git'

View File

@@ -9,6 +9,7 @@ GIT
GEM
remote: https://rubygems.org/
specs:
RedCloth (4.2.9)
actionmailer (3.2.13)
actionpack (= 3.2.13)
mail (~> 2.5.3)
@@ -53,6 +54,7 @@ GEM
activemodel (>= 3.2.0)
activesupport (>= 3.2.0)
json (>= 1.7)
charlock_holmes (0.6.9.4)
climate_control (0.0.3)
activesupport (>= 3.0)
cocaine (0.5.3)
@@ -73,6 +75,7 @@ GEM
erubis (2.7.0)
execjs (1.4.0)
multi_json (~> 1.0)
expression_parser (0.9.0)
factory_girl (4.3.0)
activesupport (>= 3.0.0)
factory_girl_rails (4.3.0)
@@ -80,17 +83,32 @@ GEM
railties (>= 3.0.0)
faraday (0.8.8)
multipart-post (~> 1.2.0)
font-awesome-rails (4.0.3.1)
railties (>= 3.2, < 5.0)
formtastic (2.2.1)
actionpack (>= 3.0)
formtastic-bootstrap (2.1.3)
formtastic (~> 2.2)
git (1.2.6)
github-markup (0.7.5)
gitlab-grit (2.6.0)
charlock_holmes (~> 0.6.9)
diff-lcs (~> 1.1)
mime-types (~> 1.15)
posix-spawn (~> 0.3.6)
globalize (3.0.4)
activemodel (>= 3.0.0, < 4.0.0)
activerecord (>= 3.0.0, < 4.0.0)
globalize-versioning (0.1.0.alpha.1)
globalize (>= 3, < 5)
paper_trail (~> 3.0.0)
gollum-lib (2.0.0)
github-markup (>= 0.7.5, < 1.0.0)
gitlab-grit (= 2.6.0)
nokogiri (~> 1.6.0)
rouge (~> 1.3.1)
sanitize (~> 2.0.6)
stringex (~> 2.1.0)
haml (4.0.5)
tilt
hashie (2.0.5)
@@ -148,6 +166,7 @@ GEM
cocaine (~> 0.5.0)
mime-types
polyglot (0.3.3)
posix-spawn (0.3.8)
pyu-ruby-sasl (0.0.3.3)
rack (1.4.5)
rack-cache (1.2)
@@ -175,8 +194,10 @@ GEM
rdoc (3.12.2)
json (~> 1.4)
ref (1.0.5)
rinku (1.7.3)
rmagick (2.13.2)
rolify (3.2.0)
rouge (1.3.4)
rspec-core (2.14.7)
rspec-expectations (2.14.4)
diff-lcs (>= 1.1.3, < 2.0)
@@ -206,6 +227,7 @@ GEM
rack (~> 1.0)
tilt (~> 1.1, != 1.3.0)
sqlite3 (1.3.8)
stringex (2.1.2)
themes_for_rails (0.5.1)
rails (>= 3.0.0)
therubyracer (0.12.0)
@@ -224,11 +246,17 @@ GEM
json (>= 1.8.0)
warden (1.2.3)
rack (>= 1.0)
webrick (1.3.1)
<<<<<<< Updated upstream
wikicloth (0.8.1)
builder
expression_parser
rinku
PLATFORMS
ruby
DEPENDENCIES
RedCloth
annotate (>= 2.5.0)
awesome_nested_set
bootstrap-addons-rails
@@ -239,11 +267,13 @@ DEPENDENCIES
devise (~> 2.2.3)
execjs (~> 1.4.0)
factory_girl_rails
font-awesome-rails
formtastic (~> 2.2.1)
formtastic-bootstrap (~> 2.1.3)
git
globalize (~> 3.0.4)
globalize-versioning
gollum-lib
haml
jquery-fileupload-rails
jquery-rails
@@ -268,3 +298,5 @@ DEPENDENCIES
therubyracer
tinymce-rails (~> 3.5.8)
uglifier (>= 1.0.3)
webrick (= 1.3.1)
wikicloth

Binary file not shown.

BIN
app/assets/fonts/cmunrm.eot Normal file

Binary file not shown.

204
app/assets/fonts/cmunrm.svg Normal file
View File

@@ -0,0 +1,204 @@
<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" > <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<defs >
<font id="cmunrm" horiz-adv-x="441" ><font-face
font-family="CMU Serif"
units-per-em="1000"
panose-1="2 0 6 3 0 0 0 0 0 0"
ascent="935"
descent="-250"
alphabetic="0" />
<missing-glyph horiz-adv-x="760" d="M10 10V765H750V10H10ZM70 112L346 388L70 663V112ZM105 70H655L380 346L105 70ZM105 705L380 429L655 705H105ZM414 388L690 112V663L414 388Z" />
<glyph unicode=" " glyph-name="space" horiz-adv-x="333" />
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="278" d="M85 53Q85 76 101 91T138 106T174 91T190 53Q190 31 174 16T138 1Q115 1 100 16T85 53ZM85 664Q85 688 101 702T138 716T175 702T191 664Q191 662 191 659T190 653L152 211Q150 188 137 188Q126 188
124 215L86 650Q86 652 86 657T85 664Z" />
<glyph unicode="&quot;" glyph-name="quotedbl" horiz-adv-x="500" d="M119 664Q119 689 134 699T165 710Q182 710 197 700T212 664Q212 659 204 583T186 428T177 347H154Q151 378 142 456T126 596T119 664ZM287 663Q287 686 300 698T333 710Q349 710 364 700T379
664Q379 659 372 597T356 457T344 347H322Q320 362 304 508T287 663Z" />
<glyph unicode="#" glyph-name="numbersign" horiz-adv-x="833" d="M57 153Q57 164 83 164H261L308 336H80Q57 336 57 347Q57 359 87 359H315L396 655Q396 656 398 664T401 674T405 682T410 690T416 692Q425 692 425 680Q425 674 419 650L339 359H554L635 655Q636
657 637 664T640 674T643 682T648 689T654 692Q664 692 664 680Q664 678 657 650L577 359H750Q775 359 775 347Q774 336 749 336H570L524 164H751Q775 164 775 153Q775 141 751 141H517L435 -155Q435 -157 433 -164T430 -174T427 -183T422 -190T416 -192Q407 -192
407 -180Q407 -174 413 -150L493 141H278L197 -155Q197 -157 195 -164T192 -174T189 -183T184 -190T178 -192Q168 -192 168 -180Q168 -178 175 -150L255 141H82Q57 141 57 153ZM285 164H500L547 336H332L285 164Z" />
<glyph unicode="$" glyph-name="dollar" horiz-adv-x="500" d="M55 177Q55 204 69 216T101 228Q119 228 133 216T147 183Q147 164 135 151T102 137Q97 137 85 139Q113 31 234 20V319Q233 319 223 321T207 325T189 331T168 339T147 350T124 366T104 386T84 412Q55
458 55 513Q55 587 104 641T234 705V750H265V705Q308 702 341 688T393 655T423 612T439 569T443 530Q443 502 429 491T398 480Q379 480 366 492T352 525Q352 544 364 557T397 571Q403 571 413 569Q383 663 265 674V403Q266 403 276 401T291 397T307 392T326 384T345
375T366 361T385 344T404 322T420 295Q444 248 444 195Q444 116 394 57T265 -10V-55H234V-10Q180 -6 142 15T87 67T62 124T55 177ZM107 543Q107 500 132 469T191 423Q199 419 216 415T234 411V673Q179 667 143 630T107 543ZM265 21Q324 29 358 71T392 165Q392 210
368 246T307 298Q301 301 265 311V21Z" />
<glyph unicode="%" glyph-name="percent" horiz-adv-x="833" d="M56 549Q56 635 100 692T203 750Q239 750 275 718Q356 641 462 641Q582 641 652 736Q664 750 673 750Q681 750 687 744T693 730Q693 724 685 712L179 -41Q168 -56 159 -56Q151 -56 145 -50T139 -36Q139
-29 148 -16L597 653L596 654Q544 619 463 619Q386 619 312 661Q333 609 333 548Q333 464 296 406T203 347Q144 347 100 404T56 549ZM118 595T118 548T125 466T142 413T165 385T187 372T204 369Q245 369 276 420T308 549Q308 625 277 676T204 728Q195 728 187 726T165
713T142 684T125 631ZM499 146Q499 232 543 289T646 347Q700 347 738 289T776 145Q776 61 739 3T646 -56Q587 -56 543 1T499 146ZM561 192T561 145T568 63T585 10T608 -18T630 -31T647 -34Q688 -34 719 17T751 146Q751 222 720 273T647 325Q638 325 630 323T608
310T585 281T568 228Z" />
<glyph unicode="&amp;" glyph-name="ampersand" horiz-adv-x="777" d="M42 128Q42 165 57 189T113 255L204 352Q163 456 163 555Q163 629 205 672T299 716Q324 716 342 703T369 668T382 627T386 587Q386 556 364 517T322 452T264 385Q292 312 347 231T430 118Q494
197 573 336Q579 354 579 356Q579 375 561 387T508 400V431Q548 428 630 428Q672 428 727 431V400Q694 400 672 394T633 372T606 343T578 298Q493 152 446 98Q521 9 584 9Q624 9 659 38T696 121H721Q720 58 679 18T580 -22Q491 -22 404 54Q319 -22 223 -22Q148
-22 95 21T42 128ZM125 160Q125 128 133 96T167 37T231 9Q313 9 385 73Q346 112 293 190Q247 256 213 329Q165 283 145 249T125 160ZM226 578Q226 498 256 409Q361 523 361 588Q361 593 361 600T357 626T349 657T331 682T301 694Q271 694 249 665T226 578Z" />
<glyph unicode="&apos;" glyph-name="quotesingle" horiz-adv-x="278" d="M92 664Q92 689 107 699T138 710Q158 710 171 698T184 664Q184 654 183 649L150 347H127L93 649Q92 654 92 664Z" />
<glyph unicode="(" glyph-name="parenleft" horiz-adv-x="388" d="M99 250Q99 419 162 555Q189 612 226 660T289 729T321 750Q331 750 331 740Q331 735 318 723Q157 559 157 250Q157 -60 314 -218Q331 -235 331 -240Q331 -250 321 -250Q314 -250 290 -230T229
-164T165 -62Q99 74 99 250Z" />
<glyph unicode=")" glyph-name="parenright" horiz-adv-x="388" d="M57 -240Q57 -235 70 -223Q231 -59 231 250Q231 560 76 717Q57 735 57 740Q57 750 67 750Q74 750 98 730T159 664T223 562Q289 426 289 250Q289 81 226 -55Q199 -112 162 -160T99 -229T67 -250Q57
-250 57 -240Z" />
<glyph unicode="*" glyph-name="asterisk" horiz-adv-x="500" d="M65 441Q65 458 88 469L227 535L86 601Q65 611 65 628Q65 638 73 647T92 656Q100 656 114 645L238 555Q223 720 223 725Q223 735 230 742T250 750Q260 750 268 743T276 725L261 555L372 637Q398
656 407 656Q418 656 426 647T434 628Q434 611 411 600L272 534L413 468Q434 458 434 441Q434 431 426 422T407 413Q401 413 391 419Q389 420 368 435T315 475T261 514Q276 349 276 344Q276 334 269 327T249 319Q239 319 231 326T223 344L238 514L98 413Q83 413
75 420T66 432T65 441Z" />
<glyph unicode="+" glyph-name="plus" horiz-adv-x="778" d="M57 238T57 250T81 262Q84 262 89 262T95 261H377V544Q377 545 377 549T376 557Q376 581 388 581T400 557V261H682Q683 261 688 261T696 262Q719 262 719 250T695 238Q692 238 688 238T682 239H400V-58Q400
-81 388 -81T376 -57Q376 -54 376 -50T377 -44V239H95Q94 239 89 239T80 238Q57 238 57 250Z" />
<glyph unicode="," glyph-name="comma" horiz-adv-x="277" d="M86 32T86 53T100 90T139 106Q169 106 186 78T203 1Q203 -51 182 -99T141 -170T112 -193Q102 -193 102 -182Q102 -178 109 -171Q181 -94 181 1Q181 16 179 16L177 14Q160 0 139 0Q114 0 100 16Z" />
<glyph unicode="-" glyph-name="hyphen" horiz-adv-x="333" d="M10 186V245H276V186H10Z" />
<glyph unicode="." glyph-name="period" horiz-adv-x="278" d="M85 32T85 53T100 89T138 105Q160 105 175 91T190 53T174 15T138 0Q115 0 100 16Z" />
<glyph unicode="/" glyph-name="slash" horiz-adv-x="500" d="M57 -236Q57 -231 61 -220L414 723Q414 724 416 729T420 738T425 745T432 748Q442 748 442 736Q442 735 439 723L85 -221Q79 -238 76 -243T66 -248Q57 -248 57 -236Z" />
<glyph unicode="0" glyph-name="zero" horiz-adv-x="500" d="M39 320Q39 467 76 547Q128 666 250 666Q276 666 303 659T364 625T420 554Q460 469 460 320Q460 174 423 94Q369 -22 249 -22Q204 -22 159 1T84 79Q39 162 39 320ZM122 332Q122 181 133 121Q145 56
178 28T249 0Q289 0 322 30T366 125Q377 189 377 332Q377 471 367 527Q354 592 319 618T249 644Q236 644 222 640T188 625T153 586T130 516Q122 462 122 332Z" />
<glyph unicode="1" glyph-name="one" horiz-adv-x="500" d="M89 571V602Q209 602 271 666Q288 666 291 662T294 640V79Q294 49 308 40T387 31H419V0Q384 3 257 3T95 0V31H127Q190 31 205 40T220 79V597Q168 571 89 571Z" />
<glyph unicode="2" glyph-name="two" horiz-adv-x="500" d="M50 0Q50 18 51 23T61 37L253 251Q358 369 358 472Q358 539 323 587T224 635Q180 635 143 608T89 533Q92 534 102 534Q127 534 141 519T155 482Q155 455 138 442T103 429Q96 429 87 430T64 446T50 485Q50
555 103 610T237 666Q329 666 389 612T449 472Q449 442 440 415T419 367T375 313T317 255T233 180L127 77H307Q395 77 402 85Q412 99 424 174H449L421 0H50Z" />
<glyph unicode="3" glyph-name="three" horiz-adv-x="500" d="M42 135Q42 165 59 179T98 193Q121 193 137 178T154 137Q154 109 135 94T88 82Q112 42 156 24T241 6Q284 6 319 43T354 171Q354 248 324 292T235 337H191Q176 337 172 338T167 348Q167 358 182 360Q197
360 221 363Q279 365 310 415Q338 462 338 529Q338 590 309 615T242 641Q207 641 169 627T109 579Q171 579 171 529Q171 507 157 493T120 478Q98 478 84 492T69 530Q69 587 120 626T246 666Q320 666 375 627T430 528Q430 469 391 421T290 352Q366 337 411 286T457
171Q457 93 396 36T244 -22Q161 -22 102 23T42 135Z" />
<glyph unicode="4" glyph-name="four" horiz-adv-x="500" d="M28 165V196L335 665Q343 677 355 677Q366 677 368 673T371 651V196H471V165H371V78Q371 49 383 40T447 31H468V0Q427 3 332 3Q238 3 197 0V31H218Q270 31 282 40T294 78V165H28ZM56 196H300V569L56 196Z" />
<glyph unicode="5" glyph-name="five" horiz-adv-x="500" d="M50 161Q50 191 66 202T99 214Q122 214 135 200T149 165T136 131T99 116Q88 116 82 118Q95 72 135 39T229 6Q296 6 336 71Q360 113 360 208Q360 292 342 334Q314 398 257 398Q176 398 128 328Q122 319
115 319Q105 319 103 324T101 345V641Q101 665 111 665Q115 665 123 662Q186 634 256 634Q328 634 392 663Q397 666 400 666Q410 666 410 655Q410 651 402 640T377 613T338 584T284 561T217 551Q175 551 132 564V369Q184 420 259 420Q339 420 394 356T449 201Q449
107 384 43T231 -22Q151 -22 101 35T50 161Z" />
<glyph unicode="6" glyph-name="six" horiz-adv-x="500" d="M42 316Q42 473 122 569T305 666Q365 666 398 636T432 558Q432 532 417 521T386 510Q368 510 354 522T340 556Q340 601 395 601Q369 641 307 641Q288 641 269 636T224 612T179 564T146 479T132 352V328Q173
427 257 427T399 363T457 204Q457 107 397 43T251 -22Q213 -22 179 -6T112 46T61 151T42 316ZM134 226Q134 128 152 81Q155 73 161 63T179 38T210 15T251 6Q318 6 350 71Q367 107 367 205Q367 305 349 342Q318 404 256 404Q214 404 185 375T145 308T134 226Z" />
<glyph unicode="7" glyph-name="seven" horiz-adv-x="500" d="M56 470L89 676H114Q117 664 122 659T155 649T242 644H485Q485 621 476 609L341 419Q298 359 279 248Q268 174 268 84V33Q268 -22 222 -22T176 33Q176 224 299 409Q312 428 360 496T411 567H204Q113
567 106 561Q96 552 81 470H56Z" />
<glyph unicode="8" glyph-name="eight" horiz-adv-x="500" d="M42 151Q42 263 186 335Q124 377 113 389Q69 438 69 499Q69 569 122 617T250 666Q322 666 376 625T430 517Q430 424 309 362Q389 312 408 291Q457 237 457 168Q457 88 396 33T249 -22Q166 -22 104
26T42 151ZM92 151Q92 89 138 48T250 6Q313 6 360 42T407 132Q407 153 400 171T379 203T357 224T332 242L209 320Q92 255 92 151ZM113 538Q113 490 163 457L287 377Q386 435 386 517Q386 570 346 605T249 641Q194 641 154 612T113 538Z" />
<glyph unicode="9" glyph-name="nine" horiz-adv-x="500" d="M42 441Q42 494 57 530T106 603Q166 666 253 666Q290 666 323 651T387 600T438 495T457 329Q457 174 382 76T206 -22Q142 -22 105 7T67 86Q67 112 81 123T113 134Q131 134 145 122T159 88Q159 70 148
56T107 42Q136 6 205 6Q230 6 255 17T307 57T350 144T367 286V318Q327 218 242 218Q158 218 100 282T42 441ZM132 440Q132 341 150 304Q181 241 243 241Q304 241 334 295T365 421Q365 519 349 562Q319 641 253 641T153 578Q132 541 132 440Z" />
<glyph unicode=":" glyph-name="colon" horiz-adv-x="277" d="M86 356T86 378T101 415T139 431T176 416T192 378T177 341T139 325T102 340ZM86 31T86 53T101 90T139 106T176 91T192 53T177 16T139 0T102 15Z" />
<glyph unicode=";" glyph-name="semicolon" horiz-adv-x="278" d="M85 357T85 378T100 414T138 430Q160 430 175 416T190 378T174 340T138 325Q115 325 100 341ZM86 32T86 53T100 90T139 106Q169 106 186 78T203 1Q203 -51 182 -99T141 -170T112 -193Q102 -193
102 -182Q102 -178 109 -171Q181 -94 181 1Q181 16 179 16L177 14Q160 0 139 0Q114 0 100 16Z" />
<glyph unicode="&lt;" glyph-name="less" horiz-adv-x="778" d="M85 250Q85 258 101 266L656 519Q676 529 681 529Q691 529 691 519Q691 511 668 500L180 276Q150 262 122 250Q150 238 180 224L668 0Q691 -10 691 -19Q691 -29 681 -29Q676 -29 656 -19L101 234Q86
240 85 250Z" />
<glyph unicode="=" glyph-name="equal" horiz-adv-x="778" d="M57 152Q58 164 77 164H690Q719 164 719 153Q719 141 692 141H84Q57 141 57 152ZM57 347Q57 359 78 359H689Q719 359 719 347Q719 336 694 336H77Q57 336 57 347Z" />
<glyph unicode="&gt;" glyph-name="greater" horiz-adv-x="778" d="M85 -19Q85 -13 89 -10T109 0L597 224Q635 242 655 250Q635 258 597 276L109 500Q107 501 103 503T96 506T91 510T87 514T85 519Q85 529 96 529Q101 529 121 519L676 266Q677 266 679 265T684
262T688 259T691 255T692 250Q691 241 663 228L121 -19Q101 -29 96 -29Q85 -29 85 -19Z" />
<glyph unicode="?" glyph-name="question" horiz-adv-x="472" d="M56 572Q56 624 102 664T226 705Q327 705 371 664T415 570Q415 508 367 472Q235 374 235 249V214Q235 203 235 199T231 191T222 187Q214 187 212 191T210 211V256Q210 309 231 370T298 481Q309
492 315 500T326 528T332 576Q332 593 332 603T325 630T309 657T276 675T223 683Q132 683 92 615Q148 615 148 570Q148 550 136 537T102 524Q83 524 70 536T56 572ZM169 31T169 53T184 90T222 106T259 91T275 53T260 16T222 0T185 15Z" />
<glyph unicode="@" glyph-name="at" horiz-adv-x="777" d="M56 347Q56 496 153 600T389 705Q450 705 509 680T615 610T692 494T721 338Q721 293 717 260T703 194T672 145T619 128Q586 128 556 145T519 199Q468 128 387 128Q308 128 249 191T189 347T248 502T387
566Q468 566 524 489Q531 481 547 481H564Q581 481 584 478T588 457V216Q588 150 623 150Q647 150 662 164T684 207T693 264T696 332Q696 418 668 487T593 598T494 661T388 683Q263 683 172 586T81 347Q81 210 170 111T393 11Q529 11 665 75Q670 78 688 78H697Q707
78 710 78T717 75T720 68Q720 58 664 39T574 11Q480 -11 394 -11Q248 -11 152 95T56 347ZM258 430T258 347T297 207T390 150Q457 150 505 219Q519 240 519 262V432Q519 453 506 472Q460 544 390 544Q335 544 297 487Z" />
<glyph unicode="A" glyph-name="A" horiz-adv-x="750" d="M32 0V31Q121 33 144 98L351 696Q355 708 359 712T375 716Q381 716 384 715T390 711T394 705T398 696L614 71Q622 46 638 39T699 31H717V0Q654 3 586 3Q478 3 442 0V31Q525 31 525 61Q525 63 522 75L469
228H222L176 97Q174 93 174 82Q174 61 193 46T249 31V0Q153 3 134 3Q101 3 32 0ZM233 259H458L345 584L233 259Z" />
<glyph unicode="B" glyph-name="B" horiz-adv-x="708" d="M36 0V31H60Q114 31 126 40T139 78V605Q139 634 127 643T60 652H36V683H402Q497 683 560 632T624 514Q624 459 578 415T458 357Q541 348 596 298T651 183Q651 110 588 55T428 0H36ZM222 71Q222 45 229
38T271 31H396Q468 31 509 78T551 184T515 293T410 344H222V71ZM222 366H367Q444 366 485 412T527 514Q527 563 494 607T395 652H271Q237 652 230 645T222 612V366Z" />
<glyph unicode="C" glyph-name="C" horiz-adv-x="722" d="M56 342Q56 493 159 599T404 705Q448 705 487 689T544 659T588 619L638 693Q646 705 654 705T663 701T665 681V444Q665 428 663 424T649 420Q639 420 637 423T633 437Q618 545 558 609T415 674Q391 674
365 669T300 643T232 588T181 490T159 341Q159 257 180 193T231 95T299 41T365 15T416 9Q502 9 568 70T640 234Q641 239 641 241T642 245T645 249T652 250Q665 250 665 233Q665 138 592 58T404 -22Q262 -22 159 83T56 342Z" />
<glyph unicode="D" glyph-name="D" horiz-adv-x="763" d="M35 0V31H59Q113 31 125 40T138 78V605Q138 634 126 643T59 652H35V683H401Q529 683 618 581T707 336Q707 196 618 98T401 0H35ZM224 71Q224 45 231 38T273 31H374Q440 31 484 58T552 116Q607 191 607
336Q607 488 555 559Q488 652 373 652H273Q239 652 232 645T224 612V71Z" />
<glyph unicode="E" glyph-name="E" horiz-adv-x="680" d="M33 0V31H57Q111 31 123 40T136 78V602Q136 631 124 640T57 649H33V680H596L624 455H599Q592 512 583 545T553 603T496 639T403 649H274Q240 649 233 642T225 609V369H315Q384 369 403 393T423 486H448V221H423Q423
289 404 313T315 338H225V71Q225 45 232 38T274 31H407Q450 31 481 36T535 56T572 86T597 131T614 187T627 258H652L610 0H33Z" />
<glyph unicode="F" glyph-name="F" horiz-adv-x="652" d="M33 0V31H57Q111 31 123 40T136 78V602Q136 631 124 640T57 649H33V680H582L610 455H585Q578 512 569 544T540 603T485 639T394 649H274Q240 649 233 642T225 609V356H311Q379 356 398 380T417 473H442V208H417Q417
277 398 301T311 325H225V79Q225 58 228 50T253 37T320 31H353V0Q317 3 185 3Q68 3 33 0Z" />
<glyph unicode="G" glyph-name="G" horiz-adv-x="784" d="M56 190T56 342T159 599T404 705Q439 705 469 697T523 673T559 647T589 619L639 693Q647 705 655 705T664 701T666 681V444Q666 428 664 424T650 420Q640 420 638 423T634 437Q619 545 559 609T416 674Q392
674 366 669T300 643T232 589T181 491T159 342Q159 258 180 194T232 96T301 41T369 15T422 9Q439 9 459 12T509 27T558 64T577 130V194Q577 224 563 233T484 242H452V273Q488 270 613 270Q624 270 735 273V242Q687 242 677 235T666 198V24Q666 1 657 1Q649 1 626
23T593 63Q569 21 517 0T406 -22Q262 -22 159 84Z" />
<glyph unicode="H" glyph-name="H" horiz-adv-x="750" d="M33 0V31H57Q111 31 123 40T136 78V605Q136 634 124 643T57 652H33V683Q68 680 181 680Q293 680 328 683V652H304Q250 652 238 643T225 605V371H524V605Q524 634 512 643T445 652H421V683Q456 680 569
680Q681 680 716 683V652H692Q638 652 626 643T613 605V78Q613 49 625 40T692 31H716V0Q681 3 568 3Q456 3 421 0V31H445Q499 31 511 40T524 78V340H225V78Q225 49 237 40T304 31H328V0Q293 3 180 3Q68 3 33 0Z" />
<glyph unicode="I" glyph-name="I" horiz-adv-x="361" d="M28 0V31H54Q110 31 123 40T136 78V605Q136 634 123 643T54 652H28V683Q63 680 181 680Q298 680 333 683V652H307Q251 652 238 643T225 605V78Q225 49 238 40T307 31H333V0Q298 3 180 3Q63 3 28 0Z" />
<glyph unicode="J" glyph-name="J" horiz-adv-x="513" d="M41 112Q41 142 58 156T97 170Q119 170 136 155T153 114Q153 58 89 58Q125 0 199 0Q241 0 271 41T302 148V604Q302 625 298 633T273 646T204 652H168V683Q206 680 336 680Q399 680 465 683V652Q414 652
401 646T388 611V167Q388 131 387 123Q378 64 327 21T201 -22Q134 -22 88 17T41 112Z" />
<glyph unicode="K" glyph-name="K" horiz-adv-x="777" d="M33 0V31H57Q111 31 123 40T136 78V605Q136 634 124 643T57 652H33V683Q68 680 181 680Q293 680 328 683V652H304Q250 652 238 643T225 605V287L538 586Q556 602 556 619Q556 625 554 631T540 645T510
652V683Q544 680 637 680Q696 680 722 683V652Q639 651 580 592L400 419L631 79Q652 48 672 40T736 31V0Q673 3 621 3Q513 3 478 0V31Q537 31 537 61Q537 72 522 95L341 363L225 253V78Q225 49 237 40T304 31H328V0Q293 3 180 3Q68 3 33 0Z" />
<glyph unicode="L" glyph-name="L" horiz-adv-x="625" d="M33 0V31H57Q111 31 123 40T136 78V605Q136 634 124 643T57 652H33V683Q68 680 185 680Q317 680 353 683V652H320Q274 652 253 646T229 632T225 604V71Q225 45 232 38T274 31H356Q407 31 443 46T499 80T532
135T549 194T557 258H582L554 0H33Z" />
<glyph unicode="M" glyph-name="M" horiz-adv-x="916" d="M37 0V31Q73 31 96 38T127 58T138 81T140 105V605Q140 634 128 643T61 652H37V683H206Q224 683 229 680T241 661L458 101L677 664Q682 678 686 680T710 683H879V652H855Q801 652 789 643T776 605V78Q776
49 788 40T855 31H879V0Q842 3 736 3Q629 3 592 0V31H616Q670 31 682 40T695 78V652H694L448 19Q441 0 430 0Q418 0 410 22L169 644H168V105Q168 90 170 81T180 59T212 38T271 31V0Q166 3 154 3T37 0Z" />
<glyph unicode="N" glyph-name="N" horiz-adv-x="750" d="M33 0V31Q69 31 92 38T123 58T134 81T136 105V627Q136 641 133 644T112 650Q82 652 62 652H33V683H203Q217 683 221 681T232 670L585 151V578Q585 593 583 602T573 624T541 645T482 652V683Q587 680 599
680T716 683V652Q680 652 657 645T626 625T615 602T613 578V26Q613 10 611 5T599 0Q592 0 582 13L174 613Q170 619 164 625V105Q164 90 166 81T176 59T208 38T267 31V0Q162 3 150 3T33 0Z" />
<glyph unicode="O" glyph-name="O" horiz-adv-x="777" d="M56 339Q56 492 154 598T388 705Q525 705 623 598T721 339Q721 188 623 83T388 -22Q253 -22 155 82T56 339ZM159 353Q159 260 181 189T238 80T312 23T389 4Q427 4 464 22T537 78T595 187T618 353Q618 426
603 485T563 579T507 638T446 671T388 680Q353 680 317 665T243 615T183 513T159 353Z" />
<glyph unicode="P" glyph-name="P" horiz-adv-x="680" d="M35 0V31H59Q113 31 125 40T138 78V605Q138 634 126 643T59 652H35V683H388Q489 683 556 628T624 497Q624 423 556 370T396 316H227V78Q227 49 239 40T306 31H330V0Q295 3 182 3Q70 3 35 0ZM224 342H362Q407
342 439 354T487 382T510 423T520 462T521 497Q521 519 520 533T511 572T487 612T440 640T362 652H273Q239 652 232 645T224 612V342Z" />
<glyph unicode="Q" glyph-name="Q" horiz-adv-x="777" d="M56 339Q56 492 154 598T388 705Q525 705 623 598T721 339Q721 228 665 138T518 7Q537 -44 558 -67T614 -91T674 -69T705 -7Q707 11 716 11Q727 11 727 -10Q727 -34 722 -61T705 -120T668 -173T606 -194Q579
-194 559 -183T528 -157T507 -113T494 -64T484 -7Q436 -22 389 -22Q252 -22 154 83T56 339ZM156 339Q156 258 173 196T219 98T272 44T322 16Q308 44 308 64Q308 97 331 122T390 148Q461 148 503 42Q621 129 621 339Q621 430 599 499T540 606T466 662T388 680Q350
680 312 663T238 608T179 501T156 339ZM330 64Q330 53 333 41T351 16T389 3Q436 3 477 26Q458 126 390 126Q363 126 347 107T330 64Z" />
<glyph unicode="R" glyph-name="R" horiz-adv-x="736" d="M35 0V31H59Q113 31 125 40T138 78V605Q138 634 126 643T59 652H35V683H349Q458 683 534 630T610 503Q610 447 561 403T435 340Q534 306 557 224L570 144Q574 115 576 101T583 66T592 37T604 17T620 4T641
0Q664 0 683 20T707 89Q709 105 719 105Q732 105 732 88Q732 75 728 59T715 23T685 -9T637 -22Q559 -22 511 20Q491 38 482 61T472 103T470 163Q470 221 464 246T432 297Q397 331 339 331H224V78Q224 49 236 40T303 31H327V0Q291 3 181 3T35 0ZM224 353H335Q388
353 424 366T477 402T500 449T507 503Q507 538 499 564T474 606T440 632T397 646T352 651T305 652Q256 652 246 650Q235 649 231 644T225 632T224 612V353Z" />
<glyph unicode="S" glyph-name="S" horiz-adv-x="555" d="M56 2V202Q56 213 56 217T60 224T69 227Q80 227 81 217Q84 118 143 63Q201 9 301 9Q361 9 398 52T435 152Q435 206 404 244Q391 261 375 272T348 286T319 295Q195 325 187 328Q128 348 92 398T56 511Q56
591 112 648T251 705Q292 705 326 692T375 668T411 635L446 692Q454 705 461 705Q469 705 470 701T472 681V480Q472 469 472 465T468 459T459 456Q449 456 447 468Q419 677 252 677Q195 677 158 639T120 546Q120 502 147 466T221 419L349 388Q413 373 456 317T499
186Q499 101 444 40T302 -22Q240 -22 192 -2T118 48Q98 15 85 -4L82 -9Q74 -22 67 -22Q59 -22 58 -17T56 2Z" />
<glyph unicode="T" glyph-name="T" horiz-adv-x="722" d="M36 452L55 677H666L685 452H660Q656 497 653 523T641 573T622 610T591 631T545 643T480 646Q434 646 423 644Q411 641 408 633T405 606V79Q405 59 409 51T436 37T510 31H550V0Q509 3 360 3Q212 3 171
0V31H211Q262 31 285 37T312 51T316 79V606Q316 620 315 626T310 637T295 644T241 646Q202 646 176 644T130 632T100 610T81 574T69 523T61 452H36Z" />
<glyph unicode="U" glyph-name="U" horiz-adv-x="750" d="M33 652V683Q68 680 181 680Q293 680 328 683V652H304Q250 652 238 643T225 605V224Q225 157 243 111T291 45T343 17T390 9Q466 9 524 69T582 231V578Q582 593 580 602T570 624T538 645T479 652V683Q587
680 598 680Q608 680 716 683V652Q680 652 657 646T626 625T615 601T613 574V254Q613 205 610 185Q597 98 535 38T388 -22Q285 -22 211 50T136 228V605Q136 634 124 643T57 652H33Z" />
<glyph unicode="V" glyph-name="V" horiz-adv-x="750" d="M19 652V683Q127 680 146 680Q253 680 289 683V652Q207 652 207 623Q207 619 213 605L404 100L587 582Q592 597 592 602Q592 622 574 636T519 652V683Q597 680 633 680Q684 680 730 683V652Q646 651 621
585L398 -3Q394 -15 390 -18T374 -22Q364 -22 359 -18T349 0L117 614Q107 641 90 646T19 652Z" />
<glyph unicode="W" glyph-name="W" horiz-adv-x="1027" d="M18 652V683Q32 683 57 682T103 681T140 680Q246 680 282 683V652Q198 652 198 622Q198 615 200 609L361 117L500 546L478 616Q470 641 453 646T388 652V683Q402 683 427 682T473 681T510 680Q616 680
652 683V652Q568 652 568 622Q568 619 571 607L731 117L881 579Q886 594 886 599Q886 617 865 634T799 652V683Q877 680 918 680Q964 680 1009 683V652Q930 652 909 585L718 -2Q716 -10 715 -13T709 -19T698 -22Q685 -22 679 -3L513 506L348 -2Q346 -10 345 -13T339
-19T328 -22Q315 -22 309 -3L109 610Q100 639 87 645T18 652Z" />
<glyph unicode="X" glyph-name="X" horiz-adv-x="750" d="M24 0V31Q70 31 103 45T147 69T169 97L333 339L149 617Q135 638 116 645T56 652H37V683Q92 680 167 680Q278 680 313 683V652Q283 651 266 642T248 622Q248 618 255 607L384 414L498 583Q507 597 507 606Q507
624 491 637T445 652V683Q485 680 573 680Q584 680 602 680T645 682T684 683V652Q583 651 539 587L402 386L613 67Q628 45 647 38T707 31H726V0Q663 3 596 3Q485 3 450 0V31Q480 32 497 41T515 61Q515 62 510 72L352 311L210 101Q200 85 200 77Q200 61 216 47T263
31V0Q227 3 135 3Q132 3 24 0Z" />
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="750" d="M11 652V683Q74 680 141 680Q253 680 289 683V652Q252 652 236 647T219 627Q219 620 226 610L407 315L572 583Q582 598 582 613Q582 630 568 641T525 652V683Q603 680 640 680Q692 680 738 683V652Q649
652 610 587L417 273V80Q417 49 429 40T497 31H520V0Q484 3 374 3T228 0V31H252Q306 31 318 40T331 78V273L121 615Q112 630 105 636T80 647T29 652H11Z" />
<glyph unicode="Z" glyph-name="Z" horiz-adv-x="611" d="M56 17Q56 26 63 37L452 652H295Q235 652 196 639T135 597T106 537T94 458H69L80 683H528Q537 683 540 683T548 681T553 676T554 667Q554 659 547 648L159 34H323Q377 34 415 45T475 75T510 125T527 188T535
267H560L543 0H82Q65 0 61 2T56 17Z" />
<glyph unicode="[" glyph-name="bracketleft" horiz-adv-x="278" d="M104 -250V750H255V727H171V-227H255V-250H104Z" />
<glyph unicode="\" glyph-name="backslash" horiz-adv-x="500" d="M57 736Q57 748 66 748T83 727L437 -218Q442 -233 442 -236Q442 -248 432 -248Q424 -248 415 -225L61 721Q57 731 57 736Z" />
<glyph unicode="]" glyph-name="bracketright" horiz-adv-x="278" d="M21 -227H105V727H21V750H172V-250H21V-227Z" />
<glyph unicode="^" glyph-name="asciicircum" horiz-adv-x="611" d="M117 484L304 628L492 484L477 463L304 575L132 463L117 484Z" />
<glyph unicode="_" glyph-name="underscore" horiz-adv-x="778" d="M84 -233T84 -213T114 -193H662Q692 -193 692 -213T664 -233H113Q84 -233 84 -213Z" />
<glyph unicode="`" glyph-name="grave" horiz-adv-x="500" d="M100 605Q100 618 110 630T135 642Q146 642 159 631T228 566Q262 532 285 510L270 490Q250 500 136 565L130 568Q125 571 123 572T115 578T108 585T103 594T100 605Z" />
<glyph unicode="a" glyph-name="a" horiz-adv-x="500" d="M42 95Q42 180 142 225Q202 254 326 261V298Q326 360 294 393T220 426Q147 426 112 380Q142 379 152 364T163 334Q163 314 151 301T117 288Q97 288 84 300T71 335Q71 384 115 416T222 448Q304 448 359
393Q376 376 384 354T394 318T395 275V75Q395 69 397 60T408 38T432 25Q468 25 468 89V145H493V89Q493 36 465 15T411 -6Q378 -6 357 18T333 76Q318 38 284 14T202 -11Q166 -11 132 -2T70 32T42 95ZM119 96Q119 59 145 35T209 11Q251 11 288 43T326 140V240Q215
236 167 192T119 96Z" />
<glyph unicode="b" glyph-name="b" horiz-adv-x="555" d="M28 652V683L172 694V377Q230 442 309 442Q395 442 458 376T521 216Q521 121 455 55T298 -11Q215 -11 167 62Q132 1 131 0H106V596Q106 633 93 642T28 652ZM175 114Q175 93 189 72Q229 11 294 11Q364 11
407 75Q438 123 438 217Q438 310 409 356Q369 420 304 420Q231 420 186 356Q175 340 175 320V114Z" />
<glyph unicode="c" glyph-name="c" horiz-adv-x="444" d="M34 121T34 216T96 379T251 448Q312 448 358 419T404 341Q404 319 391 307T358 294Q337 294 325 307T312 340Q312 349 315 357T329 375T359 386Q323 423 252 423Q201 423 159 375T117 218Q117 161 131
119T168 56T213 24T258 14Q356 14 389 119Q392 129 402 129Q415 129 415 119Q415 114 411 102T395 69T366 32T318 2T249 -11Q161 -11 98 55Z" />
<glyph unicode="d" glyph-name="d" horiz-adv-x="555" d="M34 215Q34 310 100 376T257 442Q333 442 383 380V596Q383 633 370 642T305 652V683L449 694V87Q449 50 462 41T527 31V0L380 -11V55Q328 -11 246 -11Q160 -11 97 55T34 215ZM117 214Q117 121 146 75Q186
11 251 11Q325 11 369 81Q380 98 380 118V323Q380 343 369 360Q328 420 261 420Q191 420 148 356Q117 308 117 214Z" />
<glyph unicode="e" glyph-name="e" horiz-adv-x="444" d="M28 220Q28 314 88 381T236 448Q324 448 369 391T415 252Q415 237 411 234T390 231H111Q111 129 141 81Q183 14 254 14Q264 14 275 16T311 26T356 58T389 117Q392 131 402 131Q415 131 415 119Q415 110
406 91T378 48T325 7T248 -11Q160 -11 94 55T28 220ZM112 252H349Q349 273 346 296T332 352T297 405T236 426Q220 426 203 419T164 396T129 342T112 252Z" />
<glyph unicode="f" glyph-name="f" horiz-adv-x="305" d="M33 400V431H112V546Q112 620 160 662T267 705Q306 705 331 684T357 635Q357 616 346 604T313 591Q293 591 282 603T270 634Q270 666 300 676Q285 683 267 683Q231 683 203 646T175 547V431H292V400H178V78Q178
49 190 40T254 31H275V0Q235 3 148 3Q136 3 117 3T73 1T34 0V31Q87 31 99 37T112 76V400H33Z" />
<glyph unicode="g" glyph-name="g" horiz-adv-x="500" d="M28 -79Q28 -47 52 -19T120 21Q76 49 76 110Q76 157 107 193Q60 232 60 296Q60 355 107 398T222 442Q282 442 328 406Q376 453 434 453Q460 453 472 437T485 404Q485 389 476 382T456 374Q444 374 436
382T427 403Q427 424 443 430Q440 431 433 431Q384 431 343 392Q384 354 384 295T337 193T222 149Q166 149 123 180Q106 160 106 133Q106 108 121 89T159 66Q166 65 234 65Q274 65 296 64T349 57T406 37Q471 1 471 -77Q471 -134 406 -170T249 -206Q157 -206 93
-170T28 -79ZM80 -79Q80 -120 128 -151T250 -183Q322 -183 370 -152T419 -79Q419 -49 402 -30T350 -4T291 5T221 7H162Q128 5 104 -20T80 -79ZM135 295Q135 172 222 172Q266 172 293 212Q309 239 309 296Q309 419 222 419Q178 419 151 379Q135 352 135 295Z" />
<glyph unicode="h" glyph-name="h" horiz-adv-x="555" d="M32 0V31Q85 31 97 37T110 76V596Q110 633 97 642T32 652V683L176 694V346H177Q193 382 229 412T321 442Q396 442 426 405Q448 380 452 352T457 252V61Q458 40 474 36T535 31V0Q433 3 423 3Q415 3 310
0V31Q363 31 375 37T388 76V309Q388 360 373 390T314 420Q262 420 221 377T179 260V76Q179 44 191 38T257 31V0Q155 3 145 3Q137 3 32 0Z" />
<glyph unicode="i" glyph-name="i" horiz-adv-x="277" d="M33 0V31Q86 31 98 37T111 76V345Q111 382 99 391T37 400V431L177 442V75Q177 45 187 38T247 31V0Q145 3 143 3Q129 3 33 0ZM75 616Q75 636 90 652T128 669T165 654T181 616T166 578T128 563Q105 563 90
579T75 616Z" />
<glyph unicode="j" glyph-name="j" horiz-adv-x="305" d="M104 594T104 616T119 653T157 669T194 654T210 616T195 579T157 563T120 578ZM-40 -125Q-40 -105 -28 -92T6 -79T39 -92T52 -125Q52 -143 42 -154T17 -170Q43 -183 71 -183Q94 -183 109 -170T132 -134T141
-92T144 -52V344Q144 381 130 390T58 400V431L210 442V-50Q210 -117 170 -161T73 -205Q27 -205 -6 -184T-40 -125Z" />
<glyph unicode="k" glyph-name="k" horiz-adv-x="527" d="M28 0V31Q81 31 93 37T106 76V596Q106 633 93 642T28 652V683L172 694V214L313 336Q335 355 335 375Q335 398 306 400V431Q348 428 418 428Q459 428 488 431V400Q425 397 362 346Q348 335 315 306T281
274Q281 273 282 271T285 266T287 263L414 84Q440 48 459 40T511 31V0Q468 3 424 3Q400 3 316 0V31Q352 31 352 54Q352 70 271 182Q265 190 252 207Q240 225 233 234L169 179V76Q169 44 181 38T247 31V0Q187 3 137 3Q127 3 28 0Z" />
<glyph unicode="l" glyph-name="l" horiz-adv-x="277" d="M33 0V31Q86 31 98 37T111 76V596Q111 633 98 642T33 652V683L177 694V76Q177 44 189 38T255 31V0Q243 0 218 1T174 2T144 3Q132 3 33 0Z" />
<glyph unicode="m" glyph-name="m" horiz-adv-x="833" d="M32 0V31Q85 31 97 37T110 76V344Q110 381 97 390T32 400V431L173 442V337Q220 442 321 442Q438 442 454 344Q471 382 507 412T599 442Q674 442 704 405Q726 380 730 352T735 252V61Q736 40 752 36T813
31V0Q711 3 701 3Q693 3 588 0V31Q641 31 653 37T666 76V309Q666 360 651 390T592 420Q540 420 499 377T457 260V76Q457 44 469 38T535 31V0Q433 3 423 3Q415 3 310 0V31Q363 31 375 37T388 76V309Q388 360 373 390T314 420Q262 420 221 377T179 260V76Q179 44
191 38T257 31V0Q155 3 145 3Q137 3 32 0Z" />
<glyph unicode="n" glyph-name="n" horiz-adv-x="555" d="M32 0V31Q85 31 97 37T110 76V344Q110 381 97 390T32 400V431L173 442V337Q220 442 321 442Q396 442 426 405Q448 380 452 352T457 252V61Q458 40 474 36T535 31V0Q433 3 423 3Q415 3 310 0V31Q363 31
375 37T388 76V309Q388 360 373 390T314 420Q262 420 221 377T179 260V76Q179 44 191 38T257 31V0Q155 3 145 3Q137 3 32 0Z" />
<glyph unicode="o" glyph-name="o" horiz-adv-x="500" d="M28 119T28 214T92 378T250 448Q341 448 406 379T471 214Q471 120 406 55T249 -11Q160 -11 94 54ZM111 222Q111 125 136 81Q175 14 250 14Q287 14 318 34T366 88Q388 132 388 222Q388 318 362 361Q323
426 249 426Q217 426 186 409T135 359Q111 315 111 222Z" />
<glyph unicode="p" glyph-name="p" horiz-adv-x="555" d="M28 -163Q81 -163 93 -157T106 -118V350Q106 383 94 391T28 400V431L172 442V376Q232 442 312 442Q397 442 459 376T521 216Q521 121 455 55T298 -11Q248 -11 215 14T175 59V50V-118Q175 -150 187 -156T253
-163V-194Q148 -191 140 -191Q130 -191 28 -194V-163ZM175 114Q175 99 177 94T189 72Q229 11 294 11Q351 11 394 69T438 216Q438 300 399 358T304 417Q265 417 231 396T175 337V114Z" />
<glyph unicode="q" glyph-name="q" horiz-adv-x="527" d="M34 215Q34 311 100 376T255 442Q292 442 322 424T366 388T389 351L427 442H449V-118Q449 -150 461 -156T527 -163V-194Q422 -191 414 -191Q404 -191 302 -194V-163Q355 -163 367 -157T380 -118V61Q325
-11 247 -11Q160 -11 97 55T34 215ZM117 215Q117 129 156 70T251 11Q305 11 343 52Q383 96 383 136V277Q383 324 350 370T261 417Q204 417 161 360T117 215Z" />
<glyph unicode="r" glyph-name="r" horiz-adv-x="391" d="M28 0V31Q81 31 93 37T106 76V344Q106 381 93 390T28 400V431L167 442V332Q181 375 211 408T290 442Q322 442 343 424T364 381Q364 359 351 348T321 337Q303 337 291 348T278 380Q278 392 283 401T293
414T301 419Q299 420 290 420Q235 420 204 365T172 232V78Q172 49 184 40T248 31H269V0Q229 3 142 3Q130 3 111 3T67 1T28 0Z" />
<glyph unicode="s" glyph-name="s" horiz-adv-x="394" d="M33 13V145Q33 156 33 160T37 167T46 170Q53 170 55 167T60 153Q75 84 107 48T199 11Q255 11 283 36T312 102Q312 175 208 194Q148 206 123 214T76 240Q33 275 33 325T71 411T193 448Q249 448 287 420Q298
429 304 436Q317 448 324 448Q332 448 333 443T335 424V323Q335 312 335 308T331 302T322 299Q311 299 310 308Q302 429 193 429Q134 429 108 407T81 353Q81 336 89 323T107 303T137 288T169 279T204 271Q284 256 318 223Q360 181 360 128Q360 69 320 29T199 -11Q134
-11 89 32Q83 26 79 21T73 14T71 11T69 9Q49 -11 44 -11Q36 -11 35 -6T33 13Z" />
<glyph unicode="t" glyph-name="t" horiz-adv-x="388" d="M19 400V422Q65 424 95 456T136 529T148 615H173V431H316V400H173V122Q173 14 240 14Q269 14 288 43T307 126V181H332V124Q332 70 307 30T233 -11Q215 -11 197 -7T156 10T119 51T104 124V400H19Z" />
<glyph unicode="u" glyph-name="u" horiz-adv-x="555" d="M32 400V431L179 442V110Q179 86 181 72T191 42T218 19T267 11Q321 11 354 55T388 166V344Q388 381 375 390T310 400V431L457 442V87Q457 50 470 41T535 31V0L391 -11V79Q349 -11 262 -11Q218 -11 188
0T143 25T120 66T111 109T110 158V308Q110 376 100 388T32 400Z" />
<glyph unicode="v" glyph-name="v" horiz-adv-x="527" d="M19 400V431Q64 428 116 428Q135 428 225 431V400Q168 400 168 374Q168 370 174 357L286 78L388 333Q394 350 394 357Q394 374 383 386T346 400V431Q397 428 433 428Q474 428 508 431V400Q478 400 457
387T430 362T416 333L285 8Q277 -11 264 -11Q255 -11 252 -8T243 8L99 363Q89 388 77 394T19 400Z" />
<glyph unicode="w" glyph-name="w" horiz-adv-x="722" d="M18 400V431Q72 428 111 428Q130 428 220 431V400Q161 400 161 373Q161 367 166 355L261 88L347 330Q329 379 324 385Q312 400 261 400V431Q306 428 350 428Q367 428 454 431V400Q395 400 395 373Q395
369 400 354L499 75L590 331Q595 344 595 352Q595 374 580 386T537 400V431Q594 428 630 428Q670 428 703 431V400Q641 398 619 336L502 8Q491 -10 482 -11Q469 -11 462 8L360 292L259 9Q255 -3 252 -7T239 -11T226 -6T218 11L92 365Q83 388 70 394T18 400Z" />
<glyph unicode="x" glyph-name="x" horiz-adv-x="527" d="M12 0V31Q90 31 140 91Q140 91 234 210L135 339Q100 384 85 392T17 400V431Q58 428 112 428Q142 428 220 431V400Q185 398 185 375Q185 367 194 357L272 256L334 334Q349 352 349 369Q349 397 320 400V431Q359
428 416 428Q459 428 498 431V400Q422 398 379 348Q360 327 287 235L421 62Q437 41 455 36T516 31V0Q471 3 420 3Q402 3 312 0V31Q330 32 339 40T348 56Q348 60 327 89L251 189Q175 99 165 78Q161 69 161 62Q161 35 190 31V0Q118 3 95 3Q51 3 12 0Z" />
<glyph unicode="y" glyph-name="y" horiz-adv-x="527" d="M19 -124Q19 -103 31 -92T61 -81Q79 -81 91 -92T103 -123Q103 -160 64 -165Q83 -183 111 -183Q141 -183 165 -161T199 -118T225 -59Q239 -29 250 0L100 365Q90 389 75 394T19 400V431Q64 428 116 428Q147
428 225 431V400Q169 400 169 374Q169 371 175 356L286 87L387 333Q393 347 393 357Q393 398 346 400V431Q412 428 433 428Q474 428 508 431V400Q441 400 415 336L239 -91Q191 -205 111 -205Q73 -205 46 -182T19 -124Z" />
<glyph unicode="z" glyph-name="z" horiz-adv-x="444" d="M28 14Q28 21 37 32L316 409H202Q123 409 98 380T67 270H42L53 431H373Q384 431 388 431T396 427T399 418T390 401L112 25H230Q313 25 341 59T376 187H401L384 0H54Q38 0 33 2T28 14Z" />
<glyph unicode="{" glyph-name="braceleft" horiz-adv-x="500" d="M73 246T73 250T74 256T79 260T86 261T97 263T111 265Q147 272 176 296T212 357Q214 367 214 386V604Q214 656 239 686Q266 719 314 734T407 750Q425 750 425 739Q425 734 422 732T414 728T402
726T386 724T369 720Q284 692 284 610V385Q284 280 165 250Q284 220 284 121V-101Q284 -125 286 -137Q293 -171 324 -196T401 -226Q425 -229 425 -239Q425 -250 408 -250Q337 -250 280 -220T215 -131Q214 -121 214 -102V117Q214 150 201 175T167 212T132 229T105
237Q102 237 97 237T88 238T81 240T75 243Z" />
<glyph unicode="|" glyph-name="bar" horiz-adv-x="278" d="M118 -219V712Q118 749 138 749T158 719V-212Q158 -249 138 -249T118 -219Z" />
<glyph unicode="}" glyph-name="braceright" horiz-adv-x="500" d="M73 -239Q73 -232 79 -230T101 -226T129 -220Q214 -192 214 -110V115Q214 220 333 250Q214 280 214 378V601Q214 625 212 637Q205 671 174 696T97 726Q96 726 92 726T85 727T80 729T75 732T73
738Q73 750 90 750Q161 750 218 720T283 631Q284 621 284 602V383Q284 350 297 325T330 288T365 271T393 263Q396 263 401 263T410 261T417 259T423 256T425 250Q425 246 424 244T418 240T410 239T399 237T386 235Q350 228 321 204T286 143Q284 133 284 114V-104Q284
-124 283 -136T270 -169T236 -208Q179 -250 91 -250Q73 -250 73 -239Z" />
<glyph unicode="~" glyph-name="asciitilde" horiz-adv-x="611" d="M83 588Q85 590 96 603T111 620T125 634T143 648T161 658T183 666T208 668Q243 668 310 644T412 620Q444 620 465 632T510 668L527 653Q526 651 516 640T504 625T491 613T477 600T462 590T444
581T425 577T402 574Q367 574 300 597T198 621Q166 621 145 610T100 574L83 588Z" />
</font>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 36 KiB

BIN
app/assets/fonts/cmunrm.ttf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Binary file not shown.

View File

@@ -42,8 +42,9 @@ $sansFontFamily: Helvetica, Arial;
@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'font-awesome';
h1 {
h1 {
font-size: 23px
}

View File

@@ -0,0 +1,53 @@
@font-face {
font-family: 'fetlogo';
src: font-url('fetlogo.eot?46715046');
src: font-url('fetlogo.eot?46715046#iefix') format('embedded-opentype'),
font-url('fetlogo.woff?46715046') format('woff'),
font-url('fetlogo.ttf?46715046') format('truetype'),
font-url('fetlogo.svg?46715046#fetlogo') format('svg');
font-weight: normal;
font-style: normal;
}
/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
/*
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'fetlogo';
src: font-url('fetlogo.svg?46715046#fetlogo') format('svg');
}
}
*/
[class^="feticon-"]:before, [class*=" feticon-"]:before {
font-family: "fetlogo";
font-style: normal;
font-weight: normal;
speak: none;
display: inline-block;
text-decoration: inherit;
width: 1em;
margin-right: .2em;
text-align: center;
/* opacity: .8; */
/* For safety - reset parent styles, that can break glyph codes*/
font-variant: normal;
text-transform: none;
/* fix buttons height, for twitter bootstrap */
line-height: 1em;
/* Animation center compensation - margins should be symmetric */
/* remove if not needed */
margin-left: .2em;
/* you can be more comfortable with increased icons size */
/* font-size: 120%; */
/* Uncomment for 3D effect */
/* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
}
.feticon-fet_logo:before { content: '\e800'; } /* '' */

View File

@@ -58,7 +58,7 @@ $sansFontFamily: Helvetica, Arial;
@import 'bootstrap/image-gallery';
@import 'neuigkeiten';
@import 'font-awesome';
div.header {
display: block;

View File

@@ -56,7 +56,7 @@ $sansFontFamily: Helvetica, Arial;
@import 'bootstrap';
@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'font-awesome';
@import 'neuigkeiten';

View File

@@ -51,20 +51,41 @@ $navbarLinkBackgroundHover: darken($navbarBackground,10%);
$infoBackground:#65A5D1;
$infoText:#03406A;
$sansFontFamily: Helvetica, Arial;
@font-face {
font-family: 'ayuma2yk';
src:font-url('Ayuma2yk.ttf');}
@font-face {
font-family: 'cmunrm';
src: font-url('cmunrm.eot');
src: font-url('cmunrm.eot') format('embedded-opentype'),
font-url('cmunrm.woff') format('woff'),
font-url('cmunrm.ttf') format('truetype'),
font-url('cmunrm.svg') format('svg');
font-weight: normal;
font-style: normal;
}
$sansFontFamily: cmunrm, Helvetica, Arial;
@import 'bootstrap';
@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'font-awesome';
@import 'neuigkeiten';
@import 'fetlogo';
#menudiv {
font-family: ayuma2yk;
}
div.header {
display: block;
// background: url('../../../../header1.png') no-repeat;
// background-color:white;// $color_prim;
background-position: right;
font-family: ayuma2yk;
// border-bottom:1px solid black;
float:left;
color:#000;
@@ -90,4 +111,4 @@ $box-border: lightgray solid 1px;
$box-border-radius:0px;
$box-background: white;
@import 'layout';
@import 'calendars';
@import 'calendars';

View File

@@ -41,7 +41,7 @@ $sansFontFamily: Helvetica, Arial;
@import 'bootstrap';
@import 'bootstrap-responsive';
@import 'bootstrap/image-gallery';
@import 'font-awesome';
@import 'neuigkeiten';
div.header {

View File

@@ -18,7 +18,7 @@ def get_theme
params[:theme]
else
"2003"
"blue1"
end
end
def default_url_options

View File

@@ -46,19 +46,29 @@ class AttachmentsController < ApplicationController
# POST /attachments.json
def create
@attachment = Attachment.new(params[:attachment])
@thema = Thema.find(params[:thema_id])
@attachment.thema_id = @thema.id
@action="create"
logger.info "#{@attachment.inspect}"
@thema = Thema.find_by_id(params[:thema_id])
# logger.info "gg"
@attachment.thema = @thema
@attachment.name=@attachment.datei.filename
@action="create"
# logger.info "sdf"
respond_to do |format|
if @attachment.save
format.html { redirect_to @thema, notice: 'Attachment was successfully created.' }
format.json { render json: @thema, status: :created, location: @thema }
format.js { }
if @attachment.save
format.html {
render :json => [@attachment.to_jq_upload].to_json,
:content_type => 'text/html',
:layout => false
}
# format.html { redirect_to @thema, notice: 'Attachment was successfully created.' }
format.json { render json: {files: [@attachment.to_jq_upload]}, status: :created, location: [@thema, @attachment]}
else
format.html { render action: "new" }
format.json { render json: @attachment.errors, status: :unprocessable_entity }
format.js { render action: "new.js.erb"}
end
end
end

View File

@@ -16,11 +16,7 @@ class BeispieleController < ApplicationController
def show
# @lva = params([:lva]) unless params([:lva]).nil?
@beispiel = Beispiel.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @beispiel }
end
redirect_to @beispiel.lva
end
# GET /beispiele/new

View File

@@ -12,9 +12,12 @@ class FetprofilesController < ApplicationController
@gremientabs = Gremium.tabs
respond_to do |format|
format.html # index.html.erb
format.json { render json: @fetprofiles }
end
end
end
def internlist
@fetprofiles = Fetprofile.order(:vorname,:nachname)
end
# GET /fetprofiles/1
# GET /fetprofiles/1.json

View File

@@ -7,6 +7,8 @@ class GremienController < ApplicationController
@gremien = Gremium.all
@gremientabs=Gremium.tabs
@toolbar_elements << {:text=>I18n.t('gremium.new'),:path=>new_gremium_path() ,:icon=>:plus} if can? :new, Gremium
@toolbar_elements << {:text=>I18n.t('profile.new'),:path=>new_fetprofile_path() ,:icon=>:plus} if can? :new, Fetprofile
respond_to do |format|
format.html # index.html.erb
format.json { render json: @gremien }

View File

@@ -9,6 +9,11 @@ class HomeController < ApplicationController
end
def kontakt
end
def intern
authorize! :seeintern, User
@neuigkeiten = Neuigkeit.intern.recent
@themengruppen=Themengruppe.intern
end
def startdev
render 'setup_fetsite_dev'
end

View File

@@ -1,6 +1,6 @@
class LvasController < ApplicationController
# GET /lvas
before_filter {@toolbar_elements =[]}
before_filter :load_toolbar, :only => [:show]
load_and_authorize_resource
def index
@lvas = Lva.all
@@ -14,13 +14,7 @@ class LvasController < ApplicationController
def show
@lva = Lva.find_by_id(params[:id])
@beispiel=Beispiel.new
# @toolbar_elements<<{:hicon=>'icon-plus-sign', :icon=>:plus, :text => "Neues Beispiel", :path=> new_beispiel_path(:lva_id =>@lva.id)}
@toolbar_elements<<{:hicon=>'icon-pencil', :icon=>:pencil,:text =>I18n.t('common.edit'),:path => edit_lva_path(@lva)}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('common.delete'), :path=> lva_path(@lva), :method=>:delete, :confirm=>'Sure?' }
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>"Tissvergleichladen", :path=> lva_compare_tiss_path(@lva)}
@beispiel=Beispiel.new
end
# GET /lvas/new
@@ -36,12 +30,10 @@ class LvasController < ApplicationController
def edit
@lva = Lva.find(params[:id])
@semester = @lva.modul.map(&:modulgruppen).flatten.map(&:studium).map(&:semester).flatten.uniq
end
def compare_tiss
@lva = Lva.find_by_id(params[:lva_id])
@lva = Lva.find_by_id(params[:id])
@lvatiss = Lva.new
@lvatiss.lvanr=@lva.lvanr
@lvatiss.load_tissdata("-2013W")
@@ -49,60 +41,59 @@ class LvasController < ApplicationController
end
def load_tiss
@lva = Lva.find_by_id(params[:lva_id])
@lva = Lva.find_by_id(params[:id])
@lva.load_tissdata("-2013W")
if @lva.save
redirect_to @lva , notice: 'Lva von TISS geleaden.'
redirect_to @lva , notice: 'Lva von TISS geladen.'
else
redirect_to @lva, action: :compare_tiss
end
end
# POST /lvas
# POST /lvas.json
def create
@lva = Lva.new(params[:lva])
respond_to do |format|
if @lva.save
@lva.add_semesters
format.html { redirect_to @lva, notice: 'Lva was successfully created.' }
else
format.html { render action: "new" }
end
end
end
# PUT /lvas/1
# PUT /lvas/1.json
def update
@lva = Lva.find(params[:id])
respond_to do |format|
if @lva.update_attributes(params[:lva])
@lva.add_semesters
format.html { redirect_to @lva, notice: 'Lva was successfully updated.' }
else
format.html { render action: "edit" }
end
end
end
# DELETE /lvas/1
# DELETE /lvas/1.json
def destroy
@lva = Lva.find(params[:id])
@lva.destroy
respond_to do |format|
format.html { redirect_to lvas_url }
end
end
private
def load_toolbar
@lva = Lva.find_by_id(params[:id])
@toolbar_elements =[]
@toolbar_elements<<{:hicon=>'icon-pencil', :icon=>:pencil,:text =>I18n.t('common.edit'),:path => edit_lva_path(@lva)} if can? :edit, @lva
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>"Tissvergleichladen", :path=> compare_tiss_lva_path(@lva)} if can? :compare_tiss, @lva
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('common.delete'), :path=> lva_path(@lva), :method=>:delete, :confirm=>'Sure?' } if can? :delete, @lva
end
end

View File

@@ -1,9 +1,9 @@
# -*- coding: utf-8 -*-
class ModulgruppenController < ApplicationController
# GET /modulgruppen
before_filter :find_modulgruppe, :only=>[:show, :delete]
before_filter :load_toolbar_show, :only=>[:show] # Toolbar für show erstellen
load_and_authorize_resource
def index
@modulgruppen = Modulgruppe.all
if !params[:studium_id].nil?
@@ -14,17 +14,12 @@ class ModulgruppenController < ApplicationController
end
# GET /modulgruppen/1
def show
@modulgruppe = Modulgruppe.find(params[:id])
@studium = Studium.find(@modulgruppe.studium_id)
if !params[:studium_id].nil?
@studium=Studium.find(params[:studium_id])
end
@toolbar_elements = [ {:text=>'Zurück', :path=>studium_path(@studium, :ansicht=>:modulgruppenansicht)}]
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>I18n.t('modulgruppe.addmodul'), :path=>new_modul_path(@modulgruppe)}
@toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t('modulgruppe.edit'), :path=>edit_modulgruppe_path(@modulgruppe)}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => studium_path(@studium, :ansicht=>:modulgruppenansicht), :method=> :delete,:confirm=>"Sure?" }
end
# GET /modulgruppen/new
@@ -38,7 +33,6 @@ class ModulgruppenController < ApplicationController
end
respond_to do |format|
format.html # new.html.erb
format.json { render json: @modulgruppe }
end
end
@@ -51,13 +45,15 @@ class ModulgruppenController < ApplicationController
end
end
# POST /modulgruppen
def create
@modulgruppe = Modulgruppe.new(params[:modulgruppe])
respond_to do |format|
if @modulgruppe.save
format.html { redirect_to @modulgruppe.studium, notice: 'Modulgruppe was successfully created.' }
@@ -71,7 +67,6 @@ class ModulgruppenController < ApplicationController
def update
@modulgruppe = Modulgruppe.find(params[:id])
respond_to do |format|
if @modulgruppe.update_attributes(params[:modulgruppe])
format.html { redirect_to @modulgruppe, notice: 'Modulgruppe was successfully updated.' }
@@ -94,4 +89,20 @@ class ModulgruppenController < ApplicationController
end
end
private
def find_modulgruppe
@modulgruppe = Modulgruppe.find(params[:id])
end
def load_toolbar_show
@toolbar_elements = [ {:text=>'Zurück', :path=>studium_path(@modulgruppe.studium, :ansicht=>:modulgruppenansicht)}]
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>I18n.t('modulgruppe.addmodule'), :path=>new_bulk_moduls_path(:modulgruppen_id=>@modulgruppe.id)}
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>I18n.t('modulgruppe.addmodul'), :path=>new_modul_path(:modulgruppen_id=>@modulgruppe.id)}
@toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t('modulgruppe.edit'), :path=>edit_modulgruppe_path(@modulgruppe)}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => modulgruppe_path(@modulgruppe, :ansicht=>:modulgruppenansicht), :method=> :delete,:confirm=>'Sure?' }
end
end

View File

@@ -1,22 +1,20 @@
# -*- coding: utf-8 -*-
class ModulsController < ApplicationController
# GET /moduls
# GET /moduls.json
before_filter :find_modul, :only=>[:show,:update,:update_lvas,:edit_lvas,:load_tiss,:show_tiss] # @modul laden
before_filter :load_toolbar_show, :only=>[:show] # Toolbar für show erstellen
before_filter :load_toolbar_index, :only=>[:index] # Toolbar für index erstellen
load_and_authorize_resource
def index
@moduls = Modul.all
if @moduls
if !params[:studium_id].nil?
@studium=Studium.find_by_id(params[:studium_id])
end
@toolbar_elements = [{:hicon=>'icon-plus-sign', :text=>I18n.t("modul.add"), :path=>new_modul_path}]
@topbar_elements =[{:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"),:path=>studien_path}]
@topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}
@topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("lva.list"),:path=>lvas_path}
respond_to do |format|
format.html # index.html.erb
format.json { render json: @moduls }
end
end
@@ -25,27 +23,8 @@ class ModulsController < ApplicationController
# GET /moduls/1
# GET /moduls/1.json
def show
@modul = Modul.find(params[:id])
@toolbar_elements = [{:hicon=>'icon-plus-sign', :text=>I18n.t("lva.add"), :path=>new_lva_path(:modul_id =>@modul.id)}]
@toolbar_elements << {:hicon=>'icon-pencil', :text=>"Lvas bearbeiten", :path=>modul_edit_lvas_path(@modul)}
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>"ADD FROM TISS", :path=>modul_load_tiss_path(:modul_id =>@modul.id)}
@toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t("modul.edit"), :path=>edit_modul_path(@modul)}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t("common.delete"),:path=>@modul , :method=>:delete , :data=>{:confirm =>'Are you sure'}}
@topbar_elements = [{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}]
@tb=[]
for i in @modul.modulgruppen
if !i.studium.nil?
name =i.studium.name
id = i.studium.id
else
s.name = 'Kein Studium vorhanden'
s.id = nil
end
@tb <<{:text=> i.name + ' ('+i.studium.name + ')', :path=>modulgruppe_path(i)}
@tb <<{:text=> i.long_name, :path=>modulgruppe_path(i)}
end
respond_to do |format|
format.html # show.html.erb
@@ -53,6 +32,7 @@ class ModulsController < ApplicationController
end
end
# GET /moduls/new
# GET /moduls/new.json
def new
@@ -63,70 +43,15 @@ class ModulsController < ApplicationController
end
respond_to do |format|
format.html # new.html.erb
format.json { render json: @modul }
end
end
def edit_lvas
@modul = Modul.find(params[:modul_id])
@lvas = @modul.lvas
@semester = @modul.modulgruppen.flatten.map(&:studium).map(&:semester).flatten.uniq
def new_bulk
@moduls= []
@modulgruppe=Modulgruppe.find(params[:modulgruppen_id])
10.times {@moduls << Modul.new(:modulgruppen=>[@modulgruppe])}
end
def update_lvas
params[:modul_id]=params[:id] if params[:modul_id].empty?
@modul = Modul.find(params[:modul_id])
@semester = @modul.modulgruppen.flatten.map(&:studium).map(&:semester).flatten.uniq
@newlvas=[]
@lvas=[]
params["lvas"].each do |i,l|
#lva= Lva.find(l[:id].to_i)
lva=Lva.where(:lvanr=>l["lvanr"]).first if lva.nil?
lva=Lva.new(l) if lva.nil?
lva.modul<<@modul
lva.modul.uniq!
lva.name=l["name"]
lva.lvanr=l["lvanr"]
lva.ects=l["ects"]
lva.desc=l["desc"]
lva.semester=Semester.where(:id=>l["semester_ids"].map(&:to_i))
lva.stunden=l["stunden"]
lva.pruefungsinformation=l["pruefungsinformation"]
lva.lernaufwand=l["lernaufwand"]
lva.typ=l["typ"]
lva.save
@newlvas<<lva
end
@lvas=@newlvas
if @newlvas.map(&:valid?).all?
redirect_to modul_path(@modul)
else
render "edit_lvas"
end
# end
end
def load_tiss
@modul = Modul.find(params[:modul_id])
@lvas = @modul.lvas
end
def show_tiss
@lvas=[];
@modul = Modul.find(params[:modul_id])
@semester = @modul.modulgruppen.flatten.map(&:studium).map(&:semester).flatten.uniq
params["lvas"].to_a.each do |l|
unless l.last["lvanr"].empty?
l=l.last
lva=Lva.new
lva.lvanr=l["lvanr"]
lva.load_tissdata("-"+ l["sem"])
lva.modul<<@modul
@lvas<<lva
end
end
render 'edit_lvas'
end
# GET /moduls/1/edit
def edit
@modul = Modul.find(params[:id])
if !params[:studium_id].nil?
@@ -134,31 +59,26 @@ class ModulsController < ApplicationController
end
end
# POST /moduls
# POST /moduls.json
def create
@modul = Modul.new(params[:modul])
respond_to do |format|
if @modul.save
for i in @modul.lvas
i.add_semesters
end
format.html { redirect_to modulgruppe_path(@modul.modulgruppen.first), notice: 'Modul was successfully created.' }
format.json { render json: @modul, status: :created, location: @modul }
else
format.html { render action: "new" }
format.json { render json: @modul.errors, status: :unprocessable_entity }
end
def edit_bulk
unless params[:modulgruppen_id].nil?
@moduls=Modulgruppe.find(params[:modulgruppen_id]).moduls
else
unless params[:studium_id].nil?
@moduls=Studium.find(params[:studium_id]).modulgruppen.collect(&:moduls).flatten
else
@moduls=Modul.all
end
end
end
def edit_lvas
@lvas = @modul.lvas
@semester = @modul.modulgruppen.flatten.map(&:studium).map(&:semester).flatten.uniq
end
# PUT /moduls/1
# PUT /moduls/1.json
def update
@modul = Modul.find(params[:id])
respond_to do |format|
if @modul.update_attributes(params[:modul])
@@ -166,27 +86,113 @@ class ModulsController < ApplicationController
i.add_semesters
end
format.html { redirect_to url_for(@modul), notice: 'Modul was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @modul.errors, status: :unprocessable_entity }
end
end
end
def update_bulk
@moduls=Modul.update_multiple(params[:moduls])
if @moduls.map(&:valid?).all?
redirect_to @moduls.first.modulgruppen.first, :notice=>"Erfolgreich Module geändert"
else
render :edit_bulk
end
end
def update_lvas
@semester = @modul.modulgruppen.flatten.map(&:studium).map(&:semester).flatten.uniq
@newlvas=Lva.update_multiple_with_modul(params["lvas"],@modul)
@lvas=@newlvas
if @newlvas.map(&:valid?).all?
redirect_to modul_path(@modul)
else
render "edit_lvas"
end
end
def load_tiss
@lvas = @modul.lvas
end
def show_tiss
@lvas=[];
@semester = @modul.modulgruppen.flatten.map(&:studium).map(&:semester).flatten.uniq
params["lvas"].to_a.each do |l|
unless l.last["lvanr"].empty?
l=l.last
lva=Lva.new
lva.lvanr=l["lvanr"]
lva.load_tissdata("-"+ l["sem"])
lva.modul<<@modul
@lvas<<lva #
end
end
render 'edit_lvas'
end
# GET /moduls/1/edit
# POST /moduls
# POST /moduls.json
def create
@modul = Modul.new(params[:modul])
respond_to do |format|
if @modul.save
for i in @modul.lvas
i.add_semesters
end
format.html { redirect_to modulgruppe_path(@modul.modulgruppen.first), notice: 'Modul was successfully created.' }
else
format.html { render action: "new" }
end
end
end
# PUT /moduls/1
# PUT /moduls/1.json
# DELETE /moduls/1
# DELETE /moduls/1.json
def destroy
@modul = Modul.find(params[:id])
modulgruppe=@modul.modulgruppen.first
for i in @modul.lvas
i.add_semesters
end
@modul.destroy
redirect_to modulgruppe_path(modulgruppe)
end
end
private
def find_modul
@modul = Modul.find(params[:id])
end
def load_toolbar_show
@toolbar_elements = [{:hicon=>'icon-plus-sign', :text=>I18n.t("lva.add"), :path=>new_lva_path(:modul_id =>@modul.id)}]
@toolbar_elements << {:hicon=>'icon-pencil', :text=>"Lvas bearbeiten", :path=>edit_lvas_modul_path(@modul)}
@toolbar_elements << {:hicon=>'icon-plus-sign', :text=>"ADD FROM TISS", :path=>load_tiss_modul_path(:modul_id =>@modul.id)}
@toolbar_elements << {:hicon=>'icon-pencil', :text=>I18n.t("modul.edit"), :path=>edit_modul_path(@modul)}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t("common.delete"),:path=>@modul , :method=>:delete , :data=>{:confirm =>'Are you sure'}}
@topbar_elements = [{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}]
@tb=[]
end
def load_toolbar_index
@toolbar_elements = [{:hicon=>'icon-plus-sign', :text=>I18n.t("modul.add"), :path=>new_modul_path}]
@topbar_elements =[{:hicon=>'icon-list', :text=>I18n.t("studien.allestudien"),:path=>studien_path}]
@topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("modul.list"),:path=>moduls_path}
@topbar_elements<<{:hicon=>'icon-list', :text=>I18n.t("lva.list"),:path=>lvas_path}
end
end

View File

@@ -1,28 +1,25 @@
class NeuigkeitenController < ApplicationController
before_filter {@toolbar_elements=[]}
before_filter :load_toolbar_elements, :only=>[:show,:find_link]
before_filter :load_toolbar_elements_edit, :only=>[:edit]
load_and_authorize_resource
def show
@neuigkeit = Neuigkeit.find(params[:id])
@neuigkeit = Neuigkeit.find(params[:id])
@rubrik=@neuigkeit.rubrik
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
end
if !params[:version].nil?
@neuigkeit.assign_attributes(@neuigkeit.translation.versions.reverse[params[:version].to_i].reify.attributes.select{|k,v| @neuigkeit.translated_attribute_names.include? k.to_sym })
# @neuigkeit=Neuigkeit.find(params[:id])
end
@calentries1=@neuigkeit.calentries
@toolbar_elements << {:hicon=>'icon-plus', :text=> I18n.t('neuigkeit.publish'),:path => publish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>"Sure?" } if can? :publish, @neuigkeit
@toolbar_elements << {:hicon=>'icon-minus', :text=> I18n.t('neuigkeit.unpublish'),:path => unpublish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>"Sure?" } if can?(:unpublish, @neuigkeit) && !@neuigkeit.published?
@toolbar_elements << {:text=>I18n.t('common.edit'),:path=>edit_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:icon=>:pencil} if can? :edit, @neuigkeit.rubrik
@versions= @neuigkeit.translation.versions.select([:created_at]).reverse
@toolbar_elements <<{:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:method=>:versions,:versions=>@versions}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit), :method=> :delete,:confirm=>'Sure?' } if can? :delete, @neuigkeit
# @toolbar_elements << {:path=> add_calentry_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit), :text=>"Add Calentry", :icon=>:plus}
end
def new
@@ -45,7 +42,7 @@ class NeuigkeitenController < ApplicationController
@neuigkeit.calentry=ce
@neuigkeit.save
render 'edit'
render 'edit'
end
def unpublish
@@ -69,11 +66,35 @@ class NeuigkeitenController < ApplicationController
def edit
@neuigkeit = Neuigkeit.find(params[:id])
@toolbar_elements << {:text=>I18n.t('common.show'),:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit)} if can? :show, @neuigkeit
@calentries= @neuigkeit.calentries
@calentries<< Calentry.new
end
def find_link
@rubrik=@neuigkeit.rubrik
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
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.flatten!
render action:"show"
end
def create_link
Nlink.create(:link=>params[:link_type].constantize.find(params[:link_id]),:neuigkeit=>Neuigkeit.find(params[:id]))
redirect_to action:"show"
end
def create
@neuigkeit = Neuigkeit.new(params[:neuigkeit])
@@ -111,4 +132,29 @@ class NeuigkeitenController < ApplicationController
end
end
private
def load_toolbar_elements
@neuigkeit=Neuigkeit.find(params[:id])
@toolbar_elements=[]
@toolbar_elements << {:hicon=>'icon-plus', :text=> I18n.t('neuigkeit.publish'),:path => publish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>'Sure?' } if can?(:publish, @neuigkeit) && @neuigkeit.published?
@toolbar_elements << {:hicon=>'icon-minus', :text=> I18n.t('neuigkeit.unpublish'),:path => unpublish_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:confirm=>'Sure?' } if can?(:unpublish, @neuigkeit) && !@neuigkeit.published?
@toolbar_elements << {:text=>I18n.t('common.edit'),:path=>edit_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:icon=>:pencil} if can? :edit, @neuigkeit.rubrik
@versions= @neuigkeit.translation.versions.select([:created_at]).reverse
@toolbar_elements <<{:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit),:method=>:versions,:versions=>@versions}
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit), :method=> :delete,:confirm=>'Sure?' } if can? :delete, @neuigkeit
end
def load_toolbar_elements_edit
@neuigkeit = Neuigkeit.find(params[:id])
@toolbar_elements=[]
@toolbar_elements << {:text=>I18n.t('common.show'),:path=>rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit)} if can? :show, @neuigkeit
end
end

View File

@@ -2,14 +2,27 @@ class RubrikenController < ApplicationController
before_filter {@toolbar_elements=[]}
load_and_authorize_resource
def index
@rubriken = Rubrik.all
@neuigkeiten = Neuigkeit.recent
@calentries= Calentry.public
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
end
@neuigkeiten = @rubriken.collect(&:neuigkeiten).map(&:recent).flatten
@calentries= @rubriken.collect(&:calentries).flatten
end
def intern
end
def show
if can?(:shownonpublic, Rubrik)
@rubriken = Rubrik.all
else
@rubriken = Rubrik.where(:public=>true)
end
@rubrik = Rubrik.find(params[:id])
@moderatoren=User.with_role(:newsmoderator,@rubrik)
@calentries= @rubrik.calentries
if can?(:showunpublished, Neuigkeit)
@neuigkeiten = @rubrik.neuigkeiten
else

View File

@@ -34,6 +34,7 @@ class StudienController < ApplicationController
@toolbar_elements=[{:icon=>:plus, :hicon =>'icon-plus-sign' ,:text=> I18n.t('studien.new') , :path => new_studium_path(@studium) },
{:icon=>:pencil, :hicon=>'icon-pencil',:text =>I18n.t('common.edit'),:path => edit_studium_path(@studium)},
{:icon=>:pencil, :hicon=>'icon-pencil',:text =>I18n.t('common.edit'),:path => edit_lvas_studium_path(@studium)},
{:hicon=>'icon-remove-circle', :text=> I18n.t('common.delete'),:path => studium_path(@studium), :method=> :delete,:confirm=>'Sure?' }]
@toolbar_modulgruppen =[ {:hicon=>'icon-plus-sign', :text=> I18n.t('modulgruppe.new'), :path=>new_studium_modulgruppe_path(@studium)},
@@ -41,6 +42,7 @@ class StudienController < ApplicationController
case params[:ansicht]
when 'semesteransicht'
when 'infoansicht'
when 'qualifikationsprofil'
else
params[:ansicht]="modulgruppenansicht"
end
@@ -56,6 +58,15 @@ class StudienController < ApplicationController
@toolbar_elements<<{:text =>I18n.t('studien.allestudien'),:path=>studien_path(@studium)}
end
def edit_lvas
@studium = Studium.find(params[:id])
@lvas=@studium.lvas
@semester=@studium.semester
@toolbar_elements=[{:text => I18n.t('studien.anzeigen') , :path => url_for(@studium) }]
@toolbar_elements<<{:text =>I18n.t('studien.allestudien'),:path=>studien_path(@studium)}
end
def create
@studium = Studium.new(params[:studium])
@@ -72,9 +83,13 @@ class StudienController < ApplicationController
def update
@studium = Studium.find(params[:id])
if @studium.update_attributes(params[:studium])
redirect_to url_for(@studium), notice: 'Studium was successfully updated.'
logger.info "params: #{params[:studium].inspect}"
if @studium.update_attributes(params[:studium])
if @studium.lvas.map(&:valid?).all?
redirect_to url_for(@studium), notice: 'Studium was successfully updated.'
else
render action: "edit"
end
else
render action: "edit"

View File

@@ -16,16 +16,32 @@ class ThemenController < ApplicationController
# GET /themen/1.json
def show
@thema = Thema.find(params[:id])
@fragen=@thema.fragen
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>"Verwalten", :path=>verwalten_thema_path(@thema)}]
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('thema.edit'), :path=>edit_thema_path(@thema)}]
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('thema.remove'), :path=>thema_path(@thema), :method=>:delete, :confirm=>I18n.t('thema.sure')}
respond_to do |format|
format.html # show.html.erb
format.json { render json: @thema }
format.html {
redirect_to :controller=>'themengruppen', :id=>@thema.themengruppe.id, :action=>:show, :anchor=> "thema_"+params[:id].to_s
}
format.js
end
end
def verwalten
@thema = Thema.find(params[:id])
@attachment=Attachment.new
@fragen=@thema.fragen
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>"Verwalten", :path=>verwalten_thema_path(@thema)}]
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('thema.edit'), :path=>edit_thema_path(@thema)}]
@toolbar_elements << {:hicon=>'icon-remove-circle', :text=>I18n.t('thema.remove'), :path=>thema_path(@thema), :method=>:delete, :confirm=>I18n.t('thema.sure')}
end
# GET /themen/new
# GET /themen/new.json
def new
@@ -41,6 +57,10 @@ class ThemenController < ApplicationController
# GET /themen/1/edit
def edit
@thema = Thema.find(params[:id])
unless ( @thema.wikiname.nil? || @thema.wikiname.empty? )
redirect_to edit_wiki_path(Wiki.find(@thema.id))
return
end
respond_to do |format|
format.html
format.js
@@ -66,12 +86,20 @@ class ThemenController < ApplicationController
end
end
def fragen
@thema = Thema.find(params[:thema_id])
@thema = Thema.find(params[:id])
@fragen=@thema.fragen
respond_to do |format|
format.js
end
end
def attachments
@thema = Thema.find(params[:id])
@attachments=@thema.attachments
@attachment=Attachment.new
respond_to do |format|
format.js
end
end
# PUT /themen/1
# PUT /themen/1.json
def update

View File

@@ -3,7 +3,7 @@ class ThemengruppenController < ApplicationController
# GET /themengruppen.json
load_and_authorize_resource
def index
@themengruppen = Themengruppe.order(:priority).reverse
@themengruppen = Themengruppe.public.order(:priority).reverse
@toolbar_elements = [{:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('themengruppe.new'), :path=>new_themengruppe_path()}]
@toolbar_elements = [{:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('common.verwalten'), :path=>verwalten_all_themengruppen_path()}]
@@ -13,7 +13,7 @@ class ThemengruppenController < ApplicationController
end
end
def faqs
@themengruppen = Themengruppe.order(:priority).includes(:themen,{themen: :fragen})
@themengruppen = Themengruppe.order("themengruppen.priority").includes(:themen,{themen: :fragen}).order("themen.priority").reverse
end
@@ -21,14 +21,10 @@ class ThemengruppenController < ApplicationController
# GET /themengruppen/1.json
def show
@themengruppe = Themengruppe.find(params[:id])
@themen = @themengruppe.themen.order(:priority).reverse
@themen = @themengruppe.themen.order(:priority).reverse
@toolbar_elements = []
@toolbar_elements << {:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('thema.add'), :path=>new_themengruppe_thema_path(@themengruppe)} if can? :new, Themengruppe
@toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('themengruppe.edit'), :path=>edit_themengruppe_path(@themengruppe)} if can? :edit, @themengruppe
@toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t("themengruppe.manage"), :path=>themengruppe_verwalten_path(@themengruppe)} if can? :edit, @themengruppe
@toolbar_elements << {:hicon=>'icon-remove-circle',:text=>I18n.t('themengruppe.remove'), :path=>themengruppe_path(@themengruppe), :method=>:delete,:confirm=>I18n.t('themengruppe.sure')} if can? :delete, @themengruppe
@toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t("themengruppe.manage"), :path=>themengruppe_verwalten_path(@themengruppe)} if can? :edit, @themengruppe
respond_to do |format|
format.html # show.html.erb
@@ -53,10 +49,18 @@ class ThemengruppenController < ApplicationController
end
def verwalten_all
@themengruppen =Themengruppe.order(:priority).reverse
end
@toolbar_elements = [{:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('themengruppe.new'), :path=>new_themengruppe_path()}]
end
def verwalten
@themengruppe = Themengruppe.find(params[:themengruppe_id])
@themen = @themengruppe.themen.order(:priority).reverse
@toolbar_elements =[]
@toolbar_elements << {:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('themengruppe.edit'), :path=>edit_themengruppe_path(@themengruppe)} if can? :edit, @themengruppe
@toolbar_elements << {:icon=>:plus, :hicon=>'icon-plus-sign', :text=>I18n.t('thema.add'), :path=>new_themengruppe_thema_path(@themengruppe)} if can? :new, Themengruppe
@toolbar_elements << {:hicon=>'icon-remove-circle',:text=>I18n.t('themengruppe.remove'), :path=>themengruppe_path(@themengruppe), :method=>:delete,:confirm=>I18n.t('themengruppe.sure')} if can? :delete, @themengruppe
end
def sort_themengruppen

View File

@@ -0,0 +1,46 @@
class WikisController < ApplicationController
load_and_authorize_resource
def show
@wiki = Wiki.find(params[:id])
@fragen = @wiki.fragen
@toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('wiki.edit'), :path=>verwalten_wiki_path(@wiki)}]
end
def wiki
@wiki = Wiki.find_or_init(params[:name])
@fragen = @wiki.fragen
@toolbar_elements = []
# @toolbar_elements = [{:icon=>:pencil, :hicon=>'icon-pencil', :text=>I18n.t('wiki.edit'), :path=>verwalten_wiki_path(@wiki)}]
redirect_to wiki_path(@wiki)
end
def edit
@wiki = Wiki.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
def update
@wiki = Wiki.find(params[:id])
@themen = @wiki.themengruppe.themen.order(:priority).reverse
@wiki.raw_data=params[:wiki][:raw_data]
respond_to do |format|
if @wiki.update_attributes(params[:wiki])
format.html { redirect_to verwalten_thema_path(@wiki), notice: 'Thema was successfully updated.' }
format.json { head :no_content }
format.js
else
format.html { render action: "edit" }
format.json { render json: @wiki.errors, status: :unprocessable_entity }
format.js { render action: "edit" }
end
end
end
end

View File

@@ -31,12 +31,15 @@ class Ability
# can :manage, :all
can :addfetuser, User
can :addfetadmin, User
can [:show, :index], Studium
can [:show, :index], Modulgruppe
can [:show, :index], Modul
can [:show, :index], Lva
can [:show,:index], Gallery
can [:show, :index], Themengruppe
can [:show, :index,:faqs], Themengruppe
can [:show], Thema
can [:create], Beispiel
can [:show, :index], Fetprofile
can [:show, :index],Gremium
# Rechteverwaltung fuer Studien Modul
@@ -49,16 +52,16 @@ class Ability
can [:show], Calentry
if( user.has_role?("fetuser") || user.has_role?("fetadmin"))
can :manage,:all
can :manage, Modulgruppe
can :manage, Modulgruppe
can [:show,:index], Calendar
can [:edit, :update,:new,:create,:verwalten], Calendar
can [:edit, :update,:new,:create,:verwalten], Calentry
can [:show,:index], Calendar
can [:edit, :update,:new,:create,:verwalten], Calendar
can [:edit, :update,:new,:create,:verwalten], Calentry
end
if( user.has_role?("fetadmin"))
can [:delete],Calendar
can [:delete],Calentry
end
if( user.has_role?("fetadmin"))
can [:delete],Calendar
can [:delete],Calentry
end
# Rechteverwaltung fuer Neuigkeiten
@@ -74,7 +77,10 @@ class Ability
if user.has_role?("newsadmin") || user.has_role?( "fetadmin") || user.has_role?( "fetuser")
can :manage, Rubrik
can :manage, Neuigkeit
can :shownonpublic, Rubrik
can :showunpublished, Neuigkeit
can :seeintern, User
end

View File

@@ -12,9 +12,22 @@
class Attachment < ActiveRecord::Base
has_paper_trail
attr_accessible :name, :datei
attr_accessible :name, :datei, :datei_cache
belongs_to :thema
mount_uploader :datei, AttachmentUploader
validates :thema, :presence => true
validates :name, :presence => true
def to_jq_upload
{
"id" => read_attribute(:id),
"title" => read_attribute(:title),
"description" => read_attribute(:desc),
"name" => read_attribute(:title),
"size" => datei.size,
"url" => datei.url,
"thumbnail_url" => datei.thumb.url,
"delete_type" => "DELETE"
}
end
end

View File

@@ -32,7 +32,7 @@ class Calentry < ActiveRecord::Base
resourcify
def get_public
self.public = (self.try(:object).nil?)? (self.calendar.try(:public)) : object.try(:public)
self.public = (self.try(:object).nil?)? (self.calendar.try(:public?)) : object.try(:public?)
true
end
def start_time

View File

@@ -15,19 +15,31 @@
#
class Fetprofile < ActiveRecord::Base
attr_accessible :active, :desc, :fetmailalias, :nachname, :picture, :short, :vorname, :memberships_attributes, :remove_picture, :picture_cache
attr_accessible :active, :desc, :fetmailalias, :nachname, :picture, :short, :vorname, :memberships_attributes, :remove_picture, :picture_cache, :plz, :street, :city, :instant,:skype, :telnr, :hdynr, :birth_day, :birth_month, :birth_year,:geschlecht
has_many :memberships, dependent: :delete_all
has_many :gremien, :through=> :membership
mount_uploader :picture, PictureUploader
has_paper_trail
validates :desc, :presence=>true
validates :desc, :presence=>true
validates :nachname, length:{minimum: 3},:presence=>true
validates :vorname, length:{minimum: 3},:presence=>true
validate :validate_birthday
GESCHLECHT={0=>"gendered", 1=>"maennlich", 2=>"weiblich"}
has_many :users
scope :search, ->(query) {where("nachname like ? or vorname like ? or short like ?", "%#{query}%", "%#{query}%", "%#{query}%")}
accepts_nested_attributes_for :memberships, :reject_if=>lambda{|a| a[:typ].blank?|| a[:start].blank? ||a[:gremium_id].blank?}, :allow_destroy=>true
has_many :nlinks, as: :link
def validate_birthday
unless Date.valid_date?(birth_year, birth_month, birth_day)
errors.add(:birth_month, "Invalides Datum")
errors.add(:birth_day, "Invalides Datum")
end
end
def title
self.name
end
def name
[vorname, nachname, ((short.empty?)? "": ["(",short,")"].join)].join(" ")
end
@@ -35,4 +47,15 @@ validates :desc, :presence=>true
def fetmail
(fetmailalias.nil? || fetmailalias.empty?) ? short.to_s + "@fet.at" : fetmailalias.to_s + "@fet.at"
end
def adress
connector= (self.street.nil?||self.street.empty?||(self.city.empty? && self.plz.empty?)) ? '' : ', '
self.plz.to_s + ' ' + self.city.to_s + connector.to_s + self.street.to_s
end
def birthday
if self.birth_year.nil? || self.birth_year.zero?
Date.new( Date.today.year,self.birth_month,self.birth_day)
else
Date.new( self.birth_year,self.birth_month,self.birth_day)
end
end
end

View File

@@ -14,4 +14,11 @@ class Gallery < ActiveRecord::Base
WORD_COUNT = 20
attr_accessible :datum, :desc, :name
has_many :fotos
has_many :nlinks, as: :link
scope :search, ->(query) {where("name like ? or galleries.desc like ?", "%#{query}%", "%#{query}%")}
def title
name
end
end

View File

@@ -12,21 +12,33 @@
#
class Gremium < ActiveRecord::Base
TYPEN={1=>"offiziell", 2=>"offiziell-temporär", 3 => "inoffiziell",4=>"inoffiziell-tempo", 11=> "berufungskommission"} # Kategorien, im Wesentlichen wichtig für Listung oder nicht Listung
TYPEN={1=>"offiziell", 2=>"offiziell-temporär", 3 => "inoffiziell",4=>"inoffiziell-tempo", 11=> "berufungskommission",12=> "habilitationskommission" } # Kategorien, im Wesentlichen wichtig für Listung oder nicht Listung
GESCHLECHT={0=>"saechlich", 1 => "maennlich", 2 => "weiblich"} # Geschlecht des Gremiums zur richtige Deklination
ART2FALL={0=>"des", 1=>"des",2=>"der"} # Artikel 2.Fall abhängig vom Geschlecht
FILTER={11=>I18n.t("gremium.filter.berufung.title")}
TEXT={11=>I18n.t("gremium.filter.berufung.text")}
ART2FALL={0=>"des", 1=>"des",2=>"der"} # Artikel 2.Fall abhängig vom Geschlecht
ART4FALL={0=>"das", 1=>"den",2=>"die"} # Artikel 2.Fall abhängig vom Geschlecht
FILTER={11=>I18n.t("gremium.filter.berufung.title"),12=>I18n.t("gremium.filter.habil.title")}
TEXT={11=>I18n.t("gremium.filter.berufung.text"),12=>I18n.t("gremium.filter.habil.text")}
attr_accessible :desc, :name, :typ, :geschlecht,:thema_id, :memberships_attributes
has_many :memberships # Mitgliedschaften bei dem Gremium
has_many :nlinks, as: :link
scope :search, ->(query) {where("gremien.name like ? or gremien.desc like ?", "%#{query}%", "%#{query}%")}
belongs_to :thema # Gehört zu einem Thema
scope :tabs, -> { where(:typ => [1,3]).order(:typ).order(:name) } # Gremien die in Tabs angezeigt werden (Alle Anderen nur in der Liste
# Gremium im 2. Fall für die Konstruktion "Mitglied des ... / der ... "
# Gremium im 2. Fall für die Konstruktion "Mitglied des ... / der ... "
accepts_nested_attributes_for :memberships, :reject_if=>lambda{|a| a[:typ].blank?|| a[:start].blank? ||a[:fetprofile_id].blank?}
def fall2
Gremium::ART2FALL[self.geschlecht.to_i].to_s+" "+ self.name.to_s+ ((self.geschlecht.to_i==1||self.geschlecht.to_i==0)? "s":"")
end
def title
name
end
def fall4
Gremium::ART4FALL[self.geschlecht.to_i].to_s+" "+ self.name.to_s+ ((self.geschlecht.to_i==1||self.geschlecht.to_i==0)? "":"")
end
end

View File

@@ -36,14 +36,19 @@
class Lva < ActiveRecord::Base
ERLAUBTE_TYPEN = ['VO', 'UE', 'VU', 'LU', 'SE', 'andere'];
has_paper_trail :ignore=>[:desc, :pruefungsinformation]# Versionsverfolgung
translates :desc,:pruefungsinformation, :fallbacks_for_empty_translations => true, :versioning=>true
attr_accessible :desc, :ects, :lvanr, :name, :stunden, :modul_ids, :semester_ids, :pruefungsinformation, :lernaufwand, :typ, :lecturer_ids
has_and_belongs_to_many :modul,:uniq=>true # Gehört zu einem Modul
has_and_belongs_to_many :semester
#Gehört zu einem Semester( derzeit nicht implementiert)
has_many :beispiele , :class_name => "Beispiel"
has_and_belongs_to_many :lecturers
translates :desc,:pruefungsinformation, :fallbacks_for_empty_translations => true, :versioning=>true
has_many :nlinks, as: :link
scope :search, ->(query) {where("name like ? or lvas.desc like ?", "%#{query}%", "%#{query}%")}
validates :lvanr,:format=>{ :with => /^[0-9][0-9][0-9]\.[0-9A][0-9][0-9]$/}, :presence=>true, :uniqueness=>true # , :uniqueness=>true # LVA-Nummer muss das Format 000.000 besitzen (uniqueness?) oder 000 für nicht
validates_presence_of :ects # ECTS vorhanden?
@@ -52,8 +57,15 @@ class Lva < ActiveRecord::Base
validates_presence_of :stunden # Stunden Eingetragen?
validates_presence_of :modul # Zugehöriges Modul eingetragen?
# (zumindest eines)
def typ_n
typ=="andere" ? "" : typ
end
def title
self.name
end
def full_name
return self.typ + ' ' + self.name
return self.typ_n + ' ' + self.name
end
def add_semesters
# Diese Methode fügt die Instanz automatisch zu allen Studien als "Ohne Semesterempfehlung" (Semester 0) zu, bei denen die Instanz im Studium noch nicht vorkommt.
@@ -69,7 +81,6 @@ class Lva < ActiveRecord::Base
end
##
# Lade Daten aus TISS und füge diese in die Datenbank ein.
def tisshash(semester)
@@ -165,4 +176,52 @@ class Lva < ActiveRecord::Base
end
def update_multiple(hash)
newlvas=[]
params["lvas"].each do |i,l|
lva=Lva.where(:lvanr=>l["lvanr"]).first if lva.nil?
lva=Lva.new(l) if lva.nil?
lva.name=l["name"]
lva.lvanr=l["lvanr"]
lva.ects=l["ects"]
descr = l["desc"]
lva.desc= (descr.empty?) ? "<div></div>" : descr
lva.semester=Semester.where(:id=>l["semester_ids"].map(&:to_i))
lva.stunden=l["stunden"]
pr =l["pruefungsinformation"]
lva.pruefungsinformation= (pr.empty?) ? "<div></div>" : pr
lva.lernaufwand=l["lernaufwand"]
lva.typ=l["typ"]
lva.save
newlvas<<lva #
end
newlvas
end
def self.update_multiple_with_modul(hash,modul)
newlvas=[]
hash.each do |i,l|
lva=Lva.where(:lvanr=>l["lvanr"]).first if lva.nil?
lva=Lva.new(l) if lva.nil?
lva.modul<<modul
lva.modul.uniq!
lva.name=l["name"]
lva.lvanr=l["lvanr"]
lva.ects=l["ects"]
descr = l["desc"]
lva.desc= (descr.empty?) ? "<div></div>" : descr
lva.semester=Semester.where(:id=>l["semester_ids"].map(&:to_i))
lva.stunden=l["stunden"]
pr =l["pruefungsinformation"]
lva.pruefungsinformation= (pr.empty?) ? "<div></div>" : pr
lva.lernaufwand=l["lernaufwand"]
lva.typ=l["typ"]
lva.save
newlvas<<lva #
end
newlvas
end
end

View File

@@ -14,6 +14,7 @@
class Membership < ActiveRecord::Base
TYPEN={-2=>"VorsitzendeR", -1=>"stv VorsitzendeR", 0=>"2. stv VorsitzendeR", 1=>"Mitglied",2=> "Ersatzmitglied",3=>"VerantwortlicheR"}
TYPEN_g={0=>TYPEN, 1=>{ -2=>"Vorsitzender", -1=>"stv Vorsitzender", 0=>"2. stv Vorsitzender", 1=>"Mitglied",2=> "Ersatzmitglied",3=>"Verantwortlicher"},2=>{-2=>"Vorsitzende", -1=>"stv Vorsitzende", 0=>"2. stv Vorsitzende", 1=>"Mitglied",2=> "Ersatzmitglied",3=>"Verantwortliche"}}
attr_accessible :fetprofile_id, :gremium_id, :start, :stop, :typ
belongs_to :fetprofile
belongs_to :gremium

View File

@@ -12,14 +12,45 @@
#
class Modul < ActiveRecord::Base
attr_accessible :desc,:name, :depend, :studium_id, :modulgruppe_ids
attr_accessible :desc,:name, :depend, :studium_id, :modulgruppen, :modulgruppe_ids
has_and_belongs_to_many :lvas , :uniq=>true
has_and_belongs_to_many :modulgruppen
validates :modulgruppen, :presence=>true # Ein Modul muss zu einer Modulgruppe gehören
validates :modulgruppen, :presence=>true # Ein Modul muss zu einer Modulgruppe gehören
validates :name, :presence=>true # Ein Modul muss einen Namen haben
translates :desc,:depend,:name, :versioning =>true, :fallbacks_for_empty_translations => true
def self.update_multiple(hash)
m= []
if hash.is_a? Hash
hash.each do |i,h|
if i.to_i == 0
unless h["name"].empty?
md=Modul.new(:name=>h["name"],:desc=>h["desc"],:depend=>h["depend"])
md.modulgruppen=Modulgruppe.where(:id => h["modulgruppe_ids"].map(&:to_i))
md.save
m << md
end
else
md=Modul.find(h["id"].to_i)
md.name=h["name"]
md.desc=h["desc"]
md.depend=h["depend"]
md.modulgruppen=Modulgruppe.where(:id => h["modulgruppe_ids"].map(&:to_i))
m << md
end
end
else
hash.each do |h|
unless h["name"].empty?
md=Modul.new(:name=>h["name"],:desc=>h["desc"],:depend=>h["depend"])
md.modulgruppen=Modulgruppe.where(:id => h["modulgruppe_ids"].map(&:to_i))
md.save
m << md
end
end
end
m
end
end

View File

@@ -16,13 +16,20 @@ class Modulgruppe < ActiveRecord::Base
attr_accessible :name, :phase, :typ,:desc, :studium_id, :modul_ids
belongs_to :studium, :foreign_key => "studium_id"
has_and_belongs_to_many :moduls
has_many :lvas, :through=>:moduls
resourcify
validates :studium_id, :presence => true # Bei der Abfrage ist student_id entscheidend
validates :studium, :presence => true # Wird gesetzt, um das richtige Feld zu melden bei Fehlern
validates :name, :uniqueness =>{:scope => :studium_id}, :presence=>true # Pro Studium darf ein Name nur einmal vorkommen
validates :phase, :inclusion => {:in => [1, 2, 3, 4]}
validates :typ, :inclusion => {:in => ["Pflicht","Vertiefungspflicht","Wahl"] }
translates :desc, :versioning =>true,:fallbacks_for_empty_translations => true
def long_name
name + "(" + self.studium_name + ")"
end
def studium_name
self.studium.nil? ? "Kein Studium vorhanden" : self.studium.name
end
end

View File

@@ -23,18 +23,27 @@ class Neuigkeit < ActiveRecord::Base
has_many :calentries, as: :object
mount_uploader :picture, PictureUploader
scope :published, -> {where("datum <= ? AND datum IS NOT NULL", Time.now.to_date).order(:datum).reverse_order}
scope :recent, -> { published.limit(15)}
default_scope order(:datum).reverse_order
#scope :published, -> {where("datum <= ? AND datum IS NOT NULL", Time.now.to_date)}
scope :recent, -> { published.limit(10)}
scope :unpublished, -> {where("datum >= ? OR datum IS NULL", Date.today)}
scope :public, ->{includes(:rubrik).where("rubriken.public"=>:true)}
scope :public, ->{includes(:rubrik).where("rubriken.public"=>true)}
scope :intern, ->{includes(:rubrik).where("rubriken.public"=>false)}
scope :search, ->(query) {where("text like ? or title like ?", "%#{query}%", "%#{query}%")}
LINKTYPES=["Thema", "Gallery", "Lva","Studium","Fetprofile", "Gremium"]
accepts_nested_attributes_for :calentries, :allow_destroy=>true , :reject_if=> lambda{|a| a[:start].blank?}
before_validation :sanitize
has_many :nlinks
def self.published
where("datum <= ? AND datum IS NOT NULL", Time.now.to_date)
end
def datum_nilsave
self.datum.nil? ? Time.now + 42.years : self.datum
end
def public
self.rubrik.public && self.datum_nilsave >=Time.now.to_date
def public?
self.rubrik.public
end
def published?
self.datum_nilsave>=Time.now.to_date
@@ -50,7 +59,7 @@ class Neuigkeit < ActiveRecord::Base
self.title
end
def text_first_words
md = /<p>(?<text>[\w\s,\.!\?]*)/.match self.text
md = /<p>(?<text>[^\<\>]*)/.match Sanitize.clean(self.text,:elements=>['p'])
words=md[:text].split(" ") unless md.nil?
if words.nil? || words.empty?
"...."

10
app/models/nlink.rb Normal file
View File

@@ -0,0 +1,10 @@
class Nlink < ActiveRecord::Base
attr_accessible :link_id, :link_type, :neuigkeit_id, :neuigkeit,:link, :sort, :title
belongs_to :neuigkeit
belongs_to :link, :polymorphic=>true
validates :neuigkeit, :presence=>true
validates :link, :presence=>true
validates :link_id, :uniqueness=>{:scope=>[:neuigkeit_id,:link_type]}
end

View File

@@ -13,6 +13,7 @@
class Rubrik < ActiveRecord::Base
attr_accessible :desc, :name, :prio, :calendar, :public
has_many :neuigkeiten, :class_name => "Neuigkeit"
has_many :published, :class_name => "Neuigkeit", :conditions=>["Neuigkeit.published"]
has_many :calentries, :through => :neuigkeiten, :as=>:object
resourcify
has_one :calendar

View File

@@ -27,19 +27,32 @@
# created_at :datetime not null
# updated_at :datetime not null
class Studium < ActiveRecord::Base
attr_accessible :desc, :name,:abkuerzung, :typ, :zahl, :semester, :picture, :picture_cache
attr_accessible :desc, :name,:abkuerzung, :typ, :zahl, :semester, :picture, :picture_cache, :qualifikation,:struktur, :jobmoeglichkeiten, :lvas_attributes
has_many :modulgruppen, inverse_of: :studium, :class_name => "Modulgruppe", :dependent => :destroy
scope :search, ->(query) {where("name like ? or studien.desc like ?", "%#{query}%", "%#{query}%")}
has_many :moduls, :through=>:modulgruppen
has_many :lvas, :through=>:moduls
has_many :semester, :dependent => :destroy
validates :abkuerzung, :length=>{:maximum=>5}, :format=>{:with=>/^[a-zA-z]{0,5}$/}
validates :abkuerzung, :length=>{:maximum=>5}, :format=>{:with=>/^[a-zA-z]{0,5}$/}
validates :typ, :inclusion => {:in => ["Bachelor","Master"] }
validates :name, :uniqueness => true, :presence=>true
validates :zahl, :presence=>true, :format=>{:with=>/^[0-9A-Z]{4,10}$/}, :uniqueness => true
mount_uploader :picture, PictureUploader
translates :desc,:shortdesc, :versioning =>true,:fallbacks_for_empty_translations => true
accepts_nested_attributes_for :lvas #, :allow_destroy=>true # , :reject_if=> lambda{|a| a[:name].blank?}
translates :desc,:shortdesc, :qualifikation,:struktur, :jobmoeglichkeiten, :versioning =>true,:fallbacks_for_empty_translations => true
def title_context
return self.abkuerzung.to_s.strip.empty? ? self.name : self.abkuerzung
end
has_many :nlinks, as: :link
def title
self.name
end
def batch_add_semester
# Semester automatisch zu Studien hinzufügen
if self.typ == "Bachelor"

View File

@@ -16,9 +16,24 @@ class Thema < ActiveRecord::Base
has_many :attachments
belongs_to :themengruppe, :foreign_key => "themengruppe_id"
has_one :gremium
has_many :nlinks, as: :link
validates :themengruppe, :presence => true
validates :title, :presence => true
validates :text, :presence => true
scope :search, ->(query) {where("text like ? or title like ?", "%#{query}%", "%#{query}%")}
translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true
def is_wiki?
wikiname.nil? || wikiname.empty?
end
def text_first_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..100].join(" ")+ " ..." unless words.nil?
end
end
end

View File

@@ -10,12 +10,27 @@
class Themengruppe < ActiveRecord::Base
WORD_COUNT = 50
attr_accessible :text, :title, :picture,:priority
attr_accessible :text, :title, :picture, :priority, :public
has_many :themen, class_name: 'Thema'
has_many :fragen, through: :themen
mount_uploader :picture, PictureUploader
validates :title, :presence => true
validates :text, :presence => true
translates :title,:text, :versioning =>true, :fallbacks_for_empty_translations => true
scope :intern,-> {where(:public=>false)}
def self.find_wiki_default
where(:wiki_default=>true).first
end
def make_wiki_default
Themengruppe.where(:wiki_default=>:true).update_all(:wiki_default=>:false)
self.wiki_default=true;
self.save;
end
end

73
app/models/wiki.rb Normal file
View File

@@ -0,0 +1,73 @@
class Wiki < Thema
validates :wikiname, :uniqueness=>true, :presence=>true
after_initialize :load_wiki
attr_accessible :wikiname, :wikiformat, :hidelink, :raw_data
WIKIFORMATS={nil=> :textile, 0 =>:textile, 1=> :mediawiki}
def self.find_or_init(name)
w = Wiki.where(:wikiname=>name).first
page = is_file_availaible(name)
if w.nil?
unless page.nil?
w=Wiki.new(:wikiname=>name, :title=>name, :wikiformat=>Wiki::WIKIFORMATS.invert[page.format], :hidelink=>true)
else
w=Wiki.new(:wikiname=>name, :title=>name, :wikiformat=>0, :hidelink=>true)
wiki = Gollum::Wiki.new("../wiki.git", :base_path => "/wiki")
page=wiki.write_page(name, :textile, "ioi", self.commit)
w.reload_page
end
w.themengruppe = Themengruppe.find_wiki_default
w.raw_data="Neues Wiki"
w.save
end
w
end
def raw_data
self.page.raw_data
end
def raw_data=(data)
self.get_page(self.wikiname)
self.wiki.update_page(self.page, self.wikiname, Wiki::WIKIFORMATS[self.wikiformat], data, self.commit)
self.text=self.page.formatted_data
end
def page
self.get_page(wikiname) if @page.nil?
@page
end
def wiki
@wiki
end
def reload_page
self.get_page(self.wikiname)
end
protected
def self.is_file_availaible(name)
wiki = Gollum::Wiki.new("../wiki.git", :base_path => "/wiki")
wiki.page(name)
end
def load_wiki
@wiki = Gollum::Wiki.new("../wiki.git", :base_path => "/wiki")
end
def get_page(name)
@page= @wiki.page(name)
@page=self.wiki.write_page(self.wikiname, Wiki::WIKIFORMATS[self.wikiformat]," ",self.commit) if @page.nil?
@page
end
def commit
{message: "RailsUpdate", name:"SomeUser", email: "ttt@t"}
end
def self.commit
{message: "RailsUpdate", name:"SomeUser", email: "ttt@t"}
end
end

View File

@@ -6,6 +6,9 @@ class AttachmentUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
def root
Rails.root.join 'public/'
end
# Choose what kind of storage to use for this uploader:
storage :file
@@ -20,6 +23,9 @@ class AttachmentUploader < CarrierWave::Uploader::Base
version :thumb do
process :resize_to_fill => [64, 64]
end
version :thumb_small do
process :resize_to_fill => [32, 32]
end
# Provide a default URL as a default if there hasn't been a file uploaded:
# def default_url

View File

@@ -0,0 +1,9 @@
<% data_ext = attachment.datei.file.extension.downcase %>
<% if (!["jpg","png","jpeg"].find_index(data_ext).nil?) %>
<%= image_tag attachment.datei.thumb.url %>
<% else %>
<%= image_tag "pdf-logo.jpg" %>
<% end %>
<%= attachment.name %>

View File

@@ -0,0 +1,143 @@
<div class="container-fluid">
<%= semantic_form_for [@thema,@attachment], :remote=>true, :html => { :multipart => true, :id => "fileupload" } do |f| %>
<!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
<div class="row-fluid">
<div class="span7">
<div class="fileupload-buttonbar">
<!-- The fileinput-button span is used to style the file input field as button -->
<span class="btn btn-success fileinput-button">
<i class="icon-plus icon-white"></i>
<span>Add files...</span>
<%= f.file_field :datei, :multiple=>true %>
<% f.input :thema %>
</span>
<button type="submit" class="btn btn-primary start">
<i class="icon-upload icon-white"></i>
<span>Start upload</span>
</button>
<button type="reset" class="btn btn-warning cancel">
<i class="icon-ban-circle icon-white"></i>
<span>Cancel upload</span>
</button>
<button type="button" class="btn btn-danger delete">
<i class="icon-trash icon-white"></i>
<span>Delete</span>
</button>
<input type="checkbox" class="toggle">
</div>
<div class="span5">
<!-- The global progress bar -->
<div class="progress progress-success progress-striped active fade">
<div class="bar" style="width:100%;"></div>
</div>
</div>
</div>
</div>
<!-- The loading indicator is shown during image processing -->
<div class="fileupload-loading"></div>
<br>
<!-- The table listing the files available for upload/download -->
<table class="table table-striped"><tbody class="files" data-toggle="modal-lva" data-target="#modal-lva"></tbody>
</table>
<% end %>
</div>
<script>
var fileUploadErrors = {
maxFileSize: 'File is too big',
minFileSize: 'File is too small',
acceptFileTypes: 'Filetype not allowed',
maxNumberOfFiles: 'Max number of files exceeded',
uploadedBytes: 'Uploaded bytes exceed file size',
emptyResult: 'Empty file upload result'
};
</script>
<!-- The template to display files available for upload -->
<script id="template-upload" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-upload fade">
<!--<td class="preview"><span class="fade"></span></td>-->
<td class="name"><span>{%=file.name %}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
{% if (file.error) { %}
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else if (o.files.valid && !i) { %}
<td>
<div class="progress progress-success progress-striped active"><div class="bar" style="width:0%;"></div></div>
</td>
<td class="start">{% if (!o.options.autoUpload) { %}
<button class="btn btn-primary">
<i class="icon-upload icon-white"></i>
<span>{%=locale.fileupload.start%}</span>
</button>
{% } %}</td>
{% } else { %}
<td colspan="2"></td>
{% } %}
<td class="cancel">{% if (!i) { %}
<button class="btn btn-warning">
<i class="icon-ban-circle icon-white"></i>
<span>{%=locale.fileupload.cancel%}</span>
</button>
{% } %}</td>
</tr>
{% } %}
</script>
<!-- The template to display files available for download -->
<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
<tr class="template-download fade">
{% if (file.error) { %}
<td></td>
<td class="name"><span>{%=file.name%}</span></td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td class="error" colspan="2"><span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}</td>
{% } else { %}
<!--<td class="preview">{% if (file.thumbnail_url) { %}
<a href="{%=file.url%}" title="{%=file.name%}" rel="lva" download="{%=file.name%}"><img src="{%=file.thumbnail_url%}"></a>
{% } %}</td>-->
<td class="name">
<a href="{%=file.url%}" title="{%=file.name%}" rel="{%=file.thumbnail_url&&'lva'%}" download="{%=file.name%}">{%=file.name%}</a>
</td>
<td class="size"><span>{%=o.formatFileSize(file.size)%}</span></td>
<td colspan="2"></td>
{% } %}
<td class="delete">
<button class="btn btn-danger" data-type="{%=file.delete_type%}" data-url="{%=file.delete_url%}">
<i class="icon-trash icon-white"></i>
<span>{%=locale.fileupload.destroy%}</span>
</button>
<input type="checkbox" name="delete" value="1">
</td>
</tr>
{% } %}
</script>
<script type="text/javascript" charset="utf-8">
$(function () {
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload();
//
// Load existing files:
$.getJSON($('#fileupload').prop('action'), function (files) {
var fu = $('#fileupload').data('blueimpFileupload'),
template;
fu._adjustMaxNumberOfFiles(-files.length);
console.log(files);
// no Download on Upload form
//template = fu._renderDownload(files)
//.appendTo($('#fileupload .files'));
// Force reflow:
fu._reflow = fu._transition && template.length &&
template[0].offsetWidth;
template.addClass('in');
$('#loading').remove();
});
$('#attachment_datei').attr('name', 'attachment[datei]');
$('#attachment_datei').fileupload();
});
</script>

View File

@@ -1,18 +0,0 @@
<p id="notice"><%= notice %></p>
<p>
<b>Name:</b>
<%= @beispiel.name %>
</p>
<p>
<b>Desc:</b>
<%= @beispiel.desc %>
<%= @beispiel.beispieldatei.url %>
</p>
<p>
<%= @beispiel.lva.name %>
</p>
<%= link_to 'Edit', edit_beispiel_path(@beispiel) %> |
<%= link_to 'Back', beispiele_path %>

View File

@@ -1,5 +1,7 @@
<div class="contentbox">
<%= image_tag("/iconnavy/time.png") %>
<% image_tag("/iconnavy/time.png") %>
<%= fa_icon("calendar 2x") %>
<% if calentry.start.to_date == calentry.ende.to_date
format=:timeonly
else

View File

@@ -1,6 +1,7 @@
<div class="row-fluid">
<div class="span1"></div><div class="span1">
<%= image_tag("/icon_kalender_small.png") %>
<%= fa_icon("calendar 2x") %>
</div>
<div class="span4">
<%= f.input :start, :as => :datepicker %></div><div class="span4">

View File

@@ -15,7 +15,7 @@
</div>
</div>
<div class="row-fluid">
<div class="span4"> <%= f.input :active %></div>
<div class="span4"> <%= f.input :active %> <%= f.input :geschlecht,:as=>:select, :collection=>Fetprofile::GESCHLECHT.invert %></div>
<div class="span4">
<%= image_tag(@fetprofile.picture.thumb.url) unless @fetprofile.picture.nil? %>
<%= f.file_field :picture %>
@@ -28,24 +28,35 @@
<div class="span4"> <%= f.input :fetmailalias %></div>
</div>
<% @memberships.each do |m| %>
<div class="row-fluid">
<div class="span6">
Adresse:
<%= f.semantic_fields_for :memberships, m do |membership| %>
<div class="row-fluid">
<div class="span3"><%= membership.input :start, :as=>:datepicker, :prepend=>"von",:label=>false%></div>
<div class="span3"><%= membership.input :stop, :as=>:datepicker,:label=>false, :prepend =>"bis" %></div>
<div class="span2"><%= membership.input :typ ,:as=>:select, :collection=>Membership::TYPEN.invert, :label=>false %></div>
<div class="span3"><%= membership.input :gremium, :label=>false %>
<%=f.input :street %>
<%=f.input :plz %>
<%=f.input :city %>
KOntakt:
<%=f.input :instant %>
<%=f.input :skype %>
<%=f.input :telnr %>
<%=f.input :hdynr %>
</div>
<div class="span1"><%= membership.check_box :_destroy %> <%= I18n.t 'common.delete' %></div>
</div>
<% end %>
<% end %> <% end %>
<div class="span6">
Geburtstag:
<%=f.input :birth_day %>
<%=f.input :birth_month %>
<%=f.input :birth_year %>
</div>
</div>
<div id="memberships_form_list">
<% @memberships.each do |m| %>
<%= render partial:"membership_fields", object: m , locals: {:f=>f} %>
<% end %>
</div>
<% end %>
<div class="row-fluid">
<div class="span12">
<%= f.actions do %>

View File

@@ -0,0 +1,16 @@
<p>
<b>Geburtstag</b> <%= %>
</p>
<p>
<b>Adresse:</b>
<%= interninfo.plz %>
<%= interninfo.city %>,
<%= interninfo.street %>
</p>
<p>
<%= raw("<b>Telefon: </b>")+ interninfo.telnr + "<br>" unless interninfo.telnr.empty?%>
<%= raw("<b>Handy: </b>") +interninfo.hdynr unless interninfo.hdynr.empty? %><br>
<%= raw("<b>Skype: </b>") +interninfo.skype unless interninfo.skype.empty? %><br>
<%= raw("<b>Instant Messaging: </b>") +interninfo.instant unless interninfo.instant.empty? %><br>
</p>

View File

@@ -0,0 +1,12 @@
<tr>
<td> <%= link_to internrow.name, internrow %>
</td>
<td> <%= internrow.adress %></td>
<td>
<%= raw("Telefon: ")+ internrow.telnr + "<br>" unless internrow.telnr.nil? || internrow.telnr.empty?%>
<%= raw("Handy: ") +internrow.hdynr + raw("<br>") unless internrow.hdynr.nil? || internrow.hdynr.empty? %>
<%= raw("Skype: ") +internrow.skype + raw("<br>") unless internrow.skype.nil? || internrow.skype.empty? %>
<%= raw("Instant Messaging: ") +internrow.instant + raw("<br>") unless internrow.instant.nil? || internrow.instant.empty? %>
</td>
<td><%= internrow.fetmail %></td>
</tr>

View File

@@ -0,0 +1,13 @@
<%= f.semantic_fields_for :memberships, membership_fields do |membership| %>
<table><tr><td>
<%= membership.input :start, :as=>:datepicker, :prepend=>"von",:label=>false , :input_html => { :style => "width:6em"} %>
</td><td>
<%= membership.input :stop, :as=>:datepicker,:label=>false, :prepend =>"bis" , :input_html => { :style => "width:6em"}%></td><td>
<%= membership.input :typ ,:as=>:select, :collection=>Membership::TYPEN.invert, :label=>false , :input_html => { :style => "width:12em" }%></td><td>
<%= membership.input :gremium, :label=>false %>
</td><td>
<%= membership.check_box :_destroy %> <%= I18n.t 'common.delete' %></td></tr></table>
<% end %>

View File

@@ -0,0 +1,10 @@
<div class="media">
<span class="pull-left">
<%= image_tag nlink.picture.thumb.url %>
</span>
<div class="media-body">
<h2><%= nlink.title %></h2>
</div>
</div>

View File

@@ -18,7 +18,7 @@
<% end %>
<li <%= (request.fullpath == fetprofiles_path(filter: "notactive")|| request.fullpath == fetprofiles_path) ? 'class="active"'.html_safe : ''%> >
<li <%= (request.fullpath == fetprofiles_path(filter: "notactive")) ? 'class="active"'.html_safe : ''%> >
<%= link_to I18n.t('profile.notactive_members') , fetprofiles_path( filter: "notactive") %>
</li>

View File

@@ -0,0 +1,5 @@
<table style="width:100%" class="table table-striped">
<% @fetprofiles.each do |item| %>
<%= render partial: "internrow", object: item %>
<% end %>
</table>

View File

@@ -10,10 +10,15 @@
<p>
<%= @fetprofile.fetmail %>
</p>
<p>
respond_to do |format|
format.html # index.html.erb
format.json { render json: @fetprofiles }
end
<p>
<%= @fetprofile.desc %>
</p>
<%= render partial: "interninfo", object: @fetprofile if can?(:seeintern, @fetprofile) %>
<ul>
<% @memberships.each do |m| %>
<li>

View File

@@ -10,3 +10,5 @@
<%= f.action :submit, :as => :input %>
<% end %>
<% end %>
<%= tinymce %>

View File

@@ -10,3 +10,4 @@
<%= f.action :submit, :as => :input %>
<% end %>
<% end %>
<%= tinymce %>

View File

@@ -0,0 +1,21 @@
<div class="media gallery-block">
<div class="pull-left" href="#">
<%= if(nlink.fotos.empty?)
image_tag "no_image_128.png", {:class => "img-rounded"}
else
image_tag nlink.fotos.sample.datei.big_thumb.url, {:class => "img-rounded"}
end %>
</div>
<div class="media-body">
<small class="pull-left"><%= nlink.fotos.size.to_s + " " + I18n.t('fotos.bilder')%> </small>
<small class="pull-right"><%=I18n.l(nlink.try(:datum).try(:to_date)) unless nlink.try(:datum).try(:to_date).nil? %></small></br>
<h1><%= nlink.name %></h1>
<p>
<%= if nlink.desc.split.size > Gallery::WORD_COUNT
nlink.desc.split[0..Gallery::WORD_COUNT].join(" ") + " ..."
else
nlink.desc
end%>
</p>
</div>
</div>

View File

@@ -13,8 +13,13 @@
end %>
</div>
<div class="media-body">
<small class="pull-left"><%= gallery.fotos.size.to_s + " " + I18n.t('fotos.bilder')%> </small>
<small class="pull-right"><%=I18n.l(gallery.try(:datum).try(:to_date)) unless gallery.try(:datum).try(:to_date).nil? %></small></br>
<small class="pull-left">
<%= gallery.fotos.size.to_s + " " + I18n.t('fotos.bilder')%>
</small>
<small class="pull-right">
<%=I18n.l(gallery.try(:datum).try(:to_date)) unless gallery.try(:datum).try(:to_date).nil? %>
</small>
</br>
<h1><%= gallery.name %></h1>
<p>
<%= if gallery.desc.split.size > Gallery::WORD_COUNT

View File

@@ -7,35 +7,29 @@
<%= f.input :thema, :as=> :select, :collection => Thema.all %>
<% f.inputs :for => :memberships, :objects=>@memberships do |membership,i| %>
<div class="row-fluid">
<div class="span1"></div>
<div class="span3"><%= membership.input :start, :as=>:datepicker, :prepend=>"von",:label=>false%></div>
<div class="span3"><%= membership.input :stop, :as=>:datepicker,:label=>false, :prepend =>"bis" %></div>
<div class="span2"><%= membership.input :typ ,:as=>:select, :collection=>Membership::TYPEN.invert, :label=>false %></div>
<div class="span3"><%= membership.input :fetprofile, :as=>:select, :label=>false %></div>
</div>
<% end %>
<% @memberships.each do |m| %>
<% @memberships.each do |m| %>
<%= f.semantic_fields_for :memberships, m do |memberships_attributes| %>
<div class="row-fluid">
<div class="span1"></div>
<div class="span3"><%= memberships_attributes.input :start, :as=>:datepicker, :prepend=>"von",:label=>false%></div>
<div class="span3"><%= memberships_attributes.input :stop, :as=>:datepicker,:label=>false, :prepend =>"bis" %></div>
<div class="span2"><%= memberships_attributes.input :typ ,:as=>:select, :collection=>Membership::TYPEN.invert, :label=>false %></div>
<div class="span3"><%= memberships_attributes.input :fetprofile, :as=>:select, :label=>false %></div>
<div class="span11">
<table>
<tr><td><%= memberships_attributes.input :start, :as=>:datepicker, :prepend=>"von",:label=>false , :input_html => { :style => "width:6em" } ,:value=>Proc.new { |c| I18n.l(c) }%>
</td>
<td>
<%= memberships_attributes.input :stop, :as=>:datepicker,:label=>false, :prepend =>"bis" , :input_html => { :style => "width:6em"},:value_method=>Proc.new { |c| I18n.l(c) }%>
</td>
<td>
<%= memberships_attributes.input :typ ,:as=>:select, :collection=>Membership::TYPEN.invert, :label=>false, :input_html => { :style => "width:12em" } %>
</td>
<td><%= memberships_attributes.input :fetprofile, :as=>:select, :label=>false %></td>
</tr>
</table>
</div>
</div>
<% end %>
<% end %>
<% end %>
<% end %>
<% end %>
<%= f.actions do %>
<%= f.action :submit, :as => :input %>
@@ -43,3 +37,9 @@
<% end %>
<script>$('.datepicker').datepicker()</script>
<%= tinymce %>

View File

@@ -0,0 +1,2 @@
<h2><%=fa_icon("users 2x")+ nlink.name %></h2>
<p><%= raw(nlink.desc) %></p>

View File

@@ -3,7 +3,9 @@
<h1>Alle Gremien</h1>
<% unless params[:filter].nil? %>
<p><%= Gremium::TEXT[params[:filter]] %></p>
<h1><%= Gremium::FILTER[params[:filter].to_i] %></h1>
<p><%= Gremium::TEXT[params[:filter].to_i] %></p>
<% end %>
<ul class="unstyled fetprofile_list">
@@ -12,7 +14,7 @@
<li>
<%= link_to g do %>
<h2><%= g.name %></h2>
<p><%= g.desc %></p>
<p><%= g.desc.html_safe %></p>
<% end %>
</li>
<% end %>

View File

@@ -11,7 +11,11 @@
<%= @gremium.desc.html_safe %>
</p>
<% unless @gremium.thema.nil? %>
<p><%= link_to "Mehr zum Gremium lesen ..." ,themengruppe_path(@gremium.thema.themengruppe , {:thema=>@gremium.thema.id})%></p>
<p>
<%= link_to thema_path(@gremium.thema) do%>
<%= fa_icon "book 2x border" %> Mehr über <%=@gremium.fall4 %> erfahren
<% end %>
</p>
<% end %>
</div>
@@ -34,6 +38,15 @@
<% end %>
</div>
<% end %>
<div class="row-fluid">
<div class="span12">
<ul class="unstyled">
<% @gremium.nlinks.each do |l| %>
<li><%= render l.neuigkeit if can? :show, l.neuigkeit %></li>
<% end %>
</ul>
</div>
</div>
</div>
</div>
<%= link_to I18n.t('common.edit'), edit_gremium_path(@gremium) %>

View File

@@ -1,4 +1,5 @@
<h1>Listing gremien</h1>
<%= render 'layouts/pretty_toolbar' %>
<div class="container-fluid">
<% @gremien.each do |gremium| %>
<div class="row-fluid">
@@ -38,7 +39,7 @@
</table>
<br />
<%= render 'layouts/pretty_toolbar' %>

View File

@@ -1,6 +1,5 @@
<div class="content-wrap content-column">
<h1><%= I18n.t('home.willkommen') %></h1>
<p><%= I18n.t('home.hallobeiderfet') %></p>
<h1><%= I18n.t('home.willkommen') %></h1></p>
<ul class="unstyled linkbox-list" style="max-width:70em">
<% @neuigkeiten.each do |n| %>
<li><%= render n if can?(:show, n) %> </li>
@@ -11,7 +10,7 @@
</p>
<div class="alert">
<h2>Beta Test</h2>
<p>Die Webseite befindet sich derzeit in einem Entsicklungsstadium,
<p>Die Webseite befindet sich derzeit in einem Entwicklungsstadium,
volle Funktionsfähigkeit ist noch nicht erreicht. Bitte Featurerequests und
Fehlermeldungen auf GitHub melden.
</p>

View File

@@ -0,0 +1,31 @@
<h1> FET Intern NEU </h1>
<div class="container-fluid">
<div class="row-fluid">
<div class="span6">
<%= link_to "Adressliste", internlist_fetprofiles_path %>
<%= link_to "Internes Nachschlagewerk" %>
<ul class="unstyled linkbox-list">
<li>
<% @themengruppen.each do |themengruppe| %>
<div class="container-fluid">
<%= render themengruppe if can?(:show,themengruppe)%>
</div>
<% end %>
</li>
</ul>
</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 +1,10 @@
<%= I18n.t "home.kontakt" %>
<div class="content-column content-wrap">
<h1>Kontakt</h1>
<p>
<%= I18n.t "home.kontakt" %>
</p>
<h2>Service</h2>
<h2>Impressum</h2>
<h2>Credits</h2>
</div>

View File

@@ -1,6 +1,6 @@
<div class="content-wrap content-column">
<%= semantic_form_for :search,:remote=>true, :url=>search_home_index_path, :html=>{:id=>"search_form", :method=>'get'} do |f| %>
<%= f.input :query, :input_html => { :name => 'query' } %>
<%= semantic_form_for :search,:remote=>true, :url=>search_home_index_path, :html=>{:id=>"search_form",:class=>"navbar-search", :method=>'get'} do |f| %>
<%= f.input :query, :input_html => { :name => 'query' } , :label=>false, :class=>"search-query" %>
<% end %>
<script>
$( document ).ready(function() {

View File

@@ -17,9 +17,12 @@ Im angelegten Verzeichnis den bundle installer ausführen.
<pre>sudo gem install bundler</pre>
ImageMagick,sqlite3 installieren
<pre>sudo apt-get install libmagickwand-dev libsqlite3-dev nodejs</pre>
<pre>sudo apt-get install libmysql-ruby libmysqlclient-dev</pre>
gegebenenfalls g++ installieren
<pre>cd fetsite
sudo bundle install
sudo bundle install
</pre>
Falls Fehler auftreten je nach Fehlermeldung Pakete mit <code>apt-get</code> nach installieren (zB sqlite, ...) - google!

View File

@@ -3,18 +3,22 @@
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="shortcut icon" href="./public/favicon.ico">
<!--<link rel="shortcut icon" href="http://www.fet.at/favicon.ico">-->
<title>Fetsite</title>
<%= 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" %>
<link rel="stylesheet" href="css/bootstrap.css">
<%= stylesheet_link_tag "application", :media=>"all" if theme_name.empty? %>
<%= theme_stylesheet_link_tag "test", :media => "all" %>
<% theme_stylesheet_link_tag "mod", :media=>"all" %>
<!-- <link rel="stylesheet" href="css/bootstrap.css">
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/bootstrap-responsive.css">
<!--[if lt IE 7]><link rel="stylesheet" href="css/bootstrap-ie6.css"><![endif]-->
<link rel="stylesheet" href="css/bootstrap-image-gallery.css">
-->
<!--[if lt IE 7]><link rel="stylesheet" href="css/bootstrap-ie6.css"><![endif]-->
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
@@ -27,7 +31,7 @@
<div class="span10 ">
<div class="header_wrap" style="background:7070a0">
<div class="header">
<%= image_tag('/fetlogo90.png',{:style=>"float:left;height:50px",:height=>"50"}) %>
<%= link_to image_tag('/fetlogo90.png',{:style=>"float:left;height:50px",:height=>"50"}),home_index_path %>
<h1 style="display:block"></h1>
</div>

View File

@@ -19,16 +19,28 @@
<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 'Admin' , config_path%>
</li>
<%= link_to 'Intern' , intern_home_index_path %>
</li><% end %>
</ul>
<span class="pull-right"><%if I18n.locale == :en %>
<ul class="nav navbar-nav">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><%= image_tag("/flaggen/png/"+I18n.locale.to_s+".png") + " " +I18n.t('sprache',:scope=>'home')%><b class="caret"></b></a>
<ul class="dropdown-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>
</li>
</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>
</span>-->
</div>
</div>

View File

@@ -1,6 +1,6 @@
<p id="notice"><%= notice %></p>
<h1><%=lva.typ.to_s + ' ' + lva.name %></h1>
<h1><%= lva.typ_n.to_s + ' ' + lva.name %></h1>
<h2>Prüfungsinformation</h2>
<div class="">
<%= lva.pruefungsinformation.to_s.html_safe %>

View File

@@ -0,0 +1,24 @@
<tr>
<td>
<h4><%= %></h4>
<%= f.semantic_errors :state %>
<%= f.input :id, :as=>:hidden %>
</td>
<td><%= f.input :lvanr , :input_html => { "style"=>"width:7em" }%></td>
<td><%= f.input :name %></td>
<td>
<%= f.input :ects, :input_html => { "style"=>"width:4em" },:size=>5 %>
<%= f.input :stunden, :input_html => { "style"=>"width:4em" }%>
</td>
<td>
<%= f.input :typ, :input_html => { "style"=>"width:4em" }%>
</td>
<td>
<%= f.input :semester , :input_html=>{:style=>"height:8em"},:collection=>@semester%>
</td>
<td><%= f.input :pruefungsinformation,:input_html=>{:rows=>5} %></td>
<td><%= f.input :desc, :input_html=>{:rows=>4}%></td>
</tr>

View File

@@ -0,0 +1,2 @@
<h2><%= nlink.title %></h2>
<% render :partial=> "lvas/lva", :object=>nlink %>

View File

@@ -14,7 +14,7 @@
</div>
<div class="span6">
<p> Tiss Version</p>
<%= link_to "Von Tiss laden", lva_load_tiss_path(@lva) %>
<%= link_to "Von Tiss laden", load_tiss_lva_path(@lva) %>
<%= render partial: "lva", object: @lvatiss %>
<h2> <%= I18n.t "lecturers.lecturers" %> </h2>

View File

@@ -3,11 +3,13 @@
<p id="notice"><%= notice %></p>
<div class="row-fluid">
<div class="span8">
<h1><%=@lva.typ.to_s + ' ' + @lva.name %></h1>
<h1><%= @lva.full_name %></h1>
<h2>Prüfungsinformation</h2>
<div class="">
<%= @lva.pruefungsinformation.html_safe %>
<%= @lva.pruefungsinformation.to_s.html_safe %>
</div>
<h2>Lernaufwand</h2>
<div class="">
<%= @lva.lernaufwand %>
@@ -16,14 +18,13 @@
<div class="">
<%= @lva.desc.to_s.html_safe %>
</div>
<div class="row-fluid">
<h2>Beispiele</h2>
<% @lva.beispiele.each do |b| %>
<%= render b%>
<% end %>
</div>
<h2>Beispiele</h2>
<% @lva.beispiele.each do |b| %>
<%= render b%>
<% end %>
</div>
<div class="span4">
<div class="contentbox">
@@ -56,7 +57,30 @@
</div>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<% unless @lva.nlinks.empty? %>
<h2>Neuigkeiten</h2>
<% @lva.nlinks.each do |l| %>
<%= render l.neuigkeit %>
<% end %>
<% end %>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<%= render 'layouts/pretty_toolbar' %>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<%= render 'beispiele/form_bulk' %>
</div>
</div>
<%= render 'layouts/pretty_toolbar' %>
</div>
<%= render 'beispiele/form_bulk' %>

View File

@@ -2,5 +2,5 @@
<%= membership.stop.nil? ? "seit " : "von " %>
<%=membership.start.to_s %>
<%= " bis "+membership.stop.to_s unless membership.stop.nil? %>
<%= Membership::TYPEN[membership.typ.to_i] %>
<%= Membership::TYPEN_g[membership.fetprofile.geschlecht.to_i][membership.typ.to_i] %>
<%= membership.gremium.fall2 %>

View File

@@ -1,21 +1,29 @@
<div class="container-fluid">
<%= semantic_form_for @modul do |f| %>
<%= f.inputs do %>
<div class="row-fluid">
<div class="span9">
<%= f.input :name ,:hint=>true%>
<div class="row-fluid">
<div class="span8">
<%= f.input :desc, :as=>:tinymce_text %>
</div>
<div class="span4">
<%= f.input :depend %>
</div>
</div>
<div class="container-fluid">
<div class="row-fluid">
<div class="span12">
<%= f.input :name ,:hint=>true%>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<%= f.input :desc, :as=>:tinymce_text %>
</div>
</div>
<div class="row-fluid">
<div class="span12">
<%= f.input :depend %>
</div>
</div>
</div>
</div>
<div class="span3">
<%= f.input :modulgruppen,:as => :check_boxes, :collection => Hash[Modulgruppe.all.map{|m| [m.studium.name + " " + m.name,m.id]}.sort] %>
<%= f.input :modulgruppen, :as => :check_boxes, :member_label=>:long_name, :collection => Modulgruppe.all %>
</div>
</div>

View File

@@ -0,0 +1,29 @@
<%= semantic_form_for "moduls[]", :url=>update_bulk_moduls_path do |ff| %>
<table>
<tr><th>Modulname</th><th>Modulgruppen</th><th>Beschreibung</th> <th>Voraussetzungen</th></tr>
<% @moduls.each do |m| %>
<%= semantic_fields_for "moduls[#{m.id}]", m do |f| %>
<tr><td>
<%= f.input :id, :label=>false, :hint=>"" ,:as=>:hidden %>
<%= f.input :name, :label=>false, :hint=>"" %></td>
<td>
<%= f.input :modulgruppen, :label=>false, :hint=>"" , :collection=>Modulgruppe.all %>
</td>
<td>
<%= f.input :desc, :label=>false, :hint=>"" ,:input_html=>{:class=>"row-fluid"} %>
</td>
<td>
<%= f.input :depend, :label=>false, :hint=>"" ,:input_html=>{:class=>"row-fluid"} %>
</td>
</tr>
<% end %>
<% end %>
</table>
<%= ff.actions do %>
<%= ff.action :submit, :label=>"Save", :as=>:button %>
<%= ff.action :cancel, :as => :link %>
<% end %>
<% end %>

View File

@@ -0,0 +1 @@
<%= render :partial=>"form_bulk" %>

View File

@@ -1,41 +1,18 @@
<%= semantic_form_for "lvas[]", :url=>modul_update_lvas_path(@modul) do |ff|%>
<%= semantic_form_for "lvas[]", :url=>update_lvas_modul_path(@modul) do |ff|%>
<table>
<% i = 0 %>
<% @lvas.each do |lva|%>
<% i = i +1 %>
<tr>
<%= semantic_fields_for "lvas[#{i}]", lva do |f|%>
<td>
<h4><%= lva.name %></h4>
<%= f.semantic_errors :state %>
<%= f.input :id, :as=>:hidden %></td>
<td><%= f.input :lvanr , :input_html => { "style"=>"width:7em" }%></td>
<td><%= f.input :name %></td>
<td><%= f.input :ects, :input_html => { "style"=>"width:4em" },:size=>5 %>
<%= f.input :stunden, :input_html => { "style"=>"width:4em" }%></td>
<td><%= f.input :typ, :input_html => { "style"=>"width:4em" }%></td>
<td>
<%= f.input :semester , :input_html=>{:style=>"height:8em"},:collection=>@semester%></td>
<td><%= f.input :pruefungsinformation,:input_html=>{:rows=>4} %></td>
<td><%= f.input :desc, :input_html=>{:rows=>4}%></td>
<td>
<%= lva.valid? %>
</td>
<% end%>
</tr>
<% i = i +1 %>
<%= semantic_fields_for "lvas[#{i}]", lva do |f|%>
<%= render 'lvas/nested_fields', :f => f,:lva=>lva %>
<% end%>
<% end %>
</table>
<%= ff.actions do %>
<%= ff.action :submit, :as => :button %>
<%= ff.action :cancel, :as => :link %>
<% end %>
<% end %>
<% end %>

View File

@@ -1,4 +1,4 @@
<%= semantic_form_for "lvas[]", :url=>modul_show_tiss_path(params[:modul_id]) do |ff|%>
<%= semantic_form_for "lvas[]", :url=>show_tiss_modul_path(params[:modul_id]) do |ff|%>
<% for i in 1..5 do %>
<%= semantic_fields_for "lvas[#{i}]" do |f| %>

View File

@@ -0,0 +1 @@
<%= render :partial=>"form_bulk" %>

View File

@@ -16,7 +16,7 @@
</div>
<% if neuigkeit.has_calentries? %>
<div class="pull-right" href="#">
<%= image_tag("/iconnavy/time.png") %>
<%= fa_icon("calendar 2x") %>
<% unless neuigkeit.calentries.upcoming.empty? %>
<%= neuigkeit.calentries.upcoming.first.text %>
<% else unless neuigkeit.calentries.recent.empty? %>

View File

@@ -9,23 +9,22 @@
</div>
</div>
<div class="row-fluid">
<div class="span6">
<% f.input :datum, :as=> :datepicker %>
<div class="span6">
<% f.input :datum, :as=> :datepicker %>
<%= f.input :rubrik, :as=> :radio, :collection=>Rubrik.all %>
</div>
<div class="span6">
<%= f.input :author, :as=> :select %>
</div>
</div>
<div class="span6">
<%= f.input :author, :as=> :select %>
</div> </div>
<div class="row-fluid">
<div class="span12">
<%= f.input :picture, :as=> :file %>
</div> </div>
<div class="span12">
<%= f.input :picture, :as=> :file %>
</div>
</div>
<%= f.semantic_fields_for :calentries , @calentries do |calentry| %>
<%= render 'calentries/nested_fields', :f => calentry %>
<%= f.semantic_fields_for :calentries , @calentries do |calentry| %>
<%= render 'calentries/nested_fields', :f => calentry %>
<% end %>
<% end %>

View File

@@ -0,0 +1,11 @@
<li>
<%= link_to nlink_list.link do %>
<div class="contentbox" >
<% p = nlink_list.link_type.downcase.pluralize+"/nlink" %>
<%= raw(strip_links(render :partial=>p, :object=>nlink_list.link )) %>
</div>
<% end %>
</li>

View File

@@ -0,0 +1,12 @@
<li>
<%= link_to nlink_list_search.title, nlink_list_search %>
<%= link_to "add:"+nlink_list_search.title, create_link_rubrik_neuigkeit_path(@neuigkeit.rubrik,@neuigkeit, :link_id=>nlink_list_search.id, :link_type=>nlink_list_search.class.to_s) %>
<div class="contentbox" >
<% p = nlink_list_search.class.to_s.downcase.pluralize+"/nlink" %>
<%= render :partial=>p, :object=>nlink_list_search %>
</div>
</li>

View File

@@ -16,17 +16,31 @@
</div>
<div class="media-body">
<h1>
<%= @neuigkeit.title%>
</h1>
<%= @neuigkeit.title%>
</h1>
<%= raw(@neuigkeit.text) %>
<p></p>
</div>
</div>
<% @calentries1.each do |ce|%>
<%= render ce unless ce.nil? %>
<% end %>
<%= render 'layouts/pretty_toolbar', :object=> @toolbar_elements %>
</div>
Siehe auch:
<ul class="unstyled">
<div id="nlink_list">
<%= render partial: "nlink_list", collection: @neuigkeit.nlinks %>
</div>
<div id="nlink_list_search">
<%= render partial: "nlink_list_search", collection: @nlink_search %>
</div>
</ul>
<%= semantic_form_for :find_link, :url=>find_link_rubrik_neuigkeit_path(@rubrik,@neuigkeit), :html=>{:id=>"search_form", :method=>'get'} do |f| %>
<%= f.input :query, :input_html => { :name => 'query' },:label=>false %>
<% end %>
</div>

View File

@@ -2,7 +2,7 @@
<% neuigkeiten.each do |n| %>
<% r = n.rubrik %>
<tr>
<td><%= r.public%></td>
<td><%= fa_icon "globe" if r.public%></td>
<td><%= r.name %></td>
<td>
<%= n.title %>

View File

@@ -1,7 +1,7 @@
<ul class="nav nav-tabs">
<li <%= 'class="active"'.html_safe if (request.fullpath == rubriken_path)%> >
<%= link_to I18n.t('rubriken.alle') , rubriken_path %> </li>
<% for r in Rubrik.all %>
<% for r in @rubriken %>
<% if can?(:show, r) %>
<li <%= (!@rubrik.nil? && r == @rubrik) ? 'class="active"'.html_safe : '' %> title="<%= r.name %>">
<%= link_to r.name, r %>

View File

@@ -31,7 +31,7 @@
</div>
<div class="span3">
<%= render 'calendars/calentries', :object=>@rubrik.calendar.calentries %>
<%= render 'calendars/calentries', :object=>@calentries %>
<%= link_to "ics-format", calendar_path(@rubrik.calendar,:format=>:ics) %>
</div>

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