Mercurial > hg > MPIWGWeb
changeset 63:fd6931bd49c8
more cleaning up projects.
author | casties |
---|---|
date | Fri, 03 May 2013 11:30:41 +0200 |
parents | 64be5db08495 |
children | b5ff783027d6 c86ee1081b62 |
files | MPIWGProjects.py zpt/project/edit_basic.zpt zpt/project/edit_publications.zpt zpt/project/edit_template.zpt zpt/project/project_template.zpt |
diffstat | 5 files changed, 211 insertions(+), 232 deletions(-) [+] |
line wrap: on
line diff
--- a/MPIWGProjects.py Fri May 03 10:16:47 2013 +0200 +++ b/MPIWGProjects.py Fri May 03 11:30:41 2013 +0200 @@ -97,7 +97,7 @@ link = None bookId = None - editForm = PageTemplateFile('zpt/project/related_publication/edit_basic', globals()) + editDescription = PageTemplateFile('zpt/project/related_publication/edit_basic', globals()) def redirect(self, RESPONSE, url): @@ -147,7 +147,7 @@ """edit a publication""" if (not text) and (not description): - pt = self.editForm + pt = self.editDescription return pt() if text: @@ -172,7 +172,7 @@ objid = None projectLabel = None - editForm = PageTemplateFile('zpt/project/related_project/edit_basic', globals()) + editDescription = PageTemplateFile('zpt/project/related_project/edit_basic', globals()) def redirect(self, RESPONSE, url): @@ -222,7 +222,7 @@ """edit a publication""" if (not link): - pt = self.editForm + pt = self.editDescription return pt() # hole die id des projektes @@ -285,7 +285,7 @@ manage_options = Folder.manage_options + ( {'label':'Load New File', 'action':'loadNewFileForm'}, - {'label':'Edit', 'action':'editForm'}, + {'label':'Edit', 'action':'editDescription'}, ) # {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'}, # {'label':'Edit BasisInfo','action':'editMPIWGBasisForm'}, @@ -308,8 +308,9 @@ # make css refreshable for development edit_css.index_html = refreshingImageFileIndexHtml # user-accessible editing templates - edit_basic = PageTemplateFile('zpt/project/edit_basic', globals()) - editForm = PageTemplateFile('zpt/project/edit_description', globals()) + security.declareProtected('View management screens', 'editBasic') + editBasic = PageTemplateFile('zpt/project/edit_basic', globals()) + editDescription = PageTemplateFile('zpt/project/edit_description', globals()) edit_template = PageTemplateFile('zpt/project/edit_template', globals()) editRelatedProjectsForm = PageTemplateFile('zpt/project/edit_related_projects', globals()) editRelatedProjectsError = PageTemplateFile('zpt/project/edit_related_projects_error', globals()) @@ -317,6 +318,8 @@ editPublicationsForm = PageTemplateFile('zpt/project/edit_publications', globals()) editAdditionalPublicationsForm = PageTemplateFile('zpt/project/pubman/change_publications', globals()) editAddAdditionalPublications = PageTemplateFile('zpt/project/pubman/add_publications', globals()) + security.declareProtected('View management screens', 'edit') + edit = editDescription # management templates loadNewFileForm = PageTemplateFile('zpt/project/manage_newfile', globals()) description_only_html = PageTemplateFile('zpt/project/description_only_html', globals()) @@ -508,13 +511,6 @@ return thumb.absolute_url() - def getImageList(self): - """returns the sorted list of images for this project""" - items = self.objectValues(spec='MPIWGProject_image') - # sort by place - return sorted(items, key=lambda x:int(getattr(x, 'place', 0))) - - def getDepartment(self): """returns the department of this project""" num = self.getNumber() @@ -556,22 +552,6 @@ return [p for p in tree.getChildrenOf(self.getNumber()) if p.checkActive(active)] - def getRelatedProjectList(self): - """returns the list of related projects""" - items = self.objectValues(spec='MPIWGProject_relatedProject') - # sort by place - items.sort(key=lambda x:int(getattr(x, 'place', 0))) - return items - - - def getPublicationList(self): - """returns the list of related publications""" - items = self.objectValues(spec='MPIWGProject_publication') - # sort by place - items.sort(key=lambda x:int(getattr(x, 'place', 0))) - return items - - def getRelatedDigitalSources(self): """returns the related digital sources""" t = getattr(self, 'xdata_11', None) @@ -592,7 +572,7 @@ return t - def moveObjectPlace(self, objectList, objectId, direction): + def _moveObjectPlace(self, objectList, objectId, direction): """Move object with objectId from objectList in direction by changing its place attribute.""" if not objectId or not direction: @@ -615,9 +595,50 @@ return + + def getImageList(self): + """returns the sorted list of images for this project""" + items = self.objectValues(spec='MPIWGProject_image') + # sort by place + return sorted(items, key=lambda x:int(getattr(x, 'place', 0))) + + + 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[:] + obj.enabled = True; + obj.place = self._getLastImageNumber() + 1 + obj.id = filename + + # invalidate thumbnail + self.projectThumb = None + + if RESPONSE is not None: + self.redirect(RESPONSE, 'manageImages') + + + def _getLastImageNumber(self): + items = self.getImageList() + if not items: + return 0 + else: + return getattr(items[-1], 'place', 0) + + def manageImages(self, name=None, op=None): """manage images""" - self.moveObjectPlace(self.getImageList(), name, op) + self._moveObjectPlace(self.getImageList(), name, op) # invalidate thumbnail self.projectThumb = None @@ -626,25 +647,31 @@ return pt() - def managePublications(self, name=None, op=None): - """manage publications""" - self.moveObjectPlace(self.getPublicationList(), name, op) + 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]) + + # invalidate thumbnail + self.projectThumb = None + + if RESPONSE: + self.redirect(RESPONSE, 'manageImages') - pt = self.editPublicationsForm - return pt() - + + def getPublicationList(self): + """returns the list of related publications""" + items = self.objectValues(spec='MPIWGProject_publication') + # sort by place + items.sort(key=lambda x:int(getattr(x, 'place', 0))) + return items + - def manageRelatedProjects(self, name=None, op=None): - """manage related projects""" - self.moveObjectPlace(self.getRelatedProjectList(), name, op) - - pt = self.editRelatedProjectsForm - return pt() - - def addPublication(self, text, RESPONSE=None): """add an MPIWG_Publication""" - number = self.getLastPublicationNumber() + 1 + number = self._getLastPublicationNumber() + 1 name = "publication_" + str(number) while hasattr(self, name): number += 1 @@ -656,21 +683,46 @@ obj = getattr(self, name) obj.text = text[0:] obj.enabled = True; - obj.place = self.getLastPublicationNumber() + 1 + obj.place = self._getLastPublicationNumber() + 1 obj.id = name if RESPONSE is not None: self.redirect(RESPONSE, 'managePublications') - def errorRelatedProjects(self, link): - """error creating a related project""" - pt = self.editRelatedProjectsError - return pt(link=link) + def _getLastPublicationNumber(self): + items = self.getPublicationList() + if not items: + return 0 + else: + return getattr(items[-1], 'place', 0) + + + def managePublications(self, name=None, op=None): + """manage publications""" + self._moveObjectPlace(self.getPublicationList(), name, op) + + pt = self.editPublicationsForm + return pt() + + def deletePublication(self, id, RESPONSE=None): + """delete Publication id""" + self.manage_delObjects([id]) + if RESPONSE: + self.redirect(RESPONSE, 'managePublications') + + + def getRelatedProjectList(self): + """returns the list of related projects""" + items = self.objectValues(spec='MPIWGProject_relatedProject') + # sort by place + items.sort(key=lambda x:int(getattr(x, 'place', 0))) + return items + def addRelatedProject(self, link, RESPONSE=None): """add a MPIWGProject_relatedProject""" - number = self.getLastRelatedProjectNumber() + 1 + number = self._getLastRelatedProjectNumber() + 1 name = "related_project_" + str(number) while hasattr(self, name): number += 1 @@ -700,29 +752,13 @@ obj.projectWEB_title = object.getProjectTitle() logging.debug("add relobj:webtitle" + repr(obj.projectWEB_title)) obj.enabled = True; - obj.place = self.getLastRelatedProjectNumber() + 1 + obj.place = self._getLastRelatedProjectNumber() + 1 obj.id = name if RESPONSE is not None: self.redirect(RESPONSE, 'manageRelatedProjects') - def getLastImageNumber(self): - items = self.getImageList() - if not items: - return 0 - else: - return getattr(items[-1], 'place', 0) - - - def getLastPublicationNumber(self): - items = self.getPublicationList() - if not items: - return 0 - else: - return getattr(items[-1], 'place', 0) - - - def getLastRelatedProjectNumber(self): + def _getLastRelatedProjectNumber(self): items = self.getRelatedProjectList() if not items: return 0 @@ -730,58 +766,108 @@ return getattr(items[-1], 'place', 0) - def deletePublication(self, id, RESPONSE=None): - """delete Publication id""" - self.manage_delObjects([id]) - if RESPONSE: - self.redirect(RESPONSE, 'managePublications') + def manageRelatedProjects(self, name=None, op=None): + """manage related projects""" + self._moveObjectPlace(self.getRelatedProjectList(), name, op) + + pt = self.editRelatedProjectsForm + return pt() + + + def deleteRelatedProject(self, id, RESPONSE=None): + """delete Publication id""" + self.manage_delObjects([id]) + if RESPONSE: + self.redirect(RESPONSE, 'manageRelatedProjects') + - - def deleteRelatedProject(self, id, RESPONSE=None): - """delete Publication id""" - self.manage_delObjects([id]) - if RESPONSE: - self.redirect(RESPONSE, 'manageRelatedProjects') + def errorRelatedProjects(self, link): + """error creating a related project""" + pt = self.editRelatedProjectsError + return pt(link=link) + + + def getAdditionalPublicationList(self): + """hole publications aus der datenbank""" + query="select * from pubmanbiblio_projects where lower(key_main) = lower(%s) order by priority DESC" + return self.executeZSQL(query,[self.getId()]) + + + def hasAdditionalPublications(self): + """test if extended publication list exists""" + query="select count(*) from pubmanbiblio_projects where lower(key_main) = lower(%s)" + res= self.executeZSQL(query,[self.getId()]) + if res[0].count > 0: + return True + else: + return False - 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]) + def addAdditionalPublicationsFromPubman(self,REQUEST): + """addPublications from pubman""" + data=REQUEST.form + if data.get("method",None) is None: + pt = self.editAddAdditionalPublications + return pt() + + if data.get("method") == "search": + entries= self.mpiwgPubman.search(data) + pt = self.editAddAdditionalPublications + return pt(values=entries) + + if data.get("method") == "add": + return self.addEntriesToAdditionalPublicationList(data) + #pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff/pubman','add_publications.zpt')).__of__(self) + + + def addEntriesToAdditionalPublicationList(self,data): + """fuege eintrage aus data zur publications liste. + + @param data Map mit escidocID --> value + value muss "add" sein damit hinzugefuegt wird""" + for key in data.keys(): + if key.startswith('escidoc:'): + query="INSERT INTO pubmanbiblio_projects (key_main,escidocId) values (%s,%s)" + if data.get(key)=="add": + self.executeZSQL(query,[self.getId(),key]) + + if hasattr(self,'REQUEST'): + return self.REQUEST.response.redirect("changeAdditionalPublications") + + + def changeAdditionalPublications(self,REQUEST): + """change published publications""" + data=REQUEST.form + if data.get("method","change"): + for key in data.keys(): + splitted=key.split("__") #format escidoc_id__p fuer priority, nur escidocid + value=data[key] + if len(splitted)==1: + self.deleteFromAdditionalPublicationList(key); - # invalidate thumbnail - self.projectThumb = None - - if RESPONSE: - self.redirect(RESPONSE, 'manageImages') + elif(splitted[1]) == "p": + self.setAdditionalPublicationPriority(splitted[0],value); + + pt = self.editAdditionalPublicationsForm + return pt() + + + def deleteFromAdditionalPublicationList(self,escidocid): + """Loessche publication with escidoc id from publication list""" + query ="DELETE FROM pubmanbiblio_projects WHERE escidocid=%s and key_main=%s" + self.executeZSQL(query,[escidocid,self.getId()]); - 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[:] - obj.enabled = True; - obj.place = self.getLastImageNumber() + 1 - obj.id = filename - - # invalidate thumbnail - self.projectThumb = None + def setAdditionalPublicationPriority(self,escidocid,value): + query="update pubmanbiblio_projects set priority=%s where escidocid=%s and key_main=%s" + try: + value = int(value) + self.executeZSQL(query,[value,escidocid,self.getId()]); + except: + logging.error("couldn't change:") + logging.error(escidocid) + logging.error(value) - if RESPONSE is not None: - self.redirect(RESPONSE, 'manageImages') - def getActualVersion(self, date=None): """actuelle version""" @@ -1032,6 +1118,7 @@ """save content aus preview""" self.WEB_project_description = self.previewTemplate.WEB_project_description[0:] self.REQUEST.RESPONSE.redirect("./index.html") + def saveEditedContent(self, kupu=None, preview=None): """save Edited content""" @@ -1056,17 +1143,6 @@ return True - security.declareProtected('View management screens', 'edit') - def edit(self, western=None): - """Edit pages""" - if western: - self.REQUEST.RESPONSE.setCookie("MP_debug_code", "western", path="/") - - # pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProjectNeu.zpt')).__of__(self) - pt = self.editForm - return pt() - - def getBreadcrumbs(self): """return list of breadcrumbs from here to the root""" crumbs = [] @@ -1113,18 +1189,12 @@ # return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"/previewTemplate") - def editMPIWGProjectForm(self): - """editform""" - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_MPIWGProject.zpt')).__of__(self) - return pt() - - def isResponsibleScientist(self, key): """teste ob eine Person in der Liste der respl. scientists auftaucht""" - #key = utf8ify(key) for resp in self.getResponsibleScientistsList(): logging.debug("resp=%s key=%s"%(repr(resp),repr(key))) - if resp.get('key', '').lower() == key.lower(): + # TODO: we need to get ASCII keys!! + if utf8ify(resp.get('key', '').lower()) == utf8ify(key).lower(): return True return False @@ -1248,17 +1318,6 @@ RESPONSE.redirect('manage_main') - security.declareProtected('View management screens', 'editBasic') - def editBasic(self, identifiedNames=None): - """editform""" - if not identifiedNames: - identifiedNames = self.identifyNames(self.getResponsibleScientists()) - - logging.debug("editBasic: IdentifiedNames=%s" % repr(identifiedNames)) - pt = self.edit_basic - return pt(identifiedNames=identifiedNames) - - def getContent(self, field, filter=None): """Inhalt des Feldes""" val = getattr(self, field, '') @@ -1456,85 +1515,6 @@ self.executeZSQL("insert into projects_members (project_id, member_key) values (%s, %s)", (pid, memberKey)) - def addPublicationsFromPubman(self,REQUEST): - """addPublications from pubman""" - data=REQUEST.form - if data.get("method",None) is None: - pt = self.editAddAdditionalPublications - return pt() - - if data.get("method") == "search": - entries= self.mpiwgPubman.search(data) - pt = self.editAddAdditionalPublications - return pt(values=entries) - - if data.get("method") == "add": - return self.addEntriesToAdditionalPublicationList(data) - #pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/staff/pubman','add_publications.zpt')).__of__(self) - - def addEntriesToAdditionalPublicationList(self,data): - """fuege eintrage aus data zur publications liste. - - @param data Map mit escidocID --> value - value muss "add" sein damit hinzugefuegt wird""" - for key in data.keys(): - if key.startswith('escidoc:'): - query="INSERT INTO pubmanbiblio_projects (key_main,escidocId) values (%s,%s)" - if data.get(key)=="add": - self.executeZSQL(query,[self.getId(),key]) - - if hasattr(self,'REQUEST'): - return self.REQUEST.response.redirect("changeAdditionalPublications") - - - def changeAdditionalPublications(self,REQUEST): - """change published publications""" - data=REQUEST.form - if data.get("method","change"): - for key in data.keys(): - splitted=key.split("__") #format escidoc_id__p fuer priority, nur escidocid - value=data[key] - if len(splitted)==1: - self.deleteFromAdditionalPublicationList(key); - - elif(splitted[1]) == "p": - self.setAdditionalPublicationPriority(splitted[0],value); - - pt = self.editAdditionalPublicationsForm - return pt() - - - def deleteFromAdditionalPublicationList(self,escidocid): - """Loessche publication with escidoc id from publication list""" - query ="DELETE FROM pubmanbiblio_projects WHERE escidocid=%s and key_main=%s" - self.executeZSQL(query,[escidocid,self.getId()]); - - - def setAdditionalPublicationPriority(self,escidocid,value): - query="update pubmanbiblio_projects set priority=%s where escidocid=%s and key_main=%s" - try: - value = int(value) - self.executeZSQL(query,[value,escidocid,self.getId()]); - except: - logging.error("couldn't change:") - logging.error(escidocid) - logging.error(value) - - - def getAdditionalPublicationList(self): - """hole publications aus der datenbank""" - query="select * from pubmanbiblio_projects where lower(key_main) = lower(%s) order by priority DESC" - return self.executeZSQL(query,[self.getId()]) - - - def hasAdditionalPublications(self): - """test if extended publication list exists""" - query="select count(*) from pubmanbiblio_projects where lower(key_main) = lower(%s)" - res= self.executeZSQL(query,[self.getId()]) - if res[0].count > 0: - return True - else: - return False def manage_addMPIWGProjectForm(self):
--- a/zpt/project/edit_basic.zpt Fri May 03 10:16:47 2013 +0200 +++ b/zpt/project/edit_basic.zpt Fri May 03 11:30:41 2013 +0200 @@ -46,16 +46,15 @@ value python:here.getCompletedAt()" type="text" len="15" /> (format dd.mm.yyyy or mm.yyyy or yyyy)</td> </tr> - </table> - <h2>Names</h2> - <table tal:define="global count python:0"> + <table tal:define="global count python:0; + identifiedNames python:here.identifyNames(here.getResponsibleScientists());"> <tr> <th>Name in project</th><th>MPIWG member object</th> </tr> - <tr tal:repeat="identifiedName python:options.get('identifiedNames',{}).items()"> + <tr tal:condition="identifiedNames" tal:repeat="identifiedName identifiedNames/items"> <tal:x tal:define="global count python:count+1" /> <td><input type="hidden" tal:attributes="value python:identifiedName[0]; name python:'responsibleScientist_name_%s'%count" /> <span
--- a/zpt/project/edit_publications.zpt Fri May 03 10:16:47 2013 +0200 +++ b/zpt/project/edit_publications.zpt Fri May 03 11:30:41 2013 +0200 @@ -40,7 +40,7 @@ </ul> </tal:block> - <h3><a tal:attributes="href string:$root/addPublicationsFromPubman"> Add publication to additional publication list</a></h3> + <h3><a tal:attributes="href string:$root/addAdditionalPublicationsFromPubman"> Add publication to additional publication list</a></h3> <h3><a tal:attributes="href string:$root/changePublications"> Change additional publication list</a></h3> </tal:block> </body>
--- a/zpt/project/edit_template.zpt Fri May 03 10:16:47 2013 +0200 +++ b/zpt/project/edit_template.zpt Fri May 03 11:30:41 2013 +0200 @@ -13,7 +13,7 @@ <metal:block metal:define-slot="navsel"/> <div class="mainnav"> <span tal:attributes="class python:test('basic'==menusel, 'mainmenusel', 'mainmenu')"><a tal:attributes="href string:$root/editBasic">Basic information</a></span> - <span tal:attributes="class python:test('description'==menusel, 'mainmenusel', 'mainmenu')"><a tal:attributes="href string:$root/edit">Project description</a></span> + <span tal:attributes="class python:test('description'==menusel, 'mainmenusel', 'mainmenu')"><a tal:attributes="href string:$root/editDescription">Project description</a></span> <span tal:attributes="class python:test('images'==menusel, 'mainmenusel', 'mainmenu')"><a tal:attributes="href string:$root/manageImages">Images</a></span> <span tal:attributes="class python:test('publications'==menusel, 'mainmenusel', 'mainmenu')"><a tal:attributes="href string:$root/managePublications">Publications</a></span> <span tal:attributes="class python:test('relatedProjects'==menusel, 'mainmenusel', 'mainmenu')"><a tal:attributes="href string:$root/manageRelatedProjects">Related Projects</a></span>
--- a/zpt/project/project_template.zpt Fri May 03 10:16:47 2013 +0200 +++ b/zpt/project/project_template.zpt Fri May 03 11:30:41 2013 +0200 @@ -114,7 +114,7 @@ <a tal:attributes="href bookurl" tal:content="structure publication/text" /> </tal:x> </tal:y> - <tal:x tal:condition="python:hasattr(publication,'description')"> + <tal:x tal:condition="python:hasattr(publication, 'description')"> <div tal:content="structure publication/description" /> </tal:x> </div>