# HG changeset patch # User casties # Date 1412078353 -7200 # Node ID 690d5dea34bdb7404561c30a2a8d000ffa36f4d2 # Parent 761869998ad088b74054f278241c8fe13de7d4e9# Parent d672a6f6c9029a93614d45aa5c0f5e4b977f7a87 Merge with d672a6f6c9029a93614d45aa5c0f5e4b977f7a87 diff -r 761869998ad0 -r 690d5dea34bd HashTree.py --- a/HashTree.py Fri Sep 05 11:44:40 2014 +0200 +++ b/HashTree.py Tue Sep 30 13:59:13 2014 +0200 @@ -211,7 +211,7 @@ """ keys = self._splitkey(key) node = self.root - logging.debug("hashtree.add: keys=%s value=%s"%(repr(keys), repr(value))) + #logging.debug("hashtree.add: keys=%s value=%s"%(repr(keys), repr(value))) for k in keys: nextnode = node.getNode(k) if nextnode is None: diff -r 761869998ad0 -r 690d5dea34bd MPIWGDepartment.py --- a/MPIWGDepartment.py Fri Sep 05 11:44:40 2014 +0200 +++ b/MPIWGDepartment.py Tue Sep 30 13:59:13 2014 +0200 @@ -146,7 +146,7 @@ proj = pf.getProject(projectNumber=self.getProjectNumber()) return proj - def getProjects(self, count=0, active=0, archived=0, depthFirst=True): + def getProjects(self, count=0, active=0, archived=0, depthFirst=True, filter=None): """returns a list of projects of this department. active = 0 : all projects @@ -158,7 +158,7 @@ archived = 2 : archived projects """ pf = self.getMPIWGRoot().getProjectFolder() - projects = pf.getProjectsAsList(self.getProjectNumber(), active=active, archived=archived, depthFirst=depthFirst) + projects = pf.getProjectsAsList(self.getProjectNumber(), active=active, archived=archived, depthFirst=depthFirst, filter=filter) #logging.debug("getProjects projects=%s"%repr(projects)) if count > 0: return projects[:count] diff -r 761869998ad0 -r 690d5dea34bd MPIWGProjects.py --- a/MPIWGProjects.py Fri Sep 05 11:44:40 2014 +0200 +++ b/MPIWGProjects.py Tue Sep 30 13:59:13 2014 +0200 @@ -350,6 +350,9 @@ self.items[int(n)][t] = form[k] except: logging.error("InfoBlock editItems: error changing item %s!"%k) + + if k == 'block_title': + self.title = form[k] self._p_changed = True if RESPONSE is not None: @@ -563,6 +566,16 @@ return t + def getProjectType(self): + """returns the type of project""" + t = getattr(self, 'projectType', None) + return t + + def setProjectType(self, s): + """set the type of project""" + self.projectType = s + + def getMPIWGProject(self): """Return this project for acquisition.""" return self @@ -631,10 +644,10 @@ return tree.getAncestorsOf(self.getNumber()) - def getSubProjects(self, active=1): + def getSubProjects(self, active=1, archived=1, filter=None): """returns a list of child projects""" tree = self.getProjectTree() - return [p for p in tree.getChildrenOf(self.getNumber()) if p.checkActive(active)] + return [p for p in tree.getChildrenOf(self.getNumber()) if (filter is None or filter(p)) and p.checkActive(active) and p.checkArchived(archived)] def getRelatedDigitalSources(self): @@ -1516,6 +1529,12 @@ else: self.setActiveFlag(False) + if formdata.has_key('projectType'): + if formdata.get('projectType'): + self.projectType = formdata.get('projectType') + else: + self.projectType = None + # make dict of responsible scientists checkedScientists = {} names = {} @@ -1921,7 +1940,7 @@ tree = HashTree(keySeparator='.', keyFn=getInt) for p in self.objectValues(spec='MPIWGProject'): # add all projects - logging.debug("add to project tree: %s, %s"%(repr(p.getNumber()),p)) + #logging.debug("add to project tree: %s, %s"%(repr(p.getNumber()),p)) tree.add(p.getNumber(), p) self._v_projectTree = tree @@ -1930,7 +1949,7 @@ return tree - def getProjectsAsList(self, start=None, active=1, archived=1, depthFirst=True): + def getProjectsAsList(self, start=None, active=1, archived=1, depthFirst=True, filter=None): """Return flattened list of projects, starting from start. active = 0 : all projects @@ -1951,7 +1970,8 @@ #logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,repr(pl))) #logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,[p.getNumber() for p in pl])) # return filtered list - return [p for p in pl if (p.checkActive(active) and p.checkArchived(archived))] + return [p for p in pl if ((filter is None or filter(p)) and p.checkActive(active) and p.checkArchived(archived))] + #return [p for p in pl if (p.checkActive(active) and p.checkArchived(archived))] def getProject(self, projectNumber=None): diff -r 761869998ad0 -r 690d5dea34bd MPIWGStaff.py --- a/MPIWGStaff.py Fri Sep 05 11:44:40 2014 +0200 +++ b/MPIWGStaff.py Tue Sep 30 13:59:13 2014 +0200 @@ -100,7 +100,7 @@ def getMemberList(self, department=None, sortBy='last_name', onlyCurrent=False, arrivedWithin=None, - onlyPublished=True, onlyWithEmail=True, onlyScholar=True, limit=0): + onlyPublished=True, onlyWithEmail=True, onlyScholar=True, status=None, limit=0): """Return the list of members. Returns a list of MPIWGStaffMember objects. @@ -128,6 +128,10 @@ if arrivedWithin is not None: wheres.append("date_from > CURRENT_DATE - interval %s") args.append(arrivedWithin) + + if status is not None: + wheres.append("status ilike %s") + args.append('%%%s%%'%status) # assemble query query = "SELECT * FROM personal_www_list" diff -r 761869998ad0 -r 690d5dea34bd css/mpiwg.css --- a/css/mpiwg.css Fri Sep 05 11:44:40 2014 +0200 +++ b/css/mpiwg.css Tue Sep 30 13:59:13 2014 +0200 @@ -349,7 +349,7 @@ div.subnav h2.subnavhead { background-color: white; color: #d45a00; - border-bottom: 1px solid #dccbae; + /* border-bottom: 1px solid #dccbae; */ font-size: 11px; font-weight: bold; margin: 0; @@ -363,6 +363,25 @@ text-indent: -14px; } +div.subnav li.dept.lv1 { + padding-left: 3em; +} +div.subnav li.dept.lv2 { + padding-left: 4em; +} +div.subnav li.dept.lv3 { + padding-left: 5em; +} +div.subnav li.dept.lv4 { + padding-left: 6em; +} +div.subnav li.dept.lv5 { + padding-left: 7em; +} +div.subnav li.dept.lv6 { + padding-left: 8em; +} + div.subnav li.dept .type { font-style: italic; color: #6a4d3c; @@ -1425,6 +1444,22 @@ color: #333; } +div.subnav .proj_switcher { + background-color: white; + text-align: right; + padding: 2px 0; +} +div.subnav .proj_switcher .proj_state { + padding: 2px 6px; + border-top: 1px solid #DCCBAE; + border-left: 1px solid #DCCBAE; + border-right: 1px solid #DCCBAE; +} +div.subnav .proj_switcher .proj_state.on { + background-color: #FCF2DF; +} + + /* * special sideblocks */ @@ -1494,6 +1529,21 @@ } /* + * sub row (between main and foot) + */ +#subrow { + display: table; +} +#subrow .leftbox { + border-top: 0; +} +#subrow .main { + min-width: 690px; + padding: 0 20px; + border-top: 0; +} + +/* * footer */ #footservices { diff -r 761869998ad0 -r 690d5dea34bd js/mpiwg.js --- a/js/mpiwg.js Fri Sep 05 11:44:40 2014 +0200 +++ b/js/mpiwg.js Tue Sep 30 13:59:13 2014 +0200 @@ -38,9 +38,6 @@ $content.animate({'left':'-='+settings.scrollBy}, 'fast'); }).css('cursor', 'pointer'); }); - - - }; }(jQuery)); diff -r 761869998ad0 -r 690d5dea34bd zpt/project/edit_basic.zpt --- a/zpt/project/edit_basic.zpt Fri Sep 05 11:44:40 2014 +0200 +++ b/zpt/project/edit_basic.zpt Tue Sep 30 13:59:13 2014 +0200 @@ -37,14 +37,19 @@ Started at: + value python:here.getStartedAt()" type="text" size="10" /> (format dd.mm.yyyy or mm.yyyy or yyyy) Completed at: (format dd.mm.yyyy or mm.yyyy or yyyy) + type="text" size="10" /> (format dd.mm.yyyy or mm.yyyy or yyyy) + + + Type of project page: + diff -r 761869998ad0 -r 690d5dea34bd zpt/project/project_index_html.zpt --- a/zpt/project/project_index_html.zpt Fri Sep 05 11:44:40 2014 +0200 +++ b/zpt/project/project_index_html.zpt Tue Sep 30 13:59:13 2014 +0200 @@ -9,7 +9,23 @@ + global dept here/getDepartmentId; + global pNum here/getNumber;" /> + + @@ -70,15 +86,17 @@ + +
+
+
+
+ \ No newline at end of file diff -r 761869998ad0 -r 690d5dea34bd zpt/www/main_template.zpt --- a/zpt/www/main_template.zpt Fri Sep 05 11:44:40 2014 +0200 +++ b/zpt/www/main_template.zpt Tue Sep 30 13:59:13 2014 +0200 @@ -100,6 +100,8 @@ + +