Annotation of ZSQLExtend/ZSQLExtend.py, revision 1.15

1.1       dwinter     1: from OFS.Folder import Folder
                      2: from Globals import Persistent
                      3: from Acquisition import Implicit
                      4: from Globals import DTMLFile
                      5: import urllib
                      6: import re
                      7: import string
1.3       dwinter     8: from pyPgSQL import libpq
1.1       dwinter     9: from AccessControl import getSecurityManager
1.5       dwinter    10: import os.path
1.15    ! dwinter    11: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
1.1       dwinter    12: 
1.2       dwinter    13: def quoteString(name):
                     14:     #return re.sub(r'([\(\)\?])',"\\\1",name)
                     15:     #return "Euklid"
                     16:     return name
                     17: 
1.15    ! dwinter    18: 
        !            19: 
1.1       dwinter    20: class ZSQLExtendFolder(Persistent, Implicit, Folder):
                     21:     """Folder"""
                     22:     meta_type="ZSQLExtendFolder"
1.9       dwinter    23: 
1.15    ! dwinter    24:    
1.14      dwinter    25:     def formatAscii(self,str,url=None):
                     26:         """ersetze ascii umbrueche durch <br>"""
                     27:         #url=None
                     28:         if url:
                     29:             
                     30:             retStr=""
                     31:             words=str.split("\n")
                     32:             
                     33:             for word in words:
                     34:                 strUrl=url%word
                     35:                 #print "str",strUrl
                     36:                 retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
                     37:             str=retStr
                     38:         if str:
                     39:             return re.sub(r"[\n]","<br/>",str)
                     40:         else:
                     41:             return ""
                     42:         
1.12      dwinter    43:     def getSAttribute(self,obj,atribute,pref=''):
                     44:         """get Attribute or emptystring"""
                     45:         
1.13      dwinter    46:         #print "obj",obj
1.12      dwinter    47:         try:
                     48:             return pref+getattr(obj,atribute)
                     49:         except:
                     50:             return ""
                     51:         
                     52:     def getS(self,str):
                     53:         """make none to empty string"""
                     54:         if str:
                     55:             return str
                     56:         else:
                     57:             return ""
                     58: 
1.9       dwinter    59:     def actualPath(self,url=None):
                     60:    """path"""
1.10      dwinter    61: 
                     62:         if self.REQUEST['HTTP_X_FORWARDED_SERVER']=='':
                     63:             host=self.REQUEST['HTTP_HOST']
                     64:         else:
                     65:             host=self.REQUEST['HTTP_X_FORWARDED_SERVER']
1.9       dwinter    66:    if not url:
1.10      dwinter    67:        return "http://"+host+self.REQUEST['PATH_TRANSLATED']
1.9       dwinter    68:        else:
                     69:        temp=self.REQUEST[url].split("/")
1.10      dwinter    70:        temp[2]=host
1.9       dwinter    71:        return string.join(temp,"/")
                     72: 
                     73:     def getRequest(self):
                     74:    """request"""
                     75:    return self.REQUEST
1.5       dwinter    76: 
                     77:     def lowerEnd(self,path):
                     78:         """oinly for demo"""
                     79:         return os.path.splitext(path)[0]+".jpg"
                     80:         
                     81:     def ZSQLisEmpty(self,field):
                     82:         """Teste ob Treffer leer"""
1.7       dwinter    83:         #print "field",field
1.5       dwinter    84:         if not field:
                     85:             return 1
                     86:         if field=="":
                     87:             return 1
                     88:         return 0
                     89: 
1.6       dwinter    90:     def ZSQLsearchOptions(self,fieldname=""):
1.5       dwinter    91:         """return HTML Fragment with search options"""
1.6       dwinter    92:    
                     93:         ret="""<select name="-op_%s">
1.5       dwinter    94:    <option value="bw">begins with</option>             <!-- begins with / beginnt mit, "Wort*" -->
                     95:    <option value="ew">ends with</option>
1.7       dwinter    96:        <option value="ct" selected>contains</option>               <!-- contains / enthaellt, "Wort" -->
1.5       dwinter    97:     <option value="eq">equals</option>                 <!-- equals / ist, =Wort -->
1.6       dwinter    98: </select>"""%fieldname
1.5       dwinter    99:         return ret
                    100:     
                    101:     def ZSQLInlineSearch(self,storename=None,**argv):
1.1       dwinter   102:         """inlinesearch"""
                    103:         qs=[]
