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