File:  [Repository] / ECHO_content / VLPExtension.py
Revision 1.19: download - view: text, annotated - select for diffs - revision graph
Fri Aug 6 15:03:58 2004 UTC (19 years, 11 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
previousURL nextURL inserted at VLP_essay

    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 """<!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
   22: 	    
   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: 
   31: class VLP_essay(Folder):
   32:     """classe für VLP essays"""
   33: 
   34:     meta_type="VLP_essay"
   35: 
   36:     manage_options = Folder.manage_options+(
   37: 		{'label':'Main Config','action':'ConfigVLP_essayForm'},
   38: 		{'label':'Generate Essay Template','action':'generateEssayTemplateHTML'},
   39:                 )
   40: 
   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: 
   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: 
   70:     def __init__(self,id,title,label):
   71:         """init"""
   72:         self.id=id
   73:         self.title=title
   74:         self.label=label
   75: 
   76: 
   77:     def index_html(self):
   78: 	
   79: 	    """show the rendered file"""
   80: 	    
   81: 	    if hasattr(self,'essayTemplate.html'):
   82: 			return getattr(self,'essayTemplate.html')()
   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: 
  106:     def getPage(self,pagenum):
  107:         """gibt essay page mit num aus"""
  108:         def sortFind(x,y):
  109:             return cmp(x[0],y[0])
  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: 			
  116:         pages.sort(sortFind)
  117:         #print str(pages[int(pagenum)][1]())
  118:         if pages[int(pagenum)-1][1].meta_type=='File':
  119:             return self.xml2html(makeXML(str(pages[int(pagenum)-1][1])),quote="no")
  120:         else:
  121:             return str(self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no"))
  122:         
  123:     def nextPage(self,pagenum,url):
  124:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable
  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):
  130:         
  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:         
  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:         
  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: 
  164: class VLP_collection(ECHO_collection):
  165:     """VLP spezifische Erweiterung der Collection"""
  166: 
  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):
  175:         """change pt"""
  176:         path=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLPPath.zpt').__of__(self)
  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:
  207:             if fileName[0:3]=="lit":
  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: 
  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: 
  223: def manage_addVLP_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,path,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
  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)
  230:     setattr(newObj,'path',path)
  231: 
  232:     if RESPONSE is not None:
  233:         RESPONSE.redirect('manage_main')
  234: 
  235: 
  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'},
  251: 	{'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},
  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"""
  268: 
  269:         if self.REQUEST.get('p',None):
  270:             self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None)))
  271:            
  272: 	if hasattr(self,'libraryTemplate.html'):
  273: 		return getattr(self,'libraryTemplate.html')()
  274: 	
  275:         pt=PageTemplateFile('Products/ECHO_content/vlp/library_template.zpt').__of__(self)
  276:         pt.content_type="text/html"
  277:         return pt()
  278:     
  279:     index_html=show
  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: 
  299:     def index_meta(self):
  300:         """index_meta"""
  301:         
  302:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_meta.zpt').__of__(self)
  303:         pt.content_type="text/html"
  304:         return pt()
  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
  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
  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'
  329:         temp=[]
  330:         for x in ret:
  331:             if not (x[0]=="."):
  332:                 
  333:                 temp.append((calculateName(x),os.path.splitext(x)[0]))
  334:         return temp
  335: 
  336:     
  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:     
  443:     if metalink=='':
  444:         metalink=self.absolute_url()+"/"+id+"/index_meta"
  445:             
  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>