1.5       dwinter   104:         if storename:
                    105:             """store"""
                    106:         else:
                    107:             storename="foundCount"
                    108:             
1.2       dwinter   109:     
                    110: 
1.5       dwinter   111:         #print "INLINE:",argv
1.1       dwinter   112:         for a in argv.keys():
                    113:             qs.append(a+"="+urllib.quote(str(argv[a])))
1.9       dwinter   114:         #return []  
1.5       dwinter   115:         return self.parseQueryString(string.join(qs,","),"_",storename=storename)
1.1       dwinter   116: 
1.5       dwinter   117:     def ZSQLInlineSearch2(self,query):
                    118:         """inlinesearch"""
                    119:         qs=[]
                    120:         
                    121:     
                    122: 
                    123:         #print "INLINE:",query
                    124:         
                    125:         return self.search(var=query)
1.1       dwinter   126:     
                    127:     def ZSQLAdd(self):
                    128:         """Neuer Eintrag"""
                    129:         qs=self.REQUEST['QUERY_STRING']
                    130:         addList={}
                    131:         for q in qs.split("&"):
                    132:             name=re.sub("r'+'"," ",q.split("=")[0].lower())
                    133:             value=q.split("=")[1]
                    134:        value=re.sub(r'\+'," ",value)
                    135:        value=urllib.unquote(value) 
                    136:             if name=="-table":
                    137:                 table=urllib.unquote(value)
                    138:             elif name=="-format":
                    139:                 format=urllib.unquote(value)
                    140:             elif (not name[0]=="-") and (not len(value)==0):
                    141:                 addList[urllib.unquote(name)]=urllib.unquote(value)
                    142: 
                    143:         keyList=[]
                    144:         valueList=[]
                    145:         for x in addList.keys():
                    146:             keyList.append("\""+x+"\"")
1.3       dwinter   147:             valueList.append(libpq.PgQuoteString(addList[x]))
1.1       dwinter   148: 
                    149:         keyString=string.join(keyList,",")
                    150:         valueString=string.join(valueList,",")
                    151:         
                    152:         queryString="INSERT INTO %s (%s) VALUES (%s)"%(table,keyString,valueString)
                    153:         self.search(var=queryString)
                    154:         return self.REQUEST.RESPONSE.redirect(format)
                    155:         
1.4       dwinter   156:     def ZSQLChange(self,**argv):
                    157:         """Ändern von Einträgen"""
                    158:         #qs=self.REQUEST['QUERY_STRING']
                    159:         # very bad hack
                    160:         qs_temp=[]
                    161:     
                    162:         for a in self.REQUEST.form.keys():
                    163:             qs_temp.append(a+"="+urllib.quote(str(self.REQUEST.form[a])))
                    164: 
                    165:         qs=string.join(qs_temp,"&")
                    166: 
                    167:     
                    168:         #print "CHANGE QS",self.REQUEST
                    169:         #return self.REQUEST
                    170:         changeList=[]
                    171:         for q in qs.split("&"):
                    172:             name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
                    173:             value=q.split("=")[1]
                    174:             value=re.sub(r'\+'," ",value)
                    175:        value=urllib.unquote(value)
                    176:        if name=="-table":
                    177:                 table=urllib.unquote(value)
                    178:             elif name=="-identify":
                    179:                 identify=urllib.unquote(value)
                    180:                 identify=identify.split("=")[0]+"="+libpq.PgQuoteString(identify.split("=")[1])
                    181:             elif name=="-format":
                    182:                 format=urllib.unquote(value)
                    183:             elif (not name[0]=="-") and (not len(value)==0):
                    184:                 changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))
                    185:         changeString=string.join(changeList,",")
                    186:         queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
                    187:         self.search(var=queryString)
                    188:         return self.REQUEST.RESPONSE.redirect(format)
                    189: 
                    190:     def ZSQLChange_old(self):
1.1       dwinter   191:         """Ändern von Einträgen"""
                    192:         qs=self.REQUEST['QUERY_STRING']
                    193:         #print "CHANGE QS",self.REQUEST
                    194:         #return self.REQUEST
                    195:         changeList=[]
                    196:         for q in qs.split("&"):
                    197:             name=urllib.unquote(re.sub("r'+'"," ",q.split("=")[0].lower()))
                    198:             value=q.split("=")[1]
                    199:             value=re.sub(r'\+'," ",value)
                    200:        value=urllib.unquote(value)
                    201:        if name=="-table":
                    202:                 table=urllib.unquote(value)
                    203:             elif name=="-identify":
                    204:                 identify=urllib.unquote(value)
