Description:
added more user for codejom registration
Commit status:
[Not Reviewed]
References:
Comments:
0 Commit comments 0 Inline Comments
Unresolved TODOs:
There are no unresolved TODOs
Add another comment

r224:a42bdb5b1634 - - 5 files changed: 75 inserted, 16 deleted

@@ -1,147 +1,153
1 + # -*- coding: undecided -*-
1 require 'digest/sha1'
2 require 'digest/sha1'
2
3
3 class User < ActiveRecord::Base
4 class User < ActiveRecord::Base
4
5
5 has_and_belongs_to_many :roles
6 has_and_belongs_to_many :roles
6
7
7 has_many :test_requests, :order => "submitted_at DESC"
8 has_many :test_requests, :order => "submitted_at DESC"
8
9
9 has_many :messages,
10 has_many :messages,
10 :class_name => "Message",
11 :class_name => "Message",
11 :foreign_key => "sender_id",
12 :foreign_key => "sender_id",
12 :order => 'created_at DESC'
13 :order => 'created_at DESC'
13
14
14 has_many :replied_messages,
15 has_many :replied_messages,
15 :class_name => "Message",
16 :class_name => "Message",
16 :foreign_key => "receiver_id",
17 :foreign_key => "receiver_id",
17 :order => 'created_at DESC'
18 :order => 'created_at DESC'
18
19
19 has_many :test_pair_assignments, :dependent => :delete_all
20 has_many :test_pair_assignments, :dependent => :delete_all
20 has_many :submission_statuses
21 has_many :submission_statuses
21
22
22 has_one :contest_stat, :class_name => "UserContestStat"
23 has_one :contest_stat, :class_name => "UserContestStat"
23
24
24 belongs_to :site
25 belongs_to :site
25 belongs_to :country
26 belongs_to :country
26
27
27 # For Code Jom
28 # For Code Jom
28 has_one :codejom_status
29 has_one :codejom_status
29
30
30 named_scope :activated_users, :conditions => {:activated => true}
31 named_scope :activated_users, :conditions => {:activated => true}
31
32
32 validates_presence_of :login
33 validates_presence_of :login
33 validates_uniqueness_of :login
34 validates_uniqueness_of :login
34 validates_format_of :login, :with => /^[\_A-Za-z0-9]+$/
35 validates_format_of :login, :with => /^[\_A-Za-z0-9]+$/
35 - validates_length_of :login, :within => 3..30
36 + validates_length_of :login, :within => 3..20
36
37
37 validates_presence_of :full_name
38 validates_presence_of :full_name
38 validates_length_of :full_name, :minimum => 1
39 validates_length_of :full_name, :minimum => 1
40 +
41 + validates_presence_of :member1_full_name
42 + validates_length_of :member1_full_name, :minimum => 1
39
43
40 validates_presence_of :password, :if => :password_required?
44 validates_presence_of :password, :if => :password_required?
41 validates_length_of :password, :within => 4..20, :if => :password_required?
45 validates_length_of :password, :within => 4..20, :if => :password_required?
42 validates_confirmation_of :password, :if => :password_required?
46 validates_confirmation_of :password, :if => :password_required?
43
47
44 validates_format_of :email,
48 validates_format_of :email,
45 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
49 :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,
46 :if => :email_validation?
50 :if => :email_validation?
47 validate :uniqueness_of_email_from_activated_users,
51 validate :uniqueness_of_email_from_activated_users,
48 :if => :email_validation?
52 :if => :email_validation?
49 validate :enough_time_interval_between_same_email_registrations,
53 validate :enough_time_interval_between_same_email_registrations,
50 :if => :email_validation?
54 :if => :email_validation?
51
55
56 + validate :school_names_for_high_school_users
57 +
52 # these are for ytopc
58 # these are for ytopc
53 # disable for now
59 # disable for now
54 #validates_presence_of :province
60 #validates_presence_of :province
55
61
56 attr_accessor :password
62 attr_accessor :password
57
63
58 before_save :encrypt_new_password
64 before_save :encrypt_new_password
59 before_save :assign_default_site
65 before_save :assign_default_site
60
66
61 def self.authenticate(login, password)
67 def self.authenticate(login, password)
62 user = find_by_login(login)
68 user = find_by_login(login)
63 return user if user && user.authenticated?(password)
69 return user if user && user.authenticated?(password)
64 end
70 end
65
71
66 def authenticated?(password)
72 def authenticated?(password)
67 if self.activated
73 if self.activated
68 hashed_password == User.encrypt(password,self.salt)
74 hashed_password == User.encrypt(password,self.salt)
69 else
75 else
70 false
76 false
71 end
77 end
72 end
78 end
73
79
74 def admin?
80 def admin?
75 self.roles.detect {|r| r.name == 'admin' }
81 self.roles.detect {|r| r.name == 'admin' }
76 end
82 end
77
83
78 # These are methods related to test pairs
84 # These are methods related to test pairs
79
85
80 def get_test_pair_assignments_for(problem)
86 def get_test_pair_assignments_for(problem)
81 test_pair_assignments.find_all { |a| a.problem_id == problem.id }
87 test_pair_assignments.find_all { |a| a.problem_id == problem.id }
82 end
88 end
83
89
84 def get_recent_test_pair_assignment_for(problem)
90 def get_recent_test_pair_assignment_for(problem)
85 assignments = get_test_pair_assignments_for problem
91 assignments = get_test_pair_assignments_for problem
86 if assignments.length == 0
92 if assignments.length == 0
87 return nil
93 return nil
88 else
94 else
89 recent = assignments[0]
95 recent = assignments[0]
90 assignments.each do |a|
96 assignments.each do |a|
91 recent = a if a.request_number > recent.request_number
97 recent = a if a.request_number > recent.request_number
92 end
98 end
93 return recent
99 return recent
94 end
100 end
95 end
101 end
96
102
97 def can_request_new_test_pair_for?(problem)
103 def can_request_new_test_pair_for?(problem)
98 recent = get_recent_test_pair_assignment_for problem
104 recent = get_recent_test_pair_assignment_for problem
99 return (recent == nil or recent.submitted or recent.expired?)
105 return (recent == nil or recent.submitted or recent.expired?)
100 end
106 end
101
107
102 def get_new_test_pair_assignment_for(problem)
108 def get_new_test_pair_assignment_for(problem)
103 previous_assignment_numbers =
109 previous_assignment_numbers =
104 get_test_pair_assignments_for(problem).collect {|a| a.test_pair_number }
110 get_test_pair_assignments_for(problem).collect {|a| a.test_pair_number }
105 test_pair = problem.random_test_pair(previous_assignment_numbers)
111 test_pair = problem.random_test_pair(previous_assignment_numbers)
106 if test_pair
112 if test_pair
107 assignment = TestPairAssignment.new(:user => self,
113 assignment = TestPairAssignment.new(:user => self,
108 :problem => problem,
114 :problem => problem,
109 :test_pair => test_pair,
115 :test_pair => test_pair,
110 :test_pair_number => test_pair.number,
116 :test_pair_number => test_pair.number,
111 :request_number =>
117 :request_number =>
112 previous_assignment_numbers.length + 1,
118 previous_assignment_numbers.length + 1,
113 :submitted => false)
119 :submitted => false)
114 return assignment
120 return assignment
115 else
121 else
116 return nil
122 return nil
117 end
123 end
118 end
124 end
119
125
120 def get_submission_status_for(problem)
126 def get_submission_status_for(problem)
121 SubmissionStatus.find(:first,
127 SubmissionStatus.find(:first,
122 :conditions => {
128 :conditions => {
123 :user_id => id,
129 :user_id => id,
124 :problem_id => problem.id
130 :problem_id => problem.id
125 })
131 })
126 end
132 end
127
133
128 def email_for_editing
134 def email_for_editing
129 if self.email==nil
135 if self.email==nil
130 "(unknown)"
136 "(unknown)"
131 elsif self.email==''
137 elsif self.email==''
132 "(blank)"
138 "(blank)"
133 else
139 else
134 self.email
140 self.email
135 end
141 end
136 end
142 end
137
143
138 def email_for_editing=(e)
144 def email_for_editing=(e)
139 self.email=e
145 self.email=e
140 end
146 end
141
147
142 def alias_for_editing
148 def alias_for_editing
143 if self.alias==nil
149 if self.alias==nil
144 "(unknown)"
150 "(unknown)"
145 elsif self.alias==''
151 elsif self.alias==''
146 "(blank)"
152 "(blank)"
147 else
153 else
@@ -202,97 +208,108
202
208
203 def contest_finished?
209 def contest_finished?
204 if Configuration.contest_mode?
210 if Configuration.contest_mode?
205 return false if site==nil
211 return false if site==nil
206 return site.finished?
212 return site.finished?
207 elsif Configuration.indv_contest_mode?
213 elsif Configuration.indv_contest_mode?
208 time_limit = Configuration.contest_time_limit
214 time_limit = Configuration.contest_time_limit
209
215
210 return false if contest_stat==nil
216 return false if contest_stat==nil
211
217
212 return contest_time_left == 0
218 return contest_time_left == 0
213 else
219 else
214 return false
220 return false
215 end
221 end
216 end
222 end
217
223
218 def contest_started?
224 def contest_started?
219 if Configuration.contest_mode?
225 if Configuration.contest_mode?
220 return true if site==nil
226 return true if site==nil
221 return site.started
227 return site.started
222 else
228 else
223 return true
229 return true
224 end
230 end
225 end
231 end
226
232
227 # For Code Jom
233 # For Code Jom
228 def update_codejom_status
234 def update_codejom_status
229 status = codejom_status || CodejomStatus.new(:user => self)
235 status = codejom_status || CodejomStatus.new(:user => self)
230 problem_count = Problem.available_problem_count
236 problem_count = Problem.available_problem_count
231 status.num_problems_passed = (self.submission_statuses.find_all {|s| s.passed}).length
237 status.num_problems_passed = (self.submission_statuses.find_all {|s| s.passed}).length
232 status.alive = (problem_count - (status.num_problems_passed)) <= CODEJOM_MAX_ALIVE_LEVEL
238 status.alive = (problem_count - (status.num_problems_passed)) <= CODEJOM_MAX_ALIVE_LEVEL
233 status.save
239 status.save
234 end
240 end
235
241
236 def codejom_level
242 def codejom_level
237 problem_count = Problem.available_problem_count
243 problem_count = Problem.available_problem_count
238 if codejom_status!=nil
244 if codejom_status!=nil
239 return problem_count - codejom_status.num_problems_passed
245 return problem_count - codejom_status.num_problems_passed
240 else
246 else
241 return problem_count
247 return problem_count
242 end
248 end
243 end
249 end
244
250
245 protected
251 protected
246 def encrypt_new_password
252 def encrypt_new_password
247 return if password.blank?
253 return if password.blank?
248 self.salt = (10+rand(90)).to_s
254 self.salt = (10+rand(90)).to_s
249 self.hashed_password = User.encrypt(self.password,self.salt)
255 self.hashed_password = User.encrypt(self.password,self.salt)
250 end
256 end
251
257
252 def assign_default_site
258 def assign_default_site
253 # have to catch error when migrating (because self.site is not available).
259 # have to catch error when migrating (because self.site is not available).
254 begin
260 begin
255 if self.site==nil
261 if self.site==nil
256 self.site = Site.find_by_name('default')
262 self.site = Site.find_by_name('default')
257 if self.site==nil
263 if self.site==nil
258 self.site = Site.find(1) # when 'default has be renamed'
264 self.site = Site.find(1) # when 'default has be renamed'
259 end
265 end
260 end
266 end
261 rescue
267 rescue
262 end
268 end
263 end
269 end
264
270
265 def password_required?
271 def password_required?
266 self.hashed_password.blank? || !self.password.blank?
272 self.hashed_password.blank? || !self.password.blank?
267 end
273 end
268
274
269 def self.encrypt(string,salt)
275 def self.encrypt(string,salt)
270 Digest::SHA1.hexdigest(salt + string)
276 Digest::SHA1.hexdigest(salt + string)
271 end
277 end
272
278
273 def uniqueness_of_email_from_activated_users
279 def uniqueness_of_email_from_activated_users
274 user = User.activated_users.find_by_email(self.email)
280 user = User.activated_users.find_by_email(self.email)
275 if user and (user.login != self.login)
281 if user and (user.login != self.login)
276 self.errors.add_to_base("Email has already been taken")
282 self.errors.add_to_base("Email has already been taken")
277 end
283 end
278 end
284 end
279
285
280 def enough_time_interval_between_same_email_registrations
286 def enough_time_interval_between_same_email_registrations
281 return if !self.new_record?
287 return if !self.new_record?
282 return if self.activated
288 return if self.activated
283 open_user = User.find_by_email(self.email,
289 open_user = User.find_by_email(self.email,
284 :order => 'created_at DESC')
290 :order => 'created_at DESC')
285 if open_user and open_user.created_at and
291 if open_user and open_user.created_at and
286 (open_user.created_at > Time.now.gmtime - 5.minutes)
292 (open_user.created_at > Time.now.gmtime - 5.minutes)
287 self.errors.add_to_base("There are already unactivated registrations with this e-mail address (please wait for 5 minutes)")
293 self.errors.add_to_base("There are already unactivated registrations with this e-mail address (please wait for 5 minutes)")
288 end
294 end
289 end
295 end
290
296
291 def email_validation?
297 def email_validation?
292 begin
298 begin
293 return VALIDATE_USER_EMAILS
299 return VALIDATE_USER_EMAILS
294 rescue
300 rescue
295 return false
301 return false
296 end
302 end
297 end
303 end
304 +
305 +
306 + def school_names_for_high_school_users
307 + if self.high_school
308 + if (self.member1_school_name=='' or
309 + (self.member2_full_name!='' and self.member2_school_name=='') or
310 + (self.member3_full_name!='' and self.member3_school_name==''))
311 + self.errors.add_to_base("ΰΉ‚ΰΈ›ΰΈ£ΰΈ”ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ‚ΰΈ£ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈͺำหรับΰΈͺΰΈ‘ΰΈ²ΰΈŠΰΈ΄ΰΈΰΉƒΰΈ™ΰΈ—ΰΈ΅ΰΈ‘ΰΈ—ΰΈΈΰΈΰΈ„ΰΈ™")
312 + end
313 + end
314 + end
298 end
315 end
@@ -1,35 +1,34
1 - content_for :head do
1 - content_for :head do
2 = javascript_include_tag :defaults
2 = javascript_include_tag :defaults
3 %script{:type => 'text/javascript', :src => '/javascripts/announcement_refresh.js'}
3 %script{:type => 'text/javascript', :src => '/javascripts/announcement_refresh.js'}
4
4
5 = user_title_bar(@user)
5 = user_title_bar(@user)
6
6
7 - if @announcements.length!=0
7 - if @announcements.length!=0
8 .announcementbox
8 .announcementbox
9 %span{:class => 'title'}
9 %span{:class => 'title'}
10 Announcements
10 Announcements
11 #announcementbox-body
11 #announcementbox-body
12 = render :partial => 'announcement', :collection => @announcements
12 = render :partial => 'announcement', :collection => @announcements
13
13
14 %hr/
14 %hr/
15
15
16 - if (Configuration.contest_mode?) and (@user.site!=nil) and (@user.site.started!=true)
16 - if (Configuration.contest_mode?) and (@user.site!=nil) and (@user.site.started!=true)
17 %p=t 'main.start_soon'
17 %p=t 'main.start_soon'
18
18
19 - if Configuration.show_tasks_to?(@user)
19 - if Configuration.show_tasks_to?(@user)
20 .problem-list
20 .problem-list
21 = render :partial => 'problem_title', :collection => @problems, :as => :problem
21 = render :partial => 'problem_title', :collection => @problems, :as => :problem
22 .problem-content
22 .problem-content
23 - - if @current_problem_id==nil
23 + %span{:id => "problem-panel-filler", :style => (@current_problem_id!=nil) ? "display:none" : ""}
24 - %span{:id => "problem-panel-filler"}
24 + %b Welcome to Code Jom
25 - %b Welcome to Code Jom
25 + %br/
26 - %br/
26 + Choose problems from the list on the right.
27 - Choose problems from the list on the right.
28 = render :partial => 'problem', :collection => @problems
27 = render :partial => 'problem', :collection => @problems
29
28
30 %br{:clear=>'both'}/
29 %br{:clear=>'both'}/
31 %hr/
30 %hr/
32
31
33 :javascript
32 :javascript
34 Announcement.registerRefreshEventTimer();
33 Announcement.registerRefreshEventTimer();
35
34
@@ -1,39 +1,72
1 .contest-title
1 .contest-title
2 %h1
2 %h1
3 = "#{Configuration['contest.name']}: #{t 'registration.title'}"
3 = "#{Configuration['contest.name']}: #{t 'registration.title'}"
4
4
5 .registration-desc
5 .registration-desc
6 =t 'registration.description'
6 =t 'registration.description'
7
7
8 = error_messages_for :user, :header_message => (t 'registration.errors.header')
8 = error_messages_for :user, :header_message => (t 'registration.errors.header')
9
9
10 %table
10 %table
11 - form_for :user, @user, :url => { :action => 'register' } do |f|
11 - form_for :user, @user, :url => { :action => 'register' } do |f|
12 %tr
12 %tr
13 %td{:align => "right"}
13 %td{:align => "right"}
14 = "#{t 'login_label'}:"
14 = "#{t 'login_label'}:"
15 %td= f.text_field :login
15 %td= f.text_field :login
16 %tr
16 %tr
17 %td
17 %td
18 %td
18 %td
19 %small
19 %small
20 =t 'registration.login_guide'
20 =t 'registration.login_guide'
21 %tr
21 %tr
22 %td{:align => "right"}
22 %td{:align => "right"}
23 = "#{t 'full_name_label'}:"
23 = "#{t 'full_name_label'}:"
24 %td= f.text_field :full_name
24 %td= f.text_field :full_name
25 %tr
25 %tr
26 %td{:align => "right"}
26 %td{:align => "right"}
27 = "#{t 'email_label'}:"
27 = "#{t 'email_label'}:"
28 %td= f.text_field :email
28 %td= f.text_field :email
29 %tr
29 %tr
30 %td
30 %td
31 %td
31 %td
32 %small
32 %small
33 =t 'registration.email_guide'
33 =t 'registration.email_guide'
34 %tr
34 %tr
35 + %td{:align => "right"}
36 + ประเภทการΰΈͺΰΈ‘ΰΈ±ΰΈ„ΰΈ£:
37 + %td
38 + =select :user, :high_school, [['ΰΈ£ΰΈ°ΰΈ”ΰΈ±ΰΈšΰΈ‘ΰΈ±ΰΈ˜ΰΈ’ΰΈ‘ΰΈ¨ΰΈΆΰΈΰΈ©ΰΈ²',true], ['ΰΈšΰΈΈΰΈ„ΰΈ„ΰΈ₯ΰΈ—ΰΈ±ΰΉˆΰΈ§ΰΉ„ΰΈ›',false]]
39 + %tr
40 + %td{:align => "right"}
41 + ชื่อ-ΰΈ™ΰΈ²ΰΈ‘ΰΈͺกุΰΈ₯ΰΈͺΰΈ‘ΰΈ²ΰΈŠΰΈ΄ΰΈΰΈ„ΰΈ™ΰΉΰΈ£ΰΈ:
42 + %td
43 + = f.text_field :member1_full_name
44 + &nbsp;&nbsp;ΰΉ‚ΰΈ£ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™:
45 + = f.text_field :member1_school_name
46 + %tr
47 + %td{:align => "right"}
48 + ชื่อ-ΰΈ™ΰΈ²ΰΈ‘ΰΈͺกุΰΈ₯ΰΈͺΰΈ‘ΰΈ²ΰΈŠΰΈ΄ΰΈΰΈ„ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΈ­ΰΈ‡:
49 + %td
50 + = f.text_field :member2_full_name
51 + &nbsp;&nbsp;ΰΉ‚ΰΈ£ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™:
52 + = f.text_field :member2_school_name
53 + %tr
54 + %td{:align => "right"}
55 + ชื่อ-ΰΈ™ΰΈ²ΰΈ‘ΰΈͺกุΰΈ₯ΰΈͺΰΈ‘ΰΈ²ΰΈŠΰΈ΄ΰΈΰΈ„ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΈ²ΰΈ‘:
56 + %td
57 + = f.text_field :member3_full_name
58 + &nbsp;&nbsp;ΰΉ‚ΰΈ£ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™:
59 + = f.text_field :member3_school_name
60 + %tr
61 + %td
62 + %td
63 + %small
64 + ΰΈ ΰΈ²ΰΈ’ΰΉƒΰΈ™ΰΈ—ΰΈ΅ΰΈ‘ΰΉ„ΰΈ‘ΰΉˆΰΈˆΰΈ³ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈ‘ΰΈ΅ΰΈͺΰΈ‘ΰΈ²ΰΈŠΰΈ΄ΰΈΰΈ„ΰΈ£ΰΈš 3 ΰΈ„ΰΈ™
65 +
66 +
67 + %tr
35 %td/
68 %td/
36 %td
69 %td
37 = submit_tag((t 'registration.register'), :name => 'commit')
70 = submit_tag((t 'registration.register'), :name => 'commit')
38 = submit_tag((t 'cancel'), :name => 'cancel')
71 = submit_tag((t 'cancel'), :name => 'cancel')
39
72
@@ -1,138 +1,141
1 # Sample localization file for English. Add more files in this directory for other locales.
1 # Sample localization file for English. Add more files in this directory for other locales.
2 # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
2 # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
3
4 th:
4 th:
5 cancel: 'ฒกเΰΈ₯ิก'
5 cancel: 'ฒกเΰΈ₯ิก'
6
6
7 login_label: 'ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš (login)'
7 login_label: 'ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš (login)'
8 - full_name_label: 'ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ•ΰΉ‡ΰΈ‘'
8 + full_name_label: 'ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ—ΰΈ΅ΰΈ‘'
9 - email_label: 'E-mail'
9 + email_label: 'E-mail ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈ•ΰΈ΄ΰΈ”ΰΈ•ΰΉˆΰΈ­'
10 password_label: 'ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™'
10 password_label: 'ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™'
11
11
12 go_ahead_to: "ΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡"
12 go_ahead_to: "ΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡"
13 go_back_to: "กΰΈ₯ΰΈ±ΰΈšΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡"
13 go_back_to: "กΰΈ₯ΰΈ±ΰΈšΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡"
14 login_page: "ΰΈ«ΰΈ™ΰΉ‰ΰΈ²ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš"
14 login_page: "ΰΈ«ΰΈ™ΰΉ‰ΰΈ²ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš"
15 home_page: "หน้าแรก"
15 home_page: "หน้าแรก"
16
16
17 menu:
17 menu:
18 main: 'ΰΈ«ΰΈ™ΰΉ‰ΰΈ²ΰΈ«ΰΈ₯ัก'
18 main: 'ΰΈ«ΰΈ™ΰΉ‰ΰΈ²ΰΈ«ΰΈ₯ัก'
19 messages: 'ΰΈ‚ΰΉ‰ΰΈ­ΰΈ„ΰΈ§ΰΈ²ΰΈ‘'
19 messages: 'ΰΈ‚ΰΉ‰ΰΈ­ΰΈ„ΰΈ§ΰΈ²ΰΈ‘'
20 tasks: 'ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒ'
20 tasks: 'ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒ'
21 submissions: 'ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΉˆΰΈ‡'
21 submissions: 'ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΉˆΰΈ‡'
22 test: 'ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘'
22 test: 'ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘'
23 help: 'ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΉ€ΰΈ«ΰΈ₯ΰΈ·ΰΈ­'
23 help: 'ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΉ€ΰΈ«ΰΈ₯ΰΈ·ΰΈ­'
24 settings: 'ΰΉ€ΰΈ›ΰΈ₯ΰΈ΅ΰΉˆΰΈ’ΰΈ™ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™'
24 settings: 'ΰΉ€ΰΈ›ΰΈ₯ΰΈ΅ΰΉˆΰΈ’ΰΈ™ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™'
25 log_out: 'ออกจากระบบ'
25 log_out: 'ออกจากระบบ'
26
26
27 title_bar:
27 title_bar:
28 current_time: "ΰΉ€ΰΈ§ΰΈ₯ΰΈ²ΰΈ›ΰΈ±ΰΈˆΰΈˆΰΈΈΰΈšΰΈ±ΰΈ™ΰΈ„ΰΈ·ΰΈ­"
28 current_time: "ΰΉ€ΰΈ§ΰΈ₯ΰΈ²ΰΈ›ΰΈ±ΰΈˆΰΈˆΰΈΈΰΈšΰΈ±ΰΈ™ΰΈ„ΰΈ·ΰΈ­"
29 remaining_time: "ΰΉ€ΰΈ«ΰΈ₯ΰΈ·ΰΈ­ΰΉ€ΰΈ§ΰΈ₯าอมก"
29 remaining_time: "ΰΉ€ΰΈ«ΰΈ₯ΰΈ·ΰΈ­ΰΉ€ΰΈ§ΰΈ₯าอมก"
30 contest_not_started: "ΰΈ’ΰΈ±ΰΈ‡ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™"
30 contest_not_started: "ΰΈ’ΰΈ±ΰΈ‡ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™"
31
31
32 login:
32 login:
33 message: 'กรุณา login ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈͺู่ระบบ'
33 message: 'กรุณา login ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈͺู่ระบบ'
34 login_submit: 'ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš'
34 login_submit: 'ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš'
35 participation: 'ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘?'
35 participation: 'ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘?'
36 please: 'กรุณา'
36 please: 'กรุณา'
37 register: 'ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™'
37 register: 'ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™'
38 forget_password: 'ΰΈ₯ΰΈ·ΰΈ‘ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™?'
38 forget_password: 'ΰΈ₯ΰΈ·ΰΈ‘ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™?'
39
39
40 main:
40 main:
41 start_soon: "ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΈΰΈ³ΰΈ₯ΰΈ±ΰΈ‡ΰΈˆΰΈ°ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ£ΰΈ­ΰΈΰΉˆΰΈ­ΰΈ™"
41 start_soon: "ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΈΰΈ³ΰΈ₯ΰΈ±ΰΈ‡ΰΈˆΰΈ°ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ£ΰΈ­ΰΈΰΉˆΰΈ­ΰΈ™"
42 specified_in_header: "ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈ—ΰΈ΅ΰΉˆΰΈ«ΰΈ±ΰΈ§ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΉΰΈ₯ΰΉ‰ΰΈ§"
42 specified_in_header: "ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈ—ΰΈ΅ΰΉˆΰΈ«ΰΈ±ΰΈ§ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΉΰΈ₯ΰΉ‰ΰΈ§"
43
43
44 problem_desc: "ΰΈ­ΰΉˆΰΈ²ΰΈ™"
44 problem_desc: "ΰΈ­ΰΉˆΰΈ²ΰΈ™"
45 submitted_at: "ΰΈͺΰΉˆΰΈ‡ΰΉ€ΰΈ‘ΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ§ΰΈ₯ΰΈ²"
45 submitted_at: "ΰΈͺΰΉˆΰΈ‡ΰΉ€ΰΈ‘ΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ§ΰΈ₯ΰΈ²"
46 graded_at: "ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΉ€ΰΈ‘ΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ§ΰΈ₯ΰΈ²"
46 graded_at: "ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΉ€ΰΈ‘ΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ§ΰΈ₯ΰΈ²"
47 score: "คะแนน: "
47 score: "คะแนน: "
48 cmp_msg: "ผΰΈ₯ΰΈ„ΰΈ­ΰΈ‘ΰΉ„ΰΈžΰΈ₯์"
48 cmp_msg: "ผΰΈ₯ΰΈ„ΰΈ­ΰΈ‘ΰΉ„ΰΈžΰΈ₯์"
49 src_link: "ΰΈ•ΰΉ‰ΰΈ™ΰΈ‰ΰΈšΰΈ±ΰΈš"
49 src_link: "ΰΈ•ΰΉ‰ΰΈ™ΰΈ‰ΰΈšΰΈ±ΰΈš"
50 submissions_link: "การΰΈͺΰΉˆΰΈ‡ΰΈ„ΰΈ£ΰΈ±ΰΉ‰ΰΈ‡ΰΈ­ΰΈ·ΰΉˆΰΈ™ ΰΉ†"
50 submissions_link: "การΰΈͺΰΉˆΰΈ‡ΰΈ„ΰΈ£ΰΈ±ΰΉ‰ΰΈ‡ΰΈ­ΰΈ·ΰΉˆΰΈ™ ΰΉ†"
51
51
52 test:
52 test:
53 title: "ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈšΰΈ™ΰΈͺΰΈ ΰΈ²ΰΈžΰΉΰΈ§ΰΈ”ΰΈ₯ΰΉ‰ΰΈ­ΰΈ‘ΰΈ‚ΰΈ­ΰΈ‡ΰΉ€ΰΈ„ΰΈ£ΰΈ·ΰΉˆΰΈ­ΰΈ‡ΰΈ•ΰΈ£ΰΈ§ΰΈˆ"
53 title: "ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈšΰΈ™ΰΈͺΰΈ ΰΈ²ΰΈžΰΉΰΈ§ΰΈ”ΰΈ₯ΰΉ‰ΰΈ­ΰΈ‘ΰΈ‚ΰΈ­ΰΈ‡ΰΉ€ΰΈ„ΰΈ£ΰΈ·ΰΉˆΰΈ­ΰΈ‡ΰΈ•ΰΈ£ΰΈ§ΰΈˆ"
54 intro: "ΰΈ„ΰΈΈΰΈ“ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ—ΰΈ”ΰΈ₯ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΉ€ΰΈ‚ΰΈ΅ΰΈ’ΰΈ™ΰΈΰΈ±ΰΈšΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈŠΰΈΈΰΈ”ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΉ€ΰΈ­ΰΈ‡ΰΉƒΰΈ™ΰΈͺΰΈ ΰΈ²ΰΈžΰΉΰΈ§ΰΈ”ΰΈ₯ΰΉ‰ΰΈ­ΰΈ‘ΰΈˆΰΈ£ΰΈ΄ΰΈ‡ΰΈ‚ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΉ„ΰΈ”ΰΉ‰ ΰΉ‚ΰΈ”ΰΈ’ΰΉ€ΰΈ₯ือกโปรแกรฑΰΈͺΰΉˆΰΈ‡ΰΉΰΈ₯ΰΉ‰ΰΈ§ΰΈ—ΰΈ΅ΰΉˆΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈͺΰΉˆΰΈ‡ΰΉΰΈŸΰΉ‰ΰΈ‘ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈŠΰΈΈΰΈ”ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉƒΰΈ«ΰΉ‰ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’"
54 intro: "ΰΈ„ΰΈΈΰΈ“ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ—ΰΈ”ΰΈ₯ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΉ€ΰΈ‚ΰΈ΅ΰΈ’ΰΈ™ΰΈΰΈ±ΰΈšΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈŠΰΈΈΰΈ”ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΉ€ΰΈ­ΰΈ‡ΰΉƒΰΈ™ΰΈͺΰΈ ΰΈ²ΰΈžΰΉΰΈ§ΰΈ”ΰΈ₯ΰΉ‰ΰΈ­ΰΈ‘ΰΈˆΰΈ£ΰΈ΄ΰΈ‡ΰΈ‚ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΉ„ΰΈ”ΰΉ‰ ΰΉ‚ΰΈ”ΰΈ’ΰΉ€ΰΈ₯ือกโปรแกรฑΰΈͺΰΉˆΰΈ‡ΰΉΰΈ₯ΰΉ‰ΰΈ§ΰΈ—ΰΈ΅ΰΉˆΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈͺΰΉˆΰΈ‡ΰΉΰΈŸΰΉ‰ΰΈ‘ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈŠΰΈΈΰΈ”ΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉƒΰΈ«ΰΉ‰ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’"
55 disabled_at_end_announcement: "<b>ΰΈ«ΰΈ‘ΰΈ²ΰΈ’ΰΉ€ΰΈ«ΰΈ•ΰΈΈ:</b> ΰΈ£ΰΈ°ΰΈšΰΈšΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈˆΰΈ°ΰΈ«ΰΈ’ΰΈΈΰΈ”ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΉƒΰΈ™ΰΈŠΰΉˆΰΈ§ΰΈ‡ΰΉ€ΰΈ§ΰΈ₯ΰΈ² 30 ΰΈ™ΰΈ²ΰΈ—ΰΈ΅ΰΈͺΰΈΈΰΈ”ΰΈ—ΰΉ‰ΰΈ²ΰΈ’ΰΈ‚ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™"
55 disabled_at_end_announcement: "<b>ΰΈ«ΰΈ‘ΰΈ²ΰΈ’ΰΉ€ΰΈ«ΰΈ•ΰΈΈ:</b> ΰΈ£ΰΈ°ΰΈšΰΈšΰΈ—ΰΈ”ΰΈͺΰΈ­ΰΈšΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈˆΰΈ°ΰΈ«ΰΈ’ΰΈΈΰΈ”ΰΈ—ΰΈ³ΰΈ‡ΰΈ²ΰΈ™ΰΉƒΰΈ™ΰΈŠΰΉˆΰΈ§ΰΈ‡ΰΉ€ΰΈ§ΰΈ₯ΰΈ² 30 ΰΈ™ΰΈ²ΰΈ—ΰΈ΅ΰΈͺΰΈΈΰΈ”ΰΈ—ΰΉ‰ΰΈ²ΰΈ’ΰΈ‚ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™"
56
56
57 registration:
57 registration:
58 title: "ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΉƒΰΈ«ΰΈ‘ΰΉˆ"
58 title: "ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΉƒΰΈ«ΰΈ‘ΰΉˆ"
59 - description: "ในการΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ ΰΉƒΰΈ«ΰΉ‰ΰΈœΰΈΉΰΉ‰ΰΈͺΰΈ™ΰΉƒΰΈˆΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΈΰΈ£ΰΈ­ΰΈΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡ ΰΈˆΰΈ²ΰΈΰΈ™ΰΈ±ΰΉ‰ΰΈ™ΰΈ£ΰΈ°ΰΈšΰΈšΰΈˆΰΈ°ΰΈͺΰΉˆΰΈ‡ e-mail ΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡ e-mail ΰΈ—ΰΈ΅ΰΉˆΰΈ£ΰΈ°ΰΈšΰΈΈΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉƒΰΈ«ΰΉ‰ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈ•ΰΈ±ΰΈ§ΰΈ•ΰΈ™ΰΉΰΈ₯ΰΈ°ΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΉƒΰΈŠΰΉ‰ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰<br/>ΰΉƒΰΈ™ΰΈΰΈ£ΰΈ“ΰΈ΅ΰΈ—ΰΈ΅ΰΉˆΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈ™ΰΈ±ΰΈΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ ΰΈ£ΰΈšΰΈΰΈ§ΰΈ™ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΉƒΰΈ«ΰΉ‰ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΉ€ΰΈΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈΰΈ±ΰΈšΰΉ‚ΰΈ£ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΉΰΈ₯ΰΈ°ΰΈˆΰΈ±ΰΈ‡ΰΈ«ΰΈ§ΰΈ±ΰΈ”ΰΈ”ΰΉ‰ΰΈ§ΰΈ’"
59 + description: "ในการΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ ΰΉƒΰΈ«ΰΉ‰ΰΈœΰΈΉΰΉ‰ΰΈͺΰΈ™ΰΉƒΰΈˆΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΈΰΈ£ΰΈ­ΰΈΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡ ΰΈˆΰΈ²ΰΈΰΈ™ΰΈ±ΰΉ‰ΰΈ™ΰΈ£ΰΈ°ΰΈšΰΈšΰΈˆΰΈ°ΰΈͺΰΉˆΰΈ‡ e-mail ΰΉ„ΰΈ›ΰΈ’ΰΈ±ΰΈ‡ e-mail ΰΈ—ΰΈ΅ΰΉˆΰΈ£ΰΈ°ΰΈšΰΈΈΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉƒΰΈ«ΰΉ‰ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈ•ΰΈ±ΰΈ§ΰΈ•ΰΈ™ΰΉΰΈ₯ΰΈ°ΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΉƒΰΈŠΰΉ‰ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰<br/>ΰΉƒΰΈ™ΰΈΰΈ£ΰΈ“ΰΈ΅ΰΈ—ΰΈ΅ΰΉˆΰΈœΰΈΉΰΉ‰ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ΰΉ€ΰΈ›ΰΉ‡ΰΈ™ΰΈ™ΰΈ±ΰΈΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ ΰΈ£ΰΈšΰΈΰΈ§ΰΈ™ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΉƒΰΈ«ΰΉ‰ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΉ€ΰΈΰΈ΅ΰΉˆΰΈ’ΰΈ§ΰΈΰΈ±ΰΈšΰΉ‚ΰΈ£ΰΈ‡ΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈ™ΰΈ”ΰΉ‰ΰΈ§ΰΈ’"
60
60
61 successful_title: "การΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΉ€ΰΈͺΰΈ£ΰΉ‡ΰΈˆΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈšΰΈ£ΰΉ‰ΰΈ­ΰΈ’"
61 successful_title: "การΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΉ€ΰΈͺΰΈ£ΰΉ‡ΰΈˆΰΉ€ΰΈ£ΰΈ΅ΰΈ’ΰΈšΰΈ£ΰΉ‰ΰΈ­ΰΈ’"
62
62
63 - login_guide: "ΰΉƒΰΈŠΰΉ‰ΰΉ„ΰΈ”ΰΉ‰ΰΉ€ΰΈ‰ΰΈžΰΈ²ΰΈ° a-z, A-Z, 0-9 แΰΈ₯ΰΈ° _ ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈ’ΰΈ²ΰΈ§ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈΰΈ΄ΰΈ™ 20 ตัวอักษร"
63 + login_guide: "ΰΉƒΰΈŠΰΉ‰ΰΉ„ΰΈ”ΰΉ‰ΰΉ€ΰΈ‰ΰΈžΰΈ²ΰΈ° a-z, A-Z, 0-9 แΰΈ₯ΰΈ° _ ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈ’ΰΈ²ΰΈ§ΰΉ„ΰΈ‘ΰΉˆΰΉ€ΰΈΰΈ΄ΰΈ™ 20 ตัวอักษร ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ™ΰΈ΅ΰΉ‰ΰΈˆΰΈ°ΰΉƒΰΈŠΰΉ‰ΰΉΰΈͺดงในกระดานแΰΈͺΰΈ”ΰΈ‡ΰΈœΰΈ₯"
64 email_guide: "ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺอบ e-mail ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈͺΰΉˆΰΉƒΰΈ«ΰΉ‰ΰΈ–ΰΈΉΰΈΰΈ•ΰΉ‰ΰΈ­ΰΈ‡<br/>ΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ°ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΈœΰΉˆΰΈ²ΰΈ™ΰΈ—ΰΈ²ΰΈ‡ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈ—ΰΈ΅ΰΉˆΰΈˆΰΈ°ΰΈͺΰΉˆΰΈ‡ΰΉƒΰΈ«ΰΉ‰ΰΈ—ΰΈ²ΰΈ‡ e-mail"
64 email_guide: "ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺอบ e-mail ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈͺΰΉˆΰΉƒΰΈ«ΰΉ‰ΰΈ–ΰΈΉΰΈΰΈ•ΰΉ‰ΰΈ­ΰΈ‡<br/>ΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ°ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΈœΰΉˆΰΈ²ΰΈ™ΰΈ—ΰΈ²ΰΈ‡ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈ—ΰΈ΅ΰΉˆΰΈˆΰΈ°ΰΈͺΰΉˆΰΈ‡ΰΉƒΰΈ«ΰΉ‰ΰΈ—ΰΈ²ΰΈ‡ e-mail"
65 register: "ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™"
65 register: "ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™"
66
66
67 - email_body: "ΰΈͺΰΈ§ΰΈ±ΰΈͺΰΈ”ΰΈ΅ΰΈ„ΰΈ£ΰΈ±ΰΈš {{full_name}},
67 + email_body: "ΰΈͺΰΈ§ΰΈ±ΰΈͺΰΈ”ΰΈ΅ ΰΈ—ΰΈ΅ΰΈ‘ {{full_name}},
68
68
69 ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ”ΰΉ‰ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ {{contest_name}}
69 ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ”ΰΉ‰ΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΈ£ΰΉˆΰΈ§ΰΈ‘ΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ {{contest_name}}
70
70
71 ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΈ„ΰΈ·ΰΈ­: {{login}}
71 ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΈ„ΰΈ·ΰΈ­: {{login}}
72
72
73 ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΈ„ΰΈ·ΰΈ­: {{password}}
73 ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΈ„ΰΈ·ΰΈ­: {{password}}
74
74
75 กรุณาเข้าΰΈ₯ΰΈ΄ΰΈ‡ΰΈΰΉŒΰΈ•ΰΉˆΰΈ­ΰΉ„ΰΈ›ΰΈ™ΰΈ΅ΰΉ‰:
75 กรุณาเข้าΰΈ₯ΰΈ΄ΰΈ‡ΰΈΰΉŒΰΈ•ΰΉˆΰΈ­ΰΉ„ΰΈ›ΰΈ™ΰΈ΅ΰΉ‰:
76
76
77 {{activation_url}}
77 {{activation_url}}
78
78
79 ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΉƒΰΈŠΰΉ‰ΰΈ‡ΰΈ²ΰΈ™ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“
79 ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ›ΰΈ΄ΰΈ”ΰΉƒΰΈŠΰΉ‰ΰΈ‡ΰΈ²ΰΈ™ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“
80
80
81 ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ‘ΰΉˆΰΉƒΰΈŠΰΉ‰ΰΈ„ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ กรุณาΰΈ₯ΰΈ°ΰΈ—ΰΈ΄ΰΉ‰ΰΈ‡ e-mail ΰΈ‰ΰΈšΰΈ±ΰΈšΰΈ™ΰΈ΅ΰΉ‰
81 ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ‘ΰΉˆΰΉƒΰΈŠΰΉ‰ΰΈ„ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ กรุณาΰΈ₯ΰΈ°ΰΈ—ΰΈ΄ΰΉ‰ΰΈ‡ e-mail ΰΈ‰ΰΈšΰΈ±ΰΈšΰΈ™ΰΈ΅ΰΉ‰
82 แΰΈ₯ΰΈ°ΰΉΰΈˆΰΉ‰ΰΈ‡ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ”ΰΈ™ΰΈ΅ΰΉ‰ΰΈΰΈ±ΰΈš {{admin_email}}
82 แΰΈ₯ΰΈ°ΰΉΰΈˆΰΉ‰ΰΈ‡ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ”ΰΈ™ΰΈ΅ΰΉ‰ΰΈΰΈ±ΰΈš {{admin_email}}
83
83
84 ΰΈ‚ΰΈ­ΰΈšΰΈ„ΰΈΈΰΈ“ΰΈ‘ΰΈ²ΰΈ!"
84 ΰΈ‚ΰΈ­ΰΈšΰΈ„ΰΈΈΰΈ“ΰΈ‘ΰΈ²ΰΈ!"
85
85
86 email_sent: "ΰΉ€ΰΈ£ΰΈ²ΰΉ„ΰΈ”ΰΉ‰ΰΈͺΰΉˆΰΈ‡ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΉ„ΰΈ›ΰΉƒΰΈ«ΰΉ‰ΰΈ„ΰΈΈΰΈ“ΰΉΰΈ₯ΰΉ‰ΰΈ§ (ΰΉ‚ΰΈ›ΰΈ£ΰΈ”ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ₯ΰΈ·ΰΈ‘ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈ”ΰΈΉΰΉƒΰΈ™ΰΈͺΰΉˆΰΈ§ΰΈ™ Junk mail ΰΈ”ΰΉ‰ΰΈ§ΰΈ’)"
86 email_sent: "ΰΉ€ΰΈ£ΰΈ²ΰΉ„ΰΈ”ΰΉ‰ΰΈͺΰΉˆΰΈ‡ΰΈ‚ΰΉ‰ΰΈ­ΰΈ‘ΰΈΉΰΈ₯ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΉ„ΰΈ›ΰΉƒΰΈ«ΰΉ‰ΰΈ„ΰΈΈΰΈ“ΰΉΰΈ₯ΰΉ‰ΰΈ§ (ΰΉ‚ΰΈ›ΰΈ£ΰΈ”ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ₯ΰΈ·ΰΈ‘ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈ”ΰΈΉΰΉƒΰΈ™ΰΈͺΰΉˆΰΈ§ΰΈ™ Junk mail ΰΈ”ΰΉ‰ΰΈ§ΰΈ’)"
87 email_verify_at: "ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΈ—ΰΈ΅ΰΉˆ {{email}} ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™"
87 email_verify_at: "ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΈ—ΰΈ΅ΰΉˆ {{email}} ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΈ—ΰΈ±ΰΉ‰ΰΈ‡ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™"
88
88
89 activation_sucessful_title: "ΰΈšΰΈ±ΰΈ“ΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΉ„ΰΈ”ΰΉ‰ΰΈ£ΰΈ±ΰΈšΰΈΰΈ²ΰΈ£ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΉΰΈ₯ΰΉ‰ΰΈ§"
89 activation_sucessful_title: "ΰΈšΰΈ±ΰΈ“ΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΉ„ΰΈ”ΰΉ‰ΰΈ£ΰΈ±ΰΈšΰΈΰΈ²ΰΈ£ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΉΰΈ₯ΰΉ‰ΰΈ§"
90 account_activated: "ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΉƒΰΈŠΰΉ‰ΰΈ‡ΰΈ²ΰΈ™ΰΉΰΈ₯ΰΉ‰ΰΈ§"
90 account_activated: "ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΈžΰΈ£ΰΉ‰ΰΈ­ΰΈ‘ΰΉƒΰΈŠΰΉ‰ΰΈ‡ΰΈ²ΰΈ™ΰΉΰΈ₯ΰΉ‰ΰΈ§"
91
91
92 activation_failed_title: "การฒืนฒันΰΈ₯ΰΉ‰ΰΈ‘ΰΉ€ΰΈ«ΰΈ₯ΰΈ§"
92 activation_failed_title: "การฒืนฒันΰΈ₯ΰΉ‰ΰΈ‘ΰΉ€ΰΈ«ΰΈ₯ΰΈ§"
93
93
94 errors:
94 errors:
95 header: 'การΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΈ‘ΰΈ΅ΰΈ‚ΰΉ‰ΰΈ­ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ”'
95 header: 'การΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ΰΈ‘ΰΈ΅ΰΈ‚ΰΉ‰ΰΈ­ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ”'
96 email:
96 email:
97 title: "ΰΉ€ΰΈΰΈ΄ΰΈ”ΰΈ›ΰΈ±ΰΈΰΈ«ΰΈ²ΰΈ£ΰΈ°ΰΈ«ΰΈ§ΰΉˆΰΈ²ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈͺΰΉˆΰΈ‡ e-mail ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈͺΰΈ‘ΰΈ±ΰΈ„ΰΈ£"
97 title: "ΰΉ€ΰΈΰΈ΄ΰΈ”ΰΈ›ΰΈ±ΰΈΰΈ«ΰΈ²ΰΈ£ΰΈ°ΰΈ«ΰΈ§ΰΉˆΰΈ²ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈͺΰΉˆΰΈ‡ e-mail ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈͺΰΈ‘ΰΈ±ΰΈ„ΰΈ£"
98 expl: "<h2>ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΈ–ΰΈΉΰΈΰΈͺร้างขย้นแΰΈ₯ΰΉ‰ΰΈ§ ΰΉΰΈ•ΰΉˆΰΈ£ΰΈ°ΰΈšΰΈšΰΉ„ΰΈ‘ΰΉˆΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈͺΰΉˆΰΈ‡ e-mail ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈͺΰΈ‘ΰΈ±ΰΈ„ΰΈ£ΰΉ„ΰΈ”ΰΉ‰</h2>
98 expl: "<h2>ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΈ–ΰΈΉΰΈΰΈͺร้างขย้นแΰΈ₯ΰΉ‰ΰΈ§ ΰΉΰΈ•ΰΉˆΰΈ£ΰΈ°ΰΈšΰΈšΰΉ„ΰΈ‘ΰΉˆΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈͺΰΉˆΰΈ‡ e-mail ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈΰΈ²ΰΈ£ΰΈͺΰΈ‘ΰΈ±ΰΈ„ΰΈ£ΰΉ„ΰΈ”ΰΉ‰</h2>
99 ΰΈ­ΰΈ²ΰΈˆΰΉ€ΰΈΰΈ΄ΰΈ”ΰΈ›ΰΈ±ΰΈΰΈ«ΰΈ²ΰΉƒΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ±ΰΉ‰ΰΈ‡ΰΈ„ΰΉˆΰΈ²ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΈ•ΰΉ‰ΰΈ™ΰΈ‚ΰΈ­ΰΈ‡ΰΈ£ΰΈ°ΰΈšΰΈš ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΈ•ΰΈ΄ΰΈ”ΰΈ•ΰΉˆΰΈ­ΰΈœΰΈΉΰΉ‰ΰΈ”ΰΈΉΰΉΰΈ₯ΰΈ£ΰΈ°ΰΈšΰΈšΰΈ”ΰΉ‰ΰΈ§ΰΈ’ΰΈ—ΰΈ΅ΰΉˆ {{email}}<br/>ΰΈ‚ΰΈ­ΰΈ‚ΰΈ­ΰΈšΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ²ΰΈΰΈ—ΰΈ΅ΰΈ‘ΰΈ‡ΰΈ²ΰΈ™"
99 ΰΈ­ΰΈ²ΰΈˆΰΉ€ΰΈΰΈ΄ΰΈ”ΰΈ›ΰΈ±ΰΈΰΈ«ΰΈ²ΰΉƒΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ•ΰΈ±ΰΉ‰ΰΈ‡ΰΈ„ΰΉˆΰΈ²ΰΉ€ΰΈ£ΰΈ΄ΰΉˆΰΈ‘ΰΈ•ΰΉ‰ΰΈ™ΰΈ‚ΰΈ­ΰΈ‡ΰΈ£ΰΈ°ΰΈšΰΈš ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈŠΰΉˆΰΈ§ΰΈ’ΰΈ•ΰΈ΄ΰΈ”ΰΈ•ΰΉˆΰΈ­ΰΈœΰΈΉΰΉ‰ΰΈ”ΰΈΉΰΉΰΈ₯ΰΈ£ΰΈ°ΰΈšΰΈšΰΈ”ΰΉ‰ΰΈ§ΰΈ’ΰΈ—ΰΈ΅ΰΉˆ {{email}}<br/>ΰΈ‚ΰΈ­ΰΈ‚ΰΈ­ΰΈšΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ²ΰΈΰΈ—ΰΈ΅ΰΈ‘ΰΈ‡ΰΈ²ΰΈ™"
100 activation:
100 activation:
101 email_exists: "ΰΈ‘ΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈŠΰΉ‰ e-mail นม้แΰΈ₯ΰΉ‰ΰΈ§"
101 email_exists: "ΰΈ‘ΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈŠΰΉ‰ e-mail นม้แΰΈ₯ΰΉ‰ΰΈ§"
102 invalid: "ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ” ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΈ­ΰΈ΅ΰΈΰΈ„ΰΈ£ΰΈ±ΰΉ‰ΰΈ‡"
102 invalid: "ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈ’ΰΈ·ΰΈ™ΰΈ’ΰΈ±ΰΈ™ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ” ΰΈΰΈ£ΰΈΈΰΈ“ΰΈ²ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΈ­ΰΈ΅ΰΈΰΈ„ΰΈ£ΰΈ±ΰΉ‰ΰΈ‡"
103
103
104 password_retrieval:
104 password_retrieval:
105 header: "การขอรหัΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ"
105 header: "การขอรหัΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ"
106 instructions: "กรุณากรอก e-mail ΰΈ—ΰΈ΅ΰΉˆΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™"
106 instructions: "กรุณากรอก e-mail ΰΈ—ΰΈ΅ΰΉˆΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™"
107 button_label: "ΰΈ‚ΰΈ­ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ"
107 button_label: "ΰΈ‚ΰΈ­ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ"
108 no_email: "ΰΉ„ΰΈ‘ΰΉˆΰΈ‘ΰΈ΅ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈŠΰΉ‰ e-mail ดังกΰΈ₯่าว"
108 no_email: "ΰΉ„ΰΈ‘ΰΉˆΰΈ‘ΰΈ΅ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΈœΰΈΉΰΉ‰ΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈŠΰΉ‰ e-mail ดังกΰΈ₯่าว"
109 email_body: "ΰΈͺΰΈ§ΰΈ±ΰΈͺΰΈ”ΰΈ΅ΰΈ„ΰΈ£ΰΈ±ΰΈš {{full_name}},
109 email_body: "ΰΈͺΰΈ§ΰΈ±ΰΈͺΰΈ”ΰΈ΅ΰΈ„ΰΈ£ΰΈ±ΰΈš {{full_name}},
110
110
111 ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ”ΰΉ‰ΰΈ£ΰΉ‰ΰΈ­ΰΈ‡ΰΈ‚ΰΈ­ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ {{contest_name}} ΰΈ‹ΰΈΆΰΉˆΰΈ‡ΰΉ€ΰΈ£ΰΈ²ΰΉ„ΰΈ”ΰΉ‰ΰΈͺร้างให้คุณแΰΈ₯ΰΉ‰ΰΈ§ ΰΈ”ΰΈ±ΰΈ‡ΰΈ™ΰΈ΅ΰΉ‰
111 ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ”ΰΉ‰ΰΈ£ΰΉ‰ΰΈ­ΰΈ‡ΰΈ‚ΰΈ­ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈΰΈ²ΰΈ£ΰΉΰΈ‚ΰΉˆΰΈ‡ΰΈ‚ΰΈ±ΰΈ™ {{contest_name}} ΰΈ‹ΰΈΆΰΉˆΰΈ‡ΰΉ€ΰΈ£ΰΈ²ΰΉ„ΰΈ”ΰΉ‰ΰΈͺร้างให้คุณแΰΈ₯ΰΉ‰ΰΈ§ ΰΈ”ΰΈ±ΰΈ‡ΰΈ™ΰΈ΅ΰΉ‰
112
112
113 ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΈ„ΰΈ·ΰΈ­: {{login}}
113 ΰΈšΰΈ±ΰΈΰΈŠΰΈ΅ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ‚ΰΈ­ΰΈ‡ΰΈ„ΰΈΈΰΈ“ΰΈ„ΰΈ·ΰΈ­: {{login}}
114 ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΈ„ΰΈ·ΰΈ­: {{password}}
114 ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΈ„ΰΈ·ΰΈ­: {{password}}
115
115
116 ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ‘ΰΉˆΰΉ„ΰΈ”ΰΉ‰ΰΈ‚ΰΈ­ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ ΰΈ«ΰΈ£ΰΈ·ΰΈ­ΰΉ„ΰΈ‘ΰΉˆΰΉƒΰΈŠΰΉˆΰΈ„ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ กรุณาΰΈ₯ΰΈ°ΰΈ—ΰΈ΄ΰΉ‰ΰΈ‡ e-mail ΰΈ‰ΰΈšΰΈ±ΰΈšΰΈ™ΰΈ΅ΰΉ‰
116 ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ‘ΰΉˆΰΉ„ΰΈ”ΰΉ‰ΰΈ‚ΰΈ­ΰΈ£ΰΈ«ΰΈ±ΰΈͺΰΈœΰΉˆΰΈ²ΰΈ™ΰΉƒΰΈ«ΰΈ‘ΰΉˆ ΰΈ«ΰΈ£ΰΈ·ΰΈ­ΰΉ„ΰΈ‘ΰΉˆΰΉƒΰΈŠΰΉˆΰΈ„ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈ₯ΰΈ‡ΰΈ—ΰΈ°ΰΉ€ΰΈšΰΈ΅ΰΈ’ΰΈ™ กรุณาΰΈ₯ΰΈ°ΰΈ—ΰΈ΄ΰΉ‰ΰΈ‡ e-mail ΰΈ‰ΰΈšΰΈ±ΰΈšΰΈ™ΰΈ΅ΰΉ‰
117 แΰΈ₯ΰΈ°ΰΉΰΈˆΰΉ‰ΰΈ‡ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ”ΰΈ™ΰΈ΅ΰΉ‰ΰΈΰΈ±ΰΈš {{admin_email}}
117 แΰΈ₯ΰΈ°ΰΉΰΈˆΰΉ‰ΰΈ‡ΰΈ„ΰΈ§ΰΈ²ΰΈ‘ΰΈœΰΈ΄ΰΈ”ΰΈžΰΈ₯ΰΈ²ΰΈ”ΰΈ™ΰΈ΅ΰΉ‰ΰΈΰΈ±ΰΈš {{admin_email}}
118
118
119 ΰΈ‚ΰΈ­ΰΈšΰΈ„ΰΈΈΰΈ“ΰΈ‘ΰΈ²ΰΈ!"
119 ΰΈ‚ΰΈ­ΰΈšΰΈ„ΰΈΈΰΈ“ΰΈ‘ΰΈ²ΰΈ!"
120
120
121 help:
121 help:
122 how_to_submit: "วิธมการΰΈͺΰΉˆΰΈ‡ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘"
122 how_to_submit: "วิธมการΰΈͺΰΉˆΰΈ‡ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘"
123 must_specify_language: "ΰΈ„ΰΈΈΰΈ“<b>ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡</b>ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΈ­ΰΈ™ΰΈ•ΰΉ‰ΰΈ™ΰΈ‚ΰΈ­ΰΈ‡ΰΈ£ΰΈ«ΰΈ±ΰΈͺโปรแกรฑ (source code) ΰΈ™ΰΈ­ΰΈΰΈˆΰΈ²ΰΈΰΈ™ΰΈ΅ΰΉ‰ΰΈ„ΰΈΈΰΈ“ΰΈ­ΰΈ²ΰΈˆΰΈˆΰΈ°ΰΈ£ΰΈ°ΰΈšΰΈΈΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈͺΰΉˆΰΈ‡ΰΉ„ΰΈ”ΰΉ‰ΰΈ”ΰΉ‰ΰΈ§ΰΈ’"
123 must_specify_language: "ΰΈ„ΰΈΈΰΈ“<b>ΰΈ•ΰΉ‰ΰΈ­ΰΈ‡</b>ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈŠΰΉ‰ΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΈ­ΰΈ™ΰΈ•ΰΉ‰ΰΈ™ΰΈ‚ΰΈ­ΰΈ‡ΰΈ£ΰΈ«ΰΈ±ΰΈͺโปรแกรฑ (source code) ΰΈ™ΰΈ­ΰΈΰΈˆΰΈ²ΰΈΰΈ™ΰΈ΅ΰΉ‰ΰΈ„ΰΈΈΰΈ“ΰΈ­ΰΈ²ΰΈˆΰΈˆΰΈ°ΰΈ£ΰΈ°ΰΈšΰΈΈΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈͺΰΉˆΰΈ‡ΰΉ„ΰΈ”ΰΉ‰ΰΈ”ΰΉ‰ΰΈ§ΰΈ’"
124 list_available_language: "ΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ£ΰΈ°ΰΈšΰΈΈΰΉ„ΰΈ”ΰΉ‰ΰΈ„ΰΈ·ΰΈ­ <tt>C</tt>, <tt>C++</tt>, แΰΈ₯ΰΈ° <tt>Pascal</tt> ΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡ΰΉΰΈͺΰΈ”ΰΈ‡ΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΈ‚ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΈ•ΰΉˆΰΈ²ΰΈ‡ ΰΉ†"
124 list_available_language: "ΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ£ΰΈ°ΰΈšΰΈΈΰΉ„ΰΈ”ΰΉ‰ΰΈ„ΰΈ·ΰΈ­ <tt>C</tt>, <tt>C++</tt>, แΰΈ₯ΰΈ° <tt>Pascal</tt> ΰΈ”ΰΉ‰ΰΈ²ΰΈ™ΰΈ₯ΰΉˆΰΈ²ΰΈ‡ΰΉΰΈͺΰΈ”ΰΈ‡ΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΈ‚ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΈ•ΰΉˆΰΈ²ΰΈ‡ ΰΉ†"
125 accept_only_language_specified: "ระบบจะ<b>ΰΉ„ΰΈ‘ΰΉˆΰΈ£ΰΈ±ΰΈš</b>ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΉˆΰΈ‡ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ‘ΰΉˆΰΉ„ΰΈ”ΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈŠΰΉ‰"
125 accept_only_language_specified: "ระบบจะ<b>ΰΉ„ΰΈ‘ΰΉˆΰΈ£ΰΈ±ΰΈš</b>ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΉˆΰΈ‡ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉ„ΰΈ‘ΰΉˆΰΉ„ΰΈ”ΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΈ—ΰΈ΅ΰΉˆΰΉƒΰΈŠΰΉ‰"
126 specifying_task: "ΰΈ™ΰΈ­ΰΈΰΈˆΰΈ²ΰΈΰΈ™ΰΈ΅ΰΉ‰ ΰΈ„ΰΈΈΰΈ“ΰΈ’ΰΈ±ΰΈ‡ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈͺΰΉˆΰΈ‡ΰΉ€ΰΈžΰΈ΄ΰΉˆΰΈ‘ΰΉ€ΰΈ•ΰΈ΄ΰΈ‘ΰΉ„ΰΈ”ΰΉ‰ ΰΉƒΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ£ΰΈ°ΰΈšΰΈΈΰΉƒΰΈ«ΰΉ‰ΰΉƒΰΈͺ่ <tt>TASK:</tt> <i>taskname</i> ΰΈ„ΰΈΈΰΈ“ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒΰΉ„ΰΈ”ΰΉ‰ ΰΉ‚ΰΈ”ΰΈ’ΰΈˆΰΈ°ΰΉΰΈͺΰΈ”ΰΈ‡ΰΉƒΰΈ™ΰΈ§ΰΈ‡ΰΉ€ΰΈ₯ΰΉ‡ΰΈšΰΈ«ΰΈ₯ΰΈ±ΰΈ‡ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΉ„ΰΈ—ΰΈ’ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒ"
126 specifying_task: "ΰΈ™ΰΈ­ΰΈΰΈˆΰΈ²ΰΈΰΈ™ΰΈ΅ΰΉ‰ ΰΈ„ΰΈΈΰΈ“ΰΈ’ΰΈ±ΰΈ‡ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ£ΰΈ°ΰΈšΰΈΈΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒΰΈ—ΰΈ΅ΰΉˆΰΈ•ΰΉ‰ΰΈ­ΰΈ‡ΰΈΰΈ²ΰΈ£ΰΈͺΰΉˆΰΈ‡ΰΉ€ΰΈžΰΈ΄ΰΉˆΰΈ‘ΰΉ€ΰΈ•ΰΈ΄ΰΈ‘ΰΉ„ΰΈ”ΰΉ‰ ΰΉƒΰΈ™ΰΈΰΈ²ΰΈ£ΰΈ£ΰΈ°ΰΈšΰΈΈΰΉƒΰΈ«ΰΉ‰ΰΉƒΰΈͺ่ <tt>TASK:</tt> <i>taskname</i> ΰΈ„ΰΈΈΰΈ“ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈ•ΰΈ£ΰΈ§ΰΈˆΰΈͺΰΈ­ΰΈšΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒΰΉ„ΰΈ”ΰΉ‰ ΰΉ‚ΰΈ”ΰΈ’ΰΈˆΰΈ°ΰΉΰΈͺΰΈ”ΰΈ‡ΰΉƒΰΈ™ΰΈ§ΰΈ‡ΰΉ€ΰΈ₯ΰΉ‡ΰΈšΰΈ«ΰΈ₯ΰΈ±ΰΈ‡ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΈ ΰΈ²ΰΈ©ΰΈ²ΰΉ„ΰΈ—ΰΈ’ΰΈ‚ΰΈ­ΰΈ‡ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒ"
127 example_cpp: "ΰΈ’ΰΈΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΉ€ΰΈŠΰΉˆΰΈ™ ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉƒΰΈŠΰΉ‰ΰΈ ΰΈ²ΰΈ©ΰΈ² <tt>C++</tt> ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΉ€ΰΈ‚ΰΈ΅ΰΈ’ΰΈ™ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒ <tt>mobiles</tt> ΰΈ•ΰΈ­ΰΈ™ΰΈ•ΰΉ‰ΰΈ™ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ°ΰΉƒΰΈͺΰΉˆΰΈ”ΰΈ±ΰΈ‡ΰΈ™ΰΈ΅ΰΉ‰"
127 example_cpp: "ΰΈ’ΰΈΰΈ•ΰΈ±ΰΈ§ΰΈ­ΰΈ’ΰΉˆΰΈ²ΰΈ‡ΰΉ€ΰΈŠΰΉˆΰΈ™ ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉƒΰΈŠΰΉ‰ΰΈ ΰΈ²ΰΈ©ΰΈ² <tt>C++</tt> ΰΈͺΰΈ³ΰΈ«ΰΈ£ΰΈ±ΰΈšΰΉ€ΰΈ‚ΰΈ΅ΰΈ’ΰΈ™ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒ <tt>mobiles</tt> ΰΈ•ΰΈ­ΰΈ™ΰΈ•ΰΉ‰ΰΈ™ΰΉ‚ΰΈ›ΰΈ£ΰΉΰΈΰΈ£ΰΈ‘ΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ°ΰΉƒΰΈͺΰΉˆΰΈ”ΰΈ±ΰΈ‡ΰΈ™ΰΈ΅ΰΉ‰"
128 example_pas: "ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉƒΰΈŠΰΉ‰ΰΈ ΰΈ²ΰΈ©ΰΈ² <tt>Pascal</tt> ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΈ΅ΰΈ’ΰΈ™ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒΰΈ‚ΰΉ‰ΰΈ­ΰΉ€ΰΈ”ΰΈ΅ΰΈ’ΰΈ§ΰΈΰΈ±ΰΈ™ ΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ°ΰΈ£ΰΈ°ΰΈšΰΈΈ"
128 example_pas: "ΰΈ–ΰΉ‰ΰΈ²ΰΈ„ΰΈΈΰΈ“ΰΉƒΰΈŠΰΉ‰ΰΈ ΰΈ²ΰΈ©ΰΈ² <tt>Pascal</tt> ΰΉ€ΰΈžΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΈ΅ΰΈ’ΰΈ™ΰΉ‚ΰΈˆΰΈ—ΰΈ’ΰΉŒΰΈ‚ΰΉ‰ΰΈ­ΰΉ€ΰΈ”ΰΈ΅ΰΈ’ΰΈ§ΰΈΰΈ±ΰΈ™ ΰΈ„ΰΈΈΰΈ“ΰΈˆΰΈ°ΰΈ£ΰΈ°ΰΈšΰΈΈ"
129 ask_questions_at_messages: "ΰΈ–ΰΉ‰ΰΈ²ΰΈ‘ΰΈ΅ΰΈ›ΰΈ±ΰΈΰΈ«ΰΈ²ΰΉƒΰΈ™ΰΈΰΈ²ΰΈ£ΰΉƒΰΈŠΰΉ‰ΰΈ‡ΰΈ²ΰΈ™ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈͺΰΈ­ΰΈšΰΈ–ΰΈ²ΰΈ‘ΰΉ„ΰΈ”ΰΉ‰ΰΈ—ΰΈ΅ΰΉˆΰΈ«ΰΈ™ΰΉ‰ΰΈ²<a href=\"{{url}}\">{{message_link_name}}</a>"
129 ask_questions_at_messages: "ΰΈ–ΰΉ‰ΰΈ²ΰΈ‘ΰΈ΅ΰΈ›ΰΈ±ΰΈΰΈ«ΰΈ²ΰΉƒΰΈ™ΰΈΰΈ²ΰΈ£ΰΉƒΰΈŠΰΉ‰ΰΈ‡ΰΈ²ΰΈ™ΰΈͺΰΈ²ΰΈ‘ΰΈ²ΰΈ£ΰΈ–ΰΈͺΰΈ­ΰΈšΰΈ–ΰΈ²ΰΈ‘ΰΉ„ΰΈ”ΰΉ‰ΰΈ—ΰΈ΅ΰΉˆΰΈ«ΰΈ™ΰΉ‰ΰΈ²<a href=\"{{url}}\">{{message_link_name}}</a>"
130
130
131 activerecord:
131 activerecord:
132 attributes:
132 attributes:
133 user:
133 user:
134 login: "ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš"
134 login: "ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ‚ΰΉ‰ΰΈ²ΰΉƒΰΈŠΰΉ‰ΰΈ£ΰΈ°ΰΈšΰΈš"
135 full_name: "ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ•ΰΉ‡ΰΈ‘"
135 full_name: "ΰΈŠΰΈ·ΰΉˆΰΈ­ΰΉ€ΰΈ•ΰΉ‡ΰΈ‘"
136 email: "e-mail"
136 email: "e-mail"
137 province: "ΰΈˆΰΈ±ΰΈ‡ΰΈ«ΰΈ§ΰΈ±ΰΈ”"
137 province: "ΰΈˆΰΈ±ΰΈ‡ΰΈ«ΰΈ§ΰΈ±ΰΈ”"
138 -
138 + member1_full_name: "ชื่อ-ΰΈ™ΰΈ²ΰΈ‘ΰΈͺกุΰΈ₯ΰΈͺΰΈ‘ΰΈ²ΰΈŠΰΈ΄ΰΈΰΈ„ΰΈ™ΰΉΰΈ£ΰΈ"
139 + member2_full_name: "ชื่อ-ΰΈ™ΰΈ²ΰΈ‘ΰΈͺกุΰΈ₯ΰΈͺΰΈ‘ΰΈ²ΰΈŠΰΈ΄ΰΈΰΈ„ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΈ­ΰΈ‡"
140 + member3_full_name: "ชื่อ-ΰΈ™ΰΈ²ΰΈ‘ΰΈͺกุΰΈ₯ΰΈͺΰΈ‘ΰΈ²ΰΈŠΰΈ΄ΰΈΰΈ„ΰΈ™ΰΈ—ΰΈ΅ΰΉˆΰΈͺΰΈ²ΰΈ‘"
141 + No newline at end of file
@@ -1,108 +1,108
1 # This file is auto-generated from the current state of the database. Instead of editing this file,
1 # This file is auto-generated from the current state of the database. Instead of editing this file,
2 # please use the migrations feature of Active Record to incrementally modify your database, and
2 # please use the migrations feature of Active Record to incrementally modify your database, and
3 # then regenerate this schema definition.
3 # then regenerate this schema definition.
4 #
4 #
5 # Note that this schema.rb definition is the authoritative source for your database schema. If you need
5 # Note that this schema.rb definition is the authoritative source for your database schema. If you need
6 # to create the application database on another system, you should be using db:schema:load, not running
6 # to create the application database on another system, you should be using db:schema:load, not running
7 # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
7 # all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations
8 # you'll amass, the slower it'll run and the greater likelihood for issues).
8 # you'll amass, the slower it'll run and the greater likelihood for issues).
9 #
9 #
10 # It's strongly recommended to check this file into your version control system.
10 # It's strongly recommended to check this file into your version control system.
11
11
12 - ActiveRecord::Schema.define(:version => 20100124191250) do
12 + ActiveRecord::Schema.define(:version => 20100126170609) do
13
13
14 create_table "announcements", :force => true do |t|
14 create_table "announcements", :force => true do |t|
15 t.string "author"
15 t.string "author"
16 t.text "body"
16 t.text "body"
17 t.boolean "published"
17 t.boolean "published"
18 t.datetime "created_at"
18 t.datetime "created_at"
19 t.datetime "updated_at"
19 t.datetime "updated_at"
20 t.boolean "frontpage", :default => false
20 t.boolean "frontpage", :default => false
21 t.boolean "contest_only", :default => false
21 t.boolean "contest_only", :default => false
22 t.string "title"
22 t.string "title"
23 end
23 end
24
24
25 create_table "codejom_statuses", :force => true do |t|
25 create_table "codejom_statuses", :force => true do |t|
26 t.integer "user_id"
26 t.integer "user_id"
27 t.boolean "alive"
27 t.boolean "alive"
28 t.integer "num_problems_passed"
28 t.integer "num_problems_passed"
29 t.datetime "created_at"
29 t.datetime "created_at"
30 t.datetime "updated_at"
30 t.datetime "updated_at"
31 end
31 end
32
32
33 create_table "configurations", :force => true do |t|
33 create_table "configurations", :force => true do |t|
34 t.string "key"
34 t.string "key"
35 t.string "value_type"
35 t.string "value_type"
36 t.string "value"
36 t.string "value"
37 t.datetime "created_at"
37 t.datetime "created_at"
38 t.datetime "updated_at"
38 t.datetime "updated_at"
39 t.text "description"
39 t.text "description"
40 end
40 end
41
41
42 create_table "countries", :force => true do |t|
42 create_table "countries", :force => true do |t|
43 t.string "name"
43 t.string "name"
44 t.datetime "created_at"
44 t.datetime "created_at"
45 t.datetime "updated_at"
45 t.datetime "updated_at"
46 end
46 end
47
47
48 create_table "descriptions", :force => true do |t|
48 create_table "descriptions", :force => true do |t|
49 t.text "body"
49 t.text "body"
50 t.boolean "markdowned"
50 t.boolean "markdowned"
51 t.datetime "created_at"
51 t.datetime "created_at"
52 t.datetime "updated_at"
52 t.datetime "updated_at"
53 end
53 end
54
54
55 create_table "grader_processes", :force => true do |t|
55 create_table "grader_processes", :force => true do |t|
56 t.string "host", :limit => 20
56 t.string "host", :limit => 20
57 t.integer "pid"
57 t.integer "pid"
58 t.string "mode"
58 t.string "mode"
59 t.boolean "active"
59 t.boolean "active"
60 t.datetime "created_at"
60 t.datetime "created_at"
61 t.datetime "updated_at"
61 t.datetime "updated_at"
62 t.integer "task_id"
62 t.integer "task_id"
63 t.string "task_type"
63 t.string "task_type"
64 t.boolean "terminated"
64 t.boolean "terminated"
65 end
65 end
66
66
67 add_index "grader_processes", ["host", "pid"], :name => "index_grader_processes_on_ip_and_pid"
67 add_index "grader_processes", ["host", "pid"], :name => "index_grader_processes_on_ip_and_pid"
68
68
69 create_table "languages", :force => true do |t|
69 create_table "languages", :force => true do |t|
70 t.string "name", :limit => 10
70 t.string "name", :limit => 10
71 t.string "pretty_name"
71 t.string "pretty_name"
72 t.string "ext", :limit => 10
72 t.string "ext", :limit => 10
73 t.string "common_ext"
73 t.string "common_ext"
74 end
74 end
75
75
76 create_table "messages", :force => true do |t|
76 create_table "messages", :force => true do |t|
77 t.integer "sender_id"
77 t.integer "sender_id"
78 t.integer "receiver_id"
78 t.integer "receiver_id"
79 t.integer "replying_message_id"
79 t.integer "replying_message_id"
80 t.text "body"
80 t.text "body"
81 t.boolean "replied"
81 t.boolean "replied"
82 t.datetime "created_at"
82 t.datetime "created_at"
83 t.datetime "updated_at"
83 t.datetime "updated_at"
84 end
84 end
85
85
86 create_table "problems", :force => true do |t|
86 create_table "problems", :force => true do |t|
87 t.string "name", :limit => 30
87 t.string "name", :limit => 30
88 t.string "full_name"
88 t.string "full_name"
89 t.integer "full_score"
89 t.integer "full_score"
90 t.date "date_added"
90 t.date "date_added"
91 t.boolean "available"
91 t.boolean "available"
92 t.string "url"
92 t.string "url"
93 t.integer "description_id"
93 t.integer "description_id"
94 t.boolean "test_allowed"
94 t.boolean "test_allowed"
95 t.boolean "output_only"
95 t.boolean "output_only"
96 end
96 end
97
97
98 create_table "rights", :force => true do |t|
98 create_table "rights", :force => true do |t|
99 t.string "name"
99 t.string "name"
100 t.string "controller"
100 t.string "controller"
101 t.string "action"
101 t.string "action"
102 end
102 end
103
103
104 create_table "rights_roles", :id => false, :force => true do |t|
104 create_table "rights_roles", :id => false, :force => true do |t|
105 t.integer "right_id"
105 t.integer "right_id"
106 t.integer "role_id"
106 t.integer "role_id"
107 end
107 end
108
108
@@ -130,112 +130,119
130
130
131 create_table "sites", :force => true do |t|
131 create_table "sites", :force => true do |t|
132 t.string "name"
132 t.string "name"
133 t.boolean "started"
133 t.boolean "started"
134 t.datetime "start_time"
134 t.datetime "start_time"
135 t.datetime "created_at"
135 t.datetime "created_at"
136 t.datetime "updated_at"
136 t.datetime "updated_at"
137 t.integer "country_id"
137 t.integer "country_id"
138 t.string "password"
138 t.string "password"
139 end
139 end
140
140
141 create_table "submission_statuses", :force => true do |t|
141 create_table "submission_statuses", :force => true do |t|
142 t.integer "user_id"
142 t.integer "user_id"
143 t.integer "problem_id"
143 t.integer "problem_id"
144 t.boolean "passed"
144 t.boolean "passed"
145 t.integer "submission_count"
145 t.integer "submission_count"
146 t.datetime "created_at"
146 t.datetime "created_at"
147 t.datetime "updated_at"
147 t.datetime "updated_at"
148 end
148 end
149
149
150 create_table "submissions", :force => true do |t|
150 create_table "submissions", :force => true do |t|
151 t.integer "user_id"
151 t.integer "user_id"
152 t.integer "problem_id"
152 t.integer "problem_id"
153 t.integer "language_id"
153 t.integer "language_id"
154 t.text "source"
154 t.text "source"
155 t.binary "binary"
155 t.binary "binary"
156 t.datetime "submitted_at"
156 t.datetime "submitted_at"
157 t.datetime "compiled_at"
157 t.datetime "compiled_at"
158 t.text "compiler_message"
158 t.text "compiler_message"
159 t.datetime "graded_at"
159 t.datetime "graded_at"
160 t.integer "points"
160 t.integer "points"
161 t.text "grader_comment"
161 t.text "grader_comment"
162 t.integer "number"
162 t.integer "number"
163 t.string "source_filename"
163 t.string "source_filename"
164 end
164 end
165
165
166 add_index "submissions", ["user_id", "problem_id", "number"], :name => "index_submissions_on_user_id_and_problem_id_and_number", :unique => true
166 add_index "submissions", ["user_id", "problem_id", "number"], :name => "index_submissions_on_user_id_and_problem_id_and_number", :unique => true
167 add_index "submissions", ["user_id", "problem_id"], :name => "index_submissions_on_user_id_and_problem_id"
167 add_index "submissions", ["user_id", "problem_id"], :name => "index_submissions_on_user_id_and_problem_id"
168
168
169 create_table "tasks", :force => true do |t|
169 create_table "tasks", :force => true do |t|
170 t.integer "submission_id"
170 t.integer "submission_id"
171 t.datetime "created_at"
171 t.datetime "created_at"
172 t.integer "status"
172 t.integer "status"
173 t.datetime "updated_at"
173 t.datetime "updated_at"
174 end
174 end
175
175
176 create_table "test_pair_assignments", :force => true do |t|
176 create_table "test_pair_assignments", :force => true do |t|
177 t.integer "user_id"
177 t.integer "user_id"
178 t.integer "problem_id"
178 t.integer "problem_id"
179 t.integer "test_pair_id"
179 t.integer "test_pair_id"
180 t.integer "test_pair_number"
180 t.integer "test_pair_number"
181 t.integer "request_number"
181 t.integer "request_number"
182 t.datetime "created_at"
182 t.datetime "created_at"
183 t.datetime "updated_at"
183 t.datetime "updated_at"
184 t.boolean "submitted"
184 t.boolean "submitted"
185 end
185 end
186
186
187 create_table "test_pairs", :force => true do |t|
187 create_table "test_pairs", :force => true do |t|
188 t.integer "problem_id"
188 t.integer "problem_id"
189 t.text "input"
189 t.text "input"
190 t.text "solution"
190 t.text "solution"
191 t.datetime "created_at"
191 t.datetime "created_at"
192 t.datetime "updated_at"
192 t.datetime "updated_at"
193 t.integer "number"
193 t.integer "number"
194 end
194 end
195
195
196 create_table "test_requests", :force => true do |t|
196 create_table "test_requests", :force => true do |t|
197 t.integer "user_id"
197 t.integer "user_id"
198 t.integer "problem_id"
198 t.integer "problem_id"
199 t.integer "submission_id"
199 t.integer "submission_id"
200 t.string "input_file_name"
200 t.string "input_file_name"
201 t.string "output_file_name"
201 t.string "output_file_name"
202 t.string "running_stat"
202 t.string "running_stat"
203 t.integer "status"
203 t.integer "status"
204 t.datetime "updated_at"
204 t.datetime "updated_at"
205 t.datetime "submitted_at"
205 t.datetime "submitted_at"
206 t.datetime "compiled_at"
206 t.datetime "compiled_at"
207 t.text "compiler_message"
207 t.text "compiler_message"
208 t.datetime "graded_at"
208 t.datetime "graded_at"
209 t.string "grader_comment"
209 t.string "grader_comment"
210 t.datetime "created_at"
210 t.datetime "created_at"
211 t.float "running_time"
211 t.float "running_time"
212 t.string "exit_status"
212 t.string "exit_status"
213 t.integer "memory_usage"
213 t.integer "memory_usage"
214 end
214 end
215
215
216 add_index "test_requests", ["user_id", "problem_id"], :name => "index_test_requests_on_user_id_and_problem_id"
216 add_index "test_requests", ["user_id", "problem_id"], :name => "index_test_requests_on_user_id_and_problem_id"
217
217
218 create_table "user_contest_stats", :force => true do |t|
218 create_table "user_contest_stats", :force => true do |t|
219 t.integer "user_id"
219 t.integer "user_id"
220 t.datetime "started_at"
220 t.datetime "started_at"
221 t.datetime "created_at"
221 t.datetime "created_at"
222 t.datetime "updated_at"
222 t.datetime "updated_at"
223 end
223 end
224
224
225 create_table "users", :force => true do |t|
225 create_table "users", :force => true do |t|
226 - t.string "login", :limit => 50
226 + t.string "login", :limit => 50
227 t.string "full_name"
227 t.string "full_name"
228 t.string "hashed_password"
228 t.string "hashed_password"
229 - t.string "salt", :limit => 5
229 + t.string "salt", :limit => 5
230 t.string "alias"
230 t.string "alias"
231 t.string "email"
231 t.string "email"
232 t.integer "site_id"
232 t.integer "site_id"
233 t.integer "country_id"
233 t.integer "country_id"
234 - t.boolean "activated", :default => false
234 + t.boolean "activated", :default => false
235 t.datetime "created_at"
235 t.datetime "created_at"
236 t.datetime "updated_at"
236 t.datetime "updated_at"
237 + t.string "member1_full_name"
238 + t.string "member2_full_name"
239 + t.string "member3_full_name"
240 + t.boolean "high_school"
241 + t.string "member1_school_name"
242 + t.string "member2_school_name"
243 + t.string "member3_school_name"
237 end
244 end
238
245
239 add_index "users", ["login"], :name => "index_users_on_login", :unique => true
246 add_index "users", ["login"], :name => "index_users_on_login", :unique => true
240
247
241 end
248 end
You need to be logged in to leave comments. Login now