--- ZSQLExtend/ZSQLExtend.py 2006/09/16 16:15:24 1.93 +++ ZSQLExtend/ZSQLExtend.py 2006/09/17 10:05:03 1.94 @@ -19,9 +19,21 @@ import zLOG import os.path import os import copy +import unicodedata from OFS.SimpleItem import SimpleItem +def getTextFromNode(nodename): + """get the cdata content of a node""" + if nodename is None: + return "" + nodelist=nodename.childNodes + rc = "" + for node in nodelist: + if node.nodeType == node.TEXT_NODE: + rc = rc + node.data + return rc + def analyseIntSearch(word): #analyse integer searches @@ -713,7 +725,7 @@ class ZSQLExtendFolder(Folder,Persistent def ZSQLSimpleSearch(self,query=None,max_rows=1000000): """simple search""" - + #print query if not query: query=self.query @@ -1100,6 +1112,7 @@ class ZSQLExtendFolder(Folder,Persistent opfields={} lopfields={} #Verknuepfung bei mehrfachauswahl von einem feld sortfields={} #order of sortfields + diacritics={} #diacritische zeichen, falls "no", dann werden diese fuer das feld gefiltert. sortAllFields=None skip="" rangeStart=0 @@ -1142,6 +1155,10 @@ class ZSQLExtendFolder(Folder,Persistent field=name[5:] lopfields[field]=lop + if name[0:11]==iCT+"diacritics": + field=name[12:] + diacritics[field]=value + if name[0:10]==iCT+"sortorder": #sort=value @@ -1167,6 +1184,11 @@ class ZSQLExtendFolder(Folder,Persistent punktsplit=name.split(".") #sonderfall feld mit punkten(tabelle.suchFeld.ausgewaehltesFeld,feldinoriginal), d.h. suche in anderer tabelle: #analysiere alle anderen faelle + + if diacritics.get(name,'yes')=='no': + """filter diacritische zeichen""" + value=unicodedata.normalize('NFKD', value.decode('utf-8')).encode('ASCII', 'ignore') + if name==iCT+"lop": lop=value elif name==iCT+"table": @@ -1207,6 +1229,13 @@ class ZSQLExtendFolder(Folder,Persistent op=value + #sonderfall Name hat das Format: + #TABELLE.SUCHFELD_IN_DIESER_TABELLE.SELECT_FIELD.IDENTIFIER_IN_TABELLE_-table + #i.e. erzeugt wird + #das Statement + #WHERE DENTIFIER_IN_TABELLE_-table in (select from SELECT_FIELD + #where LOWER(UCHFELD_IN_DIESER_TABELLE) something value) + #something is defined by _op_TABELLE.SUCHFELD_IN_DIESER_TABELLE.SELECT_FIELD.IDENTIFIER_IN_TABELLE_-table elif (not name[0]==iCT) and len(punktsplit)==4: if opfields.has_key(name): @@ -1215,7 +1244,7 @@ class ZSQLExtendFolder(Folder,Persistent op="ct" namealt=name name="LOWER("+punktsplit[1]+")" - + value=value.lower() if op=="ct": tmp=(name+" LIKE "+sql_quote("%"+value+"%")) elif op=="gt":