1.3       dwinter   205:                 identify=identify.split("=")[0]+"="+libpq.PgQuoteString(identify.split("=")[1])
1.1       dwinter   206:             elif name=="-format":
                    207:                 format=urllib.unquote(value)
                    208:             elif (not name[0]=="-") and (not len(value)==0):
1.3       dwinter   209:                 changeList.append("\""+name+"\"="+libpq.PgQuoteString(urllib.unquote(value)))
1.1       dwinter   210:         changeString=string.join(changeList,",")
                    211:         queryString="UPDATE %s SET %s WHERE %s"%(table,changeString,identify)
                    212:         self.search(var=queryString)
                    213:         return self.REQUEST.RESPONSE.redirect(format)
                    214:     
1.10      dwinter   215:     def ZSQLFind(self,qs="",select="oid,*",storename=None):
1.1       dwinter   216:         """Find"""
                    217: 
                    218: 
                    219:         if qs=="":
                    220:            if self.REQUEST['QUERY_STRING']:
                    221:                qs=self.REQUEST['QUERY_STRING']
1.5       dwinter   222:                
                    223:                
1.1       dwinter   224:                qs=string.join(qs.split("&"),",")
                    225:            else:
1.5       dwinter   226:                
1.1       dwinter   227:                qs=self.REQUEST.SESSION['query']
                    228:         else:
1.13      dwinter   229:             self.REQUEST['QUERY_STRING']=qs
1.1       dwinter   230:             qs=string.join(qs.split("&"),",")
1.13      dwinter   231:             
1.1       dwinter   232: 
1.5       dwinter   233:         qs=re.sub("\\+"," ",qs)# Austauschen da Leerzeichen bei http-get durch + ersetzt wird, generell sollte alles auf post umgeschrieben werden. vom search formular.
1.13      dwinter   234: 
1.5       dwinter   235:         if storename:
                    236:             """store"""
                    237:         else:
                    238:             storename="foundCount"
1.13      dwinter   239:         #print "QS",qs
1.5       dwinter   240:         ret=self.parseQueryString(qs,"-",select=select,storemax="yes",storename=storename)
                    241:         #print self.REQUEST.SESSION["foundCount"]
                    242:         
                    243:         return ret
                    244: 
                    245:     def ZSQLFoundCountLen(self,var):
                    246:         return len(var)
                    247:             
                    248:     def ZSQLFoundCount(self,qs="",select="*",storename=None):
                    249:         
                    250:        ##  if qs=="":
                    251:             
                    252: ##             if self.REQUEST['QUERY_STRING']:
                    253:             
                    254: ##                 qs=self.REQUEST['QUERY_STRING']
                    255: ##                 qs=string.join(qs.split("&"),",")
                    256: ##             else:
                    257:             
                    258: ##                 qs=self.REQUEST.SESSION['query']
                    259: ##         else:
                    260: ##             qs=string.join(qs.split("&"),",")
                    261: 
                    262: 
                    263: ##         temp= self.parseQueryString(qs,"-",select=select,storemax="yes",nostore="yes")
                    264:         if storename:
                    265:             """store"""
                    266:         else:
                    267:             storename="foundCount"
                    268:         
                    269:         return self.REQUEST.SESSION[storename]['count']
                    270: 
                    271:     def ZSQLRangeStart(self,storename=None):
                    272:         
                    273:         if storename:
                    274:             """store"""
                    275:         else:
                    276:             storename="foundCount"
                    277:         
1.15    ! dwinter   278:         return self.REQUEST.SESSION[storename]['rangeStart']+1
1.5       dwinter   279:     
                    280:     def ZSQLRangeSize(self,storename=None):
                    281:         
                    282:         if storename:
                    283:             """store"""
                    284:         else:
                    285:             storename="foundCount"
                    286:             
                    287:         return self.REQUEST.SESSION[storename]['rangeSize']
1.1       dwinter   288: 
1.5       dwinter   289:     def ZSQLRangeEnd(self,storename=None):
                    290:         
                    291:         if storename:
                    292:             """store"""
                    293:         else:
                    294:             storename="foundCount"
                    295:         
                    296:         return self.REQUEST.SESSION[storename]['rangeEnd']
                    297:     
                    298:     def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename=None):
                    299:         """analysieren den QueryString"""
                    300:         #print "NO",nostore
