Mercurial > hg > MPIWGWeb
diff MPIWGProjects.py @ 50:e30a4bd074db
more cleaning up projects.
| author | casties |
|---|---|
| date | Mon, 29 Apr 2013 20:34:17 +0200 |
| parents | e40ff9829108 |
| children | d456fe185649 |
line wrap: on
line diff
--- a/MPIWGProjects.py Mon Apr 29 18:00:46 2013 +0200 +++ b/MPIWGProjects.py Mon Apr 29 20:34:17 2013 +0200 @@ -74,8 +74,7 @@ definedFields = fieldLabels.keys() # TODO: should this be sorted? -checkFields = ['xdata_01'] - +editableFields = ('xdata_01', 'xdata_05', 'xdata_07', 'xdata_08', 'xdata_11', 'xdata_12', 'xdata_13') # die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus Kompatibilitaetsgruenden, bleiben die Klassen hier noch drin. # Sonst funktionieren die alten Webseiten nicht mehr. @@ -301,16 +300,20 @@ # # templates # + project_template = PageTemplateFile('zpt/project/project_template', globals()) + # edit templates edit_css = ImageFile('css/edit.css', globals()) # make css refreshable for development edit_css.index_html = refreshingImageFileIndexHtml edit_basic = PageTemplateFile('zpt/project/edit_basic', globals()) editForm = PageTemplateFile('zpt/project/edit_description', globals()) edit_template = PageTemplateFile('zpt/project/edit_template', globals()) - project_template = PageTemplateFile('zpt/project/project_template', globals()) + # management templates + loadNewFileForm = PageTemplateFile('zpt/project/manage_newfile', globals()) + description_only_html = PageTemplateFile('zpt/project/description_only_html', globals()) + # TODO: this should go away extendedBibliography = PageTemplateFile('zpt/project/extendedBibliography_template', globals()) - # TODO: compat edit_MPIWGProject_main = edit_template @@ -356,383 +359,6 @@ logging.debug(email.Utils.formatdate() + ' GMT') RESPONSE.redirect(url + addStr % timeStamp) - def decode(self, str): - """return unicode object""" - return unicodify(str) - - def isCheckField(self, fieldname): - """return chechfield""" - return (fieldname in checkFields) - - def sortedByPlace(self, metatype): - """find metatype and sort by place""" - def sort(x, y): - return cmp(getattr(x[1], 'place', 0), getattr(y[1], 'place', 0)) - - logging.debug("MPIWGProjects begin: sorted by place: " + metatype) - founds = self.ZopeFind(self, obj_metatypes=[metatype]); - - founds.sort(sort) - logging.debug("MPIWGProjects end: sorted by place: " + metatype) - return founds - - - def copyPublicationsToList(self, RESPONSE=None): - """copy publications in to list""" - - publicationTxt = self.getContent('WEB_related_pub') - - pubSplits = publicationTxt.split("<p>") - - for pubSplit in pubSplits: - pubSplit = pubSplit.replace("</p>", "") - self.addPublication(pubSplit) - - setattr(self, "WEB_related_pub_copied", True); - - if RESPONSE: - - self.redirect(RESPONSE, 'managePublications') - - def hasRelatedPublicationsOldVersion(self): - """teste ob es related publications gibt""" - - ret = True; - if (self.getContent('WEB_related_pub') == ''): - ret = False; # nichts im alten feld - logging.debug("webrel:" + repr(ret)) - if (getattr(self, 'WEB_related_pub_copied', False)): - ret = False; # alte daten sind schon kopiert worden - - logging.debug("webrel_copied:" + repr(ret)) - publications = self.ZopeFind(self, obj_metatypes=['MPIWGProject_publication']); - - if(len(publications) > 0): - ret = False; # es gibt publicationen in der neuen liste - - - logging.debug("len(publ)" + repr(ret)) - - return ret; - - - def hasInlineImage(self): - """Return the number of inline images in the description.""" - text = self.getDescription() - cnt = text.count('<p class="picture">') - return cnt - - - def copyImageToMargin(self, RESPONSE=None): - """copy inline images to marginal images""" - # getImages from WEB_project_description - description = self.getDescription() - - text2 = description - splitted = text2.split("""<p class="picture">""") - - imageURLs = [] - imageCaptions = [] - for split in splitted[1:]: - tmp = split.split("</p>") - # return repr(splitted[1]) - - try: - imageURLs.append(tmp[0].split("\"")[1].encode('utf-8')) - except: - - try: - imageURLs.append(tmp[0].split("src=")[1].split(" ")[0].encode('utf-8')) - except: - imageURLs.append("") - - split2 = "</p>".join(tmp[1:]) - splitted = split2.split("""<p class="picturetitle">""") - if len(splitted) > 1: - tmp = splitted[1].split("</p>") - imageCaptions.append(tmp[0].encode('utf-8')) - - else: - # keine caption - imageCaptions.append("") - - # eintragen: - for imageURL in imageURLs: - if not imageURL: - # no URL - no image - continue - - filename = imageURL.split("/")[-1] - # lege neues images object an, mit leerem bild - - if filename in self: - # existiert das bild schon, dann neuen filenamen - filename = "project_image_" + filename - if filename in self: - # exists too - assume its already converted - logging.warn("copyImageToMargin: image %s exists - skipping!"%filename) - continue - - 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 - - try: # relative url - data = urllib.urlopen(url).read() - except: - try: # absolute - data = urllib.urlopen(self.imageURL).read() - except: - logging.error("copyImageToMargin: can't open: %s" % url) - - obj = getattr(self, filename) - obj.update_data(data) - - # clean description - logging.debug("copyImageToMargin: description:%s"%repr(description)) - dom = ET.fromstring("<html>%s</html>"%description) - for e in dom.findall(".//p[@class='picture']"): - # remove contents - e.clear() - # remove tag - e.tag = None - - for e in dom.findall(".//p[@class='picturetitle']"): - # remove contents - e.clear() - # remove tag - e.tag = None - - # remove html tag - dom.tag = None - # set as new description - description = serialize(dom) - logging.debug("copyImageToMargin: new description:%s"%repr(description)) - setattr(self, 'WEB_project_description', description) - - 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 - - - pt = PageTemplateFile('zpt/project/edit_images', globals()).__of__(self) - return pt() - - def managePublications(self, pubName=None, op=None): - """managage images""" - 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 - - - pt = PageTemplateFile('zpt/project/edit_publications', globals()).__of__(self) - return pt() - - def manageRelatedProjects(self, pubName=None, op=None): - """managage relatedProjectd""" - 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 - - - pt = PageTemplateFile('zpt/project/edit_related_projects', globals()).__of__(self) - return pt() - - - def hasExtendedPublicationList(self): - """test if extended publication list exists""" - if not hasattr(self, "publicationList"): - return False - else: - return True - - 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') - - if RESPONSE: - self.redirect(RESPONSE, "managePublications") - - - 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 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() - - 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 getNumber(self): """returns sorting number""" @@ -935,6 +561,213 @@ return t + 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 + + + pt = PageTemplateFile('zpt/project/edit_images', globals()).__of__(self) + return pt() + + def managePublications(self, pubName=None, op=None): + """managage images""" + 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 + + + pt = PageTemplateFile('zpt/project/edit_publications', globals()).__of__(self) + return pt() + + def manageRelatedProjects(self, pubName=None, op=None): + """managage relatedProjectd""" + 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 + + + pt = PageTemplateFile('zpt/project/edit_related_projects', globals()).__of__(self) + return pt() + + + def hasExtendedPublicationList(self): + """test if extended publication list exists""" + if not hasattr(self, "publicationList"): + return False + else: + return True + + 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') + + if RESPONSE: + self.redirect(RESPONSE, "managePublications") + + + 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 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 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() + + 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""" @@ -978,17 +811,6 @@ - def hasChildren(self, date=None, onlyActive=1, onlyArchived=1): - """check if project has children""" - 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""" @@ -1014,17 +836,11 @@ self.redirect(RESPONSE, 'manageImages') - def versionHeader(self): - """version Header, gibt header text entsprechend der aktuellen version aus""" - - actualTime = time.localtime() - retTXT = """<h2>This is an outdated version, for the actual version please refer to <a href="%s">%s</a></h2>""" - s = self.aq_parent.absolute_url() - # print getattr(self,'archiveTime',actualTime) - if getattr(self, 'archiveTime', actualTime) < actualTime: - return retTXT % (s, s) - else: - return "" + + def getEditableFields(self): + """giveListofDatafields""" + return editableFields + def getActualVersion(self, date=None): """actuelle version""" @@ -1098,19 +914,6 @@ def delArchiveTime(self): """delete archive time""" del self.archiveTime - - def versionManageForm(self): - """version Manage form:currently only set to invisible""" - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'MPIWGProject_versionManageForm.zpt')).__of__(self) - return pt() - - def versionManage(self, invisible=None, RESPONSE=None): - """version Manage form:currently only set to invisible""" - self.invisible = invisible - - if RESPONSE is not None: - self.redirect(RESPONSE, 'manage_main') - def isActiveProject(self): """check if the project is still active, default is true.""" @@ -1278,125 +1081,6 @@ return self.REQUEST['URL1'] + "/no_project" - def no_project(self): - """warnung: project noch nicht existent""" - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'no_project')).__of__(self) - return pt() - - - def harvest_page(self, context=None, mode="normal"): - """seite fuer harvesting fuer die Projektsuche""" - - if not context: - context = self - - if self.isActiveProject() and self.isCurrentVersion(): - templates = self.en.getHarvestCache() - - ext = getattr(self, "harvest_main", None) - if ext: - rendered = getattr(self, ext.getId())() - templates[self.absolute_url()] = rendered - transaction.commit() - return rendered - - - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'harvest_main')).__of__(context) - - rendered = pt() - templates[self.absolute_url()] = rendered - transaction.commit() - return rendered - - - - def index_html_old(self, request=True, context=None): - """show homepage""" - - bound_names = {} - - if not context: - context = self - if request: - if self.REQUEST.has_key('date') and self.REQUEST.SESSION.get('MPI_redirected', None) == None: - self.REQUEST.SESSION['MPI_redirected'] = 1 - self.REQUEST.RESPONSE.redirect(self.checkDate(self.REQUEST['date']) + "?date=" + self.REQUEST['date']) - else: - self.REQUEST.SESSION['MPI_redirected'] = None - - # ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"]) - - - request2 = getattr(self, 'REQUEST', None) - - if request2 is not None: - response = request2.response - if not response.headers.has_key('content-type'): - response.setHeader('content-type', 'text/html') - - security = getSecurityManager() - bound_names['user'] = security.getUser() - - # Retrieve the value from the cache. - keyset = None - if self.ZCacheable_isCachingEnabled(): - - # Prepare a cache key. - keyset = {'here': self, 'params':request2['QUERY_STRING']} - - result = self.ZCacheable_get(keywords=keyset) - - if result is not None: - # Got a cached value. - return result - - pt = getTemplate(self, "project_main") - # Execute the template in a new security context. - security.addContext(self) - - try: - # logging.debug("index_html pt=%s"%repr(pt)) - result = pt.pt_render(extra_context=bound_names) - # logging.debug("index_html result=%s"%repr(result)) - if keyset is not None: - # Store the result in the cache. - self.ZCacheable_set(result, keywords=keyset) - - return result - finally: - security.removeContext(self) - - - - def index_html_old2(self, request=True, context=None): - """show homepage""" - if not context: - context = self - if request: - if self.REQUEST.has_key('date') and self.REQUEST.SESSION.get('MPI_redirected', None) == None: - self.REQUEST.SESSION['MPI_redirected'] = 1 - self.REQUEST.RESPONSE.redirect(self.checkDate(self.REQUEST['date']) + "?date=" + self.REQUEST['date']) - else: - self.REQUEST.SESSION['MPI_redirected'] = None - - # ext=self.ZopeFind(self.aq_parent,obj_ids=["project_main"]) - - ext = getattr(self, "project_main", None) - if ext: - return getattr(self, ext.getId())() - - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'project_main')).__of__(context) - - return pt() - - - def getDataFields(self): - """giveListofDatafields""" - ret = [] - for x in range(1, 14): - if not x in [6, 10, 9]: # not used fields - ret.append('xdata_%02i' % x) - return ret def getDefinedFields(self): """show all defined fields""" @@ -1499,18 +1183,6 @@ # return utf8ify(text5) # return as utf-8 byte string - def showImagesOfPage(self, imageUrl=None): - """show Images of project""" - self.getContent('WEB_project_description', filter='yes') # get the content and store image infos into session - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'projectImageView.zpt')).__of__(self) - return pt() - - - def show_html(self): - """simple index""" - # return "HI" - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'MPIWGProject_index.zpt')).__of__(self) - return pt() def saveFromPreview(self): """save content aus preview""" @@ -1558,16 +1230,6 @@ else: return style - def getLabel_old(self): - """returns label (or title) of this project""" - l = self.getContent('xdata_07') - if l: - return l - l = self.getContent('WEB_title') - if l: - return l - return self.title - def getBreadcrumbs(self): """return list of breadcrumbs from here to the root""" crumbs = [] @@ -1623,82 +1285,20 @@ # return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"/previewTemplate") - def getWebProject_description(self): - """get description""" - debug = self.REQUEST.cookies.get("MP_debug_code", None) - - if debug and debug == "western": - return """ - <html> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - </head> - <body>%s</body> - </html> - """ % self.WEB_project_description[0] - - return """ - <html> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - </head> - <body>%s</body> - </html> - """ % self.getContent('WEB_project_description') - - - 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""" for resp in self.getResponsibleScientistsList(): - if resp['key'] == key: + if resp.get('key', None) == utf8ify(key): return True return False - def getPersonKeyList(self): - """gibt die key Liste der beteiligten Personen zurueck (utf8 codiert)""" - # logging.error("getPersonKeyList:%s"%getattr(self,'responsibleScientistsList',[])) - try: - return [utf8ify(x[1]) for x in getattr(self, 'responsibleScientistsList', [])] - except: - return[] - - - def myCapitalize(self, txt): - """kapitalisiere auch Namen mit -""" - splitted = [x.capitalize() for x in txt.split("-")] - return "-".join(splitted) - - def getNamesOrdered(self, list): - """Sortiert die Liste nach der Reihenfolge in xdata_01""" - - nameList = self.getContent('xdata_01') - if nameList.find(";") > -1: # rate Trenner ist ; - names = nameList.split(";") - else: - names = nameList.split(",") - - self._v_names = [] - for name in names: - self._v_names.append(name.rstrip().lstrip()) - - - def sort(x, y): - try: - return cmp(self._v_names.index(x[0]), self._v_names.index(y[0])) - except: - return 0 - - list.sort(sort) - - return list - def identifyNames(self, nameList): """Bekommt eine Komma oder Semikolon getrennte Liste mit Name der Form Vorname MittelName(n) Nachname @@ -1748,7 +1348,7 @@ else: returnNamesDict[name] = [] - logging.debug("id: %s" % repr(returnNamesDict)) + logging.debug("identified names: %s" % repr(returnNamesDict)) return returnNamesDict @@ -1763,7 +1363,7 @@ # set all definedFields for x in definedFields: if formdata.has_key(x): - setattr(self, x, formdata[x]) + setattr(self, x, unicodify(formdata[x])) # TODO: What does this do? completedAt = formdata.get('completedAt') @@ -1790,7 +1390,7 @@ # wenn es ein Feld der Form reponsibleScientist_nr_KEY gibt nr = keyParts[2] if keyParts[1] == "name": - names[nr] = formdata[key] + names[nr] = unicodify(formdata[key]) elif keyParts[1] == "key": keys[nr] = formdata[key] @@ -1819,23 +1419,6 @@ RESPONSE.redirect('manage_main') - def isChecked(self, wert, list): - """check if wert is in ; seperated list""" - - # felder sind manchmnal als liste mit einem element definiert - if type(list) is StringType or UnicodeType: - splitted = list.split(";") - else: - splitted = list[0].split(";") - - splitted = [y.rstrip().lstrip() for y in splitted] - - for x in splitted: - x = re.sub(r"[^A-z ]", "", x) - if (not x == u'') and x in wert: - return 1 - return 0 - security.declareProtected('View management screens', 'editBasic') def editBasic(self, identifiedNames=None): """editform""" @@ -1847,23 +1430,6 @@ return pt(identifiedNames=identifiedNames) - security.declareProtected('View management screens', 'editMPIWGBasisForm') - def editMPIWGBasisForm(self): - """editform""" - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_MPIWGBasis.zpt')).__of__(self) - return pt() - - security.declareProtected('View management screens', 'editMPIWGRelatedPublicationsForm') - def editMPIWGRelatedPublicationsForm(self): - """Edit related Publications""" - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_MPIWGRelatedPublications.zpt')).__of__(self) - return pt() - - - def loadNewFileForm(self): - """Neues XML-File einlesen""" - pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'MPIWGProject_newfile.zpt')).__of__(self) - return pt() def loadNewFile(self, RESPONSE=None): """einlesen des neuen files""" @@ -1897,6 +1463,144 @@ return + def copyPublicationsToList(self, RESPONSE=None): + """copy publications in to list""" + + publicationTxt = self.getContent('WEB_related_pub') + + pubSplits = publicationTxt.split("<p>") + + for pubSplit in pubSplits: + pubSplit = pubSplit.replace("</p>", "") + self.addPublication(pubSplit) + + setattr(self, "WEB_related_pub_copied", True); + + if RESPONSE: + + self.redirect(RESPONSE, 'managePublications') + + def hasRelatedPublicationsOldVersion(self): + """teste ob es related publications gibt""" + + ret = True; + if (self.getContent('WEB_related_pub') == ''): + ret = False; # nichts im alten feld + logging.debug("webrel:" + repr(ret)) + if (getattr(self, 'WEB_related_pub_copied', False)): + ret = False; # alte daten sind schon kopiert worden + + logging.debug("webrel_copied:" + repr(ret)) + publications = self.ZopeFind(self, obj_metatypes=['MPIWGProject_publication']); + + if(len(publications) > 0): + ret = False; # es gibt publicationen in der neuen liste + + + logging.debug("len(publ)" + repr(ret)) + + return ret; + + + def hasInlineImage(self): + """Return the number of inline images in the description.""" + text = self.getDescription() + cnt = text.count('<p class="picture">') + return cnt + + + def copyImageToMargin(self, RESPONSE=None): + """copy inline images to marginal images""" + # getImages from WEB_project_description + description = self.getDescription() + + text2 = description + splitted = text2.split("""<p class="picture">""") + + imageURLs = [] + imageCaptions = [] + for split in splitted[1:]: + tmp = split.split("</p>") + # return repr(splitted[1]) + + try: + imageURLs.append(tmp[0].split("\"")[1].encode('utf-8')) + except: + + try: + imageURLs.append(tmp[0].split("src=")[1].split(" ")[0].encode('utf-8')) + except: + imageURLs.append("") + + split2 = "</p>".join(tmp[1:]) + splitted = split2.split("""<p class="picturetitle">""") + if len(splitted) > 1: + tmp = splitted[1].split("</p>") + imageCaptions.append(tmp[0].encode('utf-8')) + + else: + # keine caption + imageCaptions.append("") + + # eintragen: + for imageURL in imageURLs: + if not imageURL: + # no URL - no image + continue + + filename = imageURL.split("/")[-1] + # lege neues images object an, mit leerem bild + + if filename in self: + # existiert das bild schon, dann neuen filenamen + filename = "project_image_" + filename + if filename in self: + # exists too - assume its already converted + logging.warn("copyImageToMargin: image %s exists - skipping!"%filename) + continue + + 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 + + try: # relative url + data = urllib.urlopen(url).read() + except: + try: # absolute + data = urllib.urlopen(self.imageURL).read() + except: + logging.error("copyImageToMargin: can't open: %s" % url) + + obj = getattr(self, filename) + obj.update_data(data) + + # clean description + logging.debug("copyImageToMargin: description:%s"%repr(description)) + dom = ET.fromstring(utf8ify("<html>%s</html>"%description)) + for e in dom.findall(".//p[@class='picture']"): + # remove contents + e.clear() + # remove tag + e.tag = None + + for e in dom.findall(".//p[@class='picturetitle']"): + # remove contents + e.clear() + # remove tag + e.tag = None + + # remove html tag + dom.tag = None + # set as new description + description = unicodify(serialize(dom)) + logging.debug("copyImageToMargin: new description:%s"%repr(description)) + setattr(self, 'WEB_project_description', description) + + if RESPONSE: + self.redirect(RESPONSE, 'manageImages') + + def updateProjectMembers(self, updateResponsibleScientistsList=False): """updates project-member table""" if updateResponsibleScientistsList: @@ -2062,12 +1766,13 @@ security.declareProtected('View management screens', 'updateAllProjects') - def updateAllProjects(self, updateResponsibleScientistsList=False): + def updateAllProjects(self, updateResponsibleScientistsList=False, RESPONSE=None): """Patch all current projects for legacy problems.""" cnt = 0 - log = "" + fulllog = "" # go through all projects for (id, project) in self.ZopeFind(self, obj_metatypes=['MPIWGProject'], search_sub=1): + log = "" cnt += 1 # # hasRelatedPublicationsOldVersion @@ -2134,7 +1839,29 @@ if hasattr(extpub, 'connection_id'): logging.debug("updateAllProjects(%s): extended publication %s has connection_id=%s!"%(project.getId(),extpub.getId(),extpub.connection_id)) - return log + "\n DONE! updated %s projects!" % cnt + # + # unicodify + # + for field in ('WEB_title', 'xdata_01', 'xdata_07', 'xdata_08', 'xdata_11', 'xdata_12', 'xdata_13', + 'WEB_project_description', 'WEB_related_pub'): + text = getattr(project, field, None) + if isinstance(text, str): + log += "%s: has non-unicode field %s\n"%(project.getId(), field) + logging.debug("updateAllProjects(%s): has has non-unicode field %s\n"%(project.getId(), field)) + setattr(project, field, unicodify(text)) + + fulllog += log + if RESPONSE is not None: + RESPONSE.write(log) + + + log += "\n DONE! updated %s projects!" % cnt + fulllog += log + if RESPONSE is not None: + RESPONSE.write(log) + RESPONSE.flush() + else: + return fulllog
