fixed issue 813:archive table current_record field label is translated by default
This commit is contained in:
@@ -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
@@ -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
@@ -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):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user