Description:
merge
Commit status:
[Not Reviewed]
References:
merge algo
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r836:36fbb20457ec - - 8 files changed: 94 inserted, 60 deleted

@@ -85,27 +85,26
85 85 @submission = Submission.find(params[:id])
86 86 @task = @submission.task
87 87 @task.status_inqueue! if @task
88 88 respond_to do |format|
89 89 format.js
90 90 end
91 91 end
92 92
93 93 protected
94 94
95 95 def submission_authorization
96 96 #admin always has privileged
97 - if @current_user.admin?
98 - return true
99 - end
97 + return true if @current_user.admin?
98 + return true if @current_user.has_role?('TA') && (['show','download'].include? action_name)
100 99
101 100 sub = Submission.find(params[:id])
102 101 if @current_user.available_problems.include? sub.problem
103 102 return true if GraderConfiguration["right.user_view_submission"] or sub.user == @current_user
104 103 end
105 104
106 105 #default to NO
107 106 unauthorized_redirect
108 107 return false
109 108 end
110 109
111 110
@@ -346,54 +346,51
346 346 if params[:reset_timer]
347 347 logout_users(users)
348 348 end
349 349
350 350 flash[:notice] = 'User(s) ' + note.join(', ') +
351 351 ' were successfully modified. '
352 352 redirect_to :action => 'contest_management'
353 353 end
354 354
355 355 # admin management
356 356
357 357 def admin
358 - @admins = User.all.find_all {|user| user.admin? }
358 + @admins = Role.where(name: 'admin').take.users
359 + @tas = Role.where(name: 'ta').take.users
359 360 end
360 361
361 - def grant_admin
362 - login = params[:login]
363 - user = User.find_by_login(login)
364 - if user!=nil
365 - admin_role = Role.find_by_name('admin')
366 - user.roles << admin_role
367 - else
368 - flash[:notice] = 'Unknown user'
369 - end
370 - flash[:notice] = 'User added as admins'
371 - redirect_to :action => 'admin'
362 + def modify_role
363 + user = User.find_by_login(params[:login])
364 + role = Role.find_by_name(params[:role])
365 + unless user && role
366 + flash[:error] = 'Unknown user or role'
367 + redirect_to admin_user_admin_index_path
368 + return
372 369 end
373 -
374 - def revoke_admin
375 - user = User.find(params[:id])
376 - if user==nil
377 - flash[:notice] = 'Unknown user'
378 - redirect_to :action => 'admin' and return
379 - elsif user.login == 'root'
380 - flash[:notice] = 'You cannot revoke admisnistrator permission from root.'
381 - redirect_to :action => 'admin' and return
370 + if params[:commit] == 'Grant'
371 + #grant role
372 + user.roles << role
373 + flash[:notice] = "User '#{user.login}' has been granted the role '#{role.name}'"
374 + else
375 + #revoke role
376 + if user.login == 'root' && role.name == 'admin'
377 + flash[:error] = 'You cannot revoke admisnistrator permission from root.'
378 + redirect_to admin_user_admin_index_path
379 + return
382 380 end
383 -
384 - admin_role = Role.find_by_name('admin')
385 - user.roles.delete(admin_role)
386 - flash[:notice] = 'User permission revoked'
387 - redirect_to :action => 'admin'
381 + user.roles.delete(role)
382 + flash[:notice] = "The role '#{role.name}' has been revoked from User '#{user.login}'"
383 + end
384 + redirect_to admin_user_admin_index_path
388 385 end
389 386
390 387 # mass mailing
391 388
392 389 def mass_mailing
393 390 end
394 391
395 392 def bulk_mail
396 393 lines = params[:login_list]
397 394 if !lines or lines.blank?
398 395 flash[:notice] = 'You entered an empty list.'
399 396 redirect_to :action => 'mass_mailing' and return
@@ -115,25 +115,29
115 115 puts result
116 116 end
117 117 return true if result["type"] == "beanStudent"
118 118 rescue => e
119 119 puts e
120 120 puts e.message
121 121 return false
122 122 end
123 123 return false
124 124 end
125 125
126 126 def admin?
127 - self.roles.where(name: 'admin').count > 0
127 + has_role?('admin')
128 + end
129 +
130 + def has_role?(role)
131 + self.roles.where(name: role).count > 0
128 132 end
129 133
130 134 def email_for_editing
131 135 if self.email==nil
132 136 "(unknown)"
133 137 elsif self.email==''
134 138 "(blank)"
135 139 else
136 140 self.email
137 141 end
138 142 end
139 143
@@ -59,25 +59,25
59 59 / report
60 60 %li.dropdown
61 61 %a.dropdown-toggle{href: '#', data: {toggle:'dropdown'}, aria: {haspopup:"true", expanded:"false"}, role: "button"}
62 62 Report
63 63 %span.caret
64 64 %ul.dropdown-menu
65 65 = add_menu( 'Current Score', 'report', 'current_score')
66 66 = add_menu( 'Score Report', 'report', 'max_score')
67 67 = add_menu( 'Submission Report', 'report', 'submission')
68 68 = add_menu( 'Login Report', 'report', 'login')
69 69 - if (ungraded = Submission.where('graded_at is null').where('submitted_at < ?', 1.minutes.ago).count) > 0
70 70 =link_to "#{ungraded} backlogs!",
71 - grader_list_path,
71 + graders_list_path,
72 72 class: 'navbar-btn btn btn-default btn-warning', data: {toggle: 'tooltip'},title: 'Number of ungraded submission'
73 73
74 74 %ul.nav.navbar-nav.navbar-right
75 75 = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-question-sign')}".html_safe, 'main', 'help')
76 76 = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-comment')}".html_safe, 'messages', 'index', {title: I18n.t('menu.messages'), data: {toggle: 'tooltip'}})
77 77 - if GraderConfiguration['system.user_setting_enabled']
78 78 = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-cog', id: 'user_profile')}".html_safe, 'users', 'profile', {title: I18n.t('menu.settings'), data: {toggle: 'tooltip'}})
79 79 = add_menu("#{content_tag(:span,'',class: 'glyphicon glyphicon-log-out')} #{@current_user.full_name}".html_safe, 'main', 'login', {title: I18n.t('menu.log_out'), data: {toggle: 'tooltip'}})
80 80
81 81 /
82 82 - if (@current_user!=nil) and (session[:admin])
83 83 %nav.navbar.navbar-fixed-top.navbar-inverse.secondnavbar
@@ -1,33 +1,37
1 1 :css
2 2 .fix-width {
3 3 font-family: "Consolas, Monaco, Droid Sans Mono,Mono, Monospace,Courier"
4 4 }
5 5
6 6 %h1 Problem stat: #{@problem.name}
7 7 %h2 Overview
8 8
9 + .row
10 + .col-md-2
11 + %strong Name:
12 + .col-md-10
13 + = @problem.full_name #in_place_editor_field :problem, :full_name, {}, :rows=>1
14 + = link_to_description_if_any "[#{t 'main.problem_desc'}] <span class='glyphicon glyphicon-file'></span>".html_safe, @problem
15 + .row
16 + .col-md-2.strong
17 + %strong Submissions:
18 + .col-md-10
19 + = @submissions.count
20 + .row
21 + .col-md-2.strong
22 + %strong Solved/Attemped User
23 + .col-md-10
24 + #{@summary[:solve]}/#{@summary[:attempt]} (#{(@summary[:solve]*100.0/@summary[:attempt]).round(1)}%)
9 25
10 - %table.info
11 - %thead
12 - %tr.info-head
13 - %th Stat
14 - %th Value
15 - %tbody
16 - %tr{class: cycle('info-even','info-odd')}
17 - %td Submissions
18 - %td= @submissions.count
19 - %tr{class: cycle('info-even','info-odd')}
20 - %td Solved/Attempted User
21 - %td #{@summary[:solve]}/#{@summary[:attempt]} (#{(@summary[:solve]*100.0/@summary[:attempt]).round(1)}%)
22 26
23 27 %h2 Submissions Count
24 28 = render partial: 'application/bar_graph', locals: { histogram: @histogram }
25 29
26 30 %h2 Submissions
27 31 - if @submissions and @submissions.count > 0
28 32 %table#main_table.table.table-condensed.table-striped
29 33 %thead
30 34 %tr
31 35 %th ID
32 36 %th Login
33 37 %th Name
@@ -1,25 +1,54
1 - %h1 Administrators
2 -
3 - %table{:class => 'info'}
4 - %tr{:class => 'info-head'}
1 + %h1 Modify Role
2 + .row
3 + .col-md-6
4 + %h4 Administrators
5 + = form_tag modify_role_user_admin_index_path, method: 'post', class: 'form-inline' do
6 + = hidden_field_tag :role, 'admin'
7 + .form-group
8 + = label_tag :login, 'Grant admin role to:'
9 + = text_field_tag 'login',nil, class: 'form-control'
10 + .form-group
11 + = submit_tag 'Grant', class: 'btn btn-primary'
12 + %br
13 + %table.table.table-condense.table-hover.table-striped.table-bordered
14 + %thead{:class => 'info-head'}
5 15 %th #
6 16 %th Login
7 17 %th Full name
8 18 %th
9 19 - @admins.each_with_index do |user, i|
10 20 %tr
11 21 %td= i+1
12 22 %td= user.login
13 23 %td= user.full_name
14 24 %td
15 25 - if user.login!='root'
16 - = link_to '[revoke]', :action => 'revoke_admin', :id => user.id
17 - %hr
26 + = link_to '[revoke]', modify_role_user_admin_index_path( login: user.login, role: 'admin', commit: 'revoke')
27 + .col-md-6
28 + %h4 Teacher Assistants (TA)
29 + = form_tag modify_role_user_admin_index_path, method: 'post', class: 'form-inline' do
30 + = hidden_field_tag :role, 'TA'
31 + .form-group
32 + = label_tag :login, 'Grant TA role to:'
33 + = text_field_tag 'login',nil, class: 'form-control'
34 + .form-group
35 + = submit_tag 'Grant', class: 'btn btn-primary'
36 + %br
37 + %table.table.table-condense.table-hover.table-striped.table-bordered
38 + %thead{:class => 'info-head'}
39 + %th #
40 + %th Login
41 + %th Full name
42 + %th
43 + - @tas.each_with_index do |user, i|
44 + %tr
45 + %td= i+1
46 + %td= user.login
47 + %td= user.full_name
48 + %td
49 + - if user.login!='root'
50 + = link_to '[revoke]', modify_role_user_admin_index_path( login: user.login, role: 'TA', commit: 'revoke')
18 51
19 - = form_tag :action => 'grant_admin' do
20 - = label_tag :login, 'Grant admin permission to:'
21 - = text_field_tag 'login',nil, class: 'input-field'
22 - = submit_tag 'Grant', class: 'btn btn-primary'
23 52
24 53 %hr/
25 54 = link_to '[go back to index]', :action => 'index'
@@ -104,26 +104,25
104 104
105 105 #user admin
106 106 resources :user_admin do
107 107 collection do
108 108 match 'bulk_manage', via: [:get, :post]
109 109 get 'bulk_mail'
110 110 get 'user_stat'
111 111 get 'import'
112 112 get 'new_list'
113 113 get 'admin'
114 114 get 'active'
115 115 get 'mass_mailing'
116 - get 'revoke_admin'
117 - post 'grant_admin'
116 + match 'modify_role', via: [:get, :post]
118 117 match 'create_from_list', via: [:get, :post]
119 118 match 'random_all_passwords', via: [:get, :post]
120 119 end
121 120 member do
122 121 get 'clear_last_ip'
123 122 end
124 123 end
125 124
126 125 resources :contest_management, only: [:index] do
127 126 collection do
128 127 get 'user_stat'
129 128 get 'clear_stat'
@@ -179,33 +178,34
179 178 #get "main/list"
180 179 #get 'main/submission(/:id)', to: 'main#submission', as: 'main_submission'
181 180 #post 'main/submit', to: 'main#submit'
182 181 #get 'main/announcements', to: 'main#announcements'
183 182
184 183
185 184 #
186 185 get 'tasks/view/:file.:ext' => 'tasks#view'
187 186 get 'tasks/download/:id/:file.:ext' => 'tasks#download', as: 'download_task'
188 187 get 'heartbeat/:id/edit' => 'heartbeat#edit'
189 188
190 189 #grader
191 - get 'graders/list', to: 'graders#list', as: 'grader_list'
190 + #get 'graders/list', to: 'graders#list', as: 'grader_list'
192 191 namespace :graders do
193 192 get 'task/:id/:type', action: 'task', as: 'task'
194 193 get 'view/:id/:type', action: 'view', as: 'view'
195 194 get 'clear/:id', action: 'clear', as: 'clear'
196 - get 'stop'
197 - get 'stop_all'
198 - get 'clear_all'
199 - get 'clear_terminated'
200 195 get 'start_grading'
201 196 get 'start_exam'
197 + get 'clear_all'
198 + get 'stop_all'
202 199
200 + get 'stop'
201 + get 'clear_terminated'
202 + get 'list'
203 203 end
204 204
205 205
206 206 # See how all your routes lay out with "rake routes"
207 207
208 208 # This is a legacy wild controller route that's not recommended for RESTful applications.
209 209 # Note: This route will make all actions in every controller accessible via GET requests.
210 210 # match ':controller(/:action(/:id))(.:format)', via: [:get, :post]
211 211 end
@@ -216,24 +216,25
216 216 desc = conf[:description]
217 217 else
218 218 desc = ''
219 219 end
220 220 create_configuration_key(conf[:key],
221 221 conf[:value_type],
222 222 conf[:default_value],
223 223 desc)
224 224 end
225 225 end
226 226
227 227 def seed_roles
228 + Role.find_or_create_by(name: 'TA')
228 229 return if Role.find_by_name('admin')
229 230
230 231 role = Role.create(:name => 'admin')
231 232 user_admin_right = Right.create(:name => 'user_admin',
232 233 :controller => 'user_admin',
233 234 :action => 'all')
234 235 problem_admin_right = Right.create(:name=> 'problem_admin',
235 236 :controller => 'problems',
236 237 :action => 'all')
237 238
238 239 graders_right = Right.create(:name => 'graders_admin',
239 240 :controller => 'graders',
You need to be logged in to leave comments. Login now