Annotation of ECHO_content/ECHO_collection.py, revision 1.272
1.13 dwinter 1: """New version of the product started February, 8th. Without scientific classification, use content-type for further classification."""
1.1 casties 2: """Echo collection provides the classes for the ECHO content web-site.
3:
4: class ECHO_collection is the basis class for an ECHO collection.
5:
6: class ECHO_resource contains information on ECHO resources (e.g. an Display environment for Metadata
7:
8: class ECHO_externalLink contains information on externalLinks
9:
10:
11: """
1.194 dwinter 12: try:
1.236 dwinter 13: from reportlab.pdfgen import canvas
14: from reportlab.lib.pagesizes import A4
1.194 dwinter 15: except:
1.236 dwinter 16: print "PDF generation will not work"
1.238 dwinter 17:
1.258 dwinter 18: import urlparse
1.1 casties 19: import string
1.192 dwinter 20: import tempfile
1.14 dwinter 21: import re
1.29 dwinter 22: import os
1.1 casties 23: import OFS.Image
24: from types import *
1.154 dwinter 25: from OFS.Cache import Cacheable
1.1 casties 26: from OFS.Image import Image
27: from Globals import DTMLFile
28: from OFS.Folder import Folder
29: from OFS.SimpleItem import SimpleItem
30: from AccessControl import ClassSecurityInfo
1.85 dwinter 31: from AccessControl.User import UserFolder
1.1 casties 32: from Globals import InitializeClass
33: from Globals import DTMLFile
1.84 dwinter 34: import Globals
1.1 casties 35: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
36: from Products.PageTemplates.PageTemplate import PageTemplate
1.268 dwinter 37: from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate,manage_addPageTemplate
1.29 dwinter 38: from Globals import Persistent, package_home
1.1 casties 39: from Acquisition import Implicit
1.236 dwinter 40: from Products.ZCatalog.CatalogPathAwareness import CatalogAware
1.267 dwinter 41: from Products.ZCTextIndex.ZCTextIndex import manage_addLexicon
1.189 dwinter 42:
1.141 dwinter 43: import urllib
1.225 dwinter 44: import cgi
1.177 dwinter 45: import smtplib
1.153 dwinter 46: import time
1.173 dwinter 47: from Ft.Xml.Domlette import NonvalidatingReader
1.236 dwinter 48: from Ft.Xml.Domlette import PrettyPrint, Print
1.173 dwinter 49: from Ft.Xml import EMPTY_NAMESPACE
50:
51: import Ft.Xml.XPath
52: import cStringIO
1.179 dwinter 53: import zLOG
1.258 dwinter 54: import sys
1.84 dwinter 55:
1.50 dwinter 56: try:
1.236 dwinter 57: from psycopg import libpq
1.50 dwinter 58: except:
1.236 dwinter 59: try:
60: from pyPgSQL import libpq
61: except:
62: print "ECHO_collection: Warning - No libpq imported!"
63:
1.14 dwinter 64: import xml.dom.minidom
1.1 casties 65:
66: import urllib
67: import xml.dom.minidom
1.41 dwinter 68: import ECHO_helpers
1.189 dwinter 69: from ECHO_helpers import *
70: from ECHO_language import *
1.217 dwinter 71: from ECHO_movie import *
1.239 dwinter 72: import vlp_xmlhelpers #TODO: vlp elemente aus echo herausnehmen
1.258 dwinter 73: import xmlrpclib
1.236 dwinter 74:
1.1 casties 75:
1.202 casties 76: def setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight,coordstrs=""):
1.1 casties 77:
78: """Allegemeine Informationen zu einer ECHO Collection"""
79:
80: self.label = label
81: self.title=title
82: self.description=description
1.27 dwinter 83: self.contentType=contentType
1.1 casties 84: self.responsible=responsible
85: self.credits=toList(credits)
86: self.weight=weight
87:
1.256 dwinter 88: class ECHO_partner(Image,Persistent,ECHO_basis):
89: """ECHO Partner"""
90:
91: meta_type="ECHO_partner"
92:
93: def __init__(self, id, title,url, file, copyrightType, person, email, country, color, content_type='', precondition=''):
94: self.__name__=id
95: self.title=title
96: self.url=url
97: self.person=person
98: self.email=email
99: self.country=country
100: self.color=color
101: self.precondition=precondition
102: self.copyrightType=copyrightType
103: data, size = self._read_data(file)
104: content_type=self._get_content_type(file, data, id, content_type)
105: self.update_data(data, content_type, size)
106:
107: manage_options = Image.manage_options+(
108: {'label':'Partner Information','action':'ECHO_partner_config'},
109: )
110:
111:
112: def changeECHO_partner(self,url,copyrightType,person, email, country, color, RESPONSE=None):
113: """Change main information"""
114: self.url=url
115: self.person=person
116: self.email=email
117: self.country=country
118: self.color=color
119: self.copyrightType=copyrightType
120: if RESPONSE is not None:
121: RESPONSE.redirect('manage_main')
122:
123:
124:
125: def ECHO_partner_config(self):
126: """Main configuration"""
127: if not hasattr(self,'url'):
128: self.url=""
129: pt=zptFile(self, 'zpt/ChangeECHO_partner.zpt')
130: return pt()
131:
132:
133: manage_addECHO_partnerForm=DTMLFile('dtml/ECHO_partnerAdd',globals(),
134: Kind='ECHO_partner',kind='ECHO_partner')
135:
136:
137:
138: def manage_addECHO_partner(self, id, url, person, email, country, color, file=None, copyrightType='', title='', precondition='', content_type='',
139: REQUEST=None):
140: """
141: Add a new ECHO_partner object.
142:
143: Creates a new ECHO_partner object 'id' with the contents of 'file'.
144: Based on Image.manage_addImage
145: """
146:
147: id=str(id)
148: title=str(title)
149: content_type=str(content_type)
150: precondition=str(precondition)
151:
152: id, title = OFS.Image.cookId(id, title, file)
153:
154: self=self.this()
155:
156: # First, we create the image without data:
157: self._setObject(id, ECHO_partner(id,title,url,'',copyrightType, person, email, country, color, content_type, precondition))
158:
159: # Now we "upload" the data. By doing this in two steps, we
160: # can use a database trick to make the upload more efficient.
161: if file:
162: self._getOb(id).manage_upload(file)
163: if content_type:
164: self._getOb(id).content_type=content_type
165:
166: if REQUEST is not None:
167: try: url=self.DestinationURL()
168: except: url=REQUEST['URL1']
169: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
170: return id
171:
1.228 dwinter 172: class ECHO_locale(ZopePageTemplate):
1.236 dwinter 173: """localisierung"""
1.228 dwinter 174:
1.236 dwinter 175: meta_type="ECHO_locale"
1.228 dwinter 176:
1.236 dwinter 177: def __init__(self,id,lang,title,label,text=None,content_type=None):
178: self.lang=lang
179: self.title=title
180: self.label=label
181: if text:
182: self.pt_edit(text, content_type)
183: self.id=id
184:
185: manage_options = ZopePageTemplate.manage_options+(
186: {'label':'Main Config','action':'change_ECHO_localeForm'},
187: )
188:
189: def change_ECHO_localeForm(self):
190: """change form"""
191: pt=zptFile(self, 'zpt/ChangeECHO_localeForm.zpt')
192: return pt()
193:
194: def change_ECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None):
195: """change echo locale"""
196: self.lang=lang
197: self.title=title
198: self.label=label
199: if not text is None:
200: self.pt_edit(text, content_type)
1.228 dwinter 201:
1.236 dwinter 202: if RESPONSE is not None:
203: RESPONSE.redirect('manage_main')
1.228 dwinter 204:
1.236 dwinter 205:
1.228 dwinter 206: def manage_addECHO_localeForm(self):
1.236 dwinter 207: """Form for adding"""
208: pt=zptFile(self, 'zpt/AddECHO_localeForm.zpt')
209: return pt()
1.228 dwinter 210:
211: def manage_addECHO_locale(self,lang,title,label,text=None,content_type=None,RESPONSE=None):
1.236 dwinter 212: """add echo locale"""
1.228 dwinter 213:
1.236 dwinter 214: id="locale_"+lang
215:
216: self._setObject(id, ECHO_locale(id,lang,title,label,text,content_type))
217: if RESPONSE is not None:
218: RESPONSE.redirect('manage_main')
1.228 dwinter 219:
220:
1.189 dwinter 221: class ECHO_copyright(Folder,ECHO_basis):
1.236 dwinter 222: """Copyright informationen"""
223: meta_type="ECHO_copyright"
224:
225:
226:
227: def __init__(self,id,title,copyrights):
228: """init"""
229: self.title=title
230: self.id=id
231: self.copyrights=copyrights[0:]
1.1 casties 232:
1.236 dwinter 233: def getCopyrights(self):
234: """return coyprights"""
235: return self.copyrights
236:
237: manage_options = Folder.manage_options+(
238: {'label':'Main Config','action':'ECHO_copyright_configForm'},
239: )
240:
241:
242: def ECHO_copyright_configForm(self):
243: """change form"""
244: pt=zptFile(self, 'zpt/ChangeECHO_copyright')
245: pt.content_type="text/html"
246: return pt()
247:
248: def ECHO_copyright_config(self,title,RESPONSE=None):
249: """change"""
250: self.title=title
251: self.copyrights=[]
252: self.copyrights=getCopyrightsFromForm(self,self.REQUEST.form)[0:]
1.98 dwinter 253:
1.236 dwinter 254: if RESPONSE is not None:
255: RESPONSE.redirect('manage_main')
256:
257:
1.98 dwinter 258: def manage_addECHO_copyrightForm(self):
259: """Form for adding"""
1.195 casties 260: pt=zptFile(self, 'zpt/AddECHO_copyright.zpt')
1.98 dwinter 261: return pt()
1.1 casties 262:
1.98 dwinter 263: def manage_addECHO_copyright(self, id,title,RESPONSE=None):
1.236 dwinter 264: """add the copyright"""
265:
266: meta_type="ECHO_copyright"
267:
268: #first generate copyrights as list of tripels (mediaType,partner,copyrightType)
269:
270:
1.1 casties 271:
1.236 dwinter 272: self._setObject(id, ECHO_copyright(id, title,getCopyrightsFromForm(self,self.REQUEST.form)))
273:
274: if RESPONSE is not None:
275: RESPONSE.redirect('manage_main')
276:
1.189 dwinter 277: class ECHO_layoutTemplate(ZopePageTemplate,ECHO_basis):
1.29 dwinter 278: """Create a layout Template for different purposes"""
279:
280: meta_type="ECHO_layoutTemplate"
281:
282: def __init__(self, id, text=None, content_type=None,EchoType=None):
283: self.id = str(id)
284:
285: self.ZBindings_edit(self._default_bindings)
286: if text is None:
1.212 dwinter 287: self._default_content_fn = os.path.join(package_home(globals()),'zpt','ECHO_%s_template_standard.zpt'%EchoType)
1.29 dwinter 288: text = open(self._default_content_fn).read()
289: self.pt_edit(text, content_type)
290:
291:
292: def manage_addECHO_layoutTemplateForm(self):
293: """Form for adding"""
1.195 casties 294: pt=zptFile(self, 'zpt/AddECHO_layoutTemplate.zpt')
1.29 dwinter 295: return pt()
296:
297:
298: def manage_addECHO_layoutTemplate(self, EchoType,title=None,REQUEST=None):
299: "Add a Page Template with optional file content."
300: if type(EchoType)==StringType:
301: EchoTypes=[EchoType]
302: else:
303: EchoTypes=EchoType
304:
305: for singleType in EchoTypes:
1.32 dwinter 306:
1.29 dwinter 307: id = str(singleType)+"_template"
308: if REQUEST is None:
309: self._setObject(id, ECHO_layoutTemplate(id, text,EchoType=singleType))
310: ob = getattr(self, id)
311:
312: if title:
313: ob.pt_setTitle(title)
314: return ob
315: else:
316: file = REQUEST.form.get('file')
317: headers = getattr(file, 'headers', None)
318: if headers is None or not file.filename:
319: zpt = ECHO_layoutTemplate(id,EchoType=singleType)
320: else:
321: zpt = ECHO_layoutTemplate(id, file, headers.get('content_type'))
322:
323: self._setObject(id, zpt)
324: ob = getattr(self, id)
325: if title:
326: ob.pt_setTitle(title)
327:
328: try:
329: u = self.DestinationURL()
330: except AttributeError:
331: u = REQUEST['URL1']
332:
333:
334: REQUEST.RESPONSE.redirect(u+'/manage_main')
335: return ''
1.1 casties 336:
1.190 dwinter 337: class ECHO_fullText(ZopePageTemplate,ECHO_basis,ECHO_language):
1.236 dwinter 338: """echo fulltext in xml"""
1.163 dwinter 339:
1.236 dwinter 340: meta_type="ECHO_fullText"
1.163 dwinter 341:
1.236 dwinter 342:
343: def getPage(self,nr='1'):
344: """get page n"""
345: #return self().encode('latin-1','ignore')
1.265 dwinter 346: dom=xml.dom.minidom.parseString(self())
1.236 dwinter 347: pages=dom.getElementsByTagName('page')
348:
349: return pages[int(nr)-1].toxml()
350:
1.163 dwinter 351: # Product registration and Add support
352: manage_addECHO_fullTextForm = PageTemplateFile(
353: 'zpt/AddECHO_fullText.zpt', globals())
354:
355: def manage_addECHO_fullText(self, id, title=None, text=None,
356: REQUEST=None, submit=None):
357: "Add a Page Template with optional file content."
358:
359: id = str(id)
360: if REQUEST is None:
361: self._setObject(id, ECHO_fullText(id, text))
362: ob = getattr(self, id)
363: if title:
364: ob.pt_setTitle(title)
365: return ob
366: else:
367: file = REQUEST.form.get('file')
368: headers = getattr(file, 'headers', None)
369: if headers is None or not file.filename:
370: zpt = ECHO_fullText(id)
371: else:
372: zpt = ECHO_fullText(id, file, headers.get('content_type'))
373:
374: self._setObject(id, zpt)
375:
376: try:
377: u = self.DestinationURL()
378: except AttributeError:
379: u = REQUEST['URL1']
380:
381: if submit == " Add and Edit ":
1.195 casties 382: u = "%s/%s" % (u, urllib.quote(id))
1.163 dwinter 383: REQUEST.RESPONSE.redirect(u+'/manage_main')
384: return ''
1.142 dwinter 385:
1.192 dwinter 386:
1.236 dwinter 387: class ECHO_resource(CatalogAware,Folder,Persistent,ECHO_basis):
1.1 casties 388: """ECHO Ressource"""
1.123 dwinter 389: security=ClassSecurityInfo()
1.1 casties 390: meta_type='ECHO_resource'
1.236 dwinter 391: default_catalog='resourceCatalog'
392:
393: # viewClassificationList=viewClassificationListMaster
1.1 casties 394:
1.236 dwinter 395: def PrincipiaSearchSource(self):
396: """Return cataloguable key for ourselves."""
397: return str(self)
1.1 casties 398:
1.41 dwinter 399: getSubCols = ECHO_helpers.getSubCols
1.98 dwinter 400:
1.236 dwinter 401: def reindex(self):
402: """generate fields for indexing and reindex"""
1.258 dwinter 403:
1.236 dwinter 404: #TODO: korrigieren des metalink pfades konfigurierbar machen
405: splitted= [x for x in urlparse.urlparse(self.metalink)]
406: splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:]
407:
408: if splitted[0]=="http":
409: self.metalink=urlparse.urlunparse(splitted)
410:
411:
412: self.fullTextUrl=self.getFullTextXML(noredirect="yes")
413:
414: #TODO: korrigieren relative url to absoluter url volltexten, konfigurierbar?
415: splitted= [x for x in urlparse.urlparse(self.fullTextUrl)]
416: if splitted[0]=="":
417: splitted[0]="http"
418: splitted[1]="foxridge.mpiwg-berlin.mpg.de"[0:]
419:
420: self.fullTextUrl=urlparse.urlunparse(splitted)
421:
422: self.imagePath=self.getImagePath()
423:
424: self.reindex_object()
425:
1.192 dwinter 426:
427: security.declareProtected('View','createPDF')
428: def createPDF(self,RESPONSE=None,local=None,dpi=150):
1.236 dwinter 429: """erzeuge pdf file"""
430: pages=1
431: dpi=float(dpi)
432: imagePath=self.getImagePath().replace("/mpiwg/online","")
433:
434:
435: image="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/servlet/Scaler?fn="+imagePath+"&dw=%i&dh=%i&pn=%i"
436: xmlInfo="http://nausikaa2.mpiwg-berlin.mpg.de/digitallibrary/dlInfo-xml.jsp?fn="+imagePath
437:
438: dom=xml.dom.minidom.parse(urllib.urlopen(xmlInfo))
439: for parameter in dom.getElementsByTagName('parameter'):
440: if parameter.getAttribute('name')=="pt":
441: pages=int(parameter.getAttribute('value'))
442: break
443:
444:
445: tempdir="/tmp/archivesImageServer"
446: if not os.path.exists(tempdir):
447: os.mkdir(tempdir)
1.193 dwinter 448:
1.236 dwinter 449: tmpPath=tempfile.mkdtemp(dir=tempdir)
450:
1.192 dwinter 451:
1.236 dwinter 452: tmpZip=tempfile.mktemp(dir=tempdir)
1.193 dwinter 453:
1.236 dwinter 454: tmpFn=os.path.split(tmpZip)[1]
1.192 dwinter 455:
456:
1.194 dwinter 457:
1.192 dwinter 458:
1.236 dwinter 459: if RESPONSE:
460: RESPONSE.setHeader("Content-Type","text/html")
461: RESPONSE.write("<h1>I am creating the pdf</h1>")
462: txt="<h3>1. step: getting the images( %i pages)</h3>"%pages
463: RESPONSE.write(txt)
1.192 dwinter 464:
1.236 dwinter 465: c=canvas.Canvas(tmpZip)
466: for i in range(1,pages+1):
467: if RESPONSE:
468: RESPONSE.write(str("<p>Get Page: %i<br>\n"%i))
469: faktor=dpi/72.0
470:
471: fn=tmpPath+"/%i"%i
1.192 dwinter 472:
1.236 dwinter 473: width,height=A4
474: #print image%(width*faktor,height*faktor,i)
475: url=urllib.urlopen(image%(width*faktor,height*faktor,i)).read()
476: fh=file(fn,"w")
477: fh.write(url)
478: fh.close()
1.192 dwinter 479:
480:
481:
1.236 dwinter 482: c.drawImage(fn,0,0,width=width,height=height)
483: c.showPage()
484: c.save()
485: if RESPONSE:
486: RESPONSE.write("<p>finished<br>\n")
487:
488: if RESPONSE:
489: len=os.stat(tmpZip)[6]
490: downloadUrl=self.absolute_url()+"/downloadPDF"
491: RESPONSE.write("""<h1><a href="downloadPDF?fn=%s">Click here for download ( %i Byte)</a></h1>\n"""%(tmpFn,len))
492: RESPONSE.write("""<p>The file will be stored for a while, you can download it later, the URL is:</p>
493: <p><a href="downloadPDF?fn=%s">%s?fn=%s</a></h1>\n"""%(tmpFn,downloadUrl,tmpFn))
494: RESPONSE.close()
1.192 dwinter 495:
496:
497: def downloadPDF(self,fn):
1.236 dwinter 498: """download prepared set"""
499: filename="/tmp/archivesImageServer/"+fn
500: namePDF=self.getId()+".pdf"
501: self.REQUEST.RESPONSE.setHeader("Content-Disposition","""attachement; filename="%s" """%namePDF)
502: self.REQUEST.RESPONSE.setHeader("Content-Type","application/octet-stream")
503: len=os.stat(filename)[6]
504: self.REQUEST.RESPONSE.setHeader("Content-Length",len)
505: images=file(filename).read()
506: self.REQUEST.RESPONSE.write(images)
507: self.REQUEST.RESPONSE.close()
1.192 dwinter 508:
509:
1.143 dwinter 510: def getRDF(self,urn=None):
1.236 dwinter 511: """rdf"""
512: ret=getRDFDescription(self,self.link,urn=urn)
513: return ret+self.createSubElementRDF(urn=urn)
1.146 dwinter 514:
1.190 dwinter 515:
1.258 dwinter 516: def changeAccessRightForm(self,preselect=None):
517: """change the access rights"""
518:
519: pt=zptFile(self, 'zpt/ChangeECHO_resourceAccessRight.zpt')
520: return pt(preselect=preselect)
521:
522: def changeAccessRight(self):
523: """changeRights"""
524: argv=self.REQUEST.form
525: self.setAccessRightXML(argv["%s_xml"%self.getId()])
526: self.accessRight=argv["%s_echo"%self.getId()]
527:
528: self.REQUEST.RESPONSE.redirect('manage_main')
529:
530:
531: def getAccessRightSelectorHTML(self,outlook="select",xmldominant=None,preselect=None):
532: """htmlselector, xmldominant= in der regel wird der wert des xmlfiles ausgegeben ausser er existiert nicht"""
533: values=['','free','MPIWG']
1.236 dwinter 534:
1.258 dwinter 535: if preselect:#set all to the preselected
536: ar=(preselect,preselect)
537: else:#else set to actual value
538: ar=self.getAccessRightMD()
539:
1.236 dwinter 540: if outlook=="select":
1.258 dwinter 541: ret="""<select name="%s_xml">"""%self.getId()
542: ret1="""<select name="%s_echo">"""%self.getId()
1.236 dwinter 543: for value in values:
1.258 dwinter 544: if value==ar[0]:
1.236 dwinter 545: ret+="<option selected>%s</option>"%value
546: else:
547: ret+="<option>%s</option>"%value
1.258 dwinter 548:
549: if value==ar[1]:
550: ret1+="<option selected>%s</option>"%value
551: else:
552: ret1+="<option>%s</option>"%value
553:
554:
555: if not xmldominant:
556: return ret+"</select>",ret1+"</select>"
557: else:
558: if ar[0] is not None:
559: return ret+"</select>"
560: else:
561: return "<p>No xml file (only local selection):"+ret1
1.236 dwinter 562:
563: else:
564: ret=""
1.258 dwinter 565: ret1=""
1.236 dwinter 566: for value in values:
567:
1.258 dwinter 568: if value==ar[0]:
569: ret+="""<input type="radio" name="%s_xml" value="%s" checked>%s"""%(self.getId(),value,value)
1.236 dwinter 570: else:
1.258 dwinter 571: ret+="""<input type="radio" name="%s_xml" value="%s">%s"""%(self.getId(),value,value)
572:
573: if value==ar[1]:
574: ret1+="""<input type="radio" name="%s_echo" value="%s" checked>%s"""%(self.getId(),value,value)
575: else:
576: ret1+="""<input type="radio" name="%s_echo" value="%s">%s"""%(self.getId(),value,value)
577:
578: if not xmldominant:
579: return ret,ret1
580: else:
581: if ar[0]:
582: return ret
583: else:
584: return "<p>No xml file (only local selection)</p>"+ret1
585:
1.132 dwinter 586:
587:
1.258 dwinter 588: def copyAccessRightsFromMD(self):
589: """kopiere rechte aus den metadaten"""
590: self.accessRight=self.getAccessRightMD()[0]
591:
592:
593:
594:
1.132 dwinter 595:
596: def getAccessRightMD(self):
1.236 dwinter 597: """set accessright"""
598: url=self.metalink
599:
600: try:
1.258 dwinter 601: urllib.urlopen(url)
1.236 dwinter 602: except:
1.258 dwinter 603: zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
1.236 dwinter 604:
1.258 dwinter 605: return None,getattr(self,'accessRight','')
606:
607:
1.236 dwinter 608: try:
1.258 dwinter 609: dom = NonvalidatingReader.parseUri(url)
1.236 dwinter 610: except:
1.258 dwinter 611: zLOG.LOG("ECHO_Resource (getAccessRightMD)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
612: return (None,"Cannot parse: "+url+"<br>"+"%s (%s)"%sys.exc_info()[0:2])
1.132 dwinter 613:
614:
1.258 dwinter 615: accessright=dom.xpath("//meta/access-conditions/access/@type")
616: if accessright:
617: accessright=accessright[0].value
618: if str(accessright)=='institution':
619: tmp=dom.xpath("//meta/access-conditions/access/name")
620: if tmp:
621: accessright=getTextFromNode(tmp[0])
622:
623: if not accessright:
624: accessright=""
625:
626: return accessright,getattr(self,'accessRight','')
1.132 dwinter 627:
628: def changeAccessRightMD(self,accessright,RESPONSE=None):
1.258 dwinter 629: """change the rights - not user anymore"""
630: #TODO: check if method still needed
1.236 dwinter 631: params="accessright=%s"%accessright
1.132 dwinter 632:
633:
1.236 dwinter 634: #print ECHO_helpers.urlopen(self.absolute_url()+'/setAccessRightXML'+'?'+params).read()
1.132 dwinter 635:
1.236 dwinter 636:
1.258 dwinter 637: ECHO_helpers.urlopen('http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/setAccessRightXML'+urllib.quote('?'+params))).read()
1.132 dwinter 638:
1.236 dwinter 639:
640: if RESPONSE is not None:
641: RESPONSE.redirect('manage_main')
1.132 dwinter 642:
1.236 dwinter 643:
1.132 dwinter 644: def setAccessRightXML(self,accessright):
1.236 dwinter 645: """set accessright"""
646: url=self.metalink
1.258 dwinter 647: accessrights=['MPIWG','free']#allowes rights
648:
649: if accessright =='':
650: """do nothing"""
651: return ""
652:
653:
1.236 dwinter 654: try:
655: geturl=""
656: for line in ECHO_helpers.urlopen(url).readlines():
657: geturl=geturl+line
658:
659:
660: except:
661: return (None,"Cannot open: "+url)
662:
663: try:
664: dom=xml.dom.minidom.parseString(geturl)
665: root=dom.getElementsByTagName('resource')[0]
666: except:
667: return (None,"Cannot parse: "+url+"<br>"+geturl)
668:
1.258 dwinter 669: metamains=dom.getElementsByTagName('meta')
670:
671: if not metamains:
672: nodenew=dom.createElement('meta')
673: root.appendChild(nodenew)
674: metamain=nodenew
675: else:
676: metamain=metamains[0]
677:
678:
679: metanodes=metamain.getElementsByTagName('access-conditions')
1.132 dwinter 680:
1.236 dwinter 681: if not metanodes:
682: nodenew=dom.createElement('access-conditions')
1.258 dwinter 683: metamain.appendChild(nodenew)
1.236 dwinter 684: metanode=nodenew
685: else:
686: metanode=metanodes[0]
687:
688: accesses=metanode.getElementsByTagName('access')
689:
1.258 dwinter 690: #delete old
691: if accesses:
692: metanode.removeChild(accesses[0]).unlink()
1.236 dwinter 693:
1.258 dwinter 694: #create new
695:
696: nodenew2=dom.createElement('access')
697: metanode.appendChild(nodenew2)
698: metanode2=nodenew2
699:
700: attribute=metanode2.getAttribute('type')
701:
702: if accessright=="free":
703:
704: metanode2.setAttribute('type','free')
1.236 dwinter 705:
1.258 dwinter 706: elif accessright.upper()=='MPIWG':
707: metanode2.setAttribute('type','institution')
708: nodenew4=dom.createElement('name')
709: metanodetext=dom.createTextNode('MPIWG')
1.236 dwinter 710: nodenew4.appendChild(metanodetext)
1.258 dwinter 711: nodenew2.appendChild(nodenew4)
712: #print dom.toxml().encode('utf-8')
713: string= encodeRPC(dom.toxml().encode('utf-8'))
714:
715: #TODO: make server configurable
716: server=xmlrpclib.Server("http://foxridge.mpiwg-berlin.mpg.de/server")
1.132 dwinter 717:
1.258 dwinter 718: path=urlparse.urlparse(self.metalink)[2]
719:
720: server.writeMetaDataFile(path,string,"yes")
721:
1.125 dwinter 722: def setStartPageForm(self):
1.236 dwinter 723: """Form for changing the startpage"""
1.125 dwinter 724:
1.236 dwinter 725:
726: pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPage.zpt')
1.125 dwinter 727: pt.content_type="text/html"
728: return pt()
729:
1.182 dwinter 730:
731: def createImageUrl(self,pn=1):
1.236 dwinter 732: """create ImageUrl"""
1.184 dwinter 733:
1.236 dwinter 734:
735: resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
736:
737: digiliburlprefix=readFieldFromXML(self.metalink,'texttool','digiliburlprefix')
738: images=readFieldFromXML(self.metalink,'texttool','image')
1.184 dwinter 739:
740:
1.236 dwinter 741: if (not resourcepath) or (not digiliburlprefix) or (not images):
742: zLOG.LOG("ECHO (createImageUrl)",zLOG.ERROR,"Cannot create ImageUrl for %s"%self.absolute_url())
743: return None
744: resourcepath=resourcepath.replace('/mpiwg/online','')
745: if not digiliburlprefix: digiliburlprefix="http://echo.mpiwg-berlin.mpg.de/zogilib?"
1.182 dwinter 746:
1.236 dwinter 747: if (not images) or (not resourcepath): return None
1.182 dwinter 748:
1.236 dwinter 749: return "%sfn=%s&pn=%i"%(digiliburlprefix,resourcepath+"/"+images,pn)
1.182 dwinter 750:
1.183 dwinter 751: def copyTitleToInfoXML(self,RESPONSE=None):
1.236 dwinter 752: """copy title from the resource"""
753: presentationXML=readFieldFromXML(self.metalink,'texttool','presentation')
754: resourcepath=readFieldFromXML(self.metalink,'resource','archive-path')
755: if (not presentationXML) or (not resourcepath):
756: if RESPONSE:
757: RESPONSE.write("Error: %s\n"%self.getId())
758: else:
759: return None,self.absolute_url()
760:
761: try:
762: fh=file(os.path.join(resourcepath,presentationXML),'w')
763: fh.write("""<info>
764: <author></author>
765: <title>%s</title>
766: <date></date>
767: <display>yes</display>
768: </info>"""%self.title)
769: fh.close()
770: return 1,self.getId()
771: except:
772: if RESPONSE:
773: RESPONSE.write("Error: %s\n"%self.getId())
774: else:
775: return None,self.absolute_url()
1.183 dwinter 776:
1.236 dwinter 777:
1.124 dwinter 778: def setStartPage(self,startpage=None,RESPONSE=None):
1.236 dwinter 779: """set start page, if no startpage defined use the generic one of the resource"""
1.124 dwinter 780:
1.236 dwinter 781: if (not (type(startpage)==StringType)):
782: if ("__generic" in startpage): # checke ob generic in der liste
783: startpage=self.absolute_url()+"/startpage_html"
784: elif ("__firstPage" in startpage): # checke ob generic in der liste
785: startpage=self.createImageUrl()
786:
787: if (not startpage):
788: startpage=self.absolute_url()+"/startpage_html"
789: elif (startpage=="__generic"):
790: startpage=self.absolute_url()+"/startpage_html"
791: elif (startpage=="__firstPage"):
792: startpage=self.createImageUrl()
793:
794: params="startpage=%s"%startpage
795: #print 'http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))
796:
797: ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read()
798:
799:
800: path=self.metalink
801:
802: path=re.sub(self.REQUEST['SERVER_URL'],'',path)
803: path=re.sub('http://'+self.REQUEST['HTTP_HOST'],'',path)
804:
805: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de:8080','',path) # falls foxridge als server
806: path=re.sub('http://foxridge.mpiwg-berlin.mpg.de','',path) # falls foxridge als server
807: path=re.sub('http://foxridge.rz-berlin.mpg.de:8080','',path) # falls foxridge als server
1.156 dwinter 808: path=re.sub('http://content.mpiwg-berlin.mpg.de','',path) # falls content als server
1.236 dwinter 809: path=re.sub('http://foxridge.rz-berlin.mpg.de','',path) # falls foxridge als server
810: path=re.sub('http://vision.mpiwg-berlin.mpg.de','',path) # falls vision als server
811: path=re.sub('http://xserve02.mpiwg-berlin.mpg.de:18880','',path) # falls vision als server
812: path=re.sub('http://echo.mpiwg-berlin.mpg.de','',path) # falls echo
813: path=re.sub('/index.meta','',path)
1.124 dwinter 814:
815:
1.236 dwinter 816: ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
1.124 dwinter 817:
1.236 dwinter 818: if RESPONSE is not None:
819: RESPONSE.redirect('manage_main')
1.124 dwinter 820:
1.123 dwinter 821: def changeViewerTemplateSetForm(self):
1.236 dwinter 822: """change the viewer template set"""
823: pt=zptFile(self, 'zpt/changeResourceViewerTemplateSet')
1.123 dwinter 824: return pt()
825:
826:
1.271 casties 827: def setLink(self, link=None):
828: """change link field"""
1.269 casties 829: if link is not None:
1.271 casties 830: self.link = link
1.269 casties 831:
1.182 dwinter 832:
1.123 dwinter 833: def getTextToolsField(self,name,default=''):
834: """Lese Textoolsfelder aus index.meta im path aus"""
835:
836: try:
837: dom=xml.dom.minidom.parse(self.metalink)
838: node=dom.getElementsByTagName('texttool')[0] #getNode
839: subnode=node.getElementsByTagName(name)[0]
840:
841: # bei text wird nur der Folder gebraucht
842: if name=="text":
843: splitted=getText(subnode.childNodes).split("/")
844: return splitted[len(splitted)-2]
845: else:
846: return getText(subnode.childNodes)
847: except:
848: return default
849:
850:
1.154 dwinter 851: def changeViewerTemplateSet(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
1.236 dwinter 852: """changeit"""
1.123 dwinter 853:
1.236 dwinter 854: paramList=['project','startpage','xslt','thumbtemplate','topbar','digiLibTemplate','digiliburlprefix']
1.123 dwinter 855:
1.236 dwinter 856:
857: #writeMetadata(self.metalink,self.metaDataHash,project,None,xslt,thumbtemplate,topbar,digiLibTemplate)
1.123 dwinter 858:
1.236 dwinter 859: params="project=%s&xslt=%s&thumbtemplate=%s&topbar=%s&digiLibTemplate=%s&digiliburlprefix=%s"%(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
1.124 dwinter 860:
1.262 dwinter 861: try:
862: ECHO_helpers.urlopen('http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params))).read()
863: except:
864: zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2])
865: zLOG.LOG("ECHO_ressource (changeViewerTemplateSet)", zLOG.ERROR,'http://echo.mpiwg-berlin.mpg.de/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML'+urllib.quote('?'+params)))
1.236 dwinter 866: #print self.absolute_url()+'/newMetaXML'+urllib.quote'?'+params)
867: # hack Pfad auf die Dokumente
868: path=self.metalink
869:
870:
1.123 dwinter 871:
1.236 dwinter 872: path=re.sub('/index.meta','',path)
1.123 dwinter 873:
1.263 dwinter 874: #TODO: direct access to the file system necessary, fix that also xmlrpc to the server where the index file is stored is possible
875: parsedUrl=urlparse.urlparse(path)
876: path=parsedUrl[2]
877:
878: try:
879: return ECHO_helpers.urlopen("http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path).readlines()
880: except:
881: zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
882: zLOG.LOG("ECHO_Resource (changeViewerTemplateSet)", zLOG.INFO,"http://nausikaa2.rz-berlin.mpg.de:86/cgi-bin/toc/admin/reg.cgi?path=%s"%path)
1.123 dwinter 883:
1.236 dwinter 884: if RESPONSE is not None:
885: RESPONSE.redirect('manage_main')
1.123 dwinter 886:
1.98 dwinter 887:
1.189 dwinter 888:
1.236 dwinter 889: security.declarePublic('content_html')
1.29 dwinter 890: def content_html(self):
891: """template fuer content"""
1.189 dwinter 892: return ECHO_basis.content_html(self,'resource')
1.29 dwinter 893:
1.202 casties 894: # def getViewClassification(self):
895: # if hasattr(self,'viewClassification'):
896: # return self.viewClassification
897: # else:
898: # return ""
1.83 dwinter 899:
900: def getFullTextXML(self,noredirect=None):
1.236 dwinter 901: """getFullTextXML; gives the FullText as an XML Document, and <error></error> if somthing goes wrong."""
1.180 dwinter 902:
1.236 dwinter 903: try:
904: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"open %s"%self.metalink)
905: fh=ECHO_helpers.urlopen(self.metalink)
906: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"opened %s"%self.metalink)
907: dom=xml.dom.minidom.parse(fh)
908: texttools=dom.getElementsByTagName('texttool')
909: text=texttools[0].getElementsByTagName('text')
910: texturl=getText(text[0].childNodes)
1.180 dwinter 911:
1.236 dwinter 912: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"found %s"%texturl)
1.179 dwinter 913: fh.close()
1.236 dwinter 914: #zLOG.LOG("ECHO Fulltext",zLOG.INFO,"closed fh")
915: #keine url
916: if not (texturl.split(":")[0] in ['http','ftp','file']):
917: if not noredirect:
918: return file(texturl).read()
1.181 dwinter 919: else:
1.236 dwinter 920: return texturl
1.180 dwinter 921:
1.236 dwinter 922: if not noredirect:
923: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
924: zLOG.LOG("ECHO Fulltext",zLOG.INFO,"redirect to:%s"%texturl)
925: self.REQUEST.RESPONSE.redirect(texturl)
926: else:
927: return texturl
928: except:
929:
930: if not noredirect:
931: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
932: self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
933: else:
934: return "<error>no fulltext available</error>"
1.92 dwinter 935:
1.192 dwinter 936: def getImagePath(self):
1.236 dwinter 937: """gibt pfad zum image aus"""
938: return self.getImageView(noredirect="yes",onlyPath="yes")
1.192 dwinter 939:
940: def getImageView(self,noredirect=None,onlyPath=None):
1.236 dwinter 941: """getImages; give Imageviewr and <error></error> if somthing goes wrong."""
942: try:
943: fh=ECHO_helpers.urlopen(self.metalink)
944: dom=xml.dom.minidom.parse(fh)
945: texttools=dom.getElementsByTagName('texttool')
946: text=texttools[0].getElementsByTagName('image')
947: imagetemp=getText(text[0].childNodes)
948:
949: text=dom.getElementsByTagName('archive-path')
950: archivepath=getText(text[0].childNodes)
951: archivepath=re.sub('/mpiwg/online/','',archivepath)
952: imageurl="http://echo.mpiwg-berlin.mpg.de/zogilib?fn="+archivepath+"/"+imagetemp
953: fh.close()
954:
955: if not noredirect:
956: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
957: self.REQUEST.RESPONSE.redirect(imageurl)
958: else:
959: if not onlyPath:
960: return imageurl
961: else:
962: return archivepath+"/"+imagetemp
963: except:
964:
965: if not noredirect:
966: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
967: self.REQUEST.RESPONSE.write("<error>no fulltext available</error>")
968: else:
969: return "<error>no images available</error>"
1.147 dwinter 970:
971:
1.104 dwinter 972: def getCopyrightsHTML(self):
1.236 dwinter 973: """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
974:
975: if hasattr(self,'copyrightModel'):
976: obj=self.copyrightModel
977:
978: else:
979: return "ERROR"
980: ret=[]
981:
982: for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID
983:
984:
985: try:
986: if hasattr(self.copyrightTypes,copyright[2]):
987: copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
988: link="copyrightTypes/"+copyright[2]+'/copyright.html'
989: else:
990: copyrightTypeObj=getattr(obj,copyright[2])
991: link="copyrightModel/"+copyright[2]+'/copyright.html'
992:
993: label=copyrightTypeObj.label
994: url=getattr(copyrightTypeObj, 'url', '')
995:
996: if url!='':
997: ret.append((url,copyright[0],copyright[1],copyright[2],label))
998: else:
999: if hasattr(copyrightTypeObj, 'copyright.html'):
1000: ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
1001: else:
1002: ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
1003: except:
1004: """nothing"""
1005:
1006: return ret
1007:
1.157 jdamerow 1008: def getInstitutionsHTML(self):
1.236 dwinter 1009: """gibt Liste der foerdernden Institutionen aus"""
1010:
1011: if hasattr(self,'support'):
1012: obj=self.support
1013: ret=obj.getSupporter()
1014: return ret
1015: else:
1016: return ''
1017:
1.272 ! dwinter 1018: def getOwnerOriginalsHTML(self):
! 1019: """gibt Liste der foerdernden Institutionen aus"""
! 1020:
! 1021: if hasattr(self,'ownerOriginal'):
! 1022: obj=self.ownerOriginal
! 1023: ret=obj.getOwner()
! 1024: return ret
! 1025: else:
! 1026: return ''
! 1027:
! 1028: def getDigiCopyByHTML(self):
! 1029: """gibt Liste der foerdernden Institutionen aus"""
! 1030:
! 1031: if hasattr(self,'digiCopyBy'):
! 1032: obj=self.digiCopyBy
! 1033: ret=obj.getDigiCopyBy()
! 1034: return ret
! 1035: else:
! 1036: return ''
1.83 dwinter 1037:
1.9 dwinter 1038: def getCredits(self):
1039: """Ausgabe der credits"""
1040: if self.credits:
1041: return self.credits
1042: else:
1043: return []
1.195 casties 1044:
1045:
1.6 dwinter 1046:
1.94 dwinter 1047: def __init__(self,id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords):
1.1 casties 1048:
1049: self.id = id
1050: """Festlegen der ID"""
1051:
1052: self.label = label
1053: self.link= link
1054: self.metalink=metalink
1055: self.title=title
1056: self.weight=weight
1057: self.credits=toList(credits)
1058: self.description=description
1.27 dwinter 1059: self.contentType=contentType
1.236 dwinter 1060: self.copyrightType=copyrightType
1061: self.renderingType=renderingType
1.1 casties 1062: self.responsible=responsible
1.90 dwinter 1063: self.resourceID=resourceID
1.236 dwinter 1064:
1.9 dwinter 1065: if coords:
1066: coordsnew=[ string.split(x,",") for x in coords]
1067: else:
1068: coordsnew=[]
1069:
1.1 casties 1070: self.coords=coordsnew
1.236 dwinter 1071: # self.viewClassification=""
1.1 casties 1072:
1.3 dwinter 1073:
1074:
1.49 dwinter 1075: def getContentType(self):
1.236 dwinter 1076: try:
1077: return self.contentType
1078: except:
1079: return ""
1.1 casties 1080:
1.73 dwinter 1081: def getCopyrightType(self):
1.236 dwinter 1082: try:
1083: return self.copyrightType
1084: except:
1085: return ""
1.73 dwinter 1086:
1087: def getRenderingType(self):
1.236 dwinter 1088: try:
1089: return self.renderingType
1090: except:
1091: return ""
1.73 dwinter 1092:
1.1 casties 1093: def ECHO_resource_config(self):
1094: """Main configuration"""
1095:
1096: if not hasattr(self,'weight'):
1097: self.weight=""
1098:
1.195 casties 1099: pt=zptFile(self, 'zpt/ChangeECHO_resource.zpt')
1.1 casties 1100: return pt()
1101:
1102:
1.73 dwinter 1103: def ECHO_resource_config_main(self):
1104: """Main configuration"""
1105: if not hasattr(self,'weight'):
1106: self.weight=""
1.195 casties 1107: pt=zptFile(self, 'zpt/ChangeECHO_resource_main.zpt')
1.73 dwinter 1108: return pt()
1109:
1110: def ECHO_resource_config_coords(self):
1111: """Coords configuration """
1.195 casties 1112: pt=zptFile(self, 'zpt/ChangeECHO_resource_coords.zpt')
1.73 dwinter 1113: return pt()
1114:
1115: def ECHO_resource_config_credits(self):
1116: """Main configuration"""
1.195 casties 1117: pt=zptFile(self, 'zpt/ChangeECHO_resource_credits.zpt')
1.73 dwinter 1118: return pt()
1119:
1120: def ECHO_resource_config_metadata(self):
1121: """Main configuration"""
1.236 dwinter 1122: if (hasattr(self,'metadata')) and not (hasattr(self,'metaDataHash')):
1123: self.metaDataHash={}
1124: self.contentType=self.bib_type
1125: for data in self.metadata:
1126: data_neu=re.sub('-','_',data)
1.243 dwinter 1127: self.metaDataHash[data_neu]=getattr(self,data)[0:]
1.91 dwinter 1128:
1.236 dwinter 1129:
1.195 casties 1130: pt=zptFile(self, 'zpt/ChangeECHO_resource_metadata.zpt')
1.73 dwinter 1131: return pt()
1132:
1133:
1134:
1135:
1136: def changeECHO_resource_main(self,metalink,link,title,label,description,contentType,renderingType,weight,resourceID,RESPONSE=None):
1.195 casties 1137: """Aenderung der Properties"""
1.236 dwinter 1138: self.resourceID=resourceID
1139: self.title=title
1140: self.label=label
1141: self.description=description
1142:
1143: self.contentType=contentType
1144: self.renderingType=renderingType
1145: self.weight=weight
1146:
1.73 dwinter 1147: self.link=link
1148: self.metalink=metalink
1149:
1150: if RESPONSE is not None:
1151: RESPONSE.redirect('manage_main')
1152:
1153:
1.195 casties 1154: def changeECHO_resource_coords(self,RESPONSE=None):
1155: """Aenderung der Properties - coords"""
1.236 dwinter 1156: #return self.REQUEST
1157: for area in self.getMapAreas():
1158: id = area.getId()
1159: if self.REQUEST.has_key('del.'+id):
1160: # delete this area
1161: self._delObject(id)
1162: # return to same menu
1163: if RESPONSE is not None:
1164: RESPONSE.redirect('ECHO_resource_config_coords')
1165: return
1166: # modify this area
1167: coordstring = self.REQUEST.get('coords.'+id, '')
1168: coords = string.split(coordstring, ',')
1169: angle = self.REQUEST.get('angle.'+id, '0')
1170: type = self.REQUEST.get('type.'+id, 'area')
1171: if len(coords) == 4:
1172: area.setCoordString(coordstring)
1173: area.setAngle(angle)
1174: area.setType(type)
1175: # return to main menu
1176: if RESPONSE is not None:
1177: RESPONSE.redirect('manage_main')
1.73 dwinter 1178:
1179:
1180: def changeECHO_resource_credits(self,credits,responsible,copyrightType,RESPONSE=None):
1.195 casties 1181: """Aenderung der Properties"""
1.236 dwinter 1182: self.credits=credits
1183: self.responsible=responsible
1184: self.copyrightType=copyrightType
1.73 dwinter 1185:
1186: if RESPONSE is not None:
1187: RESPONSE.redirect('manage_main')
1188:
1189:
1.90 dwinter 1190: def changeECHO_resource_metadata_local(self,RESPONSE=None):
1.236 dwinter 1191: """change metadata"""
1192: tags=self.findTagsFromMapping(self.contentType)
1193: for field in tags[1]:
1194: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)][0:]
1195:
1196:
1197:
1198: if RESPONSE is not None:
1199: RESPONSE.redirect('manage_main')
1.90 dwinter 1200:
1.73 dwinter 1201: def changeECHO_resource_metadata(self,RESPONSE=None):
1.236 dwinter 1202: """change metadata"""
1203: tags=self.findTagsFromMapping(self.contentType)
1204: self.OSAS_meta={}
1205: for field in tags[1]:
1206: try:
1207: self.metaDataHash[self.getFieldTag(tags,field)]=self.REQUEST.form[self.getFieldTag(tags,field)]
1208: self.OSAS_meta[self.getFieldTag(tags,field)]=self.REQUEST.form['OSAS_%s'%self.getFieldTag(tags,field)]
1209: except:
1.260 dwinter 1210: zLOG.LOG("ECHO_collection (changeECHO_resource_metadata)",zLOG.ERROR,"%s (%s)"%sys.exc_info()[0:2])
1.73 dwinter 1211:
1.261 dwinter 1212: print self.newMetaXML()
1.236 dwinter 1213: ECHO_helpers.urlopen('http://xserve02.mpiwg-berlin.mpg.de:18880/echo_nav/storage/downloadExternalXML?index_meta_url=%s&xml_url=%s'%(self.metalink,self.absolute_url()+'/newMetaXML')).read()
1.123 dwinter 1214:
1215:
1.236 dwinter 1216: if RESPONSE is not None:
1217: RESPONSE.redirect('manage_main')
1.73 dwinter 1218:
1.248 dwinter 1219:
1220:
1.255 dwinter 1221: def getMDValueSimpleSearchField(self):
1222: """returns value for simple search"""
1.260 dwinter 1223:
1224: try:
1225: return " ".join([self.getMDValue('title',generic="yes"),
1.255 dwinter 1226: self.getMDValue('author',generic="yes"),
1.260 dwinter 1227: self.getMDValue('year',generic="yes"),self.getTitle()])
1228: except:
1229:
1230: #zLOG.LOG(" ECHO_collection(getMDSimpleSearchField)",zLOG.INFO," ".join([self.getMDValue('title',generic="yes"),
1231: # self.getMDValue('author',generic="yes"),
1232: # self.getMDValue('year',generic="yes"),'']))
1233: return ""
1.255 dwinter 1234:
1.249 dwinter 1235: def getMDValue(self,fieldNameTest,empty=None,generic=None):
1.245 dwinter 1236: """get md values"""
1237: #TODO: cache mappinghash
1.260 dwinter 1238:
1.249 dwinter 1239: fieldName=None
1.245 dwinter 1240: if generic:
1.255 dwinter 1241: if self.contentType:
1242: ct=self.contentType.replace(" ","_").lower()
1243: else:
1244: zLOG.LOG("ECHO_collection (getMDValue)", zLOG.INFO, "no_content type for %s"%self.getId())
1245: ct=""
1246:
1.245 dwinter 1247: #caching
1248: if not hasattr(self,'_v_mapHash'): #noch keine cachevariable
1249: self._v_mapHash={}
1250:
1251: tmp=self._v_mapHash.get(ct,None)
1252: if tmp: #teste ob type schon existiert
1253: fieldName=tmp.get(fieldNameTest,None)
1254: else:
1255: self._v_mapHash[ct]={}
1256:
1257: #noch nicht gecached
1258: if not fieldName and hasattr(self.standardMD,ct):
1259: fieldName=getattr(self.standardMD,ct).generateMappingHash()[fieldNameTest][0]
1260: self._v_mapHash[ct][fieldNameTest]=fieldName
1.250 dwinter 1261: if not fieldName:
1262: fieldName=fieldNameTest
1.236 dwinter 1263: if not empty:
1.249 dwinter 1264: #FIXME: warum gibt es manchmal kein metadatahas
1.247 dwinter 1265: try:
1.260 dwinter 1266:
1267: ret =self.metaDataHash.get(fieldName,'!!NOT USED HERE in Type: %s'%self.contentType)
1.247 dwinter 1268: except:
1269: zLOG.LOG("ECHO (line 1069)",zLOG.ERROR,"no md hash for %s"%self.getId())
1270: return ""
1.249 dwinter 1271:
1.236 dwinter 1272: else:
1.261 dwinter 1273:
1.260 dwinter 1274:
1275: ret= self.metaDataHash.get(fieldNameTest,empty)
1276:
1277: if type(ret) is StringType:
1278: return ret.decode('utf-8')
1279: else:
1280: return ret
1.261 dwinter 1281:
1.248 dwinter 1282: getFieldValue=getMDValue #depricated
1.249 dwinter 1283:
1.154 dwinter 1284: def newMetaXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None,digiliburlprefix=None):
1.236 dwinter 1285: """new index.meta"""
1286: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1.73 dwinter 1287:
1.236 dwinter 1288: if not hasattr(self,'metaDataHash'):
1289:
1290: self.copyIndex_meta2echo_resource()
1291: try:
1.272 ! dwinter 1292:
! 1293:
1.236 dwinter 1294: return writeMetadata(self.metalink,self.OSAS_meta,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
1295: except:
1.272 ! dwinter 1296: #print self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix
! 1297:
1.236 dwinter 1298: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix=digiliburlprefix)
1.90 dwinter 1299:
1.149 dwinter 1300: def showMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.236 dwinter 1301: """return bibliographical metadata as stored in the object"""
1302:
1303: try:
1304:
1305: return writeMetadata(self.metalink,self.metaDataHash,project,startpage,xslt,thumbtemplate,topbar,digiLibTemplate,xmlfrag="yes")
1306: except:
1307: return "<error> no metadata stored</error>"
1308:
1309: def getXQueryMetaData(self,xquery):
1310: '''
1311: execute an xquery on the metadata and returns a list of tuples,
1312: each tuple represent the content of the node as text and the whole node as xml-fragment
1313: @param xquery: xquery auf den metadaten
1314: '''
1315:
1316: try:
1317: md=writeMetadata(self.metalink,self.metaDataHash,xmlfrag="yes")
1318: except:
1319: return None
1320:
1321: dom = NonvalidatingReader.parseString(md,"http://www.mpiwg-berlin.mpg.de/")
1322:
1323: results=Ft.Xml.XPath.Evaluate(xquery, contextNode=dom)
1324:
1325: ret=[]
1326: for result in results:
1327:
1328: buf = cStringIO.StringIO()
1329: PrettyPrint(result, stream=buf)
1330: str = buf.getvalue()[0:]
1331: buf.close()
1332: ret.append((getTextFromNode(result),str))
1333:
1334: return ret
1335:
1.123 dwinter 1336: def getMetaDataXML(self,project=None,startpage=None,xslt=None,thumbtemplate=None,topbar=None,digiLibTemplate=None):
1.236 dwinter 1337: """prints out metadata as stored in the echo environment, format is the index.meta format"""
1338: self.REQUEST.RESPONSE.setHeader('Content-Type','text/xml')
1339: return writeMetadata(self.metalink,self.metaDataHash)
1.90 dwinter 1340:
1.202 casties 1341: def changeECHO_resource(self,metalink,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.195 casties 1342: """Aenderung der Properties"""
1.1 casties 1343:
1.198 casties 1344: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
1.1 casties 1345: self.link=link
1346: self.metalink=metalink
1347:
1348: if RESPONSE is not None:
1349: RESPONSE.redirect('manage_main')
1350:
1351:
1352: manage_options = Folder.manage_options+(
1.73 dwinter 1353: {'label':'Main Config','action':'ECHO_resource_config_main'},
1.236 dwinter 1354: {'label':'Change Metadata','action':'ECHO_resource_config_metadata'},
1355: {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
1.73 dwinter 1356: {'label':'Sync Metadata','action':'ECHO_getResourceMD'},
1.236 dwinter 1357: {'label':'Change TemplateSets and Image Viewer','action':'changeViewerTemplateSetForm'},
1358: {'label':'set/change startpage','action':'setStartPageForm'},
1359: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
1.258 dwinter 1360: {'label':'Change AccessRights','action':'changeAccessRightForm'},
1.236 dwinter 1361: )
1.1 casties 1362:
1.73 dwinter 1363:
1364: def isDefinedInThisSet(self,fields,field):
1.236 dwinter 1365: """checks if field is defined in fields"""
1366: if (fields[0].has_key(field)) and not (fields[0][field]==""):
1367: return 1
1368: else:
1369:
1370: return 0
1371:
1.73 dwinter 1372: def getFieldLabel(self,fields,field):
1373: """get labels"""
1374: try:
1375: ret =fields[0][field]
1376: if ret == "":
1377: return field
1378: else:
1379: return ret
1380: except:
1381: return field
1382:
1383:
1384:
1385: def getFieldTag(self,fields,field):
1386: """get labels"""
1387: try:
1388: ret =fields[0][field]
1389: if ret == "":
1390: return field
1391: else:
1392: return ret
1393: except:
1394: return field
1395:
1396:
1397:
1.90 dwinter 1398: def getMetaDataHash(self):
1.236 dwinter 1399: """md hash"""
1400: return self.metaDataHash
1.90 dwinter 1401:
1402: def setFieldValue(self,field,value):
1403: """get value"""
1.245 dwinter 1404: #TODO: remove setFieldValue
1.236 dwinter 1405:
1406: if not hasattr(self,'metaDataHash'):
1407: setattr(self,'metaDataHash',{})
1408: self.metaDataHash[field]=value[0:]
1.90 dwinter 1409:
1.130 dwinter 1410: def copySearchFields(self):
1.236 dwinter 1411: """copys metadatafields to the object"""
1412: fields=['author','title','year']
1.245 dwinter 1413:
1.236 dwinter 1414: for field in fields:
1.245 dwinter 1415: setattr(self,'MD_'+field,self.getMDValue(field,generic="yes"))
1.130 dwinter 1416:
1.90 dwinter 1417:
1.73 dwinter 1418: def findLabelsFromMapping(self,referenceType):
1419: """gib hash mit label -> generic zurueck"""
1.236 dwinter 1420: #return {},[]
1.90 dwinter 1421:
1422: temp=self.ZopeFind(self.standardMD)
1423:
1.236 dwinter 1424: if referenceType=="":
1425: referenceType="book"
1426:
1427:
1.73 dwinter 1428: bibdata={}
1429: retdata={}
1.236 dwinter 1430: fields=[]
1.73 dwinter 1431: fieldlist=self.standardMD.fieldList
1.204 dwinter 1432:
1433: tags=self.findTagsFromMapping(self.contentType)
1.236 dwinter 1434: self.referencetypes=tags[2]
1435: for referenceTypeF in self.referencetypes:
1.91 dwinter 1436:
1.236 dwinter 1437: if referenceTypeF[1].title.lower() == referenceType.lower():
1.91 dwinter 1438:
1.236 dwinter 1439: try:
1440: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
1441: referenceType=referenceTypeF[1].title
1442: except:
1443: bibdata[referenceType]=referenceTypeF[1].fields
1444:
1.86 dwinter 1445:
1.236 dwinter 1446: bibdata['data']=referenceTypeF[1]
1447: fields=bibdata[referenceType]
1.73 dwinter 1448: for field in fieldlist:
1449: retdata[field]=referenceTypeF[1].getValue(field)[1]
1.91 dwinter 1450:
1.90 dwinter 1451: return retdata,fieldlist,temp,fields
1.73 dwinter 1452:
1453: def findTagsFromMapping(self,referenceType):
1454: """gib hash mit label -> generic zurueck"""
1.236 dwinter 1455:
1.90 dwinter 1456:
1.236 dwinter 1457: if referenceType=="":
1458: referenceType="book"
1459:
1460: temp = self.ZopeFind(self.standardMD)[0:]
1.90 dwinter 1461:
1.236 dwinter 1462:
1463: #self.referencetypes=temp[0:]
1464:
1465:
1.245 dwinter 1466:
1.90 dwinter 1467:
1.73 dwinter 1468: bibdata={}
1469: retdata={}
1470: fieldlist=self.standardMD.fieldList
1.130 dwinter 1471: fields=[]
1.236 dwinter 1472: for referenceTypeF in temp:
1473: #print referenceType
1474:
1475: if referenceTypeF[1].title.lower() == referenceType.lower():
1476: try:
1477: bibdata[referenceTypeF[1].title]=referenceTypeF[1].fields
1478: referenceType=referenceTypeF[1].title
1479: except:
1480: bibdata[referenceType]=referenceTypeF[1].fields
1481: bibdata['data']=referenceTypeF[1]
1482: fields=bibdata[referenceType]
1.73 dwinter 1483: for field in fieldlist:
1484: retdata[field]=referenceTypeF[1].getValue(field)[0]
1.236 dwinter 1485:
1.90 dwinter 1486: return retdata,fieldlist,temp,fields
1.73 dwinter 1487:
1488:
1.123 dwinter 1489: security.declarePublic('copyIndex_meta2echo_resource') # has to be change, presentlyset because of OSAS koordination
1.90 dwinter 1490: def copyIndex_meta2echo_resource(self,RESPONSE=None):
1.236 dwinter 1491: """copy MD von Index_meta to the echo_resource"""
1492:
1493: (metadict, error)=readMetadata(self.metalink)
1494:
1495:
1496:
1497: self.metaDataHash={}
1498: if not error=="": #Fehler beim Auslesen des Metafiles
1499:
1500: return "ERROR:",error,self.absolute_url()
1501:
1502: self.contentType=metadict['bib_type'][0:]
1503: fields=self.findTagsFromMapping(self.contentType)
1504:
1505: #fields=self.findLabelsFromMapping(self.contentType)
1506: for field in fields[1]:
1507:
1508: if self.isDefinedInThisSet(fields,field):
1509: #print urllib.unquote(metadict.get(self.getFieldTag(fields,field),''))
1510: self.setFieldValue(self.getFieldTag(fields,field),metadict.get(self.getFieldTag(fields,field),''))
1511:
1512:
1513:
1514: if RESPONSE:
1515: return RESPONSE.redirect('manage_main')
1516:
1.248 dwinter 1517: return "OK:",self.absolute_url(),self.contentType
1.245 dwinter 1518:
1.250 dwinter 1519: def ECHO_getResourceMD(self,template="yes",back=None,overwrite="no"):
1.1 casties 1520: """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
1521: (metadict, error)=readMetadata(self.metalink)
1.260 dwinter 1522:
1.133 dwinter 1523: if back:
1524: self.REQUEST.SESSION['back']=back
1.1 casties 1525:
1526: if not error=="": #Fehler beim Auslesen des Metafiles
1.236 dwinter 1527: return "ERROR:",error
1.249 dwinter 1528:
1.250 dwinter 1529: if (not self.contentType) or (overwrite=="yes"):
1.249 dwinter 1530: self.contentType=metadict['bib_type'].lower()
1531:
1.236 dwinter 1532: if not (metadict['bib_type'].lower()==self.contentType.lower()):
1533: self.REQUEST.SESSION['contentStorage']=metadict['bib_type']
1534: self.REQUEST.SESSION['contentZope']=self.contentType
1535:
1536: return zptFile(self, 'zpt/ECHO_getResourceMDErrorContentType.zpt')()
1537:
1.260 dwinter 1538: #self.REQUEST.SESSION['metadict']=metadict
1.236 dwinter 1539:
1540:
1541:
1.261 dwinter 1542:
1.260 dwinter 1543: self.REQUEST.SESSION['diffs']=checkDiffs(self,metadict)
1.13 dwinter 1544:
1.261 dwinter 1545:
1.1 casties 1546: if template=="yes":
1.260 dwinter 1547: #pt=PageTemplateFile(os.path.join(package_home(globals()), 'zpt/ECHO_resourceMD.zpt'),metadict=metadict).__of__(self)
1.236 dwinter 1548: pt=zptFile(self, 'zpt/ECHO_resourceMD.zpt')
1.260 dwinter 1549:
1550: return pt(metadict=metadict)
1.73 dwinter 1551:
1.236 dwinter 1552:
1.73 dwinter 1553:
1554:
1.1 casties 1555:
1556: def ECHO_getMD(self,item):
1557: """Ausgabe der MD"""
1558: return getattr(self,item)
1.191 dwinter 1559:
1560: def checkRDF(self,path):
1.236 dwinter 1561: """check if pdf in the path"""
1562: try:
1563: for fileName in os.listdir(path):
1564: if os.path.splitext(fileName)[1]==".pdf":
1565: return os.path.join(path,fileName)
1566: return None
1567: except:
1568: return None
1569:
1570:
1.224 casties 1571: security.declareProtected('View','index_html')
1.1 casties 1572: def index_html(self):
1573: """standard page"""
1.191 dwinter 1574: pdf=self.checkRDF(self.link)
1.236 dwinter 1575: if pdf:
1576: fh=file(pdf,'r').read()
1577: self.REQUEST.RESPONSE.setHeader('Content-Type','application/pdf')
1578: self.REQUEST.RESPONSE.write(fh)
1579: self.REQUEST.RESPONSE.close()
1580: return
1.1 casties 1581: return self.REQUEST.RESPONSE.redirect(self.link)
1582:
1.90 dwinter 1583: def startpage_html(self):
1.236 dwinter 1584: """prints out a startpage for a resource for use e.g. in the BVE"""
1.90 dwinter 1585:
1.236 dwinter 1586: # suche ob startpage.html in dem Ordner vorhanden ist, dann wir diese angezeigt
1.90 dwinter 1587:
1.236 dwinter 1588: sp=self.ZopeFind(self,obj_ids=['startpage.html'])
1.90 dwinter 1589:
1.236 dwinter 1590: if sp:
1591: return sp[1]()
1.90 dwinter 1592:
1.195 casties 1593: #pruefen ob irgendwo ein template
1.236 dwinter 1594: if hasattr(self,'startpage_index_template'):
1595: return self.startpage_index_template()
1.90 dwinter 1596:
1.236 dwinter 1597: #generisches template ausgeben
1598:
1599: pt=zptFile(self, 'zpt/ECHO_startpage_index_template_standard.zpt')
1600: pt.content_type="text/html"
1601: return pt()
1.90 dwinter 1602:
1603: def toc_html(self):
1.236 dwinter 1604:
1605: sp=self.ZopeFind(self,obj_ids=['toc.html'])
1606:
1607: if sp:
1608: return sp[0][1]()
1.90 dwinter 1609:
1610:
1.123 dwinter 1611: security.declarePublic('generate_label') # has to be change, presentlyset because of OSAS koordination
1.133 dwinter 1612:
1.1 casties 1613: def generate_label(self):
1614: """Erzeugt_standard_Label aus Template"""
1.123 dwinter 1615: pt=getattr(self,"label_template_"+self.contentType.lower())
1.13 dwinter 1616:
1.236 dwinter 1617: self.label=pt()[0:]
1.1 casties 1618: return pt()
1619:
1.123 dwinter 1620: security.declarePublic('generate_title') # has to be change, presentlyset because of OSAS koordination
1.133 dwinter 1621:
1.90 dwinter 1622: def generate_title(self,RESPONSE=None):
1623: """Erzeugt_standard_Label aus Template"""
1.123 dwinter 1624: pt=getattr(self,"label_template_"+self.contentType.lower())
1.90 dwinter 1625:
1.236 dwinter 1626: self.title=pt()[0:]
1627:
1.90 dwinter 1628: return pt()
1629:
1.123 dwinter 1630: Globals.InitializeClass(ECHO_resource)
1631:
1.13 dwinter 1632: def manage_addECHO_resourceForm(self):
1633: """Form for adding a ressource"""
1.195 casties 1634: pt=zptFile(self, 'zpt/AddECHO_resourceForm.zpt')
1.1 casties 1635: return pt()
1636:
1637:
1.10 dwinter 1638:
1.207 dwinter 1639: def manage_addECHO_resource(self,id,title,label,description="",responsible="",link="",metalink="",weight="",copyrightType=None,resourceID=None,contentType=None,renderingType=None,credits=None,coords=None,RESPONSE=None):
1.224 casties 1640: """addresource"""
1.1 casties 1641:
1.94 dwinter 1642: newObj=ECHO_resource(id,link,metalink,resourceID,title,label,description,contentType,renderingType,copyrightType,responsible,credits,weight,coords)
1.1 casties 1643:
1644: self._setObject(id,newObj)
1.13 dwinter 1645:
1.1 casties 1646: if RESPONSE is not None:
1647: RESPONSE.redirect('manage_main')
1648:
1649:
1.189 dwinter 1650: class ECHO_externalLink(Folder,ECHO_basis):
1.1 casties 1651: """Link zu einer externen Ressource"""
1652: security=ClassSecurityInfo()
1653: meta_type='ECHO_externalLink'
1654:
1.210 dwinter 1655: security.declarePublic('content_html')
1.29 dwinter 1656: def content_html(self):
1657: """template fuer content"""
1.251 dwinter 1658: ret= ECHO_basis.content_html(self,'externalLink')
1659:
1.260 dwinter 1660: if type(ret) is StringType:
1661: return ret.decode('utf-8')
1662: else:
1663: return ret
1.252 dwinter 1664:
1.251 dwinter 1665:
1.29 dwinter 1666:
1.27 dwinter 1667: def __init__(self,id,link,title,label,description,contentType,responsible,credits,weight,coords):
1.1 casties 1668:
1669: self.id = id
1670: """Festlegen der ID"""
1671:
1672: self.credits=toList(credits)
1673: self.label = label
1674: self.link= link
1675: self.title=title
1676: self.weight=weight
1677: self.description=description
1.27 dwinter 1678: self.contentType=contentType
1.1 casties 1679: self.responsible=responsible
1680: coordsnew=[ string.split(x,",") for x in coords]
1681: self.coords=coordsnew
1682:
1683: def ECHO_externalLink_config(self):
1684: """Main configuration"""
1685:
1686: if not hasattr(self,'weight'):
1687: self.weight=""
1688: if not hasattr(self,'coords'):
1.9 dwinter 1689:
1.1 casties 1690: self.coords=['']
1.91 dwinter 1691:
1.1 casties 1692:
1.195 casties 1693: pt=zptFile(self, 'zpt/ChangeECHO_externalLink.zpt')
1.1 casties 1694: return pt()
1695:
1696:
1.37 dwinter 1697: def changeECHO_externalLink(self,link,title,label,description,contentType,responsible,weight,coords=None,credits=None,RESPONSE=None):
1.195 casties 1698: """Aenderung der Properties"""
1.198 casties 1699: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
1.1 casties 1700:
1701: self.link=link
1702: if RESPONSE is not None:
1703: RESPONSE.redirect('manage_main')
1704:
1705:
1706: manage_options = Folder.manage_options+(
1707: {'label':'Main Config','action':'ECHO_externalLink_config'},
1.236 dwinter 1708: {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
1.1 casties 1709: )
1.17 dwinter 1710:
1711:
1.1 casties 1712: def index_html(self):
1713: """standard page"""
1714:
1715: return self.REQUEST.RESPONSE.redirect(self.link)
1716:
1.13 dwinter 1717: def manage_addECHO_externalLinkForm(self):
1718: """Form for external Links"""
1.195 casties 1719: pt=zptFile(self, 'zpt/AddECHO_externalLinkForm.zpt')
1.1 casties 1720: return pt()
1721:
1722:
1.27 dwinter 1723: def manage_addECHO_externalLink(self,id,title,label,description,contentType,responsible,link,weight,coords=None,credits=None,RESPONSE=None):
1.13 dwinter 1724: """Add an external Link"""
1.1 casties 1725:
1.27 dwinter 1726: newObj=ECHO_externalLink(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1.1 casties 1727:
1728: self._setObject(id,newObj)
1.13 dwinter 1729:
1.1 casties 1730: if RESPONSE is not None:
1731: RESPONSE.redirect('manage_main')
1732:
1.24 dwinter 1733:
1.51 dwinter 1734: class ECHO_link(ECHO_externalLink):
1.236 dwinter 1735: """external_link"""
1736:
1737: meta_type="ECHO_link"
1.251 dwinter 1738:
1739: manage_options = ECHO_externalLink.manage_options+(
1.242 dwinter 1740: {'label':'add links config','action':'ECHO_link_addLinksForm'},
1741: )
1.236 dwinter 1742:
1.241 dwinter 1743: def ECHO_link_addLinksForm(self):
1744: """Main configuration"""
1.236 dwinter 1745:
1.241 dwinter 1746: pt=zptFile(self, 'zpt/ChangeECHO_link_addLinks.zpt')
1747: return pt()
1748:
1749: def ECHO_link_addLinks(self,addLinks,RESPONSE):
1750: """add links"""
1.242 dwinter 1751: self.addLinks=addLinks
1.241 dwinter 1752: if RESPONSE is not None:
1753: RESPONSE.redirect('manage_main')
1754:
1.236 dwinter 1755: def content_html(self):
1756: """template fuer link"""
1.251 dwinter 1757:
1758:
1.236 dwinter 1759: if hasattr(self,"link_template"):
1.240 dwinter 1760: ret=ECHO_basis.content_html(self,'link')
1.251 dwinter 1761:
1.236 dwinter 1762: else:
1.240 dwinter 1763: ret=ECHO_basis.content_html(self,'collection')
1.51 dwinter 1764:
1.251 dwinter 1765:
1766: #return ret
1767: return ret
1768: #
1769: #
1770: # try:
1771: # return ret.decode('utf-8')
1772: # except:
1773: # try:
1774: # return ret.decode('latin-1')
1775: # except:
1776: #
1777: # return ret
1778: #
1.272 ! dwinter 1779: def getCopyrightsHTML(self):
! 1780: """gib (link auf copyright link, mediatyp, institution, copyrightType, label von copyrightType) aus"""
! 1781:
! 1782: if hasattr(self,'copyrightModel'):
! 1783: obj=self.copyrightModel
! 1784:
! 1785: else:
! 1786: return "ERROR"
! 1787: ret=[]
! 1788:
! 1789: for copyright in obj.getCopyrights(): #copyright - media / partner / copyrightID
! 1790:
! 1791:
! 1792: try:
! 1793: if hasattr(self.copyrightTypes,copyright[2]):
! 1794: copyrightTypeObj=getattr(self.copyrightTypes,copyright[2])
! 1795: link="copyrightTypes/"+copyright[2]+'/copyright.html'
! 1796: else:
! 1797: copyrightTypeObj=getattr(obj,copyright[2])
! 1798: link="copyrightModel/"+copyright[2]+'/copyright.html'
! 1799:
! 1800: label=copyrightTypeObj.label
! 1801: url=getattr(copyrightTypeObj, 'url', '')
! 1802:
! 1803: if url!='':
! 1804: ret.append((url,copyright[0],copyright[1],copyright[2],label))
! 1805: else:
! 1806: if hasattr(copyrightTypeObj, 'copyright.html'):
! 1807: ret.append(("""%s?partner=%s"""%(link,copyright[1]),copyright[0],copyright[1],copyright[2],label))
! 1808: else:
! 1809: ret.append(('empty',copyright[0],copyright[1],copyright[2],label))
! 1810: except:
! 1811: """nothing"""
! 1812:
! 1813: return ret
! 1814:
! 1815: def getInstitutionsHTML(self):
! 1816: """gibt Liste der foerdernden Institutionen aus"""
! 1817:
! 1818: if hasattr(self,'support'):
! 1819: obj=self.support
! 1820: ret=obj.getSupporter()
! 1821: return ret
! 1822: else:
! 1823: return ''
! 1824:
! 1825: def getOwnerOriginalsHTML(self):
! 1826: """gibt Liste der foerdernden Institutionen aus"""
! 1827:
! 1828: if hasattr(self,'ownerOriginal'):
! 1829: obj=self.ownerOriginal
! 1830: ret=obj.getOwner()
! 1831: return ret
! 1832: else:
! 1833: return ''
! 1834:
! 1835: def getDigiCopyByHTML(self):
! 1836: """gibt Liste der foerdernden Institutionen aus"""
! 1837:
! 1838: if hasattr(self,'digiCopyBy'):
! 1839: obj=self.digiCopyBy
! 1840: ret=obj.getDigiCopyBy()
! 1841: return ret
! 1842: else:
! 1843: return ''
1.240 dwinter 1844:
1.236 dwinter 1845: def index_html(self):
1846: """standard link"""
1847: if self.link:
1848: splitted=self.link.split("?")
1849: if len(splitted)>1:
1850: params=cgi.parse_qs(splitted[1])
1851:
1852: for x in params.keys():
1853: if type(params[x]) is ListType:
1854: params[x]=params[x][0]
1.210 dwinter 1855:
1.236 dwinter 1856:
1857: else:
1858: params={}
1859:
1.241 dwinter 1860: if getattr(self,'addLinks','yes')=="yes":
1861: params['backLink']=self.aq_parent.absolute_url()
1862: params['startLink']=splitted[0]+"?"+urllib.urlencode(params)
1.236 dwinter 1863:
1864:
1865: return self.REQUEST.RESPONSE.redirect(splitted[0]+"?"+urllib.urlencode(params))
1866: else:
1867: return ""
1.225 dwinter 1868:
1.51 dwinter 1869: def manage_addECHO_linkForm(self):
1870: """Form for external Links"""
1.195 casties 1871: pt=zptFile(self, 'zpt/AddECHO_linkForm.zpt')
1.51 dwinter 1872: return pt()
1873:
1874:
1.216 dwinter 1875: def manage_addECHO_link(self,id,title,label,description="",contentType="",responsible="",link="",weight="",coords=[],credits=None,RESPONSE=None):
1.51 dwinter 1876: """Add an external Link"""
1877:
1878: newObj=ECHO_link(id,link,title,label,description,contentType,responsible,credits,weight,coords)
1879:
1880: self._setObject(id,newObj)
1.241 dwinter 1881:
1882: getattr(self,id).addLinks='no'
1883:
1.51 dwinter 1884: if RESPONSE is not None:
1885: RESPONSE.redirect('manage_main')
1.236 dwinter 1886:
1.24 dwinter 1887:
1.256 dwinter 1888: class ECHO_collection(CatalogAware, Folder, Persistent, Implicit, Cacheable,ECHO_basis):
1.1 casties 1889: """ECHO Collection"""
1.84 dwinter 1890:
1.260 dwinter 1891: management_page_charset="utf-8"
1.1 casties 1892: security=ClassSecurityInfo()
1893: meta_type='ECHO_collection'
1.256 dwinter 1894: default_catalog='resourceCatalog'
1895:
1.202 casties 1896: # viewClassificationList=viewClassificationListMaster
1.69 dwinter 1897: displayTypes=displayTypes
1898:
1.130 dwinter 1899: path="/mpiwg/online/permanent/shipbuilding"
1.132 dwinter 1900:
1.256 dwinter 1901: def getMDValueSimpleSearchField(self):
1902: """returns value for simple search"""
1903: return " ".join([self.title,self.description])
1904:
1.238 dwinter 1905: def getTitleAndLabel(self):
1906: """gibt title und label zurueck"""
1907: return (getattr(self,'title',''),getattr(self,'label',''))
1908:
1.228 dwinter 1909: def localizeObjects(self):
1.236 dwinter 1910: """localize all objects"""
1911: contents=self.ZopeFind(self,obj_metatypes=['ECHO_externalLink','ECHO_link','ECHO_mapText'])
1.233 dwinter 1912:
1.236 dwinter 1913: find=self.ZopeFind(self,obj_ids=('locale_en'))
1914: if not find:
1915: self.manage_addECHO_locale("en",'','')
1916: for content in contents:
1917:
1918: if content[1].meta_type in ['ECHO_link','ECHO_externalLink']:
1919:
1920: find=content[1].ZopeFind(content[1],obj_metatypes=('ECHO_mapText'))
1921: if find:
1922: root=find[0][1]
1923:
1924: locale=find[0][1].ZopeFind(find[0][1],obj_ids=('locale_en'))
1925: else:
1926: root=None
1927: else:
1928: root=content[1]
1929: locale=content[1].ZopeFind(content[1],obj_ids=('locale_en'))
1930: if root and not locale:
1931: root.manage_addECHO_locale("en",'','')
1932:
1933: pt=zptFile(self, 'zpt/localizeObjects.zpt')
1934: return pt()
1.228 dwinter 1935:
1936:
1937: def localize(self,REQUEST,RESPONSE):
1.236 dwinter 1938: """localize"""
1939: for key in REQUEST.form.keys():
1940: splitted=key.split("!")
1941:
1942: if splitted[0]=="" or splitted[0]=="en" or splitted[0]=="title" or splitted[0]=="label":
1943: if splitted[0]=="en":
1944: setattr(self.locale_en,splitted[1],REQUEST.form[key])
1945: else:
1946: setattr(self,splitted[0],REQUEST.form[key])
1947: else:
1948: obj=getattr(self,splitted[0])
1949:
1950: if obj.meta_type=="ECHO_mapText":
1951: if splitted[1]=="en":
1952: obj.locale_en.pt_edit(REQUEST.form[key],None)
1953: else:
1954: obj.pt_edit(REQUEST.form[key],None)
1955: else:
1956: text=obj.ZopeFind(obj,obj_metatypes=['ECHO_mapText'])
1957: if splitted[1]=="en":
1958:
1959: text[0][1].locale_en.pt_edit(REQUEST.form[key],None)
1960: else:
1961: text[0][1].pt_edit(REQUEST.form[key],None)
1962: if RESPONSE is not None:
1963: RESPONSE.redirect('manage_main')
1.228 dwinter 1964:
1965:
1.142 dwinter 1966: def getRDF(self,urn=None):
1.236 dwinter 1967: """rdf of the collection"""
1968:
1969: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
1970:
1971: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
1972:
1973: if not urn:
1974: urn=self.absolute_url()
1975:
1976: li="""<RDF:li RDF:resource="%s" />\n"""
1977:
1978:
1979: for content in contents:
1980: ret+=content[1].getRDF()+"\n"
1981:
1982: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
1983: for content in contents:
1984: nurn=content[1].absolute_url()
1985: ret+=li%nurn
1986: return ret+"</RDF:Seq>"
1987:
1.161 dwinter 1988:
1989:
1.133 dwinter 1990: def changeLabels(self):
1.236 dwinter 1991: """change form"""
1992: pt=zptFile(self, 'zpt/changeLabelsForm')
1993: pt.content_type="text/html"
1994: return pt()
1.133 dwinter 1995:
1996: def changeTitles(self):
1.236 dwinter 1997: """change form"""
1998: pt=zptFile(self, 'zpt/changeTitleForm')
1999: pt.content_type="text/html"
2000: return pt()
1.163 dwinter 2001:
2002: def changeWeights(self):
1.236 dwinter 2003: """change form"""
2004: pt=zptFile(self, 'zpt/changeWeightForm')
2005: pt.content_type="text/html"
2006: return pt()
1.163 dwinter 2007:
1.161 dwinter 2008: def changeMetaDataLinks(self):
1.236 dwinter 2009: """change form"""
2010: pt=zptFile(self, 'zpt/changeMetaDataLinkForm')
2011: pt.content_type="text/html"
2012: return pt()
1.258 dwinter 2013:
2014: def changeAccessRightsCollectionForm(self,preselect=None):
2015: """change access rights of all resources in this collection"""
2016:
2017: pt=zptFile(self, 'zpt/changeAccessRightsCollectionForm')
2018: pt.content_type="text/html"
2019: return pt(preselect=preselect)
2020:
2021:
1.132 dwinter 2022: def changeAccessRightsCollection(self):
1.236 dwinter 2023: """change"""
2024: ret=""
2025: argv=self.REQUEST.form
2026:
2027: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
2028: for resource in resources:
2029:
1.258 dwinter 2030: if argv.has_key(resource[1].getId()+'_xml'):
2031: ret+=resource[1].getId()+" "+argv[resource[1].getId()+'_xml']+"</br>"
2032: resource[1].setAccessRightXML(argv[resource[1].getId()+'_xml'])
2033: resource[1].accessRight=argv[resource[1].getId()+'_xml']
2034: elif argv.has_key(resource[1].getId()+'_echo'):
2035: ret+="only local:"+resource[1].getId()+" "+argv[resource[1].getId()+'_echo']+"</br>"
2036: resource[1].accessRight=argv[resource[1].getId()+'_echo']
2037: else:
2038: ret+="ERROR:" +resource[0]
1.236 dwinter 2039: return ret
1.161 dwinter 2040:
2041: def changeMetaDataLinkInCollection(self):
1.236 dwinter 2042: """change all lables of a collection"""
2043: ret=""
2044: argv=self.REQUEST.form
2045:
2046: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
2047: for resource in resources:
2048:
2049: try:
2050: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.161 dwinter 2051: resource[1].metalink=argv[resource[1].getId()][0:]
1.236 dwinter 2052: except:
2053: pass
2054: return ret
1.132 dwinter 2055:
1.163 dwinter 2056: def changeMetaDataLinkInCollection(self):
1.236 dwinter 2057: """change all lables of a collection"""
2058: ret=""
2059: argv=self.REQUEST.form
2060:
2061: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'])
2062: for resource in resources:
2063:
2064: try:
2065: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.163 dwinter 2066: resource[1].metalink=argv[resource[1].getId()][0:]
1.236 dwinter 2067: except:
2068: pass
2069: return ret
1.163 dwinter 2070:
2071: def changeWeightsInCollection(self):
1.236 dwinter 2072: """change all lables of a collection"""
2073: ret=""
2074: argv=self.REQUEST.form
2075:
2076: resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
2077: for resource in resources:
2078:
2079: try:
2080: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.163 dwinter 2081: resource[1].weight=argv[resource[1].getId()][0:]
1.236 dwinter 2082: except:
2083: pass
2084: return ret
1.133 dwinter 2085:
2086: def changeTitlesInCollection(self):
1.236 dwinter 2087: """change all lables of a collection"""
2088: ret=""
2089: argv=self.REQUEST.form
2090:
2091: resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
2092: for resource in resources:
2093:
2094: try:
2095: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.133 dwinter 2096: resource[1].title=argv[resource[1].getId()][0:]
1.236 dwinter 2097: except:
2098: pass
2099: return ret
1.219 dwinter 2100:
2101: def changeLabelsInCollection(self):
1.236 dwinter 2102: """change all lables of a collection"""
2103: ret=""
2104: argv=self.REQUEST.form
2105:
2106: resources=self.ZopeFind(self,obj_metatypes=['ECHO_pageTemplate','ECHO_movie','ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
2107: for resource in resources:
2108:
2109: try:
2110: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.219 dwinter 2111: resource[1].label=argv[resource[1].getId()][0:]
1.236 dwinter 2112: except:
2113: pass
2114: return ret
1.219 dwinter 2115:
1.253 dwinter 2116: def importCollection(self,path=None,RESPONSE=None):
1.130 dwinter 2117: """liest verzeichnisse aus dem pfad und legt sie dann als objekte in den ordner"""
1.253 dwinter 2118:
2119: if path is None:
2120: pt=zptFile(self, 'zpt/importCollection.zpt')
2121: return pt()
2122:
2123: files=os.listdir(path)
1.236 dwinter 2124: ret=""
1.130 dwinter 2125: for fileName in files:
2126:
2127: if fileName:
1.236 dwinter 2128:
1.253 dwinter 2129: tempPath=re.sub("/mpiwg/online","",path)
1.236 dwinter 2130: link="http://echo.mpiwg-berlin.mpg.de/zogilib_book?fn="+tempPath+"/"+fileName+"/pageimg"
2131:
2132: metalink=self.path+"/"+fileName+"/index.meta"
1.130 dwinter 2133: try:
2134:
1.236 dwinter 2135: #link="http://nausikaa2.mpiwg-berlin.mpg.de/cgi-bin/toc/toc.x.cgi?dir="+fileName+"&step=thumb"
2136:
2137: newObj=ECHO_resource(fileName,link,metalink,fileName,fileName,fileName,'generated','book','','','','','','')
2138: self._setObject(fileName,newObj)
1.130 dwinter 2139:
1.236 dwinter 2140: genObj=getattr(self,fileName)
1.130 dwinter 2141: #genObj.createIndexFile()
1.236 dwinter 2142: ret+="OK:"+fileName+"<br/>"
2143: except:
2144: print "ERROR"
2145: ret+="ERROR:"+fileName+"<br/>"
1.130 dwinter 2146:
1.236 dwinter 2147: return ret
1.130 dwinter 2148:
2149: if RESPONSE is not None:
2150: RESPONSE.redirect('manage_main')
2151:
1.123 dwinter 2152: def changeViewerTemplateSetsForm(self):
1.236 dwinter 2153: """change the viewer template set"""
2154: pt=zptFile(self, 'zpt/changeViewerTemplateSet')
1.123 dwinter 2155: return pt()
2156:
1.172 dwinter 2157: def getViewerTemplateSets(self,obj_ids=None,RESPONSE=None):
1.236 dwinter 2158: """Get the ViewerTemplateSet title for configuration"""
2159: ret=[]
2160:
2161: try:
2162: viewerTemplateSets=self.ZopeFind(self.viewerTemplateSets,obj_metatypes=['OSAS_viewerTemplateSet'],obj_ids=obj_ids)#assumes viewerTemplateSets folder somewhere in the hierarchie.
2163:
2164: for viewerTemplateSet in viewerTemplateSets:
2165: ret.append((viewerTemplateSet[1].title,viewerTemplateSet[0],viewerTemplateSet[1]))
2166:
2167: return ret
2168:
2169: except:
2170: return [('no ViewerTemplateSetfolders','')]
1.123 dwinter 2171:
2172: def getTextToolsField(self,name,default=''):
1.236 dwinter 2173: """Lese viewerTemplateSet der Collection not implemented yet!"""
2174:
2175: return default
1.123 dwinter 2176:
2177:
2178: def isSelectedViewerTemplateSet(self,obj,id):
1.195 casties 2179: """is ausgewaehlt"""
1.123 dwinter 2180:
2181: if self.REQUEST['viewerTemplateSet']==id:
2182: return 1
2183: else:
2184: return None
2185:
1.155 dwinter 2186: def changeViewerTemplateSets(self,project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix,RESPONSE=None):
1.236 dwinter 2187: """change the templates"""
1.123 dwinter 2188:
1.236 dwinter 2189: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
1.123 dwinter 2190:
1.236 dwinter 2191: for resource in resources:
1.130 dwinter 2192:
1.236 dwinter 2193: resource[1].changeViewerTemplateSet(project,xslt,thumbtemplate,topbar,digiLibTemplate,digiliburlprefix)
1.123 dwinter 2194:
1.236 dwinter 2195: if RESPONSE is not None:
2196: RESPONSE.redirect('manage_main')
1.123 dwinter 2197:
2198:
1.153 dwinter 2199: def setStartpageFolderForm(self):
1.236 dwinter 2200: """Form for changing the startpage"""
1.153 dwinter 2201:
1.236 dwinter 2202:
2203: pt=zptFile(self, 'zpt/ChangeECHO_resourceStartPageFolder.zpt')
1.153 dwinter 2204: pt.content_type="text/html"
2205: return pt()
2206:
2207: def setStartpageFolder(self,startpage=None,RESPONSE=None):
1.236 dwinter 2208: """change the templates"""
1.153 dwinter 2209:
1.236 dwinter 2210: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
1.153 dwinter 2211:
1.236 dwinter 2212: for resource in resources:
1.153 dwinter 2213:
1.236 dwinter 2214: resource[1].setStartPage(startpage)
1.153 dwinter 2215:
1.236 dwinter 2216: if RESPONSE is not None:
2217: RESPONSE.redirect('manage_main')
1.153 dwinter 2218:
1.183 dwinter 2219: def copyTitleToInfoXMLFolder(self,RESPONSE=None):
1.236 dwinter 2220: """copy title into the title field of info.xml
2221: author and date werden leer!!!
2222: """
2223:
2224:
2225: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
2226:
2227:
2228: for resource in resources:
2229: ret,txt=resource[1].copyTitleToInfoXML()
2230: if (not ret) and RESPONSE:
2231: RESPONSE.write("error: %s\n"%txt)
2232: if ret and RESPONSE:
2233: RESPONSE.write("ok: %s\n"%txt)
2234:
2235: #zLOG.LOG("ECHO (copyTitleToInfoXMLFolder)",zLOG.INFO,txt)
2236: if RESPONSE is not None:
2237: RESPONSE.write("done!\n")
2238: RESPONSE.close()
2239: RESPONSE.redirect('manage_main')
2240:
1.130 dwinter 2241: def copySearchFields(self,RESPONSE=None):
1.253 dwinter 2242: """copys < metadatafields to the object"""
1.245 dwinter 2243: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
1.130 dwinter 2244:
1.236 dwinter 2245: for resource in resources:
1.130 dwinter 2246:
1.236 dwinter 2247: resource[1].copySearchFields()
1.130 dwinter 2248:
1.236 dwinter 2249: if RESPONSE is not None:
2250: RESPONSE.redirect('manage_main')
2251:
1.153 dwinter 2252: def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
1.236 dwinter 2253: """warning"""
2254: pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt')
1.153 dwinter 2255: pt.content_type="text/html"
2256: return pt()
1.130 dwinter 2257:
2258: def reloadMetaDataFromStorage(self,RESPONSE=None):
1.236 dwinter 2259: """copy metadata from the storage to ECHO"""
1.130 dwinter 2260:
1.245 dwinter 2261: return reloadMetaDataFromStorage(self,RESPONSE)
1.130 dwinter 2262:
1.153 dwinter 2263:
1.98 dwinter 2264: def getPartnerCopyright(self,name,sonst="generic"):
1.236 dwinter 2265: """gibt generisches copyright eines partners aus, sonst behalte jetzige einsteillung"""
2266: #print "hi",name,sonst
2267: #print getattr(self.partners,name).copyrightType
2268: try:
2269: partner=getattr(self.partners,name)
2270: return partner.copyrightType
2271: except:
2272: print "error"
2273: return sonst
1.98 dwinter 2274:
2275: def partnerSelector_HTML(self,selected=None):
2276: """give type selector"""
1.236 dwinter 2277: if not selected:
2278: retStr="<option selected>\n"
2279: else:
2280: retStr="<option>\n"
2281:
2282: try: # erste version copyrightTypes exists
1.272 ! dwinter 2283: for partner in self.getPartners():
! 2284: partnerTitle = partner.title
! 2285: partnerId = partner.__name__
! 2286: if selected and (partnerId==selected):
! 2287: retStr+="""<option selected value="%s">%s\n"""%(partnerId,partnerTitle)
1.236 dwinter 2288: else:
1.272 ! dwinter 2289: retStr+="""<option value="%s">%s\n"""%(partnerId,partnerTitle)
1.236 dwinter 2290: except:
2291: """nothing"""
2292: return retStr
1.98 dwinter 2293:
1.202 casties 2294: # def getViewClassification(self):
2295: # if hasattr(self,'viewClassification'):
2296: # return self.viewClassification
2297: # else:
2298: # return ""
1.48 dwinter 2299:
1.236 dwinter 2300:
1.45 dwinter 2301: def createRessourcesFromXMLForm(self):
1.236 dwinter 2302: """form"""
2303: pt=zptFile(self, 'zpt/createRessourcesFromXMLForm.zpt')
2304: return pt()
1.83 dwinter 2305:
1.45 dwinter 2306: def createRessourcesFromXML(self,fileupload):
1.236 dwinter 2307: """read an XML file for generating resources"""
2308: dom=xml.dom.minidom.parse(fileupload)
2309: ret="<h2>Added</h2>"
2310: for resource in dom.getElementsByTagName('resource'):
2311: link=getText(resource.getElementsByTagName('link')[0].childNodes)
2312: label=getText(resource.getElementsByTagName('label')[0].childNodes)
2313: #splitted=link.split("?")[0].split("/")
2314: #id=splitted[len(splitted)-1].encode('ascii')
2315: id=re.sub(" ","_",label).encode('ascii')
2316:
2317: ret+="<p>"+label+"</p>"
2318: manage_addECHO_resource(self,id,label.encode('ascii'),label.encode('ascii'),"","","",link.encode('ascii'),"","")
2319: return ret
1.210 dwinter 2320:
2321: security.declarePublic('getImageTag')
1.25 dwinter 2322: def getImageTag(self):
2323: """GetTag"""
2324: try:
2325: return self.imageTag
2326: except:
2327: return ""
2328:
1.217 dwinter 2329:
1.222 dwinter 2330: def addMovie(self,id,title,label,description,contentType,responsible,link,thumbUrl,rawFile,lowresFile,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.217 dwinter 2331: """SSS"""
1.228 dwinter 2332:
1.236 dwinter 2333: #manage_addECHO_movie(self,id,title,label,description,responsible,link,thumbUrl,rawFile,metalink,weight,credits=None,coords=None,RESPONSE=None)
2334: if not hasattr(self,id):
2335: try:
2336: manage_addECHO_movie(self,id,title,label,description,responsible,link,thumbUrl,rawFile,lowresFile,metalink,weight,credits=None,coords=None,RESPONSE=None)
2337: return "done"
2338: except:
2339: return None
2340: else:
2341: obj=getattr(self,id)
2342: obj.changeECHO_movie_main(metalink,link,rawFile,lowresFile,thumbUrl,title,label,description,contentType,weight=weight)
1.220 dwinter 2343:
1.236 dwinter 2344: return "changed"
1.220 dwinter 2345:
1.27 dwinter 2346: def addResource(self,id,title,label,description,contentType,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None):
1.24 dwinter 2347: """SSS"""
2348: try:
1.123 dwinter 2349: manage_addECHO_resource(self,id,title,label,description,responsible,link,metalink,weight,credits=None,coords=None,RESPONSE=None)
1.24 dwinter 2350: return "done"
2351: except:
2352: return None
1.32 dwinter 2353:
2354: def getSecondaryLink(self):
2355: """secondary link"""
2356: try:
2357: return self.secondaryLink
2358: except:
2359: return ""
2360:
2361: def getSecondaryLinkTitle(self):
2362: """secondary link"""
2363: try:
2364: return self.secondaryLinkTitle
2365: except:
2366: return ""
2367:
1.205 dwinter 2368: def getCollectionTreeXML(self,pwstr=None):
1.24 dwinter 2369: """Tree as XML"""
2370:
1.236 dwinter 2371: def addPassWd(str,pwstr=None):
2372: """adds a user/passwd to an url"""
2373: if pwstr:
2374: txt2=re.sub(r"(http://)(.*?)","\g<1>%s@\g<2>"%pwstr,str)
2375: else:
2376: txt2=re.sub(r"(http://)(.*?)","\g<1>www:3333@\g<2>",str)
2377: return txt2
1.171 dwinter 2378:
1.205 dwinter 2379: def getCollection(object,depth=0,pwstr=None):
1.24 dwinter 2380: depth+=1
2381: collections=""
2382: for entry in object.__dict__.keys():
2383: element=getattr(object,entry)
2384: try:
1.40 dwinter 2385: if element.meta_type in ["ECHO_collection","ECHO_group"]:
1.205 dwinter 2386: collections+="<element name=\""+urllib.quote(element.title)+"\" url=\""+addPassWd(element.absolute_url(),pwstr=pwstr)+"\">"
1.24 dwinter 2387: collections+=getCollection(element,depth)+"</element>\n"
2388: except:
2389: """nothing"""
2390: return collections
2391:
1.236 dwinter 2392: ret="""<?xml version="1.0" encoding="utf-8" ?>"""
1.205 dwinter 2393: return ret+"<collection>"+getCollection(self,pwstr=pwstr)+"</collection>"
1.24 dwinter 2394:
1.195 casties 2395: def createAllJSAreas(self):
2396: """create area calls for JavaScript"""
2397: areas = self.getAllMapAreas()
1.236 dwinter 2398: return self.createJSAreas(areas)
1.195 casties 2399:
1.256 dwinter 2400:
2401: emptyPartner=ECHO_partner("", "","", "", "", "", "", "", "")
2402:
1.1 casties 2403: security.declarePublic('getCreditObject')
2404: def getCreditObject(self,name):
2405: """credit id to credititem"""
1.15 dwinter 2406: try:
2407: return getattr(self.partners,name)
2408: except:
1.256 dwinter 2409:
2410: return self.emptyPartner
2411:
2412:
1.1 casties 2413: security.declarePublic('ECHO_generateNavBar')
2414: def ECHO_generateNavBar(self):
2415: """Erzeuge Navigationsbar"""
2416: link=""
2417: object="self"
2418: ret=[]
2419: path=self.getPhysicalPath()
2420: for element in path:
2421:
2422:
2423: if not element=="":
2424: object+="."+element
2425:
2426: label=eval(object).label
2427: link+="/"+element
2428: if not label=="":
2429: ret.append((label,link))
2430: return ret
2431:
1.49 dwinter 2432:
1.153 dwinter 2433: def ECHO_rerenderLinksMDWarning(self):
1.236 dwinter 2434: """change form"""
2435: pt=zptFile(self, 'zpt/rerenderLinksWarning')
2436: pt.content_type="text/html"
2437: return pt()
1.91 dwinter 2438:
1.49 dwinter 2439:
1.153 dwinter 2440:
1.195 casties 2441: security.declarePublic('ECHO_rerenderLinksMD')
1.153 dwinter 2442: def ECHO_rerenderLinksMD(self,obj=None,types=['title','label']):
2443: """Rerender all Links"""
1.236 dwinter 2444: return ECHO_rerenderLinksMD(self,obj,types)
1.19 dwinter 2445:
1.236 dwinter 2446:
1.216 dwinter 2447: def __init__(self,id,title,label,description="",contentType="",responsible="",credits="",weight="",sortfield="",coords=[],secondaryLinkTitle="",secondaryLink="",imageTag="",bgcolour=""):
1.91 dwinter 2448:
1.1 casties 2449: self.id = id
2450: """Festlegen der ID"""
2451: self.credits=toList(credits)
2452: self.label = label
2453: self.title=title
2454: self.description=description
1.27 dwinter 2455: self.contentType=contentType
1.1 casties 2456: self.responsible=responsible
1.25 dwinter 2457: self.imageTag=imageTag
1.1 casties 2458: self.weight=weight
2459: self.sortfield=sortfield
2460: coordsnew=[ string.split(x,",") for x in coords]
2461: self.coords=coordsnew
1.32 dwinter 2462: self.secondaryLinkTitle=secondaryLinkTitle
2463: self.secondaryLink=secondaryLink
1.236 dwinter 2464: self.bgcolour=bgcolour
1.32 dwinter 2465:
1.1 casties 2466:
1.154 dwinter 2467: manage_options = Folder.manage_options+ Cacheable.manage_options+(
1.13 dwinter 2468: {'label':'Main Config','action':'ECHO_collection_config'},
1.133 dwinter 2469: {'label':'Change Labels','action':'changeLabels'},
2470: {'label':'Change Titles','action':'changeTitles'},
1.236 dwinter 2471: {'label':'Localize','action':'localizeObjects'},
2472: {'label':'Change Weights','action':'changeWeights'},
1.153 dwinter 2473: {'label':'Rerender Labels and Titles','action':'ECHO_rerenderLinksMDWarning'},
1.199 casties 2474: {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
1.236 dwinter 2475: {'label':'create resources from XML','action':'createRessourcesFromXMLForm'},
2476: {'label':'Set Startpage','action':'setStartpageFolderForm'},
1.155 dwinter 2477: {'label':'Change Viewer Templates and Image Viewer','action':'changeViewerTemplateSetsForm'},
1.236 dwinter 2478: {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
1.253 dwinter 2479: {'label':'ImportCollection','action':'importCollection'},
1.236 dwinter 2480: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
1.258 dwinter 2481: {'label':'Change access rights', 'action':'changeAccessRightsCollectionForm'},
1.1 casties 2482: )
2483:
2484:
1.13 dwinter 2485: security.declarePublic('ECHO_collection_config')
2486: def ECHO_collection_config(self):
1.1 casties 2487: """Main configuration"""
2488:
2489: if not hasattr(self,'weight'):
2490: self.weight=""
2491:
2492: if not hasattr(self,'sortfield'):
2493: self.sortfield="weight"
1.13 dwinter 2494:
1.195 casties 2495: pt=zptFile(self, 'zpt/ChangeECHO_collection.zpt')
1.1 casties 2496: return pt()
2497:
2498:
1.34 dwinter 2499: def getBgcolour(self):
1.236 dwinter 2500: """colour"""
2501: if hasattr(self,'bgcolour') and not (self.bgcolour==""):
2502: return self.bgcolour
2503: else:
2504: return "#dddddd"
1.195 casties 2505:
1.236 dwinter 2506:
2507: security.declarePublic('changeECHO_collection')
1.231 dwinter 2508: def changeECHO_collection(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",location=None,isAlwaysClickable=None,prefix="",suffix=""):
1.71 casties 2509: """Aenderung der Properties"""
1.10 dwinter 2510:
1.32 dwinter 2511: self.secondaryLink=secondaryLink
2512: self.secondaryLinkTitle=secondaryLinkTitle
1.25 dwinter 2513: self.imageTag=imageTag
1.236 dwinter 2514: self.bgcolour=bgcolour
1.105 dwinter 2515: self.location=location
1.236 dwinter 2516: self.isAlwaysClickable=isAlwaysClickable
2517: self.prefix=prefix[0:]
2518: self.suffix=suffix[0:]
2519:
1.198 casties 2520: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
1.236 dwinter 2521:
1.1 casties 2522: self.sortfield=sortfield
2523:
2524: if RESPONSE is not None:
2525: RESPONSE.redirect('manage_main')
2526:
1.169 dwinter 2527: def setAlwaysClickable(self,flag="yes"):
1.236 dwinter 2528: """set clickable"""
2529: if flag=="yes":
2530: self.isAlwaysClickable="yes"
2531: else:
2532: self.isAlwaysClickable=None
1.23 dwinter 2533:
1.236 dwinter 2534: return flag
1.169 dwinter 2535:
1.23 dwinter 2536: def showOverview(self):
2537: """overview"""
2538: if 'ECHO_overview.html' in self.__dict__.keys():
2539: return getattr(self,'ECHO_overview.html')()
1.195 casties 2540: pt=zptFile(self, 'zpt/ECHO_content_overview.zpt')
1.23 dwinter 2541: return pt()
2542:
1.224 casties 2543:
1.84 dwinter 2544: security.declareProtected('View','index_html')
1.1 casties 2545: def index_html(self):
2546: """standard page"""
1.154 dwinter 2547: if self.ZCacheable_isCachingEnabled():
2548:
2549: result = self.ZCacheable_get()
2550: if result is not None:
2551: # Got a cached value.
2552: return result
1.236 dwinter 2553:
1.1 casties 2554: if 'index.html' in self.__dict__.keys():
1.154 dwinter 2555: ret=getattr(self,'index.html')()
1.32 dwinter 2556:
1.1 casties 2557: elif 'overview' in self.__dict__.keys():
1.154 dwinter 2558: ret=self.showOverview()
1.32 dwinter 2559: elif hasattr(self,'collection_index_template'):
1.154 dwinter 2560: ret=self.collection_index_template()
1.54 dwinter 2561: elif hasattr(self,'main_index_template'):
1.209 dwinter 2562:
2563: ret=self.main_index_template.__of__(self)(self.main_template)
1.154 dwinter 2564: else:
1.236 dwinter 2565: pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt')
2566: pt.content_type="text/html"
2567: ret=pt.render()
1.154 dwinter 2568:
1.236 dwinter 2569: self.ZCacheable_set(ret)
1.154 dwinter 2570: return ret
1.1 casties 2571:
1.210 dwinter 2572: security.declarePublic('content_html')
1.189 dwinter 2573: def content_html(self,**argv):
1.29 dwinter 2574: """template fuer content"""
1.236 dwinter 2575: #print "NN",argv
1.240 dwinter 2576: ret = ECHO_basis.content_html(self,'collection')
1.243 dwinter 2577:
1.260 dwinter 2578: if type(ret) is StringType:
2579: return ret.decode('utf-8')
2580: else:
2581: return ret
2582:
1.240 dwinter 2583:
1.11 dwinter 2584: def getCredits(self):
2585: """Ausgabe der credits"""
2586: if self.credits:
2587: return self.credits
2588: else:
2589: return []
1.1 casties 2590:
1.65 casties 2591: def area_img(self):
2592: """area image"""
1.236 dwinter 2593: bt = BrowserCheck(self)
2594: if bt.isIE or bt.isN4:
2595: return sendFile(self, 'images/red.gif', 'image/gif')
2596: else:
2597: return sendFile(self, 'images/reda.png', 'image/png')
1.87 casties 2598:
2599: def trans_img(self):
2600: """empty image"""
2601: return sendFile(self, 'images/trans.gif', 'image/gif')
1.65 casties 2602:
2603: def hl_lib_js(self):
2604: """javascript"""
1.79 casties 2605: return sendFile(self, 'js/hl_lib.js', 'text/plain')
1.65 casties 2606:
2607: def js_lib_js(self):
1.195 casties 2608: """javascript -- old name"""
2609: return sendFile(self, 'js/baselib.js', 'text/plain')
2610:
2611: def baselib_js(self):
2612: """javascript"""
2613: return sendFile(self, 'js/baselib.js', 'text/plain')
2614:
2615: def hl_add_js(self):
1.65 casties 2616: """javascript"""
1.195 casties 2617: return sendFile(self, 'js/hl_add.js', 'text/plain')
1.23 dwinter 2618:
1.226 dwinter 2619: def getAllMapAreas(self,mapColTypes=['ECHO_collection','ECHO_resource','ECHO_link','ECHO_externalLink']):
1.1 casties 2620: """Give list of coordinates"""
1.226 dwinter 2621:
1.195 casties 2622: areas=[]
1.211 dwinter 2623: for entry in self.getSubCols(subColTypes=mapColTypes):
1.202 casties 2624: object=entry
1.236 dwinter 2625: areas.extend(object.getMapAreas())
1.195 casties 2626: return areas
1.1 casties 2627:
1.42 dwinter 2628:
1.195 casties 2629: def deleteMapAreas(self):
1.236 dwinter 2630: """deletes all map areas from this object"""
2631: for obs in self.ZopeFind(self, obj_metatypes=['MapArea'], search_sub=1):
2632: ob = obs[1]
2633: id = ob.id
2634: parent = ob.aq_parent
2635: print "deleting: ", ob.id
2636: parent._delObject(id)
2637: return "Done"
1.195 casties 2638:
1.42 dwinter 2639:
1.41 dwinter 2640: getSubCols = ECHO_helpers.getSubCols
1.259 dwinter 2641:
2642: def getSubcolsXMLRpc(self,searchSimple):
2643: """simplesearch results suitable for xml rpc, gives back array objid,url"""
2644:
2645: return [x.absolute_url() for x in self.getSubCols(searchSimple=searchSimple)]
2646:
2647:
1.84 dwinter 2648: Globals.InitializeClass(ECHO_collection)
1.1 casties 2649:
1.13 dwinter 2650: def manage_addECHO_collectionForm(self):
2651: """Add collection form"""
1.195 casties 2652: pt=zptFile(self, 'zpt/AddECHO_collectionForm.zpt')
1.1 casties 2653: return pt()
2654:
2655:
1.207 dwinter 2656: def manage_addECHO_collection(self,id,title,label,description="",contentType="",responsible="",weight=0,sortfield="weight",coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour=""):
1.13 dwinter 2657: """add a echo collection"""
1.1 casties 2658:
2659:
1.34 dwinter 2660: newObj=ECHO_collection(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
1.1 casties 2661:
2662: self._setObject(id,newObj)
1.13 dwinter 2663:
1.1 casties 2664: if RESPONSE is not None:
2665: RESPONSE.redirect('manage_main')
2666:
1.38 dwinter 2667: class ECHO_group(ECHO_collection):
1.236 dwinter 2668: """ECHO Gruppe"""
2669: security=ClassSecurityInfo()
2670: meta_type="ECHO_group"
2671:
2672: manage_options = Folder.manage_options+(
2673: {'label':'Main Config','action':'ECHO_group_config'},
2674: {'label':'Rerender Links','action':'ECHO_rerenderLinksMDWarning'},
2675: {'label':'Graphic Coords','action':'ECHO_graphicEntry'},
2676: )
2677:
2678: security.declareProtected('View','index_html')
2679:
2680:
2681: def getRDF(self,urn=None):
2682: """rdf of the collection"""
2683: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
2684:
2685: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
2686:
2687:
2688: if not urn:
2689: urn=self.absolute_url()
2690: li="""<RDF:li RDF:resource="%s" />\n"""
2691:
2692:
2693: for content in contents:
2694: ret+=content[1].getRDF()+"\n"
2695:
2696: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
2697: for content in contents:
2698: nurn=content[1].absolute_url()
2699: ret+=li%nurn
2700: return ret+"</RDF:Seq>"
2701:
2702: def index_html(self):
2703: """standard page"""
2704: displayedObjects=self.ZopeFind(self,obj_metatypes=displayTypes)
2705: #if (len(displayedObjects)==1) and (displayedObjects[0][1].meta_type=="ECHO_collection"): # nur ein Object dann redirect auf dieses Object
2706: # return self.REQUEST.RESPONSE.redirect(displayedObjects[0][1].absolute_url())
2707:
2708: if 'index.html' in self.__dict__.keys():
2709: return getattr(self,'index.html')()
2710:
2711: elif 'overview' in self.__dict__.keys():
2712: return self.showOverview()
2713: elif hasattr(self,'group_index_template'):
2714: return self.group_index_template()
2715: elif hasattr(self,'collection_index_template'):
2716: return self.collection_index_template()
2717: elif hasattr(self,'main_index_template'):
2718: return self.main_index_template()
2719:
2720: pt=zptFile(self, 'zpt/ECHO_main_index_template_standard.zpt')
2721: pt.content_type="text/html"
2722: return pt()
2723:
2724: def ECHO_group_config(self):
2725: """Main configuration"""
2726:
2727: if not hasattr(self,'weight'):
2728: self.weight=""
2729:
2730: if not hasattr(self,'sortfield'):
2731: self.sortfield="weight"
2732:
2733: if not hasattr(self,'coords'):
2734: self.coords=[]
2735:
2736: pt=zptFile(self, 'zpt/ChangeECHO_group.zpt')
2737: return pt()
2738:
2739: def changeECHO_group(self,title,label,description,contentType,responsible,weight,secondaryLink,secondaryLinkTitle,credits=None,sortfield="weight",coords=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
2740: """Aenderung der Properties"""
2741:
2742: self.secondaryLink=secondaryLink
2743: self.secondaryLinkTitle=secondaryLinkTitle
2744: self.imageTag=imageTag
2745: self.bgcolour=bgcolour
1.43 dwinter 2746: self.logo=logo
2747:
1.236 dwinter 2748: setECHO_collectionInformation(self,title,label,description,contentType,responsible,credits,weight)
1.38 dwinter 2749:
2750:
2751:
1.236 dwinter 2752: self.sortfield=sortfield
1.38 dwinter 2753:
1.236 dwinter 2754: if RESPONSE is not None:
2755: RESPONSE.redirect('manage_main')
1.40 dwinter 2756:
1.236 dwinter 2757: def getLogo(self):
2758: """logo ausgeben"""
1.43 dwinter 2759: try:
2760: return self.logo
2761: except:
2762: return "ECHO_groups"
1.40 dwinter 2763:
1.210 dwinter 2764: security.declarePublic('content_html')
1.236 dwinter 2765: def content_html(self):
2766: """template fuer content"""
2767: return ECHO_basis.content_html(self,'group')
1.38 dwinter 2768:
2769:
2770:
2771: def manage_addECHO_groupForm(self):
2772: """Add group form"""
1.195 casties 2773: pt=zptFile(self, 'zpt/AddECHO_groupForm.zpt')
1.38 dwinter 2774: return pt()
2775:
2776:
1.43 dwinter 2777: def manage_addECHO_group(self,id,title,label,description,contentType,responsible,weight,sortfield,coords="",secondaryLinkTitle="",secondaryLink="",credits=None,RESPONSE=None,imageTag="",bgcolour="",logo=""):
1.38 dwinter 2778: """add a echo group"""
2779:
2780:
2781: newObj=ECHO_group(id,title,label,description,contentType,responsible,credits,weight,sortfield,coords,secondaryLinkTitle=secondaryLinkTitle,secondaryLink=secondaryLink,imageTag=imageTag,bgcolour="")
2782:
1.43 dwinter 2783: setattr(newObj,'logo',logo)
1.38 dwinter 2784: self._setObject(id,newObj)
1.43 dwinter 2785:
1.38 dwinter 2786: if RESPONSE is not None:
2787: RESPONSE.redirect('manage_main')
2788:
1.84 dwinter 2789: Globals.InitializeClass(ECHO_group)
1.85 dwinter 2790:
2791:
2792: class ECHO_userFolder(UserFolder):
1.236 dwinter 2793: """User folder for Intranet"""
2794: _domain_auth_mode=1 # Identification via domain
2795: meta_type="ECHO_userFolder"
2796:
2797: def authenticate(self, name, password, request):
2798: emergency = self._emergency_user
2799: if name is None:
2800: return None
2801: if emergency and name==emergency.getUserName():
2802: user = emergency
2803: else:
2804: user = self.getUser(name)
2805: if user is not None and user.authenticate(password, request):
2806: return user
2807: else:
2808: return None
2809:
2810: def domainSpecMatch(self,spec, request):
2811: host=''
2812: addr=''
2813:
2814: # Fast exit for the match-all case
2815: if len(spec) == 1 and spec[0] == '*':
2816: return 1
2817:
2818: if request.has_key('REMOTE_HOST'):
2819: host=request['REMOTE_HOST']
2820:
2821: if request.has_key('REMOTE_ADDR'):
2822: addr=request['REMOTE_ADDR']
2823:
2824: if request.has_key('HTTP_X_FORWARDED_FOR'):
2825: addr=request['HTTP_X_FORWARDED_FOR']
2826:
2827:
2828: if not host and not addr:
2829: return 0
2830:
2831: if not host:
2832: try: host=socket.gethostbyaddr(addr)[0]
2833: except: pass
2834: if not addr:
2835: try: addr=socket.gethostbyname(host)
2836: except: pass
2837:
2838:
2839: _host=host.split('.')
2840: _addr=addr.split('.')
2841: _hlen=len(_host)
2842: _alen=len(_addr)
2843:
2844: for ob in spec:
2845: sz=len(ob)
2846: _ob=ob.split('.')
2847: _sz=len(_ob)
2848:
2849: mo = addr_match(ob)
2850: if mo is not None:
2851: if mo.end(0)==sz:
2852: fail=0
2853: for i in range(_sz):
2854: a=_addr[i]
2855: o=_ob[i]
2856: if (o != a) and (o != '*'):
2857: fail=1
2858: break
2859: if fail:
2860: continue
2861: return 1
2862:
2863: mo = host_match(ob)
2864: if mo is not None:
2865: if mo.end(0)==sz:
2866: if _hlen < _sz:
2867: continue
2868: elif _hlen > _sz:
2869: _item=_host[-_sz:]
2870: else:
2871: _item=_host
2872: fail=0
2873: for i in range(_sz):
2874: h=_item[i]
2875: o=_ob[i]
2876: if (o != h) and (o != '*'):
2877: fail=1
2878: break
2879: if fail:
2880: continue
2881: return 1
2882: return 0
1.85 dwinter 2883:
2884: Globals.default__class_init__(ECHO_userFolder)
2885:
2886:
2887:
2888: def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored):
2889: """add a user folder """
2890: f=ECHO_userFolder()
2891: self=self.this()
2892: try: self._setObject('acl_users', f)
2893: except: return MessageDialog(
2894: title ='Item Exists',
2895: message='This object already contains a User Folder',
2896: action ='%s/manage_main' % REQUEST['URL1'])
2897: self.__allow_groups__=f
2898: if REQUEST is not None:
2899: REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
2900:
2901: def manage_addECHO_userFolderForm(self):
1.236 dwinter 2902: """add a user folder form"""
2903: return manage_addECHO_userFolder(self)
1.85 dwinter 2904:
1.165 dwinter 2905:
2906:
1.167 dwinter 2907: def createNode(self,descrs,node):
1.236 dwinter 2908: name=descrs[node]['name']
2909: type=descrs[node]['type']
2910: urn=node
2911: #print " will create",node.encode('utf-8')
2912: id=re.sub('[^a-zA-Z0-9]','',name).encode('ascii','ignore')
2913: #print "id",id
2914: #print type
2915: #self.REQUEST.RESPONSE.write("<p>%s<p>\n"%id)
2916: if type=="CDLI_group":
2917:
2918: try:
2919: manage_addECHO_collection(self,id,name,name,"","","","","")
2920:
2921: except:
2922: self.REQUEST.RESPONSE.write("<p>Error%s</p>\n"%id)
2923:
2924: self.REQUEST.RESPONSE.write("<p>Creates:%s</p>\n"%getattr(self,id).absolute_url())
2925:
2926: return type,getattr(self,id),urn
2927:
2928: if type=="CDLI_item":
2929: try:
2930: manage_addECHO_resource(self,id,name,name,"","",urn,"","")
2931: except:
2932: self.REQUEST.RESPONSE.write("<p>Error%s</p>\n"%id)
2933: self.REQUEST.RESPONSE.write("<p>Creates:%s</p>\n"%getattr(self,id).absolute_url())
2934:
2935:
2936: return "XX"
1.165 dwinter 2937:
2938:
1.1 casties 2939: class ECHO_root(Folder,Persistent,Implicit):
2940: """ECHO Root Folder"""
1.85 dwinter 2941:
2942: security=ClassSecurityInfo()
2943:
1.1 casties 2944: meta_type="ECHO_root"
1.260 dwinter 2945: management_page_charset="utf-8"
1.236 dwinter 2946:
1.264 dwinter 2947: getSubCols = ECHO_helpers.getSubCols
2948:
2949: manage_options=Folder.manage_options+(
2950: {'label':'Main Config','action':'ECHO_copyright_configForm'},
2951: {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
2952: {'label':'Change Weights','action':'changeWeights'},
2953: {'label':'Generate from RDF','action':'generateFromRDFForm'},
2954: {'label':'update Resource Catalog','action':'updateResourceCatalog'},
1.266 dwinter 2955: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
1.264 dwinter 2956: )
2957:
1.266 dwinter 2958:
2959: def copySearchFields(self,RESPONSE=None):
2960: """copys < metadatafields to the object"""
2961: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
2962:
2963: for resource in resources:
2964:
2965: resource[1].copySearchFields()
2966:
2967: if RESPONSE is not None:
2968: RESPONSE.redirect('manage_main')
1.264 dwinter 2969:
1.254 dwinter 2970: def mod_re_sub(self,pattern,replace,string):
2971: """re.sub aus mod re zur Verfuegung stellen"""
2972: return re.sub(pattern,replace,string)
2973:
1.238 dwinter 2974: def findObjectFromFulltext(self,existUri):
1.236 dwinter 2975: '''
2976:
2977: @param url:
2978: @param existUri:
2979: '''
1.238 dwinter 2980:
2981: if existUri:
2982: #TODO: at the moment assume that the filename is unique, the whole has to changed to a system of ids.
2983: filename=existUri.split("/")[-1]
2984:
2985: founds=self.resourceCatalog.search({'fullTextUrl':os.path.splitext(filename)[0]})
2986:
2987: ret=[(found.title,found.getObject().absolute_url(),found.getObject().aq_parent.absolute_url()) for found in founds]
2988:
2989: return ret
1.236 dwinter 2990:
2991: def reindex(self,RESPONSE=None):
2992: """indiziere alle Objecte neu"""
2993:
2994: if RESPONSE:
2995: RESPONSE.write("<html><body>")
2996:
2997: resources=self.ZopeFind(self,obj_metatypes=["ECHO_resource"], search_sub=1)
2998:
2999: for resource in resources:
3000: resource[1].reindex()
1.256 dwinter 3001: #print "<p> done %s </p>\n"
1.236 dwinter 3002: if RESPONSE:
3003: RESPONSE.write("<p> done %s </p>\n"%resource[0])
3004:
3005: if RESPONSE:
3006: RESPONSE.write("<p> ok </p></html></body>\n")
3007:
1.228 dwinter 3008:
3009: def setLanguage(self,lang):
1.236 dwinter 3010: """Set language cookie"""
3011: self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/")
1.228 dwinter 3012:
3013: def switchLanguage(self):
1.236 dwinter 3014: """Set language cookie"""
3015: if self.getLanguage()=="en":
3016: lang="de"
3017: else:
3018: lang="en"
3019:
3020: self.REQUEST.RESPONSE.setCookie('lang_exhibition',lang,path="/")
3021: self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1'])
1.265 dwinter 3022:
1.228 dwinter 3023: def getLanguage(self):
1.236 dwinter 3024: """get language cookie"""
3025: lang= self.REQUEST.cookies.get('lang_exhibition','de')
3026: if lang == '':
3027: lang="de"
3028: return lang
1.228 dwinter 3029:
1.203 casties 3030: def getContentOverviewTemplate(self):
1.236 dwinter 3031: """produces overview template with macro"""
3032: pt = zptObjectOrFile(self, 'content_overview_template')
3033: return pt
1.165 dwinter 3034:
1.224 casties 3035: def mapstyle_css(self):
3036: """send mapstyle.css"""
3037: sendFile(self, 'html/ECHO_mapstyle.css', 'text/css')
3038:
3039:
1.202 casties 3040: ###Cdli adds -> have to be removed
1.165 dwinter 3041: def getTablet(self,item):
1.167 dwinter 3042: #print "getTablet"
1.236 dwinter 3043: try:
3044: read=urllib.urlopen("http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"%item).read()
1.167 dwinter 3045: read=re.sub("\[search\]","search",read)
1.236 dwinter 3046: return read[read.find("<body>")+6:read.rfind("</body>")]
3047: except:
3048: return "<h1>Sorry no connection to the data server enlil.museum.upenn.edu</h1>"
3049: #return "http://enlil.museum.upenn.edu/cgi-bin/cdlget.plx?item=%s&project=ncdl"
1.167 dwinter 3050: ###END CDLI add
3051:
1.186 dwinter 3052:
1.200 casties 3053: def URLquote(self, text):
3054: """urllib.quote fuer Michael"""
1.236 dwinter 3055: return urllib.quote(text)
1.200 casties 3056:
3057:
1.186 dwinter 3058: def checkResource(self,id):
1.236 dwinter 3059: """checks if a resource is in the tree, gives back none or list of resources"""
3060: if not id:
3061: id=""
3062: splitted=id.split("/")
3063: id=splitted[len(splitted)-1]
3064: if hasattr(self,"_v_checkResource") and self._v_checkResource.has_key(id): #existiert ein cache und id ist bereits drin?
3065: return self._v_checkResource[id]
3066:
3067: else:
3068: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource'],obj_ids=[id],search_sub=1)
3069:
3070: if not hasattr(self,"_v_checkResource"): self._v_checkResource={}#lege cache an falls nicht existent
3071: if resources:
3072: self._v_checkResource[id]=resources[0:] # slicing to be sure that data is stabil
3073: else:
3074: self._v_checkResource[id]=None
3075:
3076: return self._v_checkResource[id]
3077:
1.177 dwinter 3078: def sendForm(self,fromaddr,content,server='mail.mpiwg-berlin.mpg.de'):
1.236 dwinter 3079: """sendform"""
3080: toaddrs=["dwinter@mpiwg-berlin.mpg.de"]
3081:
3082: msg = ("From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n"
3083: % (fromaddr, ", ".join(toaddrs),"testsub"))
3084: server = smtplib.SMTP(server)
3085: #server.set_debuglevel(1)
3086: msg=msg+content
3087: server.sendmail(fromaddr, toaddrs, msg)
3088: server.quit()
3089:
1.167 dwinter 3090: def generateFromRDFForm(self):
1.236 dwinter 3091: """change form"""
3092: pt=zptFile(self, 'zpt/generateFromRDFForm')
3093: pt.content_type="text/html"
3094: return pt()
1.167 dwinter 3095:
3096: def generateFromRDF(self,file,startNode="/Cuneiform Corpus"):
3097:
1.236 dwinter 3098: """generate from RDF"""
3099:
3100: global seqs
3101: seqs={}
3102: global descrs
3103: descrs={}
3104: global key
3105: key=""
3106: global value
3107: value=""
3108:
3109: def getEdges(seqs,urn):
3110: """edges"""
3111: ret=[]
3112: return seqs[urn]
3113:
3114: def createSubs(self,seqs,descrs,urn,level=0):
3115: """create subs"""
3116: for edge in getEdges(seqs,urn):
3117: cn=createNode(self,descrs,edge)
3118: if cn[0]=="CDLI_group":
3119: createSubs(cn[1],seqs,descrs,cn[2],level+1)
3120: return
3121:
3122: def start_element(name,attrs):
3123:
3124: global seqs
3125: global descrs
3126: global key
3127: global value
3128: seq=""
3129: if name=="RDF:Seq":
3130: key=attrs.get('RDF:about')
3131: try: # teste ob liste
3132: x=seqs[key][0]
3133: except:
3134:
3135: seqs[key]=[]
3136:
3137:
3138: elif name=="RDF:Description":
3139: key=attrs.get('RDF:about')
3140:
3141:
3142: elif name=="RDF:li":
3143: name=attrs.get('RDF:resource')
3144: seqs[key].append(name)
3145:
3146: elif name=="ECHONAVIGATION:type":
3147: value="type"
3148:
3149: elif name=="ECHONAVIGATION:name":
3150: value="name"
3151: elif name=="ECHONAVIGATION:linkClickable":
3152: value="linkClickable"
3153:
3154: def end_element(name):
3155: """nothing"""
3156: key=""
3157: value=""
3158:
3159: def char_data(data):
3160: """nothing"""
1.165 dwinter 3161:
1.236 dwinter 3162: data=re.sub("\n","",data)
3163: try:
3164: if descrs[key].has_key(value):
3165: descrs[key][value]+=data
3166: else:
3167: descrs[key][value]=data
3168: except:
3169:
3170: descrs[key]={}
3171: descrs[key][value]=data
3172:
3173: p = xml.parsers.expat.ParserCreate()
3174:
3175: p.StartElementHandler = start_element
3176: p.EndElementHandler = end_element
3177: p.CharacterDataHandler = char_data
3178:
3179:
3180: p.ParseFile(file)
3181: self.REQUEST.RESPONSE.write("<html><body><h1>Start</h1>")
3182: createSubs(self,seqs,descrs,startNode)
3183: self.REQUEST.RESPONSE.write("<h1>done</h1></body></html>")
3184: #print "done"
1.165 dwinter 3185:
1.236 dwinter 3186:
3187: return "done"
1.165 dwinter 3188:
1.236 dwinter 3189:
1.165 dwinter 3190:
1.236 dwinter 3191:
1.163 dwinter 3192: def changeWeightsInCollection(self):
1.236 dwinter 3193: """change all lables of a collection"""
3194: ret=""
3195: argv=self.REQUEST.form
3196:
3197: resources=self.ZopeFind(self,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_link','ECHO_externalLink'])
3198: for resource in resources:
3199:
3200: try:
3201: ret+=resource[1].getId()+" "+argv[resource[1].getId()]+"</br>"
1.163 dwinter 3202: resource[1].weight=argv[resource[1].getId()][0:]
1.236 dwinter 3203: except:
3204: pass
3205: return ret
1.153 dwinter 3206:
1.163 dwinter 3207: def changeWeights(self):
1.236 dwinter 3208: """change form"""
3209: pt=zptFile(self, 'zpt/changeWeightForm')
3210: pt.content_type="text/html"
3211: return pt()
1.264 dwinter 3212:
1.153 dwinter 3213:
3214: def reloadMetaDataFromStorageWarning(self,RESPONSE=None):
1.236 dwinter 3215: """warning"""
3216: pt=zptFile(self, 'zpt/reloadMetaDataFromStorageWarning.zpt')
1.153 dwinter 3217: pt.content_type="text/html"
3218: return pt()
3219:
3220: def reloadMetaDataFromStorage(self,RESPONSE=None):
1.236 dwinter 3221: """reload MD from Storage"""
1.153 dwinter 3222:
1.236 dwinter 3223: return reloadMetaDataFromStorage(self,RESPONSE)
1.153 dwinter 3224:
1.143 dwinter 3225: def getRDF(self,urn=None):
1.236 dwinter 3226: """rdf of the collection"""
1.143 dwinter 3227:
1.236 dwinter 3228: contents=self.ZopeFind(self,obj_metatypes=['ECHO_group','ECHO_resource','ECHO_collection'])
1.141 dwinter 3229:
1.236 dwinter 3230: ret=getRDFDescription(self,self.absolute_url(),urn=urn)
3231:
3232: li="""<RDF:li RDF:resource="%s" />\n"""
3233:
3234:
3235: for content in contents:
3236: ret+=content[1].getRDF()+"\n"
3237:
3238: ret+="""<RDF:Seq RDF:about="%s">\n"""%urn
3239: for content in contents:
3240: nurn=content[1].absolute_url()
3241: ret+=li%nurn
3242: return ret+"</RDF:Seq>"
3243:
1.90 dwinter 3244:
1.130 dwinter 3245: def showContent(self,path):
1.236 dwinter 3246: """return content/html"""
3247:
3248: return ECHO_helpers.urlopen(path+"/content_html").read()
1.130 dwinter 3249:
3250: def getImageViewers(self):
3251: """images"""
3252: viewers=self.ZopeFind(self.standardImageViewer,obj_metatypes=['OSAS_ViewerObject'])
3253: return viewers
3254:
1.90 dwinter 3255:
3256: def getBibTag(self,tag,content):
1.236 dwinter 3257: """get field tag for index-meta-generation"""
3258: if not content or content=="":
3259: return ""
3260: ret="<%s>"%tag
3261: #ret+=urllib.quote(content)
3262: ret+=content
1.95 dwinter 3263:
1.236 dwinter 3264: ret+="</%s>"%tag
3265: return ret
1.90 dwinter 3266:
3267: def getValueFromClass(self,field,found):
1.260 dwinter 3268: """ret attribute if existing"""
1.236 dwinter 3269: try:
3270:
3271: return getattr(found,field).decode('ascii','ignore')
3272: except:
3273: return ""
1.210 dwinter 3274:
3275: security.declarePublic('getImageTag')
1.49 dwinter 3276: def getImageTag(self):
1.236 dwinter 3277: """needed by main_template"""
3278: return ""
1.210 dwinter 3279:
1.49 dwinter 3280: secondaryLink="" #needed by main_template
3281: secondaryLinkTitle="" #needed by main_template
3282:
1.35 dwinter 3283: def getBgcolour(self):
1.236 dwinter 3284: """hack"""
3285: return "#dddddd"
1.28 dwinter 3286:
1.217 dwinter 3287: security.declareProtected('View','contentTypeSelector_HTML')
1.28 dwinter 3288: def contentTypeSelector_HTML(self,selected=None):
3289: """give type selector"""
3290: if not selected:
3291: retStr="<option selected>\n"
3292: else:
3293: retStr="<option>\n"
3294:
1.62 dwinter 3295: try: # erste version contentTypes exists
1.73 dwinter 3296: for contentType in self.ZopeFind(self.contentTypes,obj_metatypes=["ECHO_contentType","OSAS_MetadataMapping"]):
1.28 dwinter 3297: if selected and (contentType[0]==selected):
3298: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
3299: else:
3300: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
3301: except:
1.236 dwinter 3302: try:
3303: for contentType in self.ZopeFind(self.standardMD,obj_metatypes=["OSAS_MetadataMapping"]):
3304: if selected and (contentType[0]==selected):
3305: retStr+="""<option selected value="%s">%s\n"""%(contentType[0],contentType[0])
3306: else:
3307: retStr+="""<option value="%s">%s\n"""%(contentType[0],contentType[0])
3308: except:
3309: """nothing"""
3310:
3311: return retStr
1.73 dwinter 3312:
3313: def renderingTypeSelector_HTML(self,selected=None):
3314: """give type selector"""
1.236 dwinter 3315: if not selected:
3316: retStr="<option selected>\n"
3317: else:
3318: retStr="<option>\n"
3319:
3320: try: # erste version renderingTypes exists
3321: for renderingType in self.ZopeFind(self.renderingTypes,obj_metatypes=["ECHO_renderingType"]):
3322: if selected and (renderingType[0]==selected):
3323: retStr+="""<option selected value="%s">%s\n"""%(renderingType[0],renderingType[0])
3324: else:
3325: retStr+="""<option value="%s">%s\n"""%(renderingType[0],renderingType[0])
3326: except:
3327: """nothing"""
3328: return retStr
1.73 dwinter 3329:
3330:
1.151 jdamerow 3331: def copyrightTypeSelector_HTML(self, object=None, selected=None,first=None):
1.73 dwinter 3332: """give type selector"""
1.104 dwinter 3333:
1.236 dwinter 3334: if not first:
3335: if not selected:
3336: retStr="<option selected>\n"
3337: else:
3338: retStr="<option>\n"
3339: else:
3340: if not selected:
3341: retStr="""<option selected value="%s">%s\n"""%first
3342: else:
3343: retStr="""<option value="%s">%s\n"""%first
3344:
3345:
3346: try: # erste version copyrightTypes exists
3347: for copyrightType in self.ZopeFind(self.copyrightTypes,obj_metatypes=["ECHO_copyrightType"]):
3348: if selected and (copyrightType[0]==selected):
3349: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3350: else:
3351: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3352:
3353: for copyrightTypeSelf in self.ZopeFind(object,obj_metatypes=["ECHO_copyrightType"],search_sub=1):
3354: if selected and (copyrightTypeSelf[0]==selected):
3355: retStr+="""<option selected value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
3356: else:
3357: retStr+="""<option value="%s">%s\n"""%(copyrightTypeSelf[0],copyrightTypeSelf[0])
3358:
3359: except:
3360: """nothing"""
3361:
3362: return retStr
1.98 dwinter 3363:
3364: def partnerSelector_HTML(self,selected=None):
3365: """give type selector"""
1.236 dwinter 3366: if not selected:
3367: retStr="<option selected>\n"
3368: else:
3369: retStr="<option>\n"
3370:
3371: try: # erste version copyrightTypes exists
3372: for copyrightType in self.ZopeFind(self.partners,obj_metatypes=["ECHO_partner"]):
3373: if selected and (copyrightType[0]==selected):
3374: retStr+="""<option selected value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3375: else:
3376: retStr+="""<option value="%s">%s\n"""%(copyrightType[0],copyrightType[0])
3377: except:
3378: """nothing"""
3379: return retStr
1.98 dwinter 3380:
1.195 casties 3381: mediaTypes=['all','text','images','sound','video'] # konfigurierbar in neuer version ueber echoroot??
1.98 dwinter 3382:
3383: def mediaTypeSelector_HTML(self,selected=None):
3384: """give type selector"""
1.236 dwinter 3385: if not selected:
3386: retStr="<option selected>\n"
3387: else:
3388: retStr="<option>\n"
3389:
3390: try: # erste version mediatypesTypes exists
3391: for mediaType in self.mediaTypes:
3392: if selected and (mediaType in selected):
3393: retStr+="""<option selected value="%s">%s\n"""%(mediaType,mediaType)
3394: else:
3395: retStr+="""<option value="%s">%s\n"""%(mediaType,mediaType)
3396: except:
3397: """nothing"""
3398: return retStr
1.73 dwinter 3399:
1.28 dwinter 3400:
1.27 dwinter 3401: def patchContentType(self,obj=None):
3402: """austauschen content_type with contentType (patch bei umstieg von alter Version)"""
3403:
3404:
3405: if not obj:
3406: obj = self
3407:
1.30 dwinter 3408: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_externalLink','ECHO_pageTemplate'])
1.27 dwinter 3409:
3410: for entry in entries:
1.31 dwinter 3411: setattr(entry[1],'contentType',entry[1].content_type)
3412: #entry[1].contentType == entry[1].content_type
1.27 dwinter 3413:
3414: if entry[1].meta_type == 'ECHO_collection':
3415: entry[1].patchContentType(entry[1])
1.19 dwinter 3416:
1.27 dwinter 3417:
1.49 dwinter 3418: return "changed all contenttypes in: "+self.title
1.63 dwinter 3419:
3420:
1.198 casties 3421: def repairAllCoords(self):
1.236 dwinter 3422: """updates map coordinates on the same and sublevels"""
3423: return repairCoords(self)
1.198 casties 3424:
3425:
1.63 dwinter 3426: def patchViewClassification(self,obj=None):
3427: """setze viewClassification heuristisch"""
3428:
1.236 dwinter 3429: def checkIfArrow(obj):
3430: if hasattr(obj,'coords'):
3431: for coordtemp in obj.coords:
3432:
3433: if (len(coordtemp)>4) and not (coordtemp[4]==''):
3434: return 4
3435: return None
3436: return None
3437:
1.63 dwinter 3438: if not obj:
3439: obj = self
3440:
3441: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection','ECHO_group'])
3442:
3443: for entry in entries:
1.236 dwinter 3444:
3445: if checkIfArrow(entry[1]):
3446: setattr(entry[1],'viewClassification','view point')
3447: else:
3448: setattr(entry[1],'viewClassification','area')
1.63 dwinter 3449:
3450: #entry[1].contentType == entry[1].content_type
3451:
3452: if entry[1].meta_type in ['ECHO_collection','ECHO_group']:
3453: entry[1].patchViewClassification(entry[1])
3454:
3455:
3456: return "changed all contenttypes in: "+self.title
1.166 dwinter 3457:
1.167 dwinter 3458: def deleteCache(self,obj=None,RESPONSE=None):
1.166 dwinter 3459: """setze alle collections auf cache = CacheManager"""
3460: if not obj:
3461: obj = self
1.167 dwinter 3462: entries=obj.ZopeFind(obj,search_sub=1)
1.166 dwinter 3463: for entry in entries:
1.236 dwinter 3464: if hasattr(entry[1],'_v_hash'):
3465: entry[1]._v_hash=None
1.166 dwinter 3466:
3467: return "changed all CM in: "+self.title
1.167 dwinter 3468:
1.166 dwinter 3469:
1.195 casties 3470: security.declarePublic('ECHO_newViewerLink')
1.19 dwinter 3471: def ECHO_newViewerLink(self,obj=None):
3472: """change links (:86 faellt weg)"""
3473:
3474: if not obj:
3475: obj = self
3476:
3477: entries=obj.ZopeFind(obj,obj_metatypes=['ECHO_resource','ECHO_collection'])
3478:
3479: for entry in entries:
3480:
3481: if entry[1].meta_type == 'ECHO_resource':
3482:
3483: entry[1].link=re.sub('\:86','',entry[1].link)
3484:
3485: else:
3486:
3487: entry[1].ECHO_newViewerLink(entry[1])
3488:
3489: return "Rerenderd all links to resources in: "+self.title
1.1 casties 3490:
3491: def __init__(self,id,title):
3492: """init"""
3493: self.id = id
3494: self.title=title
1.13 dwinter 3495:
1.14 dwinter 3496: def deleteSpace(self,str):
3497: """delete space at the end of a line"""
3498: if str[len(str)-1]==" ":
3499: return str[0:len(str)-1]
3500: else:
3501: return str
3502:
3503:
3504:
3505: # zusaetliche methoden fuer das vlp muessen in ein eigenes produkt
3506:
3507: def formatAscii(self,str,url=None):
3508: """ersetze ascii umbrueche durch <br>"""
3509: #url=None
3510: if url:
3511:
3512: retStr=""
3513: words=str.split("\n")
3514:
3515: for word in words:
3516: strUrl=url%word
1.91 dwinter 3517:
1.14 dwinter 3518: retStr+="""<a href="%s">%s</a><br/>"""%(strUrl,word)
3519: str=retStr
3520: if str:
3521: return re.sub(r"[\n]","<br/>",str)
3522: else:
3523: return ""
3524:
1.239 dwinter 3525: link2html=vlp_xmlhelpers.link2html
1.91 dwinter 3526:
1.239 dwinter 3527: xml2html=vlp_xmlhelpers.xml2html
3528:
3529: checkRef=vlp_xmlhelpers.checkRef
3530:
3531: # def checkRef(self,ref):
3532: # if ref[0:3]=='lit':
3533: # if len(self.library_data({ 'id':ref}))>0:
3534: # return 1
3535: # try:
3536: # if ref[0:7]=="tec_cat":
3537: # return 1
3538: # except:
3539: # """nothing"""
3540: #
3541: # dbs={'vl_technology':'','vl_people':" AND complete='yes'",'vl_sites':''}
3542: # res=None
3543: # for db in dbs.keys():
3544: # res=res or self.search(var=str("select reference from %s where reference =\'%s\' %s"%(db,ref,dbs[db])))
3545: # return res
3546: #
3547: # #Ende Methode fuer vlp
1.14 dwinter 3548:
1.13 dwinter 3549: def PgQuoteString(self,string):
3550: """Quote string"""
1.91 dwinter 3551:
1.13 dwinter 3552: return libpq.PgQuoteString(string)
1.217 dwinter 3553:
3554: security.declareProtected('View','getPartners')
1.1 casties 3555: def getPartners(self):
3556: """Get list of Partners. Presently only from a subfolder partners"""
1.236 dwinter 3557: if hasattr(self,'partners'):
1.272 ! dwinter 3558: ret = [ item[1] for item in self.partners.ZopeFind(self.partners,obj_metatypes=['ECHO_partner'])]
! 3559: def sort_title(one, another) : return cmp(one.title, another.title)
! 3560: ret.sort(sort_title)
! 3561: return ret
1.236 dwinter 3562: else:
3563: return []
1.157 jdamerow 3564:
3565: def getInstitutions(self):
3566: """Get list of Partners. Presently only from a subfolder partners"""
3567:
3568: return [ item[1] for item in self.institutions.ZopeFind(self.institutions,obj_metatypes=['ECHO_institution'])]
1.1 casties 3569:
1.157 jdamerow 3570:
1.26 dwinter 3571: def getPartnersXML(self):
3572: """partner liste als xml"""
3573: partners=self.getPartners()
1.60 dwinter 3574: ret="""<?xml version="1.0" encoding="utf-8" ?>
1.236 dwinter 3575: <partners>"""
1.60 dwinter 3576:
1.236 dwinter 3577: for partner in partners:
1.172 dwinter 3578: ret+="""<partner id="%s" title="%s"/>\n"""%(partner.getId(),partner.title)
1.26 dwinter 3579:
3580: return ret+"\n</partners>"
1.24 dwinter 3581:
1.1 casties 3582: def getCollectionTree(self):
3583: """get the collection tree (list of triples (parent,child, depth)"""
3584:
3585: def getCollection(object,depth=0):
3586: depth+=1
3587: collections=[]
3588: for entry in object.__dict__.keys():
3589: element=getattr(object,entry)
3590: try:
3591: if element.meta_type=="ECHO_collection":
3592: collections.append((object,element,depth))
3593: collections+=getCollection(element,depth)
3594: except:
3595: """nothing"""
3596: return collections
3597:
3598:
3599: return getCollection(self)
3600:
3601: def getCollectionTreeIds(self):
3602: """Show the IDs of the Tree"""
3603: ret=[]
3604: for collection in self.getCollectionTree():
3605: ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
3606: return ret
3607:
1.82 dwinter 3608: def getResourcesHTML(self,viewerType=None,filter=None):
1.236 dwinter 3609: """gebe all ressourcen aus"""
1.81 dwinter 3610:
1.236 dwinter 3611: def sortHTML(x,y):
3612: return cmp(x[1].title,y[1].title)
3613:
3614: ret="""<html><body><h2>Resources in ECHO</h3>"""
3615:
3616: resources = self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1)
3617: ret+="""<h3>Found %i resources</h3>"""%len(resources)
3618: resources.sort(sortHTML)
3619: for resource in resources:
3620: echo_url=resource[1].absolute_url()
3621:
3622: if hasattr(resource[1],'title'):
3623: title=resource[1].title
3624: else:
3625: title="None"
3626: if filter:
3627: if re.search(filter,title):
3628: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
3629: else:
3630: ret+="""\n<p><a href="%s">%s</a></p>"""%(echo_url,title)
3631:
3632: ret +="""\n</body></html>"""
3633:
3634: #self.REQUEST.RESPONSE.setHeader("Content-Type", "text/html")
3635: #self.REQUEST.RESPONSE.write(ret)
3636: return ret
1.82 dwinter 3637:
1.81 dwinter 3638: def getResourcesXML(self,viewerType=None,filter=None):
1.236 dwinter 3639: """gebe all ressourcen aus"""
3640: ret="""<?xml version="1.0" ?>
3641: <index>"""
3642: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3643:
3644: echo_url=resource[1].absolute_url()
3645: if hasattr(resource[1],'link'):
3646: viewer_url=resource[1].link
3647: else:
3648: viewer_url="NO URL"
3649: if filter:
3650: if re.search(filter,viewer_url):
3651: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3652: else:
3653: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3654: ret +="""\n</index>"""
3655:
3656: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3657: self.REQUEST.RESPONSE.write(ret)
1.83 dwinter 3658:
3659: def getFullTextsXML(self,viewerType=None,filter=None):
1.236 dwinter 3660: """gebe all ressourcen aus"""
3661: ret="""<?xml version="1.0" ?>
3662: <index>"""
3663: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3664:
3665: echo_url=resource[1].absolute_url()
3666: if resource[1].getFullTextXML(noredirect="yes"):
3667: if hasattr(resource[1],'link'):
3668: viewer_url=echo_url+"/getFullTextXML"
3669: else:
3670: viewer_url="NO URL"
3671: if filter:
3672: if re.search(filter,viewer_url):
3673: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3674: else:
3675: ret+="""\n<resource echoLink="%s" viewerLink="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(viewer_url,safe='/:?'))
3676: ret +="""\n</index>"""
3677:
3678:
3679: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3680: self.REQUEST.RESPONSE.write(ret)
1.108 dwinter 3681:
3682:
1.109 dwinter 3683: def getMetaDatasXML(self,viewerType=None,filter=None):
1.236 dwinter 3684: """gebe all ressourcen aus"""
3685: # check if the request's host part was OK
3686: http_host = self.REQUEST['HTTP_HOST']
3687: host_port = self.REQUEST['SERVER_PORT']
3688: fix_host = None
3689: if http_host and http_host.rfind(host_port) == -1:
3690: print "HTTP_HOST needs fixing!"
3691: fix_host = http_host + ":" + host_port
3692:
3693: ret="""<?xml version="1.0" ?>
3694: <index>"""
3695: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3696:
3697: echo_url=resource[1].absolute_url()
3698: if fix_host:
3699: #print "replacing ", http_host, " by ", fix_host
3700: echo_url = string.replace(echo_url, http_host, fix_host, 1)
3701:
3702: if hasattr(resource[1],'link'):
3703: meta_url=echo_url+"/getMetaDataXML"
3704: else:
3705: meta_url="NO_URL"
3706:
3707: if filter and not re.search(filter,viewer_url):
3708: continue
3709:
3710: #modificationDate=time.strptime(str(resource[1].bobobase_modification_time()),"%Y/%m/%d %H:%M:%S %Z")
3711:
3712: modificationDate=resource[1].bobobase_modification_time().strftime("%Y/%m/%d %H:%M:%S")
3713:
3714: ret+="""\n<resource resourceLink="%s" metaLink="%s" modificationDate="%s"/>"""%(urllib.quote(echo_url,safe='/:?'),urllib.quote(meta_url,safe='/:?'),modificationDate)
3715:
3716:
3717: ret +="""\n</index>"""
1.170 casties 3718:
1.236 dwinter 3719: self.REQUEST.RESPONSE.setHeader("Content-Type", "text/xml")
3720: self.REQUEST.RESPONSE.write(ret)
1.108 dwinter 3721:
1.236 dwinter 3722:
3723: def findPartners(self):
1.106 jdamerow 3724: """find all partners in partners"""
1.107 jdamerow 3725: par=self.ZopeFind(self.partners, obj_metatypes='ECHO_partner')
1.106 jdamerow 3726: return par
1.114 jdamerow 3727:
3728: def getPartnerFromID(self):
3729: """find partner form ID return object"""
1.115 jdamerow 3730: pa=self.REQUEST['partner']
1.116 jdamerow 3731: par=self.ZopeFind(self.partners, obj_ids=[pa])
1.114 jdamerow 3732: return par
1.117 jdamerow 3733:
3734: def getPartnerFromIDParameter(self, id):
3735: """ find partners from ID"""
3736: par=self.ZopeFind(self.partners, obj_ids=[id])
3737: return par
1.157 jdamerow 3738:
3739: def getInstitutionFromID(self,id):
3740: """ find institution from id """
3741: inst=self.ZopeFind(self.institutions, obj_ids=[id])
3742: return inst
1.108 dwinter 3743:
1.264 dwinter 3744: def updateResourceCatalog(self,REQUEST,RESPONSE):
3745: """update ressource catalog"""
3746: catalog=getattr(self,'resourceCatalog',None)
3747: if not catalog:
3748: return """<html><body><h3>No resourceCatalog available</h3></body></html>"""
3749:
3750: else:
1.267 dwinter 3751: class element:
3752: def __init__(self,group,name):
3753: self.group=group
3754: self.name=name
3755: catalog.manage_delObjects('author splitter')
3756: #elements=[element('Stop Words',""" Don't remove stop words' """),element('Word Splitter','ECHO author splitter')]
3757: elements=[element('Word Splitter','ECHO author splitter')]
3758: manage_addLexicon(catalog,id="author splitter",elements=elements)
3759:
1.264 dwinter 3760: return catalog.manage_catalogReindex(REQUEST,RESPONSE,'manage_main')
3761:
3762:
1.265 dwinter 3763: def checkMetaDataLinks(self,correct=None):
3764: """check all metadatalinks and if correct is set change the servername to content.mpiwg-berlin.mpg.de"""
3765:
3766: self.REQUEST.RESPONSE.write("<html><body>")
3767: for resource in self.ZopeFind(self,obj_metatypes=['ECHO_resource'],search_sub=1):
3768: metalink=resource[1].metalink
1.1 casties 3769:
1.265 dwinter 3770: try:
3771: url=urllib.urlopen(metalink)
3772: except:
3773:
3774: self.REQUEST.RESPONSE.write("<p>ERROR (opening %s):"%resource[1].absolute_url() +" -- %s %s <br>"%sys.exc_info()[0:2])
3775: self.REQUEST.RESPONSE.write("-----------%s"%metalink)
3776:
3777: if correct:
3778: urlparsed=[x for x in urlparse.urlparse(metalink)]
3779: urlparsed[1]="content.mpiwg-berlin.mpg.de"
3780: neu=urlparse.urlunparse(urlparsed)
3781: resource[1].metalink=neu[0:]
3782: self.REQUEST.RESPONSE.write("----------changed to:%s)"%neu)
3783:
1.13 dwinter 3784: def manage_addECHO_root(self,id,title,RESPONSE=None):
1.1 casties 3785: """Add an ECHO_root"""
3786: self._setObject(id,ECHO_root(id,title))
3787:
3788: if RESPONSE is not None:
3789: RESPONSE.redirect('manage_main')
3790:
1.13 dwinter 3791: def manage_addECHO_rootForm(self):
1.1 casties 3792: """Nothing yet"""
1.195 casties 3793: pt=zptFile(self, 'zpt/AddECHO_root.zpt')
1.1 casties 3794: return pt()
1.93 dwinter 3795:
1.189 dwinter 3796: class ECHO_copyrightType(Folder,ECHO_basis):
1.236 dwinter 3797: """copyright typ"""
1.93 dwinter 3798:
1.236 dwinter 3799: meta_type="ECHO_copyrightType"
3800:
3801: def __init__(self,id,title,label,url):
3802: """init"""
3803: self.id=id
3804: self.title=title
3805: self.label=label
3806: self.url=url
1.93 dwinter 3807:
1.236 dwinter 3808: manage_options = Folder.manage_options+(
1.93 dwinter 3809: {'label':'Main Config','action':'ECHO_copyrightType_config_mainForm'},
1.236 dwinter 3810: )
1.93 dwinter 3811:
1.236 dwinter 3812: def ECHO_copyrightType_config_mainForm(self):
3813: """change form"""
3814: pt=zptFile(self, 'zpt/ChangeECHO_copyrightType')
3815: pt.content_type="text/html"
3816: return pt()
3817:
3818: def ECHO_copyrightType_config_main(self,title,label,url,RESPONSE=None):
3819: """change"""
3820: self.title=title
3821: self.label=label
3822: self.url=url
1.93 dwinter 3823:
1.236 dwinter 3824: if RESPONSE is not None:
3825: RESPONSE.redirect('manage_main')
1.93 dwinter 3826:
3827: def manage_addECHO_copyrightTypeForm(self):
3828: """Form for adding a ressource"""
1.195 casties 3829: pt=zptFile(self, 'zpt/AddECHO_copyrightTypeForm.zpt')
1.93 dwinter 3830: return pt()
3831:
3832:
1.119 jdamerow 3833: def manage_addECHO_copyrightType(self,id,title,label,url,RESPONSE=None):
1.93 dwinter 3834: """addaresource"""
3835:
1.119 jdamerow 3836: newObj=ECHO_copyrightType(id,title,label,url)
1.93 dwinter 3837:
3838: self._setObject(id,newObj)
3839:
3840: if RESPONSE is not None:
3841: RESPONSE.redirect('manage_main')
3842:
3843:
1.1 casties 3844:
3845:
1.189 dwinter 3846: class ECHO_linkList(ZopePageTemplate,ECHO_basis):
1.157 jdamerow 3847: """LinkList Objekt"""
3848: meta_type="ECHO_linkList"
3849:
3850: _default_content_fn = os.path.join(package_home(globals()), 'html/ECHO_pageTemplateDefault.html')
3851:
3852: manage_options = ZopePageTemplate.manage_options+(
3853: {'label':'Main Config','action':'changeECHO_linkListWeightForm'},
3854: )
3855:
3856: def content_html(self):
1.236 dwinter 3857: """content_html"""
3858: return ECHO_basis.content_html(self,'pageTemplate')
1.157 jdamerow 3859:
3860: def changeECHO_linkListWeightForm(self):
3861: """change"""
1.195 casties 3862: pt=zptFile(self, 'zpt/ChangeECHO_linkListTemplate.zpt')
1.157 jdamerow 3863: return pt()
3864:
3865: def changeECHO_linkListWeight(self,contentType,label,RESPONSE=None):
3866: """change"""
3867: self.contentType=contentType
3868: self.label=label
3869:
3870: if RESPONSE is not None:
3871: RESPONSE.redirect('manage_main')
3872:
3873: def getLabel(self):
3874: if hasattr(self,'label'):
3875: return self.label.encode('utf-8')
3876: else:
3877: return 0
3878:
3879: def getcontentType(self):
3880: """get contentType"""
3881: if hasattr(self,'contentType'):
3882: return self.contentType
3883: else:
3884: return 0
3885:
3886: def __init__(self, id, label, title=None, text=None, contentType=None):
3887: self.id = str(id)
3888: self.title=title
3889: self.label=label
3890: self.ZBindings_edit(self._default_bindings)
3891: if text is None:
3892: text = ''
3893: self.pt_edit(text, contentType)
3894:
3895:
3896:
3897:
3898: def manage_addECHO_linkListForm(self):
3899: """Form for adding"""
1.195 casties 3900: pt=zptFile(self, 'zpt/AddECHO_linkListTemplate.zpt')
1.157 jdamerow 3901: return pt()
3902:
3903:
3904: def manage_addECHO_linkList(self, id, label,contentType=0,title=None, text=None,
3905: REQUEST=None, submit=None):
3906: """Add a LinkList with optional file content."""
3907:
3908: id = str(id)
3909: if REQUEST is None:
3910: self._setObject(id, ECHO_linkList(id, label, text))
3911: ob = getattr(self, id)
3912: setattr(ob,'contentType',contentType)
3913: if title:
3914: ob.pt_setTitle(title)
3915: return ob
3916: else:
3917: file = REQUEST.form.get('file')
3918: headers = getattr(file, 'headers', None)
3919: if (headers is None) or (not file.filename):
3920: zpt = ECHO_linkList(id, file)
3921: else:
3922: zpt = ECHO_linkList(id, label,'', file, headers.get('contentType'))
3923:
3924: self._setObject(id, zpt)
3925: ob = getattr(self, id)
3926: if title:
3927: ob.pt_setTitle(title)
3928:
3929: try:
3930: u = self.DestinationURL()
3931: except AttributeError:
3932: u = REQUEST['URL1']
3933:
3934: if submit == " Add and Edit ":
1.195 casties 3935: u = "%s/%s" % (u, urllib.quote(id))
1.157 jdamerow 3936: REQUEST.RESPONSE.redirect(u+'/manage_main')
3937: return ''
3938:
3939:
1.189 dwinter 3940: class ECHO_support(Folder,ECHO_basis):
1.236 dwinter 3941: """gefoerdert durch"""
3942: meta_type="ECHO_support"
3943:
3944:
3945:
3946: def __init__(self,id,institutions=None):
3947: """init"""
3948: self.id=id
3949: self.title=''
3950: self.institutions=toList(institutions)
3951:
3952: def getSupporter(self):
3953: """return institutions"""
3954: if self.institutions:
3955: return self.institutions
3956: else:
3957: return []
3958:
3959: manage_options = Folder.manage_options+(
3960: {'label':'Main Config','action':'ECHO_support_configForm'},
3961: )
3962:
3963: def ECHO_support_configForm(self):
3964: """change form"""
3965: pt=zptFile(self, 'zpt/ChangeECHO_support')
3966: pt.content_type="text/html"
3967: return pt()
3968:
3969: def ECHO_support_config(self,institutions=None,RESPONSE=None):
3970: """change"""
3971: self.institutions=toList(institutions)
1.157 jdamerow 3972:
1.236 dwinter 3973: if RESPONSE is not None:
3974: RESPONSE.redirect('manage_main')
1.157 jdamerow 3975:
1.236 dwinter 3976:
1.157 jdamerow 3977: def manage_addECHO_supportForm(self):
3978: """Form for adding"""
1.195 casties 3979: pt=zptFile(self, 'zpt/AddECHO_support.zpt')
1.157 jdamerow 3980: return pt()
3981:
1.159 jdamerow 3982: def manage_addECHO_support(self, id,institutions=None,RESPONSE=None):
1.236 dwinter 3983: """add the copyright"""
1.157 jdamerow 3984:
1.236 dwinter 3985: meta_type="ECHO_support"
3986:
3987:
3988: self._setObject(id, ECHO_support(id,institutions))
3989:
3990: if RESPONSE is not None:
3991: RESPONSE.redirect('manage_main')
3992:
1.272 ! dwinter 3993: # ECHO - owner of original
! 3994: class ECHO_ownerOriginal(Folder,ECHO_basis):
! 3995: """besitzer des originals"""
! 3996: meta_type="ECHO_ownerOriginal"
! 3997: security=ClassSecurityInfo()
! 3998:
! 3999:
! 4000: def __init__(self,id,institutions=None):
! 4001: """init"""
! 4002: self.id=id
! 4003: self.title=''
! 4004: self.institutions=toList(institutions)
! 4005:
! 4006: security.declarePublic('getOwner')
! 4007: def getOwner(self):
! 4008: """return institutions"""
! 4009: if self.institutions:
! 4010: return self.institutions
! 4011: else:
! 4012: return []
! 4013:
! 4014: manage_options = Folder.manage_options+(
! 4015: {'label':'Main Config','action':'ECHO_ownerOriginal_configForm'},
! 4016: )
! 4017:
! 4018: def ECHO_ownerOriginal_configForm(self):
! 4019: """change form"""
! 4020: pt=zptFile(self, 'zpt/ChangeECHO_ownerOriginal')
! 4021: pt.content_type="text/html"
! 4022: return pt()
! 4023:
! 4024: def ECHO_ownerOriginal_config(self,institutions=None,RESPONSE=None):
! 4025: """change"""
! 4026: self.institutions=toList(institutions)
! 4027:
! 4028: if RESPONSE is not None:
! 4029: RESPONSE.redirect('manage_main')
! 4030:
! 4031:
! 4032: def manage_addECHO_ownerOriginalForm(self):
! 4033: """Form for adding"""
! 4034: pt=zptFile(self, 'zpt/AddECHO_ownerOriginal.zpt')
! 4035: return pt()
! 4036:
! 4037: def manage_addECHO_ownerOriginal(self, id,institutions=None,RESPONSE=None):
! 4038: """add the copyright"""
! 4039:
! 4040: meta_type="ECHO_ownerOriginal"
! 4041:
! 4042:
! 4043: self._setObject(id, ECHO_ownerOriginal(id,institutions))
! 4044:
! 4045: if RESPONSE is not None:
! 4046: RESPONSE.redirect('manage_main')
! 4047:
! 4048: # --------------------------------------------------------------------------------
! 4049:
! 4050: # ECHO - digitized copy by
! 4051: class ECHO_digiCopyBy(Folder,ECHO_basis):
! 4052: """besitzer des originals"""
! 4053: meta_type="ECHO_digiCopyBy"
! 4054: security=ClassSecurityInfo()
! 4055:
! 4056:
! 4057: def __init__(self,id,institutions=None):
! 4058: """init"""
! 4059: self.id=id
! 4060: self.title=''
! 4061: self.institutions=toList(institutions)
! 4062:
! 4063: security.declarePublic('getDigiCopyBy')
! 4064: def getDigiCopyBy(self):
! 4065: """return institutions"""
! 4066: if self.institutions:
! 4067: return self.institutions
! 4068: else:
! 4069: return []
! 4070:
! 4071: manage_options = Folder.manage_options+(
! 4072: {'label':'Main Config','action':'ECHO_digiCopyBy_configForm'},
! 4073: )
! 4074:
! 4075: def ECHO_digiCopyBy_configForm(self):
! 4076: """change form"""
! 4077: pt=zptFile(self, 'zpt/ChangeECHO_digiCopyBy')
! 4078: pt.content_type="text/html"
! 4079: return pt()
! 4080:
! 4081: def ECHO_digiCopyBy_config(self,institutions=None,RESPONSE=None):
! 4082: """change"""
! 4083: self.institutions=toList(institutions)
! 4084:
! 4085: if RESPONSE is not None:
! 4086: RESPONSE.redirect('manage_main')
! 4087:
! 4088:
! 4089: def manage_addECHO_digiCopyByForm(self):
! 4090: """Form for adding"""
! 4091: pt=zptFile(self, 'zpt/AddECHO_digiCopyBy.zpt')
! 4092: return pt()
! 4093:
! 4094: def manage_addECHO_digiCopyBy(self, id,institutions=None,RESPONSE=None):
! 4095: """add the copyright"""
! 4096:
! 4097: meta_type="ECHO_digiCopyBy"
! 4098:
! 4099:
! 4100: self._setObject(id, ECHO_digiCopyBy(id,institutions))
! 4101:
! 4102: if RESPONSE is not None:
! 4103: RESPONSE.redirect('manage_main')
! 4104:
! 4105: # --------------------------------------------------------------------------------
1.157 jdamerow 4106:
1.189 dwinter 4107: class ECHO_institution(Image,Persistent,ECHO_basis):
1.157 jdamerow 4108: """ECHO Institution"""
4109:
4110: meta_type="ECHO_institution"
4111:
4112: def __init__(self, id, title,url, file, person, email, country, content_type='', precondition=''):
4113: self.__name__=id
4114: self.title=title
4115: self.url=url
4116: self.person=person
4117: self.email=email
4118: self.country=country
4119: self.precondition=precondition
4120: data, size = self._read_data(file)
4121: content_type=self._get_content_type(file, data, id, content_type)
4122: self.update_data(data, content_type, size)
4123:
4124: manage_options = Image.manage_options+(
4125: {'label':'Institution Information','action':'ECHO_institution_config'},
4126: )
4127:
4128:
4129: def changeECHO_institution(self,url,person, email, country,RESPONSE=None):
4130: """Change main information"""
4131: self.url=url
4132: self.person=person
4133: self.email=email
4134: self.country=country
4135: if RESPONSE is not None:
4136: RESPONSE.redirect('manage_main')
4137:
4138:
4139:
4140: def ECHO_institution_config(self):
4141: """Main configuration"""
4142: if not hasattr(self,'url'):
4143: self.url=""
1.195 casties 4144: pt=zptFile(self, 'zpt/ChangeECHO_institution.zpt')
1.157 jdamerow 4145: return pt()
4146:
4147:
4148: manage_addECHO_institutionForm=DTMLFile('dtml/ECHO_institutionAdd',globals(),
4149: Kind='ECHO_institution',kind='ECHO_institution')
4150:
4151:
1.1 casties 4152:
1.157 jdamerow 4153: def manage_addECHO_institution(self, id, url, person, email, country, file=None, title='', precondition='', content_type='',
4154: REQUEST=None):
4155: """
4156: Add a new ECHO_institution object.
4157:
4158: Creates a new ECHO_institution object 'id' with the contents of 'file'.
4159: Based on Image.manage_addImage
4160: """
4161:
4162: id=str(id)
4163: title=str(title)
4164: content_type=str(content_type)
4165: precondition=str(precondition)
4166:
4167: id, title = OFS.Image.cookId(id, title, file)
4168:
4169: self=self.this()
4170:
4171: # First, we create the image without data:
4172: self._setObject(id, ECHO_institution(id,title,url,'', person, email, country, content_type, precondition))
4173:
4174: # Now we "upload" the data. By doing this in two steps, we
4175: # can use a database trick to make the upload more efficient.
4176: if file:
4177: self._getOb(id).manage_upload(file)
4178: if content_type:
4179: self._getOb(id).content_type=content_type
4180:
4181: if REQUEST is not None:
4182: try: url=self.DestinationURL()
4183: except: url=REQUEST['URL1']
4184: REQUEST.RESPONSE.redirect('%s/manage_main' % url)
1.160 dwinter 4185: return id
1.188 dwinter 4186:
1.198 casties 4187: def repairCoords(self):
1.236 dwinter 4188: """updates map coordinates to new MapArea objects"""
4189: msg = ""
4190: for cols in self.ZopeFind(self, obj_metatypes=['ECHO_collection','ECHO_resource'], search_sub=1):
4191: col = cols[1]
4192: if not hasattr(col, 'coords'):
4193: continue
4194: print "fixing: ", col.id
4195: msg += "fixing: "+col.id+"\n"
4196: coords = col.coords
1.237 dwinter 4197: if len(coords) > 0:
1.236 dwinter 4198: # delete old MapAreas
4199: for areas in self.ZopeFind(col, obj_metatypes=['MapArea']):
4200: #area = areas[1]
4201: id = areas[0]
4202: print " deleting: ", id
4203: msg += " deleting: "+id+"\n"
4204: col._delObject(id)
4205: # add new MapAreas
4206: areacnt = 0
4207: for coord in coords:
4208: if len(coord) < 4:
4209: continue
4210: type = col.viewClassification
4211: if type == 'view point':
4212: type = 'arrow'
4213: if type is None:
4214: if len(coord) > 4:
4215: type = 'arrow'
4216: else:
4217: type = 'area'
4218: newid = "a%02d"%areacnt
4219: areacnt += 1
4220: area = MapArea(newid, coord, type=type)
4221: print " adding: ", newid
4222: msg += " adding: "+newid+"\n"
4223: col.addMapArea(area)
4224: msg += "\nDone!"
4225: return msg
1.268 dwinter 4226:
4227: from ECHO_Nav import ECHO_navigation
4228:
4229: class ECHO_main(ECHO_root,ECHO_navigation):
4230: """echo main object combines ECHO_root and ECHO_navigation"""
4231:
4232: meta_type="ECHO_main"
4233:
4234: def __init__(self,id,title):
4235: """init"""
4236: self.id=id
4237: self.title=title
4238: self.pathToHierarchy="/"+self.id # hierarchie always starts with the object.
4239: self.displayedMetaTypes=displayTypes
4240:
4241:
4242: manage_options = Folder.manage_options+(
4243: {'label':'Main Config','action':'ECHO_navigationConfigForm'},
4244: {'label':'Cache','action':'ECHO_cacheManageForm'},
4245: {'label':'Main Config','action':'ECHO_copyright_configForm'},
4246: {'label':'Reload Metadata','action':'reloadMetaDataFromStorageWarning'},
4247: {'label':'Change Weights','action':'changeWeights'},
4248: {'label':'Generate from RDF','action':'generateFromRDFForm'},
4249: {'label':'update Resource Catalog','action':'updateResourceCatalog'},
4250: {'label':'Copy MD for indexing and search','action':'copySearchFields'},
4251: )
4252:
4253:
4254: def manage_addECHO_mainForm(self):
4255: """Form for adding"""
4256: pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','AddECHO_main.zpt')).__of__(self)
4257: return pt()
4258:
4259: def manage_addECHO_main(self,id,title,RESPONSE=None):
4260: """Add an ECHO_main"""
4261: self._setObject(id,ECHO_main(id,title))
4262:
4263: obj=self._getOb(id)
4264: text=file(os.path.join(package_home(globals()),'zpt','main_template')).read()
4265:
4266: manage_addPageTemplate(obj,'main_template',text=text)
4267:
4268:
4269: if RESPONSE is not None:
4270: RESPONSE.redirect('manage_main')
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>