Annotation of ECHO_content/VLPExtension.py, revision 1.14

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

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