Annotation of ZSQLExtend/ZSQLExtend.py, revision 1.16

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

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