Description:
add options to allow hall of fame viewing by any user add menu item for normal user
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r424:217b94aa4f76 - - 6 files changed: 40 inserted, 27 deleted

@@ -1,73 +1,77
1 1 class ApplicationController < ActionController::Base
2 2 protect_from_forgery
3 3
4 4 SINGLE_USER_MODE_CONF_KEY = 'system.single_user_mode'
5 5
6 6 def admin_authorization
7 7 return false unless authenticate
8 8 user = User.find(session[:user_id], :include => ['roles'])
9 9 redirect_to :controller => 'main', :action => 'login' unless user.admin?
10 10 end
11 11
12 12 def authorization_by_roles(allowed_roles)
13 13 return false unless authenticate
14 14 user = User.find(session[:user_id])
15 15 unless user.roles.detect { |role| allowed_roles.member?(role.name) }
16 16 flash[:notice] = 'You are not authorized to view the page you requested'
17 17 redirect_to :controller => 'main', :action => 'login'
18 18 return false
19 19 end
20 20 end
21 21
22 22 protected
23 23
24 24 def authenticate
25 25 unless session[:user_id]
26 + flash[:notice] = 'You need to login'
27 + if GraderConfiguration[SINGLE_USER_MODE_CONF_KEY]
28 + flash[:notice] = 'You need to login but you cannot log in at this time'
29 + end
26 30 redirect_to :controller => 'main', :action => 'login'
27 31 return false
28 32 end
29 33
30 34 # check if run in single user mode
31 35 if GraderConfiguration[SINGLE_USER_MODE_CONF_KEY]
32 36 user = User.find(session[:user_id])
33 37 if user==nil or (not user.admin?)
34 38 flash[:notice] = 'You cannot log in at this time'
35 39 redirect_to :controller => 'main', :action => 'login'
36 40 return false
37 41 end
38 42 return true
39 43 end
40 44
41 45 if GraderConfiguration.multicontests?
42 46 user = User.find(session[:user_id])
43 47 return true if user.admin?
44 48 begin
45 49 if user.contest_stat(true).forced_logout
46 50 flash[:notice] = 'You have been automatically logged out.'
47 51 redirect_to :controller => 'main', :action => 'index'
48 52 end
49 53 rescue
50 54 end
51 55 end
52 56 return true
53 57 end
54 58
55 59 def authorization
56 60 return false unless authenticate
57 61 user = User.find(session[:user_id])
58 62 unless user.roles.detect { |role|
59 63 role.rights.detect{ |right|
60 64 right.controller == self.class.controller_name and
61 65 (right.action == 'all' or right.action == action_name)
62 66 }
63 67 }
64 68 flash[:notice] = 'You are not authorized to view the page you requested'
65 69 #request.env['HTTP_REFERER'] ? (redirect_to :back) : (redirect_to :controller => 'login')
66 70 redirect_to :controller => 'main', :action => 'login'
67 71 return false
68 72 end
69 73 end
70 74
71 75 def verify_time_limit
72 76 return true if session[:user_id]==nil
73 77 user = User.find(session[:user_id], :include => :site)
@@ -1,63 +1,59
1 1 class ReportController < ApplicationController
2 2
3 3 before_filter :admin_authorization, only: [:login_stat,:submission_stat]
4 - before_filter(only: :problem_hof) { |c|
5 - user = User.find(session[:user_id]) if session[:user_id]
6 - if user==nil
7 - flash[:notice] = 'You have to login first'
8 - redirect_to :controller => 'main', :action => 'login'
9 - return false
4 + before_filter { |c|
5 + return false unless authenticate
6 +
7 + if GraderConfiguration["system.hall_of_fame_available"]
8 + return true;
10 9 end
11 -
12 - unless GraderConfiguration["hall_of_fame_available"]
13 - flash[:notice] = 'You are not authorized to view the page you requested'
14 - redirect_to :controller => 'main', :action => 'login' unless GraderConfiguration[ "hall_of_fame_available" ]
15 - end
10 +
11 + admin_authorization
16 12 }
17 13
18 14 def login_stat
19 15 @logins = Array.new
20 16
21 17 date_and_time = '%Y-%m-%d %H:%M'
22 18 begin
23 19 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
24 20 rescue
25 21 @since_time = DateTime.new(1000,1,1)
26 22 end
27 23 begin
28 24 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
29 25 rescue
30 26 @until_time = DateTime.new(3000,1,1)
31 27 end
32 28
33 29 User.all.each do |user|
34 30 @logins << { login: user.login,
35 31 full_name: user.full_name,
36 32 count: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
37 33 user.id,@since_time,@until_time)
38 34 .count(:id),
39 35 min: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
40 36 user.id,@since_time,@until_time)
41 37 .minimum(:created_at),
42 38 max: Login.where("user_id = ? AND created_at >= ? AND created_at <= ?",
43 39 user.id,@since_time,@until_time)
44 40 .maximum(:created_at)
45 41 }
46 42 end
47 43 end
48 44
49 45 def submission_stat
50 46
51 47 date_and_time = '%Y-%m-%d %H:%M'
52 48 begin
53 49 @since_time = DateTime.strptime(params[:since_datetime],date_and_time)
54 50 rescue
55 51 @since_time = DateTime.new(1000,1,1)
56 52 end
57 53 begin
58 54 @until_time = DateTime.strptime(params[:until_datetime],date_and_time)
59 55 rescue
60 56 @until_time = DateTime.new(3000,1,1)
61 57 end
62 58
63 59 @submissions = {}
@@ -1,80 +1,84
1 1 # Methods added to this helper will be available to all templates in the application.
2 2 module ApplicationHelper
3 3
4 4 def user_header
5 5 menu_items = ''
6 6 user = User.find(session[:user_id])
7 7
8 8 if (user!=nil) and (session[:admin])
9 9 # admin menu
10 10 menu_items << "<b>Administrative task:</b> "
11 11 append_to menu_items, '[Announcements]', 'announcements', 'index'
12 12 append_to menu_items, '[Msg console]', 'messages', 'console'
13 13 append_to menu_items, '[Problems]', 'problems', 'index'
14 14 append_to menu_items, '[Users]', 'user_admin', 'index'
15 15 append_to menu_items, '[Results]', 'user_admin', 'user_stat'
16 16 append_to menu_items, '[Report]', 'report', 'login_stat'
17 17 append_to menu_items, '[Graders]', 'graders', 'list'
18 18 append_to menu_items, '[Contests]', 'contest_management', 'index'
19 19 append_to menu_items, '[Sites]', 'sites', 'index'
20 20 append_to menu_items, '[System config]', 'configurations', 'index'
21 21 menu_items << "<br/>"
22 22 end
23 23
24 24 # main page
25 25 append_to menu_items, "[#{I18n.t 'menu.main'}]", 'main', 'list'
26 26 append_to menu_items, "[#{I18n.t 'menu.messages'}]", 'messages', 'list'
27 27
28 28 if (user!=nil) and (GraderConfiguration.show_tasks_to?(user))
29 29 append_to menu_items, "[#{I18n.t 'menu.tasks'}]", 'tasks', 'list'
30 30 append_to menu_items, "[#{I18n.t 'menu.submissions'}]", 'main', 'submission'
31 31 append_to menu_items, "[#{I18n.t 'menu.test'}]", 'test', 'index'
32 32 end
33 +
34 + if GraderConfiguration['system.hall_of_fame_available']
35 + append_to menu_items, "[#{I18n.t 'menu.hall_of_fame'}]", 'report', 'problem_hof'
36 + end
33 37 append_to menu_items, "[#{I18n.t 'menu.help'}]", 'main', 'help'
34 38
35 39 if GraderConfiguration['system.user_setting_enabled']
36 40 append_to menu_items, "[#{I18n.t 'menu.settings'}]", 'users', 'index'
37 41 end
38 42 append_to menu_items, "[#{I18n.t 'menu.log_out'}]", 'main', 'login'
39 43
40 44 menu_items.html_safe
41 45 end
42 46
43 47 def append_to(option,label, controller, action)
44 48 option << ' ' if option!=''
45 49 option << link_to_unless_current(label,
46 50 :controller => controller,
47 51 :action => action)
48 52 end
49 53
50 54 def format_short_time(time)
51 55 now = Time.now.gmtime
52 56 st = ''
53 57 if (time.yday != now.yday) or
54 58 (time.year != now.year)
55 59 st = time.strftime("%x ")
56 60 end
57 61 st + time.strftime("%X")
58 62 end
59 63
60 64 def format_short_duration(duration)
61 65 return '' if duration==nil
62 66 d = duration.to_f
63 67 return Time.at(d).gmtime.strftime("%X")
64 68 end
65 69
66 70 def read_textfile(fname,max_size=2048)
67 71 begin
68 72 File.open(fname).read(max_size)
69 73 rescue
70 74 nil
71 75 end
72 76 end
73 77
74 78 def user_title_bar(user)
75 79 header = ''
76 80 time_left = ''
77 81
78 82 #
79 83 # if the contest is over
80 84 if GraderConfiguration.time_limit_mode?
@@ -1,70 +1,71
1 1 # Sample localization file for English. Add more files in this directory for other locales.
2 2 # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3 3
4 4 en:
5 5 cancel: 'Cancel'
6 6
7 7 login_label: 'Login'
8 8 full_name_label: 'Full name'
9 9 email_label: 'E-mail'
10 10 password_label: 'Password'
11 11
12 12 go_ahead_to: "Go ahead to"
13 13 go_back_to: "Go back to"
14 14 login_page: "login page"
15 15 home_page: "home page"
16 16
17 17 menu:
18 18 main: 'Main'
19 19 messages: 'Messages'
20 20 tasks: 'Tasks'
21 21 submissions: 'Submissions'
22 22 test: 'Test Interface'
23 + hall_of_fame: 'Hall of Fame'
23 24 help: 'Help'
24 25 settings: 'Settings'
25 26 log_out: 'Log out'
26 27
27 28 title_bar:
28 29 current_time: "Current time is"
29 30 remaining_time: "Time left: "
30 31 contest_not_started: "The contest has not started."
31 32
32 33 login:
33 34 message: 'Please login to see the problem list'
34 35 login_submit: 'Login'
35 36 participation: 'Want to participate?'
36 37 please: 'Please'
37 38 register: 'register'
38 39 forget_password: 'Forget password?'
39 40
40 41 main:
41 42 start_soon: "The contest at your site will start soon. Please wait."
42 43 specified_in_header: "Specified in header"
43 44
44 45 problem_desc: "desc"
45 46 submitted_at: "Submitted at"
46 47 graded_at: "Graded at"
47 48 score: "score: "
48 49 cmp_msg: "compiler msg"
49 50 src_link: "src"
50 51 submissions_link: "submissions"
51 52
52 53 confirm_contest_start:
53 54 box_title: "Contest confirmation"
54 55 contest_list: "You will participate in contest:"
55 56 timer_starts_after_click: "The timer will start after you click the start button."
56 57 start_button: "Start!"
57 58 start_button_confirm: "Are you sure?"
58 59
59 60 test:
60 61 title: "Test Interface"
61 62 intro: "You can test your submission with your own test data on the grading environment using this test interface."
62 63 disabled_at_end_announcement: "<b>Note:</b> Test interface will be disabled in the last 30 minutes of the contest time on your site."
63 64
64 65 registration:
65 66 title: "New user registration"
66 67
67 68 description: "Please enter your information below. Please make sure your e-mail is correct, because you will have to confirm the registration through an e-mail we send to that e-mail address."
68 69
69 70 successful_title: "Registration successful"
70 71
@@ -1,70 +1,71
1 1 # Sample localization file for English. Add more files in this directory for other locales.
2 2 # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3 3
4 4 th:
5 5 cancel: 'ฒกเΰΈ₯ิก'
6 6
7 7 login_label: 'ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš (login)'
8 8 full_name_label: 'ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ•ΰΉ‡ΰΈ‘'
9 9 email_label: 'E-mail'
10 10 password_label: 'ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™'
11 11
12 12 go_ahead_to: "ΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡"
13 13 go_back_to: "กΰΈ₯ΰΈ±ΰΈšΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡"
14 14 login_page: "ΰΈ«ΰΈ™ΰΉ‰ΰΈ²ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš"
15 15 home_page: "หน้าแรก"
16 16
17 17 menu:
18 18 main: 'ΰΈ«ΰΈ™ΰΉ‰ΰΈ²ΰΈ«ΰΈ₯ัก'
19 19 messages: 'ΰΈ‚ΰΉ‰ΰΈ­ΰΈ„ΰΈ§ΰΈ²ΰΈ‘'
20 20 tasks: 'ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒ'
21 21 submissions: 'ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΉˆΰΈ‡'
22 22 test: 'ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘'
23 + hall_of_fame: 'หอเกมฒรติฒศ'
23 24 help: 'ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΉ€ΰΈ«ΰΈ₯ΰΈ·ΰΈ­'
24 25 settings: 'ΰΉ€ΰΈ›ΰΈ₯ΰΈ΅ΰΉˆΰΈ’ΰΈ™ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™'
25 26 log_out: 'ออกจากระบบ'
26 27
27 28 title_bar:
28 29 current_time: "ΰΉ€ΰΈ§ΰΈ₯ΰΈ²ΰΈ›ΰΈ±ΰΈˆΰΈˆΰΈΈΰΈšΰΈ±ΰΈ™ΰΈ„ΰΈ·ΰΈ­"
29 30 remaining_time: "ΰΉ€ΰΈ«ΰΈ₯ΰΈ·ΰΈ­ΰΉ€ΰΈ§ΰΈ₯าอมก"
30 31 contest_not_started: "ΰΈ’ΰΈ±ΰΈ‡ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™"
31 32
32 33 login:
33 34 message: 'กรุณา login ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈͺู่ระบบ'
34 35 login_submit: 'ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš'
35 36 participation: 'ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘?'
36 37 please: 'กรุณา'
37 38 register: 'ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™'
38 39 forget_password: 'ΰΈ₯ΰΈ·ΰΈ‘ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™?'
39 40
40 41 main:
41 42 start_soon: "ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΈΰΈ³ΰΈ₯ΰΈ±ΰΈ‡ΰΈˆΰΈ°ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ£ΰΈ­ΰΈΰΉˆΰΈ­ΰΈ™"
42 43 specified_in_header: "ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈ—ΰΈ΅ΰΉˆΰΈ«ΰΈ±ΰΈ§ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΉΰΈ₯ΰΉ‰ΰΈ§"
43 44
44 45 problem_desc: "ΰΈ­ΰΉˆΰΈ²ΰΈ™"
45 46 submitted_at: "ΰΈͺΰΉˆΰΈ‡ΰΉ€ΰΈ‘ΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ§ΰΈ₯ΰΈ²"
46 47 graded_at: "ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΉ€ΰΈ‘ΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ§ΰΈ₯ΰΈ²"
47 48 score: "คะแนน: "
48 49 cmp_msg: "ผΰΈ₯ΰΈ„ΰΈ­ΰΈ‘ΰΉ„ΰΈžΰΈ₯์"
49 50 src_link: "ΰΈ•ΰΉ‰ΰΈ™ΰΈ‰ΰΈšΰΈ±ΰΈš"
50 51 submissions_link: "การΰΈͺΰΉˆΰΈ‡ΰΈ„ΰΈ£ΰΈ±ΰΉ‰ΰΈ‡ΰΈ­ΰΈ·ΰΉˆΰΈ™ ΰΉ†"
51 52
52 53 confirm_contest_start:
53 54 box_title: "ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈΰΈ²ΰΈ£ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™"
54 55 contest_list: "ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ°ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘ΰΈ„ΰΈ·ΰΈ­ "
55 56 timer_starts_after_click: "ΰΈΰΈ²ΰΈ£ΰΈˆΰΈ±ΰΈšΰΉ€ΰΈ§ΰΈ₯ΰΈ²ΰΈˆΰΈ°ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΈ‚ΰΈΆΰΉ‰ΰΈ™ΰΉ€ΰΈ‘ΰΈ·ΰΉˆΰΈ­ΰΈ„ΰΈΈΰΈ“ΰΈΰΈ”ΰΈ›ΰΈΈΰΉˆΰΈ‘ΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡"
56 57 start_button: "ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΉΰΈ‚ΰΉˆΰΈ‡!"
57 58 start_button_confirm: "ΰΉΰΈ™ΰΉˆΰΉƒΰΈˆΰΈ—ΰΈ΅ΰΉˆΰΈˆΰΈ°ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ«ΰΈ£ΰΈ·ΰΈ­ΰΉ„ΰΈ‘ΰΉˆ?"
58 59
59 60 test:
60 61 title: "ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈšΰΈ™ΰΈͺΰΈ ΰΈ²ΰΈžΰΉΰΈ§ΰΈ”ΰΈ₯ΰΉ‰ΰΈ­ΰΈ‘ΰΈ‚ΰΈ­ΰΈ‡ΰΉ€ΰΈ„ΰΈ£ΰΈ·ΰΉˆΰΈ­ΰΈ‡ΰΈ•ΰΈ£ΰΈ§ΰΈˆ"
61 62 intro: "ΰΈ„ΰΈΈΰΈ“ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ—ΰΈ”ΰΈ₯ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΉ€ΰΈ‚ΰΈ΅ΰΈ’ΰΈ™ΰΈΰΈ±ΰΈšΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈŠΰΈΈΰΈ”ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΉ€ΰΈ­ΰΈ‡ΰΉƒΰΈ™ΰΈͺΰΈ ΰΈ²ΰΈžΰΉΰΈ§ΰΈ”ΰΈ₯ΰΉ‰ΰΈ­ΰΈ‘ΰΈˆΰΈ£ΰΈ΄ΰΈ‡ΰΈ‚ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΉ„ΰΈ”ΰΉ‰ ΰΉ‚ΰΈ”ΰΈ’ΰΉ€ΰΈ₯ือกโปรแกรฑΰΈͺΰΉˆΰΈ‡ΰΉΰΈ₯ΰΉ‰ΰΈ§ΰΈ—ΰΈ΅ΰΉˆΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈͺΰΉˆΰΈ‡ΰΉΰΈŸΰΉ‰ΰΈ‘ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈŠΰΈΈΰΈ”ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉƒΰΈ«ΰΉ‰ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’"
62 63 disabled_at_end_announcement: "<b>ΰΈ«ΰΈ‘ΰΈ²ΰΈ’ΰΉ€ΰΈ«ΰΈ•ΰΈΈ:</b> ΰΈ£ΰΈ°ΰΈšΰΈšΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈˆΰΈ°ΰΈ«ΰΈ’ΰΈΈΰΈ”ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΉƒΰΈ™ΰΈŠΰΉˆΰΈ§ΰΈ‡ΰΉ€ΰΈ§ΰΈ₯ΰΈ² 30 ΰΈ™ΰΈ²ΰΈ—ΰΈ΅ΰΈͺΰΈΈΰΈ”ΰΈ—ΰΉ‰ΰΈ²ΰΈ’ΰΈ‚ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™"
63 64
64 65 registration:
65 66 title: "ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΉƒΰΈ«ΰΈ‘ΰΉˆ"
66 67 description: "ในการΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ ΰΉƒΰΈ«ΰΉ‰ΰΈœΰΈΉΰΉ‰ΰΈͺΰΈ™ΰΉƒΰΈˆΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΈΰΈ£ΰΈ­ΰΈΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡ ΰΈˆΰΈ²ΰΈΰΈ™ΰΈ±ΰΉ‰ΰΈ™ΰΈ£ΰΈ°ΰΈšΰΈšΰΈˆΰΈ°ΰΈͺΰΉˆΰΈ‡ e-mail ΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡ e-mail ΰΈ—ΰΈ΅ΰΉˆΰΈ£ΰΈ°ΰΈšΰΈΈΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉƒΰΈ«ΰΉ‰ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈ•ΰΈ±ΰΈ§ΰΈ•ΰΈ™ΰΉΰΈ₯ΰΈ°ΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΉƒΰΈŠΰΉ‰ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰<br/>ΰΉƒΰΈ™ΰΈΰΈ£ΰΈ“ΰΈ΅ΰΈ—ΰΈ΅ΰΉˆΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈ™ΰΈ±ΰΈΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ ΰΈ£ΰΈšΰΈΰΈ§ΰΈ™ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΉƒΰΈ«ΰΉ‰ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΉ€ΰΈΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈΰΈ±ΰΈšΰΉ‚ΰΈ£ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΉΰΈ₯ΰΈ°ΰΈˆΰΈ±ΰΈ‡ΰΈ«ΰΈ§ΰΈ±ΰΈ”ΰΈ”ΰΉ‰ΰΈ§ΰΈ’"
67 68
68 69 successful_title: "การΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΉ€ΰΈͺΰΈ£ΰΉ‡ΰΈˆΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈšΰΈ£ΰΉ‰ΰΈ­ΰΈ’"
69 70
70 71 login_guide: "ΰΉƒΰΈŠΰΉ‰ΰΉ„ΰΈ”ΰΉ‰ΰΉ€ΰΈ‰ΰΈžΰΈ²ΰΈ° a-z, A-Z, 0-9 แΰΈ₯ΰΈ° _ ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈ’ΰΈ²ΰΈ§ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈΰΈ΄ΰΈ™ 20 ตัวอักษร"
@@ -1,166 +1,173
1 1 CONFIGURATIONS =
2 2 [
3 3 {
4 4 :key => 'system.single_user_mode',
5 5 :value_type => 'boolean',
6 6 :default_value => 'false',
7 7 :description => 'Only admins can log in to the system when running under single user mode.'
8 8 },
9 -
9 +
10 10 {
11 11 :key => 'ui.front.title',
12 12 :value_type => 'string',
13 13 :default_value => 'Grader'
14 14 },
15 -
15 +
16 16 {
17 17 :key => 'ui.front.welcome_message',
18 18 :value_type => 'string',
19 19 :default_value => 'Welcome!'
20 20 },
21 -
21 +
22 22 {
23 23 :key => 'ui.show_score',
24 24 :value_type => 'boolean',
25 25 :default_value => 'true'
26 26 },
27 -
27 +
28 28 {
29 29 :key => 'contest.time_limit',
30 30 :value_type => 'string',
31 31 :default_value => 'unlimited',
32 32 :description => 'Time limit in format hh:mm, or "unlimited" for contests with no time limits. This config is CACHED. Restart the server before the change can take effect.'
33 33 },
34 -
34 +
35 35 {
36 36 :key => 'system.mode',
37 37 :value_type => 'string',
38 38 :default_value => 'standard',
39 39 :description => 'Current modes are "standard", "contest", "indv-contest", and "analysis".'
40 40 },
41 -
41 +
42 42 {
43 43 :key => 'contest.name',
44 44 :value_type => 'string',
45 45 :default_value => 'Grader',
46 46 :description => 'This name will be shown on the user header bar.'
47 47 },
48 -
48 +
49 49 {
50 50 :key => 'contest.multisites',
51 51 :value_type => 'boolean',
52 52 :default_value => 'false',
53 53 :description => 'If the server is in contest mode and this option is true, on the log in of the admin a menu for site selections is shown.'
54 54 },
55 -
55 +
56 56 {
57 - :key => 'system.online_registration',
57 + :key => 'system.hall_of_fame_available',
58 58 :value_type => 'boolean',
59 59 :default_value => 'false',
60 - :description => 'This option enables online registration.'
60 + :description => 'If true, any user can access hall of fame page.'
61 61 },
62 -
62 +
63 63 # If Configuration['system.online_registration'] is true, the
64 64 # system allows online registration, and will use these
65 65 # information for sending confirmation emails.
66 66 {
67 67 :key => 'system.online_registration.smtp',
68 68 :value_type => 'string',
69 69 :default_value => 'smtp.somehost.com'
70 70 },
71 -
71 +
72 72 {
73 73 :key => 'system.online_registration.from',
74 74 :value_type => 'string',
75 75 :default_value => 'your.email@address'
76 76 },
77 -
77 +
78 78 {
79 79 :key => 'system.admin_email',
80 80 :value_type => 'string',
81 81 :default_value => 'admin@admin.email'
82 82 },
83 -
83 +
84 84 {
85 85 :key => 'system.user_setting_enabled',
86 86 :value_type => 'boolean',
87 87 :default_value => 'true',
88 88 :description => 'If this option is true, users can change their settings'
89 89 },
90 -
90 +
91 + {
92 + :key => 'system.user_setting_enabled',
93 + :value_type => 'boolean',
94 + :default_value => 'true',
95 + :description => 'If this option is true, users can change their settings'
96 + }
97 +
91 98 # If Configuration['contest.test_request.early_timeout'] is true
92 99 # the user will not be able to use test request at 30 minutes
93 100 # before the contest ends.
94 101 {
95 102 :key => 'contest.test_request.early_timeout',
96 103 :value_type => 'boolean',
97 104 :default_value => 'false'
98 105 },
99 106
100 107 {
101 108 :key => 'system.multicontests',
102 109 :value_type => 'boolean',
103 110 :default_value => 'false'
104 111 },
105 112
106 113 {
107 114 :key => 'contest.confirm_indv_contest_start',
108 115 :value_type => 'boolean',
109 116 :default_value => 'false'
110 117 },
111 118
112 119 {
113 120 :key => 'contest.default_contest_name',
114 121 :value_type => 'string',
115 122 :default_value => 'none',
116 123 :description => "New user will be assigned to this contest automatically, if it exists. Set to 'none' if there is no default contest."
117 124 }
118 -
125 +
119 126 ]
120 127
121 128
122 129 def create_configuration_key(key,
123 130 value_type,
124 131 default_value,
125 132 description='')
126 133 conf = (GraderConfiguration.find_by_key(key) ||
127 134 GraderConfiguration.new(:key => key,
128 135 :value_type => value_type,
129 136 :value => default_value))
130 137 conf.description = description
131 138 conf.save
132 139 end
133 140
134 141 def seed_config
135 142 CONFIGURATIONS.each do |conf|
136 143 if conf.has_key? :description
137 144 desc = conf[:description]
138 145 else
139 146 desc = ''
140 147 end
141 148 create_configuration_key(conf[:key],
142 149 conf[:value_type],
143 150 conf[:default_value],
144 151 desc)
145 152 end
146 153 end
147 154
148 155 def seed_roles
149 156 return if Role.find_by_name('admin')
150 157
151 158 role = Role.create(:name => 'admin')
152 159 user_admin_right = Right.create(:name => 'user_admin',
153 160 :controller => 'user_admin',
154 161 :action => 'all')
155 162 problem_admin_right = Right.create(:name=> 'problem_admin',
156 163 :controller => 'problems',
157 164 :action => 'all')
158 165
159 166 graders_right = Right.create(:name => 'graders_admin',
160 167 :controller => 'graders',
161 168 :action => 'all')
162 169
163 170 role.rights << user_admin_right;
164 171 role.rights << problem_admin_right;
165 172 role.rights << graders_right;
166 173 role.save
You need to be logged in to leave comments. Login now