Description:
add current score by group
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r762:c6677423b846 - - 10 files changed: 105 inserted, 24 deleted

@@ -0,0 +1,45
1 + .container-fluid
2 + .row
3 + .col-md-6
4 + %h1 Adding list of users
5 + .row
6 + .col-md-6
7 + .panel.panel-default
8 + .panel-heading
9 + .panel-title Info
10 + .panel-body
11 + %ul
12 + %li
13 + List of user information in this format:
14 + %tt user_id,name(,passwd(,alias(,remark)))
15 + %li
16 + Note that
17 + %tt passwd, alias
18 + and
19 + %tt remark
20 + is optional.
21 + %li
22 + When
23 + %tt passwd
24 + or
25 + %tt alias
26 + is empty, the original value will be used instead.
27 + %li
28 + If the users with the same user_id already exists, existing information will be overwritten.
29 +
30 + .row
31 + .col-md-6
32 + = form_tag :action => 'create_from_list' do
33 + .form-group
34 + = submit_tag 'Create following users',class: 'btn btn-success'
35 + .form-group
36 + .div.checkbox
37 + %label
38 + = check_box_tag :add_to_group
39 + Also add these users to the following group
40 + = select_tag "group_id", options_from_collection_for_select( Group.all, 'id','name',params[:group_name]), id: 'group_name',class: 'select2'
41 + .form-group
42 + = text_area_tag 'user_list', nil, :rows => 50, :cols => 80
43 + .col-md-6
44 +
45 +
@@ -17,7 +17,12
17
17
18 def current_score
18 def current_score
19 @problems = Problem.available_problems
19 @problems = Problem.available_problems
20 + if params[:group_id]
21 + @group = Group.find(params[:group_id])
22 + @users = @group.users.where(enabled: true)
23 + else
20 @users = User.includes(:contests).includes(:contest_stat).where(enabled: true)
24 @users = User.includes(:contests).includes(:contest_stat).where(enabled: true)
25 + end
21 @scorearray = calculate_max_score(@problems, @users,0,0,true)
26 @scorearray = calculate_max_score(@problems, @users,0,0,true)
22
27
23 #rencer accordingly
28 #rencer accordingly
@@ -27,20 +27,19
27 def download
27 def download
28 problem = Problem.find(params[:id])
28 problem = Problem.find(params[:id])
29 unless @current_user.can_view_problem? problem
29 unless @current_user.can_view_problem? problem
30 + flash[:notice] = 'You are not authorized to access this file'
30 redirect_to :action => 'index' and return
31 redirect_to :action => 'index' and return
31 end
32 end
32
33
33 base_name = params[:file]
34 base_name = params[:file]
34 base_filename = File.basename("#{base_name}.#{params[:ext]}")
35 base_filename = File.basename("#{base_name}.#{params[:ext]}")
35 filename = "#{Problem.download_file_basedir}/#{params[:id]}/#{base_filename}"
36 filename = "#{Problem.download_file_basedir}/#{params[:id]}/#{base_filename}"
36 - puts "SENDING: #{filename}"
37
37
38 if !FileTest.exists?(filename)
38 if !FileTest.exists?(filename)
39 + flash[:notice] = 'File does not exists'
39 redirect_to :action => 'index' and return
40 redirect_to :action => 'index' and return
40 end
41 end
41
42
42 - puts "SENDING: #{filename}"
43 -
44 send_file_to_user(filename, base_filename)
43 send_file_to_user(filename, base_filename)
45 end
44 end
46
45
@@ -60,6 +60,8
60 lines = params[:user_list]
60 lines = params[:user_list]
61
61
62 note = []
62 note = []
63 + error_note = []
64 + ok_user = []
63
65
64 lines.split("\n").each do |line|
66 lines.split("\n").each do |line|
65 items = line.chomp.split(',')
67 items = line.chomp.split(',')
@@ -101,18 +103,36
101 :remark => remark})
103 :remark => remark})
102 end
104 end
103 user.activated = true
105 user.activated = true
104 - user.save
105
106
107 + if user.save
106 if added_random_password
108 if added_random_password
107 note << "'#{login}' (+)"
109 note << "'#{login}' (+)"
108 else
110 else
109 note << login
111 note << login
110 end
112 end
113 + ok_user << user
114 + else
115 + error_note << "#{login}"
116 + end
117 +
111 end
118 end
112 end
119 end
120 +
121 + #add to group
122 + if params[:add_to_group]
123 + group = Group.where(id: params[:group_id]).first
124 + if group
125 + group.users << ok_user
126 + end
127 + end
128 +
129 + # show flash
113 flash[:success] = 'User(s) ' + note.join(', ') +
130 flash[:success] = 'User(s) ' + note.join(', ') +
114 ' were successfully created. ' +
131 ' were successfully created. ' +
115 '( (+) - created with random passwords.)'
132 '( (+) - created with random passwords.)'
133 + if error_note.size > 0
134 + flash[:error] = "Following user(s) failed to be created: " + error_note.join(', ')
135 + end
116 redirect_to :action => 'index'
136 redirect_to :action => 'index'
117 end
137 end
118
138
@@ -4,6 +4,7
4 if !problem.url.blank?
4 if !problem.url.blank?
5 return link_to name, problem.url, options
5 return link_to name, problem.url, options
6 elsif !problem.description_filename.blank?
6 elsif !problem.description_filename.blank?
7 + #build a link to a problem (via task controller)
7 basename, ext = problem.description_filename.split('.')
8 basename, ext = problem.description_filename.split('.')
8 options[:controller] = 'tasks'
9 options[:controller] = 'tasks'
9 options[:action] = 'download'
10 options[:action] = 'download'
@@ -246,13 +246,18
246
246
247 #get a list of available problem
247 #get a list of available problem
248 def available_problems
248 def available_problems
249 + # first, we check if this is normal mode
249 if not GraderConfiguration.multicontests?
250 if not GraderConfiguration.multicontests?
251 +
252 + #if this is a normal mode
253 + #we show problem based on problem_group, if the config said so
250 if GraderConfiguration.use_problem_group?
254 if GraderConfiguration.use_problem_group?
251 return available_problems_in_group
255 return available_problems_in_group
252 else
256 else
253 return Problem.available_problems
257 return Problem.available_problems
254 end
258 end
255 else
259 else
260 + #this is multi contest mode
256 contest_problems = []
261 contest_problems = []
257 pin = {}
262 pin = {}
258 contests.enabled.each do |contest|
263 contests.enabled.each do |contest|
@@ -1,15 +1,13
1 - %p
1 + .container-fluid
2 - %b Name:
2 + .row
3 - = @group.name
3 + .col-md-6
4 - %p
4 + %h1 Group #{@group.name}
5 + .row
6 + .col-md-6
5 %b Description:
7 %b Description:
6 = @group.description
8 = @group.description
7 -
8 %br
9 %br
9 - = link_to 'Edit', edit_group_path(@group)
10 + = link_to 'Edit', edit_group_path(@group), class: 'btn btn-primary'
10 - \|
11 - = link_to 'Back', groups_path
12 -
13 .row
11 .row
14 .col-md-12
12 .col-md-12
15 %h1 Group details
13 %h1 Group details
@@ -19,6 +17,11
19 .panel-heading
17 .panel-heading
20 .panel-title Users in this group
18 .panel-title Users in this group
21 .panel-body
19 .panel-body
20 + %ul
21 + %li
22 + If you want to add several users to a group, it may be easier to just re-import those users in
23 + = link_to 'New list of users', new_list_user_admin_index_path
24 + page
22 =form_tag add_user_group_path(@group), class: 'form-inline' do
25 =form_tag add_user_group_path(@group), class: 'form-inline' do
23 .form-group
26 .form-group
24 =label_tag :user_id, "User"
27 =label_tag :user_id, "User"
@@ -46,7 +49,11
46 .panel-heading
49 .panel-heading
47 .panel-title Problems
50 .panel-title Problems
48 .panel-body
51 .panel-body
49 -
52 + %ul
53 + %li
54 + If you want to add several problem to a group, it may be easier to bulk manage them in the
55 + = link_to 'Bulk Manage', manage_problems_path
56 + page
50 =form_tag add_problem_group_path(@group), class: 'form-inline' do
57 =form_tag add_problem_group_path(@group), class: 'form-inline' do
51 .form-group
58 .form-group
52 =label_tag :problem_id, "Problem"
59 =label_tag :problem_id, "Problem"
@@ -1,3 +1,11
1 + .container-fluid
1 %h1 Current Score
2 %h1 Current Score
3 + = form_tag current_score_report_path, method: 'get' do
4 + Show only users from this group
5 + = select_tag "group_id", options_from_collection_for_select( Group.all, 'id','name',params[:group_name]), id: 'group_name',class: 'select2'
6 + = submit_tag 'Apply',class: 'btn btn-default'
7 +
8 + %br
9 +
2
10
3 = render "score_table"
11 = render "score_table"
@@ -135,7 +135,7
135 get 'login'
135 get 'login'
136 get 'multiple_login'
136 get 'multiple_login'
137 get 'problem_hof/:id', action: 'problem_hof'
137 get 'problem_hof/:id', action: 'problem_hof'
138 - get 'current_score'
138 + get 'current_score(/:group_id)', action: 'current_score', as: 'current_score'
139 get 'max_score'
139 get 'max_score'
140 post 'show_max_score'
140 post 'show_max_score'
141 end
141 end
deleted file
You need to be logged in to leave comments. Login now