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

r513:3968658b7a13 - - 12 files changed: 85 inserted, 62 deleted

@@ -0,0 +1,13
1 + = user_title_bar(@user)
2 +
3 + %h1 Console: all messages
4 +
5 + = link_to '[active messages]', :action => 'list_all'
6 +
7 + %table
8 + %tr
9 + %th From
10 + %th When
11 + %th Message
12 + %th
13 + = render :partial => "short_message", :collection => @messages
file renamed from app/assets/javascripts/new.js to app/assets/javascripts/local_jquery.js
@@ -1,80 +1,85
1 1 class MessagesController < ApplicationController
2 2
3 3 before_filter :authenticate
4 4
5 5 verify :method => :post, :only => ['create'],
6 6 :redirect_to => { :action => 'list' }
7 7
8 8 before_filter :admin_authorization, :only => ['console','show',
9 - 'reply','hide']
9 + 'reply','hide','list_all']
10 10
11 11 def list
12 12 @user = User.find(session[:user_id])
13 13 @messages = Message.find_all_sent_by_user(@user)
14 14 end
15 15
16 16 def console
17 17 @user = User.find(session[:user_id])
18 18 @messages = Message.find_all_system_unreplied_messages
19 19 end
20 20
21 21 def show
22 22 @message = Message.find(params[:id])
23 23 end
24 24
25 + def list_all
26 + @user = User.find(session[:user_id])
27 + @messages = Message.where(receiver_id: nil).order(:created_at)
28 + end
29 +
25 30 def create
26 31 user = User.find(session[:user_id])
27 32 @message = Message.new(params[:message])
28 33 @message.sender = user
29 34 if !@message.save
30 35 render :action => 'list' and return
31 36 else
32 37 flash[:notice] = 'New message posted'
33 38 redirect_to :action => 'list'
34 39 end
35 40 end
36 41
37 42 def reply
38 43 user = User.find(session[:user_id])
39 44 @message = Message.new(params[:r_message])
40 45 @message.sender = user
41 46 if !@message.save
42 47 render :action => 'show' and return
43 48 else
44 49 flash[:notice] = 'Message replied'
45 50 rep_msg = @message.replying_message
46 51 rep_msg.replied = true
47 52 rep_msg.save
48 53 redirect_to :action => 'console'
49 54 end
50 55 end
51 56
52 57 def hide
53 58 message = Message.find(params[:id])
54 59 message.replied = true
55 60 message.save
56 61 flash[:notice] = 'Message hided (just marked replied)'
57 62 redirect_to :action => 'console'
58 63 end
59 64
60 65 protected
61 66 def build_replying_message_hierarchy(user)
62 67 @all_messages = {}
63 68
64 69
65 70 # manually build replies hierarchy (to improve efficiency)
66 71 [@messages, @replied_messages].each do |collection|
67 72 collection.each do |m|
68 73 @all_messages[m.id] = {:msg => m, :replies => []}
69 74 end
70 75 end
71 76
72 77 @all_messages.each do |m|
73 78 rep_id = m.replying_message_id
74 79 if @all_messages[rep_id]!=nil
75 80 @all_messages[rep_id][:replies] << m
76 81 end
77 82 end
78 83 end
79 84
80 85 end
@@ -1,248 +1,260
1 1 class ProblemsController < ApplicationController
2 2
3 3 before_filter :authenticate, :authorization
4 4
5 5 in_place_edit_for :problem, :name
6 6 in_place_edit_for :problem, :full_name
7 7 in_place_edit_for :problem, :full_score
8 8
9 9 def index
10 10 list
11 11 render :action => 'list'
12 12 end
13 13
14 14 # GETs should be safe (see http://www.w3.org/2001/tag/doc/whenToUseGet.html)
15 15 verify :method => :post, :only => [ :destroy,
16 16 :create, :quick_create,
17 17 :do_manage,
18 18 :do_import,
19 19 :update ],
20 20 :redirect_to => { :action => :list }
21 21
22 22 def list
23 23 @problems = Problem.find(:all, :order => 'date_added DESC')
24 24 end
25 25
26 26 def show
27 27 @problem = Problem.find(params[:id])
28 28 end
29 29
30 30 def new
31 31 @problem = Problem.new
32 32 @description = nil
33 33 end
34 34
35 35 def create
36 36 @problem = Problem.new(params[:problem])
37 37 @description = Description.new(params[:description])
38 38 if @description.body!=''
39 39 if !@description.save
40 40 render :action => new and return
41 41 end
42 42 else
43 43 @description = nil
44 44 end
45 45 @problem.description = @description
46 46 if @problem.save
47 47 flash[:notice] = 'Problem was successfully created.'
48 48 redirect_to :action => 'list'
49 49 else
50 50 render :action => 'new'
51 51 end
52 52 end
53 53
54 54 def quick_create
55 55 @problem = Problem.new(params[:problem])
56 56 @problem.full_name = @problem.name if @problem.full_name == ''
57 57 @problem.full_score = 100
58 58 @problem.available = false
59 59 @problem.test_allowed = true
60 60 @problem.output_only = false
61 61 @problem.date_added = Time.new
62 62 if @problem.save
63 63 flash[:notice] = 'Problem was successfully created.'
64 64 redirect_to :action => 'list'
65 65 else
66 66 flash[:notice] = 'Error saving problem'
67 67 redirect_to :action => 'list'
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 92 if params[:file] and params[:file].content_type != 'application/pdf'
93 93 flash[:notice] = 'Error: Uploaded file is not PDF'
94 94 render :action => 'edit' and return
95 95 end
96 96 if @problem.update_attributes(params[:problem])
97 97 flash[:notice] = 'Problem was successfully updated.'
98 98 unless params[:file] == nil or params[:file] == ''
99 99 flash[:notice] = 'Problem was successfully updated and a new PDF file is uploaded.'
100 100 out_dirname = "#{Problem.download_file_basedir}/#{@problem.id}"
101 101 if not FileTest.exists? out_dirname
102 102 Dir.mkdir out_dirname
103 103 end
104 104
105 105 out_filename = "#{out_dirname}/#{@problem.name}.pdf"
106 106 if FileTest.exists? out_filename
107 107 File.delete out_filename
108 108 end
109 109
110 110 File.open(out_filename,"wb") do |file|
111 111 file.write(params[:file].read)
112 112 end
113 113 @problem.description_filename = "#{@problem.name}.pdf"
114 114 @problem.save
115 115 end
116 116 redirect_to :action => 'show', :id => @problem
117 117 else
118 118 render :action => 'edit'
119 119 end
120 120 end
121 121
122 122 def destroy
123 123 Problem.find(params[:id]).destroy
124 124 redirect_to :action => 'list'
125 125 end
126 126
127 127 def toggle
128 128 @problem = Problem.find(params[:id])
129 129 @problem.available = !(@problem.available)
130 130 @problem.save
131 131 end
132 132
133 133 def turn_all_off
134 134 Problem.find(:all,
135 135 :conditions => "available = 1").each do |problem|
136 136 problem.available = false
137 137 problem.save
138 138 end
139 139 redirect_to :action => 'list'
140 140 end
141 141
142 142 def turn_all_on
143 143 Problem.find(:all,
144 144 :conditions => "available = 0").each do |problem|
145 145 problem.available = true
146 146 problem.save
147 147 end
148 148 redirect_to :action => 'list'
149 149 end
150 150
151 151 def stat
152 152 @problem = Problem.find(params[:id])
153 153 if !@problem.available
154 154 redirect_to :controller => 'main', :action => 'list'
155 155 else
156 156 @submissions = Submission.includes(:user).where(problem_id: params[:id]).order(:user_id,:id)
157 157 end
158 158 end
159 159
160 160 def manage
161 161 @problems = Problem.find(:all, :order => 'date_added DESC')
162 162 end
163 163
164 164 def do_manage
165 165 if params.has_key? 'change_date_added'
166 166 change_date_added
167 - else params.has_key? 'add_to_contest'
167 + elsif params.has_key? 'add_to_contest'
168 168 add_to_contest
169 + elsif params.has_key? 'enable_problem'
170 + set_available(true)
171 + elsif params.has_key? 'disable_problem'
172 + set_available(false)
169 173 end
170 174 redirect_to :action => 'manage'
171 175 end
172 176
173 177 def import
174 178 @allow_test_pair_import = allow_test_pair_import?
175 179 end
176 180
177 181 def do_import
178 182 old_problem = Problem.find_by_name(params[:name])
179 183 if !allow_test_pair_import? and params.has_key? :import_to_db
180 184 params.delete :import_to_db
181 185 end
182 186 @problem, import_log = Problem.create_from_import_form_params(params,
183 187 old_problem)
184 188
185 189 if !@problem.errors.empty?
186 190 render :action => 'import' and return
187 191 end
188 192
189 193 if old_problem!=nil
190 194 flash[:notice] = "The test data has been replaced for problem #{@problem.name}"
191 195 end
192 196 @log = import_log
193 197 end
194 198
195 199 def remove_contest
196 200 problem = Problem.find(params[:id])
197 201 contest = Contest.find(params[:contest_id])
198 202 if problem!=nil and contest!=nil
199 203 problem.contests.delete(contest)
200 204 end
201 205 redirect_to :action => 'manage'
202 206 end
203 207
204 208 ##################################
205 209 protected
206 210
207 211 def allow_test_pair_import?
208 212 if defined? ALLOW_TEST_PAIR_IMPORT
209 213 return ALLOW_TEST_PAIR_IMPORT
210 214 else
211 215 return false
212 216 end
213 217 end
214 218
215 219 def change_date_added
216 220 problems = get_problems_from_params
217 221 year = params[:date_added][:year].to_i
218 222 month = params[:date_added][:month].to_i
219 223 day = params[:date_added][:day].to_i
220 224 date = Date.new(year,month,day)
221 225 problems.each do |p|
222 226 p.date_added = date
223 227 p.save
224 228 end
225 229 end
226 230
227 231 def add_to_contest
228 232 problems = get_problems_from_params
229 233 contest = Contest.find(params[:contest][:id])
230 234 if contest!=nil and contest.enabled
231 235 problems.each do |p|
232 236 p.contests << contest
233 237 end
234 238 end
235 239 end
236 240
241 + def set_available(avail)
242 + problems = get_problems_from_params
243 + problems.each do |p|
244 + p.available = avail
245 + p.save
246 + end
247 + end
248 +
237 249 def get_problems_from_params
238 250 problems = []
239 251 params.keys.each do |k|
240 252 if k.index('prob-')==0
241 - name, id = k.split('-')
253 + name, id, order = k.split('-')
242 254 problems << Problem.find(id)
243 255 end
244 256 end
245 257 problems
246 258 end
247 259
248 260 end
@@ -1,11 +1,12
1 1 %tr
2 2 - if short_message.sender
3 3 %td=h short_message.sender.full_name
4 4 - else
5 5 %td (user deleted)
6 6 %td= "#{short_message.created_at}"
7 7 %td=h truncate(short_message.body)
8 8 %td
9 9 - if short_message.sender
10 10 = link_to "[reply]", :action => 'show', :id => short_message.id
11 + - if params[:action] != 'list_all'
11 12 = link_to "[hide]", :action => 'hide', :id => short_message.id
@@ -1,43 +1,85
1 1 - content_for :head do
2 2 = stylesheet_link_tag 'problems'
3 + = javascript_include_tag 'local_jquery'
4 +
5 + :javascript
6 + $(document).ready( function() {
7 + function shiftclick(start,stop,value) {
8 + $('tr input').each( function(id,input) {
9 + var $input=$(input);
10 + var iid=parseInt($input.attr('id').split('-')[2]);
11 + if(iid>=start&&iid<=stop){
12 + $input.prop('checked',value)
13 + }
14 + });
15 + }
16 +
17 + $('tr input').click( function(e) {
18 + if (e.shiftKey) {
19 + stop = parseInt($(this).attr('id').split('-')[2]);
20 + var orig_stop = stop
21 + if (typeof start !== 'undefined') {
22 + if (start > stop) {
23 + var tmp = start;
24 + start = stop;
25 + stop = tmp;
26 + }
27 + shiftclick(start,stop,$(this).is(':checked') )
28 + }
29 + start = orig_stop
30 + } else {
31 + start = parseInt($(this).attr('id').split('-')[2]);
32 + }
33 + });
34 + });
35 +
3 36
4 37 %h1 Manage problems
5 38
6 39 %p= link_to '[Back to problem list]', :action => 'list'
7 40
8 41 = form_tag :action=>'do_manage' do
9 42 .submitbox
10 - What do you want to do?
43 + What do you want to do to the selected problem?
11 44 %br/
45 + (You can shift-click to select a range of problems)
12 46 %ul
13 47 %li
14 48 Change date added to
15 49 = select_date Date.current, :prefix => 'date_added'
16 50 &nbsp;&nbsp;&nbsp;
17 51 = submit_tag 'Change', :name => 'change_date_added'
52 + %li
53 + Set available to
54 + = submit_tag 'True', :name => 'enable_problem'
55 + = submit_tag 'False', :name => 'disable_problem'
18 56
19 57 - if GraderConfiguration.multicontests?
20 58 %li
21 59 Add to
22 60 = select("contest","id",Contest.all.collect {|c| [c.title, c.id]})
23 61 = submit_tag 'Add', :name => 'add_to_contest'
24 62
25 63 %table
26 - %tr
27 - %th/
64 + %tr{style: "text-align: left;"}
65 + %th= check_box_tag 'select_all'
28 66 %th Name
29 67 %th Full name
68 + %th Available
30 69 %th Date added
31 70 - if GraderConfiguration.multicontests?
32 71 %th Contests
33 72
73 + - num = 0
34 74 - for problem in @problems
75 + - num += 1
35 76 %tr{:id => "row-prob-#{problem.id}", :name=> "prob-#{problem.id}"}
36 - %td= check_box_tag "prob-#{problem.id}"
77 + %td= check_box_tag "prob-#{problem.id}-#{num}"
37 78 %td= problem.name
38 79 %td= problem.full_name
80 + %td= problem.available
39 81 %td= problem.date_added
40 82 - if GraderConfiguration.multicontests?
41 83 %td
42 84 - problem.contests.each do |contest|
43 85 = "(#{contest.name} [#{link_to 'x', :action => 'remove_contest', :id => problem.id, :contest_id => contest.id }])"
@@ -1,36 +1,36
1 1 - content_for :header do
2 2 = stylesheet_link_tag 'tablesorter-theme.cafe'
3 - = javascript_include_tag 'new'
3 + = javascript_include_tag 'local_jquery'
4 4
5 5 %script{:type=>"text/javascript"}
6 6 $(function () {
7 7 $('#since_datetime').datetimepicker({ showButtonPanel: true, dateFormat: "yy-mm-dd", controlType: "slider"} );
8 8 $('#until_datetime').datetimepicker({ showButtonPanel: true, dateFormat: "yy-mm-dd", controlType: "slider"} );
9 9 $('#my_table').tablesorter({widthFixed: true, widgets: ['zebra']});
10 10 });
11 11
12 12 %h1 Login status
13 13
14 14 =render partial: 'report_menu'
15 15 =render partial: 'date_range', locals: {param_text: 'Login date range:', title: 'Query login stat in the range' }
16 16
17 17 %table.tablesorter-cafe#my_table
18 18 %thead
19 19 %tr
20 20 %th login
21 21 %th full name
22 22 %th login count
23 23 %th earliest
24 24 %th latest
25 25 %th IP
26 26 %tbody
27 27 - @logins.each do |l|
28 28 %tr{class: cycle('info-even','info-odd')}
29 29 %td= link_to l[:login], controller: 'users', action: 'profile', id: l[:id]
30 30 %td= l[:full_name]
31 31 %td= l[:count]
32 32 %td= l[:min] ? l[:min].in_time_zone.strftime('%Y-%m-%d %H:%M') : ''
33 33 %td= l[:max] ? "#{l[:max].in_time_zone.strftime('%Y-%m-%d %H:%M.%S')} (#{time_ago_in_words(l[:max].in_time_zone)} ago)" : ''
34 34 %td
35 35 - l[:ip].each do |ip|
36 36 #{ip.ip_address} <br/>
@@ -1,37 +1,37
1 1 - content_for :header do
2 - = javascript_include_tag 'new'
2 + = javascript_include_tag 'local_jquery'
3 3
4 4 %script{:type=>"text/javascript"}
5 5 $(function () {
6 6 $('#since_datetime').datetimepicker({ showButtonPanel: true, dateFormat: "yy-mm-dd", controlType: "slider"} );
7 7 $('#until_datetime').datetimepicker({ showButtonPanel: true, dateFormat: "yy-mm-dd", controlType: "slider"} );
8 8 });
9 9
10 10 %h1 Login status
11 11
12 12 =render partial: 'report_menu'
13 13 =render partial: 'date_range', locals: {param_text: 'Submission date range:', title: 'Query submission stat in the range' }
14 14
15 15 %table.info
16 16 %thead
17 17 %tr.info-head
18 18 %th login
19 19 %th full name
20 20 %th total submissions
21 21 %th submissions
22 22 %tbody
23 23 - @submissions.each do |user_id,data|
24 24 %tr{class: cycle('info-even','info-odd')}
25 25 %td= data[:login]
26 26 %td= data[:full_name]
27 27 %td= data[:count]
28 28 %td
29 29 - data[:sub].each do |prob_id,sub_data|
30 30 = "#{sub_data[:prob_name]}: ["
31 31 - st = []
32 32 - sub_data[:sub_ids].each do |id|
33 33 - st << link_to(id, controller: 'graders' , action: 'submission', id: id)
34 34 = raw st.join ', '
35 35 = ']'
36 36 %br/
37 37
@@ -1,59 +1,59
1 1 - content_for :header do
2 - = javascript_include_tag 'new'
2 + = javascript_include_tag 'local_jquery'
3 3 = stylesheet_link_tag 'tablesorter-theme.cafe'
4 4
5 5 %script{:type=>"text/javascript"}
6 6 $(function () {
7 7 $('#since_datetime').datetimepicker({ showButtonPanel: true, dateFormat: "yy-mm-dd", controlType: "slider"} );
8 8 $('#until_datetime').datetimepicker({ showButtonPanel: true, dateFormat: "yy-mm-dd", controlType: "slider"} );
9 9 $('#my_table').tablesorter({widgets: ['zebra']});
10 10 });
11 11
12 12 %h1 User grading results
13 13 %h2= params[:action] == 'user_stat' ? "Show scores from latest submission" : "Show max scores in submission range"
14 14
15 15
16 16 - if @problem and @problem.errors
17 17 =error_messages_for 'problem'
18 18
19 19 = render partial: 'submission_range'
20 20
21 21 - if params[:action] == 'user_stat'
22 22 %h3 Latest score
23 23 = link_to '[download csv with all problems]', controller: :user_admin, action: :user_stat, commit: 'download csv'
24 24 - else
25 25 %h3 Max score
26 26 = link_to '[Show only latest submissions]', controller: :user_admin, action: :user_stat
27 27 = link_to '[download csv with all problems]', controller: :user_admin, action: :user_stat_max, commit: 'download csv'
28 28
29 29 %table.tablesorter-cafe#my_table
30 30 %thead
31 31 %tr
32 32 %th User
33 33 %th Name
34 34 %th Activated?
35 35 %th Logged in
36 36 %th Contest(s)
37 37 %th Section
38 38 - @problems.each do |p|
39 39 %th= p.name
40 40 %th Total
41 41 %th Passed
42 42 %tbody
43 43 - @scorearray.each do |sc|
44 44 %tr{class: cycle('info-even','info-odd')}
45 45 - total,num_passed = 0,0
46 46 - sc.each_index do |i|
47 47 - if i == 0
48 48 %td= link_to sc[i].login, controller: 'users', action: 'profile', id: sc[i]
49 49 %td= sc[i].full_name
50 50 %td= sc[i].activated
51 51 %td= sc[i].try(:contest_stat).try(:started_at)!=nil ? 'yes' : 'no'
52 52 %td= sc[i].contests.collect {|c| c.name}.join(', ')
53 53 %td= sc[i].section
54 54 - else
55 55 %td= sc[i][0]
56 56 - total += sc[i][0]
57 57 - num_passed += 1 if sc[i][1]
58 58 %td= total
59 59 %td= num_passed
@@ -1,52 +1,52
1 1 - content_for :header do
2 - = javascript_include_tag 'new'
2 + = javascript_include_tag 'local_jquery'
3 3
4 4 %script{:type=>"text/javascript"}
5 5 $(function () {
6 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 30 %th Problem full name
31 31 %th Language
32 32 %th Submitted at
33 33 %th Result
34 34 %th Score
35 35 - if session[:admin]
36 36 %th IP
37 37 %tbody
38 38 - @submission.each do |s|
39 39 - next unless s.problem
40 40 %tr
41 41 %td= link_to "#{s.id}", controller: "graders", action: "submission", id: s.id
42 42 %td= s.problem.name
43 43 %td= s.problem.full_name
44 44 %td= s.language.pretty_name
45 45 %td #{s.submitted_at.strftime('%Y-%m-%d %H:%M')} (#{time_ago_in_words(s.submitted_at)} ago)
46 46 %td.fix-width= s.grader_comment
47 47 %td= (s.points*100)/s.problem.full_score
48 48 - if session[:admin]
49 49 %td= s.ip_address
50 50
51 51
52 52
@@ -1,65 +1,65
1 1 require File.expand_path('../boot', __FILE__)
2 2
3 3 require 'rails/all'
4 4
5 5 if defined?(Bundler)
6 6 # If you precompile assets before deploying to production, use this line
7 7 Bundler.require(*Rails.groups(:assets => %w(development test)))
8 8 # If you want your assets lazily compiled in production, use this line
9 9 # Bundler.require(:default, :assets, Rails.env)
10 10 end
11 11
12 12 module CafeGrader
13 13 class Application < Rails::Application
14 14 # Settings in config/environments/* take precedence over those specified here.
15 15 # Application configuration should go into files in config/initializers
16 16 # -- all .rb files in that directory are automatically loaded.
17 17
18 18 # Custom directories with classes and modules you want to be autoloadable.
19 19 config.autoload_paths += %W(#{config.root}/lib)
20 20
21 21 # Only load the plugins named here, in the order given (default is alphabetical).
22 22 # :all can be used as a placeholder for all plugins not explicitly named.
23 23 # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
24 24
25 25 # Activate observers that should always be running.
26 26 # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
27 27
28 28 # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
29 29 # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
30 30 config.time_zone = 'UTC'
31 31
32 32 # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
33 33 # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
34 34 config.i18n.default_locale = :en
35 35
36 36 # Configure the default encoding used in templates for Ruby 1.9.
37 37 config.encoding = "utf-8"
38 38
39 39 # Configure sensitive parameters which will be filtered from the log file.
40 40 config.filter_parameters += [:password]
41 41
42 42 # Enable escaping HTML in JSON.
43 43 config.active_support.escape_html_entities_in_json = true
44 44
45 45 # Use SQL instead of Active Record's schema dumper when creating the database.
46 46 # This is necessary if your schema can't be completely dumped by the schema dumper,
47 47 # like if you have constraints or database-specific column types
48 48 # config.active_record.schema_format = :sql
49 49
50 50 # Enforce whitelist mode for mass assignment.
51 51 # This will create an empty whitelist of attributes available for mass-assignment for all models
52 52 # in your app. As such, your models will need to explicitly whitelist or blacklist accessible
53 53 # parameters by using an attr_accessible or attr_protected declaration.
54 54 config.active_record.whitelist_attributes = false
55 55
56 56 # Enable the asset pipeline
57 57 config.assets.enabled = true
58 58
59 59 # Version of your assets, change this if you want to expire all your assets
60 60 config.assets.version = '1.0'
61 61
62 62 config.assets.precompile += ['announcement_refresh.js','effects.js','site_update.js','graders.css','problems.css']
63 - config.assets.precompile += ['new.js','tablesorter-theme.cafe.css']
63 + config.assets.precompile += ['local_jquery.js','tablesorter-theme.cafe.css']
64 64 end
65 65 end
deleted file
You need to be logged in to leave comments. Login now