Annotation of ECHO_content/VLPExtension.py, revision 1.19

1.10      dwinter     1: from Products.ECHO_content.ECHO_collection import *
1.1       dwinter     2: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
                      3: from Products.PageTemplates.PageTemplate import PageTemplate
                      4: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
1.2       dwinter     5: 
1.13      dwinter     6: try:
                      7:    from Products.zogiLib import zogiLib
                      8: except:
                      9:    print "Zogilib not installed, VLP_resource will not work"
                     10: 
1.11      dwinter    11: import xml.dom.minidom
                     12: import urllib
1.1       dwinter    13: 
1.14      dwinter    14: def makeXML(str):
                     15:        try:
                     16:            dom=xml.dom.minidom.parseString(str)
                     17:            return str
                     18:        except:
1.15      dwinter    19:            return """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><page>
                     20:                      %s
                     21:                  </page>"""%str
1.14      dwinter    22:        
1.1       dwinter    23: def getText(nodelist):
                     24: 
                     25:     rc = ""
                     26:     for node in nodelist:
                     27:        if node.nodeType == node.TEXT_NODE:
                     28:            rc = rc + node.data
                     29:     return rc
                     30: 
1.6       dwinter    31: class VLP_essay(Folder):
                     32:     """classe für VLP essays"""
                     33: 
                     34:     meta_type="VLP_essay"
                     35: 
1.8       dwinter    36:     manage_options = Folder.manage_options+(
                     37:        {'label':'Main Config','action':'ConfigVLP_essayForm'},
1.17      dwinter    38:        {'label':'Generate Essay Template','action':'generateEssayTemplateHTML'},
1.8       dwinter    39:                 )
                     40: 
1.9       dwinter    41:     def content_html(self,type='collection'):
                     42:         """template fuer content"""
                     43:         #templates = self.ZopeFind(self.aq_parent,obj_ids=[type+"_template"])
                     44:         #
                     45:         #if templates:
                     46:         #    return templates[0][1]()
                     47:    
                     48:         if hasattr(self,type+"_template"):
                     49:             obj=getattr(self,type+"_template")
                     50:             return obj()
                     51:         else:
                     52:             pt=PageTemplateFile('Products/ECHO_content/zpt/ECHO_%s_template_standard.zpt'%type).__of__(self)
                     53:             pt.content_type="text/html"
                     54:             return pt()
                     55: 
1.8       dwinter    56:     def ConfigVLP_essayForm(self):
                     57:         """Form for adding"""
                     58:         pt=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLP_essay.zpt').__of__(self)
                     59:         return pt()
                     60: 
                     61:     def ChangeVLP_essay(self,title,label,description,RESPONSE=None):
                     62:         """Change vlp_essay"""
                     63:         self.title=title
                     64:         self.label=label
                     65:         self.description=description
                     66: 
                     67:         if RESPONSE is not None:
                     68:             RESPONSE.redirect('manage_main')
                     69: 
1.6       dwinter    70:     def __init__(self,id,title,label):
                     71:         """init"""
                     72:         self.id=id
                     73:         self.title=title
                     74:         self.label=label
                     75: 
1.17      dwinter    76: 
                     77:     def index_html(self):
                     78:    
                     79:        """show the rendered file"""
                     80:        
1.18      dwinter    81:        if hasattr(self,'essayTemplate.html'):
                     82:            return getattr(self,'essayTemplate.html')()
1.17      dwinter    83: 
                     84:        pt=PageTemplateFile('Products/ECHO_content/vlp/essay_template.zpt').__of__(self)
                     85:        pt.content_type="text/html"
                     86:        return pt()
                     87: 
                     88:     def generateEssayTemplateHTML(self,RESPONSE=None):
                     89:         """lege standard index.html an"""
                     90: 
                     91:    if not hasattr(self,'essayTemplate.html'):
                     92:             zt=ZopePageTemplate('essayTemplate.html')
                     93:             self._setObject('essayTemplate.html',zt)
                     94:             default_content_fn = os.path.join(package_home(globals()),
                     95:                                                'vlp/essay_template.zpt')
                     96:             text = open(default_content_fn).read()
                     97:             zt.pt_edit(text, 'text/html')
                     98: 
                     99:         else:
                    100:             return "already exists!"
                    101:         
                    102:         if RESPONSE is not None:
                    103:             RESPONSE.redirect('manage_main')
                    104: 
                    105: 
1.6       dwinter   106:     def getPage(self,pagenum):
                    107:         """gibt essay page mit num aus"""
                    108:         def sortFind(x,y):
                    109:             return cmp(x[0],y[0])
1.16      dwinter   110:         pages=[]
                    111:         pagestmp=self.ZopeFind(self,obj_metatypes=['DTML Document','File'])
                    112:    for page in pagestmp:
                    113:        if not (page[1].getId()[0]=="."):
                    114:            pages.append(page)
                    115:            
