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