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