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 18 def current_score
19 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 24 @users = User.includes(:contests).includes(:contest_stat).where(enabled: true)
25 + end
21 26 @scorearray = calculate_max_score(@problems, @users,0,0,true)
22 27
23 28 #rencer accordingly
@@ -27,20 +27,19
27 27 def download
28 28 problem = Problem.find(params[:id])
29 29 unless @current_user.can_view_problem? problem
30 + flash[:notice] = 'You are not authorized to access this file'
30 31 redirect_to :action => 'index' and return
31 32 end
32 33
33 34 base_name = params[:file]
34 35 base_filename = File.basename("#{base_name}.#{params[:ext]}")
35 36 filename = "#{Problem.download_file_basedir}/#{params[:id]}/#{base_filename}"
36 - puts "SENDING: #{filename}"
37 37
38 38 if !FileTest.exists?(filename)
39 + flash[:notice] = 'File does not exists'
39 40 redirect_to :action => 'index' and return
40 41 end
41 42
42 - puts "SENDING: #{filename}"
43 -
44 43 send_file_to_user(filename, base_filename)
45 44 end
46 45
@@ -60,6 +60,8
60 60 lines = params[:user_list]
61 61
62 62 note = []
63 + error_note = []
64 + ok_user = []
63 65
64 66 lines.split("\n").each do |line|
65 67 items = line.chomp.split(',')
@@ -101,18 +103,36
101 103 :remark => remark})
102 104 end
103 105 user.activated = true
104 - user.save
105 106
107 + if user.save
106 108 if added_random_password
107 109 note << "'#{login}' (+)"
108 110 else
109 111 note << login
110 112 end
113 + ok_user << user
114 + else
115 + error_note << "#{login}"
116 + end
117 +
111 118 end
112 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 130 flash[:success] = 'User(s) ' + note.join(', ') +
114 131 ' were successfully created. ' +
115 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 136 redirect_to :action => 'index'
117 137 end
118 138
@@ -4,6 +4,7
4 4 if !problem.url.blank?
5 5 return link_to name, problem.url, options
6 6 elsif !problem.description_filename.blank?
7 + #build a link to a problem (via task controller)
7 8 basename, ext = problem.description_filename.split('.')
8 9 options[:controller] = 'tasks'
9 10 options[:action] = 'download'
@@ -246,13 +246,18
246 246
247 247 #get a list of available problem
248 248 def available_problems
249 + # first, we check if this is normal mode
249 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 254 if GraderConfiguration.use_problem_group?
251 255 return available_problems_in_group
252 256 else
253 257 return Problem.available_problems
254 258 end
255 259 else
260 + #this is multi contest mode
256 261 contest_problems = []
257 262 pin = {}
258 263 contests.enabled.each do |contest|
@@ -1,15 +1,13
1 - %p
2 - %b Name:
3 - = @group.name
4 - %p
1 + .container-fluid
2 + .row
3 + .col-md-6
4 + %h1 Group #{@group.name}
5 + .row
6 + .col-md-6
5 7 %b Description:
6 8 = @group.description
7 -
8 9 %br
9 - = link_to 'Edit', edit_group_path(@group)
10 - \|
11 - = link_to 'Back', groups_path
12 -
10 + = link_to 'Edit', edit_group_path(@group), class: 'btn btn-primary'
13 11 .row
14 12 .col-md-12
15 13 %h1 Group details
@@ -19,6 +17,11
19 17 .panel-heading
20 18 .panel-title Users in this group
21 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 25 =form_tag add_user_group_path(@group), class: 'form-inline' do
23 26 .form-group
24 27 =label_tag :user_id, "User"
@@ -46,7 +49,11
46 49 .panel-heading
47 50 .panel-title Problems
48 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 57 =form_tag add_problem_group_path(@group), class: 'form-inline' do
51 58 .form-group
52 59 =label_tag :problem_id, "Problem"
@@ -1,3 +1,11
1 + .container-fluid
1 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 11 = render "score_table"
@@ -135,7 +135,7
135 135 get 'login'
136 136 get 'multiple_login'
137 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 139 get 'max_score'
140 140 post 'show_max_score'
141 141 end
deleted file
You need to be logged in to leave comments. Login now