Annotation of ECHO_content/VLPExtension.py, revision 1.16
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:
1.15 dwinter 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
1.14 dwinter 22:
1.1 dwinter 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:
1.6 dwinter 31: class VLP_essay(Folder):
32: """classe für VLP essays"""
33:
34: meta_type="VLP_essay"
35:
1.8 dwinter 36: manage_options = Folder.manage_options+(
37: {'label':'Main Config','action':'ConfigVLP_essayForm'},
38: )
39:
1.9 dwinter 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:
1.8 dwinter 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:
1.6 dwinter 69: def __init__(self,id,title,label):
70: """init"""
71: self.id=id
72: self.title=title
73: self.label=label
74:
1.14 dwinter 75:
1.6 dwinter 76: def getPage(self,pagenum):
77: """gibt essay page mit num aus"""
78: def sortFind(x,y):
79: return cmp(x[0],y[0])
1.16 ! dwinter 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:
1.6 dwinter 86: pages.sort(sortFind)
87: #print str(pages[int(pagenum)][1]())
88: if pages[int(pagenum)-1][1].meta_type=='File':
1.15 dwinter 89: return self.xml2html(makeXML(str(pages[int(pagenum)-1][1])),quote="no")
1.6 dwinter 90: else:
1.15 dwinter 91: return str(self.xml2html(makeXML(pages[int(pagenum)-1][1]()),quote="no"))
1.6 dwinter 92:
93: def nextPage(self,pagenum,url):
1.7 dwinter 94: pages=len(self.ZopeFind(self,obj_metatypes=['DTML Document','File'])) # teste ob performance ok, sonst in variable
1.6 dwinter 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):
1.7 dwinter 100:
1.6 dwinter 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:
1.2 dwinter 122: class VLP_collection(ECHO_collection):
123: """VLP spezifische Erweiterung der Collection"""
124:
1.3 dwinter 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):
1.5 dwinter 133: """change pt"""
134: path=PageTemplateFile('Products/ECHO_content/vlp/ChangeVLPPath.zpt').__of__(self)
1.3 dwinter 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:
1.4 dwinter 165: if fileName[0:3]=="lit":
1.3 dwinter 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:
1.2 dwinter 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:
1.3 dwinter 181: 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 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)
1.3 dwinter 188: setattr(newObj,'path',path)
1.2 dwinter 189:
190: if RESPONSE is not None:
191: RESPONSE.redirect('manage_main')
192:
193:
1.1 dwinter 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'},
1.14 dwinter 209: {'label':'Generate Library Template','action':'generateLibraryTemplateHTML'},
1.1 dwinter 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"""
1.11 dwinter 226:
227: if self.REQUEST.get('p',None):
228: self.REQUEST.set('pn',self.file2page(self.REQUEST.get('p',None)))
1.12 dwinter 229:
1.14 dwinter 230: if hasattr(self,'libraryTemplate.html'):
231: return getattr(self,'libraryTemplate.html')()
232:
1.1 dwinter 233: pt=PageTemplateFile('Products/ECHO_content/vlp/library_template.zpt').__of__(self)
234: pt.content_type="text/html"
235: return pt()
236:
1.3 dwinter 237: index_html=show
1.14 dwinter 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:
1.1 dwinter 257: def index_meta(self):
258: """index_meta"""
1.11 dwinter 259:
1.1 dwinter 260: pt=PageTemplateFile('Products/ECHO_content/vlp/index_meta.zpt').__of__(self)
261: pt.content_type="text/html"
262: return pt()
1.11 dwinter 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
1.1 dwinter 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
1.2 dwinter 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'
1.1 dwinter 287: temp=[]
288: for x in ret:
289: if not (x[0]=="."):
290:
1.11 dwinter 291: temp.append((calculateName(x),os.path.splitext(x)[0]))
1.1 dwinter 292: return temp
293:
1.11 dwinter 294:
1.1 dwinter 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:
1.2 dwinter 401: if metalink=='':
402: metalink=self.absolute_url()+"/"+id+"/index_meta"
403:
1.1 dwinter 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>