--- MPIWGWeb/MPIWGProjects.py 2004/08/10 13:27:25 1.20
+++ MPIWGWeb/MPIWGProjects.py 2012/01/06 08:23:10 1.47.2.123
@@ -1,706 +1,817 @@
"""This contains the class MPIWG Projects
-for organizing and maintaining the different projectspages
+for organizing and maintaining the different project pages
+
+$author dwinter - last change 26.06.2008
"""
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-from Products.PageTemplates.PageTemplate import PageTemplate
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
-from Products.ZSQLExtend.ZSQLExtend import ZSQLExtendFolder
-
+from Products.ZCatalog.CatalogPathAwareness import CatalogAware
+from Products.MPIWGBibliography.BibliographyManager import BibliographyManager
+from OFS.Image import Image
+from Globals import package_home
import urllib
-import MPIWGStaff
-import string
import re
+import os
+import email
from types import *
-
-import xmlhelper # Methoden zur Verwaltung der projekt xmls
+import logging
+import xmlhelper # Methoden zur Verwaltung der projekt xml
from OFS.SimpleItem import SimpleItem
from OFS.Folder import Folder
-
+from OFS.Image import Image
+from AccessControl import ClassSecurityInfo
+from AccessControl import getSecurityManager
from bibliography import *
+import time
+from OFS.Cache import Cacheable
+import xmlrpclib
+#import xml.dom.minidom
+import sys
+#from Ft.Xml.XPath import Evaluate
+#from Ft.Xml.XPath.Context import Context
+#from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print
+#from Ft.Xml import EMPTY_NAMESPACE
+#import copy
+#import updatePersonalWWW
+
+#import MPIWGStaff
+
+from MPIWGHelper import *
+
+import MPIWGRoot
+import MPIWGLink
+import MPIWGTemplate
-definedFields=['WEB_title','xdata_01','xdata_02','xdata_03','xdata_04','xdata_05','xdata_06','xdata_07','xdata_08','xdata_09','xdata_10','xdata_11','xdata_12','xdata_13','WEB_project_header','WEB_project_description','WEB_related_pub']
+# die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus Kompatibilitaetsgruenden, bleiben die Klassen hier noch drin.
+# Sonst funktionieren die alten Webseiten nicht mehr.
-checkFields = ['xdata_01']
-
-
-
-def sortF(x,y):
- try:
- return cmp(x[1],y[1])
- except:
- try:
- return cmp(str(x[1]),str(y[1]))
- except:
- print "error",x[1],y[1]
- return 0
-
-def sortI(x,y):
- xsplit=x[1].split(".")
- ysplit=y[1].split(".")
- xret=""
- yret=""
- try:
- for i in range(5):
- try:
- yret=yret+"%04i"%int(xsplit[i])
- except:
- yret=yret+"%04i"%0
+class MPIWGRoot(MPIWGRoot.MPIWGRoot):
+ """depricated"""
+
+class MPIWGLink(MPIWGLink.MPIWGLink):
+ """depricated"""
+
+class MPIWGTemplate(MPIWGTemplate.MPIWGTemplate):
+ """depricated"""
+
+class MPIWGProject_publication(Folder):
+ """publications object fuer project"""
- try:
- xret=xret+"%04i"%int(ysplit[i])
- except:
- xret=xret+"%04i"%0
-
+ meta_type="MPIWGProject_publication"
+ def redirect(self,RESPONSE,url):
+ """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen"""
+
+ timeStamp=time.time()
- return cmp(int(yret),int(xret))
- except:
- return cmp(x[1],y[1])
-
-
-class MPIWGRoot(ZSQLExtendFolder):
- """Stammordner für den Web-Server"""
-
- fieldLabels={'WEB_title':'WEB_Title','xdata_01':'Responsible Scientists','xdata_02':'Department',
- 'xdata_03':'Historical Persons','xdata_04':'Time period',
- 'xdata_05':'Sorting number','xdata_06':'Keywords','xdata_07':'Short title',
- 'xdata_08':'Other involved scholars' ,'xdata_09':'Part of','xdata_10':'Covered by',
- 'xdata_11':'Object Digitallibrary','xdata_12':'Cooperation partners',
- 'xdata_13':'Funding institutions','WEB_project_header':'WEB_project_header',
- 'WEB_project_description':'WEB_project_description','WEB_related_pub':'WEB_related_pub'}
-
- folders=['MPIWGProject','Folder']
- meta_type='MPIWGRoot'
-
- def replaceNotEmpty(self,format,field):
- """replace not empty"""
- if field and (not field==''):
- return format%field
+ if url.find("?")>-1: #giebt es schon parameter
+ addStr="&time=%s"
else:
- return ""
+ addStr="?time=%s"
+
+ RESPONSE.setHeader('Last-Modified',email.Utils.formatdate().split("-")[0]+'GMT')
+ logging.debug(email.Utils.formatdate()+' GMT')
+ RESPONSE.redirect(url+addStr%timeStamp)
+
+ def hasLinkToBookPage(self):
+ """teste ob eingebener link zu einer MPIWG Book page geht"""
+ if (getattr(self,'link','')==''):
+ return False #es gibt keinen link
- def formatBibliography(self,here,found):
- """format"""
- return formatBibliography(here,found)
-
- def getValue(self,field):
- """Inhalt des Feldes"""
-
- if type(field)==StringType:
- try:
- if field[len(field)-1]==";":
- field=field[0:len(text)-1]
- except:
- """nothing"""
-
- return field.encode('utf-8')
+ server = xmlrpclib.ServerProxy(self.link)
+
+ try:
+ server.getImageUrls()
+ return True
+ except:
+ return False
- else:
- return field[0].encode('utf-8')
-
- def sortedNames(self,list):
- """sort names"""
+ def getImageUrls(self):
+ """get the image urls"""
+
+ if (getattr(self,'link','')==''):
+ return False #es gibt keinen link
+
+ server = xmlrpclib.ServerProxy(self.link)
+
+ try:
+ urls = server.getImageUrls()
+ ret=[]
+ for url in urls:
+ url = os.path.join(self.link,url)
+ ret.append(url)
+
+ except:
+ return []
+
+ return ret
+
+ def editPublication(self,text=None,image1=None,image2=None,description=None,link=None,RESPONSE=None):
+ """edit a publication"""
- def sortLastName(x_c,y_c):
- try:
- x=urllib.unquote(x_c).encode('utf-8','ignore')
- except:
- x=urllib.unquote(x_c)
+ if (not text) and (not description):
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_publicationForm.zpt')).__of__(self)
+ return pt()
- try:
- y=urllib.unquote(y_c).encode('utf-8','ignore')
- except:
- x=urllib.unquote(y_c)
+
+ if text:
+ self.text=text[0:]
+
+ if description:
+ self.description=description
+
+ if link:
+ self.link=link[0:]
+
+ if image1:
+ if hasattr(self,'publicationImage1'):
+ self.publicationImage1.manage_upload(image1)
+ else:
+ nO = Image('publicationImage1','',image1)
+ self._setObject('publicationImage1',nO)
+ if image2:
+ if hasattr(self,'publicationImage2'):
+ self.publicationImage2.manage_upload(image2)
+ else:
+ nO = Image('publicationImage2','',image2)
+ self._setObject('publicationImage2',nO)
+
-
- try:
- last_x=x.split()[len(x.split())-1]
- last_y=y.split()[len(y.split())-1]
+ self.ZCacheable_invalidate()
+ if RESPONSE:
+ self.redirect(RESPONSE,"../managePublications")
- except:
+class MPIWGProject_relatedProject(Folder):
+ """publications object fuer project"""
- last_x=""
- last_y=""
-
-
-
- if last_x ")
- if int(depth)>=len(project[1].split("."))-len(childs.split(".")):
-
- ret.append(project)
- else:
- ret.append(project)
- return ret
-
- def getProjectFields(self,fieldName,folder=None,sort=None):
- """getListofFieldNames"""
- ret=[]
- #print "FN",fieldName
- if not folder:
- folder=self
- for object in folder.__dict__:
-
- obj=getattr(folder,object)
- if hasattr(obj,'meta_type'):
- #print obj.meta_type
- if obj.meta_type=='MPIWGProject':
- if fieldName=="WEB_title_or_short":
- #print "HI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
- #print len(obj.getContent('xdata_07'))
- if len(obj.getContent('xdata_07'))<3: # hack weil z.Z. manchmal noch ein Trennzeichen ; oder , im Feld statt leer
- fieldNameTmp="WEB_title"
- else:
- fieldNameTmp="xdata_07"
- else:
- fieldNameTmp=fieldName
-
- ret.append((obj,obj.getContent(fieldNameTmp)))
+ for pubSplit in pubSplits:
+ pubSplit=pubSplit.replace(" """)
+
+ imageURLs=[]
+ imageCaptions=[]
+ for split in splitted[1:]:
+ tmp=split.split("
""") + if len(splitted)>1: + tmp=splitted[1].split("
") + imageCaptions.append(tmp[0].encode('utf-8')) - for x in self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff']): - ret.append(x[1].title.decode('utf-8')) - - ret.sort() - #print ret - - return ret - def printAllMembers(self): - """prin""" - members=self.getAllMembers() - ret="" - for x in members: - ret+="%s
"%x - return ret - + else: + #keine caption + + imageCaptions.append("") + + + #eintragen: + for imageURL in imageURLs: + filename=imageURL.split("/")[-1] + #lege neues images object an, mit leerem bild + + if self.ZopeFind(self,obj_ids=[filename]): + #existiert das bild schon, dann neuen filenamen + filename="project_image_"+filename + + self.addImage(None,imageCaptions[imageURLs.index(imageURL)],filename=filename) + #hole die bilddaten aus der url + url=self.absolute_url()+"/"+imageURL + #url=self.absolute_url()+"/"+filename - def makeList(self,entry): - """makes a list out of one entry or repeat a list""" - if type(entry) is StringType: - return [entry] - else: - return entry - - - def getTree(self): - """generate Tree from project list""" - returnList=[] - for project in self.getProjectFields('xdata_05',sort="int"): # get Projects sorted by xdata_05 - for idNr in project[1].split(";"): # more than one number - if not idNr=="": - splittedId=idNr.split(".") - depth=len(splittedId) - nr=idNr - #title=project[0].WEB_title - title=[project[0].getContent('WEB_title')] - #print title - returnList.append((depth,nr,title,project[0])) - - return returnList - - def formatElementForOverview(self,element): - """format the element for output in overview""" - if element[0]==1: #department - return """"""%(element[3].absolute_url(),element[3].getContent('WEB_title'))
-
- elif element[0]==3:
- return """
%s"""%(element[3].absolute_url(),element[3].getContent('WEB_title'))
-
- def changePosition(self,treeId,select,RESPONSE=None):
- """Change Postion Entry"""
- numbers=[]
-
- # Suche hoechste bisherige nummer
- projects=self.getProjectFields('xdata_05') # get Projects sorted by xdata_05
- #print "pj",projects
- for project in projects: #suche alle subtrees der treeId
- #print treeId
-
- founds=re.match(treeId+"\.(.*)",project[1].split(";")[0])
- if founds:
- #print "x",founds.group(0),len(founds.group(0).split("."))
- if len(founds.group(0).split("."))==len(treeId.split("."))+1: # nur ein punkt mehr, d.h. untere ebene
- try:
- numbers.append(int(founds.group(0).split(".")[len(founds.group(0).split("."))-1]))
- except:
- numbers.append(int(0))
+ try:#relative url
+ data=urllib.urlopen(url).read()
+ except:
+ try:#absolute
+ data=urllib.urlopen(self.imageURL).read()
+ except:
+ logger("MPIWG Project",logging.ERROR,"can't open: %s"%url)
+
+ obj=getattr(self,filename)
+ obj.update_data(data)
+
+ if RESPONSE:
+
+ self.redirect(RESPONSE,'manageImages')
+
+ def manageImages(self,imageName=None,op=None):
+ """managage images"""
+
+
+ if imageName and op:
+ if op=='up':
+ images=self.getImages()
+ for image in images:
+ if image[0]==imageName:
+ nr=images.index(image)
+ if not nr==0:
+ images[nr-1][1].place+=1
+ images[nr][1].place-=1
+ pass
+ elif op=='down':
+ images=self.getImages()
+ for image in images:
+ if image[0]==imageName:
+ nr=images.index(image)
+ if not (nr==len(images)-1):
+ images[nr+1][1].place-=1
+ images[nr][1].place+=1
+ pass
- try:
- highest=max(numbers)
- except:
- highest=0
- projects=self.showNewProjects()
- for i in self.makeList(select):
- highest+=10
- projects[int(i)][0].xdata_05=treeId+"."+str(highest)
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_manageImagesForm.zpt')).__of__(self)
+ return pt()
- if RESPONSE is not None:
- RESPONSE.redirect('showTree')
-
- def changeTree(self,RESPONSE=None):
- """change the complete tree"""
- form=self.REQUEST.form
- hashList={}
- fields=self.getTree()
+ def managePublications(self,pubName=None,op=None):
+ """managage images"""
-
- for idNr in form.keys():
- fields[int(idNr)][3].xdata_05=form[idNr]
-
+ if pubName and op:
+ if op=='up':
+ publications=self.getPublications()
+ for publication in publications:
+ if publication[0]==pubName:
+ nr=publications.index(publication)
+ if not nr==0:
+ publications[nr-1][1].place+=1
+ publications[nr][1].place-=1
+ pass
+ elif op=='down':
+ publications=self.getPublications()
+ for publication in publications:
+ if publication[0]==pubName:
+ nr=publications.index(publication)
+ if not (nr==len(publications)-1):
+ publications[nr+1][1].place-=1
+ publications[nr][1].place+=1
+ pass
- if RESPONSE is not None:
- RESPONSE.redirect('showTree')
- def getProjectWithId(self,id):
- fields=self.getProjectFields('xdata_05')
- for field in fields:
- if field[1]==id:
- return field[0]
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_managePublicationsForm.zpt')).__of__(self)
+ return pt()
+
+ def manageRelatedProjects(self,pubName=None,op=None):
+ """managage relatedProjectd"""
- return None
-
-
-
-
- def getRelativeUrlFromPerson(self,list):
- """get urls to person list"""
- ret=[]
- persons=list.split(";")
- for person in persons:
-
- if len(person)>1: #nicht nur Trennzeichen
- splitted=person.split(",")
- if len(splitted)==1:
- splitted=person.split(" ")
- splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
- if splittedNew[0]=='':
- del splittedNew[0]
- search=string.join(splittedNew,' AND ')
-
- if not search=='':
- try:
- proj=self.MembersCatalog({'title':search})
- except:
- proj=None
+ if pubName and op:
+ if op=='up':
+ relatedProjects=self.getRelatedProjects()
+ for project in relatedProjects:
+ if project[0]==pubName:
+ nr=relatedProjects.index(project)
+ if not nr==0:
+ relatedProjects[nr-1][1].place+=1
+ relatedProjects[nr][1].place-=1
+ pass
+ elif op=='down':
+ relatedProjects=self.getRelatedProjects()
+ for project in relatedProjects:
+ if project[0]==pubName:
+ nr=relatedProjects.index(project)
+ if not (nr==len(relatedProjects)-1):
+ relatedProjects[nr+1][1].place-=1
+ relatedProjects[nr][1].place+=1
+ pass
- if proj:
- #ret.append("%s"%(proj[0].absolute_url,person.encode('utf-8')))
- ret.append("%s"%('members/'+proj[0].id,person))
- else:
- #ret.append("%s"%person.encode('utf-8'))
- ret.append("%s"%person)
- return string.join(ret,";")
+
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','MPIWGProject_manageRelatedProjectsForm.zpt')).__of__(self)
+ return pt()
+
+
+ def hasExtendedPublicationList(self):
+ """test if extended publication list exists"""
+ if not hasattr(self,"publicationList"):
+ return False
+ else:
+ return True
-
- def getUrlFromPerson(self,list):
- """get urls to person list"""
- ret=[]
- persons=list.split(";")
- for person in persons:
-
- if len(person)>1: #nicht nur Trennzeichen
- splitted=person.split(",")
- if len(splitted)==1:
- splitted=person.split(" ")
- splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
- if splittedNew[0]=='':
- del splittedNew[0]
- search=string.join(splittedNew,' AND ')
-
- if not search=='':
+ def createExtendedPublicationList(self,RESPONSE=None):
+ """erzeuge erweiterte publications liste"""
+ pl = BibliographyManager("publicationList","","institutsbiblio",self.connection_id)
+ self._setObject("publicationList", pl)
+
+
+ zt=ZopePageTemplate('index.html')
+ pl._setObject('index.html',zt)
+ default_content_fn = os.path.join(package_home(globals()),
+ 'zpt/showExtendedProjectBibliography.zpt')
+ text = open(default_content_fn).read()
+ zt.pt_edit(text, 'text/html')
- try:
- proj=self.MembersCatalog({'title':search})
- except:
- proj=None
+
+ if RESPONSE:
+ self.redirect(RESPONSE,"managePublications")
- if proj:
- #ret.append("%s"%(proj[0].absolute_url,person.encode('utf-8')))
- ret.append("%s"%(proj[0].absolute_url,person))
- else:
- #ret.append("%s"%person.encode('utf-8'))
- ret.append("%s"%person)
- return string.join(ret,";")
-
- def getProjectsOfMembers(self):
- """give tuple member /projects"""
- ret=[]
- members=self.getAllMembers()
- #return str(members)
- for x in members:
- ret+=self.getProjectsOfMember(name=x)
- return ret
+ def getPublications(self):
+ """get all Publications"""
+ def sort_images(x,y):
+ return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0))
+
+ publications=self.ZopeFind(self,obj_metatypes=['MPIWGProject_publication'])
+
+ publications.sort(sort_images)
+ return publications
+
+ def getRelatedProjects(self):
+ """get all Publications"""
+ def sort_images(x,y):
+ return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0))
+
+ publications=self.ZopeFind(self,obj_metatypes=['MPIWGProject_relatedProject'])
+
+ publications.sort(sort_images)
+ return publications
+
+ def addPublication(self,text,RESPONSE=None):
+ """add an MPIWG_Publication"""
+ number=self.getLastPublicationNumber()+1
+ name="publication_"+str(number)
+ while hasattr(self,name):
+ number+=1
+ name="publication_"+str(number)
+
+ newPublication=MPIWGProject_publication(name)
+
+ self._setObject(name,newPublication)
+ obj=getattr(self,name)
+ obj.text=text[0:]
+ obj.enabled=True;
+ obj.place=self.getLastPublicationNumber()+1
+ obj.id=name
+ self.ZCacheable_invalidate()
+ if RESPONSE is not None:
+
+ self.redirect(RESPONSE,'managePublications')
- def getProjectsOfMember(self,name=None,email=None):
- """get project of a member"""
- def sortP(x,y):
- """sort by sorting number"""
- #print x.xdata_05,y.xdata_05
- return cmp(x.WEB_title,y.WEB_title)
+ def errorRelatedProjects(self,link):
+ """error creating a related project"""
+ pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_project_error_relatedProject.zpt')).__of__(self)
+ return pt(link=link)
+
+ def addRelatedProject(self,link,RESPONSE=None):
+ """add an MPIWG_Publication"""
+
+
+
+ number=self.getLastPublicationNumber()+1
+ name="RelatedProject"+str(number)
+ while hasattr(self,name):
+ number+=1
+ name="RelatedProject_"+str(number)
+
+ # hole die id des projektes
+ splitted=link.split("/")
+
+ #teste ob es das project gibt
+ if len(splitted)<1:
+ self.redirect(RESPONSE,'errorRelatedProjects?link='+link)
+
+ objid=splitted[-1]
+ object = getattr(self.projects,objid,None)
+
+ if object==None:
+ self.redirect(RESPONSE,'errorRelatedProjects?link='+link)
+ return
+
+ newPublication=MPIWGProject_relatedProject(name)
+
+ self._setObject(name,newPublication)
+ obj=getattr(self,name)
+ obj.orginallink=link[0:]
+ obj.objid=objid[0:]
+ logging.debug("add relobj:objid"+repr(obj.objid))
+ obj.projectWEB_title=object.getContent('WEB_title')[0:]
+ logging.debug("add relobj:webtitle"+repr(obj.projectWEB_title))
+ obj.enabled=True;
+ obj.place=self.getLastRelatedProjectNumber()+1
+ obj.id=name
+ self.ZCacheable_invalidate()
+ if RESPONSE is not None:
+ self.redirect(RESPONSE,'manageRelatedProjects')
+
+
+
+ def getLastPublicationNumber(self):
+ publications=self.getPublications()
- ret=[]
- splitNeu=[]
- if email:
- members=self.ZopeFind(self.members,obj_metatypes=['MPIWGStaff'],obj_ids=[email])
- name = members[0][1].title.decode('utf-8')
-
- y=name
- splitted=y.split(",")
- for s in splitted:
- splitNeu.append("\""+s+"\"")
- search=string.join(splitNeu,' AND ')
-
- proj=self.ProjectCatalog({'xdata_01':search})
- if proj:
- proj2=[x for x in proj]
- # proj2.sort(sortP)
- # ret.append((y,proj2))
- else:
- proj2=[]
-
- proj=self.ProjectCatalog({'xdata_08':search})
- if proj:
- names=[x.WEB_title for x in proj]
- for x in proj:
- if not x.WEB_title in names:
- proj2.append(x)
+ if not publications:
+ return 0
+ else:
+ return getattr(publications[-1][1],'place',0)
+
+ def getLastRelatedProjectNumber(self):
+ publications=self.getRelatedProjects()
+
+ if not publications:
+ return 0
+ else:
+ return getattr(publications[-1][1],'place',0)
+
+ def deletePublication(self,id,RESPONSE=None):
+ """delete Publication id"""
+ self.manage_delObjects([id])
+ self.ZCacheable_invalidate()
+ if RESPONSE:
+
+ self.redirect(RESPONSE,'managePublications')
+
+ def deleteRelatedProject(self,id,RESPONSE=None):
+ """delete Publication id"""
+ self.manage_delObjects([id])
+ self.ZCacheable_invalidate()
+ if RESPONSE:
+
+ self.redirect(RESPONSE,'manageRelatedProjects')
+
+ def getImages(self):
+ """get all Images"""
+ def sort_images(x,y):
+ return cmp(getattr(x[1],'place',0),getattr(y[1],'place',0))
- proj2.sort(sortP)
- if len(proj2)>0:
- ret.append((y,proj2))
+ if (getattr(self,'imageURL','')!='') or (getattr(self,'imagecap','')!='') :
+ try:
+ self.addImage(None,getattr(self,'imagecap',''),RESPONSE=None,filename=getattr(self,'imageURL',''))
+ except:
+ pass
+ self.imageURL=''
+ self.imagecap=''
- return ret
-
- def givePersonList(self,name):
- """check if person is in personfolder and return list of person objects"""
+ images=self.ZopeFind(self,obj_metatypes=['MPIWGProject_image'])
- splitted=name.split(",")
- if len(splitted)==1:
- splitted=name.split(" ")
- splittedNew=[re.sub(r'\s(.*)','$1',split) for split in splitted]
- if splittedNew[0]=='':
- del splittedNew[0]
- search=string.join(splittedNew,' AND ')
- if not search=='':
- proj=self.MembersCatalog({'title':search})
+ images.sort(sort_images)
+ return images
- if proj:
- return [[x.lastName,x.firstName] for x in proj]
+ def getLastImageNumber(self):
+ images=self.getImages()
+
+ if not images:
+ return 0
else:
- return []
-
-## splitted=name.split(",") # version nachname, vorname...
-## if len(splitted)>1:
-## lastName=splitted[0]
-## firstName=splitted[1]
-## else:
-## splitted=name.split(" ") #version vorname irgenwas nachnamae
-
-## lastName=splitted[len(splitted)-1]
-## firstName=string.join(splitted[0:len(splitted)-1])
-
-## objs=[]
-
- #print self.members
- ## for x in self.members.__dict__:
-## obj=getattr(self.members,x)
-## if hasattr(obj,'lastName') and hasattr(obj,'firstName'):
-
-## if (re.match(".*"+obj.lastName+".*",lastName) or re.match(".*"+lastName+".*",obj.lastName)) and (re.match(".*"+obj.firstName+".*",firstName) or re.match(".*"+firstName+".*",obj.firstName)):
-
-## objs.append((obj,lastName+", "+firstName))
+ return getattr(images[-1][1],'place',0)
+
+ def deleteImage(self,id,RESPONSE=None):
+ """delete Image id"""
+ try:
+ self.manage_delObjects([id])
+ except:
+ logging.error("ERROR MPIWG: %s %s"%sys.exc_info()[0:2])
+ if RESPONSE:
+ self.redirect(RESPONSE,'manageImages')
+
+
+ def hasChildren(self,date=None,onlyActive=1,onlyArchived=1):
+ """check if project has children"""
- return objs
+ ct=self.getContexts(childs=self.getContent('xdata_05'),
+ depth=1,date=date,onlyActive=onlyActive)
+
+ if ct and len(ct)>0:
+ return True
+ else:
+ return False
+
+ def addImage(self,fileHd,caption,RESPONSE=None,filename=None):
+ """add an MPIWG_Project_image"""
+
+ if not filename:
+ filename=fileHd.filename
+
+ if not fileHd:
+ fileHd=file(os.path.join(package_home(globals()),'blank.gif'))
+
+ newImage=MPIWGProject_image(filename,filename,fileHd)
+
+ self._setObject(filename,newImage)
+ obj=getattr(self,filename)
+ obj.caption=caption[0:]
+ obj.enabled=True;
+ obj.place=self.getLastImageNumber()+1
+ obj.id=filename
- def personCheck(self,names):
- """all persons for list"""
- #print "names",names
- splitted=names.split(";")
- ret={}
- for name in splitted:
+ if RESPONSE is not None:
+
+ self.redirect(RESPONSE,'manageImages')
- if not (name==""):
- try:
- ret[name]=self.givePersonList(name)
- except:
- """NOTHIHN"""
- #print "RET",ret
- return ret
+ def PrincipiaSearchSource(self):
+ """Return cataloguable key for ourselves."""
+ return str(self)
+
+ def versionHeader(self):
+ """version Header, gibt header text entsprechend der aktuellen version aus"""
+
+ actualTime=time.localtime()
+ retTXT="""
""") + if len(splitted)>1: + tmp=splitted[1].split("
") + #return repr(splitted[1]) + try: + self.imageURL=tmp[0].split("\"")[1].encode('utf-8') + except: + try: + self.imageURL=tmp[0].split("src=")[1].split(" ")[0].encode('utf-8') + except: + self.imageURL="" + + split2="".join(tmp[1:]) - if (type(text)==StringType) or (type(text)==UnicodeType): - return text + text3=splitted[0]+split2 + + splitted=text3.split("""""") + if len(splitted)>1: + tmp=splitted[1].split("
") + self.imagecap=tmp[0].encode('utf-8') + + split4="".join(tmp[1:]) + + text5=splitted[0]+split4 + else: + #keine caption + text5=text3 + else: + #kein bild + text5=text2 else: - return text[0] + text5=text2 + #teste ob WEB_project_description und keine fuehrenden p tags + if (len(text5)>4) and (not text5[0:3]=='') and (field=='WEB_project_description'): + text5= "
"+text5+"
" + + + #filter image + + text5=text5.lstrip().rstrip() #loescher leerzeichen und einzelndes br + if (text5=="