Mercurial > hg > MPIWGWeb
changeset 50:e30a4bd074db
more cleaning up projects.
author | casties |
---|---|
date | Mon, 29 Apr 2013 20:34:17 +0200 |
parents | e40ff9829108 |
children | d456fe185649 |
files | MPIWGProjects.py MPIWGProjects_removed.py MPIWGRoot.py MPIWGRoot_deleted_methods.py zpt/MPIWGProject_index.zpt zpt/MPIWGProject_newfile.zpt zpt/MPIWGProject_versionManageForm.zpt zpt/edit_MPIWGBasis.zpt zpt/project/description_only_html.zpt zpt/project/edit_basic.zpt zpt/project/edit_description.zpt zpt/project/edit_template.zpt zpt/project/manage_newfile.zpt zpt/project/project_template.zpt |
diffstat | 14 files changed, 872 insertions(+), 966 deletions(-) [+] |
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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MPIWGProjects_removed.py Mon Apr 29 20:34:17 2013 +0200 @@ -0,0 +1,241 @@ +# +# removed methods +# +class MPIWGProjects_notused: + + 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 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 no_project(self): + """warnung: project noch nicht existent""" + pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'no_project')).__of__(self) + return pt() + + + 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 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 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 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 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 +
--- a/MPIWGRoot.py Mon Apr 29 18:00:46 2013 +0200 +++ b/MPIWGRoot.py Mon Apr 29 20:34:17 2013 +0200 @@ -324,35 +324,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' @@ -1143,178 +1114,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 manage_addMPIWGRootForm(self): """form for adding the root"""
--- a/MPIWGRoot_deleted_methods.py Mon Apr 29 18:00:46 2013 +0200 +++ b/MPIWGRoot_deleted_methods.py Mon Apr 29 20:34:17 2013 +0200 @@ -1,3 +1,6 @@ +class MPIWGRoot_deleted: + + def removeStopWords(self,xo): """remove stop words from xo""" if not hasattr(self,'_v_stopWords'): @@ -301,4 +304,207 @@ """restore""" self.nameIndexEdited=self.nameIndex return "done" + + 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 + + # 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 +
--- a/zpt/MPIWGProject_index.zpt Mon Apr 29 18:00:46 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -<html> -<body> -<table border="1"> -<tr tal:repeat="field here/getDefinedFields"> -<td valign="top" tal:content="field"/> -<!--<td tal:repeat="attr python:here.getAttribute(field)" tal:content="structure python:attr.encode('ascii','ignore')"/>--> -<td tal:repeat="attr python:here.getAttribute(field)" tal:content="structure python:attr"/> -</tr> -</table> -</body> -</html> - -
--- a/zpt/MPIWGProject_newfile.zpt Mon Apr 29 18:00:46 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -<html> -<head> - <title>The title</title> -</head> -<body> - -<div> - -<h1>Project-Upload</h1> -<form method="post" action="loadNewFile" enctype="multipart/form-data"> - -<p>File:</p> -<input type="file" name="fileupload"/> -<input type="submit"> -</form> -</div> -</body> -</html>
--- a/zpt/MPIWGProject_versionManageForm.zpt Mon Apr 29 18:00:46 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -<h1>Set invisible</h1> -<form action="versionManage"> -<input type="checkbox" name="invisible">Invisible<br/> -<input type="submit" value="submit"> -</form>
--- a/zpt/edit_MPIWGBasis.zpt Mon Apr 29 18:00:46 2013 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -<html> -<head> -<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> -</head> -<body> -<form method="POST" action="editMPIWGProject"> -<h2>Basis Information for <span tal:replace="here/getId"/></h2> -<table> -<tr> -<td>Project Title</td> -<td><input tal:attributes="name python:'WEB_title'; value python:here.getContent('WEB_title')" size=100/></td> -</tr> -<tal:block tal:repeat="field here/getDataFields"> -<tr> -<td tal:content="python:here.fieldLabels[field]"/> -<td> <input tal:attributes="name field; value python:here.getContent(field)" size=100/></td> -</tr> -<tr tal:condition="python:here.isCheckField(field)"> -<td colspan=2 height="20"> -<tal:block tal:define="checkList python:here.giveCheckList(here,field)"> -<tal:block repeat="item checkList/keys"> -<span tal:replace="item"/>: -<tal:block tal:condition="python:len(checkList[item])>0"> -found -</tal:block> -<tal:block tal:condition="not:python:len(checkList[item])>0"> -<font color="#ff0000">not found</font> -</tal:block> - - -<!--<input tal:repeat="prop python:checkList[item]" - type="radio" - tal:attributes="name python:'val_%s'%field; value python:prop[0].getId()" - tal:content="python:prop[1]"/>--> -</tal:block> -<br> -</tal:block> -</td> -</tr> -</tal:block> -</table> - - -<input type="submit"> -</form> -</body> -</html>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/project/description_only_html.zpt Mon Apr 29 20:34:17 2013 +0200 @@ -0,0 +1,10 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +</head> +<body> + <div tal:replace="structure here/getDescription"/> +</body> +</html>
--- a/zpt/project/edit_basic.zpt Mon Apr 29 18:00:46 2013 +0200 +++ b/zpt/project/edit_basic.zpt Mon Apr 29 20:34:17 2013 +0200 @@ -11,28 +11,15 @@ <table> <tr> <td><b>Project Title</b></td> - <td><input tal:attributes="name python:'WEB_title'; value python:here.getContent('WEB_title')" size="80" /></td> + <td><input name="WEB_title" tal:attributes="value python:here.getProjectTitle()" size="80" /></td> </tr> - <tal:block tal:repeat="field here/getDataFields"> + <tal:block tal:repeat="field here/getEditableFields"> <tr> <td><b tal:content="python:here.fieldLabels[field]" /></td> <td><input tal:attributes="name field; value python:here.getContent(field)" size=80 /></td> </tr> - <tr tal:condition="python:here.isCheckField(field)"> - <td /> - <td><tal:block tal:define="checkList python:here.giveCheckList(here,field)"> - <tal:block repeat="item checkList/keys"> - <span tal:replace="item" />: - <tal:block tal:condition="python:len(checkList[item])>0">found</tal:block> - <tal:block tal:condition="not:python:len(checkList[item])>0"> - <font color="#ff0000">not found</font> - </tal:block> - </tal:block> - <br /> - </tal:block></td> - </tr> </tal:block> - <tr tal:define="hasChildren python:here.hasChildren()"> + <tr tal:define="hasChildren here/getSubProjects"> <td>Project is visible</td> <tal:x tal:condition="python:hasChildren and here.isActiveProject()"> <td>visible (status cannot be changed, because the project has visible children.) <input
--- a/zpt/project/edit_description.zpt Mon Apr 29 18:00:46 2013 +0200 +++ b/zpt/project/edit_description.zpt Mon Apr 29 20:34:17 2013 +0200 @@ -3,7 +3,7 @@ <html metal:use-macro="here/edit_template/macros/page" xmlns:metal="http://xml.zope.org/namespaces/metal" > <head> <metal:block metal:fill-slot="html_head"> -<metal:macros xmlns:metal="http://xml.zope.org/namespaces/metal" use-macro="here/kupuEditor/kupumacros/macros/head"> +<metal:macros use-macro="here/kupuEditor/kupumacros/macros/head"> <metal:macros fill-slot="bootstrap-editor"> <script type="text/javascript" src="/kupuEditor/kupuinit_form.js"> </script> <script type="text/javascript" src="/kupuEditor/kupustart_form.js"> </script> @@ -54,11 +54,11 @@ <metal:macros fill-slot="editorframe"> <tal:block tal:condition="not:python:here.REQUEST.get('fromPreview',None)"> <iframe class="kupu-editor-iframe" id="kupu-editor" frameborder="0" scrolling="auto" src="fulldoc" - tal:attributes="src python:here.absolute_url()+'/getWebProject_description'"> </iframe> + tal:attributes="src python:here.absolute_url()+'/description_only_html'"> </iframe> </tal:block> <tal:block tal:condition="python:here.REQUEST.get('fromPreview',None)"> <iframe class="kupu-editor-iframe" id="kupu-editor" frameborder="0" scrolling="auto" src="fulldoc" - tal:attributes="src python:here.absolute_url()+'/previewTemplate/getWebProject_description'"> </iframe> + tal:attributes="src python:here.absolute_url()+'/previewTemplate/description_only_html'"> </iframe> </tal:block> </metal:macros> </metal:macros>
--- a/zpt/project/edit_template.zpt Mon Apr 29 18:00:46 2013 +0200 +++ b/zpt/project/edit_template.zpt Mon Apr 29 20:34:17 2013 +0200 @@ -1,6 +1,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -<html metal:define-macro="page"> +<html xmlns="http://www.w3.org/1999/xhtml" + metal:define-macro="page"> <head tal:define="global onload nothing;"> <metal:block metal:define-slot="html_head"/> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zpt/project/manage_newfile.zpt Mon Apr 29 20:34:17 2013 +0200 @@ -0,0 +1,17 @@ +<html> +<head> +</head> +<body> + <div tal:replace="structure here/manage_page_header">Header</div> + <!-- ZOPE management tabs --> + <h2 tal:define="manage_tabs_message options/manage_tabs_message | nothing" tal:replace="structure here/manage_tabs">Tabs</h2> + <!-- end of ZOPE management tabs --> + + <h1>Upload new project</h1> + <form method="post" action="loadNewFile" enctype="multipart/form-data"> + + <p>File:</p> + <input type="file" name="fileupload" /> <input type="submit"> + </form> +</body> +</html>
--- a/zpt/project/project_template.zpt Mon Apr 29 18:00:46 2013 +0200 +++ b/zpt/project/project_template.zpt Mon Apr 29 20:34:17 2013 +0200 @@ -30,8 +30,8 @@ <h1 tal:content="here/getProjectTitle">History of Scientific Objectivity, 18th-19th Cs</h1> <p class="maintext_authors"> <tal:block tal:repeat="person here/getResponsibleScientistsList"> - <a tal:omit-tag="python:not (person['username'] and here.getStaffFolder().isActiveMember(key=person['key']))" - tal:attributes="href string:$root/${secmap/staff}/members/${person/username}" tal:content="person/name"> Name of + <a tal:define="username person/username|nothing" tal:omit-tag="python:not username or not here.getStaffFolder().isActiveMember(key=person.get('key',None))" + tal:attributes="href string:$root/${secmap/staff}/members/$username" tal:content="person/name"> Name of responsible person</a><tal:block tal:condition="not:repeat/person/end">, </tal:block> </tal:block> </p>