- Timestamp:
- 10.12.2011 23:46:41 (5 months ago)
- Location:
- ZMS/trunk
- Files:
-
- 19 edited
-
ZMSMetaobjManager.py (modified) (1 diff)
-
_accessmanager.py (modified) (2 diffs)
-
_confmanager.py (modified) (1 diff)
-
_globals.py (modified) (2 diffs)
-
_multilangmanager.py (modified) (1 diff)
-
_objattrs.py (modified) (5 diffs)
-
_versionmanager.py (modified) (1 diff)
-
_zreferableitem.py (modified) (1 diff)
-
dtml/ZMS/manage_customizelanguagesform.dtml (modified) (6 diffs)
-
dtml/ZMSMetamodelProvider/manage_main.dtml (modified) (1 diff)
-
dtml/objattrs/manage_propertiesform.dtml (modified) (1 diff)
-
dtml/object/manage_page_request.dtml (modified) (2 diffs)
-
dtml/object/preview.dtml (modified) (2 diffs)
-
dtml/object/preview_top.dtml (modified) (2 diffs)
-
etc/zms.conf (modified) (1 diff)
-
plugins/www/jquery/jquery-all.min.js (modified) (2 diffs)
-
plugins/www/jquery/plugin/jquery.plugin.zmi.js (modified) (3 diffs)
-
zms.py (modified) (1 diff)
-
zmsobject.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
ZMS/trunk/ZMSMetaobjManager.py
r1734 r1756 1119 1119 'insert': REQUEST.get( 'access_insert', []), 1120 1120 'insert_custom': REQUEST.get( 'access_insert_custom', ''), 1121 'edit': REQUEST.get( 'access_edit', []),1122 'edit_custom': REQUEST.get( 'access_edit_custom', ''),1123 1121 'delete': REQUEST.get( 'access_delete', []), 1124 1122 'delete_custom': REQUEST.get( 'access_delete_custom', ''), -
ZMS/trunk/_accessmanager.py
r1735 r1756 158 158 # -------------------------------------------------------------------------- 159 159 def hasAccess(self, REQUEST): 160 access = True161 160 auth_user = REQUEST.get('AUTHENTICATED_USER') 162 url = REQUEST.get('URL','/manage') 163 url = url[url.rfind('/'):] 164 if url.find('/manage') >= 0: 165 if access: 166 rights = self.getObjProperty( 'attr_dc_accessrights_restrictededitors', REQUEST) 167 if type( rights) is list and len( rights) > 0: 168 roles = auth_user.getRolesInContext(self) 169 access = len( filter( lambda x: x in roles, rights)) > 0 170 for right in rights: 171 access = access or auth_user.has_role( right) 172 access = access or auth_user.has_permission( right, self) 173 if access: 174 ob_access = self.getObjProperty('manage_access',REQUEST) 175 access = access and ((not type(ob_access) is dict) or (ob_access.get( 'edit') is None) or (len( self.intersection_list( self.concat_list( ob_access.get( 'edit'), [ 'Manager']), self.getUserRoles(auth_user))) > 0)) 176 access = access and auth_user.has_permission( 'ZMS Author', self) in [ 1, True] 177 else: 178 access = access and auth_user.has_permission( 'View', self) in [ 1, True] 179 if not access: 180 access = access or self.hasPublicAccess() 161 access = auth_user.has_permission( 'View', self) in [ 1, True] 162 if not access: 163 access = access or self.hasPublicAccess() 181 164 return access 182 165 … … 209 192 # Resolve security_roles. 210 193 security_roles = self.getConfProperty('ZMS.security.roles',{}) 211 for id in roles: 212 if id in security_roles.keys(): 213 dict = security_roles.get(id,{}) 214 for v in dict.values(): 215 for perm in v.get('roles',[]): 216 role = perm.replace( ' ', '') 217 if role not in roles: 218 roles.append( role) 194 for id in filter(lambda x: x in security_roles.keys(),roles): 195 dict = security_roles.get(id,{}) 196 for v in dict.values(): 197 for role in map(lambda x: x.replace( ' ', ''),v.get('roles',[])): 198 if role not in roles: 199 roles.append( role) 219 200 return roles 220 201 -
ZMS/trunk/_confmanager.py
r1747 r1756 506 506 507 507 508 # --------------------------------------------------------------------------509 # ConfManager.getNotifications:510 #511 # Collects notifications from services.512 # --------------------------------------------------------------------------513 def getNotifications(self,format='json'):514 """515 getNotifications516 """517 notifications = []518 if self.getConfProperty('ZMS.ConfManager.getNotifications.disabled',1) == 1:519 notifications.append({'severity':'disabled'})520 for ob in self.objectValues():521 if IZMSNotificationService in list(zope.interface.providedBy(ob)):522 notifications.extend(ob.getNotifications())523 if format == 'json':524 notifications = self.str_json(notifications)525 return notifications526 527 528 508 """ 529 509 ############################################################################ -
ZMS/trunk/_globals.py
r1747 r1756 408 408 def isPreviewRequest(REQUEST): 409 409 return REQUEST is not None and \ 410 REQUEST.get('preview','') == 'preview' and \ 411 REQUEST.get('live','') == '' 410 REQUEST.get('preview','') == 'preview' 412 411 413 412 … … 419 418 for ob in obs: 420 419 if ob.isVisible(REQUEST): 421 if ob.isPageElement() or ob. getObjProperty('getPageWithElements',REQUEST) in ['1','True',1,True]:420 if ob.isPageElement() or ob.attr('getPageWithElements') in ['1','True',1,True]: 422 421 return self 423 422 elif ob.isPage(): -
ZMS/trunk/_multilangmanager.py
r1732 r1756 407 407 # Returns list of Ids of languages (primary language 1st). 408 408 # -------------------------------------------------------------------------- 409 def getLangIds(self, sort= 1):409 def getLangIds(self, sort=False): 410 410 obs = [] 411 411 langs = self.getLangs() 412 for key in langs.keys(): 413 if key == self.getPrimaryLanguage(): 414 label = '*' 415 else: 416 label = langs[key]['label'] 417 obs.append((label,key)) 418 obs.sort() 419 return map(lambda ob: ob[1],obs) 412 if sort: 413 for key in langs.keys(): 414 if key == self.getPrimaryLanguage(): 415 label = '*' 416 else: 417 label = langs[key]['label'] 418 obs.append((label,key)) 419 obs.sort() 420 return map(lambda ob: ob[1],obs) 421 return langs.keys() 420 422 421 423 -
ZMS/trunk/_objattrs.py
r1743 r1756 111 111 112 112 # ------------------------------------------------------------------------------ 113 # _objattrs.hasobjattr:114 # ------------------------------------------------------------------------------115 def hasobjattr(obj, key):116 try:117 id = obj.id118 keys = obj.__dict__.keys()119 return key in keys120 except:121 return hasattr( obj, key)122 123 # ------------------------------------------------------------------------------124 113 # _objattrs.getobjattr: 125 114 # ------------------------------------------------------------------------------ … … 127 116 key = self.getObjAttrName(obj_attr,lang) 128 117 v = None 129 if hasobjattr(obj,key):118 if key in obj.__dict__.keys(): 130 119 v = getattr(obj,key) 131 120 # Default value. … … 549 538 550 539 #-- Return true if object has specified property, false else. 551 return hasobjattr(ob,attr) and getattr(ob,attr,None) is not None540 return attr in obj.__dict__.keys() and getattr(ob,attr,None) is not None 552 541 553 542 … … 760 749 if self.getType()=='ZMSRecordSet': 761 750 return b 762 v = self. getObjProperty('active',REQUEST)751 v = self.attr('active') 763 752 if type(v) is bool: 764 753 return v 765 v = self. getObjProperty('isActive',REQUEST)754 v = self.attr('isActive') 766 755 if type(v) is bool: 767 756 b = b and v … … 778 767 if lang is not None: 779 768 empty = value is None 780 if not empty: break 769 if not empty: 770 break 781 771 # Toggle. 782 772 if key == 'active': -
ZMS/trunk/_versionmanager.py
r1557 r1756 981 981 # -------------------------------------------------------------------------- 982 982 def getObjVersion(self, REQUEST={}): 983 try:984 ob = None985 983 id = REQUEST.get( 'ZMS_VERSION_%s'%self.id, None) 986 if id is not None and id not in self.objectIds(['ZMSAttributeContainer']): 987 id = None 988 if id is None: 989 preview = _globals.isPreviewRequest( REQUEST) 990 has_version_work = self.version_work_id is not None and hasattr( self, self.version_work_id) 991 has_version_live = self.version_live_id is not None and hasattr( self, self.version_live_id) 992 if (preview and has_version_work) or not (has_version_live): 993 id = self.version_work_id 994 elif (has_version_live) or not (preview and has_version_work): 995 id = self.version_live_id 996 ob = getattr( self, id) 997 s = ob.id # Never delete this line! 984 if id is not None: 985 return getattr( self, id) 986 elif REQUEST.get('preview') == 'preview': 987 ob = getattr(self, self.version_work_id, None) 988 else: 989 ob = getattr(self, self.version_live_id, None) 990 if ob is None: 991 ob = getattr(self, self.version_work_id, None) 992 if ob is None: 993 ob = getattr(self, self.version_live_id, None) 998 994 return ob 999 except:1000 preview = _globals.isPreviewRequest( REQUEST)1001 has_version_work = self.version_work_id is not None and hasattr( self, self.version_work_id)1002 has_version_live = self.version_live_id is not None and hasattr( self, self.version_live_id)1003 raise zExceptions.InternalError(_globals.writeError( self, '[getObjVersion]: an unexpected error occured!'))1004 995 1005 996 -
ZMS/trunk/_zreferableitem.py
r1715 r1756 179 179 def getRefByObjs(self, REQUEST={}): 180 180 ref_by = [] 181 if _objattrs.hasobjattr(self,'ref_by'): 182 ref_by = getattr(self,'ref_by',[]) 181 key = 'ref_by' 182 if key in self.__dict__.keys(): 183 ref_by = getattr(self,key,[]) 183 184 ref_by = list(set(ref_by)) 184 if _globals.debug( self):185 _globals.writeLog( self, "[getRefByObjs]: ref_by=%s"%str(ref_by))186 185 return ref_by 187 186 -
ZMS/trunk/dtml/ZMS/manage_customizelanguagesform.dtml
r1487 r1756 1 1 <dtml-var manage_page_header> 2 <dtml-let langId="getLangIds(sort=True)"> 2 3 3 4 <script language="JavaScript"> … … 152 153 <select class="form-element" name="<dtml-var langId>_parent"> 153 154 <option value=""><dtml-var "getZMILangStr('ATTR_PRIMARY')"> (*)</option> 154 <dtml-in "getLangIds()">155 <dtml-in langIds> 155 156 <dtml-if "_['sequence-item']!=langId"> 156 157 <option value="<dtml-var sequence-item>" … … 181 182 </dtml-let> 182 183 183 <dtml-in "getLangIds()">184 <dtml-let langId=sequence-item langObj="getLang(langId)">185 </dtml-let>186 </dtml-in>187 188 184 <!-- Insert --> 189 185 <tr class="neutralColorWhite"> … … 195 191 <td class="form-element"> 196 192 <select class="form-element" name="language_parent"> 197 <dtml-in "getLangIds()">193 <dtml-in langIds> 198 194 <option value="<dtml-var sequence-item>" 199 195 <dtml-if "_['sequence-item']==getPrimaryLanguage()"> … … 242 238 <input type="hidden" name="lang" value="<dtml-var lang>"> 243 239 <table cellspacing="1" cellpadding="0" border="0" class="zmiNeutralColorStrong0"> 244 <dtml-let langIds="getLangIds()"colspan="2+len(langIds)">240 <dtml-let colspan="2+len(langIds)"> 245 241 246 242 <!-- Header --> … … 331 327 <br/> 332 328 329 </dtml-let> 333 330 <dtml-var manage_page_footer> -
ZMS/trunk/dtml/ZMSMetamodelProvider/manage_main.dtml
r1726 r1756 855 855 <dtml-call "operator_setitem(metaObj,'access',{})"> 856 856 </dtml-if> 857 <dtml-in "['insert',' edit','delete']">857 <dtml-in "['insert','delete']"> 858 858 <dtml-let action=sequence-item> 859 859 <tr valign="middle" class="zmiTableRowEven"> -
ZMS/trunk/dtml/objattrs/manage_propertiesform.dtml
r1314 r1756 17 17 <dtml-let key=sequence-item obj_attr="getObjAttr(key)"> 18 18 <dtml-if "obj_attr['multilang']"> 19 <dtml-in "getLangIds( )">19 <dtml-in "getLangIds(sort=True)"> 20 20 <dtml-call "REQUEST.set('lang',_['sequence-item'])"> 21 21 <tr> -
ZMS/trunk/dtml/object/manage_page_request.dtml
r1555 r1756 25 25 ></dtml-let 26 26 ></dtml-if 27 ><dtml-unless "REQUEST.get( 'live','')=='live'"28 ><dtml-call "REQUEST.set( 'preview','preview')"29 ></dtml-unless30 27 ><dtml-unless "REQUEST.has_key( 'lang')" 31 28 ><dtml-call "REQUEST.set( 'lang',getPrimaryLanguage())" … … 50 47 ><dtml-call "REQUEST.set('ZMS_ACTION',action)" 51 48 ></dtml-if 52 ><dtml-unless "hasAccess(REQUEST)"53 ><dtml-call "RESPONSE.redirect(url_append_params('%s/manage_main'%aq_parent.absolute_url(),{'lang':lang,'manage_tabs_message':getZMILangStr('MSG_ACCESS_FORBIDDEN')%'<i>%s</i>'%display_type(REQUEST),}))"54 ></dtml-unless55 49 ><dtml-var f_headDoctype 56 50 ><dtml-else -
ZMS/trunk/dtml/object/preview.dtml
r267 r1756 1 <dtml-call "REQUEST.set('preview','preview')"> 1 2 <dtml-var manage_page_header> 2 3 <script language="JavaScript"> … … 295 296 </head> 296 297 <frameset rows="20,*" border="0" frameborder="0" framespacing="0"> 297 <frame name="navigate" marginheight="1" scrolling="no" noresize="noresize" src="preview_top_html?lang=<dtml-var lang> <dtml-if "REQUEST.has_key('live') and REQUEST['live']=='live'">&live=live</dtml-if>">298 <frame name="navigate" marginheight="1" scrolling="no" noresize="noresize" src="preview_top_html?lang=<dtml-var lang>"> 298 299 <frame name="partner" marginheight="1" src="<dtml-var "getHref2IndexHtml(REQUEST)">"> 299 300 </frameset> -
ZMS/trunk/dtml/object/preview_top.dtml
r1486 r1756 1 1 <dtml-var manage_page_header> 2 <script> 3 function open_partner(sender,preview) { 4 $(".zmi-top-active").removeClass("zmi-top-active"); 5 $(sender).addClass("zmi-top-active"); 6 var href = self.parent.partner.location.href; 7 if (href.indexOf("?") > 0) { 8 href = href.substr(0,href.indexOf("?")); 9 } 10 if (preview) { 11 href += "?preview=preview"; 12 } 13 self.parent.partner.location.href = href; 14 } 15 </script> 2 16 </head> 3 17 <body class="zmi"> … … 6 20 <div class="zmi_col_left"> 7 21 | <a href="manage_main?lang=<dtml-var lang>" target="_parent"><dtml-var "getZMILangStr('BACK')"> <dtml-var "getZMILangStr('TO')"> <dtml-var "display_type(REQUEST)"><dtml-if "display_type(REQUEST)!=getTitlealt(REQUEST)">: <dtml-var "string_maxlen(getTitlealt(REQUEST),25)"></dtml-if></a> 8 | < a href="preview_html?lang=<dtml-var lang>" target="_parent" <dtml-unless "REQUEST.has_key('live') and REQUEST['live']=='live'">class="zmi-top-active"</dtml-unless>><dtml-var "getZMILangStr('TAB_PREVIEW')"></a>22 | <span class="ui-helper-clickable zmi-top-active" onclick="open_partner(this,true);"><dtml-var "getZMILangStr('TAB_PREVIEW')"></span> 9 23 <dtml-unless "getAutocommit()"> 10 | < a href="preview_html?lang=<dtml-var lang>&live=live" target="_parent" <dtml-if "REQUEST.has_key('live') and REQUEST['live']=='live'">class="zmi-top-active"</dtml-if>><dtml-var "getZMILangStr('TAB_LIVE')"></a>24 | <span class="ui-helper-clickable" onclick="open_partner(this,false);"><dtml-var "getZMILangStr('TAB_LIVE')"></span> 11 25 </dtml-unless> 12 26 </div> -
ZMS/trunk/etc/zms.conf
r1755 r1756 35 35 #manage_page_style.css=/++resource++zms_etc_/manage_page_style.css 36 36 #manage_page_script.js=/++resource++zms_etc_/manage_page_script.js 37 38 [ZMS]39 input.file.plugin=input_file40 TempFormProperties=0 -
ZMS/trunk/plugins/www/jquery/jquery-all.min.js
r1755 r1756 88 88 else {$content.show('normal')} 89 89 $container.toggleClass('ui-state-active').toggleClass('ui-state-default');$icon.toggleClass('ui-icon-triangle-1-s').toggleClass('ui-icon-triangle-1-e');var zmi_form_section_id=$container.attr('id');if(typeof zmi_form_section_id !='undefined'){toggleCookie(zmi_form_section_id+'_collapsed')} 90 })});var zmiAutoSaveTimeout=null;var zmiAutoSaveIntervall=10000;var zmiAutoChangeArr={};function zmiAutoSave(){var els=$("form.ZMIPropertiesForm .form-element-modified");if(els){var values={};for(var i=0;i < els.length;i++){var $el=$(els[i]);var elid=$el.attr("id");if(typeof elid !="undefined"){var coords=$el.offset();var html='<div class="zmiAutoSave form-small zmiNeutralColorLight0" style="position:absolute;left:'+Math.round(coords.left)+'px;top:'+Math.round(coords.top)+'px;">saving...</div>';$("body").append(html);values[elid]=$el.val()}} 91 runPluginJSON(function(){$.post("setTempFormProperties",{lang:zmiParams["lang"],key:self.location.href,values:$.toJSON(values)},function(result){$("div.zmiAutoSave").remove()})})}} 92 function zmiAutoChange(el){var elid=$(el).attr("id");if(typeof elid !="undefined"&&typeof zmiAutoChangeArr[elid] !="undefined"){if(!($(el).hasClass("form-element-modified"))&&zmiAutoChangeArr[elid]["init"] !=$(el).val()){$(el).addClass("form-element-modified")} 93 else if(($(el).hasClass("form-element-modified"))&&zmiAutoChangeArr[elid]["init"]==$(el).val()){$(el).removeClass("form-element-modified")} 94 if(zmiAutoChangeArr[elid]["last"] !=$(el).val()){if(zmiAutoSaveTimeout !=null){window.clearTimeout(zmiAutoSaveTimeout)} 95 zmiAutoSaveTimeout=window.setTimeout("zmiAutoSave()",zmiAutoSaveIntervall);zmiAutoChangeArr[elid]["last"]=$(el).val()}}} 96 function confirmChanges(el){if(el&&self.name=='cameFromForm'){el.target='_parent'} 90 })});function confirmChanges(el){if(el&&self.name=='cameFromForm'){el.target='_parent'} 97 91 if(navigator.platform.indexOf("Mac")<0){var anyFormModified=false;for(i=0;i<document.forms.length;i++){anyFormModified|=isFormModified(document.forms[i])} 98 92 if(anyFormModified){if(!confirm(getZMILangStr('MSG_CONFIRM_DISCARD_CHANGES'))){return false}}} 99 if($(".form-element-modified").length > 0){$.get("getTempFormProperties",{"lang":zmiParams["lang"],key:self.location.href},function(result){})}100 93 return true} 101 $(function(){if(getZMIConfProperty("ZMS.TempFormProperties",1)==1){$("select.form-element,input.form-element,textarea.form-element,select.form-small,input.form-small,textarea.form-small",$("form.ZMIPropertiesForm")).keydown(function(evt){zmiAutoChange(this)}).keyup(function(evt){zmiAutoChange(this)}).click(function(evt){zmiAutoChange(this)}).change(function(evt){zmiAutoChange(this)}).each(function(){var elid=$(this).attr("id");if(typeof elid !="undefined"&&$(this).attr("type")!="file"){zmiAutoChangeArr[elid]={'init':$(this).val(),'last':$(this).val()}} 102 });if($("form.ZMIPropertiesForm").length > 0){$.get("getTempFormProperties",{"lang":zmiParams["lang"],key:self.location.href},function(result){var data=eval("("+result+")");var modified=false;if(data){for(var i in data){var v=data[i];modified|=$("#"+i).val()!=v}} 103 if(modified){if(confirm("Form was closed before without saving pending changes. Do you want to restore form?")){for(var i in data){var v=data[i];$("#"+i).val(v).addClass("form-element-modified");zmiAutoChangeArr[i]['last']=v}}} 104 })}} 105 });var zmiActionPrefix='select_actions_';function zmiActionPopulate(el){if(el.options[el.options.length-1].text.indexOf('---')!=0){return} 94 var zmiActionPrefix='select_actions_';function zmiActionPopulate(el){if(el.options[el.options.length-1].text.indexOf('---')!=0){return} 106 95 $(document.body).css("cursor","wait");var action=self.location.href;action=action.substr(0,action.indexOf('?')>0?action.substr(0,action.indexOf('?')).lastIndexOf('/'):action.lastIndexOf('/'));var extrapath='';var $anchor=$('a:first',$(el).parents('td')[0]);if($anchor){var anchorpath=$anchor.attr('href');if(typeof anchorpath !='undefined'){var extrapath=anchorpath.split('/');if(extrapath.length > 2){for(var i=0;i < extrapath.length-2;i++){action+='/'+extrapath[i]}} 107 96 }} … … 124 113 function zmiBrowseObjsApplyUrlValue(fmName,elName,elValue){$('form[name='+fmName+'] input[name='+elName+']').val(elValue)} 125 114 function zmiDialogClose(id){$('#'+id).dialog('close');$('body').remove('#'+id)} 126 function zmiGetNotifications(){$.get('getNotifications',{},function(data){if(data.length==0){return} 127 var notifications=eval('('+data+')');var maxseverity=null;var html='';for(var i=0;i < notifications.length;i++){var notification=notifications[i];var severity=notification['severity'];if(severity=='disabled'){return} 128 html+='<div class="form-label">Current Messages:</div>';html+='<div class="form-small">';html+='<img src="/misc_/zms/ico_'+severity+'.gif" alt="" border="0" align="absmiddle"/> ';html+='<strong>'+notification['date']+'</strong> ';html+=notification['html'];html+='</div>';if((maxseverity==null)||(severity=='warning'&&(maxseverity=='info'))||(severity=='warning'&&(maxseverity=='info'||maxseverity=='warning'))){maxseverity=severity}} 129 if(maxseverity !=null){if($('#ZMIManageTabsButtons > li#ZMIManageTabsNotifications').length==0){$('#ZMIManageTabsButtons').html('<li id="ZMIManageTabsNotifications"></li>'+$('#ZMIManageTabsButtons').html())} 130 $('#ZMIManageTabsButtons > li#ZMIManageTabsNotifications').html('<a href="#ZMIManageTabsNotificationsDiv"><img src="/misc_/zms/ico_'+maxseverity+'.gif" title="Click to open notifications..." border="0"></a>'+'<div style="display:none">'+'<div id="ZMIManageTabsNotificationsDiv">'+html+'</div>'+'</div>'+'');$('a[href=#ZMIManageTabsNotificationsDiv]').click(function(){showFancybox({href:$(this).attr('href')})})} 131 setTimeout('zmiGetNotifications()',60000)})} 132 function zmiClearNotifications(){} 133 $(function(){zmiGetNotifications()});function y2k(number){rtn=number;if(rtn>=0&&rtn<50)rtn+=2000;else 115 function y2k(number){rtn=number;if(rtn>=0&&rtn<50)rtn+=2000;else 134 116 if(rtn>=50&&rtn<100)rtn+=1900;return(rtn < 1000)? rtn+1900:rtn} 135 117 function isDate(day,month,year){var today=new Date();year=((!year)? y2k(today.getYear()):year);month=((!month)? today.getMonth():month-1);if(!day)return false -
ZMS/trunk/plugins/www/jquery/plugin/jquery.plugin.zmi.js
r1755 r1756 147 147 // ### ZMI Auto-Save 148 148 // ############################################################################# 149 var zmiAutoSaveTimeout = null;150 var zmiAutoSaveIntervall = 10000;151 var zmiAutoChangeArr = {};152 153 function zmiAutoSave() {154 var els = $("form.ZMIPropertiesForm .form-element-modified");155 if (els) {156 var values = {};157 for (var i = 0; i < els.length; i++) {158 var $el = $(els[i]);159 var elid = $el.attr("id");160 if (typeof elid != "undefined") {161 var coords = $el.offset();162 var html = '<div class="zmiAutoSave form-small zmiNeutralColorLight0" style="position:absolute;left:'+Math.round(coords.left)+'px;top:'+Math.round(coords.top)+'px;">saving...</div>';163 $("body").append(html);164 values[elid] = $el.val();165 }166 }167 runPluginJSON(function() {168 // Store temp-form properties.169 $.post("setTempFormProperties",{lang:zmiParams["lang"],key:self.location.href,values:$.toJSON(values)},function(result) {170 $("div.zmiAutoSave").remove();171 });172 });173 }174 }175 176 function zmiAutoChange(el) {177 var elid = $(el).attr("id");178 if (typeof elid != "undefined" && typeof zmiAutoChangeArr[elid] != "undefined") {179 if (!($(el).hasClass("form-element-modified")) && zmiAutoChangeArr[elid]["init"] != $(el).val()) {180 $(el).addClass("form-element-modified");181 }182 else if (($(el).hasClass("form-element-modified")) && zmiAutoChangeArr[elid]["init"] == $(el).val()) {183 $(el).removeClass("form-element-modified");184 }185 if (zmiAutoChangeArr[elid]["last"] != $(el).val()) {186 if (zmiAutoSaveTimeout != null) {187 window.clearTimeout(zmiAutoSaveTimeout);188 }189 zmiAutoSaveTimeout = window.setTimeout("zmiAutoSave()",zmiAutoSaveIntervall);190 zmiAutoChangeArr[elid]["last"] = $(el).val();191 }192 }193 }194 149 195 150 function confirmChanges(el) { … … 208 163 } 209 164 } 210 // Clear stored temp-form properties.211 if ($(".form-element-modified").length > 0) {212 $.get("getTempFormProperties",{"lang":zmiParams["lang"],key:self.location.href},function(result) {});213 }214 165 return true; 215 166 } 216 217 $(function() {218 if (getZMIConfProperty("ZMS.TempFormProperties",1)==1) {219 $("select.form-element,input.form-element,textarea.form-element,select.form-small,input.form-small,textarea.form-small",$("form.ZMIPropertiesForm"))220 .keydown( function (evt) { zmiAutoChange(this); })221 .keyup( function (evt) { zmiAutoChange(this); })222 .click( function (evt) { zmiAutoChange(this); })223 .change( function (evt) { zmiAutoChange(this); })224 .each(function() {225 var elid = $(this).attr("id");226 if (typeof elid != "undefined" && $(this).attr("type") != "file") {227 zmiAutoChangeArr[elid] = {'init':$(this).val(),'last':$(this).val()};228 }229 })230 ;231 // Read stored temp-form properties.232 if ($("form.ZMIPropertiesForm").length > 0) {233 $.get("getTempFormProperties",{"lang":zmiParams["lang"],key:self.location.href},function(result) {234 var data = eval("("+result+")");235 var modified = false;236 if (data) {237 for (var i in data) {238 var v = data[i];239 modified |= $("#"+i).val() != v;240 }241 }242 if (modified) {243 if (confirm("Form was closed before without saving pending changes. Do you want to restore form?")) {244 for (var i in data) {245 var v = data[i];246 $("#"+i).val(v).addClass("form-element-modified");247 zmiAutoChangeArr[i]['last'] = v;248 }249 }250 }251 });252 }253 }254 });255 167 256 168 … … 441 353 442 354 // ############################################################################ 443 // ### Notification Service444 // ############################################################################445 446 /**447 *448 */449 function zmiGetNotifications() {450 $.get('getNotifications',451 {},452 function(data) {453 if (data.length==0) {454 return;455 }456 var notifications = eval('('+data+')');457 var maxseverity = null;458 var html = '';459 for ( var i = 0; i < notifications.length; i++) {460 var notification = notifications[i];461 var severity = notification['severity'];462 if (severity == 'disabled') {463 return;464 }465 html += '<div class="form-label">Current Messages:</div>';466 html += '<div class="form-small">';467 html += '<img src="/misc_/zms/ico_'+severity+'.gif" alt="" border="0" align="absmiddle"/> ';468 html += '<strong>'+notification['date']+'</strong> ';469 html += notification['html'];470 html += '</div>';471 if ((maxseverity == null)472 || (severity == 'warning' && (maxseverity == 'info'))473 || (severity == 'warning' && (maxseverity == 'info' || maxseverity == 'warning'))) {474 maxseverity = severity;475 }476 }477 if (maxseverity != null) {478 if ( $('#ZMIManageTabsButtons > li#ZMIManageTabsNotifications').length==0) {479 $('#ZMIManageTabsButtons').html('<li id="ZMIManageTabsNotifications"></li>'+$('#ZMIManageTabsButtons').html());480 }481 $('#ZMIManageTabsButtons > li#ZMIManageTabsNotifications').html(482 '<a href="#ZMIManageTabsNotificationsDiv"><img src="/misc_/zms/ico_'+maxseverity+'.gif" title="Click to open notifications..." border="0"></a>'+483 '<div style="display:none">'+484 '<div id="ZMIManageTabsNotificationsDiv">'+485 html+486 '</div>'+487 '</div>'+488 '');489 $('a[href=#ZMIManageTabsNotificationsDiv]').click(function(){490 showFancybox({href:$(this).attr('href')});491 });492 }493 setTimeout('zmiGetNotifications()',60000);494 });495 }496 497 /**498 *499 */500 function zmiClearNotifications() {501 }502 503 /**504 *505 */506 $(function() {507 zmiGetNotifications();508 });509 510 // ############################################################################511 355 // ### Date Functions 512 356 // ############################################################################ -
ZMS/trunk/zms.py
r1755 r1756 247 247 obj.setConfProperty('ZMS.autocommit',1) 248 248 obj.setConfProperty('ZMS.Version.autopack',2) 249 obj.setConfProperty('ZMS.input.file.plugin','ajax_upload')250 obj.setConfProperty('ZMS.TempFormProperties',1)251 249 252 250 ### Init zcatalog. -
ZMS/trunk/zmsobject.py
r1747 r1756 537 537 def relative_obj_path(self): 538 538 return self.absolute_url()[len(self.getDocumentElement().absolute_url())+1:] 539 540 541 ############################################################################542 ###543 ### Properties544 ###545 ############################################################################546 547 def getTempFormPropertiesContainer(self, createIfNotExists=False):548 container = None549 temp_folder = self.temp_folder550 temp_id = 'ZMSTempFormPropertiesContainer_%s'%self.REQUEST['AUTHENTICATED_USER'].getId()551 if temp_id in temp_folder.objectIds():552 container = getattr(temp_folder,temp_id)553 elif createIfNotExists:554 temp_folder.manage_addFile(id=temp_id,title=self.getLangFmtDate(time.time()),file='{}')555 container = getattr(temp_folder,temp_id)556 return container557 558 security.declareProtected('ZMS Author','setTempFormProperties')559 def setTempFormProperties(self, lang, key, values, REQUEST, RESPONSE=None):560 """ ZMSObject.setTempFormProperties """561 rtn = 0562 createIfNotExists = self.getConfProperty('ZMS.TempFormProperties',1)==1563 container = self.getTempFormPropertiesContainer(createIfNotExists=createIfNotExists)564 if container is not None:565 values = eval(values)566 key = key[key.find('://')+3:]567 key = key[key.find('/')+1:]568 if key.rfind("?") > 0:569 key = key[:key.rfind("?")]570 temp_key = '%s_%s'%(key,lang)571 temp_properties = eval(container.data)572 temp_properties[temp_key] = values573 container.manage_edit(title=self.getLangFmtDate(time.time()),content_type='text/json',filedata=self.str_json(temp_properties))574 rtn = 1575 if RESPONSE:576 RESPONSE.setHeader('Content-Type', 'text/plain; charset=utf-8')577 return self.str_json(rtn)578 579 security.declareProtected('ZMS Author','getTempFormProperties')580 def getTempFormProperties(self, lang=None, key=None, REQUEST=None, RESPONSE=None):581 """ ZMSObject.getTempFormProperties """582 if lang is None or key is None or REQUEST is None: return583 rtn = 0584 container = self.getTempFormPropertiesContainer()585 if container is not None:586 key = key[key.find('://')+3:]587 key = key[key.find('/')+1:]588 if key.rfind("?") > 0:589 key = key[:key.rfind("?")]590 temp_key = '%s_%s'%(key,lang)591 temp_properties = eval(container.data)592 if temp_properties.has_key(temp_key):593 rtn = temp_properties[temp_key]594 del temp_properties[temp_key]595 if len(temp_properties.keys()) == 0:596 container.aq_parent.manage_delObjects([container.id()])597 else:598 container.manage_edit(title=self.getLangFmtDate(time.time()),content_type='text/json',filedata=self.str_json(temp_properties))599 if RESPONSE:600 RESPONSE.setHeader('Content-Type', 'text/plain; charset=utf-8')601 return self.str_json(rtn)602 539 603 540
Note: See TracChangeset
for help on using the changeset viewer.
