Annotation of ZSQLExtend/ZSQLExtend.py, revision 1.17

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

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