Skip to content

[GRDM-51005] Institution List Selection Screen in User Identification Information #598

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions admin/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -168,8 +168,8 @@
</li>
{% endif %}
{% if user.is_superuser %}
<li class="{% if request.resolver_match.url_name == 'user_identification_list' or request.resolver_match.url_name == 'user_identification_detail' %}active{% endif %}">
<a href="{% url 'user_identification_information:user_identification_list' %}">
<li class="{% if request.resolver_match.url_name == 'user_identification_institutions' or request.resolver_match.url_name == 'user_identification_list' or request.resolver_match.url_name == 'user_identification_detail' %}active{% endif %}">
<a href="{% url 'user_identification_information:user_identification_institutions' %}">
<i class='fa fa-link'></i><span>{% trans "User Identification Information" %}</span>
</a>
</li>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<div class="col-md-12" style="display:flex; align-items: baseline; justify-content: space-between;">
<h3>{% trans "User details" %}</h3>
{% if user.is_superuser %}
<a href="{% url 'user_identification_information:user_identification_list' %}" class="btn btn-primary">
<a href="{% url 'user_identification_information:user_identification_list' institution_id=user_details.affiliation.id %}" class="btn btn-primary">
{% trans "Return" %}
</a>
{% else %}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{% extends "base.html" %}
{% load i18n %}
{% load static %}

{% load render_bundle from webpack_loader %}

{% block top_includes %}
<link rel="stylesheet" type="text/css" href="/static/css/institutions.css"/>
{% endblock %}

{% block title %}
<title>{% trans "List of Institutions" %}</title>
{% endblock title %}

{% block content %}
<h2>{% trans "List of Institutions" %}</h2>

{% include "util/pagination.html" with items=page status=status %}
<table class="table table-striped table-hover table-responsive">
<thead>
<tr>
<th>{% trans "Logo" %}</th>
<th width="30%">{% trans "Name" %}</th>
<th>{% trans "Description" %}</th>
</tr>
</thead>
<tbody>
{% for institution in institutions %}
<tr>
<td>
<a href="{% url 'user_identification_information:user_identification_list' institution_id=institution.id %}">
<img class="institution-logo"
src="{{ logohost }}/static/img/institutions/shields/{{ institution.logo_name }}"
alt="{{ institution.name }}">
</a>
</td>
<td>
<a href="{% url 'user_identification_information:user_identification_list' institution_id=institution.id %}">{{ institution.name }}</a>
</td>
<td>{{ institution.description | safe }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% if not institutions|length %}
<h3>{% trans "No results found" %}</h3>
{% endif %}
{% endblock content %}
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,9 @@
}
</style>
<h2 id="title">{% trans "User Identification Information" %}</h2>
{% if user.is_superuser == False %}
<h3 id="sub-title">
{% blocktrans %}{{ institution_name }}{% endblocktrans %}
</h3>
{% endif %}
<h3 id="sub-title">
{% blocktrans %}{{ institution_name }}{% endblocktrans %}
</h3>
<form
class="form-inline flex-container search-form"
action="#"
Expand Down Expand Up @@ -189,7 +187,7 @@ <h3 id="sub-title">
<a
class="btn btn-primary"
style="padding-left: 6px; padding-right: 6px"
href="{% url 'user_identification_information:user_identification_export_csv' %}"
href="{% url 'user_identification_information:user_identification_export_csv' institution_id=institution_id %}"
>{% trans "Export All Users Statistics (CSV)" %}</a
>
{% else %}
Expand Down
6 changes: 4 additions & 2 deletions admin/user_identification_information/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@
app_name = 'admin'