1.1       dwinter   301:         lop="AND" # standardsuche mit and
                    302:         max="ALL" #standard alle auswählen
1.11      dwinter   303:         maxstr=""
1.1       dwinter   304:         whereList=[]
                    305:         sort=""
                    306:         op="bw"
1.2       dwinter   307:         opfields={}
1.5       dwinter   308:         skip=""
                    309:         rangeStart=0
1.11      dwinter   310:         limit=0
                    311:         searchFields={}
1.2       dwinter   312:         
1.1       dwinter   313:         if not select:
1.10      dwinter   314:             select="oid,*"
1.5       dwinter   315:         #print "Q",nostore,qs
1.2       dwinter   316:         #check for op in the case of inline search
1.6       dwinter   317:         
                    318:    splitted=qs.split(",")
                    319:    
                    320:             
                    321:         for q in splitted:
1.5       dwinter   322:                 
1.2       dwinter   323:                 name=re.sub("r'+'"," ",q.split("=")[0].lower())
1.14      dwinter   324:                 try:
                    325:                     value=urllib.unquote(q.split("=",1)[1])
                    326:                 except:
                    327:                     value=""
1.2       dwinter   328:                 if name[0:3]==iCT+"op":
                    329:                     op=value
1.14      dwinter   330: 
1.2       dwinter   331:                     field=name[4:]
                    332:                     opfields[field]=op
1.14      dwinter   333:                     #print "HI",op,field
1.6       dwinter   334:    #print opfieldsa
1.2       dwinter   335:         #now analyse the querystring
1.1       dwinter   336:         for q in qs.split(","):
1.5       dwinter   337:             
                    338:             
                    339:             #try:
1.1       dwinter   340: 
1.5       dwinter   341:             name=re.sub("r'+'"," ",q.split("=")[0].lower())
1.14      dwinter   342:             try:
                    343:                 value=urllib.unquote(q.split("=",1)[1])
                    344:             except:
                    345:                 value=""
                    346:                 
1.5       dwinter   347:             #value=libpq.PgQuoteString(value)
                    348:             
                    349:             
                    350:             if name==iCT+"lop":
                    351:                 lop=value
                    352:             elif name==iCT+"table":
                    353:                 table=value
                    354:             elif name==iCT+"select":
                    355:                 select=value
                    356:             elif name==iCT+"max":
1.11      dwinter   357:                 maxstr="LIMIT "+str(value)
1.5       dwinter   358:                 limit=str(value)
                    359:             elif name==iCT+"skip":
                    360:                 skip="OFFSET "+str(value)
                    361:                 rangeStart=str(value)
                    362:             elif name==iCT+"join":
                    363:                 whereList.append(value)
                    364:             elif name==iCT+"sort":
                    365:                 sort="ORDER BY "+value
                    366:             elif name==iCT+"token":
                    367:                 if not nostore=="yes":
1.1       dwinter   368:                     self.REQUEST.SESSION['token']=value
                    369: 
1.5       dwinter   370:             elif name==iCT+"op":
                    371:                 op=value
                    372: 
                    373: 
1.1       dwinter   374: 
1.5       dwinter   375:             elif (not name[0]==iCT) and (not len(value)==0):
1.6       dwinter   376:                 
                    377:        #print "OP",op,name
1.5       dwinter   378:                 value=value.lower()
1.11      dwinter   379: 
                    380:                 searchFields[name]=value
                    381:                 
1.5       dwinter   382:                 if opfields.has_key(name):
                    383:                     op=opfields[name]
1.6       dwinter   384:        else:
                    385:            op="ct"
                    386:        name="LOWER("+name+")"    
1.5       dwinter   387:                 if op=="ct":
                    388:                     whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value+"%"))
                    389:                 elif op=="gt":
                    390:                     whereList.append(name+">"+libpq.PgQuoteString(value))
                    391:                 elif op=="lt":
                    392:                     whereList.append(name+"<"+libpq.PgQuoteString(value))
                    393:                 elif op=="eq":
                    394:                     whereList.append(name+"="+libpq.PgQuoteString(value))
                    395:                 elif op=="bw":
                    396:                     whereList.append(name+" LIKE "+libpq.PgQuoteString(value+"%"))
                    397:                 elif op=="ew":
                    398:                     whereList.append(name+" LIKE "+libpq.PgQuoteString("%"+value))
