Skip to content

Commit 807e27c

Browse files
committed
#49 #50 Updated the Default Request Create view.
1 parent 663c0ac commit 807e27c

File tree

3 files changed

+30
-60
lines changed

3 files changed

+30
-60
lines changed

src/cvinterface/templates/cvinterface/requests/default_form.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
<section class="request-create">
77
<header>
88
<h2>
9-
New Request<span class="vocabulary-type">{{ vocabulary_verbose }}</span>
9+
New Request<span class="vocabulary-type">{{ vocabulary_verbose_name }}</span>
1010
<span class="parent-link">
11-
<a href="{% url vocabulary %}" class="tooltip" data-tip="Navigate to the {{ vocabulary_verbose }} vocabulary list."></a>
11+
<a href="{% url vocabulary_code %}" class="tooltip" data-tip="Navigate to the {{ vocabulary_verbose_name }} vocabulary list."></a>
1212
</span>
1313
</h2>
1414
<h4>Make a request to add or modify a term.</h4>

src/cvinterface/views/base_views.py

+27-55
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020

2121
# Vocabulary Basic Views
22-
from cvinterface.signals import request_approved
22+
from cvinterface.signals import request_approved, request_rejected, request_made
2323
from cvservices.models import ControlledVocabularyRequest, Unit
2424
from odm2cvs.controlled_vocabularies import Vocabulary
2525

@@ -129,7 +129,6 @@ class DefaultRequestUpdateView(UpdateView, LoginRequiredMixin, SuccessMessageMix
129129
reject_button: str = 'request_reject'
130130
pk_url_kwarg: str = 'vocabulary_id'
131131
login_url = reverse_lazy('login')
132-
read_only: List[str] = []
133132

134133
vocabulary: Vocabulary = {}
135134
vocabulary_code: str = ''
@@ -161,6 +160,7 @@ def form_valid(self, form):
161160
request_approved.send(sender=form, web_request=self.request, vocabulary=self.vocabulary)
162161
return self.accept_request(form)
163162
elif self.reject_button in self.request.POST:
163+
request_rejected.send(sender=form, web_request=self.request, vocabulary=self.vocabulary)
164164
return self.reject_request(form)
165165

166166
def accept_request(self, form):
@@ -211,33 +211,34 @@ def save_revised_request(self, form, status):
211211

212212

213213
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+
223221
submitter_fields = ['submitter_name', 'submitter_email', 'request_reason']
222+
recaptcha_key = settings.RECAPTCHA_KEY
223+
vocabulary: Vocabulary = {}
224+
vocabulary_code: str = ''
224225

225226
def __init__(self, **kwargs):
226227
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'))
233234
self.fields = [field.name for field in self.model._meta.fields if field.name not in self.exclude]
234235

235236
def get_context_data(self, **kwargs):
236237
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
241242
context['submitter_fields'] = self.submitter_fields
242243
context['recaptcha_user_key'] = settings.RECAPTCHA_USER_KEY
243244
return context
@@ -246,12 +247,8 @@ def get_initial(self):
246247
if 'vocabulary_id' not in self.kwargs:
247248
return {}
248249

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}
255252
return initial_data
256253

257254
def is_captcha_valid(self, form):
@@ -273,43 +270,18 @@ def is_captcha_valid(self, form):
273270
}
274271

275272
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)
278274

279275
def form_valid(self, form):
280276
if not self.is_captcha_valid(form):
281277
return super(DefaultRequestCreateView, self).form_invalid(form)
282278

283279
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')
285281

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)
288283
return super(DefaultRequestCreateView, self).form_valid(form)
289284

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-
313285

314286
class UnitsListView(ListView):
315287
model = Unit

src/cvinterface/views/request_views.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,8 @@
3333

3434
# create_view
3535
request_create_views[vocabulary_code] = request.get('create_view', defaults['create_view']).as_view(
36-
request_name=f'{vocabulary_code}request', model=request.get('model'),
37-
vocabulary=vocabulary_code, request_verbose=request.get('name'),
36+
vocabulary=vocabulary, vocabulary_code=vocabulary_code,
3837
template_name=request.get('create_template', defaults['create_template']),
39-
vocabulary_verbose=vocabulary.get('name'), vocabulary_model=vocabulary.get('model')
4038
)
4139

4240
# update view

0 commit comments

Comments
 (0)