9
|
1 from Products.PageTemplates.PageTemplateFile import PageTemplateFile
|
|
2 from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
|
|
3 from Globals import package_home
|
|
4 import string
|
|
5 import re
|
|
6 import os
|
|
7 import logging
|
|
8 from OFS.Folder import Folder
|
|
9 from AccessControl import ClassSecurityInfo
|
27
|
10
|
|
11 from SrvTxtUtils import getAt
|
|
12
|
9
|
13 import MPIWGHelper
|
|
14
|
|
15 class MPIWGDepartment(Folder):
|
|
16 """special object for departments on the MPIWG website """
|
|
17
|
|
18 meta_type="MPIWGDepartment"
|
|
19
|
|
20 manage_options=Folder.manage_options+(
|
|
21 {'label':'Configure','action':'changeForm'},
|
|
22 )
|
|
23
|
|
24 #changeWeightForm = PageTemplateFile('zpt/department/manage_change_weight', globals())
|
|
25 changeForm = PageTemplateFile('zpt/department/manage_config', globals())
|
|
26
|
|
27 def __init__(self, id, title=None, weight=0, project_id=0, director='', director_id='',
|
|
28 type_en=None, type_de=None, title_en=None, title_de=None):
|
|
29 self.id = str(id)
|
|
30 self.weight = weight
|
|
31 self.project_id = project_id
|
|
32 if title is None:
|
|
33 self.title = id
|
|
34 else:
|
|
35 self.title = title
|
|
36
|
|
37 self.director = director
|
|
38 self.director_id = director_id
|
|
39
|
|
40 # add language folders and sample templates
|
|
41 mainid = 'main.pt'
|
|
42 self.manage_addFolder('en')
|
|
43 folder_en = getattr(self, 'en')
|
|
44 main_en = ZopePageTemplate(mainid)
|
|
45 folder_en[mainid] = main_en
|
|
46 main_en.pt_edit(open(os.path.join(package_home(globals()),'zpt/department/default_template_main.zpt')).read(),'text/html')
|
|
47 if type_en is not None:
|
|
48 folder_en.title = type_en
|
|
49 if title_en is not None:
|
|
50 main_en.title = title_en
|
|
51 self.manage_addFolder('de')
|
|
52 folder_de = getattr(self, 'de')
|
|
53 main_de = ZopePageTemplate(mainid)
|
|
54 folder_de[mainid] = main_de
|
|
55 main_de.pt_edit(open(os.path.join(package_home(globals()),'zpt/department/default_template_main.zpt')).read(),'text/html')
|
|
56 if type_de is not None:
|
|
57 folder_de.title = type_de
|
|
58 if title_de is not None:
|
|
59 main_de.title = title_de
|
|
60
|
|
61
|
|
62 def index_html(self):
|
|
63 """default index page"""
|
|
64 return self.getMain()
|
|
65
|
13
|
66 def getType(self, lang=None):
|
9
|
67 """returns the type of department (from /en/ folder)"""
|
13
|
68 if lang is None:
|
|
69 # get Language from MPIWGRoot
|
|
70 lang = self.getLang()
|
|
71
|
9
|
72 dir = getattr(self, lang, self.en)
|
|
73 t = dir.title
|
|
74 return t
|
|
75
|
13
|
76 def getTitle(self, lang=None):
|
9
|
77 """returns the title of the department (from main.pt)"""
|
13
|
78 if lang is None:
|
|
79 # get Language from MPIWGRoot
|
|
80 lang = self.getLang()
|
|
81
|
9
|
82 dir = getattr(self, lang, self.en)
|
|
83 pt = getattr(dir, 'main.pt')
|
|
84 t = pt.title
|
|
85 if not t:
|
|
86 t = self.title
|
|
87
|
|
88 return t
|
|
89
|
|
90 def getDirector(self):
|
|
91 """returns the name of the director"""
|
|
92 return self.director
|
|
93
|
|
94 def getDirectorId(self):
|
|
95 """returns the id of the director"""
|
|
96 return self.director_id
|
|
97
|
|
98 def getProjectId(self):
|
|
99 """return the project id"""
|
|
100 return self.project_id
|
|
101
|
|
102 def getUrl(self, baseUrl=None):
|
|
103 """returns URL to this Department"""
|
|
104 if baseUrl is None:
|
|
105 return self.absolute_url()
|
|
106
|
|
107 return '%s/%s'%(baseUrl, self.getId())
|
|
108
|
|
109 def getPath(self, page, relative=True):
|
|
110 """returns path to template page"""
|
|
111 # get Language from MPIWGRoot
|
|
112 lang = self.getLang()
|
|
113 dir = getattr(self, lang, self.en)
|
|
114 if relative:
|
|
115 return '%s/%s/%s'%(self.getId(), dir.getId(), page)
|
|
116
|
|
117 pt = getattr(dir, page)
|
|
118 return pt.absolute_url_path()
|
|
119
|
|
120 def getMainPath(self):
|
|
121 """returns the path to the main template"""
|
|
122 return self.getPath('main.pt')
|
|
123
|
|
124 def getMain(self, **args):
|
|
125 """returns the main part as PageTemplate"""
|
|
126 # get Language from MPIWGRoot
|
|
127 lang = self.getLang()
|
|
128 dir = getattr(self, lang, self.en)
|
|
129 pt = getattr(dir, 'main.pt')
|
|
130 return pt(**args)
|
|
131
|
|
132 def getThumbImg(self):
|
|
133 """returns the image object for the sidebar thumbnail"""
|
|
134 img = getattr(self, 'img-thumb.jpg')
|
|
135 return img
|
|
136
|
30
|
137 def getThumbUrl(self):
|
9
|
138 """returns the URL of the image object for the sidebar thumbnail"""
|
|
139 img = getattr(self, 'img-thumb.jpg')
|
|
140 return img.absolute_url()
|
|
141
|
27
|
142 def getProject(self):
|
|
143 """returns the default project"""
|
|
144 proj = self.getProjects(count=1, onlyActive=1, onlyArchived=1)
|
|
145 return getAt(proj, 0, None)
|
|
146
|
|
147 def getProjects(self, count=0, onlyActive=0, onlyArchived=0):
|
24
|
148 """returns a list of projects of this department.
|
|
149
|
|
150 onlyActive = 0 : all projects
|
|
151 onlyActive = 1 : active projects
|
|
152 onlyActive = 2 : inactive projects
|
|
153
|
|
154 onlyArchived = 0 : all projects
|
|
155 onlyArchived = 1 : current projects
|
|
156 onlyArchived = 2 : archived projects
|
|
157 """
|
30
|
158 pf = self.en.getProjectFolder()
|
27
|
159 projects = pf.getProjectList(self.getProjectId(), active=onlyActive, archived=onlyArchived)
|
|
160 #logging.debug("getProjects projects=%s"%repr(projects))
|
|
161 if count > 0:
|
|
162 return projects[:count]
|
24
|
163
|
|
164 return projects
|
|
165
|
9
|
166 def changeWeight(self,weight,RESPONSE=None):
|
|
167 """change weight"""
|
|
168 self.weight=weight
|
|
169 if RESPONSE is not None:
|
|
170 RESPONSE.redirect('manage_main')
|
|
171
|
13
|
172 def changeMPIWGDepartment(self, title=None, weight=None, project_id=None, director=None, director_id=None,
|
|
173 type_en=None, type_de=None, title_en=None, title_de=None, RESPONSE=None):
|
9
|
174 """change everything"""
|
|
175 if title is not None:
|
|
176 self.title = title
|
|
177 if weight is not None:
|
|
178 self.weight = weight
|
|
179 if project_id is not None:
|
|
180 self.project_id = project_id
|
|
181 if director is not None:
|
|
182 self.director = director
|
|
183 if director_id is not None:
|
|
184 self.director_id = director_id
|
13
|
185 folder_en = self.get('en', None)
|
|
186 if folder_en is not None:
|
|
187 if type_en is not None:
|
|
188 folder_en.title = type_en
|
|
189 main_en = folder_en.get('main.pt', None)
|
|
190 if main_en is not None and title_en is not None:
|
|
191 main_en.title = title_en
|
|
192 folder_de = self.get('de', None)
|
|
193 if folder_de is not None:
|
|
194 if type_de is not None:
|
|
195 folder_de.title = type_de
|
|
196 main_de = folder_de.get('main.pt', None)
|
|
197 if main_de is not None and title_de is not None:
|
|
198 main_de.title = title_de
|
|
199
|
9
|
200 if RESPONSE is not None:
|
|
201 RESPONSE.redirect('manage_main')
|
|
202
|
|
203 def getBreadcrumbs(self):
|
|
204 """return list of breadcrumbs from here to the root"""
|
|
205 crumbs = [(self.getFullTitle(), self.absolute_url(), self)]
|
|
206 parent = self.aq_parent
|
|
207 if hasattr(parent, 'getBreadcrumbs'):
|
|
208 if self.title:
|
|
209 return parent.getBreadcrumbs() + crumbs
|
|
210 else:
|
|
211 # if there's no title, skip this level
|
|
212 return parent.getBreadcrumbs()
|
|
213
|
|
214 return crumbs
|
|
215
|
|
216 getSection = MPIWGHelper.getSection
|
|
217
|
|
218 getSubSection = MPIWGHelper.getSubSection
|
|
219
|
|
220
|
|
221 def manage_addMPIWGDepartmentForm(self):
|
|
222 """Form for adding"""
|
|
223 pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt/department/manage_add_MPIWGDepartment.zpt')).__of__(self)
|
|
224 return pt()
|
|
225
|
|
226 def manage_addMPIWGDepartment(self, id, title=None, weight=0, project_id=0, director=None, director_id=None,
|
|
227 type_en=None, type_de=None, title_en=None, title_de=None, RESPONSE=None):
|
|
228 "Add a MPIWG Department object"
|
|
229 newObj=MPIWGDepartment(id,title,weight,project_id,director,director_id,type_en,type_de,title_en,title_de)
|
|
230 self.Destination()._setObject(id,newObj)
|
|
231 if RESPONSE is not None:
|
|
232 RESPONSE.redirect('manage_main')
|