1.6       dwinter   399:                 op="ct"
1.5       dwinter   400:             
                    401:             #except:
                    402:             #    print "END",value,name,Exception       
1.1       dwinter   403:         if len(whereList)>0:
                    404:             where="WHERE "+string.join(whereList," "+lop+" ")
                    405:         else:
                    406:             where=""
                    407:         #print "QE",table
                    408:         
1.11      dwinter   409:         query="SELECT %s FROM %s %s %s %s %s"%(select,table,where,sort,maxstr,skip)
1.13      dwinter   410:         
1.5       dwinter   411:         if not nostore=="yes":
                    412:             
                    413:             self.REQUEST.SESSION['qs']=opfields
1.7       dwinter   414:         #print "IAMHERE again:", query
1.5       dwinter   415: 
                    416:         if storename:
1.7       dwinter   417:             query2="SELECT count(*) FROM %s %s"%(table,where)
1.5       dwinter   418:             #print "storing",query2
                    419:             #print "QUERYSTRING:",self.REQUEST.SESSION[storename]['queryString2']
                    420:             if not self.REQUEST.SESSION.has_key(storename):
                    421:                 self.REQUEST.SESSION[storename]={}
                    422:             if self.REQUEST.SESSION[storename].has_key('queryString2'):
                    423:                 #print "HI",storename
                    424:                 if not self.REQUEST.SESSION[storename]['queryString2']==query2:
                    425:                     #print "HOOOOO",storename
                    426:                     self.REQUEST.SESSION[storename]['queryString2']=query2
                    427:                     self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
                    428:                     #print "QUERY",query2,"::::",self.REQUEST.SESSION[storename]['queryString2']
                    429:                 
                    430:             else:
                    431:                 self.REQUEST.SESSION[storename]['queryString2']=query2
                    432:                 self.REQUEST.SESSION[storename]['count']=self.search(var=query2)[0].count
                    433:                 #print "QUERYNEW",self.REQUEST.SESSION[storename]['queryString2']
                    434:             
                    435:             
                    436:             self.REQUEST.SESSION[storename]['rangeStart']=rangeStart
                    437:             if limit=="all":
                    438:                 self.REQUEST.SESSION[storename]['rangeEnd']=self.REQUEST.SESSION[storename]['count']
                    439:             else:
                    440:                 self.REQUEST.SESSION[storename]['rangeEnd']=int(rangeStart)+int(limit)
                    441:             self.REQUEST.SESSION[storename]['rangeSize']=limit
1.11      dwinter   442:             self.REQUEST.SESSION[storename]['searchFields']=searchFields
1.5       dwinter   443:             
1.13      dwinter   444:    #print "Q",query            
1.1       dwinter   445:         return self.search(var=query)
1.11      dwinter   446: 
1.1       dwinter   447:     
                    448:     def ZSQLSearch(self):
                    449:         """To be done"""
                    450:         rq=self.REQUEST['QUERY_STRING']
                    451:         querys=rq.split("&")
                    452:         
                    453: 
                    454:         for querytemp in querys:
                    455:             query=querytemp.split("=")
                    456:             try:
                    457:                 if query[0].lower()=="-format":
                    458:                     formatfile=query[1]
                    459:             except:
                    460:                 """nothing"""
                    461:         #print formatfile        
                    462:         self.REQUEST.SESSION['query']=string.join(self.REQUEST['QUERY_STRING'].split("&"),",")
                    463:         return self.REQUEST.RESPONSE.redirect(urllib.unquote(formatfile))
                    464: 
                    465:     
                    466:     def ZSQLint(self,string):
                    467:         try:
                    468: 
                    469:             return(int(string))
                    470:         except:
                    471:             return 0
1.5       dwinter   472: 
1.11      dwinter   473:     def getZSQLSearchFieldsList(self,storename="foundCount"):
                    474:         """get searchfieldList"""
1.13      dwinter   475:         #print self.REQUEST.SESSION[storename]['searchFields'].keys()
1.11      dwinter   476:         return  self.REQUEST.SESSION[storename]['searchFields'].keys()
                    477: 
                    478:     def getZSQLSearchFields(self,storename="foundCount"):
                    479:         """get searchfield"""
1.13      dwinter   480:         #print "SF",self.REQUEST.SESSION[storename]['searchFields']
1.11      dwinter   481:         return  self.REQUEST.SESSION[storename]['searchFields']
                    482: 
                    483:                                                 
