Mercurial > hg > MPIWGWeb
annotate MPIWGProjects.py @ 51:d456fe185649
more work on projects. more cleanup.
author | casties |
---|---|
date | Tue, 30 Apr 2013 12:49:26 +0200 |
parents | e30a4bd074db |
children | 1ed79b33200c |
rev | line source |
---|---|
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1 """This contains the class MPIWG Projects |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
2 for organizing and maintaining the different project pages |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
3 |
39 | 4 $author dwinter 26.06.2008 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
5 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
6 """ |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
7 from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
8 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
9 from Products.ZCatalog.CatalogPathAwareness import CatalogAware |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
10 from OFS.Image import Image |
22 | 11 from App.ImageFile import ImageFile |
12 from OFS.SimpleItem import SimpleItem | |
13 from OFS.Folder import Folder | |
14 from OFS.Image import Image | |
15 from OFS.Cache import Cacheable | |
16 from AccessControl import ClassSecurityInfo | |
17 from AccessControl import getSecurityManager | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
18 from Globals import package_home |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
19 import urllib |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
20 import re |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
21 import os |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
22 import email |
35 | 23 import xmlhelper # Methoden zur Verwaltung der projekt xml |
22 | 24 import xmlrpclib |
25 import sys | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
26 from types import * |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
27 import logging |
22 | 28 import time |
29 | |
49 | 30 import xml.etree.ElementTree as ET |
31 | |
32 from SrvTxtUtils import getInt, unicodify, utf8ify, serialize, refreshingImageFileIndexHtml | |
22 | 33 from Products.MPIWGBibliography.BibliographyManager import BibliographyManager |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
34 from bibliography import * |
33 | 35 from Products.ZDBInterface.ZDBInterfaceFolder import ZDBInterfaceFolder |
35 | 36 # import xml.dom.minidom |
37 # from Ft.Xml.XPath import Evaluate | |
38 # from Ft.Xml.XPath.Context import Context | |
39 # from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print | |
40 # from Ft.Xml import EMPTY_NAMESPACE | |
41 # import copy | |
42 # import updatePersonalWWW | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
43 |
35 | 44 # import MPIWGStaff |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
45 |
27 | 46 from HashTree import HashTree |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
47 from MPIWGHelper import * |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
48 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
49 import MPIWGRoot |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
50 import MPIWGLink |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
51 import MPIWGTemplate |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
52 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
53 import transaction |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
54 |
33 | 55 |
39 | 56 # TODO: better names for the fields |
35 | 57 fieldLabels = {'WEB_title':'WEB_Title', |
33 | 58 'xdata_01':'Responsible Scientists', |
59 'xdata_02':'Department', | |
60 'xdata_03':'Historical Persons', | |
61 'xdata_04':'Time period', | |
62 'xdata_05':'Sorting number', | |
63 'xdata_06':'Keywords', | |
64 'xdata_07':'Short title', | |
65 'xdata_08':'Other involved scholars' , | |
66 'xdata_09':'Disciplines', | |
67 'xdata_10':'Themes', | |
68 'xdata_11':'Object Digitallibrary', | |
69 'xdata_12':'Cooperation partners', | |
70 'xdata_13':'Funding institutions', | |
71 'WEB_project_header':'WEB_project_header', | |
72 'WEB_project_description':'WEB_project_description', | |
73 'WEB_related_pub':'WEB_related_pub'} | |
74 | |
39 | 75 definedFields = fieldLabels.keys() # TODO: should this be sorted? |
76 | |
50 | 77 editableFields = ('xdata_01', 'xdata_05', 'xdata_07', 'xdata_08', 'xdata_11', 'xdata_12', 'xdata_13') |
33 | 78 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
79 # die folgenden Klassen sind jetzt in einzelne Files ausgelagert aus Kompatibilitaetsgruenden, bleiben die Klassen hier noch drin. |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
80 # Sonst funktionieren die alten Webseiten nicht mehr. |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
81 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
82 class MPIWGRoot(MPIWGRoot.MPIWGRoot): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
83 """depricated""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
84 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
85 class MPIWGLink(MPIWGLink.MPIWGLink): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
86 """depricated""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
87 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
88 class MPIWGTemplate(MPIWGTemplate.MPIWGTemplate): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
89 """depricated""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
90 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
91 class MPIWGProject_publication(Folder): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
92 """publications object fuer project""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
93 |
35 | 94 meta_type = "MPIWGProject_publication" |
95 def redirect(self, RESPONSE, url): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
96 """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
97 |
35 | 98 timeStamp = time.time() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
99 |
35 | 100 if url.find("?") > -1: # giebt es schon parameter |
101 addStr = "&time=%s" | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
102 else: |
35 | 103 addStr = "?time=%s" |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
104 |
35 | 105 RESPONSE.setHeader('Last-Modified', email.Utils.formatdate().split("-")[0] + 'GMT') |
106 logging.debug(email.Utils.formatdate() + ' GMT') | |
107 RESPONSE.redirect(url + addStr % timeStamp) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
108 |
35 | 109 def hasLinkToBookPage(self, mode="not_cached"): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
110 """teste ob eingebener link zu einer MPIWG Book page geht""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
111 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
112 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
113 logging.debug("MPIWGProject_publication - begin hasLinkToBookPage") |
35 | 114 if (getattr(self, 'link', '') == ''): |
115 return False # es gibt keinen link | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
116 |
35 | 117 logging.debug("MPIWGProject_publication - begin hasLinkToBookPage:" + self.link) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
118 server = xmlrpclib.ServerProxy(self.link) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
119 |
35 | 120 if(mode == "cached"): |
121 if (hasattr(self, "_v_hasLinkToBookPage")): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
122 logging.debug("haslink cached") |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
123 return self._v_hasLinkToBookPage |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
124 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
125 try: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
126 server.getImageUrls() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
127 logging.debug("MPIWGProject_publication - end TRUE") |
35 | 128 self._v_hasLinkToBookPage = True |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
129 return True |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
130 except: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
131 logging.debug("MPIWGProject_publication - end FALSE ") |
35 | 132 self._v_hasLinkToBookPage = True |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
133 return False |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
134 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
135 |
35 | 136 def getImageUrls(self, mode="not_cached"): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
137 """get the image urls""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
138 |
35 | 139 if (getattr(self, 'link', '') == ''): |
140 return [] # es gibt keinen link | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
141 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
142 server = xmlrpclib.ServerProxy(self.link) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
143 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
144 |
35 | 145 if(mode == "cached"): |
146 if (hasattr(self, "_v_imageUrls")): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
147 logging.debug("getImageURL cached") |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
148 return self._v_imageUrls |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
149 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
150 try: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
151 urls = server.getImageUrls() |
35 | 152 ret = [] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
153 for url in urls: |
35 | 154 url = os.path.join(self.link, url) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
155 ret.append(url) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
156 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
157 except: |
35 | 158 self._v_imageUrls = [] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
159 return [] |
35 | 160 self._v_imageUrls = ret[0:] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
161 return ret |
39 | 162 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
163 |
35 | 164 def editPublication(self, text=None, image1=None, image2=None, description=None, link=None, RESPONSE=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
165 """edit a publication""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
166 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
167 if (not text) and (not description): |
35 | 168 pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_publicationForm.zpt')).__of__(self) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
169 return pt() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
170 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
171 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
172 if text: |
35 | 173 self.text = text[0:] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
174 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
175 if description: |
35 | 176 self.description = description |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
177 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
178 if link: |
35 | 179 self.link = link[0:] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
180 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
181 if image1: |
35 | 182 if hasattr(self, 'publicationImage1'): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
183 self.publicationImage1.manage_upload(image1) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
184 else: |
35 | 185 nO = Image('publicationImage1', '', image1) |
186 self._setObject('publicationImage1', nO) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
187 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
188 if image2: |
35 | 189 if hasattr(self, 'publicationImage2'): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
190 self.publicationImage2.manage_upload(image2) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
191 else: |
35 | 192 nO = Image('publicationImage2', '', image2) |
193 self._setObject('publicationImage2', nO) | |
39 | 194 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
195 self.ZCacheable_invalidate() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
196 if RESPONSE: |
35 | 197 self.redirect(RESPONSE, "../managePublications") |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
198 |
39 | 199 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
200 class MPIWGProject_relatedProject(Folder): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
201 """publications object fuer project""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
202 |
35 | 203 meta_type = "MPIWGProject_relatedProject" |
204 def redirect(self, RESPONSE, url): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
205 """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
206 |
35 | 207 timeStamp = time.time() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
208 |
35 | 209 if url.find("?") > -1: # giebt es schon parameter |
210 addStr = "&time=%s" | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
211 else: |
35 | 212 addStr = "?time=%s" |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
213 |
35 | 214 RESPONSE.setHeader('Last-Modified', email.Utils.formatdate().split("-")[0] + 'GMT') |
215 logging.debug(email.Utils.formatdate() + ' GMT') | |
216 RESPONSE.redirect(url + addStr % timeStamp) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
217 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
218 |
35 | 219 def editRelatedProject(self, link=None, RESPONSE=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
220 """edit a publication""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
221 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
222 if (not link): |
35 | 223 pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_relatedProjectForm.zpt')).__of__(self) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
224 return pt() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
225 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
226 # hole die id des projektes |
35 | 227 splitted = link.split("/") |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
228 |
35 | 229 # teste ob es das project gibt |
230 if len(splitted) < 1: | |
231 self.redirect(RESPONSE, 'errorRelatedProjects?link=' + link) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
232 |
35 | 233 objid = splitted[-1] |
234 object = getattr(self.projects, objid, None) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
235 |
35 | 236 if object == None: |
237 self.redirect(RESPONSE, 'errorRelatedProjects?link=' + link) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
238 |
35 | 239 self.orginallink = link[0:] |
240 self.objid = objid[0:] | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
241 |
35 | 242 self.projectWEB_title = object.getContent('WEB_title')[0:] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
243 |
35 | 244 self.enabled = True; |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
245 self.ZCacheable_invalidate() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
246 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
247 if RESPONSE: |
35 | 248 self.redirect(RESPONSE, "../manageRelatedProjects") |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
249 |
39 | 250 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
251 class MPIWGProject_image(Image): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
252 """Images for Projects""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
253 |
35 | 254 meta_type = "MPIWGProject_image" |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
255 |
35 | 256 def showImage(self, imageUrl=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
257 """show Images at an extra page""" |
35 | 258 self.getContent('WEB_project_description', filter='yes') # get the content and store image infos into session |
259 pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'projectImageView.zpt')).__of__(self) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
260 return pt() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
261 |
35 | 262 def editImage(self, file=None, caption=None, RESPONSE=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
263 """edit the Image""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
264 if (not file) and (not caption): |
35 | 265 pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_imageForm.zpt')).__of__(self) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
266 return pt() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
267 |
35 | 268 if file and (not file.filename.lstrip().rstrip() == ""): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
269 self.manage_upload(file) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
270 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
271 if caption: |
35 | 272 self.caption = caption[0:] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
273 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
274 if RESPONSE: |
35 | 275 self.redirect(RESPONSE, "../manageImages") |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
276 |
24 | 277 |
35 | 278 class MPIWGProject(CatalogAware, Folder, Cacheable): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
279 """Class for Projects""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
280 |
33 | 281 security = ClassSecurityInfo() |
282 meta_type = 'MPIWGProject' | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
283 |
35 | 284 manage_options = Folder.manage_options + ( |
285 {'label':'Load New File', 'action':'loadNewFileForm'}, | |
286 {'label':'Edit', 'action':'editForm'}, | |
22 | 287 ) |
35 | 288 # {'label':'Edit ProjectInfo','action':'editMPIWGProjectForm'}, |
289 # {'label':'Edit BasisInfo','action':'editMPIWGBasisForm'}, | |
290 # {'label':'Edit Publications','action':'editMPIWGRelatedPublicationsForm'}, | |
291 # {'label':'Edit Themes & Disciplines','action':'editMPIWGDisciplinesThemesForm'}, | |
292 # {'label':'Versionmanager','action':'versionManageForm'}, | |
22 | 293 |
36 | 294 # list of responsible scientists. entries are dicts with name, key, and username. |
35 | 295 responsibleScientistsList = [] |
36 | 296 |
297 # thumbnail image | |
298 projectThumb = None | |
22 | 299 |
33 | 300 # |
301 # templates | |
302 # | |
50 | 303 project_template = PageTemplateFile('zpt/project/project_template', globals()) |
304 # edit templates | |
22 | 305 edit_css = ImageFile('css/edit.css', globals()) |
306 # make css refreshable for development | |
307 edit_css.index_html = refreshingImageFileIndexHtml | |
35 | 308 edit_basic = PageTemplateFile('zpt/project/edit_basic', globals()) |
22 | 309 editForm = PageTemplateFile('zpt/project/edit_description', globals()) |
310 edit_template = PageTemplateFile('zpt/project/edit_template', globals()) | |
50 | 311 # management templates |
312 loadNewFileForm = PageTemplateFile('zpt/project/manage_newfile', globals()) | |
313 description_only_html = PageTemplateFile('zpt/project/description_only_html', globals()) | |
314 | |
39 | 315 # TODO: this should go away |
316 extendedBibliography = PageTemplateFile('zpt/project/extendedBibliography_template', globals()) | |
22 | 317 # TODO: compat |
318 edit_MPIWGProject_main = edit_template | |
319 | |
320 | |
321 def __init__(self, id, argv=None): | |
322 """initiere classe""" | |
35 | 323 self.creationTime = time.strftime("%Y%m%d%H%M%S", time.localtime())[0:] |
324 self.id = id | |
325 self.title = id | |
326 self.isActiveFlag = True # Flag is true is the project is still active, False if accomplished | |
327 self.responsibleScientistsList = [] # enthaelt die Lister der verantwortlichen Wissenschaftler in der Form (NAME, KEY), key ist "" flass Wissenschaftler nicht an unserem Haus | |
22 | 328 |
329 if argv: | |
330 for arg in definedFields: | |
331 try: | |
35 | 332 setattr(self, arg, argv[arg]) |
22 | 333 except: |
35 | 334 setattr(self, arg, "") |
22 | 335 else: |
336 for arg in definedFields: | |
35 | 337 setattr(self, arg, '') |
22 | 338 |
339 | |
35 | 340 def index_html(self): |
341 """default html representation""" | |
342 # TODO: do we need to do date-stuff? | |
343 # get template | |
344 pt = getattr(self, 'project_template') | |
345 # render template | |
346 return pt() | |
347 | |
348 def redirect(self, RESPONSE, url): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
349 """mache ein redirect mit einem angehaengten time stamp um ein reload zu erzwingen""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
350 |
35 | 351 timeStamp = time.time() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
352 |
35 | 353 if url.find("?") > -1: # giebt es schon parameter |
354 addStr = "&time=%s" | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
355 else: |
35 | 356 addStr = "?time=%s" |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
357 |
35 | 358 RESPONSE.setHeader('Last-Modified', email.Utils.formatdate().split("-")[0] + 'GMT') |
359 logging.debug(email.Utils.formatdate() + ' GMT') | |
360 RESPONSE.redirect(url + addStr % timeStamp) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
361 |
27 | 362 |
363 def getNumber(self): | |
364 """returns sorting number""" | |
33 | 365 n = getattr(self, 'xdata_05', None) |
366 if isinstance(n, list): | |
367 # compat with old lists | |
368 return n[0] | |
369 else: | |
370 return n | |
27 | 371 |
35 | 372 |
373 def getProjectTitle(self): | |
374 """returns the project title""" | |
375 t = getattr(self, 'WEB_title', None) | |
376 if isinstance(t, list): | |
377 # compat with old lists | |
378 return t[0] | |
379 else: | |
380 return t | |
381 | |
39 | 382 |
383 def getLabel(self): | |
384 """returns label (or title) of this project""" | |
385 l = getattr(self, 'xdata_07', None) | |
386 if isinstance(l, list): | |
387 # compat with old lists | |
388 l = l[0] | |
389 | |
390 if l: | |
391 return l | |
392 else: | |
393 return self.getProjectTitle() | |
394 | |
395 | |
35 | 396 def getResponsibleScientists(self): |
397 """returns the responsible scientists as string""" | |
398 t = getattr(self, 'xdata_01', None) | |
399 if isinstance(t, list): | |
400 # compat with old lists | |
401 return t[0] | |
402 else: | |
403 return t | |
404 | |
405 | |
406 def getResponsibleScientistsList(self): | |
407 """returns a list with the responsible scientists as dicts with name, key, and shortname""" | |
408 return self.responsibleScientistsList | |
409 | |
410 | |
411 def setResponsibleScientistsList(self, nameDict): | |
412 """sets the responsibleScientistsList from nameDict. | |
413 List will be ordered like the responsible scientists field.""" | |
414 names = self.getResponsibleScientists() | |
415 if names.find(";") > -1: # rate Trenner ist ; | |
416 nameList = names.split(";") | |
417 else: | |
418 nameList = names.split(",") | |
419 | |
420 scientistsList = [] | |
421 for name in nameList: | |
422 name = unicodify(name.strip()) | |
423 logging.debug("setResponsibleScientistsList: name=%s"%repr(name)) | |
424 if name in nameDict: | |
425 # found in data | |
426 data = nameDict[name] | |
427 scientistsList.append({'name': name, 'key': data['key'], 'username': data['username']}) | |
428 else: | |
429 scientistsList.append({'name': name}) | |
430 | |
431 logging.debug("setResponsibleScientistsList: nameDict=%s new list=%s"%(repr(nameDict),repr(scientistsList))) | |
432 self.responsibleScientistsList = scientistsList | |
433 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
434 |
39 | 435 def getInvolvedScholars(self): |
436 """returns the other involved scholars""" | |
437 t = getattr(self, 'xdata_08', None) | |
438 if isinstance(t, list): | |
439 # compat with old lists | |
440 return t[0] | |
441 else: | |
442 return t | |
443 | |
444 | |
445 def getCooperationPartners(self): | |
446 """returns the cooperation partners""" | |
447 t = getattr(self, 'xdata_12', None) | |
448 if isinstance(t, list): | |
449 # compat with old lists | |
450 return t[0] | |
451 else: | |
452 return t | |
453 | |
454 | |
27 | 455 def getUrl(self, baseUrl=None): |
456 """returns URL to this Project""" | |
457 if baseUrl is None: | |
458 return self.absolute_url() | |
459 | |
35 | 460 return '%s/%s' % (baseUrl, self.getId()) |
27 | 461 |
462 | |
463 def getThumbUrl(self, default='http://defaultthumb.jpg'): | |
24 | 464 """returns the URL of the project thumbnail image""" |
36 | 465 thumb = self.projectThumb |
466 if thumb is None: | |
467 # get thumb from list | |
468 imgs = self.getImageList() | |
469 url = default | |
470 if len(imgs) > 0: | |
471 thumb = imgs[0] | |
472 self.projectThumb = thumb | |
473 | |
474 if thumb is None: | |
475 return None | |
476 | |
477 return thumb.absolute_url() | |
478 | |
24 | 479 |
480 def getImageList(self): | |
481 """returns the sorted list of images for this project""" | |
43 | 482 items = self.objectValues(spec='MPIWGProject_image') |
24 | 483 # sort by place |
43 | 484 return sorted(items, key=lambda x:int(getattr(x, 'place', 0))) |
24 | 485 |
39 | 486 |
487 def getDepartment(self): | |
488 """returns the department of this project""" | |
489 num = self.getNumber() | |
490 pp = num.find('.') | |
491 if pp > 0: | |
492 num = num[:pp] | |
493 | |
494 return self.getMPIWGRoot().getDepartment(projectNumber=num) | |
495 | |
496 | |
497 def getDepartmentId(self): | |
498 """returns the id of the department of this project""" | |
499 dep = self.getDepartment() | |
500 if dep is not None: | |
501 return dep.getId() | |
502 | |
503 return None | |
504 | |
505 | |
506 def getDescription(self, filter=False): | |
507 """returns the project description""" | |
49 | 508 text = getattr(self, 'WEB_project_description', None) |
509 if isinstance(text, list): | |
39 | 510 # compat with old lists |
49 | 511 text = text[0] |
512 | |
513 return text | |
514 | |
39 | 515 |
516 def getSuperProjects(self): | |
517 """returns a list of ancestor projects to the root""" | |
518 tree = self.getProjectTree() | |
519 return tree.getAncestorsOf(self.getNumber()) | |
520 | |
521 | |
522 def getSubProjects(self, active=1): | |
523 """returns a list of child projects""" | |
524 tree = self.getProjectTree() | |
525 return [p for p in tree.getChildrenOf(self.getNumber()) if p.checkActive(active)] | |
526 | |
527 | |
528 def getRelatedProjects(self): | |
529 """returns the list of related projects""" | |
530 items = self.objectValues(spec='MPIWGProject_relatedProject') | |
531 # sort by place | |
532 items.sort(key=lambda x:int(getattr(x, 'place', 0))) | |
533 return items | |
534 | |
535 | |
536 def getRelatedPublications(self): | |
537 """returns the list of related publications""" | |
538 items = self.objectValues(spec='MPIWGProject_publication') | |
539 # sort by place | |
540 items.sort(key=lambda x:int(getattr(x, 'place', 0))) | |
541 return items | |
542 | |
543 | |
544 def getRelatedDigitalSources(self): | |
545 """returns the related digital sources""" | |
546 t = getattr(self, 'xdata_11', None) | |
547 if isinstance(t, list): | |
548 # compat with old lists | |
549 return t[0] | |
550 else: | |
551 return t | |
43 | 552 |
39 | 553 |
554 def getFundingInstitutions(self): | |
555 """returns the funding institutions""" | |
556 t = getattr(self, 'xdata_13', None) | |
557 if isinstance(t, list): | |
558 # compat with old lists | |
559 return t[0] | |
560 else: | |
561 return t | |
562 | |
24 | 563 |
50 | 564 def manageImages(self, imageName=None, op=None): |
565 """managage images""" | |
566 if imageName and op: | |
567 if op == 'up': | |
568 images = self.getImages() | |
569 for image in images: | |
570 if image[0] == imageName: | |
571 nr = images.index(image) | |
572 if not nr == 0: | |
573 images[nr - 1][1].place += 1 | |
574 images[nr][1].place -= 1 | |
575 pass | |
576 elif op == 'down': | |
577 images = self.getImages() | |
578 for image in images: | |
579 if image[0] == imageName: | |
580 nr = images.index(image) | |
581 if not (nr == len(images) - 1): | |
582 images[nr + 1][1].place -= 1 | |
583 images[nr][1].place += 1 | |
584 pass | |
585 | |
586 | |
51 | 587 # invalidate thumbnail |
588 self.projectThumb = None | |
50 | 589 pt = PageTemplateFile('zpt/project/edit_images', globals()).__of__(self) |
590 return pt() | |
591 | |
592 def managePublications(self, pubName=None, op=None): | |
593 """managage images""" | |
594 if pubName and op: | |
595 if op == 'up': | |
596 publications = self.getPublications() | |
597 for publication in publications: | |
598 if publication[0] == pubName: | |
599 nr = publications.index(publication) | |
600 if not nr == 0: | |
601 publications[nr - 1][1].place += 1 | |
602 publications[nr][1].place -= 1 | |
603 pass | |
604 elif op == 'down': | |
605 publications = self.getPublications() | |
606 for publication in publications: | |
607 if publication[0] == pubName: | |
608 nr = publications.index(publication) | |
609 if not (nr == len(publications) - 1): | |
610 publications[nr + 1][1].place -= 1 | |
611 publications[nr][1].place += 1 | |
612 pass | |
613 | |
614 | |
615 pt = PageTemplateFile('zpt/project/edit_publications', globals()).__of__(self) | |
616 return pt() | |
617 | |
618 def manageRelatedProjects(self, pubName=None, op=None): | |
619 """managage relatedProjectd""" | |
620 if pubName and op: | |
621 if op == 'up': | |
622 relatedProjects = self.getRelatedProjects() | |
623 for project in relatedProjects: | |
624 if project[0] == pubName: | |
625 nr = relatedProjects.index(project) | |
626 if not nr == 0: | |
627 relatedProjects[nr - 1][1].place += 1 | |
628 relatedProjects[nr][1].place -= 1 | |
629 pass | |
630 elif op == 'down': | |
631 relatedProjects = self.getRelatedProjects() | |
632 for project in relatedProjects: | |
633 if project[0] == pubName: | |
634 nr = relatedProjects.index(project) | |
635 if not (nr == len(relatedProjects) - 1): | |
636 relatedProjects[nr + 1][1].place -= 1 | |
637 relatedProjects[nr][1].place += 1 | |
638 pass | |
639 | |
640 | |
641 pt = PageTemplateFile('zpt/project/edit_related_projects', globals()).__of__(self) | |
642 return pt() | |
643 | |
644 | |
645 def hasExtendedPublicationList(self): | |
646 """test if extended publication list exists""" | |
647 if not hasattr(self, "publicationList"): | |
648 return False | |
649 else: | |
650 return True | |
651 | |
652 def createExtendedPublicationList(self, RESPONSE=None): | |
653 """erzeuge erweiterte publications liste""" | |
654 pl = BibliographyManager("publicationList", "", "institutsbiblio", self.connection_id) | |
655 self._setObject("publicationList", pl) | |
656 | |
657 zt = ZopePageTemplate('index.html') | |
658 pl._setObject('index.html', zt) | |
659 default_content_fn = os.path.join(package_home(globals()), | |
660 'zpt/showExtendedProjectBibliography.zpt') | |
661 text = open(default_content_fn).read() | |
662 zt.pt_edit(text, 'text/html') | |
663 | |
664 if RESPONSE: | |
665 self.redirect(RESPONSE, "managePublications") | |
666 | |
667 | |
668 def getPublications(self): | |
669 """get all Publications""" | |
670 def sort_images(x, y): | |
671 return cmp(getattr(x[1], 'place', 0), getattr(y[1], 'place', 0)) | |
672 | |
673 publications = self.ZopeFind(self, obj_metatypes=['MPIWGProject_publication']) | |
674 | |
675 publications.sort(sort_images) | |
676 return publications | |
677 | |
678 def addPublication(self, text, RESPONSE=None): | |
679 """add an MPIWG_Publication""" | |
680 number = self.getLastPublicationNumber() + 1 | |
681 name = "publication_" + str(number) | |
682 while hasattr(self, name): | |
683 number += 1 | |
684 name = "publication_" + str(number) | |
685 | |
686 newPublication = MPIWGProject_publication(name) | |
687 | |
688 self._setObject(name, newPublication) | |
689 obj = getattr(self, name) | |
690 obj.text = text[0:] | |
691 obj.enabled = True; | |
692 obj.place = self.getLastPublicationNumber() + 1 | |
693 obj.id = name | |
694 self.ZCacheable_invalidate() | |
695 if RESPONSE is not None: | |
696 | |
697 self.redirect(RESPONSE, 'managePublications') | |
698 | |
699 def errorRelatedProjects(self, link): | |
700 """error creating a related project""" | |
701 pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_project_error_relatedProject.zpt')).__of__(self) | |
702 return pt(link=link) | |
703 | |
704 def addRelatedProject(self, link, RESPONSE=None): | |
705 """add an MPIWG_Publication""" | |
706 number = self.getLastPublicationNumber() + 1 | |
707 name = "RelatedProject" + str(number) | |
708 while hasattr(self, name): | |
709 number += 1 | |
710 name = "RelatedProject_" + str(number) | |
711 | |
712 # hole die id des projektes | |
713 splitted = link.split("/") | |
714 | |
715 # teste ob es das project gibt | |
716 if len(splitted) < 1: | |
717 self.redirect(RESPONSE, 'errorRelatedProjects?link=' + link) | |
718 | |
719 objid = splitted[-1] | |
720 object = getattr(self.projects, objid, None) | |
721 | |
722 if object == None: | |
723 self.redirect(RESPONSE, 'errorRelatedProjects?link=' + link) | |
724 return | |
725 | |
726 newPublication = MPIWGProject_relatedProject(name) | |
727 | |
728 self._setObject(name, newPublication) | |
729 obj = getattr(self, name) | |
730 obj.orginallink = link[0:] | |
731 obj.objid = objid[0:] | |
732 logging.debug("add relobj:objid" + repr(obj.objid)) | |
733 obj.projectWEB_title = object.getContent('WEB_title')[0:] | |
734 logging.debug("add relobj:webtitle" + repr(obj.projectWEB_title)) | |
735 obj.enabled = True; | |
736 obj.place = self.getLastRelatedProjectNumber() + 1 | |
737 obj.id = name | |
738 self.ZCacheable_invalidate() | |
739 if RESPONSE is not None: | |
740 self.redirect(RESPONSE, 'manageRelatedProjects') | |
741 | |
742 | |
743 def getLastPublicationNumber(self): | |
744 publications = self.getPublications() | |
745 | |
746 if not publications: | |
747 return 0 | |
748 else: | |
749 return getattr(publications[-1][1], 'place', 0) | |
750 | |
751 def getLastRelatedProjectNumber(self): | |
752 publications = self.getRelatedProjects() | |
753 | |
754 if not publications: | |
755 return 0 | |
756 else: | |
757 return getattr(publications[-1][1], 'place', 0) | |
758 | |
759 def deletePublication(self, id, RESPONSE=None): | |
760 """delete Publication id""" | |
761 self.manage_delObjects([id]) | |
762 self.ZCacheable_invalidate() | |
763 if RESPONSE: | |
764 self.redirect(RESPONSE, 'managePublications') | |
765 | |
766 def deleteRelatedProject(self, id, RESPONSE=None): | |
767 """delete Publication id""" | |
768 self.manage_delObjects([id]) | |
769 self.ZCacheable_invalidate() | |
770 if RESPONSE: | |
771 self.redirect(RESPONSE, 'manageRelatedProjects') | |
772 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
773 def getImages(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
774 """get all Images""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
775 |
35 | 776 def sort_images(x, y): |
777 return cmp(getattr(x[1], 'place', 0), getattr(y[1], 'place', 0)) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
778 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
779 |
35 | 780 if (getattr(self, 'imageURL', '') != '') or (getattr(self, 'imagecap', '') != '') : |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
781 try: |
35 | 782 self.addImage(None, getattr(self, 'imagecap', ''), RESPONSE=None, filename=getattr(self, 'imageURL', '')) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
783 except: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
784 pass |
35 | 785 self.imageURL = '' |
786 self.imagecap = '' | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
787 |
35 | 788 images = self.ZopeFind(self, obj_metatypes=['MPIWGProject_image']) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
789 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
790 images.sort(sort_images) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
791 return images |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
792 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
793 def getLastImageNumber(self): |
35 | 794 images = self.getImages() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
795 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
796 if not images: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
797 return 0 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
798 else: |
35 | 799 return getattr(images[-1][1], 'place', 0) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
800 |
35 | 801 def deleteImage(self, id, RESPONSE=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
802 """delete Image id""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
803 try: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
804 self.manage_delObjects([id]) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
805 except: |
35 | 806 logging.error("ERROR MPIWG: %s %s" % sys.exc_info()[0:2]) |
44 | 807 |
808 # invalidate thumbnail | |
809 self.projectThumb = None | |
810 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
811 if RESPONSE: |
35 | 812 self.redirect(RESPONSE, 'manageImages') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
813 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
814 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
815 |
35 | 816 def addImage(self, fileHd, caption, RESPONSE=None, filename=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
817 """add an MPIWG_Project_image""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
818 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
819 if not filename: |
35 | 820 filename = fileHd.filename |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
821 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
822 if not fileHd: |
35 | 823 fileHd = file(os.path.join(package_home(globals()), 'blank.gif')) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
824 |
35 | 825 newImage = MPIWGProject_image(filename, filename, fileHd) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
826 |
35 | 827 self._setObject(filename, newImage) |
828 obj = getattr(self, filename) | |
829 obj.caption = caption[0:] | |
830 obj.enabled = True; | |
831 obj.place = self.getLastImageNumber() + 1 | |
832 obj.id = filename | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
833 |
44 | 834 # invalidate thumbnail |
835 self.projectThumb = None | |
836 | |
51 | 837 if RESPONSE is not None: |
35 | 838 self.redirect(RESPONSE, 'manageImages') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
839 |
50 | 840 |
841 def getEditableFields(self): | |
842 """giveListofDatafields""" | |
843 return editableFields | |
844 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
845 |
35 | 846 def getActualVersion(self, date=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
847 """actuelle version""" |
35 | 848 def sortProjectsByTime(x, y): |
849 return cmp(x[1].archiveTime, y[1].archiveTime) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
850 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
851 if not date: |
44 | 852 if self.isCurrentVersion(): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
853 return self |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
854 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
855 return None |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
856 |
35 | 857 # suche ob aeltere versionen vorhanden sind |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
858 |
35 | 859 finds = self.ZopeFind(self, obj_metatypes=['MPIWGProject']) |
860 if not finds: # wenn nicht dann teste ob die aktuelle version schon existiert hat. | |
861 ad = getattr(self, 'creationTime', '20050101000000') | |
862 if int(date) > int(ad): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
863 return self |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
864 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
865 return None |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
866 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
867 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
868 finds.sort(sortProjectsByTime) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
869 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
870 for find in finds: |
35 | 871 # gehe durch die alten Projekte und finde das entprechende |
872 if (int(find[1].archiveTime) > int(date)) and (int(date) > int(getattr(find[1], 'creationTime', '20050101000000'))): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
873 return find[1] |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
874 |
35 | 875 # kein passendes gefunden, dann teste ob das aktuelle in frage kommt |
876 ad = getattr(self, 'creationTime', '20050101000000') | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
877 |
35 | 878 if int(date) > int(ad): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
879 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
880 return self |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
881 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
882 return None |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
883 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
884 |
44 | 885 def isCurrentVersion(self): |
886 """Return if project is the current version.""" | |
887 currentTime = time.localtime() | |
888 # print getattr(self,'archiveTime',currentTime) | |
889 return (getattr(self, 'archiveTime', currentTime) >= currentTime) | |
890 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
891 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
892 def copyObjectToArchive(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
893 """kopiere aktuelles objekt ins archiv""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
894 logging.info("copytoarchive 1") |
35 | 895 cb = self.aq_parent.manage_copyObjects(self.getId()) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
896 logging.info("copytoarchive 2") |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
897 self.manage_pasteObjects(cb) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
898 logging.info("copytoarchive 3") |
35 | 899 actualTime = time.localtime() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
900 |
35 | 901 self.manage_renameObject(self.getId(), self.getId() + "_" + time.strftime("%Y%m%d%H%M%S", actualTime)) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
902 logging.info("copytoarchive 4") |
35 | 903 obj = getattr(self, self.getId() + "_" + time.strftime("%Y%m%d%H%M%S", actualTime)) |
904 obj.setArchiveTime(time.strftime("%Y%m%d%H%M%S", actualTime)) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
905 logging.info("copytoarchive 5") |
35 | 906 ids = [x[0] for x in self.ZopeFind(obj, obj_metatypes=['MPIWGProject'])] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
907 logging.info("copytoarchive 6") |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
908 obj.manage_delObjects(ids) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
909 logging.info("copytoarchive 7") |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
910 |
35 | 911 def setArchiveTime(self, time): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
912 """set Archive Time""" |
35 | 913 self.archiveTime = time[0:] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
914 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
915 def delArchiveTime(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
916 """delete archive time""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
917 del self.archiveTime |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
918 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
919 def isActiveProject(self): |
39 | 920 """check if the project is still active, default is true.""" |
35 | 921 return getattr(self, 'isActiveFlag', True) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
922 |
27 | 923 def checkActive(self, active): |
924 """returns if the project state matches the active state. | |
925 active = 0 : all projects | |
926 active = 1 : active projects | |
927 active = 2 : inactive projects | |
928 """ | |
35 | 929 act = getattr(self, 'isActiveFlag', True) |
27 | 930 return (active == 1 and act) or (active == 0) or (active == 2 and not act) |
931 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
932 def isArchivedProject(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
933 """check if the project is archived""" |
35 | 934 completed = self.getCompletedAt() |
935 # completed leer | |
936 if completed == "" : | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
937 return False; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
938 if completed == 0: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
939 return False; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
940 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
941 return True |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
942 |
27 | 943 def checkArchived(self, archived): |
944 """returns if the project state matches the archived state. | |
945 archived = 0 : all projects | |
946 archived = 1 : current projects | |
947 archived = 2 : archived projects | |
948 """ | |
949 arch = self.isArchivedProject() | |
950 return (archived == 1 and not arch) or (archived == 0) or (archived == 2 and arch) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
951 |
35 | 952 def setActiveFlag(self, status=True): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
953 """set the active flag""" |
35 | 954 self.isActiveFlag = status |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
955 |
35 | 956 def setCompletedAt(self, date): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
957 """set the date of completion, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY""" |
35 | 958 # logging.info("DATE:"+repr(date)) |
959 transformedDate = self.transformDate(date); | |
960 # logging.info("transformed"+repr(transformedDate)) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
961 if transformedDate is not None: |
35 | 962 setattr(self, "completedAt", transformedDate) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
963 return True; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
964 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
965 return False; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
966 |
35 | 967 def setStartedAt(self, date): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
968 """set the date of start, date should be in the form DD.MM.YYYY or MM.YYYY or YYYY""" |
35 | 969 # logging.info("DATE:"+repr(date)) |
970 transformedDate = self.transformDate(date); | |
971 # logging.info("transformed"+repr(transformedDate)) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
972 if transformedDate is not None: |
35 | 973 setattr(self, "startedAt", transformedDate) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
974 return True; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
975 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
976 return False; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
977 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
978 def getCompletedAt(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
979 """gibt das transformierte Datum zurueck, an dem das Projekt beendet wurde.""" |
35 | 980 date = getattr(self, 'completedAt', '') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
981 if date: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
982 return self.reTransformDate(date); |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
983 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
984 return "" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
985 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
986 def getStartedAt(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
987 """gibt das transformierte Datum zurueck, an dem Projekt begonnen wurde.""" |
35 | 988 date = getattr(self, 'startedAt', '') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
989 if date: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
990 return self.reTransformDate(date); |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
991 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
992 return ''; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
993 |
35 | 994 def reTransformDate(self, date): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
995 """transformiert , transformdate zurueck""" |
35 | 996 year = int(date / 10000) |
997 month = int((date - year * 10000) / 100) | |
998 day = int((date - year * 10000 - month * 100)) | |
999 if (day == 0) and (month == 0): | |
1000 return """%s""" % year; | |
1001 if day == 0 : | |
1002 return """%s.%s""" % (month, year); | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1003 |
35 | 1004 return """%s.%s.%s""" % (day, month, year); |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1005 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1006 |
35 | 1007 def transformDate(self, date): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1008 """transformiert ein Datum von DD.MM.YYYY, MM.YYYY,YYYY nach YYYYMMDD, alle nicht angebenen Werte |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1009 werden auf 0 gesetzt, es wird null zurueckgegeben falls das Datum ungueltig ist""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1010 |
35 | 1011 if (date == None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1012 return None; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1013 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1014 |
35 | 1015 if (date.lstrip().rstrip() == "") : |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1016 return ""; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1017 |
35 | 1018 splitted = date.split(".") |
1019 length = len(splitted) | |
1020 year = 0 | |
1021 month = 0 | |
1022 day = 0 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1023 if length > 3: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1024 return ""; |
35 | 1025 if length == 3: |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1026 day = int(splitted[0]) |
35 | 1027 if length > 1: |
1028 month = int(splitted[length - 2]) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1029 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1030 if length > 0: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1031 try: |
35 | 1032 year = int(splitted[length - 1]) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1033 except: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1034 pass |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1035 |
35 | 1036 # # logging.info("month:"+(month)) |
1037 if not (0 <= month < 13): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1038 return None; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1039 |
35 | 1040 if not(0 <= day < 32): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1041 return None; |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1042 |
35 | 1043 if (year > 0) and (year < 1900): # jahr nicht vierstellig eingegeben |
1044 year = 2000 + year; | |
1045 return year * 10000 + month * 100 + day | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1046 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1047 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1048 |
35 | 1049 def checkDate(self, date): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1050 """teste ob zum Zeitpunkt date eine andere version existierte""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1051 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1052 |
35 | 1053 def sortProjectsByTime(x, y): |
1054 return cmp(x[1].archiveTime, y[1].archiveTime) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1055 |
35 | 1056 # suche ob aeltere versionen vorhanden sind |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1057 |
35 | 1058 finds = self.ZopeFind(self, obj_metatypes=['MPIWGProject']) |
1059 if not finds: # wenn nicht dann teste ob die aktuelle version schon existiert hat. | |
1060 ad = getattr(self, 'creationTime', '20050101000000') | |
1061 if int(date) > int(ad): | |
1062 return self.REQUEST['URL1'] + "/" + self.getId() | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1063 else: |
35 | 1064 return self.REQUEST['URL1'] + "/no_project" |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1065 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1066 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1067 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1068 finds.sort(sortProjectsByTime) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1069 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1070 for find in finds: |
35 | 1071 # gehe durch die alten Projekte und finde das entprechende |
1072 if (int(find[1].archiveTime) > int(date)) and (int(date) > int(getattr(find[1], 'creationTime', '20050101000000'))): | |
1073 return self.REQUEST['URL1'] + "/" + find[1].getId() | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1074 |
35 | 1075 # kein passendes gefunden, dann teste ob das aktuelle in frage kommt |
1076 ad = getattr(self, 'creationTime', '20050101000000') | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1077 |
35 | 1078 if int(date) > int(ad): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1079 |
35 | 1080 return self.REQUEST['URL1'] + "/" + self.getId() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1081 else: |
35 | 1082 return self.REQUEST['URL1'] + "/no_project" |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1083 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1084 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1085 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1086 def getDefinedFields(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1087 """show all defined fields""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1088 return definedFields |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1089 |
35 | 1090 def getAttribute(self, field): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1091 """get attrbiute""" |
35 | 1092 return getattr(self, field) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1093 |
35 | 1094 def getContent(self, field, filter=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1095 """Inhalt des Feldes""" |
35 | 1096 # logging.debug("getContent field=%s filter=%s"%(field,filter)) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1097 |
35 | 1098 if field == "short_title": |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1099 text = self.getContent("xdata_07") |
35 | 1100 if text == "": |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1101 text = self.getContent("WEB_title") |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1102 return text |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1103 |
35 | 1104 text = u'' |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1105 |
35 | 1106 f = getattr(self, field) |
33 | 1107 if isinstance(f, list): |
1108 # compat with old lists | |
1109 for x in f: | |
1110 try: | |
35 | 1111 text += x |
33 | 1112 except: |
1113 text = x | |
1114 else: | |
1115 text = f | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1116 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1117 try: |
35 | 1118 if text[len(text) - 1] == ";": |
1119 text = text[0:len(text) - 1] | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1120 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1121 except: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1122 pass |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1123 |
35 | 1124 if text == '': # # wozu die folgenden Zeilen?? |
1125 text2 = text | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1126 else: |
35 | 1127 text2 = re.sub(r';([^\s])', '; \g<1>', text) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1128 |
35 | 1129 if field == "WEB_project_description": # #Jedenfalls darf letzteres nicht gemacht werden, falls normaler text |
1130 text2 = text | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1131 |
35 | 1132 # teste ob ergebnis leer und header dann nehme title |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1133 |
35 | 1134 if (text2 == '') and (field == 'WEB_project_header'): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1135 return self.getContent('WEB_title') |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1136 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1137 if filter: |
35 | 1138 splitted = text2.split("""<p class="picture">""") |
1139 if len(splitted) > 1: | |
1140 tmp = splitted[1].split("</p>") | |
1141 # return repr(splitted[1]) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1142 try: |
35 | 1143 self.imageURL = tmp[0].split("\"")[1].encode('utf-8') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1144 except: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1145 try: |
35 | 1146 self.imageURL = tmp[0].split("src=")[1].split(" ")[0].encode('utf-8') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1147 except: |
35 | 1148 self.imageURL = "" |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1149 |
35 | 1150 split2 = "</p>".join(tmp[1:]) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1151 |
35 | 1152 text3 = splitted[0] + split2 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1153 |
35 | 1154 splitted = text3.split("""<p class="picturetitle">""") |
1155 if len(splitted) > 1: | |
1156 tmp = splitted[1].split("</p>") | |
1157 self.imagecap = tmp[0].encode('utf-8') | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1158 |
35 | 1159 split4 = "".join(tmp[1:]) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1160 |
35 | 1161 text5 = splitted[0] + split4 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1162 else: |
35 | 1163 # keine caption |
1164 text5 = text3 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1165 else: |
35 | 1166 # kein bild |
1167 text5 = text2 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1168 else: |
35 | 1169 text5 = text2 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1170 |
35 | 1171 # teste ob WEB_project_description und keine fuehrenden p tags |
1172 if (len(text5) > 4) and (not text5[0:3] == '<p>') and (field == 'WEB_project_description'): | |
1173 text5 = "<p>" + text5 + "</p>" | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1174 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1175 |
35 | 1176 # filter image |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1177 |
35 | 1178 text5 = text5.lstrip().rstrip() # loescher leerzeichen und einzelndes br |
1179 if (text5 == "<br>") or (text5 == "<br/>"): | |
1180 text5 = "" | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1181 |
35 | 1182 # logging.debug("getcontent: field=%s filter=%s -> %s"%(field,filter,repr(text5))) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1183 return unicodify(text5) |
35 | 1184 # return utf8ify(text5) # return as utf-8 byte string |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1185 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1186 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1187 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1188 def saveFromPreview(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1189 """save content aus preview""" |
35 | 1190 self.WEB_project_description = self.previewTemplate.WEB_project_description[0:] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1191 self.REQUEST.RESPONSE.redirect("./index.html") |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1192 |
35 | 1193 def saveEditedContent(self, kupu=None, preview=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1194 """save Edited content""" |
35 | 1195 # logging.debug("saveEditedContent kupu=%s preview=%s"%(kupu,preview)) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1196 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1197 if preview: |
35 | 1198 kupu = preview |
1199 # find content of body tags | |
1200 start = kupu.find("<body>") | |
1201 end = kupu.find("</body>") | |
1202 newcontent = kupu[start + 6:end] | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1203 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1204 if preview: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1205 return self.preview(newcontent) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1206 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1207 self.copyObjectToArchive() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1208 self.ZCacheable_invalidate() |
35 | 1209 self.WEB_project_description = newcontent[0:] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1210 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1211 self.REQUEST.RESPONSE.redirect("./index.html") |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1212 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1213 return True |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1214 |
35 | 1215 security.declareProtected('View management screens', 'edit') |
1216 def edit(self, western=None): | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1217 """Edit pages""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1218 if western: |
35 | 1219 self.REQUEST.RESPONSE.setCookie("MP_debug_code", "western", path="/") |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1220 |
35 | 1221 # pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','edit_MPIWGProjectNeu.zpt')).__of__(self) |
22 | 1222 pt = self.editForm |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1223 return pt() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1224 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1225 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1226 def getPathStyle(self, path, selected, style=""): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1227 """returns a string with the given style + 'sel' if path == selected.""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1228 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1229 if path == selected: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1230 return style + 'sel' |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1231 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1232 return style |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1233 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1234 def getBreadcrumbs(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1235 """return list of breadcrumbs from here to the root""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1236 crumbs = [] |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1237 # skip direct parent Folder /projects/ |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1238 parent = self.aq_parent.aq_parent |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1239 # get parents breadcrumbs |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1240 if hasattr(parent, 'getBreadcrumbs'): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1241 crumbs = parent.getBreadcrumbs() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1242 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1243 # try to get acquisition URL from parent |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1244 if hasattr(parent, 'absolute_url'): |
35 | 1245 baseUrl = "%s/%s/" % (parent.absolute_url(), 'projects') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1246 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1247 baseUrl = "/en/research/projects/" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1248 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1249 # add in the internal project hierarchy |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1250 |
35 | 1251 ct = self.getContexts(parents=self.getContent('xdata_05')) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1252 # start with grandparents |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1253 ct.reverse() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1254 for c in ct: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1255 label = shortenString(c[0].getLabel(), 13) |
35 | 1256 crumbs.append((label, baseUrl + c[0].getId(), c[0])) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1257 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1258 # add this project |
35 | 1259 crumbs.append((self.getLabel(), baseUrl + self.getId(), self)) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1260 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1261 return crumbs |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1262 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1263 def getRootProject(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1264 """returns the root (=top level) project of the current project""" |
35 | 1265 ct = self.getContexts(parents=self.getContent('xdata_05')) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1266 if len(ct) > 0: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1267 return ct[-1][0] |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1268 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1269 return self |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1270 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1271 |
35 | 1272 def preview(self, description): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1273 """preview""" |
35 | 1274 # logging.debug("preview description=%s"%description) |
1275 tmpPro = getattr(self, "previewTemplate", None) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1276 if not tmpPro: |
35 | 1277 tmpPro = MPIWGProject("previewTemplate") |
1278 self._setObject("previewTemplate", tmpPro) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1279 for field in definedFields: |
35 | 1280 setattr(tmpPro, field, getattr(self, field)) |
1281 tmpPro.WEB_project_description = description[0:] | |
1282 tmpPro.invisible = True | |
1283 pt = PageTemplateFile('zpt/previewFrame.zpt', globals()).__of__(self) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1284 return pt() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1285 |
35 | 1286 # return self.REQUEST.RESPONSE.redirect(self.REQUEST['URL1']+"/previewTemplate") |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1287 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1288 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1289 def editMPIWGProjectForm(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1290 """editform""" |
35 | 1291 pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'edit_MPIWGProject.zpt')).__of__(self) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1292 return pt() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1293 |
50 | 1294 |
35 | 1295 def isResponsibleScientist(self, key): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1296 """teste ob eine Person in der Liste der respl. scientists auftaucht""" |
35 | 1297 for resp in self.getResponsibleScientistsList(): |
50 | 1298 if resp.get('key', None) == utf8ify(key): |
35 | 1299 return True |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1300 |
35 | 1301 return False |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1302 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1303 |
35 | 1304 def identifyNames(self, nameList): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1305 """Bekommt eine Komma oder Semikolon getrennte Liste mit Name der Form Vorname MittelName(n) Nachname |
33 | 1306 und ordnet diese dann Mitarbeiter IDs zu. |
1307 | |
1308 Returns a dict with full names as keys and a row of person objects from the database as values. | |
1309 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1310 @param nameList |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1311 """ |
35 | 1312 if nameList.find(";") > -1: # rate Trenner ist ; |
1313 names = nameList.split(";") | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1314 else: |
35 | 1315 names = nameList.split(",") |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1316 |
35 | 1317 # #nameList=nameList.replace(";",",") # falls ; als Trenner ersetze |
1318 returnNamesDict = {} | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1319 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1320 for name in names: |
35 | 1321 name = name.strip() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1322 nameSplitted = name.split(" ") |
35 | 1323 if len(nameSplitted) > 1: # vor und nachname angegeben) |
1324 lastname = nameSplitted[-1] | |
1325 firstname = nameSplitted[0] | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1326 else: |
35 | 1327 firstname = "" |
1328 lastname = nameSplitted[0] | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1329 |
35 | 1330 # finde Mitarbeiter mit den entsprechenden Name |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1331 |
35 | 1332 # firstname=self.myCapitalize(firstname).encode('utf-8') |
1333 # lastname=self.myCapitalize(lastname).encode('utf-8') | |
1334 logging.debug("Search: %s %s %s" % (name, repr(firstname), repr(lastname))) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1335 try: |
35 | 1336 # cataloggedNames=self.MembersCatalog(firstName=firstname,lastName=lastname) |
33 | 1337 # TODO: I think this does not work without firstname |
1338 # try to find names in members db by searching for sub-words | |
1339 cataloggedNames = self.executeZSQL("select * from personal_www where first_name ~* ('\m'||%s||'\M') and last_name ~* ('\m'||%s||'\M')", (firstname, lastname)) | |
1340 if len(cataloggedNames) == 0: | |
1341 # PostgreSQL has a bug with \m and words ending in non-ASCII :-( | |
1342 cataloggedNames = self.executeZSQL("select * from personal_www where %s in (select regexp_split_to_table(lower(first_name), '\s+')) and %s in (select regexp_split_to_table(lower(last_name), '\s+'))", (firstname.lower(), lastname.lower())) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1343 except: |
35 | 1344 cataloggedNames = [] |
1345 logging.error("ERROR: identifyNames %s %s" % sys.exc_info()[0:2]) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1346 |
35 | 1347 if len(cataloggedNames) > 0: |
1348 returnNamesDict[name] = cataloggedNames | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1349 else: |
35 | 1350 returnNamesDict[name] = [] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1351 |
50 | 1352 logging.debug("identified names: %s" % repr(returnNamesDict)) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1353 return returnNamesDict |
33 | 1354 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1355 |
49 | 1356 def editMPIWGProject(self, fromEdit=None, createNewVersion=True, RESPONSE=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1357 """edit the project and archive the old version""" |
49 | 1358 logging.debug("editMPIWGProject(fromEdit=%s, createNewVersion=%s)"%(fromEdit,createNewVersion)) |
1359 if createNewVersion: | |
1360 self.copyObjectToArchive() # archive the object | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1361 |
35 | 1362 formdata = self.REQUEST.form |
1363 | |
1364 # set all definedFields | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1365 for x in definedFields: |
35 | 1366 if formdata.has_key(x): |
50 | 1367 setattr(self, x, unicodify(formdata[x])) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1368 |
35 | 1369 # TODO: What does this do? |
1370 completedAt = formdata.get('completedAt') | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1371 if not self.setCompletedAt(completedAt): |
35 | 1372 RESPONSE.redirect('./editMPIWGBasisEditor?error=dateWrong') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1373 |
35 | 1374 startedAt = formdata.get('startedAt') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1375 if not self.setStartedAt(startedAt): |
35 | 1376 RESPONSE.redirect('./editMPIWGBasisEditor?error=dateWrong') |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1377 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1378 if self.REQUEST.has_key('active'): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1379 self.setActiveFlag(True) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1380 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1381 self.setActiveFlag(False) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1382 |
35 | 1383 # make dict of responsible scientists |
1384 checkedScientists = {} | |
1385 names = {} | |
1386 keys = {} | |
43 | 1387 for key in formdata: |
35 | 1388 # gehe durch das Formular |
1389 keyParts = key.split("_") | |
1390 if keyParts[0] == "responsibleScientist": | |
1391 # wenn es ein Feld der Form reponsibleScientist_nr_KEY gibt | |
1392 nr = keyParts[2] | |
1393 if keyParts[1] == "name": | |
50 | 1394 names[nr] = unicodify(formdata[key]) |
35 | 1395 elif keyParts[1] == "key": |
1396 keys[nr] = formdata[key] | |
1397 | |
43 | 1398 for nr in names: |
35 | 1399 name = names[nr] |
1400 key = keys.get(nr, None) | |
1401 username = None | |
1402 if key: | |
1403 # get username from db | |
40 | 1404 member = self.getMPIWGRoot().getStaffFolder().getMember(key=key) |
1405 if member is not None: | |
1406 username = member.getUsername() | |
35 | 1407 |
1408 # schreibe keys und namen in die Liste | |
1409 checkedScientists[names[nr]] = {'name' : name, 'key' : key, 'username' : username} | |
1410 | |
44 | 1411 # update responsibleScientistsList |
35 | 1412 self.setResponsibleScientistsList(checkedScientists) |
39 | 1413 self.updateProjectMembers() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1414 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1415 if fromEdit and (RESPONSE is not None): |
35 | 1416 return self.editBasic() |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1417 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1418 else: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1419 if RESPONSE is not None: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1420 RESPONSE.redirect('manage_main') |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1421 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1422 |
35 | 1423 security.declareProtected('View management screens', 'editBasic') |
22 | 1424 def editBasic(self, identifiedNames=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1425 """editform""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1426 if not identifiedNames: |
35 | 1427 identifiedNames = self.identifyNames(self.getResponsibleScientists()) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1428 |
35 | 1429 logging.debug("editBasic: IdentifiedNames=%s" % repr(identifiedNames)) |
1430 pt = self.edit_basic | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1431 return pt(identifiedNames=identifiedNames) |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1432 |
33 | 1433 |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1434 |
35 | 1435 def loadNewFile(self, RESPONSE=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1436 """einlesen des neuen files""" |
35 | 1437 fileupload = self.REQUEST['fileupload'] |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1438 if fileupload: |
35 | 1439 file_name = fileupload.filename |
1440 filedata = fileupload.read() | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1441 |
35 | 1442 argv = xmlhelper.proj2hash(filedata) |
1443 # print argv.keys() | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1444 for arg in definedFields: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1445 |
35 | 1446 # print arg,argv[arg],getattr(self,arg) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1447 try: |
35 | 1448 temp = argv[arg][0:] |
1449 # old=getattr(self,arg) | |
1450 setattr(self, arg, temp) | |
1451 # print old,getattr(self,arg) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1452 except: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1453 """nothing""" |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1454 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1455 if RESPONSE is not None: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1456 RESPONSE.redirect('manage_main') |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1457 |
35 | 1458 def tagTheProject(self, RESPONSE=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1459 """TAG""" |
35 | 1460 id = self.getId(); |
1461 tmpl = getattr(self.thesaurus, "main.html") | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1462 if RESPONSE: |
35 | 1463 RESPONSE.redirect("./thesaurus/main.html?project=" + id) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1464 return |
36 | 1465 |
1466 | |
50 | 1467 def copyPublicationsToList(self, RESPONSE=None): |
1468 """copy publications in to list""" | |
1469 | |
1470 publicationTxt = self.getContent('WEB_related_pub') | |
1471 | |
1472 pubSplits = publicationTxt.split("<p>") | |
1473 | |
1474 for pubSplit in pubSplits: | |
1475 pubSplit = pubSplit.replace("</p>", "") | |
1476 self.addPublication(pubSplit) | |
1477 | |
1478 setattr(self, "WEB_related_pub_copied", True); | |
1479 | |
1480 if RESPONSE: | |
1481 | |
1482 self.redirect(RESPONSE, 'managePublications') | |
1483 | |
1484 def hasRelatedPublicationsOldVersion(self): | |
1485 """teste ob es related publications gibt""" | |
1486 | |
1487 ret = True; | |
1488 if (self.getContent('WEB_related_pub') == ''): | |
1489 ret = False; # nichts im alten feld | |
1490 logging.debug("webrel:" + repr(ret)) | |
1491 if (getattr(self, 'WEB_related_pub_copied', False)): | |
1492 ret = False; # alte daten sind schon kopiert worden | |
1493 | |
1494 logging.debug("webrel_copied:" + repr(ret)) | |
1495 publications = self.ZopeFind(self, obj_metatypes=['MPIWGProject_publication']); | |
1496 | |
1497 if(len(publications) > 0): | |
1498 ret = False; # es gibt publicationen in der neuen liste | |
1499 | |
1500 | |
1501 logging.debug("len(publ)" + repr(ret)) | |
1502 | |
1503 return ret; | |
1504 | |
1505 | |
1506 def hasInlineImage(self): | |
1507 """Return the number of inline images in the description.""" | |
1508 text = self.getDescription() | |
1509 cnt = text.count('<p class="picture">') | |
1510 return cnt | |
1511 | |
1512 | |
1513 def copyImageToMargin(self, RESPONSE=None): | |
1514 """copy inline images to marginal images""" | |
1515 # getImages from WEB_project_description | |
1516 description = self.getDescription() | |
1517 | |
1518 text2 = description | |
1519 splitted = text2.split("""<p class="picture">""") | |
1520 | |
1521 imageURLs = [] | |
1522 imageCaptions = [] | |
1523 for split in splitted[1:]: | |
1524 tmp = split.split("</p>") | |
1525 # return repr(splitted[1]) | |
1526 | |
1527 try: | |
1528 imageURLs.append(tmp[0].split("\"")[1].encode('utf-8')) | |
1529 except: | |
1530 | |
1531 try: | |
1532 imageURLs.append(tmp[0].split("src=")[1].split(" ")[0].encode('utf-8')) | |
1533 except: | |
1534 imageURLs.append("") | |
1535 | |
1536 split2 = "</p>".join(tmp[1:]) | |
1537 splitted = split2.split("""<p class="picturetitle">""") | |
1538 if len(splitted) > 1: | |
1539 tmp = splitted[1].split("</p>") | |
1540 imageCaptions.append(tmp[0].encode('utf-8')) | |
1541 | |
1542 else: | |
1543 # keine caption | |
1544 imageCaptions.append("") | |
1545 | |
1546 # eintragen: | |
1547 for imageURL in imageURLs: | |
1548 if not imageURL: | |
1549 # no URL - no image | |
1550 continue | |
1551 | |
1552 filename = imageURL.split("/")[-1] | |
1553 # lege neues images object an, mit leerem bild | |
1554 | |
1555 if filename in self: | |
1556 # existiert das bild schon, dann neuen filenamen | |
1557 filename = "project_image_" + filename | |
1558 if filename in self: | |
1559 # exists too - assume its already converted | |
1560 logging.warn("copyImageToMargin: image %s exists - skipping!"%filename) | |
1561 continue | |
1562 | |
1563 self.addImage(None, imageCaptions[imageURLs.index(imageURL)], filename=filename) | |
1564 # hole die bilddaten aus der url | |
1565 url = self.absolute_url() + "/" + imageURL | |
1566 # url=self.absolute_url()+"/"+filename | |
1567 | |
1568 try: # relative url | |
1569 data = urllib.urlopen(url).read() | |
1570 except: | |
1571 try: # absolute | |
1572 data = urllib.urlopen(self.imageURL).read() | |
1573 except: | |
1574 logging.error("copyImageToMargin: can't open: %s" % url) | |
1575 | |
1576 obj = getattr(self, filename) | |
1577 obj.update_data(data) | |
1578 | |
1579 # clean description | |
1580 logging.debug("copyImageToMargin: description:%s"%repr(description)) | |
1581 dom = ET.fromstring(utf8ify("<html>%s</html>"%description)) | |
1582 for e in dom.findall(".//p[@class='picture']"): | |
1583 # remove contents | |
1584 e.clear() | |
1585 # remove tag | |
1586 e.tag = None | |
1587 | |
1588 for e in dom.findall(".//p[@class='picturetitle']"): | |
1589 # remove contents | |
1590 e.clear() | |
1591 # remove tag | |
1592 e.tag = None | |
1593 | |
1594 # remove html tag | |
1595 dom.tag = None | |
1596 # set as new description | |
1597 description = unicodify(serialize(dom)) | |
1598 logging.debug("copyImageToMargin: new description:%s"%repr(description)) | |
1599 setattr(self, 'WEB_project_description', description) | |
1600 | |
1601 if RESPONSE: | |
1602 self.redirect(RESPONSE, 'manageImages') | |
1603 | |
1604 | |
36 | 1605 def updateProjectMembers(self, updateResponsibleScientistsList=False): |
1606 """updates project-member table""" | |
1607 if updateResponsibleScientistsList: | |
1608 # create responsibleScientistsList automatically | |
1609 newScientists = {} | |
1610 names = p.identifyNames(p.getResponsibleScientists()) | |
43 | 1611 for name in names: |
36 | 1612 logging.debug("updateAllProjectMembers: name=%s" % repr(name)) |
1613 members = names[name] | |
1614 if len(members) > 0: | |
1615 # take the first matching name | |
1616 newScientists[name] = {'name': name, 'key' : members[0].key, 'username' : re.sub('@mpiwg-berlin\.mpg\.de', '', members[0].e_mail)} | |
1617 | |
1618 self.setResponsibleScientistsList(newScientists) | |
1619 | |
1620 memberlist = self.getResponsibleScientistsList() | |
1621 | |
1622 # clear projects_members table | |
1623 pNum = self.getNumber() | |
1624 if not pNum or not isinstance(pNum, basestring): | |
1625 logging.error("updateProjectMembers: not a valid project number: %s" % repr(pNum)) | |
1626 return | |
1627 | |
1628 if len(memberlist) == 0: | |
1629 return | |
1630 | |
1631 # fill projects_members table | |
1632 self.executeZSQL("delete from projects_members where project_number = %s", [pNum]) | |
1633 for m in memberlist: | |
42 | 1634 memberKey = m.get('key', None) |
36 | 1635 if not memberKey or not isinstance(memberKey, basestring): |
1636 logging.error("updateProjectMembers: not a valid member key: %s" % repr(memberKey)) | |
1637 continue | |
1638 | |
1639 self.executeZSQL("insert into projects_members (project_number, member_key) values (%s, %s)", (pNum, memberKey)) | |
1640 | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1641 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1642 def manage_addMPIWGProjectForm(self): |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1643 """form for adding the project""" |
35 | 1644 pt = PageTemplateFile(os.path.join(package_home(globals()), 'zpt', 'addMPIWGProjectForm.zpt')).__of__(self) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1645 return pt() |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1646 |
35 | 1647 def manage_addMPIWGProject(self, id, RESPONSE=None): |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1648 """method to add a project""" |
35 | 1649 # print argv |
1650 fileupload = self.REQUEST.get('fileupload', None) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1651 if fileupload: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1652 |
35 | 1653 file_name = fileupload.filename |
1654 filedata = fileupload.read() | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1655 |
35 | 1656 argv = xmlhelper.proj2hash(filedata) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1657 |
35 | 1658 # print argv |
1659 newObj = MPIWGProject(id, argv) | |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1660 else: |
35 | 1661 newObj = MPIWGProject(id) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1662 |
35 | 1663 self._setObject(id, newObj) |
0
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1664 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1665 |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1666 if RESPONSE is not None: |
bca61e893fcc
first checkin of MPIWGWeb r2 branch from CVS into mercurial
casties
parents:
diff
changeset
|
1667 RESPONSE.redirect('manage_main') |
27 | 1668 |
1669 | |
33 | 1670 class MPIWGProjectFolder(ZDBInterfaceFolder): |
27 | 1671 """Folder of project objects""" |
1672 | |
35 | 1673 meta_type = "MPIWGProjectFolder" |
1674 security = ClassSecurityInfo() | |
1675 | |
27 | 1676 # cached HashTree with project hierarchy |
1677 _v_projectTree = None | |
1678 | |
35 | 1679 |
34 | 1680 def getProjectTree(self): |
43 | 1681 """Return the project hierarchy tree (and cache it). |
34 | 1682 |
43 | 1683 Returns HashTree instance.""" |
27 | 1684 tree = self._v_projectTree |
1685 if tree is None: | |
43 | 1686 tree = HashTree(keySeparator='.', keyFn=getInt) |
27 | 1687 for p in self.objectValues(spec='MPIWGProject'): |
51 | 1688 # add all projects |
27 | 1689 tree.add(p.getNumber(), p) |
1690 | |
1691 self._v_projectTree = tree | |
35 | 1692 # logging.debug("getProjectTree: tree=%s"%(tree.root.getSubtreeAsText())) |
27 | 1693 |
1694 return tree | |
1695 | |
1696 | |
51 | 1697 def getProjectsAsList(self, start=None, active=1, archived=1): |
43 | 1698 """Return flattened list of projects, starting from start. |
33 | 1699 |
27 | 1700 active = 0 : all projects |
1701 active = 1 : active projects | |
1702 active = 2 : inactive projects | |
1703 archived = 0 : all projects | |
1704 archived = 1 : current projects | |
1705 archived = 2 : archived projects | |
1706 """ | |
35 | 1707 # logging.debug("getProjectsAsList(start=%s,active=%s,archived=%s)"%(repr(start),active,archived)) |
34 | 1708 tree = self.getProjectTree() |
27 | 1709 node = tree.getNode(start) |
1710 if node is None: | |
1711 return [] | |
1712 | |
29 | 1713 pl = node.getSubtreeAsList() |
35 | 1714 # logging.debug("getProjectsAsList: node=(%s,%s) pl=%s"%(node.key,node.value,pl)) |
27 | 1715 # return filtered list |
1716 return [p for p in pl if (p.checkActive(active) and p.checkArchived(archived))] | |
33 | 1717 |
39 | 1718 |
1719 def getProject(self, projectNumber=None): | |
43 | 1720 """Return the matching project""" |
39 | 1721 tree = self.getProjectTree() |
1722 if projectNumber is not None: | |
1723 return tree.get(projectNumber) | |
1724 | |
1725 return None | |
1726 | |
33 | 1727 |
1728 def getProjectsOfMember(self, key, active=1, archived=1): | |
43 | 1729 """Return a list of all projects of a member. |
33 | 1730 |
1731 @param key: member's key | |
1732 active = 0 : all projects | |
1733 active = 1 : active projects | |
1734 active = 2 : inactive projects | |
1735 archived = 0 : all projects | |
1736 archived = 1 : current projects | |
1737 archived = 2 : archived projects | |
1738 """ | |
1739 projects = [] | |
1740 # search project numbers | |
1741 res = self.executeZSQL("select * from projects_members where lower(member_key) = %s", [key.lower()]) | |
34 | 1742 tree = self.getProjectTree() |
33 | 1743 # find projects in tree |
1744 for r in res: | |
1745 p = tree.get(r.project_number) | |
43 | 1746 # check if active |
33 | 1747 if p is not None and p.checkActive(active) and p.checkArchived(archived): |
1748 projects.append(p) | |
1749 | |
43 | 1750 projects.sort(key=lambda p:[int(n) for n in p.getNumber().split('.')]) |
33 | 1751 return projects |
27 | 1752 |
1753 | |
51 | 1754 security.declareProtected('View management screens', 'changeProjectTree') |
1755 def changeProjectTree(self, RESPONSE=None): | |
1756 """change the complete tree""" | |
1757 form=self.REQUEST.form | |
1758 hashList={} | |
1759 onlyArchived=int(form.get("onlyArchived",0)) | |
1760 onlyActive=int(form.get("onlyActive",0)) | |
1761 dep=form.get("dep",None) | |
1762 | |
1763 fields = self.getProjectsAsList(start=dep, archived=onlyArchived, active=onlyActive) | |
1764 | |
1765 logging.info("GOT TREE!----------------------------------------------------") | |
1766 for field in form.keys(): | |
1767 | |
1768 splitted=field.split('_') | |
1769 if (len(splitted)>1) and (splitted[1]=="runningNumber"): | |
1770 #feld hat die Form Nummer_name und runnignNumber | |
1771 nr=int(splitted[0]) # nummer des Datensatzes | |
1772 project = fields[nr] | |
1773 | |
1774 # | |
1775 # change active | |
1776 # | |
1777 if form.has_key('%s_active'%nr): # active flag is set | |
1778 project.setActiveFlag(True) | |
1779 else: | |
1780 project.setActiveFlag(False) | |
1781 | |
1782 # | |
1783 # nummer hat sich geaendert | |
1784 # | |
1785 entryChanged = False; | |
1786 pronum = project.getNumber() | |
1787 formnum = form['%s_number'%nr] | |
1788 | |
1789 if not (pronum == formnum): | |
1790 logging.debug("Changed!Number+++++++++++++++++++++++++++++++++") | |
1791 logging.debug(repr(fields[nr].xdata_05)+" ---> "+ repr(form[str(nr)+'_number'])) | |
1792 entryChanged = True | |
1793 | |
1794 # | |
1795 # completed hat sich geaendert | |
1796 # | |
1797 td = project.transformDate # hole die funktion zum transformieren des datums | |
1798 formstarted = form[str(nr)+'_started'] | |
1799 formcompleted = form[str(nr)+'_completed'] | |
1800 | |
1801 if not (td(project.getCompletedAt()) == td(formcompleted)): | |
1802 logging.info(repr(td(project.getCompletedAt()))+" ---> "+ repr(td(form[str(nr)+'_completed']))) | |
1803 logging.info("Changed!Completed+++++++++++++++++++++++++++++++++") | |
1804 entryChanged = True | |
1805 | |
1806 if not (td(project.getStartedAt()) == td(formstarted)): | |
1807 logging.info(repr(td(project.getStartedAt()))+" ---> "+ repr(td(form[str(nr)+'_started']))) | |
1808 logging.info("Changed!Started+++++++++++++++++++++++++++++++++") | |
1809 entryChanged = True | |
1810 | |
1811 if entryChanged: | |
1812 logging.info("Changed!+++++++++++++++++++++++++++++++++") | |
1813 project.copyObjectToArchive() | |
1814 project.xdata_05 = formnum | |
1815 project.setCompletedAt(formcompleted) | |
1816 project.setStartedAt(formstarted) | |
1817 # reset tree | |
1818 self._v_projectTree = None | |
1819 | |
1820 if RESPONSE is not None: | |
1821 RESPONSE.redirect(self.en.MPIWGrootURL()+'/admin/showTree') | |
1822 | |
1823 | |
35 | 1824 security.declareProtected('View management screens', 'updateAllProjectMembers') |
33 | 1825 def updateAllProjectMembers(self, updateResponsibleScientistsList=False): |
43 | 1826 """Re-create responsibleScientistsLists and projects_members table from all current projects.""" |
33 | 1827 # empty table |
1828 self.executeZSQL('truncate table projects_members') | |
1829 cnt = 0 | |
1830 # go through all projects | |
1831 for p in self.objectValues(spec='MPIWGProject'): | |
1832 cnt += 1 | |
1833 memberlist = [] | |
35 | 1834 logging.debug("updateAllProjectMembers: updating project %s" % p) |
36 | 1835 p.updateProjectMembers(updateResponsibleScientistsList=updateResponsibleScientistsList) |
33 | 1836 |
35 | 1837 return "updated %s projects!" % cnt |
33 | 1838 |
40 | 1839 |
39 | 1840 security.declareProtected('View management screens', 'updateAllProjects') |
50 | 1841 def updateAllProjects(self, updateResponsibleScientistsList=False, RESPONSE=None): |
43 | 1842 """Patch all current projects for legacy problems.""" |
39 | 1843 cnt = 0 |
50 | 1844 fulllog = "" |
39 | 1845 # go through all projects |
44 | 1846 for (id, project) in self.ZopeFind(self, obj_metatypes=['MPIWGProject'], search_sub=1): |
50 | 1847 log = "" |
39 | 1848 cnt += 1 |
1849 # | |
1850 # hasRelatedPublicationsOldVersion | |
1851 # | |
1852 if project.hasRelatedPublicationsOldVersion(): | |
49 | 1853 log += "%s: update relatedPublicationsOldVersion!\n"%project.getId() |
39 | 1854 logging.debug("updateAllProjects(%s): update relatedPublicationsOldVersion!"%project.getId()) |
1855 project.copyPublicationsToList() | |
1856 | |
1857 # | |
1858 # old format responsibleScientistsList | |
1859 # | |
1860 memberlist = project.getResponsibleScientistsList() | |
1861 if len(memberlist) > 0 and isinstance(memberlist[0], tuple): | |
49 | 1862 log += "%s: updating memberlist!\n"%project.getId() |
42 | 1863 logging.debug("updateAllProjects(%s): updating memberlist" % project.getId()) |
39 | 1864 newScientists = {} |
1865 for m in memberlist: | |
1866 name = m[0] | |
1867 key = m[1] | |
1868 username = None | |
1869 if key: | |
1870 if isinstance(key, list): | |
1871 key = key[0] | |
1872 | |
1873 # get username from db | |
40 | 1874 member = self.getMPIWGRoot().getStaffFolder().getMember(key=key) |
1875 if member is not None: | |
1876 username = member.getUsername() | |
39 | 1877 |
1878 newScientists[name] = {'name': name, 'key' : key, 'username' : username} | |
1879 | |
1880 # set new list | |
1881 project.setResponsibleScientistsList(newScientists) | |
1882 | |
1883 # | |
49 | 1884 # old inline images |
1885 # | |
1886 if project.hasInlineImage(): | |
1887 log += "%s: has inlineImage!\n"%project.getId() | |
1888 logging.debug("updateAllProjects(%s): has inlineImage!"%project.getId()) | |
1889 try: | |
1890 project.copyImageToMargin() | |
1891 except Exception, e: | |
1892 log += "%s: ERROR in copyImageToMargin!\n"%project.getId() | |
1893 logging.debug("updateAllProjects(%s): ERROR in copyImageToMargin: %s"%(project.getId(), e)) | |
1894 | |
1895 | |
1896 # | |
39 | 1897 # remove old attributes |
1898 # | |
1899 if hasattr(project, 'definedFields'): | |
49 | 1900 log += "%s: has definedFields!\n"%project.getId() |
39 | 1901 logging.debug("updateAllProjects(%s): has definedFields!"%project.getId()) |
1902 delattr(project, 'definedFields') | |
1903 | |
45 | 1904 # |
1905 # update extended bibliography | |
1906 # | |
1907 if hasattr(project, 'publicationList'): | |
49 | 1908 log += "%s: has publicationList!\n"%project.getId() |
45 | 1909 logging.debug("updateAllProjects(%s): has publicationList!"%project.getId()) |
1910 extpub = project.publicationList | |
1911 if hasattr(extpub, 'connection_id'): | |
1912 logging.debug("updateAllProjects(%s): extended publication %s has connection_id=%s!"%(project.getId(),extpub.getId(),extpub.connection_id)) | |
1913 | |
50 | 1914 # |
1915 # unicodify | |
1916 # | |
1917 for field in ('WEB_title', 'xdata_01', 'xdata_07', 'xdata_08', 'xdata_11', 'xdata_12', 'xdata_13', | |
1918 'WEB_project_description', 'WEB_related_pub'): | |
1919 text = getattr(project, field, None) | |
1920 if isinstance(text, str): | |
1921 log += "%s: has non-unicode field %s\n"%(project.getId(), field) | |
1922 logging.debug("updateAllProjects(%s): has has non-unicode field %s\n"%(project.getId(), field)) | |
1923 setattr(project, field, unicodify(text)) | |
1924 | |
1925 fulllog += log | |
1926 if RESPONSE is not None: | |
1927 RESPONSE.write(log) | |
1928 | |
1929 | |
1930 log += "\n DONE! updated %s projects!" % cnt | |
1931 fulllog += log | |
1932 if RESPONSE is not None: | |
1933 RESPONSE.write(log) | |
1934 RESPONSE.flush() | |
1935 else: | |
1936 return fulllog | |
39 | 1937 |
1938 | |
33 | 1939 |
27 | 1940 def manage_addMPIWGProjectFolderForm(self): |
29 | 1941 """form for adding a MPIWGProjectFolder""" |
27 | 1942 pt = PageTemplateFile('zpt/project/manage_add_MPIWGProjectFolder', globals()).__of__(self) |
1943 return pt() | |
1944 | |
35 | 1945 def manage_addMPIWGProjectFolder(self, id, title, RESPONSE=None): |
29 | 1946 """add a MPIWGProjectFolder""" |
35 | 1947 newObj = MPIWGProjectFolder(id, title) |
27 | 1948 |
35 | 1949 self._setObject(id, newObj) |
27 | 1950 |
1951 if RESPONSE is not None: | |
1952 RESPONSE.redirect('manage_main') | |
1953 |