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: import xml.dom.minidom
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:
17: class VLP_resource(ECHO_resource):
18: """VLP spezifische Erweiterung"""
19:
20: meta_type="VLP_resource"
21:
22: vlp_basis="/mpiwg/online/permanent/vlp"
23:
24:
25: referencetypes=[]
26:
27: manage_options=ECHO_resource.manage_options+(
28: {'label':'Update Index','action':'createIndexFile'},
29: {'label':'Reset MetaLink','action':'resetMetaLink'},
30: {'label':'Generate Title','action':'generate_title'},
31: )
32:
33:
34: def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords):
35: """angepasstes init"""
36: if metalink=='':
37: metalink=self.absolute_url()+"/index_meta"
38:
39: return ECHO_resource(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords)
40:
41: def resetMetaLink(self,all="no",RESPONSE=None):
42: """resets metalink to standard resp. in case of server change it sets to the new server url"""
43: if all=="yes":
44: self.metalink=self.absolute_url()+"/index_meta"
45: else:
46: splitted=self.metalink.split("/")
47: if (len(splitted)>1) and (splitted[len(splitted)-1]=="index_meta") and (splitted[len(splitted)-2]==self.getId()): # heuristic nur generische Metadatafiles andern
48: self.metalink=self.absolute_url()+"/index_meta"
49:
50: if RESPONSE:
51: return "done"
52:
53: def show(self):
54: """show the rendered file"""
55: pt=PageTemplateFile('Products/ECHO_content/vlp/library_template.zpt').__of__(self)
56: pt.content_type="text/html"
57: return pt()
58:
59:
60: def index_meta(self):
61: """index_meta"""
62: pt=PageTemplateFile('Products/ECHO_content/vlp/index_meta.zpt').__of__(self)
63: pt.content_type="text/html"
64: return pt()
65:
66:
67: def dir2index(self):
68: """dir to index"""
69:
70: def calculateName(str):
71: ret="%s: %s"%(str[0],str[1:5])
72: return ret
73:
74: ret=os.listdir(os.path.join(self.vlp_basis,self.resourceID,'pageimg'))
75: temp=[]
76: for x in ret:
77: if not (x[0]=="."):
78:
79: temp.append(calculateName(x))
80: return temp
81:
82: def firstPage(self,url=None):
83: """showlink to the first image"""
84: if self.REQUEST.get('pn')=="1": #erste seinte dann kein a tag
85: return """<img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first"""
86:
87: else:
88: return """<a href=%s>
89: <img src="../../images/first.gif" alt="first" width="14" height="14" border="0"><br>first
90: </a>
91: """%(self.REQUEST['URL']+"?pn=1")
92:
93: def lastPage(self,url=None):
94: """showlink to the first image"""
95: pages=self.readIndexFile(url)
96: if pages:
97: ln=len(pages)
98:
99: if self.REQUEST.get('pn')==str(ln): #letzte seite dann kein a tag
100: return """<img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last"""
101:
102: else:
103: return """<a href=%s>
104: <img src="../../images/last.gif" alt="last" width="14" height="14" border="0"><br>last
105: </a>
106: """%(self.REQUEST['URL']+"?pn="+str(ln))
107:
108: def prevPage(self,url=None):
109: """showlink to the first image"""
110:
111:
112: nn = int(self.REQUEST.get('pn','1'))-1
113: if nn < 1: #letzte seite dann kein a tag
114: return """<img src="../../images/prev.gif" alt="prev" width="14" height="14" border="0"><br>prev"""
115:
116: else:
117: return """<a href=%s>
118: <img src="../../images/prev.gif" alt="prev" width="14" height="14" border="0"><br>prev
119: </a>
120: """%(self.REQUEST['URL']+"?pn="+str(nn))
121:
122: def nextPage(self,url=None):
123: """showlink to the first image"""
124: pages=self.readIndexFile(url)
125: if pages:
126: ln=len(pages)
127:
128: nn = int(self.REQUEST.get('pn','1'))+1
129: if nn>int(ln): #letzte seite dann kein a tag
130: return """<img src="../../images/next.gif" alt="next" width="14" height="14" border="0"><br>next"""
131:
132: else:
133: return """<a href=%s>
134: <img src="../../images/next.gif" alt="next" width="14" height="14" border="0"><br>next
135: </a>
136: """%(self.REQUEST['URL']+"?pn="+str(nn))
137:
138:
139: def readIndexFile(self,url=None):
140: """reads the indexfile. presently url not None isn't implemented. In the future url can be defined."""
141: pagelist=[]
142: if not url:
143: url=self.absolute_url()+"/index.xml"
144:
145: fh=urllib.urlopen(url)
146: dom=xml.dom.minidom.parse(fh)
147:
148:
149: for page in dom.getElementsByTagName('page'):
150: text=getText(page.childNodes)
151: pageNum=page.getAttribute('nr')
152: pagelist.append((pageNum,text))
153:
154: return pagelist
155:
156: def createIndexFile(self,RESPONSE=None):
157: """create index file"""
158:
159:
160: pt=PageTemplateFile('Products/ECHO_content/vlp/index_template.zpt').__of__(self)()
161:
162:
163:
164: if not hasattr(self,'index.xml'):
165: zt=ZopePageTemplate('index.xml')
166: self._setObject('index.xml',zt)
167: else:
168: zt=getattr(self,'index.xml')
169:
170:
171: zt.pt_edit(pt, 'text/xml')
172:
173: if RESPONSE is not None:
174: RESPONSE.redirect('manage_main')
175:
176:
177: def manage_addVLP_resourceForm(self):
178: """Form for adding a ressource"""
179: pt=PageTemplateFile('Products/ECHO_content/vlp/AddVLP_resourceForm.zpt').__of__(self)
180: return pt()
181:
182:
183:
184: 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):
185: """addaresource"""
186:
187:
188: newObj=VLP_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,responsible,credits,weight,coords)
189:
190: self._setObject(id,newObj)
191:
192: if RESPONSE is not None:
193: RESPONSE.redirect('manage_main')
194:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>