1.5       dwinter   484:     def nextLink(self,html,storename="foundCount"):
                    485:         """nextLink"""
                    486:         try:
                    487:             limit=self.REQUEST.SESSION[storename]['rangeSize']
                    488:             newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])+int(limit)
                    489:         except:
                    490:             limit=0
                    491:             newRangeStart=0
                    492:             
                    493:         if newRangeStart>self.REQUEST.SESSION[storename]['count']:
                    494:             newRangeStart=self.REQUEST.SESSION[storename]['count']-10
                    495: 
                    496:         
                    497:         #create new query string
                    498:         
                    499:         if self.REQUEST['QUERY_STRING']=="":
                    500:             qs=self.REQUEST.SESSION['query']
                    501:             
                    502:             queries=string.split(qs,",")
                    503:             
                    504:             
                    505:         else:
                    506:             qs=self.REQUEST['QUERY_STRING']
                    507:             queries=string.split(qs,"&")
                    508:             
                    509:             
                    510:             
                    511:         newquery=[]
                    512: 
                    513:         skipFound=0
                    514:         
                    515:         for query in queries:
                    516:             #print query.split("=")[0]
                    517:             if query[0]=="_" : query[0]="-"
                    518: 
                    519:             if query.split("=")[0].lower()=="-skip":
                    520:                 skipFound=1
                    521:                 query="-skip=%i"%newRangeStart
                    522:             newquery.append(query)
                    523: 
                    524:         if skipFound==0 :
                    525:             query="-skip=%i"%newRangeStart
                    526:             newquery.append(query)
                    527:                 
                    528:         newquerystring=string.join(newquery,"&")
1.9       dwinter   529:    
                    530:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.5       dwinter   531:             
                    532:         
                    533:     def prevLink(self,html,storename="foundCount"):
                    534:         """prev link"""
                    535:         try:
                    536:             limit=self.REQUEST.SESSION[storename]['rangeSize']
                    537:             newRangeStart=int(self.REQUEST.SESSION[storename]['rangeStart'])-int(limit)
                    538:         except:
                    539:             limit=0
                    540:             newRangeStart=0
                    541: 
                    542:         #print "limit",limit,newRangeStart,int(self.REQUEST.SESSION[storename]['rangeStart'])
                    543:         
                    544:         if newRangeStart<0:
                    545:                 newRangeStart=0
                    546: 
                    547:         #create new query string
                    548:         
                    549:         if self.REQUEST['QUERY_STRING']=="":
                    550:             qs=self.REQUEST.SESSION['query']
                    551:             #qs=re.sub(r'_','-',qs) #aendern für query
                    552:             queries=string.split(qs,",")
                    553:             
                    554:             
                    555:         else:
                    556:             qs=self.REQUEST['QUERY_STRING']
                    557:             queries=string.split(qs,"&")
                    558:             
                    559:             
                    560:             
                    561:         newquery=[]
                    562:         
                    563:         skipFound=0
                    564: 
                    565:         for query in queries:
                    566:             #print query.split("=")[0]
                    567: 
                    568:             if query[0]=="_" : query[0]="-"
                    569:             
                    570:             if query.split("=")[0].lower()=="-skip":
                    571:                 #print"HI"
                    572:                 query="-skip=%i"%newRangeStart
                    573:                 skipFound=1
                    574:             newquery.append(query)
                    575: 
                    576:         if skipFound==0 :
                    577:             query="-skip=%i"%newRangeStart
                    578:             newquery.append(query)
                    579:             
                    580:         newquerystring=string.join(newquery,"&")
1.9       dwinter   581: 
                    582:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
                    583: 
                    584: 
1.5       dwinter   585:     
                    586:     def prevLink_old(self,html):
1.1       dwinter   587:         """prev link"""
                    588:         if self.REQUEST['QUERY_STRING']=="":
                    589:             qs=self.REQUEST.SESSION['query']
                    590:         else:
                    591:             qs=self.REQUEST['QUERY_STRING']
                    592:         max=re.search(r'max\=(.*)\,',qs.lower())
                    593:         offset=re.search(r'offset\=(.*)\,',qs.lower())
                    594:         if not offset:
                    595:             offsetnew=0
                    596:         else:
                    597:             offsetnew=int(offset)-max
                    598:             if offsetnew<0:
                    599:                 offsetnew=0
                    600:         queries=string.split(qs,",")
                    601:         newquery=[]
                    602:         if offset:
                    603:             for query in queries:
                    604:                 if query.split("=")[0].lower()=="offset":
                    605:                     query="-offset=%i"%offsetnew
                    606:                 newquery.append(query)
                    607:                 newquerystring=string.join(newquery,"&")
                    608:         else:
                    609:             queries.append("-offset=%i"%offsetnew)
                    610:             newquerystring=string.join(queries,"&")
