Merge ssh://github.com/web2py/web2py

This commit is contained in:
Michele Comitini committed 2013-07-27 16:28:10 +02:00
commit 2be04b667c
10 files changed
+59 -48

No files matched your search

+1 -1
View File
@@ -1 +1 @@
Version 2.6.0-development+timestamp.2013.07.23.02.04.35
Version 2.6.0-development+timestamp.2013.07.27.06.46.34
+2 -1
View File
@@ -32,7 +32,8 @@ except:
if request.env.http_x_forwarded_for or request.is_https:
session.secure()
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"):
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1") and \
(request.function != 'manage'):
raise HTTP(200, T('appadmin is disabled because insecure channel'))
if request.function == 'manage':
@@ -32,7 +32,8 @@ except:
if request.env.http_x_forwarded_for or request.is_https:
session.secure()
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"):
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1") and \
(request.function != 'manage'):
raise HTTP(200, T('appadmin is disabled because insecure channel'))
if request.function == 'manage':
+2 -1
View File
@@ -32,7 +32,8 @@ except:
if request.env.http_x_forwarded_for or request.is_https:
session.secure()
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"):
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1") and \
(request.function != 'manage'):
raise HTTP(200, T('appadmin is disabled because insecure channel'))
if request.function == 'manage':
+3 -4
View File
@@ -1,4 +1,3 @@
// Analytics.js 0.2.2
// (c) 2012 Segment.io Inc.
// Analytics.js may be freely distributed under the MIT license.
(function(){var e={userId:null,date:new Date,loaded:!1,initialized:!1,initializableProviders:{},providers:[],addProvider:function(e,t){this.initializableProviders[e]=t},initialize:function(e){this.providers=[],this.userId=null;for(var t in e){var n=this.initializableProviders[t],r=e[t];if(!n)throw new Error('Could not find a provider named "'+t+'"');n.initialize(r),this.providers.push(n)}this.initialized=!0;var i=this.utils.getUrlParameter(window.location.search,"ajs_uid");i&&this.identify(i);var s=this.utils.getUrlParameter(window.location.search,"ajs_event");s&&this.track(s)},identify:function(e,t){if(!this.initialized)return;this.utils.isObject(e)&&(t=e,e=null),e!==null?this.userId=e:e=this.userId;for(var n=0,r;r=this.providers[n];n++){if(!r.identify)continue;r.identify(e,this.utils.clone(t))}},track:function(e,t){if(!this.initialized)return;for(var n=0,r;r=this.providers[n];n++){if(!r.track)continue;r.track(e,this.utils.clone(t))}},pageview:function(){if(!this.initialized)return;for(var e=0,t;t=this.providers[e];e++){if(!t.pageview)continue;t.pageview()}},utils:{getSeconds:function(e){return Math.floor(new Date(e)/1e3)},clone:function(e){if(!e)return;var t={};for(var n in e)t[n]=e[n];return t},extend:function(e){var t=Array.prototype.slice.call(arguments,1);for(var n=0,r;r=t[n];n++)for(var i in r)e[i]=r[i];return e},alias:function(e,t){for(var n in t){var r=t[n];e[n]!==undefined&&(e[r]=e[n],delete e[n])}},isObject:function(e){return e===Object(e)},isString:function(e){return Object.prototype.toString.call(e)==="[object String]"},isFunction:function(e){return Object.prototype.toString.call(e)==="[object Function]"},isNumber:function(e){return Object.prototype.toString.call(e)==="[object Number]"},isEmail:function(e){return/.+\@.+\..+/.test(e)},resolveSettings:function(e,t){if(!this.isString(e)&&!this.isObject(e))throw new Error("Could not resolve settings.");if(!t)throw new Error("You must provide an api key field name.");if(this.isString(e)){var n=e;e={},e[t]=n}return e},getUrlParameter:function(e,t){var n=e.replace("?","").split("&");for(var r=0;r<n.length;r+=1){var i=n[r].split("=");if(i.length===2&&i[0]===t)return decodeURIComponent(i[1])}}}},t=window.onload;window.onload=function(){e.loaded=!0,e.utils.isFunction(t)&&t()},window.analytics=e})(),analytics.addProvider("Chartbeat",{settings:{domain:null,uid:null},initialize:function(e){e=analytics.utils.resolveSettings(e,"uid"),analytics.utils.extend(this.settings,e);var t=this.settings||{};(function(){window._sf_endpt=analytics.date.getTime();var e=document.createElement("script");e.setAttribute("language","javascript"),e.setAttribute("type","text/javascript"),e.setAttribute("src",("https:"==document.location.protocol?"https://a248.e.akamai.net/chartbeat.download.akamai.com/102508/":"http://static.chartbeat.com/")+"js/chartbeat.js"),document.body.appendChild(e)})()},pageview:function(){window.pSUPERFLY.virtualPage(window.location.pathname)}}),analytics.addProvider("CrazyEgg",{settings:{apiKey:null},initialize:function(e){e=analytics.utils.resolveSettings(e,"apiKey"),analytics.utils.extend(this.settings,e),function(){var e=document.createElement("script"),t=document.getElementsByTagName("script")[0];e.src=document.location.protocol+"//dnn506yrbagrg.cloudfront.net/pages/scripts/"+this.settings.apiKey+".js?"+Math.floor((new Date).getTime()/36e5),e.async=!0,e.type="text/javascript",t.parentNode.insertBefore(e,t)}()}}),analytics.addProvider("Customer.io",{settings:{siteId:null},initialize:function(e){e=analytics.utils.resolveSettings(e,"siteId"),analytics.utils.extend(this.settings,e);var t=this,n=window._cio=n||[];(function(){var e,r,i;e=function(e){return function(){n.push([e].concat(Array.prototype.slice.call(arguments,0)))}},r=["identify","track"];for(i=0;i<r.length;i++)n[r[i]]=e(r[i]);var s=document.createElement("script"),o=document.getElementsByTagName("script")[0];s.async=!0,s.id="cio-tracker",s.setAttribute("data-site-id",t.settings.siteId),s.src="https://assets.customer.io/assets/track.js",o.parentNode.insertBefore(s,o)})()},identify:function(e,t){if(!e)return;t||(t={}),t.id=e,!t.email&&analytics.utils.isEmail(e)&&(t.email=e),t.created&&(t.created_at=analytics.utils.getSeconds(t.created),delete t.created),window._cio.identify(t)},track:function(e,t){window._cio.track(e,t)}}),analytics.addProvider("Google Analytics",{settings:{anonymizeIp:!1,enhancedLinkAttribution:!1,siteSpeedSampleRate:null,trackingId:null},initialize:function(e){e=analytics.utils.resolveSettings(e,"trackingId"),analytics.utils.extend(this.settings,e);var t=t||[];t.push(["_setAccount",this.settings.trackingId]);if(this.settings.enhancedLinkAttribution){var n=("https:"==document.location.protocol?"https://www.":"http://www.")+"google-analytics.com/plugins/ga/inpage_linkid.js";t.push(["_require","inpage_linkid",n])}analytics.utils.isNumber(this.settings.siteSpeedSampleRate)&&t.push(["_setSiteSpeedSampleRate",this.settings.siteSpeedSampleRate]),this.settings.anonymizeIp&&t.push(["_Line truncated
!function(){function require(path,parent,orig){var resolved=require.resolve(path);if(null==resolved){orig=orig||path;parent=parent||"root";var err=new Error('Failed to require "'+orig+'" from "'+parent+'"');err.path=orig;err.parent=parent;err.require=true;throw err}var module=require.modules[resolved];if(!module.exports){module.exports={};module.client=module.component=true;module.call(this,module.exports,require.relative(resolved),module)}return module.exports}require.modules={};require.aliases={};require.resolve=function(path){if(path.charAt(0)==="/")path=path.slice(1);var paths=[path,path+".js",path+".json",path+"/index.js",path+"/index.json"];for(var i=0;i<paths.length;i++){var path=paths[i];if(require.modules.hasOwnProperty(path))return path;if(require.aliases.hasOwnProperty(path))return require.aliases[path]}};require.normalize=function(curr,path){var segs=[];if("."!=path.charAt(0))return path;curr=curr.split("/");path=path.split("/");for(var i=0;i<path.length;++i){if(".."==path[i]){curr.pop()}else if("."!=path[i]&&""!=path[i]){segs.push(path[i])}}return curr.concat(segs).join("/")};require.register=function(path,definition){require.modules[path]=definition};require.alias=function(from,to){if(!require.modules.hasOwnProperty(from)){throw new Error('Failed to alias "'+from+'", it does not exist')}require.aliases[to]=from};require.relative=function(parent){var p=require.normalize(parent,"..");function lastIndexOf(arr,obj){var i=arr.length;while(i--){if(arr[i]===obj)return i}return-1}function localRequire(path){var resolved=localRequire.resolve(path);return require(resolved,parent,path)}localRequire.resolve=function(path){var c=path.charAt(0);if("/"==c)return path.slice(1);if("."==c)return require.normalize(p,path);var segs=parent.split("/");var i=lastIndexOf(segs,"deps")+1;if(!i)i=0;path=segs.slice(0,i+1).join("/")+"/deps/"+path;return path};localRequire.exists=function(path){return require.modules.hasOwnProperty(localRequire.resolve(path))};return localRequire};require.register("avetisk-defaults/index.js",function(exports,require,module){"use strict";var defaults=function(dest,src,recursive){for(var prop in src){if(recursive&&dest[prop]instanceof Object&&src[prop]instanceof Object){dest[prop]=defaults(dest[prop],src[prop],true)}else if(!(prop in dest)){dest[prop]=src[prop]}}return dest};module.exports=defaults});require.register("component-clone/index.js",function(exports,require,module){var type;try{type=require("type")}catch(e){type=require("type-component")}module.exports=clone;function clone(obj){switch(type(obj)){case"object":var copy={};for(var key in obj){if(obj.hasOwnProperty(key)){copy[key]=clone(obj[key])}}return copy;case"array":var copy=new Array(obj.length);for(var i=0,l=obj.length;i<l;i++){copy[i]=clone(obj[i])}return copy;case"regexp":var flags="";flags+=obj.multiline?"m":"";flags+=obj.global?"g":"";flags+=obj.ignoreCase?"i":"";return new RegExp(obj.source,flags);case"date":return new Date(obj.getTime());default:return obj}}});require.register("component-cookie/index.js",function(exports,require,module){var encode=encodeURIComponent;var decode=decodeURIComponent;module.exports=function(name,value,options){switch(arguments.length){case 3:case 2:return set(name,value,options);case 1:return get(name);default:return all()}};function set(name,value,options){options=options||{};var str=encode(name)+"="+encode(value);if(null==value)options.maxage=-1;if(options.maxage){options.expires=new Date(+new Date+options.maxage)}if(options.path)str+="; path="+options.path;if(options.domain)str+="; domain="+options.domain;if(options.expires)str+="; expires="+options.expires.toUTCString();if(options.secure)str+="; secure";document.cookie=str}function all(){return parse(document.cookie)}function get(name){return all()[name]}function parse(str){var obj={};var pairs=str.split(/ *; */);var pair;if(""==pairs[0])return obj;for(var i=0;i<pairs.length;++i){pair=pairs[i].split("=");obj[decode(pair[0])]=decode(pair[1])}return obj}});require.register("component-each/index.js",function(exports,require,module){var type=require("type");var has=Object.prototype.hasOwnProperty;module.exports=function(obj,fn){switch(type(obj)){case"array":return array(obj,fn);case"object":if("number"==typeof obj.length)return array(obj,fn);return object(obj,fn);case"string":return string(obj,fn)}};function string(obj,fn){for(var i=0;i<obj.length;++i){fn(obj.charAt(i),i)}}function object(obj,fn){for(var key in obj){if(has.call(obj,key)){fn(key,obj[key])}}}function array(obj,fn){for(var i=0;i<obj.length;++i){fn(obj[i],i)}}});require.register("component-event/index.js",function(exports,require,module){exports.bind=function(el,type,fn,capture){if(el.addEventListener){el.addEventListener(type,fn,capture||false)}else{el.attachEvent("on"+type,fn)}return fn};exports.unbind=function(el,type,fn,capture){if(el.removeEventListener){el.removeEventListener(type,fn,capture||false)}else{el.detachEvent("on"+type,fn)}return fn}});require.register("component-Line truncated
else this.traits(extend(this.traits(),traits));if(userId)this.id(userId);this.save();return alias};User.prototype.save=function(){if(!this.persist)return false;cookie.set(this.cookie().key,this.id());localStore.set(this.localStorage().key,this.traits());return true};User.prototype.load=function(){if(this.loadOldCookie())return this.toJSON();var id=cookie.get(this.cookie().key),traits=localStore.get(this.localStorage().key);this.id(id);this.traits(traits);return this.toJSON()};User.prototype.clear=function(){cookie.remove(this.cookie().key);localStore.remove(this.localStorage().key);this.id(null);this.traits({})};User.prototype.loadOldCookie=function(){var user=cookie.get(this.cookie().oldKey);if(!user)return false;this.id(user.id);this.traits(user.traits);cookie.remove(this.cookie().oldKey);return true};User.prototype.toJSON=function(){return{id:this.id(),traits:this.traits()}};module.exports=bindAll(new User)});require.register("analytics/src/utils.js",function(exports,require,module){exports.getUrlParameter=function(urlSearchParameter,paramKey){var params=urlSearchParameter.replace("?","").split("&");for(var i=0;i<params.length;i+=1){var param=params[i].split("=");if(param.length===2&&param[0]===paramKey){return decodeURIComponent(param[1])}}}});require.register("analytics/src/providers/adroll.js",function(exports,require,module){var Provider=require("../provider"),load=require("load-script");module.exports=Provider.extend({name:"AdRoll",defaults:{advId:null,pixId:null},initialize:function(options,ready){window.adroll_adv_id=options.advId;window.adroll_pix_id=options.pixId;window.__adroll_loaded=true;load({http:"http://a.adroll.com/j/roundtrip.js",https:"https://s.adroll.com/j/roundtrip.js"},ready)}})});require.register("analytics/src/providers/amplitude.js",function(exports,require,module){var Provider=require("../provider"),alias=require("alias"),load=require("load-script");module.exports=Provider.extend({name:"Amplitude",key:"apiKey",defaults:{apiKey:null,pageview:false},initialize:function(options,ready){!function(e,t){var r=e.amplitude||{};r._q=[];function i(e){r[e]=function(){r._q.push([e].concat(Array.prototype.slice.call(arguments,0)))}}var s=["init","logEvent","setUserId","setGlobalUserProperties","setVersionName"];for(var c=0;c<s.length;c++){i(s[c])}e.amplitude=r}(window,document);load("https://d24n15hnbwhuhn.cloudfront.net/libs/amplitude-1.0-min.js");window.amplitude.init(options.apiKey);ready()},identify:function(userId,traits){if(userId)window.amplitude.setUserId(userId);if(traits)window.amplitude.setGlobalUserProperties(traits)},track:function(event,properties){window.amplitude.logEvent(event,properties)},pageview:function(url){if(!this.options.pageview)return;var properties={url:url||document.location.href,name:document.title};this.track("Loaded a Page",properties)}})});require.register("analytics/src/providers/bitdeli.js",function(exports,require,module){var Provider=require("../provider"),load=require("load-script");module.exports=Provider.extend({name:"Bitdeli",defaults:{inputId:null,authToken:null,initialPageview:true},initialize:function(options,ready){window._bdq=window._bdq||[];window._bdq.push(["setAccount",options.inputId,options.authToken]);if(options.initialPageview)this.pageview();load("//d2flrkr957qc5j.cloudfront.net/bitdeli.min.js");ready()},identify:function(userId,traits){if(userId)window._bdq.push(["identify",userId]);if(traits)window._bdq.push(["set",traits])},track:function(event,properties){window._bdq.push(["track",event,properties])},pageview:function(url){window._bdq.push(["trackPageview",url])}})});require.register("analytics/src/providers/bugherd.js",function(exports,require,module){var Provider=require("../provider"),load=require("load-script");module.exports=Provider.extend({name:"BugHerd",key:"apiKey",defaults:{apiKey:null,showFeedbackTab:true},initialize:function(options,ready){if(!options.showFeedbackTab){window.BugHerdConfig={feedback:{hide:true}}}load("//www.bugherd.com/sidebarv2.js?apikey="+options.apiKey,ready)}})});require.register("analytics/src/providers/chartbeat.js",function(exports,require,module){var Provider=require("../provider"),load=require("load-script");module.exports=Provider.extend({name:"Chartbeat",defaults:{domain:null,uid:null},initialize:function(options,ready){window._sf_async_config=options;var loadChartbeat=function(){if(!document.body)return setTimeout(loadChartbeat,5);window._sf_endpt=(new Date).getTime();load({https:"https://a248.e.akamai.net/chartbeat.download.akamai.com/102508/js/chartbeat.js",http:"http://static.chartbeat.com/js/chartbeat.js"},ready)};loadChartbeat()},pageview:function(url){if(!window.pSUPERFLY)return;window.pSUPERFLY.virtualPage(url||window.location.pathname)}})});require.register("analytics/src/providers/clicktale.js",function(exports,require,module){var date=require("load-date"),Provider=require("../provider"),load=require("load-script"),onBody=require("on-body");module.exports=Provider.extend({name:"ClickTalLine truncated
}window._lnq.push(["_setPersonData",{name:traits.name,email:traits.email,uid:userId,properties:traits}])},group:function(groupId,properties){if(!groupId)return;properties.id=groupId;window._lnq.push(["_setAccount",properties])},track:function(event,properties){properties||(properties={});var special={name:event};if(properties.revenue){special.revenue=properties.revenue*100;delete properties.revenue}if(properties.note){special.note=properties.note;delete properties.note}window._lnq.push(["_logEvent",special,properties])}})});require.register("analytics/src/providers/qualaroo.js",function(exports,require,module){var Provider=require("../provider"),isEmail=require("is-email"),load=require("load-script");module.exports=Provider.extend({name:"Qualaroo",defaults:{customerId:null,siteToken:null,track:false},initialize:function(options,ready){window._kiq=window._kiq||[];load("//s3.amazonaws.com/ki.js/"+options.customerId+"/"+options.siteToken+".js");ready()},identify:function(userId,traits){var identity=traits.email||userId;if(identity)window._kiq.push(["identify",identity]);if(traits)window._kiq.push(["set",traits])},track:function(event,properties){if(!this.options.track)return;var traits={};traits["Triggered: "+event]=true;this.identify(null,traits)}})});require.register("analytics/src/providers/quantcast.js",function(exports,require,module){var Provider=require("../provider"),load=require("load-script");module.exports=Provider.extend({name:"Quantcast",key:"pCode",defaults:{pCode:null},initialize:function(options,ready){window._qevents=window._qevents||[];window._qevents.push({qacct:options.pCode});load({http:"http://edge.quantserve.com/quant.js",https:"https://secure.quantserve.com/quant.js"},ready)}})});require.register("analytics/src/providers/sentry.js",function(exports,require,module){var Provider=require("../provider"),load=require("load-script");module.exports=Provider.extend({name:"Sentry",key:"config",defaults:{config:null},initialize:function(options,ready){load("//d3nslu0hdya83q.cloudfront.net/dist/1.0/raven.min.js",function(){window.Raven.config(options.config).install();ready()})},identify:function(userId,traits){traits.id=userId;window.Raven.setUser(traits)},log:function(error,properties){window.Raven.captureException(error,properties)}})});require.register("analytics/src/providers/snapengage.js",function(exports,require,module){var Provider=require("../provider"),isEmail=require("is-email"),load=require("load-script");module.exports=Provider.extend({name:"SnapEngage",key:"apiKey",defaults:{apiKey:null},initialize:function(options,ready){load("//commondatastorage.googleapis.com/code.snapengage.com/js/"+options.apiKey+".js",ready)},identify:function(userId,traits,options){if(!traits.email)return;window.SnapABug.setUserEmail(traits.email)}})});require.register("analytics/src/providers/usercycle.js",function(exports,require,module){var Provider=require("../provider"),load=require("load-script"),user=require("../user");module.exports=Provider.extend({name:"USERcycle",key:"key",defaults:{key:null},initialize:function(options,ready){window._uc=window._uc||[];window._uc.push(["_key",options.key]);load("//api.usercycle.com/javascripts/track.js");ready()},identify:function(userId,traits){if(userId)window._uc.push(["uid",userId]);window._uc.push(["action","came_back",traits])},track:function(event,properties){window._uc.push(["action",event,properties])}})});require.register("analytics/src/providers/userfox.js",function(exports,require,module){var Provider=require("../provider"),extend=require("extend"),load=require("load-script"),isEmail=require("is-email");module.exports=Provider.extend({name:"userfox",key:"clientId",defaults:{clientId:null},initialize:function(options,ready){window._ufq=window._ufq||[];load("//d2y71mjhnajxcg.cloudfront.net/js/userfox-stable.js");ready()},identify:function(userId,traits){if(!traits.email)return;window._ufq.push(["init",{clientId:this.options.clientId,email:traits.email}]);if(traits.created){traits.signup_date=(traits.created.getTime()/1e3).toString();delete traits.created;window._ufq.push(["track",traits])}}})});require.register("analytics/src/providers/uservoice.js",function(exports,require,module){var Provider=require("../provider"),load=require("load-script"),alias=require("alias"),clone=require("clone");module.exports=Provider.extend({name:"UserVoice",defaults:{widgetId:null,forumId:null,showTab:true,mode:"full",primaryColor:"#cc6d00",linkColor:"#007dbf",defaultMode:"support",tabLabel:"Feedback & Support",tabColor:"#cc6d00",tabPosition:"middle-right",tabInverted:false},initialize:function(options,ready){window.UserVoice=window.UserVoice||[];load("//widget.uservoice.com/"+options.widgetId+".js",ready);var optionsClone=clone(options);alias(optionsClone,{forumId:"forum_id",primaryColor:"primary_color",linkColor:"link_color",defaultMode:"default_mode",tabLabel:"tab_label",tabColor:"tab_color",tabPosition:"tab_position",tabInverted:"tab_inverted"});window.showClassicWidgetLine truncated
+9 -2
View File
@@ -679,6 +679,11 @@ class BaseAdapter(ConnectionPool):
'big-reference': 'BIGINT REFERENCES %(foreign_key)s ON DELETE %(on_delete_action)s',
}
def isOperationalError(self,exception):
if not hasattr(self.driver, "OperationalError"):
return None
return isinstance(exception, self.driver.OperationalError)
def id_query(self, table):
return table._id != None
@@ -4324,7 +4329,9 @@ class DatabaseStoredFile:
try:
if db.executesql(query):
return True
except Exception:
except Exception, e:
if not db._adapter.isOperationalError(e):
raise
# no web2py_filesystem found?
tb = traceback.format_exc()
LOGGER.error("Could not retrieve %s\n%s" % (filename, tb))
@@ -5457,7 +5464,7 @@ class MongoDBAdapter(NoSQLAdapter):
else:
mongosort_list.append((f, 1))
if limitby:
limitby_skip, limitby_limit = limitby
limitby_skip, limitby_limit = limitby[0], int(limitby[1])
else:
limitby_skip = limitby_limit = 0
+3
View File
@@ -27,6 +27,7 @@ defined_status = {
307: 'TEMPORARY REDIRECT',
400: 'BAD REQUEST',
401: 'UNAUTHORIZED',
402: 'PAYMENT REQUIRED',
403: 'FORBIDDEN',
404: 'NOT FOUND',
405: 'METHOD NOT ALLOWED',
@@ -79,6 +80,8 @@ class HTTP(Exception):
headers = self.headers
if status in defined_status:
status = '%d %s' % (status, defined_status[status])
elif isinstance(status, int):
status = '%d UNKNOWN ERROR' % status
else:
status = str(status)
if not regex_status.match(status):
+4 -1
View File
@@ -172,7 +172,10 @@ def copystream_progress(request, chunk_size=10 ** 5):
size = int(env.content_length)
except ValueError:
raise HTTP(400, "Invalid Content-Length header")
dest = tempfile.NamedTemporaryFile()
try: # Android requires this
dest = tempfile.NamedTemporaryFile()
except NotImplementedError: # and GAE this
dest = tempfile.TemporaryFile()
if not 'X-Progress-ID' in request.vars:
copystream(source, dest, size, chunk_size)
return dest
+22 -31
View File
@@ -2618,39 +2618,30 @@ class SQLFORM(FORM):
for rfield in table._referenced_by:
check[rfield.tablename] = \
check.get(rfield.tablename, []) + [rfield.name]
if linked_tables is None:
linked_tables = db.tables()
if isinstance(linked_tables, dict):
for tbl in linked_tables.keys():
tb = db[tbl]
if isinstance(linked_tables[tbl], list):
if len(linked_tables[tbl]) > 1:
t = T('%s(%s)' %(tbl, fld))
else:
t = T(tb._plural)
for fld in linked_tables[tbl]:
if fld not in db[tbl].fields:
raise ValueError('Field %s not in table' %fld)
args0 = tbl + '.' + fld
links.append(
lambda row, t=t, nargs=nargs, args0=args0:
A(SPAN(t), _class=trap_class(), _href=url(
args=[args0, row[id_field_name]])))
linked_tables = linked_tables.get(table._tablename,[])
if linked_tables:
for item in linked_tables:
tb = None
if isinstance(item,Table) and item._tablename in check:
tablename = item._tablename
linked_fieldnames = check[tablename]
td = item
elif isinstance(item,str) and item in check:
tablename = item
linked_fieldnames = check[item]
tb = db[item]
elif isinstance(item,Field) and item.name in check.get(item._tablename,[]):
tablename = item._tablename
linked_fieldnames = [item.name]
tb = item.table
else:
t = T(tb._plural)
fld = linked_tables[tbl]
if fld not in db[tbl].fields:
raise ValueError('Field %s not in table' %fld)
args0 = tbl + '.' + fld
links.append(
lambda row, t=t, nargs=nargs, args0=args0:
A(SPAN(t), _class=trap_class(), _href=url(
args=[args0, row[id_field_name]])))
else:
for tablename in sorted(check):
linked_fieldnames = check[tablename]
tb = db[tablename]
multiple_links = len(linked_fieldnames) > 1
for fieldname in linked_fieldnames:
if linked_tables is None or tablename in linked_tables:
linked_fieldnames = []
if tb:
multiple_links = len(linked_fieldnames) > 1
for fieldname in linked_fieldnames:
t = T(tb._plural) if not multiple_links else \
T(tb._plural + '(' + fieldname + ')')
args0 = tablename + '.' + fieldname
+11 -6
View File
@@ -893,6 +893,7 @@ class Auth(object):
on_failed_authentication=lambda x: redirect(x),
formstyle="table3cols",
label_separator=": ",
logging_enabled = True,
allow_delete_accounts=False,
password_field='password',
table_user_name='auth_user',
@@ -969,7 +970,6 @@ class Auth(object):
new_password='New password',
old_password='Old password',
group_description='Group uniquely assigned to user %(id)s',
logging_enabled = True,
register_log='User %(id)s Registered',
login_log='User %(id)s Logged-in',
login_failed_log=None,
@@ -1750,7 +1750,7 @@ class Auth(object):
user_id = None # user unknown
vars = vars or {}
# log messages should not be translated
if type(descrption).__name__ == 'lazyT':
if type(description).__name__ == 'lazyT':
description = description.m
self.table_event().insert(
description=str(description % vars),
@@ -2048,10 +2048,15 @@ class Auth(object):
if next is DEFAULT:
# important for security
next = self.settings.login_next
if self.next:
host = self.next.split('//',1)[-1].split('/')[0]
if host in self.settings.cas_domains:
next = self.next
user_next = self.next
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:
next = user_next
else:
next = user_next
if onvalidation is DEFAULT:
onvalidation = self.settings.login_onvalidation
if onaccept is DEFAULT: