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, 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))
+49 -40
View File
@@ -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
@@ -2159,11 +2163,16 @@ class Auth(object):
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):
""" """