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