1.6       dwinter   116:         pages.sort(sortFind)
                    117:         #print str(pages[int(pagenum)][1]())
                    118:         if pages[int(pagenum)-1][1].meta_type=='File':
1.15      dwinter   119:             return self.xml2html(makeXML(str(pages[int(pagenum)-1][1])),quote="no")
1.6       dwinter   120:         else:
1.15      dwinter   121:             return str(self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no"))
1.6       dwinter   122:         
                    123:     def nextPage(self,pagenum,url):
1.7       dwinter   124:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable
1.6       dwinter   125:         if int(pagenum)+1 <= pages:
                    126:             retstr=url+"?p="+str(int(pagenum)+1)
                    127:             return """<td align="right" <a href="%s">next</a></td>"""%retstr
                    128:         
                    129:     def previousPage(self,pagenum,url):
1.7       dwinter   130:         
1.6       dwinter   131:         if int(pagenum)-1 > 0:
                    132:             retstr=url+"?p="+str(int(pagenum)-1)
                    133:             return """<td align="left" <a href="%s">previous</a></td>"""%retstr
                    134:         
1.19    ! dwinter   135:     def nextURL(self,pagenum,url):
        !           136:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable
        !           137:         if int(pagenum)+1 <= pages:
        !           138:             retstr=url+"?p="+str(int(pagenum)+1)
        !           139:             return retstr
        !           140:         
        !           141:     def previousURL(self,pagenum,url):
        !           142:         
        !           143:         if int(pagenum)-1 > 0:
        !           144:             retstr=url+"?p="+str(int(pagenum)-1)
        !           145:             return retstr
        !           146:         
1.6       dwinter   147:         
                    148: def manage_addVLP_essayForm(self):
                    149:     """Form for adding"""
                    150:     pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_essay.zpt').__of__(self)
                    151:     return pt()
                    152: 
                    153: def manage_addVLP_essay(self, id,title,label,RESPONSE=None):
                    154:    """add the copyright"""
                    155: 
                    156:    
                    157:    self._setObject(id, VLP_essay(id, title,label))
                    158: 
                    159:    if RESPONSE is not None:
                    160:        RESPONSE.redirect('manage_main')
                    161:    
                    162: 
                    163: 
1.2       dwinter   164: class VLP_collection(ECHO_collection):
                    165:     """VLP spezifische Erweiterung der Collection"""
                    166: 
1.3       dwinter   167:     meta_type="VLP_collection"
                    168:     manage_options=ECHO_collection.manage_options+(
                    169:         {'label':'Change Path','action':'VLP_path_configForm'},
                    170:         {'label':'Update Library','action':'updateCollection'},
                    171:         {'label':'Update Metadata','action':'updateCollectionMD'},
                    172:         )
                    173: 
                    174:     def VLP_path_configForm(self):
1.5       dwinter   175:         """change pt"""
                    176:         path=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLPPath.zpt').__of__(self)
1.3       dwinter   177:         return pt()
                    178: 
                    179:     def VLP_path_config(self,path,RESPONSE=None):
                    180:         """config"""
                    181:         self.path=path
                    182:         if RESPONSE is not None:
                    183:             RESPONSE.redirect('manage_main')
                    184: 
                    185:     def updateCollection(self,RESPONSE=None):
                    186:         """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
                    187:         files=os.listdir(self.path)
                    188:         for fileName in files:
                    189:             
                    190:             if fileName[0:3]=="lit":
                    191:                 
                    192:                 metalink=self.REQUEST['URL1']+"/"+fileName+"/index_meta"
                    193:                 newObj=VLP_resource(fileName,'',metalink,fileName,fileName,fileName,'generated','book','','','','','','')
                    194:                 self._setObject(fileName,newObj)
                    195:                 
                    196:                 genObj=getattr(self,fileName)
                    197:                 genObj.createIndexFile()
                    198:                 
                    199:                 
                    200:         if RESPONSE is not None:
                    201:             RESPONSE.redirect('manage_main')
                    202: 
                    203:     def updateCollectionMD(self,RESPONSE=None):
                    204:         """updateMD"""
                    205:         files=os.listdir(self.path)
                    206:         for fileName in files:
1.4       dwinter   207:             if fileName[0:3]=="lit":
1.3       dwinter   208:                 genObj=getattr(self,fileName)
                    209:                 genObj.copyIndex_meta2echo_resource()
                    210:                 genObj.generate_title()
                    211: 
                    212:         if RESPONSE is not None:
                    213:             RESPONSE.redirect('manage_main')
                    214: 
1.2       dwinter   215: 
                    216: def manage_addVLP_collectionForm(self):
                    217:         """Form for adding a ressource"""
                    218:         pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_collectionForm.zpt').__of__(self)
                    219:         return pt()
                    220: 
                    221: 
                    222: 
1.3       dwinter   223: def manage_addVLP_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,path,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
1.2       dwinter   224:     """add a echo collection"""
                    225:     
                    226: 
                    227:     newObj=VLP_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
                    228: 
                    229:     self._setObject(id,newObj)
1.3       dwinter   230:     setattr(newObj,'path',path)
1.2       dwinter   231: 
                    232:     if RESPONSE is not None:
                    233:         RESPONSE.redirect('manage_main')
                    234: 
                    235: 
1.1       dwinter   236: 
                    237: class VLP_resource(ECHO_resource):
                    238:     """VLP spezifische Erweiterung"""
                    239: 
                    240:     meta_type="VLP_resource"
                    241: 
                    242:     vlp_basis="/mpiwg/online/permanent/vlp"
                    243: 
                    244:     
                    245:     referencetypes=[]
                    246: 
                    247:     manage_options=ECHO_resource.manage_options+(
                    248:         {'label':'Update Index','action':'createIndexFile'},
                    249:         {'label':'Reset MetaLink','action':'resetMetaLink'},
                    250:         {'label':'Generate Title','action':'generate_title'},
1.14      dwinter   251:    {'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},
1.1       dwinter   252:         )
                    253: 
                    254:     def resetMetaLink(self,all="no",RESPONSE=None):
                    255:         """resets metalink to standard resp. in case of server change it sets to the new server url"""
                    256:         if all=="yes":
                    257:             self.metalink=self.absolute_url()+"/index_meta"
                    258:         else:
                    259:             splitted=self.metalink.split("/")
                    260:             if (len(splitted)>1) and (splitted[len(splitted)-1]=="index_meta") and (splitted[len(splitted)-2]==self.getId()): # heuristic nur generische Metadatafiles andern
                    261:                 self.metalink=self.absolute_url()+"/index_meta"
                    262: 
                    263:         if RESPONSE:
                    264:             return "done"
                    265:             
                    266:     def show(self):
                    267:         """show the rendered file"""
1.11      dwinter   268: 
                    269:         if self.REQUEST.get('p',None):
                    270:             self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None)))
1.12      dwinter   271:            
1.14      dwinter   272:    if hasattr(self,'libraryTemplate.html'):
                    273:        return getattr(self,'libraryTemplate.html')()
                    274:    
1.1       dwinter   275:         pt=PageTemplateFile('Products/ECHO_content/vlp/library_template.zpt').__of__(self)
                    276:         pt.content_type="text/html"
                    277:         return pt()
                    278:     
1.3       dwinter   279:     index_html=show
1.14      dwinter   280: 
                    281:     def generateLibraryTemplateHTML(self,RESPONSE=None):
                    282:         """lege standard index.html an"""
                    283: 
                    284:    if not hasattr(self,'libraryTemplate.html'):
                    285:             zt=ZopePageTemplate('libraryTemplate.html')
                    286:             self._setObject('libraryTemplate.html',zt)
                    287:             default_content_fn = os.path.join(package_home(globals()),
                    288:                                                'vlp/library_template.zpt')
                    289:             text = open(default_content_fn).read()
                    290:             zt.pt_edit(text, 'text/html')
                    291: 
                    292:         else:
                    293:             return "already exists!"
                    294:         
                    295:         if RESPONSE is not None:
                    296:             RESPONSE.redirect('manage_main')
                    297: 
                    298: 
1.1       dwinter   299:     def index_meta(self):
                    300:         """index_meta"""
1.11      dwinter   301:         
1.1       dwinter   302:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_meta.zpt').__of__(self)
                    303:         pt.content_type="text/html"
                    304:         return pt()
1.11      dwinter   305: 
                    306:     def file2page(self,p):
                    307:         """converts filename to pagenumber"""
                    308:         dom=xml.dom.minidom.parse(urllib.urlopen(getattr(self,'index.xml').absolute_url()))
                    309:         
                    310:         for page in dom.getElementsByTagName('page'):
                    311:             if page.getAttribute('file')==p:
                    312:                 return page.getAttribute('nr')
                    313:             
                    314:         return 0
1.1       dwinter   315:     
                    316:     def dir2index(self):
                    317:         """dir to index"""
                    318: 
                    319:         def calculateName(str):
                    320:             ret="%s: %s"%(str[0],str[1:5])
                    321:             return ret
1.2       dwinter   322: 
                    323:         try:
                    324:             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg'))
                    325:             self.imagePath='pageimg'
                    326:         except:
                    327:             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))
                    328:             self.imagePath='pagesHi'
1.1       dwinter   329:         temp=[]
                    330:         for x in ret:
                    331:             if not (x[0]=="."):
                    332:                 
1.11      dwinter   333:                 temp.append((calculateName(x),os.path.splitext(x)[0]))
1.1       dwinter   334:         return temp
                    335: 
1.11      dwinter   336:     
1.1       dwinter   337:     def firstPage(self,url=None):
                    338:         """showlink to the first image"""
                    339:         if self.REQUEST.get('pn')=="1": #erste seinte dann kein a tag
                    340:             return """<img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first"""
                    341: 
                    342:         else:
                    343:             return """<a href=%s>
                    344:                          <img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first
                    345:                          </a>
                    346:                          """%(self.REQUEST['URL']+"?pn=1")
                    347: 
                    348:     def lastPage(self,url=None):
                    349:         """showlink to the first image"""
                    350:         pages=self.readIndexFile(url)
                    351:         if pages:
                    352:             ln=len(pages)
                    353:         
                    354:         if self.REQUEST.get('pn')==str(ln): #letzte seite dann kein a tag
                    355:             return """<img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last"""
                    356: 
                    357:         else:
                    358:             return """<a href=%s>
                    359:                          <img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last
                    360:                          </a>
                    361:                          """%(self.REQUEST['URL']+"?pn="+str(ln))
                    362:             
                    363:     def prevPage(self,url=None):
                    364:         """showlink to the first image"""
                    365:         
                    366: 
                    367:         nn = int(self.REQUEST.get('pn','1'))-1
                    368:         if nn < 1: #letzte  seite dann kein a tag
                    369:             return """<img src="../../images/prev.gif" alt="prev" width="14" height="14" border="0"><br>prev"""
                    370: 
                    371:         else:
                    372:             return """<a href=%s>
                    373:                          <img src="../../images/prev.gif" alt="prev" width="14" height="14" border="0"><br>prev
                    374:                          </a>
                    375:                          """%(self.REQUEST['URL']+"?pn="+str(nn))
                    376: 
                    377:     def nextPage(self,url=None):
                    378:         """showlink to the first image"""
                    379:         pages=self.readIndexFile(url)
                    380:         if pages:
                    381:             ln=len(pages)
                    382: 
                    383:         nn = int(self.REQUEST.get('pn','1'))+1
                    384:         if nn>int(ln): #letzte  seite dann kein a tag
                    385:             return """<img src="../../images/next.gif" alt="next" width="14" height="14" border="0"><br>next"""
                    386: 
                    387:         else:
                    388:             return """<a href=%s>
                    389:                          <img src="../../images/next.gif" alt="next" width="14" height="14" border="0"><br>next
                    390:                          </a>
                    391:                          """%(self.REQUEST['URL']+"?pn="+str(nn))
                    392:         
                    393:     
                    394:     def readIndexFile(self,url=None):
                    395:         """reads the indexfile. presently url not None isn't implemented. In the future url can be defined."""
                    396:         pagelist=[]
                    397:         if not url:
                    398:             url=self.absolute_url()+"/index.xml"
                    399: 
                    400:         fh=urllib.urlopen(url)
                    401:         dom=xml.dom.minidom.parse(fh)
                    402:         
                    403:         
                    404:         for page in dom.getElementsByTagName('page'):
                    405:             text=getText(page.childNodes)
                    406:             pageNum=page.getAttribute('nr')
                    407:             pagelist.append((pageNum,text))
                    408: 
                    409:         return pagelist
                    410:     
                    411:     def createIndexFile(self,RESPONSE=None):
                    412:         """create index file"""
                    413: 
                    414:         
                    415:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_template.zpt').__of__(self)()
                    416: 
                    417: 
                    418:         
                    419:         if not hasattr(self,'index.xml'):
                    420:             zt=ZopePageTemplate('index.xml')
                    421:             self._setObject('index.xml',zt)
                    422:         else:
                    423:             zt=getattr(self,'index.xml')
                    424:             
                    425:             
                    426:         zt.pt_edit(pt, 'text/xml')
                    427: 
                    428:         if RESPONSE is not None:
                    429:             RESPONSE.redirect('manage_main')
                    430: 
                    431:         
                    432: def manage_addVLP_resourceForm(self):
                    433:         """Form for adding a ressource"""
                    434:         pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_resourceForm.zpt').__of__(self)
                    435:         return pt()
                    436: 
                    437: 
                    438: 
                    439: def manage_addVLP_resource(self,id,title,label,description,responsible,link,metalink,weight,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):
                    440:     """addaresource"""
                    441: 
                    442:     
1.2       dwinter   443:     if metalink=='':
                    444:         metalink=self.absolute_url()+"/"+id+"/index_meta"
                    445:             
1.1       dwinter   446:     newObj=VLP_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords)
                    447: 
                    448:     self._setObject(id,newObj)
                    449: 
                    450:     if RESPONSE is not None:
                    451:         RESPONSE.redirect('manage_main')
                    452:  

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