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