urlpatterns = [
url(r'^$', views.UserIdentificationListView.as_view(),
url(r'^institutions/$', views.UserIdentificationInstitutionListView.as_view(),
name='user_identification_institutions'),
url(r'^institutions/(?P<institution_id>[0-9]+)/$', views.UserIdentificationListView.as_view(),
name='user_identification_list'),
url(r'^csvexport/$', views.ExportFileCSVView.as_view(),
url(r'^institutions/(?P<institution_id>[0-9]+)/csvexport/$', views.ExportFileCSVView.as_view(),
name='user_identification_export_csv'),
url(r'^(?P<guid>[a-z0-9]+)/$', views.UserIdentificationDetailView.as_view(),
name='user_identification_detail'),
Expand Down
60 changes: 55 additions & 5 deletions admin/user_identification_information/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,52 @@
from django.http import HttpResponse
from django.views.generic import ListView

from admin.base import settings
from admin.base.views import GuidView
from admin.rdm.utils import RdmPermissionMixin
from admin.user_identification_information.utils import (
custom_size_abbreviation,
get_list_extend_storage
)
from api.base import settings as api_settings
from osf.models import OSFUser, UserQuota, Email
from osf.models import OSFUser, UserQuota, Email, Institution
from website.util import quota
from datetime import datetime
from django.contrib.auth.mixins import UserPassesTestMixin


class UserIdentificationInstitutionListView(RdmPermissionMixin, UserPassesTestMixin, ListView):
""" Institution list page for User Identification Information menu. """
template_name = 'user_identification_information/user_identification_institution_list.html'
paginate_by = 25
ordering = 'name'
raise_exception = True
model = Institution

def test_func(self):
""" Check user permissions """
if not self.is_authenticated:
# If user is not authenticated then redirect to login page
self.raise_exception = False
return False
# Only allow super administrators to access this view
return self.is_super_admin

def get_queryset(self):
""" GET: set to self.object_list """
return Institution.objects.filter(is_deleted=False).order_by(self.ordering)

def get_context_data(self, **kwargs):
""" Get context for this view """
query_set = kwargs.pop('object_list', self.object_list)
page_size = self.get_paginate_by(query_set)
paginator, page, query_set, is_paginated = self.paginate_queryset(query_set, page_size)
kwargs.setdefault('institutions', query_set)
kwargs.setdefault('page', page)
kwargs.setdefault('logohost', settings.OSF_URL)
return super(UserIdentificationInstitutionListView, self).get_context_data(**kwargs)


class UserIdentificationInformationListView(ListView):

def get_user_quota_info(self, user, storage_type, extend_storage=''):
Expand Down Expand Up @@ -65,8 +98,15 @@ def get_context_data(self, **kwargs):
self.paginator, self.page, self.query_set, self.is_paginated = \
self.paginate_queryset(self.query_set, self.page_size)
kwargs['requested_user'] = self.request.user
kwargs['institution_name'] = self.request.user.affiliated_institutions.first().name \
if self.request.user.is_superuser is False else None
if self.request.user.is_superuser is False:
kwargs['institution_name'] = self.request.user.affiliated_institutions.first().name
else:
institution_id = self.kwargs.get('institution_id')
institution = Institution.objects.filter(id=institution_id).first()
if institution is None:
raise Http404('Institution not found')
kwargs['institution_name'] = institution.name
kwargs['institution_id'] = institution.id
kwargs['users'] = self.query_set
kwargs['page'] = self.page
kwargs['order_by'] = self.get_order_by()
Expand Down Expand Up @@ -97,6 +137,7 @@ def test_func(self):
"""check user permissions"""
# login check
if not self.is_authenticated:
self.raise_exception = False
return False

# permitted if superuser
Expand All @@ -112,7 +153,11 @@ def user_list(self):
if institution is not None:
queryset = OSFUser.objects.filter(affiliated_institutions=institution.id).order_by('id')
else:
queryset = OSFUser.objects.all().order_by('id')
institution_id = self.kwargs.get('institution_id')
institution = Institution.objects.filter(id=institution_id).first()
if institution is None:
raise Http404('Institution not found')
queryset = OSFUser.objects.filter(affiliated_institutions=institution_id).order_by('id')

dict_users_list = get_list_extend_storage()

Expand Down Expand Up @@ -219,6 +264,7 @@ def test_func(self):
"""check user permissions"""
# login check
if not self.is_authenticated:
self.raise_exception = False
return False

# permitted if superuser
Expand All @@ -244,7 +290,11 @@ def get(self, request, **kwargs):
if institution is not None:
queryset = OSFUser.objects.filter(affiliated_institutions=institution.id).order_by('id')
else:
queryset = OSFUser.objects.all().order_by('id')
institution_id = self.kwargs.get('institution_id')
institution = Institution.objects.filter(id=institution_id).first()
if institution is None:
raise Http404('Institution not found')
queryset = OSFUser.objects.filter(affiliated_institutions=institution_id).order_by('id')

dict_users_list = get_list_extend_storage()
for user in queryset:
Expand Down
Loading