fixed issue 813:archive table current_record field label is translated by default

This commit is contained in:
mdipierro
2013-09-01 14:14:20 -05:00
parent 9729005fff
commit 0b501612ad
3 changed files with 55 additions and 44 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.6.0-development+timestamp.2013.09.01.13.34.22
Version 2.6.0-development+timestamp.2013.09.01.14.13.25
+4 -2
View File
@@ -8422,8 +8422,9 @@ class Table(object):
def _enable_record_versioning(self,
archive_db=None,
archive_name = '%(tablename)s_archive',
is_active = 'is_active',
current_record = 'current_record',
is_active = 'is_active'):
current_record_label = None):
db = self._db
archive_db = archive_db or db
archive_name = archive_name % dict(tablename=self._tablename)
@@ -8438,7 +8439,8 @@ class Table(object):
clones.append(field.clone(
unique=False, type=field.type if nfk else 'bigint'))
archive_db.define_table(
archive_name, Field(current_record,field_type), *clones)
archive_name, Field(current_record,field_type,
label=current_record_label), *clones)
self._before_update.append(
lambda qset,fs,db=archive_db,an=archive_name,cn=current_record:
archive_record(qset,fs,db[an],cn))
+50 -41
View File
@@ -1523,7 +1523,8 @@ class Auth(object):
tables,
archive_db=None,
archive_names='%(tablename)s_archive',
current_record='current_record'):
current_record='current_record',
current_record_label=None):
"""
to enable full record versioning (including auth tables):
@@ -1550,6 +1551,8 @@ class Auth(object):
does automatically.
"""
current_record_label = current_record_label or current.T(
current_record.replace('_',' ').title())
for table in tables:
fieldnames = table.fields()
if ('id' in fieldnames and
@@ -1558,7 +1561,8 @@ class Auth(object):
table._enable_record_versioning(
archive_db=archive_db,
archive_name=archive_names,
current_record=current_record)
current_record=current_record,
current_record_label=current_record_label)
def define_signature(self):
db = self.db
@@ -2158,12 +2162,17 @@ class Auth(object):
elif 'username' in table_user.fields:
username = 'username'
else:
username = 'email'
username = 'email'
settings = self.settings
if 'username' in table_user.fields or \
not self.settings.login_email_validate:
not settings.login_email_validate:
tmpvalidator = IS_NOT_EMPTY(error_message=self.messages.is_empty)
if not settings.username_case_sensitive:
tmpvalidator = [IS_LOWER(), tmpvalidator]
else:
tmpvalidator = IS_EMAIL(error_message=self.messages.invalid_email)
if not settings.email_case_sensitive:
tmpvalidator = [IS_LOWER(), tmpvalidator]
old_requires = table_user[username].requires
table_user[username].requires = tmpvalidator
@@ -2171,7 +2180,7 @@ class Auth(object):
response = current.response
session = current.session
passfield = self.settings.password_field
passfield = settings.password_field
try:
table_user[passfield].requires[-1].min_length = 0
except:
@@ -2187,43 +2196,43 @@ class Auth(object):
if next is DEFAULT:
# important for security
next = self.settings.login_next
next = settings.login_next
user_next = snext
if user_next:
external = user_next.split('://')
if external[0].lower() in ['http', 'https', 'ftp']:
host_next = user_next.split('//', 1)[-1].split('/')[0]
if host_next in self.settings.cas_domains:
if host_next in settings.cas_domains:
next = user_next
else:
next = user_next
if onvalidation is DEFAULT:
onvalidation = self.settings.login_onvalidation
onvalidation = settings.login_onvalidation
if onaccept is DEFAULT:
onaccept = self.settings.login_onaccept
onaccept = settings.login_onaccept
if log is DEFAULT:
log = self.messages['login_log']
onfail = self.settings.login_onfail
onfail = settings.login_onfail
user = None # default
# do we use our own login form, or from a central source?
if self.settings.login_form == self:
if settings.login_form == self:
form = SQLFORM(
table_user,
fields=[username, passfield],
hidden=dict(_next=next),
showid=self.settings.showid,
showid=settings.showid,
submit_button=self.messages.login_button,
delete_label=self.messages.delete_label,
formstyle=self.settings.formstyle,
separator=self.settings.label_separator
formstyle=settings.formstyle,
separator=settings.label_separator
)
if self.settings.remember_me_form:
if settings.remember_me_form:
## adds a new input checkbox "remember me for longer"
if self.settings.formstyle != 'bootstrap':
if settings.formstyle != 'bootstrap':
addrow(form, XML(" "),
DIV(XML(" "),
INPUT(_type='checkbox',
@@ -2236,9 +2245,9 @@ class Auth(object):
self.messages.label_remember_me,
_for="auth_user_remember",
)), "",
self.settings.formstyle,
settings.formstyle,
'auth_user_remember__row')
elif self.settings.formstyle == 'bootstrap':
elif settings.formstyle == 'bootstrap':
addrow(form,
"",
LABEL(
@@ -2248,20 +2257,20 @@ class Auth(object):
self.messages.label_remember_me,
_class="checkbox"),
"",
self.settings.formstyle,
settings.formstyle,
'auth_user_remember__row')
captcha = self.settings.login_captcha or \
(self.settings.login_captcha != False and self.settings.captcha)
captcha = settings.login_captcha or \
(settings.login_captcha != False and settings.captcha)
if captcha:
addrow(form, captcha.label, captcha, captcha.comment,
self.settings.formstyle, 'captcha__row')
settings.formstyle, 'captcha__row')
accepted_form = False
if form.accepts(request, session,
formname='login', dbio=False,
onvalidation=onvalidation,
hideerror=self.settings.hideerror):
hideerror=settings.hideerror):
accepted_form = True
# check for username in db
@@ -2283,36 +2292,36 @@ class Auth(object):
# try alternate logins 1st as these have the
# current version of the password
user = None
for login_method in self.settings.login_methods:
for login_method in settings.login_methods:
if login_method != self and \
login_method(request.vars[username],
request.vars[passfield]):
if not self in self.settings.login_methods:
if not self in settings.login_methods:
# do not store password in db
form.vars[passfield] = None
user = self.get_or_create_user(
form.vars, self.settings.update_fields)
form.vars, settings.update_fields)
break
if not user:
# alternates have failed, maybe because service inaccessible
if self.settings.login_methods[0] == self:
if settings.login_methods[0] == self:
# try logging in locally using cached credentials
if form.vars.get(passfield, '') == temp_user[passfield]:
# success
user = temp_user
else:
# user not in db
if not self.settings.alternate_requires_registration:
if not settings.alternate_requires_registration:
# we're allowed to auto-register users from external systems
for login_method in self.settings.login_methods:
for login_method in settings.login_methods:
if login_method != self and \
login_method(request.vars[username],
request.vars[passfield]):
if not self in self.settings.login_methods:
if not self in settings.login_methods:
# do not store password in db
form.vars[passfield] = None
user = self.get_or_create_user(
form.vars, self.settings.update_fields)
form.vars, settings.update_fields)
break
if not user:
self.log_event(self.messages['login_failed_log'],
@@ -2322,25 +2331,25 @@ class Auth(object):
callback(onfail, None)
redirect(
self.url(args=request.args, vars=request.get_vars),
client_side=self.settings.client_side)
client_side=settings.client_side)
else:
# use a central authentication server
cas = self.settings.login_form
cas = settings.login_form
cas_user = cas.get_user()
if cas_user:
cas_user[passfield] = None
user = self.get_or_create_user(
table_user._filter_fields(cas_user),
self.settings.update_fields)
settings.update_fields)
elif hasattr(cas, 'login_form'):
return cas.login_form()
else:
# we need to pass through login again before going on
next = self.url(self.settings.function, args='login')
next = self.url(settings.function, args='login')
redirect(cas.login_url(next),
client_side=self.settings.client_side)
client_side=settings.client_side)
# process authenticated users
if user:
@@ -2350,20 +2359,20 @@ class Auth(object):
self.login_user(user)
session.auth.expiration = \
request.vars.get('remember', False) and \
self.settings.long_expiration or \
self.settings.expiration
settings.long_expiration or \
settings.expiration
session.auth.remember = 'remember' in request.vars
self.log_event(log, user)
session.flash = self.messages.logged_in
# how to continue
if self.settings.login_form == self:
if settings.login_form == self:
if accepted_form:
callback(onaccept, form)
if next == session._auth_next:
session._auth_next = None
next = replace_id(next, form)
redirect(next, client_side=self.settings.client_side)
redirect(next, client_side=settings.client_side)
table_user[username].requires = old_requires
return form
@@ -2372,7 +2381,7 @@ class Auth(object):
if next == session._auth_next:
del session._auth_next
redirect(next, client_side=self.settings.client_side)
redirect(next, client_side=settings.client_side)
def logout(self, next=DEFAULT, onlogout=DEFAULT, log=DEFAULT):
"""