--- ZSQLExtend/ZSQLExtend.py 2004/04/28 15:30:42 1.16
+++ ZSQLExtend/ZSQLExtend.py 2004/07/26 15:43:26 1.28
@@ -10,14 +10,13 @@ from AccessControl import getSecurityMan
import os.path
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-def quoteString(name):
- #return re.sub(r'([\(\)\?])',"\\\1",name)
- #return "Euklid"
- return name
+from Products.ZSQLMethods.SQL import SQLConnectionIDs
+import Shared.DC.ZRDB.DA
+def showSQLConnectionIDs(self):
+ return SQLConnectionIDs(self)
-
-class ZSQLExtendFolder(Persistent, Implicit, Folder):
+class ZSQLExtendFolder(Folder,Persistent, Implicit):
"""Folder"""
meta_type="ZSQLExtendFolder"
@@ -28,11 +27,19 @@ class ZSQLExtendFolder(Persistent, Impli
obj=getattr(self,"ZSQLBibliography_template")
return obj()
except:
- pt=PageTemplateFile('Products/ZSQLExtend/zpt/ZSQLBibliography_template_standard.zpt').__of__(self)
+ pt=PageTemplateFile('Products/ZSQLExtend/zpt/ZSQLBibliography_template_standard.zpt',content_type='text/htm').__of__(self)
pt.content_type="text/html"
+
return pt()
+ def getWeight(self):
+ """getLabe"""
+ try:
+ return self.weight
+ except:
+ return ""
+
def getLabel(self):
"""getLabe"""
try:
@@ -57,9 +64,10 @@ class ZSQLExtendFolder(Persistent, Impli
return pt()
- def changeZSQLExtend(self,label,description,REQUEST=None):
+ def changeZSQLExtend(self,label,description,weight=0,REQUEST=None,connection_id=None):
"""change it"""
-
+ self.connection_id=connection_id
+ self.weight=weight
self.label=label
self.description=description
@@ -69,7 +77,7 @@ class ZSQLExtendFolder(Persistent, Impli
def formatAscii(self,str,url=None):
"""ersetze ascii umbrueche durch
"""
#url=None
- if url:
+ if url and str:
retStr=""
words=str.split("\n")
@@ -141,7 +149,69 @@ class ZSQLExtendFolder(Persistent, Impli
"""%fieldname
return ret
+
+ def ZSQLSelectionFromCRList(self,fieldname,listField,boxType="checkbox",checked=None):
+ """generate select oprions form a cr seperated list"""
+ fields=listField.split("\n")
+ ret=""
+ for field in fields:
+ if checked and (field in checked.split("\n")):
+ ret+="""%s"""%(fieldname,boxType,field.encode('utf-8'),field.encode('utf-8'))
+ else:
+ ret+="""%s"""%(fieldname,boxType,field.encode('utf-8'),field.encode('utf-8'))
+ return ret
+
+
+ def ZSQLOptionsFromCRList(self,fieldname,listField):
+ """generate select oprions form a cr seperated list"""
+ fields=listField.split("\n")
+ ret=""""""
+ return ret
+
+ def ZSQLOptionsFromSearchList(self,fieldname,results,fieldName,valueName=None,start=None):
+ """generate select oprions form a cr seperated list"""
+ if not valueName:
+ valueName=fieldName
+
+ ret=""""""
+ return ret
+
+
+ def ZSQLInlineSearchU(self,storename=None,**argv):
+ """one element if exists"""
+ qs=[]
+ if storename:
+ """store"""
+ else:
+ storename="foundCount"
+
+
+ #print "INLINE:",argv
+ for a in argv.keys():
+ qs.append(a+"="+urllib.quote(str(argv[a])))
+ #return []
+ ret = self.parseQueryString(string.join(qs,","),"_",storename=storename)
+
+ try:
+ return ret[0]
+ except:
+ return None
+
def ZSQLInlineSearch(self,storename=None,**argv):
"""inlinesearch"""
qs=[]
@@ -165,9 +235,24 @@ class ZSQLExtendFolder(Persistent, Impli
#print "INLINE:",query
+ return self.ZSQLSimpleSearch(var=query)
- return self.search(var=query)
+
+ def ZSQLSimpleSearch(self,query=None):
+ """ returrn SQLSearch"""
+ if not query:
+ query=self.query
+
+ if self.search.meta_type=="Z SQL Method":
+ return self.search(var=query)
+ else:
+ if self.aq_parent.aq_parent.search.meta_type=="Z SQL Method":
+ return self.aq_parent.aq_parent.search(var=query)
+ else:
+ return []
+
+
def ZSQLAdd(self):
"""Neuer Eintrag"""
qs=self.REQUEST['QUERY_STRING']
@@ -194,7 +279,7 @@ class ZSQLExtendFolder(Persistent, Impli
valueString=string.join(valueList,",")
queryString="INSERT INTO %s (%s) VALUES (%s)"%(table,keyString,valueString)
- self.search(var=queryString)
+ self.ZSQLSimpleSearch(var=queryString)
return self.REQUEST.RESPONSE.redirect(format)
def ZSQLChange(self,**argv):
@@ -228,7 +313,7 @@ class ZSQLExtendFolder(Persistent, Impli
changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))
changeString=string.join(changeList,",")
queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
- self.search(var=queryString)
+ self.ZSQLSimpleSearch(var=queryString)
return self.REQUEST.RESPONSE.redirect(format)
def ZSQLChange_old(self):
@@ -253,37 +338,60 @@ class ZSQLExtendFolder(Persistent, Impli
changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))
changeString=string.join(changeList,",")
queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
- self.search(var=queryString)
+ self.ZSQLSimpleSearch(var=queryString)
return self.REQUEST.RESPONSE.redirect(format)
- def ZSQLFind(self,qs="",select="oid,*",storename=None):
+ def ZSQLFind(self,qs="",select="oid,*",storename=None,**argv):
"""Find"""
-
+ def delEmpty(list):
+ ret=[]
+ for x in list:
+ splitted=x.split("=")
+ if (len(splitted)>1) and not (splitted[1]==' '):
+ ret.append(x)
+ return ret
+
if qs=="":
if self.REQUEST['QUERY_STRING']:
qs=self.REQUEST['QUERY_STRING']
qs=string.join(qs.split("&"),",")
+
+ for field in argv.keys():
+
+ qs+=",-%s=%s"%(field,argv[field])
+ #print qs
else:
qs=self.REQUEST.SESSION['query']
+ for field in argv.keys():
+ #print field
+ qs+=",-%s=%s"%(field,argv[field])
+
else:
self.REQUEST['QUERY_STRING']=qs
+
qs=string.join(qs.split("&"),",")
-
+
+
qs=re.sub("\\+"," ",qs)# Austauschen da Leerzeichen bei http-get durch + ersetzt wird, generell sollte alles auf post umgeschrieben werden. vom search formular.
+ qs=string.join(delEmpty(qs.split(",")),",")
+
if storename:
"""store"""
else:
storename="foundCount"
- #print "QS",qs
+
+
+
ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename)
#print self.REQUEST.SESSION["foundCount"]
+
return ret
def ZSQLFoundCountLen(self,var):
@@ -319,7 +427,7 @@ class ZSQLExtendFolder(Persistent, Impli
else:
storename="foundCount"
- return self.REQUEST.SESSION[storename]['rangeStart']+1
+ return int(self.REQUEST.SESSION[storename]['rangeStart'])+1
def ZSQLRangeSize(self,storename=None):
@@ -337,7 +445,7 @@ class ZSQLExtendFolder(Persistent, Impli
else:
storename="foundCount"
- return self.REQUEST.SESSION[storename]['rangeEnd']
+ return str(min(int(self.REQUEST.SESSION[storename]['rangeEnd']),int(self.REQUEST.SESSION[storename]['count'])))
def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None):
"""analysieren den QueryString"""
@@ -469,12 +577,12 @@ class ZSQLExtendFolder(Persistent, Impli
if not self.REQUEST.SESSION[storename]['queryString2']==query2:
#print "HOOOOO",storename
self.REQUEST.SESSION[storename]['queryString2']=query2
- self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
+ self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(var=query2)[0].count
#print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']
else:
self.REQUEST.SESSION[storename]['queryString2']=query2
- self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
+ self.REQUEST.SESSION[storename]['count']=self.ZSQLSimpleSearch(var=query2)[0].count
#print "QUERYNEW",self.REQUEST.SESSION[storename]['queryString2']
@@ -486,12 +594,12 @@ class ZSQLExtendFolder(Persistent, Impli
self.REQUEST.SESSION[storename]['rangeSize']=limit
self.REQUEST.SESSION[storename]['searchFields']=searchFields
- #print "Q",query
+ #print "Q",query
return self.ZSQLQuery(query)
def ZSQLQuery(self,query):
"""query"""
- return self.search(var=query)
+ return self.ZSQLSimpleSearch(var=query)
def ZSQLSearch(self):
"""To be done"""
@@ -533,14 +641,16 @@ class ZSQLExtendFolder(Persistent, Impli
"""nextLink"""
try:
limit=self.REQUEST.SESSION[storename]['rangeSize']
+ if int(limit)==0 :
+ limit="1"
newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])+int(limit)
except:
- limit=0
+ limit=1
newRangeStart=0
- if newRangeStart>self.REQUEST.SESSION[storename]['count']:
- newRangeStart=self.REQUEST.SESSION[storename]['count']-10
-
+ if newRangeStart>=self.REQUEST.SESSION[storename]['count']:
+ #newRangeStart=self.REQUEST.SESSION[storename]['count']-1
+ return ""
#create new query string
@@ -561,10 +671,12 @@ class ZSQLExtendFolder(Persistent, Impli
skipFound=0
for query in queries:
+
#print query.split("=")[0]
if query[0]=="_" : query[0]="-"
if query.split("=")[0].lower()=="-skip":
+
skipFound=1
query="-skip=%i"%newRangeStart
newquery.append(query)
@@ -582,10 +694,14 @@ class ZSQLExtendFolder(Persistent, Impli
"""prev link"""
try:
limit=self.REQUEST.SESSION[storename]['rangeSize']
+ if int(limit)==0 :
+ limit="1"
newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])-int(limit)
except:
- limit=0
+ limit=1
newRangeStart=0
+ if newRangeStart <0:
+ return ""
#print "limit",limit,newRangeStart,int(self.REQUEST.SESSION[storename]['rangeStart'])
@@ -694,6 +810,7 @@ manage_addZSQLExtendFolderForm=DTMLFile(
def manage_addZSQLExtendFolder(self, id, title='', label='', description='',
createPublic=0,
createUserF=0,
+ connection_id=None,
REQUEST=None):
"""Add a new Folder object with id *id*.
@@ -710,6 +827,7 @@ def manage_addZSQLExtendFolder(self, id,
ob=self._getOb(id)
setattr(ob,'label',label)
setattr(ob,'description',description)
+ setattr(ob,'connection_id',connection_id)
checkPermission=getSecurityManager().checkPermission
@@ -800,7 +918,8 @@ class ZSQLBibliography(Folder,ZSQLExtend
return ret
except:
return None
- def findLabelsFromMapping(self,referenceType):
+
+ def findTagsFromMapping(self,referenceType):
"""gib hash mit label -> generic zurueck"""
self.referencetypes=self.ZopeFind(self.standardMD)
bibdata={}
@@ -808,18 +927,74 @@ class ZSQLBibliography(Folder,ZSQLExtend
fieldlist=self.standardMD.fieldList
for referenceTypeF in self.referencetypes:
- print referenceType,referenceTypeF[1].title
+ #print referenceType,referenceTypeF[1].title
if referenceTypeF[1].title == referenceType:
bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
bibdata['data']=referenceTypeF[1]
self.fields=bibdata[referenceType]
for field in fieldlist:
- retdata[field]=referenceTypeF[1].getValue(field)[1]
+ if referenceTypeF[1].getValue(field)[0]==None:
+ retdata[field]=field
+ else:
+ retdata[field]=referenceTypeF[1].getValue(field)[0]
return retdata,fieldlist
+ def findLabelsFromMapping(self,referenceType):
+ """gib hash mit label -> generic zurueck"""
+ self.referencetypes=self.ZopeFind(self.standardMD)
+ bibdata={}
+ retdata={}
+ fieldlist=self.standardMD.fieldList
+ for referenceTypeF in self.referencetypes:
+ #print referenceType,referenceTypeF[1].title
+ if referenceTypeF[1].title == referenceType:
+ bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
+ bibdata['data']=referenceTypeF[1]
+ self.fields=bibdata[referenceType]
+ for field in fieldlist:
+ retdata[field]=referenceTypeF[1].getValue(field)[1]
+
+ return retdata,fieldlist
+
+ def createIndexTag(self,tag,content):
+ """creste tag"""
+ if content:
+ ret="""<%s>%s%s>"""%(tag,content,tag)
+ return ret
+ else:
+ return ""
+
+ def getMetaDataXML2(self):
+ """crate index meta"""
+
+ fn=os.path.splitext(self.REQUEST['fn'])[0]+"."
+ self.REQUEST['fn']=fn
+ pt=PageTemplateFile('Products/ZSQLExtend/zpt/record2.xml').__of__(self)
+ pt.content_type="text/xml"
+ return pt()
+
+ def getMetaDataXML(self):
+ """crate index meta"""
+ pt=PageTemplateFile('Products/ZSQLExtend/zpt/record.xml').__of__(self)
+ pt.content_type="text/xml"
+ return pt()
+
+ def getMetaDatasXML(self):
+ """index"""
+ ret="""
+ """
+ for found in self.ZSQLSimpleSearch(var="select oid from %s limit ALL"%self.tableName):
+ link=self.absolute_url()+"/"+"record.html?oid=%i"%found.oid
+ metalink=self.absolute_url()+"/"+"getMetaDataXML?oid=%i"%found.oid
+
+ ret+="""\n"""%(link,metalink)
+
+ return ret+"\n"
+
+
manage_addZSQLBibliographyForm=DTMLFile('ZSQLBibliographyAdd', globals())
def manage_addZSQLBibliography(self, id, tableName,label,description,title='',