File:  [Repository] / ECHO_content / VLPExtension.py
Revision 1.12: download - view: text, annotated - select for diffs - revision graph
Wed Jul 14 13:33:31 2004 UTC (19 years, 11 months ago) by dwinter
Branches: MAIN
CVS tags: HEAD
linking via names

    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: from Products.zogiLib import zogiLib
    7: import xml.dom.minidom
    8: import urllib
    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: 
   18: class VLP_essay(Folder):
   19:     """classe für VLP essays"""
   20: 
   21:     meta_type="VLP_essay"
   22: 
   23:     manage_options = Folder.manage_options+(
   24: 		{'label':'Main Config','action':'ConfigVLP_essayForm'},
   25:                 )
   26: 
   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: 
   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: 
   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':
   72:             return self.xml2html(str(pages[int(pagenum)-1][1]))
   73:         else:
   74:             return str(self.xml2html(pages[int(pagenum)-1][1]()))
   75:         
   76:     def nextPage(self,pagenum,url):
   77:         pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable
   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):
   83:         
   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: 
  105: class VLP_collection(ECHO_collection):
  106:     """VLP spezifische Erweiterung der Collection"""
  107: 
  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):
  116:         """change pt"""
  117:         path=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLPPath.zpt').__of__(self)
  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:
  148:             if fileName[0:3]=="lit":
  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: 
  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: 
  164: def manage_addVLP_collection(self,id,title,label,description,contentType,responsible,weight,sortfield,path,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
  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)
  171:     setattr(newObj,'path',path)
  172: 
  173:     if RESPONSE is not None:
  174:         RESPONSE.redirect('manage_main')
  175: 
  176: 
  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: 
  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:         
  202:             
  203: ##         return ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords)
  204: 
  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"""
  220: 
  221:         if self.REQUEST.get('p',None):
  222:             self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None)))
  223:            
  224: 
  225:         pt=PageTemplateFile('Products/ECHO_content/vlp/library_template.zpt').__of__(self)
  226:         pt.content_type="text/html"
  227:         return pt()
  228:     
  229:     index_html=show
  230:     
  231:     def index_meta(self):
  232:         """index_meta"""
  233:         
  234:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_meta.zpt').__of__(self)
  235:         pt.content_type="text/html"
  236:         return pt()
  237: 
  238:     def file2page(self,p):
  239:         """converts filename to pagenumber"""
  240:         dom=xml.dom.minidom.parse(urllib.urlopen(getattr(self,'index.xml').absolute_url()))
  241:         
  242:         for page in dom.getElementsByTagName('page'):
  243:             if page.getAttribute('file')==p:
  244:                 return page.getAttribute('nr')
  245:             
  246:         return 0
  247:     
  248:     def dir2index(self):
  249:         """dir to index"""
  250: 
  251:         def calculateName(str):
  252:             ret="%s: %s"%(str[0],str[1:5])
  253:             return ret
  254: 
  255:         try:
  256:             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg'))
  257:             self.imagePath='pageimg'
  258:         except:
  259:             ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pagesHi'))
  260:             self.imagePath='pagesHi'
  261:         temp=[]
  262:         for x in ret:
  263:             if not (x[0]=="."):
  264:                 
  265:                 temp.append((calculateName(x),os.path.splitext(x)[0]))
  266:         return temp
  267: 
  268:     
  269:     def firstPage(self,url=None):
  270:         """showlink to the first image"""
  271:         if self.REQUEST.get('pn')=="1": #erste seinte dann kein a tag
  272:             return """<img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first"""
  273: 
  274:         else:
  275:             return """<a href=%s>
  276:                          <img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first
  277:                          </a>
  278:                          """%(self.REQUEST['URL']+"?pn=1")
  279: 
  280:     def lastPage(self,url=None):
  281:         """showlink to the first image"""
  282:         pages=self.readIndexFile(url)
  283:         if pages:
  284:             ln=len(pages)
  285:         
  286:         if self.REQUEST.get('pn')==str(ln): #letzte seite dann kein a tag
  287:             return """<img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last"""
  288: 
  289:         else:
  290:             return """<a href=%s>
  291:                          <img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last
  292:                          </a>
  293:                          """%(self.REQUEST['URL']+"?pn="+str(ln))
  294:             
  295:     def prevPage(self,url=None):
  296:         """showlink to the first image"""
  297:         
  298: 
  299:         nn = int(self.REQUEST.get('pn','1'))-1
  300:         if nn < 1: #letzte  seite dann kein a tag
  301:             return """<img src="../../images/prev.gif" alt="prev" width="14" height="14" border="0"><br>prev"""
  302: 
  303:         else:
  304:             return """<a href=%s>
  305:                          <img src="../../images/prev.gif" alt="prev" width="14" height="14" border="0"><br>prev
  306:                          </a>
  307:                          """%(self.REQUEST['URL']+"?pn="+str(nn))
  308: 
  309:     def nextPage(self,url=None):
  310:         """showlink to the first image"""
  311:         pages=self.readIndexFile(url)
  312:         if pages:
  313:             ln=len(pages)
  314: 
  315:         nn = int(self.REQUEST.get('pn','1'))+1
  316:         if nn>int(ln): #letzte  seite dann kein a tag
  317:             return """<img src="../../images/next.gif" alt="next" width="14" height="14" border="0"><br>next"""
  318: 
  319:         else:
  320:             return """<a href=%s>
  321:                          <img src="../../images/next.gif" alt="next" width="14" height="14" border="0"><br>next
  322:                          </a>
  323:                          """%(self.REQUEST['URL']+"?pn="+str(nn))
  324:         
  325:     
  326:     def readIndexFile(self,url=None):
  327:         """reads the indexfile. presently url not None isn't implemented. In the future url can be defined."""
  328:         pagelist=[]
  329:         if not url:
  330:             url=self.absolute_url()+"/index.xml"
  331: 
  332:         fh=urllib.urlopen(url)
  333:         dom=xml.dom.minidom.parse(fh)
  334:         
  335:         
  336:         for page in dom.getElementsByTagName('page'):
  337:             text=getText(page.childNodes)
  338:             pageNum=page.getAttribute('nr')
  339:             pagelist.append((pageNum,text))
  340: 
  341:         return pagelist
  342:     
  343:     def createIndexFile(self,RESPONSE=None):
  344:         """create index file"""
  345: 
  346:         
  347:         pt=PageTemplateFile('Products/ECHO_content/vlp/index_template.zpt').__of__(self)()
  348: 
  349: 
  350:         
  351:         if not hasattr(self,'index.xml'):
  352:             zt=ZopePageTemplate('index.xml')
  353:             self._setObject('index.xml',zt)
  354:         else:
  355:             zt=getattr(self,'index.xml')
  356:             
  357:             
  358:         zt.pt_edit(pt, 'text/xml')
  359: 
  360:         if RESPONSE is not None:
  361:             RESPONSE.redirect('manage_main')
  362: 
  363:         
  364: def manage_addVLP_resourceForm(self):
  365:         """Form for adding a ressource"""
  366:         pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_resourceForm.zpt').__of__(self)
  367:         return pt()
  368: 
  369: 
  370: 
  371: 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):
  372:     """addaresource"""
  373: 
  374:     
  375:     if metalink=='':
  376:         metalink=self.absolute_url()+"/"+id+"/index_meta"
  377:             
  378:     newObj=VLP_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords)
  379: 
  380:     self._setObject(id,newObj)
  381: 
  382:     if RESPONSE is not None:
  383:         RESPONSE.redirect('manage_main')
  384:  

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