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

r512:4a0989b96ef2 - - 8 files changed: 35 inserted, 4 deleted

@@ -59,48 +59,49
59 59 redirect_to :action => 'task', :id => params[:id]
60 60 else
61 61 redirect_to :action => 'test_request', :id => params[:id]
62 62 end
63 63 end
64 64
65 65 def test_request
66 66 @test_request = TestRequest.find(params[:id])
67 67 end
68 68
69 69 def task
70 70 @task = Task.find(params[:id])
71 71 end
72 72
73 73 def submission
74 74 @submission = Submission.find(params[:id])
75 75 formatter = Rouge::Formatters::HTML.new(css_class: 'highlight', line_numbers: true )
76 76 lexer = case @submission.language.name
77 77 when "c" then Rouge::Lexers::C.new
78 78 when "cpp" then Rouge::Lexers::Cpp.new
79 79 when "pas" then Rouge::Lexers::Pas.new
80 80 when "ruby" then Rouge::Lexers::Ruby.new
81 81 when "python" then Rouge::Lexers::Python.new
82 82 when "java" then Rouge::Lexers::Java.new
83 + when "php" then Rouge::Lexers::PHP.new
83 84 end
84 85 @formatted_code = formatter.format(lexer.lex(@submission.source))
85 86 @css_style = Rouge::Themes::ThankfulEyes.render(scope: '.highlight')
86 87
87 88 end
88 89
89 90 # various grader controls
90 91
91 92 def stop
92 93 grader_proc = GraderProcess.find(params[:id])
93 94 GraderScript.stop_grader(grader_proc.pid)
94 95 flash[:notice] = 'Grader stopped. It may not disappear now, but it should disappear shortly.'
95 96 redirect_to :action => 'list'
96 97 end
97 98
98 99 def stop_all
99 100 GraderScript.stop_graders(GraderProcess.find_running_graders +
100 101 GraderProcess.find_stalled_process)
101 102 flash[:notice] = 'Graders stopped. They may not disappear now, but they should disappear shortly.'
102 103 redirect_to :action => 'list'
103 104 end
104 105
105 106 def start_grading
106 107 GraderScript.start_grader('grading')
@@ -68,50 +68,72
68 68 end
69 69 end
70 70
71 71 def edit
72 72 @problem = Problem.find(params[:id])
73 73 @description = @problem.description
74 74 end
75 75
76 76 def update
77 77 @problem = Problem.find(params[:id])
78 78 @description = @problem.description
79 79 if @description == nil and params[:description][:body]!=''
80 80 @description = Description.new(params[:description])
81 81 if !@description.save
82 82 flash[:notice] = 'Error saving description'
83 83 render :action => 'edit' and return
84 84 end
85 85 @problem.description = @description
86 86 elsif @description!=nil
87 87 if !@description.update_attributes(params[:description])
88 88 flash[:notice] = 'Error saving description'
89 89 render :action => 'edit' and return
90 90 end
91 91 end
92 + if params[:file] and params[:file].content_type != 'application/pdf'
93 + flash[:notice] = 'Error: Uploaded file is not PDF'
94 + render :action => 'edit' and return
95 + end
92 96 if @problem.update_attributes(params[:problem])
93 97 flash[:notice] = 'Problem was successfully updated.'
98 + unless params[:file] == nil or params[:file] == ''
99 + flash[:notice] = 'Problem was successfully updated and a new PDF file is uploaded.'
100 + out_dirname = "#{Problem.download_file_basedir}/#{@problem.id}"
101 + if not FileTest.exists? out_dirname
102 + Dir.mkdir out_dirname
103 + end
104 +
105 + out_filename = "#{out_dirname}/#{@problem.name}.pdf"
106 + if FileTest.exists? out_filename
107 + File.delete out_filename
108 + end
109 +
110 + File.open(out_filename,"wb") do |file|
111 + file.write(params[:file].read)
112 + end
113 + @problem.description_filename = "#{@problem.name}.pdf"
114 + @problem.save
115 + end
94 116 redirect_to :action => 'show', :id => @problem
95 117 else
96 118 render :action => 'edit'
97 119 end
98 120 end
99 121
100 122 def destroy
101 123 Problem.find(params[:id]).destroy
102 124 redirect_to :action => 'list'
103 125 end
104 126
105 127 def toggle
106 128 @problem = Problem.find(params[:id])
107 129 @problem.available = !(@problem.available)
108 130 @problem.save
109 131 end
110 132
111 133 def turn_all_off
112 134 Problem.find(:all,
113 135 :conditions => "available = 1").each do |problem|
114 136 problem.available = false
115 137 problem.save
116 138 end
117 139 redirect_to :action => 'list'
@@ -1,18 +1,20
1 1
2 2 %tr{:class => ((submission_counter%2==0) ? "info-even" : "info-odd")}
3 3 %td.info{:align => "center"}
4 4 = submission_counter+1
5 + %td.info{:align => "center"}
6 + = link_to "##{submission.id}", controller: :graders, action: :submission, id: submission.id
5 7 %td.info= format_short_time(submission.submitted_at)
6 8 %td.info{:align => "center"}
7 9 = link_to('[load]',{:action => 'source', :id => submission.id})
8 10 %td.info
9 11 - if submission.graded_at!=nil
10 12 = "Graded at #{format_short_time(submission.graded_at)}."
11 13 %br/
12 14 = "Score: #{(submission.points*100/submission.problem.full_score).to_i} " if GraderConfiguration['ui.show_score']
13 15 = " ["
14 16 %tt
15 17 = submission.grader_comment
16 18 = "]"
17 19 %td.info
18 20 = render :partial => 'compiler_message', :locals => {:compiler_message => submission.compiler_message }
@@ -1,24 +1,25
1 1 = user_title_bar(@user)
2 2
3 3 .task-menu
4 4 Task List
5 5 %br/
6 6 - @problems.each do |problem|
7 7 = link_to problem.name, :action => 'submission', :id => problem.name
8 8
9 9 - if @problem!=nil
10 10 %h2= "Task: #{@problem.full_name} (#{@problem.name})"
11 11
12 12 - if @submissions!=nil
13 13 - if @submissions.length>0
14 14 %table.info
15 15 %tr.info-head
16 + %th.info No.
16 17 %th.info #
17 18 %th.info At
18 19 %th.info Source
19 20 %th.info Result
20 21 %th.info{:width => "300px"}
21 22 Compiler message
22 23 = render :partial => 'submission', :collection => @submissions
23 24 - else
24 25 No submission
@@ -27,26 +27,28
27 27 <%= check_box :problem, :available %>
28 28
29 29 <label for="problem_test_allowed">Test allowed?</label>
30 30 <%= check_box :problem, :test_allowed %>
31 31
32 32 <label for="problem_output_only">Output only?</label>
33 33 <%= check_box :problem, :output_only %>
34 34 </p>
35 35
36 36 <%= error_messages_for 'description' %>
37 37
38 38 <p><label for="description_body">Description</label><br/>
39 39 <%= text_area :description, :body, :rows => 10, :cols => 80 %></p>
40 40
41 41 <p><label for="description_markdowned">Markdowned?</label>
42 42 <%= select "description",
43 43 "markdowned",
44 44 [['True',true],['False',false]],
45 45 {:selected => (@description) ? @description.markdowned : false }
46 46 %></p>
47 47
48 48 <p><label for="problem_url">URL</label><br/>
49 49 <%= text_field 'problem', 'url' %></p>
50 50
51 + <p>Task PDF <%= file_field_tag 'file' %></p>
52 +
51 53
52 54 <!--[eoform:problem]-->
@@ -1,9 +1,9
1 1 <h1>Editing problem</h1>
2 2
3 - <%= form_tag :action => 'update', :id => @problem do %>
3 + <%= form_tag({action: 'update', id: @problem},multipart: true) do %>
4 4 <%= render :partial => 'form' %>
5 5 <%= submit_tag 'Edit' %>
6 6 <% end %>
7 7
8 8 <%= link_to 'Show', :action => 'show', :id => @problem %> |
9 9 <%= link_to 'Back', :action => 'list' %>
@@ -47,40 +47,41
47 47
48 48 Total <%= @user_count %> users |
49 49 <% if !@paginated %>
50 50 Display all users.
51 51 <%= link_to '[show in pages]', :action => 'list', :page => '1' %>
52 52 <% else %>
53 53 Display in pages.
54 54 <%= link_to '[display all]', :action => 'list', :page => 'all' %> |
55 55 <%= will_paginate @users, :container => false %>
56 56 <% end %>
57 57 <table class="info">
58 58 <tr class="info-head">
59 59 <% for column in User.content_columns %>
60 60 <% if !@hidden_columns.index(column.name) %>
61 61 <th><%= column.human_name %></th>
62 62 <% end %>
63 63 <% end %>
64 64 <th></th>
65 65 <th></th>
66 66 <th></th>
67 67 </tr>
68 68
69 69 <% for user in @users %>
70 70 <tr class="info-<%= cycle("odd","even") %>">
71 + <td><%= link_to user.login, controller: :users, :action => 'profile', :id => user %></td>
71 72 <% for column in User.content_columns %>
72 - <% if !@hidden_columns.index(column.name) %>
73 + <% if !@hidden_columns.index(column.name) and column.name != 'login' %>
73 74 <td><%=h user.send(column.name) %></td>
74 75 <% end %>
75 76 <% end %>
76 77 <td><%= link_to 'Show', :action => 'show', :id => user %></td>
77 78 <td><%= link_to 'Edit', :action => 'edit', :id => user %></td>
78 79 <td><%= link_to 'Destroy', { :action => 'destroy', :id => user }, :confirm => 'Are you sure?', :method => :post %></td>
79 80 </tr>
80 81 <% end %>
81 82 </table>
82 83
83 84 <br />
84 85
85 86 <%= link_to '[New user]', :action => 'new' %>
86 87 <%= link_to '[New list of users]', :action => 'new_list' %>
@@ -1,50 +1,52
1 1 - content_for :header do
2 2 = javascript_include_tag 'new'
3 3
4 4 %script{:type=>"text/javascript"}
5 5 $(function () {
6 - $('#submission_table').tablesorter({widgets: ['zebra','filter']});
6 + $('#submission_table').tablesorter({widgets: ['zebra']});
7 7 });
8 8
9 9 :css
10 10 .fix-width {
11 11 font-family: Droid Sans Mono,Consolas, monospace, mono, Courier New, Courier;
12 12 }
13 13
14 14 %h1= @user.full_name + ' Profile'
15 15
16 16 %h2 Basic info
17 17 <b>Login:</b> #{@user.login} <br/>
18 18 <b>Full name:</b> #{@user.full_name} <br />
19 19
20 20
21 21 %h2 Problem Stat
22 22
23 23 %h2 Submissions
24 24
25 25 %table.tablesorter-cafe#submission_table
26 26 %thead
27 27 %tr
28 28 %th ID
29 29 %th Problem code
30 - %th Problem name
30 + %th Problem full name
31 31 %th Language
32 + %th Submitted at
32 33 %th Result
33 34 %th Score
34 35 - if session[:admin]
35 36 %th IP
36 37 %tbody
37 38 - @submission.each do |s|
38 39 - next unless s.problem
39 40 %tr
40 41 %td= link_to "#{s.id}", controller: "graders", action: "submission", id: s.id
41 42 %td= s.problem.name
42 43 %td= s.problem.full_name
43 44 %td= s.language.pretty_name
45 + %td #{s.submitted_at.strftime('%Y-%m-%d %H:%M')} (#{time_ago_in_words(s.submitted_at)} ago)
44 46 %td.fix-width= s.grader_comment
45 47 %td= (s.points*100)/s.problem.full_score
46 48 - if session[:admin]
47 49 %td= s.ip_address
48 50
49 51
50 52
You need to be logged in to leave comments. Login now