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