diff --git a/src/senaite/impress/publishview.py b/src/senaite/impress/publishview.py index 74a1200e..9628dab1 100644 --- a/src/senaite/impress/publishview.py +++ b/src/senaite/impress/publishview.py @@ -133,6 +133,11 @@ def get_uids(self): """ return filter(None, self.request.get("items", "").split(",")) + def get_request_parameter(self, parameter, default=None): + """Returns the request parameter + """ + return self.request.get(parameter, default) + def get_collection(self, uids=None, group_by=None): """Wraps the given UIDs into a collection of SuperModels """ @@ -266,6 +271,9 @@ def get_report_templates(self, extensions=[".pt", ".html"]): def get_default_template(self, default="senaite.lims:Default.pt"): """Returns the configured default template from the registry """ + template = self.get_request_parameter("template") + if self.template_exists(template): + return template template = api.get_registry_record( "senaite.impress.default_template") if template is None: @@ -275,6 +283,9 @@ def get_default_template(self, default="senaite.lims:Default.pt"): def get_default_paperformat(self, default="A4"): """Returns the configured default paperformat from the registry """ + paperformat = self.get_request_parameter("paperformat") + if paperformat in self.get_paperformats(): + return paperformat paperformat = api.get_registry_record( "senaite.impress.default_paperformat") if paperformat is None: @@ -284,6 +295,9 @@ def get_default_paperformat(self, default="A4"): def get_default_orientation(self, default="portrait"): """Returns the configured default orientation from the registry """ + orientation = self.get_request_parameter("orientation") + if orientation in ["portrait", "landscape"]: + return orientation orientation = api.get_registry_record( "senaite.impress.default_orientation") if orientation is None: @@ -304,6 +318,17 @@ def get_developer_mode(self): "senaite.impress.developer_mode", False) return mode + def template_exists(self, template): + """Checks if the template exists + """ + if not template: + return False + finder = getUtility(ITemplateFinder) + template_path = finder.find_template(template) + if template_path is None: + return False + return True + def get_report_template(self, template=None): """Returns the path of report template """ diff --git a/src/senaite/impress/static/js/scripts/senaite.impress.publish.js b/src/senaite/impress/static/js/scripts/senaite.impress.publish.js index 6a46d822..a5470f5e 100644 --- a/src/senaite/impress/static/js/scripts/senaite.impress.publish.js +++ b/src/senaite/impress/static/js/scripts/senaite.impress.publish.js @@ -3,28 +3,28 @@ object-assign (c) Sindre Sorhus @license MIT -*/var r=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;function a(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,l,u=a(e),c=1;cD.length&&D.push(e)}function A(e,t,n){return null==e?0:function e(t,n,r,o){var l=typeof t;"undefined"!==l&&"boolean"!==l||(t=null);var u=!1;if(null===t)u=!0;else switch(l){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case i:case a:u=!0}}if(u)return r(o,t,""===n?"."+z(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;cI.length&&I.push(e)}function j(e,t,n){return null==e?0:function e(t,n,r,o){var l=typeof t;"undefined"!==l&&"boolean"!==l||(t=null);var u=!1;if(null===t)u=!0;else switch(l){case"string":case"number":u=!0;break;case"object":switch(t.$$typeof){case a:case i:u=!0}}if(u)return r(o,t,""===n?"."+M(t,0):n),1;if(u=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;cthis.eventPool.length&&this.eventPool.push(e)}function de(e){e.eventPool=[],e.getPooled=se,e.release=fe}o(ce.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=le)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=le)},persist:function(){this.isPersistent=le},isPersistent:ue,destructor:function(){var e,t=this.constructor.Interface;for(e in t)this[e]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null,this.isPropagationStopped=this.isDefaultPrevented=ue,this._dispatchInstances=this._dispatchListeners=null}}),ce.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null},ce.extend=function(e){function t(){}function n(){return r.apply(this,arguments)}var r=this;t.prototype=r.prototype;var i=new t;return o(i,n.prototype),n.prototype=i,n.prototype.constructor=n,n.Interface=o({},r.Interface,e),n.extend=r.extend,de(n),n},de(ce);var pe=ce.extend({data:null}),he=ce.extend({data:null}),me=[9,13,27,32],ve=$&&"CompositionEvent"in window,ye=null;$&&"documentMode"in document&&(ye=document.documentMode);var ge=$&&"TextEvent"in window&&!ye,be=$&&(!ve||ye&&8=ye),we=String.fromCharCode(32),ke={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["compositionend","keypress","textInput","paste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:"blur compositionend keydown keypress keyup mousedown".split(" ")},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:"blur compositionstart keydown keypress keyup mousedown".split(" ")},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:"blur compositionupdate keydown keypress keyup mousedown".split(" ")}},xe=!1;function Ee(e,t){switch(e){case"keyup":return-1!==me.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"blur":return!0;default:return!1}}function Se(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var _e=!1;var Ce={eventTypes:ke,extractEvents:function(e,t,n,r){var o=void 0,i=void 0;if(ve)e:{switch(e){case"compositionstart":o=ke.compositionStart;break e;case"compositionend":o=ke.compositionEnd;break e;case"compositionupdate":o=ke.compositionUpdate;break e}o=void 0}else _e?Ee(e,n)&&(o=ke.compositionEnd):"keydown"===e&&229===n.keyCode&&(o=ke.compositionStart);return o?(be&&"ko"!==n.locale&&(_e||o!==ke.compositionStart?o===ke.compositionEnd&&_e&&(i=ae()):(oe="value"in(re=r)?re.value:re.textContent,_e=!0)),o=pe.getPooled(o,t,n,r),i?o.data=i:null!==(i=Se(n))&&(o.data=i),Q(o),i=o):i=null,(e=ge?function(e,t){switch(e){case"compositionend":return Se(t);case"keypress":return 32!==t.which?null:(xe=!0,we);case"textInput":return(e=t.data)===we&&xe?null:e;default:return null}}(e,n):function(e,t){if(_e)return"compositionend"===e||!ve&&Ee(e,t)?(e=ae(),ie=oe=re=null,_e=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1