Annotation of ECHO_content/VLPExtension.py, revision 1.11

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

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