1.9       dwinter   611:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.1       dwinter   612:         
1.5       dwinter   613:     def nextLink_old(self,html):
1.1       dwinter   614:         """prev link"""
                    615:         if self.REQUEST['QUERY_STRING']=="":
                    616:             qs=self.REQUEST.SESSION['query']
                    617:         else:
                    618:             qs=self.REQUEST['QUERY_STRING']
                    619:         max=re.search(r'max\=(.*)\,',qs.lower())
                    620:     
                    621:         offset=re.search(r'offset\=(.*)\,',qs.lower())
                    622:         if not offset:
                    623:             offsetnew=1
                    624:         else:
                    625:             offsetnew=int(offset)+int(max)
                    626:             if offsetnew<0:
                    627:                 offsetnew=0
                    628:         queries=string.split(qs,",")
                    629:         newquery=[]
                    630:         if offset:
                    631:             for query in queries:
                    632: 
                    633:                 if query.split("=")[0].lower()=="-offset":
                    634:                     query="-offset=%i"%offsetnew
                    635:                 newquery.append(query)
                    636:                 newquerystring=string.join(newquery,"&")
                    637:         else:
                    638:             queries.append("-offset=%i"%offsetnew)
                    639:             newquerystring=string.join(queries,"&")
                    640:         
1.9       dwinter   641:         return "<a href='%s'>%s</a>"%(self.actualPath()+"?"+newquerystring,html)
1.1       dwinter   642:         
1.5       dwinter   643:     
1.1       dwinter   644: manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals())
                    645: 
                    646: def manage_addZSQLExtendFolder(self, id, title='',
                    647:                      createPublic=0,
                    648:                      createUserF=0,
                    649:                      REQUEST=None):
                    650:     """Add a new Folder object with id *id*.
                    651: 
                    652:     If the 'createPublic' and 'createUserF' parameters are set to any true
                    653:     value, an 'index_html' and a 'UserFolder' objects are created respectively
                    654:     in the new folder.
                    655:     """
                    656:     
                    657:     
                    658:     ob=ZSQLExtendFolder()
                    659:     ob.id=str(id)
                    660:     ob.title=title
                    661:     self._setObject(id, ob)
                    662:     ob=self._getOb(id)
                    663: 
                    664:     checkPermission=getSecurityManager().checkPermission
                    665: 
                    666:     if createUserF:
                    667:         if not checkPermission('Add User Folders', ob):
                    668:             raise Unauthorized, (
                    669:                   'You are not authorized to add User Folders.'
                    670:                   )
                    671:         ob.manage_addUserFolder()
                    672: 
                    673:     if createPublic:
                    674:         if not checkPermission('Add Page Templates', ob):
                    675:             raise Unauthorized, (
                    676:                   'You are not authorized to add Page Templates.'
                    677:                   )
                    678:         ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
                    679:             id='index_html', title='')
                    680: 
                    681:     if REQUEST is not None:
                    682:         return self.manage_main(self, REQUEST, update_menu=1)
