File:  [Repository] / ECHO_content / VLPExtension.py
Revision 1.13: download - view: text, annotated - select for diffs - revision graph
Fri Jul 16 16:31:12 2004 UTC (19 years, 11 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
zogilib mit try except

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

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