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