Annotation of ECHO_content/ECHO_collection.py.~1.10.~, revision 1.1

1.1     ! dwinter     1: 
        !             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: """
        !            12: import string
        !            13: import OFS.Image
        !            14: from types import *
        !            15: from OFS.Image import Image
        !            16: from Globals import DTMLFile
        !            17: from OFS.Folder import Folder
        !            18: from OFS.SimpleItem import SimpleItem
        !            19: from AccessControl import ClassSecurityInfo
        !            20: from Globals import InitializeClass
        !            21: from Globals import DTMLFile
        !            22: from Products.PageTemplates.PageTemplateFile import PageTemplateFile
        !            23: from Products.PageTemplates.PageTemplate import PageTemplate
        !            24: from Globals import Persistent
        !            25: from Acquisition import Implicit
        !            26: 
        !            27: 
        !            28: import urllib
        !            29: import xml.dom.minidom
        !            30: 
        !            31: 
        !            32: #List of different types for the graphical linking viewer
        !            33: viewClassificationListMaster=['view point','area']
        !            34: 
        !            35: 
        !            36: def toList(field):
        !            37:     """Einzelfeld in Liste umwandeln"""
        !            38:     if type(field)==StringType:
        !            39:         return [field]
        !            40:     else:
        !            41:         return field
        !            42:     
        !            43: def getText(nodelist):
        !            44: 
        !            45:     rc = ""
        !            46:     for node in nodelist:
        !            47:        if node.nodeType == node.TEXT_NODE:
        !            48:            rc = rc + node.data
        !            49:     return rc
        !            50: 
        !            51: 
        !            52: def readMetadata(url):
        !            53:     """Methoden zum Auslesen der Metadateninformation zu einer Resource
        !            54:     Vorerst noch Typ bib"""
        !            55:     
        !            56:     metadict={}
        !            57:     try:
        !            58:         geturl=""
        !            59:         for line in urllib.urlopen(url).readlines():
        !            60:             geturl=geturl+line
        !            61:         
        !            62:         
        !            63:     except:
        !            64:         return (None,"Cannot open: "+url)
        !            65: 
        !            66:     try:
        !            67:         dom=xml.dom.minidom.parseString(geturl)
        !            68:     except:
        !            69:         return (None,"Cannot parse: "+url+"<br>"+geturl)
        !            70: 
        !            71:     metanode=dom.getElementsByTagName('bib')
        !            72:     metadict['bib_type']='Book'
        !            73:     if len(metanode)==0:
        !            74:         metanode=dom.getElementsByTagName('archimedes')
        !            75:         metadict['bib_type']='Archimedes'
        !            76:         #print "HELLO"
        !            77:         
        !            78:     if not len(metanode)==0:    
        !            79:         metacontent=metanode[0].childNodes
        !            80:     
        !            81:         try:
        !            82:             metadict['bib_type']=getText(dom.getElementsByTagName('bib')[0].attributes['type'].childNodes)
        !            83:         except:
        !            84:             """nothing"""
        !            85:         
        !            86:         for node in metacontent:
        !            87:             try:
        !            88:                 metadict[node.tagName.lower()]=getText(node.childNodes)
        !            89:             except:
        !            90:                 """nothing"""
        !            91: 
        !            92:     #print metadict
        !            93:     return metadict,""
        !            94:     
        !            95: 
        !            96: def setECHO_CollectionInformation(self,context,science,practice,source_type,period,id,title,label,description,content_type,responsible,credits,weight,coordstrs,viewClassification=""):
        !            97: 
        !            98:         """Allegemeine Informationen zu einer ECHO Collection"""
        !            99: 
        !           100:         self.viewClassification=viewClassification
        !           101: 
        !           102:         self.label = label
        !           103:         self.title=title
        !           104:         self.description=description
        !           105:         self.content_type=content_type
        !           106:         self.responsible=responsible
        !           107:         self.credits=toList(credits)
        !           108:         self.weight=weight
        !           109: 
        !           110:         self.scientific_Information.source_type=source_type
        !           111:         self.scientific_Information.period=period
        !           112:         self.scientific_Information.scientific_Classification.context=context
        !           113:         self.scientific_Information.scientific_Classification.science=science
        !           114:         self.scientific_Information.scientific_Classification.practice=practice
        !           115:         
        !           116:         coords=[]
        !           117:         #coordinates of for rectangles
        !           118: 
        !           119:         #print "cs", coordstrs
        !           120:         if coordstrs:
        !           121:             for coordstr in coordstrs:
        !           122:                 print "cs", coordstr
        !           123:                 try:
        !           124:                     temco=coordstr.split(",")
        !           125:                 except:
        !           126:                     temco=[]
        !           127:                 #temco.append(angle)
        !           128:                 coords.append(temco)
        !           129: 
        !           130: 
        !           131:         self.coords=coords[0:]
        !           132:             
        !           133: 
        !           134: class scientificClassification(SimpleItem,Persistent,Implicit):
        !           135:     """subclass"""
        !           136:     security=ClassSecurityInfo()
        !           137:     
        !           138:     def __init__(self,context,science,practice):
        !           139:         self.context=context
        !           140:         self.science=science
        !           141:         self.practice=practice
        !           142:         self.id="scientific_Classification"
        !           143:         
        !           144:     security.declarePublic('get_context')
        !           145:     def get_context(self):
        !           146:         return self.context
        !           147:     
        !           148:     security.declarePublic('get_science')
        !           149:     def get_science(self):
        !           150:         return self.science
        !           151:         
        !           152:     security.declarePublic('get_practice')
        !           153:     def get_practice(self):
        !           154:         return self.practice
        !           155:     
        !           156:                 
        !           157: class scientificInformation(Folder,Persistent,Implicit):
        !           158:     """subclass scientificInformation"""
        !           159:     security=ClassSecurityInfo()
        !           160:     
        !           161:     
        !           162:     
        !           163:     def __init__(self,source_type,period):
        !           164: 
        !           165:         self.id="scientific_Information"
        !           166:         self.source_type=source_type
        !           167:         self.period=period
        !           168:         
        !           169: 
        !           170: 
        !           171:     security.declarePublic('get_source_type')
        !           172:     def get_source_type(self):
        !           173:         return self.source_type
        !           174:     
        !           175:     security.declarePublic('get_period')
        !           176:     def get_period(self):
        !           177:         return self.period
        !           178: 
        !           179: 
        !           180: class ECHO_resource(Folder):
        !           181:     """ECHO Ressource"""
        !           182:     meta_type='ECHO_resource'
        !           183: 
        !           184:     viewClassificationList=viewClassificationListMaster
        !           185: 
        !           186:     def getViewClassification(self):
        !           187:         if hasattr(self,'viewClassification'):
        !           188:             return self.viewClassification
        !           189:         else:
        !           190:             return ""
        !           191: 
        !           192:     def getCredits(self):
        !           193:         """Ausgabe der credits"""
        !           194:         if self.credits:
        !           195:             return self.credits
        !           196:         else:
        !           197:             return []
        !           198:     
        !           199:     def __init__(self,id,link,metalink,title,label,description,content_type,responsible,credits,weight,coords):
        !           200: 
        !           201:         self.id = id
        !           202:         """Festlegen der ID"""
        !           203:         
        !           204:         self.label = label
        !           205:         self.link= link
        !           206:         self.metalink=metalink
        !           207:         self.title=title
        !           208:         self.weight=weight
        !           209:         self.credits=toList(credits)
        !           210:         self.description=description
        !           211:         self.content_type=content_type
        !           212:         self.responsible=responsible
        !           213:         
        !           214:         if coords:
        !           215:             coordsnew=[ string.split(x,",") for x in coords]
        !           216:         else:
        !           217:             coordsnew=[]
        !           218:         
        !           219:         self.coords=coordsnew
        !           220: 
        !           221: 
        !           222:     def getCoords(self):
        !           223:         try:
        !           224:             return [string.join(x,",") for x in self.coords]  
        !           225:         except:
        !           226:             return []
        !           227: 
        !           228: 
        !           229:     def ECHO_resource_config(self):
        !           230:         """Main configuration"""
        !           231: 
        !           232:         if not hasattr(self,'weight'):
        !           233:             self.weight=""
        !           234:         if not hasattr(self,'coords'):
        !           235:             self.coords=[]
        !           236: 
        !           237:         pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_resource.zpt').__of__(self)
        !           238:         return pt()
        !           239:     
        !           240: 
        !           241:     def changeECHO_resource(self,metalink,link,context,science,practice,source_type,period,title,label,description,content_type,responsible,credits,weight,viewClassification="",coords="",RESPONSE=None):
        !           242: 
        !           243: 
        !           244:         """Änderung der Properties"""
        !           245:         
        !           246: 
        !           247:         setECHO_CollectionInformation(self,context,science,practice,source_type,period,id,title,label,description,content_type,responsible,credits,weight,coords,viewClassification)
        !           248: 
        !           249:         
        !           250:         self.link=link
        !           251:         self.metalink=metalink
        !           252:         
        !           253:         if RESPONSE is not None:
        !           254:             RESPONSE.redirect('manage_main')
        !           255:             
        !           256:             
        !           257:     manage_options = Folder.manage_options+(
        !           258:         {'label':'Main Config','action':'ECHO_resource_config'},
        !           259:         {'label':'Metadata','action':'ECHO_getResourceMD'},
        !           260:         {'label':'Graphics','action':'ECHO_graphicEntry'},
        !           261:         )
        !           262: 
        !           263:     def ECHO_graphicEntry(self):
        !           264:         """DO nothing"""
        !           265:         if 'overview' in self.aq_parent.__dict__.keys():
        !           266:             pt=PageTemplateFile('Products/ECHO_content/ECHO_draw.zpt').__of__(self)
        !           267:             return pt()
        !           268:         else:
        !           269:             return "NO OVERVIEW GRAPHICS"
        !           270: 
        !           271:     def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
        !           272:         """Enter coords"""
        !           273:         coords=self.coords
        !           274:         temco=coordstr.split(",")
        !           275:         temco.append(angle)
        !           276:         coords.append(temco)
        !           277:         
        !           278:         self.coords=coords[0:]
        !           279:         #pt=PageTemplateFile('Products/ECHO_content/ECHO_draw.zpt').__of__(self)
        !           280:         if RESPONSE is not None:
        !           281:             RESPONSE.redirect('ECHO_graphicEntry')
        !           282: 
        !           283:     def ECHO_getResourceMD(self,template="yes"):
        !           284:         """Einlesen der Metadaten und Anlegen dieser Metadaten als Informationen zur Resource"""
        !           285:         (metadict, error)=readMetadata(self.metalink)
        !           286: 
        !           287:         #print "BLA"        
        !           288: 
        !           289:         if not error=="": #Fehler beim Auslesen des Metafiles
        !           290:             return "ERROR:",error
        !           291:         for key in metadict.keys():#Hinzufügen der Felder
        !           292: 
        !           293:             setattr(self,key,metadict[key].encode('ascii','replace'))
        !           294:         
        !           295: 
        !           296:         self.metadata=metadict.keys()
        !           297:         #return "BLUccssB"
        !           298:         self.label=self.generate_label()
        !           299:         
        !           300:         if template=="yes":
        !           301:             pt=PageTemplateFile('Products/ECHO_content/ECHO_resourceMD.zpt').__of__(self)
        !           302:             return pt()
        !           303:     
        !           304:     def ECHO_getMD(self,item):
        !           305:         """Ausgabe der MD"""
        !           306:         return getattr(self,item)
        !           307:         
        !           308:     def index_html(self):
        !           309:         """standard page"""
        !           310:         
        !           311:         return self.REQUEST.RESPONSE.redirect(self.link)
        !           312: 
        !           313:     def generate_label(self):
        !           314:         """Erzeugt_standard_Label aus Template"""
        !           315:         pt=getattr(self,"label_template_"+self.bib_type)
        !           316:         #return pt
        !           317:         #pt.content_type="text/html; charset=utf-8"
        !           318:         return pt()
        !           319: 
        !           320: def manage_AddECHO_resourceForm(self):
        !           321:         """Nothing yet"""
        !           322:         pt=PageTemplateFile('Products/ECHO_content/AddECHO_resourceForm.zpt').__of__(self)
        !           323:         return pt()
        !           324: 
        !           325: 
        !           326: 
        !           327: def manage_AddECHO_resource(self,context,science,practice,source_type,period,id,title,label,description,content_type,responsible,link,metalink,credits,weight,coords=None,RESPONSE=None):
        !           328: 
        !           329: 
        !           330:     """nothing yet"""
        !           331:     scientificClassificationObj=scientificClassification(context,science,practice)
        !           332:     
        !           333:     scientificInformationObj=scientificInformation(source_type,period)
        !           334:     
        !           335: 
        !           336:     newObj=ECHO_resource(id,link,metalink,title,label,description,content_type,responsible,credits,weight,coords)
        !           337: 
        !           338:     self._setObject(id,newObj)
        !           339:     getattr(self,id)._setObject('scientific_Information',scientificInformationObj)
        !           340:     getattr(self,id).scientific_Information._setObject('scientific_Classification',scientificClassificationObj)
        !           341:     if RESPONSE is not None:
        !           342:         RESPONSE.redirect('manage_main')
        !           343:  
        !           344: 
        !           345: class ECHO_externalLink(Folder):
        !           346:     """Link zu einer externen Ressource"""
        !           347:     security=ClassSecurityInfo()
        !           348:     meta_type='ECHO_externalLink'
        !           349: 
        !           350: 
        !           351:     def __init__(self,id,link,title,label,description,content_type,responsible,credits,weight,coords):
        !           352: 
        !           353:         self.id = id
        !           354:         """Festlegen der ID"""
        !           355: 
        !           356:         self.credits=toList(credits)
        !           357:         self.label = label
        !           358:         self.link= link
        !           359:         self.title=title
        !           360:         self.weight=weight
        !           361:         self.description=description
        !           362:         self.content_type=content_type
        !           363:         self.responsible=responsible
        !           364:         coordsnew=[ string.split(x,",") for x in coords]
        !           365:         self.coords=coordsnew
        !           366: 
        !           367:     def ECHO_externalLink_config(self):
        !           368:         """Main configuration"""
        !           369: 
        !           370:         if not hasattr(self,'weight'):
        !           371:             self.weight=""
        !           372:         if not hasattr(self,'coords'):
        !           373:             
        !           374:             self.coords=['']
        !           375:             print "G",self.coords
        !           376: 
        !           377:         pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_externalLink.zpt').__of__(self)
        !           378:         return pt()
        !           379:     
        !           380: 
        !           381:     def changeECHO_externalLink(self,link,context,science,practice,source_type,period,title,label,description,content_type,responsible,credits,weight,coords,RESPONSE=None):
        !           382: 
        !           383:         """Änderung der Properties"""
        !           384:         
        !           385: 
        !           386:         setECHO_CollectionInformation(self,context,science,practice,source_type,period,id,title,label,description,content_type,responsible,credits,weight,coords)
        !           387: 
        !           388:         
        !           389:         self.link=link
        !           390:         if RESPONSE is not None:
        !           391:             RESPONSE.redirect('manage_main')
        !           392:             
        !           393:             
        !           394:     manage_options = Folder.manage_options+(
        !           395:         {'label':'Main Config','action':'ECHO_externalLink_config'},
        !           396:         )
        !           397:     
        !           398:     def index_html(self):
        !           399:         """standard page"""
        !           400:         
        !           401:         return self.REQUEST.RESPONSE.redirect(self.link)
        !           402: 
        !           403: def manage_AddECHO_externalLinkForm(self):
        !           404:         """Nothing yet"""
        !           405:         pt=PageTemplateFile('Products/ECHO_content/AddECHO_externalLinkForm.zpt').__of__(self)
        !           406:         return pt()
        !           407: 
        !           408: 
        !           409: def manage_AddECHO_externalLink(self,context,science,practice,source_type,period,id,title,label,description,content_type,responsible,link,credits,weight,coords,RESPONSE=None):
        !           410: 
        !           411:     """nothing yet"""
        !           412:     scientificClassificationObj=scientificClassification(context,science,practice)
        !           413:     
        !           414:     scientificInformationObj=scientificInformation(source_type,period)
        !           415:     
        !           416: 
        !           417:     newObj=ECHO_externalLink(id,link,title,label,description,content_type,responsible,credits,weight,coords)
        !           418: 
        !           419:     self._setObject(id,newObj)
        !           420:     getattr(self,id)._setObject('scientific_Information',scientificInformationObj)
        !           421:     getattr(self,id).scientific_Information._setObject('scientific_Classification',scientificClassificationObj)
        !           422:     if RESPONSE is not None:
        !           423:         RESPONSE.redirect('manage_main')
        !           424:  
        !           425:         
        !           426: class ECHO_collection(Folder, Persistent, Implicit):
        !           427:     """ECHO Collection"""
        !           428:     security=ClassSecurityInfo()
        !           429:     meta_type='ECHO_collection'
        !           430: 
        !           431: 
        !           432:     
        !           433:     security.declarePublic('getCreditObject')
        !           434:     def getCreditObject(self,name):
        !           435:         """credit id to credititem"""
        !           436:         return getattr(self.partners,name)
        !           437:     
        !           438:     security.declarePublic('ECHO_generateNavBar')
        !           439:     def ECHO_generateNavBar(self):
        !           440:         """Erzeuge Navigationsbar"""
        !           441:         link=""
        !           442:         object="self"
        !           443:         ret=[]
        !           444:         path=self.getPhysicalPath()
        !           445:         for element in path:
        !           446:             
        !           447:            
        !           448:             if not element=="":
        !           449:                 object+="."+element
        !           450:                 
        !           451:                 label=eval(object).label
        !           452:                 link+="/"+element
        !           453:                 if not label=="":
        !           454:                     ret.append((label,link))
        !           455:         return ret
        !           456:     
        !           457:     security.declarePublic('ECHO_rerenderLinksMD')
        !           458:     def ECHO_rerenderLinksMD(self):
        !           459:         """Rerender all Links"""
        !           460:         #print "HI"
        !           461:         #return "OK"
        !           462:         for entry in self.__dict__.keys():
        !           463:             object=getattr(self,entry)
        !           464:             
        !           465:             
        !           466:             try:
        !           467:                 
        !           468:                 if object.meta_type == 'ECHO_resource':
        !           469:                     
        !           470:                     object.ECHO_getResourceMD(template="no")
        !           471:                     
        !           472:             except:
        !           473:                 """nothing"""
        !           474:                 
        !           475:         return "Rerenderd all links to resources in: "+self.title
        !           476:     
        !           477: 
        !           478: 
        !           479:     security.declarePublic('printall')
        !           480:     def printall(self):
        !           481:             return self.scientific_information.__dict__.keys()
        !           482: 
        !           483: 
        !           484:     def getCoords(self):
        !           485:         try:
        !           486:             return [string.join(x,",") for x in self.coords]  
        !           487: 
        !           488: 
        !           489:         except:
        !           490:             return []
        !           491:         
        !           492:     def __init__(self,id,title,label,description,content_type,responsible,credits,weight,sortfield,coords):
        !           493:         #print "CO",coords
        !           494: 
        !           495:         self.id = id
        !           496:         """Festlegen der ID"""
        !           497:         self.credits=toList(credits)
        !           498:         self.label = label
        !           499:         self.title=title
        !           500:         self.description=description
        !           501:         self.content_type=content_type
        !           502:         self.responsible=responsible
        !           503: 
        !           504:         self.weight=weight
        !           505:         self.sortfield=sortfield
        !           506:         coordsnew=[ string.split(x,",") for x in coords]
        !           507:         self.coords=coordsnew
        !           508: 
        !           509: 
        !           510:     manage_options = Folder.manage_options+(
        !           511:         {'label':'Main Config','action':'ECHO_Collection_config'},
        !           512:         {'label':'Rerender Links','action':'ECHO_rerenderLinksMD'},
        !           513:         {'label':'Graphics','action':'ECHO_graphicEntry'},
        !           514: 
        !           515:         )
        !           516: 
        !           517:     def ECHO_graphicEntry(self):
        !           518:         """DO nothing"""
        !           519:         if 'overview' in self.aq_parent.__dict__.keys():
        !           520:             pt=PageTemplateFile('Products/ECHO_content/ECHO_draw.zpt').__of__(self)
        !           521:             return pt()
        !           522:         else:
        !           523:             return "NO OVERVIEW GRAPHICS"
        !           524: 
        !           525:     def ECHO_enterCoords(self,coordstr,angle="",RESPONSE=None):
        !           526:         """Enter coords"""
        !           527:         coords=self.coords
        !           528:         temco=coordstr.split(",")
        !           529:         temco.append(angle)
        !           530:         coords.append(temco)
        !           531:         self.coords=coords[0:]
        !           532:         #pt=PageTemplateFile('Products/ECHO_content/ECHO_draw.zpt').__of__(self)
        !           533:         if RESPONSE is not None:
        !           534:             RESPONSE.redirect('ECHO_graphicEntry')
        !           535: 
        !           536:     
        !           537:     security.declarePublic('ECHO_Collection_config')
        !           538:     def ECHO_Collection_config(self):
        !           539:         """Main configuration"""
        !           540: 
        !           541:         if not hasattr(self,'weight'):
        !           542:             self.weight=""
        !           543: 
        !           544:         if not hasattr(self,'sortfield'):
        !           545:             self.sortfield="weight"
        !           546:         #print "HI"
        !           547:         if not hasattr(self,'coords'):
        !           548:             self.coords=[]
        !           549: 
        !           550:         pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_Collection.zpt').__of__(self)
        !           551:         return pt()
        !           552: 
        !           553: 
        !           554:     security.declarePublic('changeECHO_Collection')
        !           555: 
        !           556: 
        !           557:     def changeECHO_Collection(self,context,science,practice,source_type,period,id,title,label,description,content_type,responsible,credits,weight,sortfield="weight",coords="",RESPONSE=None):
        !           558: 
        !           559: 
        !           560:         """Änderung der Properties"""
        !           561:         #print "HI",coords
        !           562:         coordsnew=[ string.split(x,",") for x in coords]
        !           563:         #print "HO",coordsnew
        !           564:         setECHO_CollectionInformation(self,context,science,practice,source_type,period,id,title,label,description,content_type,responsible,credits,weight,coordsnew)
        !           565: 
        !           566:         self.sortfield=sortfield
        !           567: 
        !           568:         if RESPONSE is not None:
        !           569:             RESPONSE.redirect('manage_main')
        !           570:             
        !           571:     security.declarePublic('index_html')
        !           572: 
        !           573:     showOverview=DTMLFile('ECHO_content_overview',globals())
        !           574:     
        !           575:     
        !           576:     def index_html(self):
        !           577:         """standard page"""
        !           578:         #print self.objectIDs()
        !           579:         
        !           580:         if 'index.html' in self.__dict__.keys():
        !           581:             return getattr(self,'index.html')()
        !           582:         elif 'overview' in self.__dict__.keys():
        !           583:             #print "HI"
        !           584:             return self.showOverview()
        !           585:             
        !           586:         
        !           587:         pt=PageTemplateFile('Products/ECHO_content/ECHO_content_standard.zpt').__of__(self)
        !           588:         pt.content_type="text/html"
        !           589:         return pt()
        !           590: 
        !           591: 
        !           592:     def getGraphicCoords(self):
        !           593:         """Give list of coordinates"""
        !           594:         subColTypes=['ECHO_collection','ECHO_externalLink','ECHO_resource']
        !           595:         ids=[]
        !           596:         for entry in self.__dict__.keys():
        !           597:             object=getattr(self,entry)
        !           598:             #print "OB:",object
        !           599:             
        !           600:             try:
        !           601:                 #print "MT:",object.meta_type
        !           602:                 if object.meta_type in subColTypes:
        !           603:                     #print "MT:",object.meta_type,object.getId()
        !           604:                     for coordtemp in object.coords:
        !           605:                         if len(coordtemp)>3:
        !           606:                             coord=coordtemp[0:4]
        !           607:                             if hasattr(object,'title'):
        !           608:                                 if not object.title=="":
        !           609:                                     ids.append([string.join(coord,", "),object.getId(),object.title])
        !           610:                                 else:
        !           611:                                     ids.append([string.join(coord,", "),object.getId(),object.getId()])
        !           612:                             else:
        !           613:                                 ids.append([string.join(coord,", "),object.getId(),object.getId()])
        !           614:                     
        !           615:             except:
        !           616:                 """nothing"""
        !           617:         #print "IDS",ids
        !           618:         return ids
        !           619:     
        !           620:     def getSubCols(self,sortfield="weight"):
        !           621: 
        !           622:         subColTypes=['ECHO_collection','ECHO_externalLink','ECHO_resource']
        !           623:         ids=[]
        !           624:         for entry in self.__dict__.keys():
        !           625:             object=getattr(self,entry)
        !           626:             #print "OB:",object
        !           627:             
        !           628:             try:
        !           629:                 #print "MT:",object.meta_type
        !           630:                 if object.meta_type in subColTypes:
        !           631:                     ids.append(object)
        !           632:                     
        !           633:             except:
        !           634:                 """nothing"""
        !           635:         try:
        !           636:             sortfield=self.sortfield
        !           637:         except:
        !           638:             """nothing"""
        !           639:             
        !           640:         tmplist=[]
        !           641:         for x in ids:
        !           642:             if hasattr(x,sortfield):
        !           643:                 try:
        !           644:                     x=int(x)
        !           645:                 except:
        !           646:                     """nothing"""
        !           647:                 tmp=getattr(x,sortfield)
        !           648:             else:
        !           649:                 tmp=10000000
        !           650:             tmplist.append((tmp,x))
        !           651:         tmplist.sort()
        !           652:         return [x for (key,x) in tmplist]
        !           653:      
        !           654:         
        !           655:         
        !           656:                 
        !           657:     
        !           658:     
        !           659: def manage_AddECHO_collectionForm(self):
        !           660:         """Nothing yet"""
        !           661:         pt=PageTemplateFile('Products/ECHO_content/AddECHO_collectionForm.zpt').__of__(self)
        !           662:         return pt()
        !           663: 
        !           664: 
        !           665: def manage_AddECHO_collection(self,context,science,practice,source_type,period,id,title,label,description,content_type,responsible,weight,sortfield,coords,credits=None,RESPONSE=None):
        !           666: 
        !           667:     """nothing yet"""
        !           668:     scientificClassificationObj=scientificClassification(context,science,practice)
        !           669:     
        !           670:     scientificInformationObj=scientificInformation(source_type,period)
        !           671:     
        !           672: 
        !           673:     newObj=ECHO_collection(id,title,label,description,content_type,responsible,credits,weight,sortfield,coords)
        !           674: 
        !           675:     self._setObject(id,newObj)
        !           676:     getattr(self,id)._setObject('scientific_Information',scientificInformationObj)
        !           677:     getattr(self,id).scientific_Information._setObject('scientific_Classification',scientificClassificationObj)
        !           678:     if RESPONSE is not None:
        !           679:         RESPONSE.redirect('manage_main')
        !           680: 
        !           681: class ECHO_root(Folder,Persistent,Implicit):
        !           682:     """ECHO Root Folder"""
        !           683:     meta_type="ECHO_root"
        !           684: 
        !           685:     def __init__(self,id,title):
        !           686:         """init"""
        !           687:         self.id = id
        !           688:         self.title=title
        !           689:         
        !           690:     def getPartners(self):
        !           691:         """Get list of Partners. Presently only from a subfolder partners"""
        !           692:         partnerTypes=['ECHO_partner']
        !           693:         ids=[]
        !           694:         for entry in self.partners.__dict__.keys():
        !           695:             object=getattr(self.partners,entry)
        !           696:             
        !           697:             try:
        !           698:                 
        !           699:                 if object.meta_type in partnerTypes:
        !           700:                     ids.append(object)
        !           701:                     
        !           702:             except:
        !           703:                 """nothing"""
        !           704:         return ids
        !           705: 
        !           706:     def getCollectionTree(self):
        !           707:         """get the collection tree (list of triples (parent,child, depth)"""
        !           708: 
        !           709:         def getCollection(object,depth=0):
        !           710:             depth+=1
        !           711:             collections=[]
        !           712:             for entry in object.__dict__.keys():
        !           713:                 element=getattr(object,entry)
        !           714:                 try:
        !           715:                     if element.meta_type=="ECHO_collection":
        !           716:                         collections.append((object,element,depth))
        !           717:                         collections+=getCollection(element,depth)
        !           718:                 except:
        !           719:                     """nothing"""
        !           720:             return collections
        !           721:         
        !           722: 
        !           723:         return getCollection(self)
        !           724:     
        !           725:     def getCollectionTreeIds(self):
        !           726:         """Show the IDs of the Tree"""
        !           727:         ret=[]
        !           728:         for collection in self.getCollectionTree():
        !           729:             ret.append((collection[0].getId(),collection[1].getId(),collection[2]))
        !           730:         return ret
        !           731: 
        !           732:         
        !           733:         
        !           734: def manage_AddECHO_root(self,id,title,RESPONSE=None):
        !           735:     """Add an ECHO_root"""
        !           736:     self._setObject(id,ECHO_root(id,title))
        !           737:     
        !           738:     if RESPONSE is not None:
        !           739:         RESPONSE.redirect('manage_main')
        !           740: 
        !           741: def manage_AddECHO_rootForm(self):
        !           742:         """Nothing yet"""
        !           743:         pt=PageTemplateFile('Products/ECHO_content/AddECHO_root.zpt').__of__(self)
        !           744:         return pt()
        !           745:  
        !           746: class ECHO_partner(Image,Persistent):
        !           747:     """ECHO Partner"""
        !           748: 
        !           749:     meta_type="ECHO_partner"
        !           750: 
        !           751:     def __init__(self, id, title,url, file, content_type='', precondition=''):
        !           752:         self.__name__=id
        !           753:         self.title=title
        !           754:         self.url=url
        !           755:         self.precondition=precondition
        !           756: 
        !           757:         data, size = self._read_data(file)
        !           758:         content_type=self._get_content_type(file, data, id, content_type)
        !           759:         self.update_data(data, content_type, size)
        !           760: 
        !           761:     manage_options = Image.manage_options+(
        !           762:         {'label':'Partner Information','action':'ECHO_partner_config'},
        !           763:         )
        !           764: 
        !           765:     def changeECHO_partner(self,url,RESPONSE=None):
        !           766:         """Change main information"""
        !           767:         self.url=url
        !           768:         if RESPONSE is not None:
        !           769:             RESPONSE.redirect('manage_main')
        !           770:             
        !           771:             
        !           772: 
        !           773:     def ECHO_partner_config(self):
        !           774:         """Main configuration"""
        !           775:         if not hasattr(self,'url'):
        !           776:             self.url=""
        !           777:         pt=PageTemplateFile('Products/ECHO_content/ChangeECHO_partner.zpt').__of__(self)
        !           778:         return pt()
        !           779: 
        !           780:         
        !           781: manage_AddECHO_partnerForm=DTMLFile('ECHO_partnerAdd',globals(),
        !           782:                              Kind='ECHO_partner',kind='ECHO_partner')
        !           783: 
        !           784: 
        !           785: 
        !           786: def manage_AddECHO_partner(self, id, file,url, title='', precondition='', content_type='',
        !           787:                     REQUEST=None):
        !           788:     """
        !           789:     Add a new ECHO_partner object.
        !           790: 
        !           791:     Creates a new ECHO_partner object 'id' with the contents of 'file'.
        !           792:     Based on Image.manage_addImage
        !           793:     """
        !           794: 
        !           795:     id=str(id)
        !           796:     title=str(title)
        !           797:     content_type=str(content_type)
        !           798:     precondition=str(precondition)
        !           799: 
        !           800:     id, title = OFS.Image.cookId(id, title, file)
        !           801: 
        !           802:     self=self.this()
        !           803: 
        !           804:     # First, we create the image without data:
        !           805:     self._setObject(id, ECHO_partner(id,title,url,'',content_type, precondition))
        !           806: 
        !           807:     # Now we "upload" the data.  By doing this in two steps, we
        !           808:     # can use a database trick to make the upload more efficient.
        !           809:     if file:
        !           810:         self._getOb(id).manage_upload(file)
        !           811:     if content_type:
        !           812:         self._getOb(id).content_type=content_type
        !           813: 
        !           814:     if REQUEST is not None:
        !           815:         try:    url=self.DestinationURL()
        !           816:         except: url=REQUEST['URL1']
        !           817:         REQUEST.RESPONSE.redirect('%s/manage_main' % url)
        !           818:     return id
        !           819: 
        !           820: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>