diff --git a/profiles/forms.py b/profiles/forms.py index bcebf4118b0349aa43d657e6ff433388d6140659..d8b9b8e2ffbbe1022d49beff250d2a2121d54427 100644 --- a/profiles/forms.py +++ b/profiles/forms.py @@ -35,3 +35,7 @@ class AlternativeEmailForm(forms.ModelForm): class Meta: model = AlternativeEmail fields = ['email', 'still_valid'] + + +class SearchTextForm(forms.Form): + text = forms.CharField(label='') diff --git a/profiles/templates/profiles/profile_list.html b/profiles/templates/profiles/profile_list.html index ee574e9d7ebcb9a9f55af4526c2952f04eefec3b..f3298656c18928377a5aaefb552974a88b202076 100644 --- a/profiles/templates/profiles/profile_list.html +++ b/profiles/templates/profiles/profile_list.html @@ -41,27 +41,39 @@ <li>Create a Profile for <a href="{% url 'profiles:profile_create' from_type='refereeinvitation' pk=next_refinv_wo_profile.id %}">the next</a> Referee Invitation without one ({{ nr_refinv_wo_profile }} to handle)</li> {% endif %} </ul> - <br/> - <ul class="list-inline"> - <li class="list-inline-item"> - <a href="{% url 'profiles:profiles' %}">View all</a> or view by discipline/subject area: - </li> - {% for discipline in subject_areas %} - <li class="list-inline-item"> - <div class="dropdown"> - <button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton{{ discipline.0|cut:" " }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ discipline.0 }}</button> - <div class="dropdown-menu" aria-labelledby="dropdownMenuButton{{ discipline.0|cut:" " }}"> - <a class="dropdown-item" href="?discipline={{ discipline.0|cut:' '}}">View all in {{ discipline.0 }}</a> - {% for area in discipline.1 %} - <a class="dropdown-item" href="?discipline={{ discipline.0|cut:' '}}&expertise={{ area.0}}">{{ area.0 }}</a> - {% endfor %} - </div> - </div> - </li> - {% endfor %} - </ul> + <h4>Specialize the list:</h4> <ul> + <li> + <ul class="list-inline"> + <li class="list-inline-item"> + <a href="{% url 'profiles:profiles' %}">View all</a> or view by discipline/subject area: + </li> + {% for discipline in subject_areas %} + <li class="list-inline-item"> + <div class="dropdown"> + <button class="btn btn-primary dropdown-toggle" type="button" id="dropdownMenuButton{{ discipline.0|cut:" " }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ discipline.0 }}</button> + <div class="dropdown-menu" aria-labelledby="dropdownMenuButton{{ discipline.0|cut:" " }}"> + <a class="dropdown-item" href="?discipline={{ discipline.0|cut:' '}}">View all in {{ discipline.0 }}</a> + {% for area in discipline.1 %} + <a class="dropdown-item" href="?discipline={{ discipline.0|cut:' '}}&expertise={{ area.0}}">{{ area.0 }}</a> + {% endfor %} + </div> + </div> + </li> + {% endfor %} + </ul> + </li> <li>View only Profiles <a href="{% add_get_parameters contributor=True %}">with</a> or <a href="{% add_get_parameters contributor=False %}">without</a> an associated Contributor</li> + <li> + <ul class="list-inline"> + <li class="list-inline-item">Last name startswith:</li> + <li class="list-inline-item"> + <form action="" method="get">{{ searchform }} + </li> + <li class="list-inline-item"><input class="btn btn-outline-secondary" type="submit" value="Search"></form> + </li> + </ul> + </li> </ul> </div> </div> diff --git a/profiles/views.py b/profiles/views.py index 7eeb8d2970ba6fea2ca54e94ea728f5690233064..fecd548f01c51fbb456b6a4808ecbb8427ecd672 100644 --- a/profiles/views.py +++ b/profiles/views.py @@ -19,7 +19,7 @@ from invitations.models import RegistrationInvitation from submissions.models import RefereeInvitation from .models import Profile, AlternativeEmail -from .forms import ProfileForm, AlternativeEmailForm +from .forms import ProfileForm, AlternativeEmailForm, SearchTextForm @@ -113,11 +113,14 @@ class ProfileListView(PermissionsMixin, PaginationMixin, ListView): queryset = queryset.filter(contributor=None) elif self.request.GET.get('contributor', None) == 'True': queryset = queryset.exclude(contributor=None) + if self.request.GET.get('text', None): + queryset = queryset.filter(last_name__startswith=self.request.GET.get('text')) return queryset def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['subject_areas'] = SCIPOST_SUBJECT_AREAS + context['searchform'] = SearchTextForm(initial={'text': self.request.GET.get('text', None)}) contributors_dup_email = Contributor.objects.have_duplicate_email() context['nr_contributors_w_duplicate_email'] = contributors_dup_email.count() context['contributors_w_duplicate_email'] = contributors_dup_email diff --git a/scipost/templatetags/add_get_parameters.py b/scipost/templatetags/add_get_parameters.py index c471b98a5d77da2b5568e5b0fa13a1dd42669868..fa87ca3eacd08eaa485b3d1715c982d203ea3070 100644 --- a/scipost/templatetags/add_get_parameters.py +++ b/scipost/templatetags/add_get_parameters.py @@ -13,6 +13,8 @@ def add_get_parameters(context, **kwargs): for k, v in kwargs.items(): if v is not None: parameters[k] = v + elif k in parameters.keys(): + del parameters[k] if parameters: params = '?' for k, v in parameters.items():