@@ -127,6 +127,16 @@ def get_queryset(self):
127
127
def get_success_url (self ):
128
128
return reverse ('projects_detail' , args = [self .object .slug ])
129
129
130
+ def form_valid (self , form ):
131
+ form .save ()
132
+ if form .has_changed ():
133
+ if 'privacy_level' in form .changed_data :
134
+ log .info ('Re-symlinking all superprojects due project privacy level has changed' )
135
+ for superproject in self .object .superprojects .all ():
136
+ broadcast (type = 'app' , task = tasks .symlink_project , args = [superproject .pk ])
137
+
138
+ return HttpResponseRedirect (self .get_success_url ())
139
+
130
140
131
141
@login_required
132
142
def project_versions (request , project_slug ):
@@ -148,6 +158,20 @@ def project_versions(request, project_slug):
148
158
149
159
if request .method == 'POST' and form .is_valid ():
150
160
form .save ()
161
+
162
+ if form .has_changed ():
163
+ resymlink_superprojects = False
164
+ # Each field is form as ``privacy-{{version.slug}}``
165
+ for changed_data in form .changed_data :
166
+ if changed_data .startswith ('privacy-' ):
167
+ resymlink_superprojects = True
168
+ break
169
+
170
+ if resymlink_superprojects :
171
+ log .info ('Re-symlinking all superprojects due version privacy level has changed' )
172
+ for superproject in project .superprojects .all ():
173
+ broadcast (type = 'app' , task = tasks .symlink_project , args = [superproject .pk ])
174
+
151
175
messages .success (request , _ ('Project versions updated' ))
152
176
project_dashboard = reverse ('projects_detail' , args = [project .slug ])
153
177
return HttpResponseRedirect (project_dashboard )
@@ -178,6 +202,13 @@ def project_version_detail(request, project_slug, version_slug):
178
202
type = 'app' , task = tasks .clear_artifacts , args = [version .pk ])
179
203
version .built = False
180
204
version .save ()
205
+
206
+ if 'privacy_level' in form .changed_data :
207
+ log .info ('Re-symlinking all superprojects due version privacy level has changed' )
208
+ for superproject in project .superprojects .all ():
209
+ broadcast (type = 'app' , task = tasks .symlink_project , args = [superproject .pk ])
210
+
211
+
181
212
url = reverse ('project_version_list' , args = [project .slug ])
182
213
return HttpResponseRedirect (url )
183
214
@@ -200,6 +231,11 @@ def project_delete(request, project_slug):
200
231
if request .method == 'POST' :
201
232
broadcast (type = 'app' , task = tasks .remove_dir , args = [project .doc_path ])
202
233
project .delete ()
234
+
235
+ log .info ('Re-symlinking all superprojects due project deletion' )
236
+ for superproject in project .superprojects .all ():
237
+ broadcast (type = 'app' , task = tasks .symlink_project , args = [superproject .pk ])
238
+
203
239
messages .success (request , _ ('Project deleted' ))
204
240
project_dashboard = reverse ('projects_dashboard' )
205
241
return HttpResponseRedirect (project_dashboard )
0 commit comments