1.15    ! dwinter   683: 
        !           684: 
        !           685: 
        !           686: class ZSQLBibliography(ZSQLExtendFolder):
        !           687:     """Bibliography"""
        !           688:     meta_type="ZSQLBibliography"
        !           689:     def getLabel(self):
        !           690:         try:
        !           691:             return self.label
        !           692:         except:
        !           693:             return ""
        !           694: 
        !           695:     def getDescription(self):
        !           696:         try:
        !           697:             return self.description
        !           698:         except:
        !           699:             return ""
        !           700:             
        !           701:     def changeZSQLBibliographyForm(self):
        !           702:         """change folder config"""
        !           703:         pt=PageTemplateFile('Products/ZSQLExtend/zpt/changeZSQLBibliographyForm.zpt').__of__(self)
        !           704:         return pt()
        !           705: 
        !           706: 
        !           707:     def content_html(self):
        !           708:         """template fuer content"""
        !           709:         
        !           710:         try:
        !           711:             obj=getattr(self,"ZSQLBibliography_template")
        !           712:             return obj()
        !           713:         except:
        !           714:             pt=PageTemplateFile('Products/ZSQLExtend/zpt/ZSQLBibliography_template_standard.zpt').__of__(self)
        !           715:             pt.content_type="text/html"
        !           716:             return pt()
        !           717: 
        !           718:     def changeZSQLBibliography(self,tableName,label,description,REQUEST=None):
        !           719:         """change it"""
        !           720:         self.tableName=tableName
        !           721:         self.label=label
        !           722:         self.description=description
        !           723:         
        !           724:         if REQUEST is not None:
        !           725:             return self.manage_main(self, REQUEST)
        !           726: 
        !           727:     manage_options=ZSQLExtendFolder.manage_options+(
        !           728:         {'label':'Edit Biblio','action':'changeZSQLBibliographyForm'},
        !           729:        )
        !           730: 
        !           731: 
        !           732:     def getFieldLabel(self,fields,field):
        !           733:         """get labels"""
        !           734:         try:
        !           735:             ret =fields[0][field]
        !           736:             if ret == "":
        !           737:                 return field
        !           738:             else:
        !           739:                 return ret
        !           740:         except:
        !           741:             return field
        !           742:         
        !           743:     def getFieldValue(self,found,field):
        !           744:         """get value"""
        !           745:         try:
        !           746:             ret=getattr(found,field)
        !           747:             if ret == "":
        !           748:                 return None
        !           749:             else:
        !           750:                 return ret
        !           751:         except:
        !           752:             return None
        !           753:     def findLabelsFromMapping(self,referenceType):
        !           754:         """gib hash mit label -> generic zurueck"""
        !           755:         self.referencetypes=self.ZopeFind(self.standardMD)
        !           756:         bibdata={}
        !           757:         retdata={}
        !           758:         fieldlist=self.standardMD.fieldList
        !           759:         
        !           760:    for referenceTypeF in self.referencetypes:
        !           761:        print referenceType,referenceTypeF[1].title
        !           762:        if referenceTypeF[1].title == referenceType: 
        !           763:            bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
        !           764:            bibdata['data']=referenceTypeF[1]
        !           765:            self.fields=bibdata[referenceType]
        !           766:                         for field in fieldlist:
        !           767:                             retdata[field]=referenceTypeF[1].getValue(field)[1]
        !           768: 
        !           769:         return retdata,fieldlist
        !           770:         
        !           771:         
        !           772: 
        !           773: manage_addZSQLBibliographyForm=DTMLFile('ZSQLBibliographyAdd', globals())
        !           774: 
        !           775: def manage_addZSQLBibliography(self, id, tableName,label,description,title='',
        !           776:                      createPublic=0,
        !           777:                      createUserF=0,
        !           778:                      REQUEST=None):
        !           779:     """Add a new Folder object with id *id*.
        !           780: 
        !           781:     If the 'createPublic' and 'createUserF' parameters are set to any true
        !           782:     value, an 'index_html' and a 'UserFolder' objects are created respectively
        !           783:     in the new folder.
        !           784:     """
        !           785:     
        !           786:     
        !           787:     ob=ZSQLBibliography()
        !           788:     ob.id=str(id)
        !           789:     ob.title=title
        !           790:     self._setObject(id, ob)
        !           791:     ob=self._getOb(id)
        !           792:     setattr(ob,'tableName',tableName)
        !           793:     setattr(ob,'label',label)
        !           794:     setattr(ob,'description',description)
        !           795:     
        !           796:     checkPermission=getSecurityManager().checkPermission
        !           797: 
        !           798:     if createUserF:
        !           799:         if not checkPermission('Add User Folders', ob):
        !           800:             raise Unauthorized, (
        !           801:                   'You are not authorized to add User Folders.'
        !           802:                   )
        !           803:         ob.manage_addUserFolder()
        !           804: 
        !           805:     if createPublic:
        !           806:         if not checkPermission('Add Page Templates', ob):
        !           807:             raise Unauthorized, (
        !           808:                   'You are not authorized to add Page Templates.'
        !           809:                   )
        !           810:         ob.manage_addProduct['PageTemplates'].manage_addPageTemplate(
        !           811:             id='index_html', title='')
        !           812: 
        !           813:     if REQUEST is not None:
        !           814:         return self.manage_main(self, REQUEST, update_menu=1)
        !           815: 
        !           816:     
1.1       dwinter   817: 
                    818:     

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>