File:  [Repository] / ECHO_content / VLPExtension.py
Revision 1.14: download - view: text, annotated - select for diffs - revision graph
Thu Aug 5 12:53:58 2004 UTC (19 years, 11 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
added templates for vlp_resource, vlp_essay nimmt auch fragmente

    1: from Products.ECHO_content.ECHO_collection import *
    2: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    3: from Products.PageTemplates.PageTemplate import PageTemplate
    4: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
    5: 
    6: try:
    7: 	from Products.zogiLib import zogiLib
    8: except:
    9: 	print "Zogilib not installed, VLP_resource will not work"
   10: 
   11: import xml.dom.minidom
   12: import urllib
   13: 
   14: def makeXML(str):
   15: 	    try:
   16: 		    dom=xml.dom.minidom.parseString(str)
   17: 		    return str
   18: 	    except:
   19: 		    return "<page>"+str+"</page>"
   20: 	    
   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: 
   29: class VLP_essay(Folder):
   30:     """classe für VLP essays"""
   31: 
   32:     meta_type="VLP_essay"
   33: 
   34:     manage_options = Folder.manage_options+(
   35: 		{'label':'Main Config','action':'ConfigVLP_essayForm'},
   36:                 )
   37: 
   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: 
   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: 
   67:     def __init__(self,id,title,label):
   68:         """init"""
   69:         self.id=id
   70:         self.title=title
   71:         self.label=label
   72: 
   73:  
   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':
   84:             return self.xml2html(makeXML(str(pages[int(pagenum)-1][1])))
   85:         else:
   86:             return str(self.xml2html(makeXML(pages[int(pagenum)-1][1]())))
   87:         
   88:     def nextPage(self,pagenum,url):
   89:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable
   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):
   95:         
   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: 
  117: class VLP_collection(ECHO_collection):
  118:     """VLP spezifische Erweiterung der Collection"""
  119: 
  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):
  128:         """change pt"""
  129:         path=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLPPath.zpt').__of__(self)
  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:
  160:             if fileName[0:3]=="lit":
  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: 
  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: 
  176: def manage_addVLP_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,path,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
  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)
  183:     setattr(newObj,'path',path)
  184: 
  185:     if RESPONSE is not None:
  186:         RESPONSE.redirect('manage_main')
  187: 
  188: 
  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'},
  204: 	{'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},
  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"""
  221: 
  222:         if self.REQUEST.get('p',None):
  223:             self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None)))
  224:            
  225: 	if hasattr(self,'libraryTemplate.html'):
  226: 		return getattr(self,'libraryTemplate.html')()
  227: 	
  228:         pt=PageTemplateFile('Products/ECHO_content/vlp/library_template.zpt').__of__(self)
  229:         pt.content_type="text/html"
  230:         return pt()
  231:     
  232:     index_html=show
  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: 
  252:     def index_meta(self):
  253:         """index_meta"""
  254:         
  255:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_meta.zpt').__of__(self)
  256:         pt.content_type="text/html"
  257:         return pt()
  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
  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
  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'
  282:         temp=[]
  283:         for x in ret:
  284:             if not (x[0]=="."):
  285:                 
  286:                 temp.append((calculateName(x),os.path.splitext(x)[0]))
  287:         return temp
  288: 
  289:     
  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:     
  396:     if metalink=='':
  397:         metalink=self.absolute_url()+"/"+id+"/index_meta"
  398:             
  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>