--- ZSQLExtend/ZSQLExtend.py 2005/10/10 15:36:40 1.65 +++ ZSQLExtend/ZSQLExtend.py 2005/10/24 23:50:53 1.70 @@ -42,7 +42,7 @@ def sql_quote(v): quote_dict = {"\'": "''", "\\": "\\\\"} for dkey in quote_dict.keys(): if string.find(v, dkey) >= 0: - v=join(split(v,dkey),quote_dict[dkey]) + v=string.join(string.split(v,dkey),quote_dict[dkey]) return "'%s'" % v def showSQLConnectionIDs(self): @@ -231,7 +231,7 @@ class ZSQLExtendFolder(Folder,Persistent return ret - def ZSQLOptionsFromCRList(self,fieldname,listField, multiple='',start=None,startValue=None,size=None): + def ZSQLOptionsFromCRList(self,fieldname,listField, multiple='',start=None,startValue=None,size=None,selected=None): """generate select oprions form a cr seperated list""" fields=listField.split("\n") if size: @@ -249,7 +249,10 @@ class ZSQLExtendFolder(Folder,Persistent ret+=""""""%(startValue,start) for field in fields: - ret+=""""""%(field.encode('utf-8'),field.encode('utf-8')) + if selected and (field in selected.split("\n")): + ret+=""""""%(field.encode('utf-8'),field.encode('utf-8')) + else: + ret+=""""""%(field.encode('utf-8'),field.encode('utf-8')) ret+="""""" return ret @@ -345,20 +348,19 @@ class ZSQLExtendFolder(Folder,Persistent """inlinesearch""" qs=[] - - #print "INLINE:",query return self.ZSQLSimpleSearch(query) def ZSQLSimpleSearch(self,query=None,max_rows=1000000): """simple search""" - + if not query: query=self.query if (hasattr(self,"_v_searchSQL") and (self._v_searchSQL == None)) or (not hasattr(self,"_v_searchSQL")): - self._v_searchSQL=Shared.DC.ZRDB.DA.DA("_v_searchSQL","_v_searchSQL",self.connection_id,"var","") + + self._v_searchSQL=Shared.DC.ZRDB.DA.DA("_v_searchSQL","_v_searchSQL",self.getConnectionObj().getId(),"var","") self._v_searchSQL.max_rows_=max_rows try: @@ -367,8 +369,9 @@ class ZSQLExtendFolder(Folder,Persistent except : if sys.exc_info()[0]=="Database Error": try: - getattr(self,self.connection_id).manage_open_connection() - except: pass + self.getConnectionObj().manage_open_connection() + except: + zLOG.LOG("ZSQLSimpleSearch",zLOG.ERROR, '%s %s'%sys.exc_info()[:2]) else: try: self._v_searchSQL.max_rows_=max_rows @@ -377,12 +380,18 @@ class ZSQLExtendFolder(Folder,Persistent except : if sys.exc_info()[0]=="Database Error": try: - getattr(self,self.connection_id).manage_open_connection() - except: pass + self.getConnectionObj().manage_open_connection() + except: + zLOG.LOG("ZSQLSimpleSearch",zLOG.ERROR, '%s %s'%sys.exc_info()[:2]) + + def getConnectionObj(self): + if hasattr(self,'connection_id'): + return getattr(self,self.connection_id) + def ZSQLSimpleSearch2(self,query=None): """ returrn SQLSearch""" - #print "hi",query + if not query: query=self.query if getattr(self,'_v_search',None): @@ -406,20 +415,36 @@ class ZSQLExtendFolder(Folder,Persistent - def ZSQLAdd(self): + def ZSQLAdd(self,format=None,RESPONSE=None,**argv): """Neuer Eintrag""" - qs=self.REQUEST['QUERY_STRING'] + + qs_temp=[] + + for a in self.REQUEST.form.keys(): + qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a]))) + + qs=string.join(qs_temp,",") + + for field in argv.keys(): + if field[0]=="_": + fieldTmp="-"+field[1:] + else: + fieldTmp=field + + qs+=",%s=%s"%(fieldTmp,argv[field]) + + addList={} - for q in qs.split("&"): + for q in qs.split(","): name=re.sub("r'+'"," ",q.split("=")[0].lower()) value=q.split("=")[1] - value=re.sub(r'\+'," ",value) - value=urllib.unquote(value) + value=re.sub(r'\+'," ",value) + value=urllib.unquote(value) if name=="-table": table=urllib.unquote(value) elif name=="-format": format=urllib.unquote(value) - elif (not name[0]=="-") and (not len(value)==0): + elif (not (name[0]=="-" or name[0]=="_")) and (not len(value)==0): addList[urllib.unquote(name)]=urllib.unquote(value) keyList=[] @@ -432,38 +457,45 @@ class ZSQLExtendFolder(Folder,Persistent valueString=string.join(valueList,",") queryString="INSERT INTO %s (%s) VALUES (%s)"%(table,keyString,valueString) + self.ZSQLSimpleSearch(queryString) - return self.REQUEST.RESPONSE.redirect(format) - def ZSQLChange(self,format=None,RESPONSE=None,**argv): + if RESPONSE and format: + return RESPONSE.redirect(format) + else: + return True + + def ZSQLChange(self,format=None,RESPONSE=None,USE_FORM=None,**argv): """change entries""" #qs=self.REQUEST['QUERY_STRING'] # very bad hack qs_temp=[] - - for a in self.REQUEST.form.keys(): - qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a]))) + if USE_FORM or RESPONSE: + for a in self.REQUEST.form.keys(): + qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a]))) - qs=string.join(qs_temp,",") + for field in argv.keys(): + if field[0]=="_": fieldTmp="-"+field[1:] else: fieldTmp=field - qs+=",%s=%s"%(fieldTmp,argv[field]) + qs_temp.append("%s=%s"%(fieldTmp,argv[field])) changeList=[] - for q in qs.split(","): + for q in qs_temp: + name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower())) value="=".join(q.split("=")[1:]) value=re.sub(r'\+'," ",value) value=urllib.unquote(value) - + if name=="-table": table=urllib.unquote(value) elif name=="-identify": @@ -471,11 +503,12 @@ class ZSQLExtendFolder(Folder,Persistent identify=identify.split("=")[0]+"="+sql_quote(identify.split("=")[1]) elif name=="-format": format=urllib.unquote(value) - elif (not name[0]=="-") and (not len(value)==0): + elif (not (name[0]=="-" or name[0]=="_")) and (not len(value)==0): changeList.append("\""+name+"\"="+sql_quote(urllib.unquote(value))) changeString=string.join(changeList,",") queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify) + self.ZSQLSimpleSearch(queryString) @@ -935,9 +968,11 @@ class ZSQLExtendFolder(Folder,Persistent else: return value - def ZSQLQuery(self,query): + def ZSQLQuery(self,query,debug=None): """query""" - + if debug: + zLOG.LOG("ZSQLQuery", zLOG.INFO, query) + return self.ZSQLSimpleSearch(query) @@ -1341,7 +1376,7 @@ class ZSQLBibliography(Folder,ZSQLExtend else: return "" - def getMetaDataXML2(self): + def getXML2(self): """crate index meta""" fn=os.path.splitext(self.REQUEST['fn'])[0]+"."