Mercurial > hg > MPIWGWeb
diff MPIWGRoot.py @ 54:4600e31a0431
Merge with 1ed79b33200c4c4879e3dc314744451eef083902
author | dwinter |
---|---|
date | Tue, 30 Apr 2013 16:35:52 +0200 |
parents | e718d9a72f19 1ed79b33200c |
children | 12cb73494367 |
line wrap: on
line diff
--- a/MPIWGRoot.py Tue Apr 30 16:31:57 2013 +0200 +++ b/MPIWGRoot.py Tue Apr 30 16:35:52 2013 +0200 @@ -121,23 +121,6 @@ return bt - def versionHeaderEN(self): - """version header text""" - - date= self.REQUEST.get('date',None) - if date: - txt="""<h2>This pages shows the project which existed at %s</h2>"""%str(date) - return txt - return "" - - def versionHeaderDE(self): - """version header text""" - date= self.REQUEST.get('date',None) - if date: - txt="""<h2>Auf dieser Seite finden Sie die Projekte mit Stand vom %s</h2>"""%str(date) - return "" - - def createOrUpdateId_raw(self): """create sequence to create ids for bibliography""" debug=None @@ -165,22 +148,6 @@ splitted=url.split("/") return splitted[4] - def generateUrlProject(self,url,project=None): - """erzeuge aus absoluter url, relative des Projektes""" - if project: - splitted=url.split("/") - length=len(splitted) - short=splitted[length-2:length] - - base=self.REQUEST['URL3']+"/"+"/".join(short) - - else: - findPart=url.find("/projects/") - base=self.REQUEST['URL1']+"/"+url[findPart:] - - - return base - def isNewCapital(self,text=None,reset=None): if text: @@ -250,6 +217,13 @@ else: return style + def getPathStyle(self, path, selected, style=""): + """returns a string with the given style + 'sel' if path == selected.""" + if path == selected: + return style + 'sel' + else: + return style + def getFeatures(self, num=None): """returns a list of the last num Features""" dir = getattr(self, 'features', None) @@ -324,35 +298,6 @@ return "" - # TODO: remove - def isActiveMember(self,key): - """tested ob Mitarbeiter key ist aktiv""" - key=utf8ify(key) - ret=getAt(self.ZSQLInlineSearch(_table='personal_www', - _op_key='eq',key=key, - _op_publish_the_data='eq', - publish_the_data='yes'), 0) - - logging.info("MPIWGROOT ACTIVE_MEMBER %s"%ret) - if ret: - return True - else: - return False - - # TODO: remove - def isActual(self,project): - """checke if project is actual""" - actualTime=time.localtime() - - if hasattr(project,'getObject'): #obj ist aus einer catalogTrefferList - obj=project.getObject() - else: - obj=project - - if getattr(obj,'archiveTime',actualTime)< actualTime: - return False - else: - return True def redirectIndex_html(self,request): #return request['URL1']+'/index_html' @@ -435,34 +380,6 @@ """quote""" return urllib.unquote(str) - - - def getProjectsByFieldContent(self,fieldName,fieldContentsEntry, date=None): - """gib alle Projekte aus mit Value von field mit fieldName enthaelt ein Element der Liste fieldContents""" - def sort(x,y): - return cmp(x.WEB_title[0],y.WEB_title[0]) - - if type(fieldContentsEntry) is StringType: - fieldContentsTmp=[fieldContentsEntry] - else: - fieldContentsTmp=fieldContentsEntry - - fieldContents=[] - for x in fieldContentsTmp: - fieldContents.append(" AND ".join(x.split())) - projects=self.ProjectCatalog({fieldName:string.join(fieldContents,' AND')}) - #print projects - #ret=[x for x in projects] - ret=[] - for x in projects: - obj=x.getObject() - obj=obj.getActualVersion(date) - if obj and (not getattr(obj,'invisible',None)): - #if not (x in ret): - ret.append(x) - - ret.sort(sort) - return ret def changeMPIWGRootForm(self): """edit""" @@ -484,128 +401,6 @@ if RESPONSE is not None: RESPONSE.redirect('manage_main') - - def getContexts(self,childs=None,parents=None,depth=None,date=None,onlyActive=True): - """childs alle childs, alle parents""" - ret=[] - - if parents: - pnums=parents.split(".") - while len(pnums) > 1: - pnums.pop() - parentId=string.join(pnums,".") - - for project in self.getProjectFields('xdata_05',sort='int',date=date): - if project[1]==parentId: - ret.append(project) - - if (depth is not None) and (len(ret) >= depth): - break - - if childs: - for project in self.getProjectFields('xdata_05',sort='int',date=date): - searchStr=childs+"(\..*)" - - if (onlyActive and project[0].isActiveProject()) or (not onlyActive): - if re.match(searchStr,project[1]): - - if depth: - - if int(depth)>=len(project[1].split("."))-len(childs.split(".")): - - ret.append(project) - else: - ret.append(project) - - #logging.debug("getContexts: childs=%s parents=%s depth=%s => %s"%(childs,parents,depth,repr(ret))) - - return ret - - - def getAllProjectsAndTagsAsCSV(self,archived=1,RESPONSE=None): - """alle projekte auch die nicht getaggten""" - retList=[] - headers=['projectId','sortingNumber','projectName','scholars','startedAt','completedAt','lastChangeThesaurusAt','lastChangeProjectAt','projectCreatedAt','persons','places','objects'] - headers.extend(list(self.thesaurus.tags.keys())) - retList.append("\t".join(headers)) - if not hasattr(self,'thesaurus'): - return "NON thesaurus (there have to be a MPIWGthesaurus object, with object ID thesaurus)" - - projectTags = self.thesaurus.getProjectsAndTags() - for project in self.getProjectFields('WEB_title_or_short'): - proj = project[0] - p_name = project[1] - retProj=[] - #if (not proj.isArchivedProject() and archived==1) or (proj.isArchivedProject() and archived==2): - retProj.append(self.utf8ify(proj.getId())) - retProj.append(self.utf8ify(proj.getContent('xdata_05'))) - retProj.append(self.utf8ify(p_name)) - retProj.append(self.utf8ify(proj.getContent('xdata_01'))) - retProj.append(self.utf8ify(proj.getStartedAt())) - retProj.append(self.utf8ify(proj.getCompletedAt())) - changeDate=self.thesaurus.lastChangeInThesaurus.get(proj.getId(),'') - n = re.sub("[:\- ]","",str(changeDate)) - retProj.append(n) - retProj.append(self.utf8ify(getattr(proj,'creationTime','20050101000000'))) - retProj.append("")#TODO: project created at - retProj.append(";".join([person[1] for person in self.thesaurus.getPersonsFromProject(proj.getId())])) - retProj.append(";".join([person[1] for person in self.thesaurus.getHistoricalPlacesFromProject(proj.getId())])) - retProj.append(";".join([person[1] for person in self.thesaurus.getObjectsFromProject(proj.getId())])) - retProj+=self.thesaurus.getTags(proj.getId(),projectTags) - retList.append("\t".join(retProj)) - - if RESPONSE: - - RESPONSE.setHeader('Content-Disposition','attachment; filename="ProjectsAndTags.tsv"') - RESPONSE.setHeader('Content-Type', "application/octet-stream") - - return "\n".join(retList); - - - - - def getProjectFields(self,fieldName,date=None,folder=None,sort=None): - """getListofFieldNames""" - ret=[] - - objects=self.ZopeFind(self.projects,obj_metatypes=['MPIWGProject'],search_sub=0) - - - for object in objects: - obj=object[1] - obj=obj.getActualVersion(date) - if obj and (not getattr(obj,'invisible',None)): - if fieldName=="WEB_title_or_short": - - 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))) - - - if sort=="int": - ret.sort(sortI) - elif sort=="stopWords": - - ret.sort(sortStopWords(self)) - - else: - ret.sort(sortF) - - return ret - - def showNewProjects(self): - projects=[] - for objs in self.getProjectFields('WEB_title_or_short'): # Get all Projets - if objs[0].xdata_05 and (objs[0].xdata_05[0] == ""): - - projects.append(objs) - - return projects def updatePublicationDB(self,personId=None): @@ -843,43 +638,6 @@ - def reindexCatalogs(self,RESPONSE=None): - """reindex members and project catalog""" - - - try: - - self.ProjectCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) - logger("MPIWG Root (reindexCatalog: projects)",logging.INFO,"DONE") - except: - logger("MPIWG Root (reindexCatalog: projects)",logging.WARNING," %s %s"%sys.exc_info()[:2]) - - try: - - self.MembersCatalog.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) - logger("MPIWG Root (reindexCatalog: members)",logging.INFO,"DONE") - except: - logger("MPIWG Root (reindexCatalog: members)",logging.WARNING," %s %s"%sys.exc_info()[:2]) - - -# -# try: -# -# self.fulltextProjectsMembers.manage_catalogReindex(self.REQUEST,RESPONSE,self.REQUEST['URL1']) -# logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.INFO,"DONE") -# except: -# logger("MPIWG Root (reindexCatalog: fulltextProjectsMembers)",logging.WARNING," %s %s"%sys.exc_info()[:2]) -# -# -# -# - - - if RESPONSE: - RESPONSE.redirect('manage_main') - - - def getAllMembers(self): #ret=[] @@ -923,177 +681,14 @@ rss+=linkStr%obj[3].getId() rss+="""</item>""" if hasattr(obj[3],'publicationList'): - rss+="""<item>""" + rss+="""<item>""" rss+=linkStr%(obj[3].getId()+"/publicationList"); rss+="""</item>""" rss+="""</channel> </rss>""" - return rss - def getTree(self,dep=None,date=None,onlyActive=0,onlyArchived=0): - """generate Tree from project list - als Liste, jeder Eintrag ist ein Tupel ,(Tiefe, ProjektNummer,ProjektObject - onlyActive = 0 : alle Projekte - onlyActive = 1 : nur active Projekte - onlyActive = 2: nur inactive Projekte - - onlyArchived=0: alle Projekte - onlyArchived= 1 : nur aktuelle Projekte - onlyArchived = 2: nur archivierte Projekte - - department fuer das Tree geholt werden soll - """ - logging.debug("MPIWGRoot.getTree()") - - returnListTmp=[] - returnList=[] - - for project in self.getProjectFields('xdata_05',sort="int",date=date): # 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 - - if idNr[0]=="x": # kompatibilitaet mit alter Konvention, x vor der Nummer macht project inactive - project[0].setActiveFlag(False) - - if (not dep) or (splittedId[0]==dep): #falls dep gesetzt ist nur dieses hinzufuegen. - - if (onlyActive==0): - returnListTmp.append((depth,nr,title,project[0])) - elif (onlyActive==1) and project[0].isActiveProject(): #nur active projekte - returnListTmp.append((depth,nr,title,project[0])) - elif (onlyActive==2) and (not project[0].isActiveProject()): #nur active projekte - returnListTmp.append((depth,nr,title,project[0])) - - - #filter jetzt die Liste nach Archived oder nicht - for entry in returnListTmp: - if (onlyArchived==0): - returnList.append(entry) - elif (onlyArchived==1) and (not entry[3].isArchivedProject()): #nur active projekte - returnList.append(entry) - elif (onlyArchived==2) and (entry[3].isArchivedProject()): #nur active projekte - returnList.append(entry) - - - return returnList - - - - 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: - 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) - - - if RESPONSE is not None: - RESPONSE.redirect('showTree') - - def changeTree(self,RESPONSE=None): - """change the complete tree""" - form=self.REQUEST.form - hashList={} - onlyArchived=int(form.get("onlyArchived",0)) - onlyActive=int(form.get("onlyActive",0)) - dep=form.get("dep",None) - - fields=self.getTree(dep=dep,onlyArchived=onlyArchived,onlyActive=onlyActive) - - logging.info("GOT TREE!----------------------------------------------------") - for field in form.keys(): - - splitted=field.split('_') - if (len(splitted)>1) and (splitted[1]=="runningNumber"): #feld hat die Form Nummer_name und runnignNumber - - - nr=int(splitted[0]) # nummer des Datensatzes - currentEntry = fields[nr] - - if form.has_key(str(nr)+'_active'): # active flag is set - fields[nr][3].setActiveFlag(True) - else: - fields[nr][3].setActiveFlag(False) - - #nummer hat sich geaendert - - entryChanged = False; - - if isinstance(fields[nr][3].xdata_05,list): #for some reasons somtimes the content of the field is a list with one entry. - fields[nr][3].xdata_05=fields[nr][3].xdata_05[0] - - if not (fields[nr][3].xdata_05==form[str(nr)+'_number']): - logging.info("Changed!Number+++++++++++++++++++++++++++++++++") - logging.info(repr(fields[nr][3].xdata_05)+" ---> "+ repr(form[str(nr)+'_number'])) - fields[nr][3].xdata_05=form[str(nr)+'_number'] - entryChanged = True - - #completed har sich geaendert - - td = fields[nr][3].transformDate # hole die funktion zum transformieren des datums - - if not (td(fields[nr][3].getCompletedAt())==td(form[str(nr)+'_completed'])): - fields[nr][3].setCompletedAt(form[str(nr)+'_completed']) - logging.info(repr(td(fields[nr][3].getCompletedAt()))+" ---> "+ repr(td(form[str(nr)+'_completed']))) - logging.info("Changed!Completed+++++++++++++++++++++++++++++++++") - entryChanged = True - - if not (td(fields[nr][3].getStartedAt())==td(form[str(nr)+'_started'])): - fields[nr][3].setStartedAt(form[str(nr)+'_started']) - - logging.info(repr(td(fields[nr][3].getStartedAt()))+" ---> "+ repr(td(form[str(nr)+'_started']))) - logging.info("Changed!Started+++++++++++++++++++++++++++++++++") - entryChanged = True - - - if entryChanged: - logging.info("Changed!+++++++++++++++++++++++++++++++++") - fields[nr][3].copyObjectToArchive() - - - 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] - - return None - - - def getRelativeUrlFromPerson(self,list): """get urls to person list""" @@ -1143,202 +738,7 @@ - def getProjectsOfMembers(self,date=None): - """give tuple member /projects""" - ret=[] - members=self.getAllMembers() - logging.debug("X %s"%repr(members)) - #return str(members) - for x in members: - #logging.debug("X %s"%repr(x)) - projects=self.getProjectsOfMember(key=x[1],date=date) - if len(projects)>0: - ret.append((x[0],projects)) - - return ret - - def getProjectsOfMember(self,key=None,date=None,onlyArchived=1,onlyActive=1): - """get projects of a member - - @param key: (optional) Key zur Idenfikation des Benutzer - @param date: (optional) Version die zum Zeitpunkt date gueltig war - @param onlyArchived: - onlyArchived=0: alle Projekte - onlyArchived= 1 : nur aktuelle Projekte - onlyArchived = 2: nur archivierte Projekte - """ - # TODO: Die ganze Loesung - def sortP(x,y): - """sort by sorting number""" - return cmp(x.WEB_title,y.WEB_title) - - ret=[] - if key: - logging.debug("MPIWGROOT (getProjectsOfMember):"+key) - proj=self.ProjectCatalog({'getPersonKeyList':utf8ify(key)}) - else: - return ret # key muss definiert sein - - #logging.debug("MPIWGROOT (getProjectsOfMember):"+repr(proj)) - if proj: - proj2=[] - for x in proj: - #logging.error("proj:%s"%repr(x.getPath())) - if (not getattr(x.getObject(),'invisible',None)) and (getattr(x.getObject(),'archiveTime','')==''): - proj2.append(x) - - else: - proj2=[] - - - - proj2.sort(sortP) - - projectListe=[] - #logging.error("getprojectsofmember proj2: %s"%repr(proj2)) - for proj in proj2: - obj=proj.getObject() - add=False - if onlyArchived==1: #nur aktuell projecte - if not obj.isArchivedProject(): - add=True - elif onlyArchived==2: #nur archivierte - if obj.isArchivedProject(): - add=True - else: #alle - add=True - - if onlyActive==1: #nur active projecte - if obj.isActiveProject(): - add=add & True - else: - add=add & False - - elif onlyArchived==2: #nur nicht aktvive - if not obj.isActiveProject(): - add=add & True - else: #alle - add=add & True - - if add: - projectListe.append(obj) - - #logging.error("getprojectsofmember projectliste: %s"%repr(projectListe)) - return projectListe - def givePersonList(self,name): - """check if person is in personfolder and return list of person objects""" - - splitted=name.split(",") - if len(splitted)==1: - splitted=name.lstrip().rstrip().split(" ") - splittedNew=[split.lstrip() for split in splitted] - - if splittedNew[0]=='': - del splittedNew[0] - search=string.join(splittedNew,' AND ') - - if not search=='': - proj=self.MembersCatalog({'title':search}) - - if proj: - return [[x.lastName,x.firstName] for x in proj] - 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 objs - - - def personCheck(self,names): - """all persons for list""" - #print "names",names - splitted=names.split(";") - ret={} - for name in splitted: - - if not (name==""): - try: - ret[name]=self.givePersonList(name) - except: - """NOTHIHN""" - #print "RET",ret - return ret - - def giveCheckList(self,person,fieldname): - """return checklist""" - #print "GCL",fieldname - if fieldname=='xdata_01': - x=self.personCheck(person.getContent(fieldname)) - #print "GCLBACKX",x - return x - - - # TODO: do we need this here? - def isCheckField(self,fieldname): - """return chechfield""" - return (fieldname in checkFields) - - - - def sortResults(self,results): - """search the catalog and give results back sorted by meta_type""" - ret = {} - logging.debug(results()) - for result in results(): - metaType = result.meta_type - resultList= ret.get(metaType,[]) - resultList.append(result) - ret[metaType]=resultList - - logging.debug(ret) - return ret - - - def getAllProjectPublications(self): - """get all publications""" - fw=file("/tmp/allProjectPublications","w") - projects =self.projects.getProjectsAsList(None,active=0,archived=0) - - for project in projects: - logging.debug(project) - if hasattr(project,'publicationList'): - try: - x =project.publicationList.bibliolist.data - - except: - logging.error("Can't do: %s"%project.absolute_url()) - continue - - id=project.getId() - for l in x.split("\n"): - fw.write("%s,%s\n"%(id,l)) - fw.flush() - - fw.close() - - def manage_addMPIWGRootForm(self): """form for adding the root"""