Description:
Merge pull request #28 from paphonb/change-default-language allow users to change default submission language
Commit status:
[Not Reviewed]
References:
merge default
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r806:18ecb4364a64 - - 6 files changed: 99 inserted, 76 deleted

@@ -0,0 +1,5
1 + class AddDefaultLanguageToUser < ActiveRecord::Migration[5.2]
2 + def change
3 + add_column :users, :default_language, :integer
4 + end
5 + end
@@ -50,6 +50,17
50 50 redirect_to :action => 'profile'
51 51 end
52 52
53 + def chg_default_language
54 + user = User.find(session[:user_id])
55 + user.default_language = params[:default_language]
56 + if user.save
57 + flash[:notice] = 'default language changed'
58 + else
59 + flash[:notice] = 'Error: default language changing failed'
60 + end
61 + redirect_to :action => 'profile'
62 + end
63 +
53 64 def new
54 65 @user = User.new
55 66 render :action => 'new', :layout => 'empty'
@@ -26,7 +26,7
26 26
27 27 .form-group
28 28 = label_tag 'Language:'
29 - = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px"
29 + = select_tag 'language_id', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @lang_id || @current_user.default_language || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px"
30 30 .form-group
31 31 .input-group
32 32 %span.input-group-btn
@@ -1,23 +1,28
1 1
2 2 .container-fluid
3 - = form_tag :action => 'chg_passwd', :method => 'post' do
4 - .row
5 - .col-md-6
6 - %h1 Your account settings
3 + .row
4 + .col-md-6
5 + %h1 Your account settings
6 + .form-group
7 + %label{:for => "login"} Login
8 + =@user.login
9 + .form-group
10 + %label{:for => "full_name"} Full name
11 + =@user.full_name
12 + = form_tag :action => 'chg_default_language', :method => 'post' do
13 + %h2 Change default submission language
7 14 .form-group
8 - %label{:for => "login"} Login
9 - =@user.login
10 - .form-group
11 - %label{:for => "full_name"} Full name
12 - =@user.full_name
15 + = select_tag 'default_language', options_from_collection_for_select(Language.all, 'id', 'pretty_name', @user.default_language || Language.find_by_pretty_name("Python").id || Language.first.id), class: 'form-control select', style: "width: 100px"
16 + = submit_tag 'Save', class: 'btn btn-success'
17 + %br
18 + = form_tag :action => 'chg_passwd', :method => 'post' do
19 + %h2 Change password
13 20 .form-group
14 21 %label{:for => "password"} Password
15 22 =password_field_tag :password, nil, class: 'form-control'
16 23 .form-group
17 24 %label{:for => "password_confirmation"} Password confirmation
18 25 =password_field_tag :password_confirmation, nil, class: 'form-control'
19 - .row
20 - .col-md-6
21 26 =submit_tag 'Edit', class: 'btn btn-primary'
22 27
23 28
@@ -85,6 +85,7
85 85 collection do
86 86 get 'profile'
87 87 post 'chg_passwd'
88 + post 'chg_default_language'
88 89 end
89 90 end
90 91
@@ -10,14 +10,14
10 10 #
11 11 # It's strongly recommended that you check this file into your version control system.
12 12
13 - ActiveRecord::Schema.define(version: 2021_01_24_101028) do
13 + ActiveRecord::Schema.define(version: 2021_01_30_121812) do
14 14
15 - create_table "announcements", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
15 + create_table "announcements", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
16 16 t.string "author"
17 17 t.text "body"
18 18 t.boolean "published"
19 - t.datetime "created_at", null: false
20 - t.datetime "updated_at", null: false
19 + t.datetime "created_at"
20 + t.datetime "updated_at"
21 21 t.boolean "frontpage", default: false
22 22 t.boolean "contest_only", default: false
23 23 t.string "title"
@@ -25,112 +25,112
25 25 t.boolean "on_nav_bar", default: false
26 26 end
27 27
28 - create_table "contests", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
28 + create_table "contests", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
29 29 t.string "title"
30 30 t.boolean "enabled"
31 - t.datetime "created_at", null: false
32 - t.datetime "updated_at", null: false
31 + t.datetime "created_at"
32 + t.datetime "updated_at"
33 33 t.string "name"
34 34 end
35 35
36 - create_table "contests_problems", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
36 + create_table "contests_problems", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
37 37 t.integer "contest_id"
38 38 t.integer "problem_id"
39 39 end
40 40
41 - create_table "contests_users", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
41 + create_table "contests_users", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
42 42 t.integer "contest_id"
43 43 t.integer "user_id"
44 44 end
45 45
46 - create_table "countries", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
46 + create_table "countries", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
47 47 t.string "name"
48 - t.datetime "created_at", null: false
49 - t.datetime "updated_at", null: false
48 + t.datetime "created_at"
49 + t.datetime "updated_at"
50 50 end
51 51
52 - create_table "descriptions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
52 + create_table "descriptions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
53 53 t.text "body"
54 54 t.boolean "markdowned"
55 - t.datetime "created_at", null: false
56 - t.datetime "updated_at", null: false
55 + t.datetime "created_at"
56 + t.datetime "updated_at"
57 57 end
58 58
59 - create_table "grader_configurations", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
59 + create_table "grader_configurations", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
60 60 t.string "key"
61 61 t.string "value_type"
62 62 t.string "value"
63 - t.datetime "created_at", null: false
64 - t.datetime "updated_at", null: false
63 + t.datetime "created_at"
64 + t.datetime "updated_at"
65 65 t.text "description"
66 66 end
67 67
68 - create_table "grader_processes", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
68 + create_table "grader_processes", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
69 69 t.string "host"
70 70 t.integer "pid"
71 71 t.string "mode"
72 72 t.boolean "active"
73 - t.datetime "created_at", null: false
74 - t.datetime "updated_at", null: false
73 + t.datetime "created_at"
74 + t.datetime "updated_at"
75 75 t.integer "task_id"
76 76 t.string "task_type"
77 77 t.boolean "terminated"
78 - t.index ["host", "pid"], name: "index_grader_processes_on_ip_and_pid"
78 + t.index ["host", "pid"], name: "index_grader_processes_on_host_and_pid"
79 79 end
80 80
81 - create_table "groups", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
81 + create_table "groups", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
82 82 t.string "name"
83 83 t.string "description"
84 84 t.boolean "enabled", default: true
85 85 end
86 86
87 - create_table "groups_problems", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
87 + create_table "groups_problems", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
88 88 t.integer "problem_id", null: false
89 89 t.integer "group_id", null: false
90 90 t.index ["group_id", "problem_id"], name: "index_groups_problems_on_group_id_and_problem_id"
91 91 end
92 92
93 - create_table "groups_users", options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
93 + create_table "groups_users", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
94 94 t.integer "group_id", null: false
95 95 t.integer "user_id", null: false
96 96 t.index ["user_id", "group_id"], name: "index_groups_users_on_user_id_and_group_id"
97 97 end
98 98
99 - create_table "heart_beats", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
99 + create_table "heart_beats", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
100 100 t.integer "user_id"
101 101 t.string "ip_address"
102 - t.datetime "created_at", null: false
103 - t.datetime "updated_at", null: false
102 + t.datetime "created_at"
103 + t.datetime "updated_at"
104 104 t.string "status"
105 105 t.index ["updated_at"], name: "index_heart_beats_on_updated_at"
106 106 end
107 107
108 - create_table "languages", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
108 + create_table "languages", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
109 109 t.string "name", limit: 10
110 110 t.string "pretty_name"
111 111 t.string "ext", limit: 10
112 112 t.string "common_ext"
113 113 end
114 114
115 - create_table "logins", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
115 + create_table "logins", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
116 116 t.integer "user_id"
117 117 t.string "ip_address"
118 - t.datetime "created_at", null: false
119 - t.datetime "updated_at", null: false
118 + t.datetime "created_at"
119 + t.datetime "updated_at"
120 120 t.index ["user_id"], name: "index_logins_on_user_id"
121 121 end
122 122
123 - create_table "messages", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
123 + create_table "messages", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
124 124 t.integer "sender_id"
125 125 t.integer "receiver_id"
126 126 t.integer "replying_message_id"
127 127 t.text "body"
128 128 t.boolean "replied"
129 - t.datetime "created_at", null: false
130 - t.datetime "updated_at", null: false
129 + t.datetime "created_at"
130 + t.datetime "updated_at"
131 131 end
132 132
133 - create_table "problems", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
133 + create_table "problems", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
134 134 t.string "name", limit: 30
135 135 t.string "full_name"
136 136 t.integer "full_score"
@@ -144,7 +144,7
144 144 t.boolean "view_testcase"
145 145 end
146 146
147 - create_table "problems_tags", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
147 + create_table "problems_tags", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
148 148 t.integer "problem_id"
149 149 t.integer "tag_id"
150 150 t.index ["problem_id", "tag_id"], name: "index_problems_tags_on_problem_id_and_tag_id", unique: true
@@ -152,29 +152,29
152 152 t.index ["tag_id"], name: "index_problems_tags_on_tag_id"
153 153 end
154 154
155 - create_table "rights", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
155 + create_table "rights", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
156 156 t.string "name"
157 157 t.string "controller"
158 158 t.string "action"
159 159 end
160 160
161 - create_table "rights_roles", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
161 + create_table "rights_roles", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
162 162 t.integer "right_id"
163 163 t.integer "role_id"
164 164 t.index ["role_id"], name: "index_rights_roles_on_role_id"
165 165 end
166 166
167 - create_table "roles", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
167 + create_table "roles", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
168 168 t.string "name"
169 169 end
170 170
171 - create_table "roles_users", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
171 + create_table "roles_users", id: false, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
172 172 t.integer "role_id"
173 173 t.integer "user_id"
174 174 t.index ["user_id"], name: "index_roles_users_on_user_id"
175 175 end
176 176
177 - create_table "sessions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
177 + create_table "sessions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
178 178 t.string "session_id"
179 179 t.text "data"
180 180 t.datetime "updated_at"
@@ -182,24 +182,24
182 182 t.index ["updated_at"], name: "index_sessions_on_updated_at"
183 183 end
184 184
185 - create_table "sites", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
185 + create_table "sites", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
186 186 t.string "name"
187 187 t.boolean "started"
188 188 t.datetime "start_time"
189 - t.datetime "created_at", null: false
190 - t.datetime "updated_at", null: false
189 + t.datetime "created_at"
190 + t.datetime "updated_at"
191 191 t.integer "country_id"
192 192 t.string "password"
193 193 end
194 194
195 - create_table "submission_view_logs", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
195 + create_table "submission_view_logs", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
196 196 t.integer "user_id"
197 197 t.integer "submission_id"
198 - t.datetime "created_at", null: false
199 - t.datetime "updated_at", null: false
198 + t.datetime "created_at"
199 + t.datetime "updated_at"
200 200 end
201 201
202 - create_table "submissions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
202 + create_table "submissions", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
203 203 t.integer "user_id"
204 204 t.integer "problem_id"
205 205 t.integer "language_id"
@@ -222,7 +222,7
222 222 t.index ["user_id", "problem_id"], name: "index_submissions_on_user_id_and_problem_id"
223 223 end
224 224
225 - create_table "tags", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
225 + create_table "tags", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
226 226 t.string "name", null: false
227 227 t.text "description"
228 228 t.boolean "public"
@@ -230,7 +230,7
230 230 t.datetime "updated_at", null: false
231 231 end
232 232
233 - create_table "tasks", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
233 + create_table "tasks", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
234 234 t.integer "submission_id"
235 235 t.datetime "created_at"
236 236 t.integer "status"
@@ -238,15 +238,15
238 238 t.index ["submission_id"], name: "index_tasks_on_submission_id"
239 239 end
240 240
241 - create_table "test_pairs", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
241 + create_table "test_pairs", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
242 242 t.integer "problem_id"
243 243 t.text "input", limit: 16777215
244 244 t.text "solution", limit: 16777215
245 - t.datetime "created_at", null: false
246 - t.datetime "updated_at", null: false
245 + t.datetime "created_at"
246 + t.datetime "updated_at"
247 247 end
248 248
249 - create_table "test_requests", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
249 + create_table "test_requests", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
250 250 t.integer "user_id"
251 251 t.integer "problem_id"
252 252 t.integer "submission_id"
@@ -254,20 +254,20
254 254 t.string "output_file_name"
255 255 t.string "running_stat"
256 256 t.integer "status"
257 - t.datetime "updated_at", null: false
257 + t.datetime "updated_at"
258 258 t.datetime "submitted_at"
259 259 t.datetime "compiled_at"
260 260 t.text "compiler_message"
261 261 t.datetime "graded_at"
262 262 t.string "grader_comment"
263 - t.datetime "created_at", null: false
263 + t.datetime "created_at"
264 264 t.float "running_time"
265 265 t.string "exit_status"
266 266 t.integer "memory_usage"
267 267 t.index ["user_id", "problem_id"], name: "index_test_requests_on_user_id_and_problem_id"
268 268 end
269 269
270 - create_table "testcases", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=latin1", force: :cascade do |t|
270 + create_table "testcases", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
271 271 t.integer "problem_id"
272 272 t.integer "num"
273 273 t.integer "group"
@@ -279,15 +279,15
279 279 t.index ["problem_id"], name: "index_testcases_on_problem_id"
280 280 end
281 281
282 - create_table "user_contest_stats", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
282 + create_table "user_contest_stats", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
283 283 t.integer "user_id"
284 - t.datetime "started_at"
285 - t.datetime "created_at", null: false
286 - t.datetime "updated_at", null: false
284 + t.timestamp "started_at"
285 + t.datetime "created_at"
286 + t.datetime "updated_at"
287 287 t.boolean "forced_logout"
288 288 end
289 289
290 - create_table "users", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci", force: :cascade do |t|
290 + create_table "users", id: :integer, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci", force: :cascade do |t|
291 291 t.string "login", limit: 50
292 292 t.string "full_name"
293 293 t.string "hashed_password"
@@ -299,10 +299,11
299 299 t.boolean "activated", default: false
300 300 t.datetime "created_at"
301 301 t.datetime "updated_at"
302 + t.string "section"
302 303 t.boolean "enabled", default: true
303 304 t.string "remark"
304 305 t.string "last_ip"
305 - t.string "section"
306 + t.integer "default_language"
306 307 t.index ["login"], name: "index_users_on_login", unique: true
307 308 end
308 309
You need to be logged in to leave comments. Login now