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

r753:9918c6e0c313 - - 6 files changed: 26 inserted, 17 deleted

@@ -57,32 +57,32
57 end
57 end
58 end
58 end
59
59
60 def edit
60 def edit
61 @problem = Problem.find(params[:id])
61 @problem = Problem.find(params[:id])
62 @description = @problem.description
62 @description = @problem.description
63 end
63 end
64
64
65 def update
65 def update
66 @problem = Problem.find(params[:id])
66 @problem = Problem.find(params[:id])
67 @description = @problem.description
67 @description = @problem.description
68 if @description.nil? and params[:description][:body]!=''
68 if @description.nil? and params[:description][:body]!=''
69 - @description = Description.new(params[:description])
69 + @description = Description.new(description_params)
70 if !@description.save
70 if !@description.save
71 flash[:notice] = 'Error saving description'
71 flash[:notice] = 'Error saving description'
72 render :action => 'edit' and return
72 render :action => 'edit' and return
73 end
73 end
74 @problem.description = @description
74 @problem.description = @description
75 elsif @description
75 elsif @description
76 - if !@description.update_attributes(params[:description])
76 + if !@description.update_attributes(description_params)
77 flash[:notice] = 'Error saving description'
77 flash[:notice] = 'Error saving description'
78 render :action => 'edit' and return
78 render :action => 'edit' and return
79 end
79 end
80 end
80 end
81 if params[:file] and params[:file].content_type != 'application/pdf'
81 if params[:file] and params[:file].content_type != 'application/pdf'
82 flash[:notice] = 'Error: Uploaded file is not PDF'
82 flash[:notice] = 'Error: Uploaded file is not PDF'
83 render :action => 'edit' and return
83 render :action => 'edit' and return
84 end
84 end
85 if @problem.update_attributes(problem_params)
85 if @problem.update_attributes(problem_params)
86 flash[:notice] = 'Problem was successfully updated.'
86 flash[:notice] = 'Problem was successfully updated.'
87 unless params[:file] == nil or params[:file] == ''
87 unless params[:file] == nil or params[:file] == ''
88 flash[:notice] = 'Problem was successfully updated and a new PDF file is uploaded.'
88 flash[:notice] = 'Problem was successfully updated and a new PDF file is uploaded.'
@@ -292,13 +292,17
292 problems
292 problems
293 end
293 end
294
294
295 def get_problems_stat
295 def get_problems_stat
296 end
296 end
297
297
298 private
298 private
299
299
300 def problem_params
300 def problem_params
301 params.require(:problem).permit(:name, :full_name, :full_score, :change_date_added, :date_added, :available, :test_allowed,:output_only, :url, :description, tag_ids:[])
301 params.require(:problem).permit(:name, :full_name, :full_score, :change_date_added, :date_added, :available, :test_allowed,:output_only, :url, :description, tag_ids:[])
302 end
302 end
303
303
304 + def description_params
305 + params.require(:description).permit(:body, :markdown)
306 + end
307 +
304 end
308 end
@@ -18,25 +18,25
18 :class_name => "Message",
18 :class_name => "Message",
19 :foreign_key => "sender_id"
19 :foreign_key => "sender_id"
20
20
21 has_many :replied_messages, -> { order(created_at: :desc) },
21 has_many :replied_messages, -> { order(created_at: :desc) },
22 :class_name => "Message",
22 :class_name => "Message",
23 :foreign_key => "receiver_id"
23 :foreign_key => "receiver_id"
24
24
25 has_one :contest_stat, :class_name => "UserContestStat", :dependent => :destroy
25 has_one :contest_stat, :class_name => "UserContestStat", :dependent => :destroy
26
26
27 belongs_to :site
27 belongs_to :site
28 belongs_to :country
28 belongs_to :country
29
29
30 - has_and_belongs_to_many :contests, -> { order(:name); uniq}
30 + has_and_belongs_to_many :contests, -> { order(:name)}
31
31
32 scope :activated_users, -> {where activated: true}
32 scope :activated_users, -> {where activated: true}
33
33
34 validates_presence_of :login
34 validates_presence_of :login
35 validates_uniqueness_of :login
35 validates_uniqueness_of :login
36 validates_format_of :login, :with => /\A[\_A-Za-z0-9]+\z/
36 validates_format_of :login, :with => /\A[\_A-Za-z0-9]+\z/
37 validates_length_of :login, :within => 3..30
37 validates_length_of :login, :within => 3..30
38
38
39 validates_presence_of :full_name
39 validates_presence_of :full_name
40 validates_length_of :full_name, :minimum => 1
40 validates_length_of :full_name, :minimum => 1
41
41
42 validates_presence_of :password, :if => :password_required?
42 validates_presence_of :password, :if => :password_required?
@@ -164,25 +164,25
164 end
164 end
165 end
165 end
166 else
166 else
167 return nil
167 return nil
168 end
168 end
169 end
169 end
170
170
171 def contest_finished?
171 def contest_finished?
172 if GraderConfiguration.contest_mode?
172 if GraderConfiguration.contest_mode?
173 return false if site==nil
173 return false if site==nil
174 return site.finished?
174 return site.finished?
175 elsif GraderConfiguration.indv_contest_mode?
175 elsif GraderConfiguration.indv_contest_mode?
176 - return false if self.contest_stat(true)==nil
176 + return false if self.contest_stat==nil
177 return contest_time_left == 0
177 return contest_time_left == 0
178 else
178 else
179 return false
179 return false
180 end
180 end
181 end
181 end
182
182
183 def contest_started?
183 def contest_started?
184 if GraderConfiguration.indv_contest_mode?
184 if GraderConfiguration.indv_contest_mode?
185 stat = self.contest_stat
185 stat = self.contest_stat
186 return ((stat != nil) and (stat.started_at != nil))
186 return ((stat != nil) and (stat.started_at != nil))
187 elsif GraderConfiguration.contest_mode?
187 elsif GraderConfiguration.contest_mode?
188 return true if site==nil
188 return true if site==nil
@@ -1,23 +1,24
1 - content_for :head do
1 - content_for :head do
2 = stylesheet_link_tag 'problems'
2 = stylesheet_link_tag 'problems'
3
3
4 %h1 Import problems
4 %h1 Import problems
5
5
6 %p= link_to '[Back to problem list]', problems_path
6 %p= link_to '[Back to problem list]', problems_path
7
7
8 - if @problem and @problem.errors
8 - if @problem and @problem.errors
9 =error_messages_for 'problem'
9 =error_messages_for 'problem'
10
10
11 - = form_tag({:action => 'do_import'}, :multipart => true) do
11 + = simple_form_for :problem, url: do_import_problems_path, :multipart => true do |f|
12 +
12 .submitbox
13 .submitbox
13 %table
14 %table
14 %tr
15 %tr
15 %td Name:
16 %td Name:
16 %td= text_field_tag 'name'
17 %td= text_field_tag 'name'
17 %tr
18 %tr
18 %td Full name:
19 %td Full name:
19 %td
20 %td
20 = text_field_tag 'full_name'
21 = text_field_tag 'full_name'
21 %span{:class => 'help'} Leave blank to use the same value as the name above.
22 %span{:class => 'help'} Leave blank to use the same value as the name above.
22 %tr
23 %tr
23 %td Testdata file:
24 %td Testdata file:
@@ -1,15 +1,15
1 %h1 Maximum score
1 %h1 Maximum score
2
2
3 - = form_tag report_show_max_score_path
3 + = form_tag show_max_score_report_path
4 .row
4 .row
5 .col-md-4
5 .col-md-4
6 .panel.panel-primary
6 .panel.panel-primary
7 .panel-heading
7 .panel-heading
8 Problems
8 Problems
9 .panel-body
9 .panel-body
10 %p
10 %p
11 Select problem(s) that we wish to know the score.
11 Select problem(s) that we wish to know the score.
12 = label_tag :problem_id, "Problems"
12 = label_tag :problem_id, "Problems"
13 = select_tag 'problem_id[]',
13 = select_tag 'problem_id[]',
14 options_for_select(Problem.all.collect {|p| ["[#{p.name}] #{p.full_name}", p.id]},params[:problem_id]),
14 options_for_select(Problem.all.collect {|p| ["[#{p.name}] #{p.full_name}", p.id]},params[:problem_id]),
15 { class: 'select2 form-control', multiple: "true" }
15 { class: 'select2 form-control', multiple: "true" }
@@ -42,35 +42,36
42 Latest Submission Status
42 Latest Submission Status
43 = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn-default btn-sm", remote: true if @submission
43 = link_to "Refresh",get_latest_submission_status_submissions_path(@submission.user,@problem), class: "btn btn-default btn-sm", remote: true if @submission
44 .panel-body
44 .panel-body
45 %div#latest_status
45 %div#latest_status
46 - if @submission
46 - if @submission
47 = render :partial => 'submission_short',
47 = render :partial => 'submission_short',
48 :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id }
48 :locals => {submission: @submission, problem_name: @problem.name, problem_id: @problem.id }
49 .row
49 .row
50 .col-md-12
50 .col-md-12
51 %h2 Console
51 %h2 Console
52 %textarea#console{style: 'height: 100%; width: 100%;background-color:#000;color:#fff;font-family: consolas, monaco, "Droid Sans Mono";',rows: 20}
52 %textarea#console{style: 'height: 100%; width: 100%;background-color:#000;color:#fff;font-family: consolas, monaco, "Droid Sans Mono";',rows: 20}
53
53
54 - .modal.fade#compiler{tabindex: -1,role: 'dialog'}
54 + - if @submission
55 - .modal-dialog.modal-lg{role:'document'}
55 + .modal.fade#compiler{tabindex: -1,role: 'dialog'}
56 - .modal-content
56 + .modal-dialog.modal-lg{role:'document'}
57 - .modal-header
57 + .modal-content
58 - %button.close{type: 'button', data: {dismissed: :modal}, aria: {label: 'close'}}
58 + .modal-header
59 - %span{aria: {hidden: 'true'}, data: {dismiss: 'modal'}} ×
59 + %button.close{type: 'button', data: {dismissed: :modal}, aria: {label: 'close'}}
60 - %h4 Compiler message
60 + %span{aria: {hidden: 'true'}, data: {dismiss: 'modal'}} ×
61 - .modal-body
61 + %h4 Compiler message
62 - %pre#compiler_msg= @submission.compiler_message
62 + .modal-body
63 - .modal-footer
63 + %pre#compiler_msg= @submission.compiler_message
64 - %button.btn.btn-default{type: 'button', data: {dismiss: 'modal'}} Close
64 + .modal-footer
65 + %button.btn.btn-default{type: 'button', data: {dismiss: 'modal'}} Close
65
66
66 :javascript
67 :javascript
67 $(document).ready(function() {
68 $(document).ready(function() {
68 e = ace.edit("editor")
69 e = ace.edit("editor")
69 e.setValue($("#text_sourcecode").val());
70 e.setValue($("#text_sourcecode").val());
70 e.gotoLine(1);
71 e.gotoLine(1);
71 $("#language_id").trigger('change');
72 $("#language_id").trigger('change');
72
73
73 $("#load_file").on('change',function(evt) {
74 $("#load_file").on('change',function(evt) {
74 var file = evt.target.files[0];
75 var file = evt.target.files[0];
75 var reader = new FileReader();
76 var reader = new FileReader();
76 reader.onload = function(theFile) {
77 reader.onload = function(theFile) {
@@ -31,24 +31,25
31 get 'toggle'
31 get 'toggle'
32 get 'toggle_test'
32 get 'toggle_test'
33 get 'toggle_view_testcase'
33 get 'toggle_view_testcase'
34 get 'stat'
34 get 'stat'
35 end
35 end
36 collection do
36 collection do
37 get 'turn_all_off'
37 get 'turn_all_off'
38 get 'turn_all_on'
38 get 'turn_all_on'
39 get 'import'
39 get 'import'
40 get 'manage'
40 get 'manage'
41 get 'quick_create'
41 get 'quick_create'
42 post 'do_manage'
42 post 'do_manage'
43 + post 'do_import'
43 end
44 end
44 end
45 end
45
46
46 resources :groups do
47 resources :groups do
47 member do
48 member do
48 post 'add_user', to: 'groups#add_user', as: 'add_user'
49 post 'add_user', to: 'groups#add_user', as: 'add_user'
49 delete 'remove_user/:user_id', to: 'groups#remove_user', as: 'remove_user'
50 delete 'remove_user/:user_id', to: 'groups#remove_user', as: 'remove_user'
50 delete 'remove_all_user', to: 'groups#remove_all_user', as: 'remove_all_user'
51 delete 'remove_all_user', to: 'groups#remove_all_user', as: 'remove_all_user'
51 post 'add_problem', to: 'groups#add_problem', as: 'add_problem'
52 post 'add_problem', to: 'groups#add_problem', as: 'add_problem'
52 delete 'remove_problem/:problem_id', to: 'groups#remove_problem', as: 'remove_problem'
53 delete 'remove_problem/:problem_id', to: 'groups#remove_problem', as: 'remove_problem'
53 delete 'remove_all_problem', to: 'groups#remove_all_problem', as: 'remove_all_problem'
54 delete 'remove_all_problem', to: 'groups#remove_all_problem', as: 'remove_all_problem'
54 end
55 end
@@ -72,24 +73,25
72 resources :users do
73 resources :users do
73 member do
74 member do
74 get 'toggle_activate', 'toggle_enable'
75 get 'toggle_activate', 'toggle_enable'
75 get 'stat'
76 get 'stat'
76 end
77 end
77 end
78 end
78
79
79 resources :submissions do
80 resources :submissions do
80 member do
81 member do
81 get 'download'
82 get 'download'
82 get 'compiler_msg'
83 get 'compiler_msg'
83 get 'rejudge'
84 get 'rejudge'
85 + get 'source'
84 end
86 end
85 collection do
87 collection do
86 get 'prob/:problem_id', to: 'submissions#index', as: 'problem'
88 get 'prob/:problem_id', to: 'submissions#index', as: 'problem'
87 get 'direct_edit_problem/:problem_id(/:user_id)', to: 'submissions#direct_edit_problem', as: 'direct_edit_problem'
89 get 'direct_edit_problem/:problem_id(/:user_id)', to: 'submissions#direct_edit_problem', as: 'direct_edit_problem'
88 get 'get_latest_submission_status/:uid/:pid', to: 'submissions#get_latest_submission_status', as: 'get_latest_submission_status'
90 get 'get_latest_submission_status/:uid/:pid', to: 'submissions#get_latest_submission_status', as: 'get_latest_submission_status'
89 end
91 end
90 end
92 end
91
93
92
94
93 #user admin
95 #user admin
94 resources :user_admin do
96 resources :user_admin do
95 collection do
97 collection do
@@ -106,24 +108,25
106 match 'random_all_passwords', via: [:get, :post]
108 match 'random_all_passwords', via: [:get, :post]
107 end
109 end
108 member do
110 member do
109 get 'clear_last_ip'
111 get 'clear_last_ip'
110 end
112 end
111 end
113 end
112
114
113 resources :contest_management, only: [:index] do
115 resources :contest_management, only: [:index] do
114 collection do
116 collection do
115 get 'user_stat'
117 get 'user_stat'
116 get 'clear_stat'
118 get 'clear_stat'
117 get 'clear_all_stat'
119 get 'clear_all_stat'
120 + get 'change_contest_mode'
118 end
121 end
119 end
122 end
120
123
121 #get 'user_admin', to: 'user_admin#index'
124 #get 'user_admin', to: 'user_admin#index'
122 #get 'user_admin/bulk_manage', to: 'user_admin#bulk_manage', as: 'bulk_manage_user_admin'
125 #get 'user_admin/bulk_manage', to: 'user_admin#bulk_manage', as: 'bulk_manage_user_admin'
123 #post 'user_admin', to: 'user_admin#create'
126 #post 'user_admin', to: 'user_admin#create'
124 #delete 'user_admin/:id', to: 'user_admin#destroy', as: 'user_admin_destroy'
127 #delete 'user_admin/:id', to: 'user_admin#destroy', as: 'user_admin_destroy'
125
128
126 #singular resource
129 #singular resource
127 #---- BEWARE ---- singular resource maps to plural controller by default, we can override by provide controller name directly
130 #---- BEWARE ---- singular resource maps to plural controller by default, we can override by provide controller name directly
128 #report
131 #report
129 resource :report, only: [], controller: 'report' do
132 resource :report, only: [], controller: 'report' do
You need to be logged in to leave comments. Login now