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

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