Description:
assigns all users from on contest list to another
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r298:e6c044028e60 - - 2 files changed: 40 inserted, 15 deleted

@@ -112,107 +112,117
112 112 end
113 113
114 114 def user_stat
115 115 @problems = Problem.find_available_problems
116 116 @users = User.find(:all)
117 117 @scorearray = Array.new
118 118 @users.each do |u|
119 119 ustat = Array.new
120 120 ustat[0] = u
121 121 @problems.each do |p|
122 122 sub = Submission.find_last_by_user_and_problem(u.id,p.id)
123 123 if (sub!=nil) and (sub.points!=nil)
124 124 ustat << [(sub.points.to_f*100/p.full_score).round, (sub.points>=p.full_score)]
125 125 else
126 126 ustat << [0,false]
127 127 end
128 128 end
129 129 @scorearray << ustat
130 130 end
131 131 end
132 132
133 133 def import
134 134 if params[:file]==''
135 135 flash[:notice] = 'Error importing no file'
136 136 redirect_to :action => 'list' and return
137 137 end
138 138 import_from_file(params[:file])
139 139 end
140 140
141 141 def random_all_passwords
142 142 users = User.find(:all)
143 143 @prefix = params[:prefix] || ''
144 144 @non_admin_users = User.find_non_admin_with_prefix(@prefix)
145 145 @changed = false
146 146 if request.request_method == :post
147 147 @non_admin_users.each do |user|
148 148 password = random_password
149 149 user.password = password
150 150 user.password_confirmation = password
151 151 user.save
152 152 end
153 153 @changed = true
154 154 end
155 155 end
156 156
157 157 # contest management
158 158
159 159 def contests
160 - if params[:id]!='none'
161 - @contest = Contest.find(params[:id])
162 - else
163 - @contest = nil
160 + @contest, @users = find_contest_and_user_from_contest_id(params[:id])
161 + @contests = Contest.enabled
162 + end
163 +
164 + def assign_from_list
165 + contest_id = params[:users_contest_id]
166 + org_contest, users = find_contest_and_user_from_contest_id(contest_id)
167 + contest = Contest.find(params[:new_contest][:id])
168 + if !contest
169 + flash[:notice] = 'Error: no contest'
170 + redirect_to :action => 'contests', :id =>contest_id
164 171 end
165 - if @contest
166 - @users = @contest.users
167 - else
168 - @users = User.find_users_with_no_contest
172 +
173 + note = []
174 + users.each do |u|
175 + u.contests = [contest]
176 + note << u.login
169 177 end
170 - @contests = Contest.enabled
178 + flash[:notice] = 'User(s) ' + note.join(', ') +
179 + " were successfully reassigned to #{contest.title}."
180 + redirect_to :action => 'contests', :id =>contest.id
171 181 end
172 182
173 183 def add_to_contest
174 184 user = User.find(params[:id])
175 185 contest = Contest.find(params[:contest_id])
176 186 if user and contest
177 187 user.contests << contest
178 188 end
179 189 redirect_to :action => 'list'
180 190 end
181 191
182 192 def remove_from_contest
183 193 user = User.find(params[:id])
184 194 contest = Contest.find(params[:contest_id])
185 195 if user and contest
186 196 user.contests.delete(contest)
187 197 end
188 198 redirect_to :action => 'list'
189 199 end
190 200
191 201 def contest_management
192 202 end
193 203
194 204 def manage_contest
195 205 contest = Contest.find(params[:contest][:id])
196 206 if !contest
197 207 flash[:notice] = 'You did not choose the contest.'
198 208 redirect_to :action => 'contest_management' and return
199 209 end
200 210
201 211 operation = params[:operation]
202 212
203 213 if not ['add','remove','assign'].include? operation
204 214 flash[:notice] = 'You did not choose the operation to perform.'
205 215 redirect_to :action => 'contest_management' and return
206 216 end
207 217
208 218 lines = params[:login_list]
209 219 if !lines or lines.blank?
210 220 flash[:notice] = 'You entered an empty list.'
211 221 redirect_to :action => 'contest_management' and return
212 222 end
213 223
214 224 note = []
215 225 users = []
216 226 lines.split("\n").each do |line|
217 227 user = User.find_by_login(line.chomp)
218 228 if user
@@ -334,49 +344,63
334 344 # import users
335 345 user_data.each_pair do |id,user|
336 346 u = User.find_by_login(user[:login])
337 347 if u!=nil
338 348 @import_log << "Found #{user[:login]}\n"
339 349 else
340 350 u = User.new(:login => user[:login])
341 351 @import_log << "Created #{user[:login]}\n"
342 352 end
343 353 u.full_name = user[:name]
344 354 u.password = user[:password]
345 355 u.country = countries[user[:country_id]]
346 356 u.site = sites[user[:site_id]]
347 357 u.activated = true
348 358 u.email = "empty-#{u.login}@none.com"
349 359 if not u.save
350 360 @import_log << "Errors\n"
351 361 u.errors.each { |attr,msg| @import_log << "#{attr} - #{msg}\n" }
352 362 end
353 363 end
354 364
355 365 end
356 366
357 367 def logout_users(users)
358 368 users.each do |user|
359 369 contest_stat = user.contest_stat(true)
360 370 if contest_stat and !contest_stat.forced_logout
361 371 contest_stat.forced_logout = true
362 372 contest_stat.save
363 373 end
364 374 end
365 375 end
366 376
367 377 def send_contest_update_notification_email(user, contest)
368 378 contest_title_name = Configuration['contest.name']
369 379 contest_name = contest.name
370 380 subject = t('contest.notification.email_subject', {
371 381 :contest_title_name => contest_title_name,
372 382 :contest_name => contest_name })
373 383 body = t('contest.notification.email_body', {
374 384 :full_name => user.full_name,
375 385 :contest_title_name => contest_title_name,
376 386 :contest_name => contest.name,
377 387 })
378 388
379 389 logger.info body
380 390 send_mail(user.email, subject, body)
381 391 end
392 +
393 + def find_contest_and_user_from_contest_id(id)
394 + if id!='none'
395 + @contest = Contest.find(id)
396 + else
397 + @contest = nil
398 + end
399 + if @contest
400 + @users = @contest.users
401 + else
402 + @users = User.find_users_with_no_contest
403 + end
404 + return [@contest, @users]
405 + end
382 406 end
@@ -1,65 +1,66
1 1 <h1>
2 2 List users in <% if @contest %><%= @contest.title %>
3 3 <% else %>Users not in any contests<% end %>
4 4 </h1>
5 5
6 6 <div class="submitbox">
7 7 <%= link_to '[View all users]', :action => 'list' %>
8 8 <% if Configuration.multicontests? %>
9 9 <%= link_to '[Manage bulk users in contests]', :action => 'contest_management' %>
10 10 <br/>
11 11 View users in:
12 12 <% @contests.each do |contest| %>
13 13 <%= link_to "[#{contest.name}]", :action => 'contests', :id => contest.id %>
14 14 <% end %>
15 15 <%= link_to "[no contest]", :action => 'contests', :id => 'none' %>
16 16 <% end %>
17 + <br/>
18 + <% form_tag :action => 'assign_from_list' do %>
19 + <%= hidden_field_tag 'users_contest_id', (@contest ? @contest.id : 'none') %>
20 + Assign all to
21 + <%= select("new_contest","id",Contest.all.collect {|c| [c.title, c.id]}) %>
22 + <%= submit_tag "Assign", :confirm => 'Are you sure?' %>
23 + <% end %>
17 24 </div>
18 25
19 26 <table class="info">
20 27 <tr class="info-head">
21 28 <th>Login</th>
22 29 <th>Full name</th>
23 30 <th>Email</th>
24 31 <th>Activated?</th>
25 32 <th></th>
26 33 <th></th>
27 34 <th></th>
28 35 <% if Configuration.multicontests? %>
29 36 <th>Contests</th>
30 37 <th>Other enabled contests</th>
31 38 <% end %>
32 39 </tr>
33 40
34 41 <% for user in @users %>
35 42 <tr class="info-<%= cycle("odd","even") %>">
36 43 <td><%=h user.login %></td>
37 44 <td><%=h user.full_name %></td>
38 45 <td><%=h user.email %></td>
39 46 <td><%=h user.activated %></td>
40 47 <td><%= link_to 'Show', :action => 'show', :id => user %></td>
41 48 <td><%= link_to 'Edit', :action => 'edit', :id => user %></td>
42 49 <td><%= link_to 'Destroy', { :action => 'destroy', :id => user }, :confirm => 'Are you sure?', :method => :post %></td>
43 50 <% if Configuration.multicontests? %>
44 51 <td>
45 52 <% user.contests.each do |contest| %>
46 53 <%= contest.name %> [<%= link_to 'x', :action => 'remove_from_contest', :id => user.id, :contest_id => contest.id %>]
47 54 <% end %>
48 55 </td>
49 56 <td>
50 57 <% @contests.each do |contest| %>
51 58 <% if not user.contests.all.find {|c| c.id==contest.id } %>
52 59 <%= contest.name %> [<%= link_to '+', :action => 'add_to_contest', :id => user.id, :contest_id => contest.id %>]
53 60 <% end %>
54 61 <% end %>
55 62 </td>
56 63 <% end %>
57 64 </tr>
58 65 <% end %>
59 66 </table>
60 -
61 -
62 - <br />
63 -
64 - <%= link_to 'New user', :action => 'new' %>
65 - <%= link_to 'New list of users', :action => 'new_list' %>
You need to be logged in to leave comments. Login now