19
19
20
20
21
21
# Vocabulary Basic Views
22
- from cvinterface .signals import request_approved
22
+ from cvinterface .signals import request_approved , request_rejected , request_made
23
23
from cvservices .models import ControlledVocabularyRequest , Unit
24
24
from odm2cvs .controlled_vocabularies import Vocabulary
25
25
@@ -129,7 +129,6 @@ class DefaultRequestUpdateView(UpdateView, LoginRequiredMixin, SuccessMessageMix
129
129
reject_button : str = 'request_reject'
130
130
pk_url_kwarg : str = 'vocabulary_id'
131
131
login_url = reverse_lazy ('login' )
132
- read_only : List [str ] = []
133
132
134
133
vocabulary : Vocabulary = {}
135
134
vocabulary_code : str = ''
@@ -161,6 +160,7 @@ def form_valid(self, form):
161
160
request_approved .send (sender = form , web_request = self .request , vocabulary = self .vocabulary )
162
161
return self .accept_request (form )
163
162
elif self .reject_button in self .request .POST :
163
+ request_rejected .send (sender = form , web_request = self .request , vocabulary = self .vocabulary )
164
164
return self .reject_request (form )
165
165
166
166
def accept_request (self , form ):
@@ -211,33 +211,34 @@ def save_revised_request(self, form, status):
211
211
212
212
213
213
class DefaultRequestCreateView (SuccessMessageMixin , CreateView ):
214
- request_name = None
215
- vocabulary = None
216
- request_verbose = None
217
- vocabulary_model = None
218
- vocabulary_verbose = None
219
- pk_url_kwarg = 'vocabulary_id'
220
- recaptcha_key = settings .RECAPTCHA_KEY
221
- success_message = 'Your request has been made successfully.'
222
- exclude = ['request_id' , 'status' , 'date_submitted' , 'date_status_changed' , 'request_for' , 'request_notes' , 'original_request' ]
214
+ exclude : List [str ] = ['request_id' , 'status' , 'date_submitted' , 'date_status_changed' ,
215
+ 'request_for' , 'request_notes' , 'original_request' ]
216
+ success_message : str = 'Your request has been made successfully.'
217
+ context_object_name : str = 'vocabulary_request'
218
+ pk_url_kwarg : str = 'vocabulary_id'
219
+ login_url = reverse_lazy ('login' )
220
+
223
221
submitter_fields = ['submitter_name' , 'submitter_email' , 'request_reason' ]
222
+ recaptcha_key = settings .RECAPTCHA_KEY
223
+ vocabulary : Vocabulary = {}
224
+ vocabulary_code : str = ''
224
225
225
226
def __init__ (self , ** kwargs ):
226
227
super (DefaultRequestCreateView , self ).__init__ (** kwargs )
227
- self .request_name = kwargs [ 'request_name' ]
228
- self .vocabulary = kwargs [ 'vocabulary' ]
229
- self .request_verbose = kwargs [ 'request_verbose' ]
230
- self .vocabulary_model = kwargs [ 'vocabulary_model' ]
231
- self .vocabulary_verbose = kwargs [ 'vocabulary_verbose' ]
232
- self .success_url = reverse (self .vocabulary )
228
+ self .vocabulary_code = kwargs . get ( 'vocabulary_code' )
229
+ self .vocabulary = kwargs . get ( 'vocabulary' )
230
+ self .request_code = f' { self . vocabulary_code } request'
231
+ self .vocabulary_request = self . vocabulary . get ( 'request' )
232
+ self .model = self . vocabulary_request . get ( 'model' )
233
+ self .success_url = reverse (self .vocabulary . get ( 'list_url_name' ) )
233
234
self .fields = [field .name for field in self .model ._meta .fields if field .name not in self .exclude ]
234
235
235
236
def get_context_data (self , ** kwargs ):
236
237
context = super (DefaultRequestCreateView , self ).get_context_data (** kwargs )
237
- context ['request_name ' ] = self .request_name
238
- context ['request_verbose ' ] = self .request_verbose
239
- context ['vocabulary_verbose ' ] = self .vocabulary_verbose
240
- context ['vocabulary ' ] = self .vocabulary
238
+ context ['request_code ' ] = self .request_code
239
+ context ['vocabulary_verbose_name ' ] = self .vocabulary . get ( 'name' )
240
+ context ['request_verbose_name ' ] = self .vocabulary_request . get ( 'name' )
241
+ context ['vocabulary_code ' ] = self .vocabulary_code
241
242
context ['submitter_fields' ] = self .submitter_fields
242
243
context ['recaptcha_user_key' ] = settings .RECAPTCHA_USER_KEY
243
244
return context
@@ -246,12 +247,8 @@ def get_initial(self):
246
247
if 'vocabulary_id' not in self .kwargs :
247
248
return {}
248
249
249
- initial_data = {}
250
- term = self .vocabulary_model .objects .get (pk = self .kwargs ['vocabulary_id' ])
251
- fields = [concept_field .name for concept_field in term ._meta .fields ]
252
- for field in fields :
253
- initial_data [field ] = term .__getattribute__ (field )
254
-
250
+ concept = self .vocabulary .get ('model' ).objects .get (pk = self .kwargs .get ('vocabulary_id' ))
251
+ initial_data = {field .name : concept .__getattribute__ (field .name ) for field in concept ._meta .fields }
255
252
return initial_data
256
253
257
254
def is_captcha_valid (self , form ):
@@ -273,43 +270,18 @@ def is_captcha_valid(self, form):
273
270
}
274
271
275
272
captcha_request = requests .get (url , params , headers = headers )
276
- return_values = captcha_request .json ()
277
- return return_values ["success" ]
273
+ return captcha_request .json ().get ('success' , False )
278
274
279
275
def form_valid (self , form ):
280
276
if not self .is_captcha_valid (form ):
281
277
return super (DefaultRequestCreateView , self ).form_invalid (form )
282
278
283
279
if 'vocabulary_id' in self .kwargs :
284
- form .instance .request_for_id = self .kwargs [ 'vocabulary_id' ]
280
+ form .instance .request_for_id = self .kwargs . get ( 'vocabulary_id' )
285
281
286
- # TODO: if there's no email setup, just skip...
287
- self .send_confirmation_email (form )
282
+ request_made .send (sender = form , web_request = self .request , vocabulary = self .vocabulary )
288
283
return super (DefaultRequestCreateView , self ).form_valid (form )
289
284
290
- def send_confirmation_email (self , form ):
291
- action = 'creation of a new ' if 'term' not in self .kwargs else 'update of a '
292
-
293
- submitter_email_subject = 'ODM2 Controlled Vocabularies Submission'
294
- submitter_email_message = '' .join (['Thank you for your submission to ODM2 Controlled Vocabularies.' , linesep , linesep ,
295
- 'Vocabulary: ' , self .vocabulary_verbose , linesep ,
296
- 'Term: ' , form .cleaned_data ['term' ], linesep ,
297
- 'Definition: ' , form .cleaned_data ['definition' ], linesep ,
298
- 'Notes: ' , form .cleaned_data ['note' ], linesep ,
299
- 'Reason given for request: ' , form .cleaned_data ['request_reason' ],
300
- ])
301
-
302
- admins_email_subject = 'New request for an ODM2 Controlled Vocabulary Term'
303
- admins_email_message = '' .join (['User ' , form .instance .submitter_name , ' (' , form .instance .submitter_email , ')' ,
304
- ' made a request for the ' , action , self .vocabulary_verbose , ' vocabulary term.' , linesep , linesep ,
305
- 'Term: ' , form .cleaned_data ['term' ], linesep ,
306
- 'Definition: ' , form .cleaned_data ['definition' ], linesep ,
307
- 'Reason given for request: ' , form .cleaned_data ['request_reason' ], linesep , linesep ,
308
- 'To review this submission go to ' , self .request .build_absolute_uri (reverse ('requests_list' ))])
309
-
310
- send_mail (admins_email_subject , admins_email_message , settings .EMAIL_SENDER , settings .EMAIL_RECIPIENTS )
311
- send_mail (submitter_email_subject , submitter_email_message , settings .EMAIL_SENDER , [form .instance .submitter_email ])
312
-
313
285
314
286
class UnitsListView (ListView ):
315
287
model = Unit
0 commit comments