Skip to content
Snippets Groups Projects
Commit f481b83b authored by Jonathan Seguin's avatar Jonathan Seguin
Browse files

Separate user and admin portion of the site

parent f987d231
No related branches found
No related tags found
1 merge request!8Resolve "Sidebar fixes"
......@@ -22,10 +22,28 @@
{% trans 'Users' %}
</a>
<a class="nav-link {% if active_page == 'datasets' %}active{% endif %}" href="{% url 'admin.datasets' %}">
<a class="nav-link"
href="#file-subnav" data-toggle="collapse"
role="button" aria-expanded="{% if active_page == 'datafiles' or active_page == 'datasets' %}true{% else %}false{% endif %}" aria-controls="file-subnav">
<i class="fas fa-archive fa-fw"></i>
{% trans 'Data' %}
{% trans 'Data Management' %}
<span class="chevron float-right">
<i class="fas fa-caret-left fa-fw closed"></i>
<i class="fas fa-caret-down fa-fw open"></i>
</span>
</a>
<div class="collapse subnav {% if active_page == 'datafiles' or active_page == 'datasets' %}show{% endif %}" id="file-subnav">
<a class="nav-link {% if active_page == 'datafiles' %}active{% endif %}" href="{% url 'admin.datafiles' %}">
<i class="fas fa-file-alt fa-fw"></i>
{% trans 'Files' %}
</a>
<a class="nav-link {% if active_page == 'datasets' %}active{% endif %}" href="{% url 'admin.datasets' %}">
<i class="fas fa-file-archive fa-fw"></i>
{% trans 'DataSets' %}
</a>
</div>
{% endblock %}
......
{% extends './base.html' %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block main_content %}
<div class="row">
<div class="col-xl-10">
<form action="" method="POST" enctype="multipart/form-data" novalidate class="mb-5">
{% csrf_token %}
{{ form.dropzone_files|as_crispy_field }}
<div class="form-row">
<div class="form-group col-md-10">
{{ form.annotations|as_crispy_field }}
</div>
</div>
<h2>{% trans 'Drag files here to upload' %}</h2>
<div class="mb-5">
{% include "portal/widgets/dropzone.html" %}
</div>
<button type="submit" class="btn btn-primary">{% trans 'Submit' %}</button>
<a href="{{ view.success_url }}" class="btn btn-danger ml-2">{% trans 'Cancel' %}</a>
</form>
</div>
</div>
{% endblock %}
{% extends './list.html' %}
{% load i18n %}
{% block inline_js %}
<script>
$(function() {
$("#{{ dt_struct.id }}").DataTable({
ajax: {
url: '{{ api_url }}',
dataSrc: 'data'
},
order: [[ 3, 'desc' ]],
columnDefs: [
{ "orderable": false, "targets": 4 }
]
});
$("#create-button").appendTo("#{{ dt_struct.id }}_wrapper .row:first div:first");
});
</script>
{% endblock %}
\ No newline at end of file
......@@ -9,10 +9,16 @@ from .views.secure.alert import (AlertCreateView, AlertJSONListView,
from .views.secure.dashboard import AdminDashboardView, DashboardView
from .views.secure.datafile import (DataFileAnnotateView, DataFileUploadView,
MyDataFileDownloadView,
MyDataFilesJSONListView, MyDataFilesView)
MyDataFilesJSONListView, MyDataFilesView,
AdminDataFileAnnotateView, AdminDataFileUploadView,
AdminMyDataFileDownloadView,
AdminMyDataFilesJSONListView, AdminMyDataFilesView)
from .views.secure.dataset import (DataSetCreateView, DataSetDeleteView,
DataSetJSONListView, DataSetUpdateView,
DataSetView)
DataSetView,
AdminDataSetCreateView, AdminDataSetDeleteView,
AdminDataSetJSONListView, AdminDataSetUpdateView,
AdminDataSetView)
from .views.secure.institution import (InstitutionCreateView,
InstitutionJSONListView,
InstitutionUpdateView, InstitutionView)
......@@ -24,7 +30,6 @@ from .views.secure.user_profile import (AdminUserView, ProfileUpdateView,
UserCreateView, UserDeleteView,
UserJSONListView, UserUpdateView)
# app_name = 'gas'
urlpatterns = [
# Landing Pages
path('', IndexView.as_view(), name='index'),
......@@ -47,18 +52,23 @@ urlpatterns = [
path('secure/my-datafiles/annotate', DataFileAnnotateView.as_view(), name='user.datafile-annotate'),
path('secure/my-datafiles/upload', DataFileUploadView.as_view(), name='user.datafile-upload'),
path('secure/my-datafiles/download', MyDataFileDownloadView.as_view(), name='user.datafile-download'),
path('secure/admin/my-datafiles/', AdminMyDataFilesView.as_view(), name='admin.datafiles'),
path('secure/admin/my-datafiles/list/json/', AdminMyDataFilesJSONListView.as_view(), name='admin.datafile-json-list'),
path('secure/admin/my-datafiles/annotate', AdminDataFileAnnotateView.as_view(), name='admin.datafile-annotate'),
path('secure/admin/my-datafiles/upload', AdminDataFileUploadView.as_view(), name='admin.datafile-upload'),
path('secure/admin/my-datafiles/download', AdminMyDataFileDownloadView.as_view(), name='admin.datafile-download'),
# DataSets
path('secure/datasets/list/json/', DataSetJSONListView.as_view(), name='secure.dataset-json-list'),
path('secure/my-datasets/', DataSetView.as_view(), name='user.datasets'),
path('secure/my-datasets/create', DataSetCreateView.as_view(), name='user.dataset-create'),
path('secure/my-datasets/update/<int:pk>', DataSetUpdateView.as_view(), name='user.dataset-update'),
path('secure/my-datasets/delete/<int:pk>', DataSetDeleteView.as_view(), name='user.dataset-delete'),
path('secure/admin/datasets/', DataSetView.as_view(), name='admin.datasets'),
path('secure/admin/datasets/list/json/', DataSetJSONListView.as_view(), name='admin.dataset-json-list'),
path('secure/admin/datasets/create/', DataSetCreateView.as_view(), name="admin.dataset-create"),
path('secure/admin/datasets/update/<int:pk>', DataSetUpdateView.as_view(), name="admin.dataset-update"),
path('secure/admin/datasets/', AdminDataSetView.as_view(), name='admin.datasets'),
path('secure/admin/datasets/list/json/', AdminDataSetJSONListView.as_view(), name='admin.secure.dataset-json-list'),
path('secure/admin/datasets/create/', AdminDataSetCreateView.as_view(), name="admin.dataset-create"),
path('secure/admin/datasets/update/<int:pk>', AdminDataSetUpdateView.as_view(), name="admin.dataset-update"),
path('secure/admin/my-datasets/delete/<int:pk>', AdminDataSetDeleteView.as_view(), name='admin.dataset-delete'),
# Users
path('secure/my-profile/', ProfileUpdateView.as_view(), name='my-profile'),
......
......@@ -10,7 +10,7 @@ from private_storage.views import PrivateStorageDetailView
from ...forms import BasicDataFileForm, DataFileAnnotationForm
from ...models import DataFile, DataSet, Lab
from ...views import ActivePageViewMixin, JSONListView, AjaxDatatableBackboneMixin
from ...views import ActivePageViewMixin, JSONListView, AjaxDatatableBackboneMixin, StaffViewMixin
class MyDataFilesView(LoginRequiredMixin, ActivePageViewMixin, AjaxDatatableBackboneMixin, TemplateView):
......@@ -101,3 +101,39 @@ class MyDataFileDownloadView(LoginRequiredMixin, PrivateStorageDetailView):
# When the object can be accessed, the file may be downloaded.
# This overrides PRIVATE_STORAGE_AUTH_FUNCTION
return self.object.profile == self.request.user.profile
class AdminMyDataFilesView(StaffViewMixin, MyDataFilesView):
page_title = _('My Data')
active_page = 'datafiles'
template_name = 'portal/secure/admin/datafile_list.html'
create_url = reverse_lazy('admin.datafile-annotate')
api_url = reverse_lazy('admin.datafile-json-list')
dt_struct = {
'id': 'all-datafile',
'headers': [_('Name'), _('File Type'), _('Size'), _('Uploaded On'), _('Lab')]
}
class AdminMyDataFilesJSONListView(StaffViewMixin, MyDataFilesJSONListView):
pass
class AdminDataFileAnnotateView(StaffViewMixin, DataFileAnnotateView):
form_class = DataFileAnnotationForm
template_name = 'portal/secure/admin/datafile_form.html'
page_title = _('New Data Upload')
active_page = 'datafiles'
success_url = reverse_lazy('admin.datafiles')
class AdminDataFileUploadView(StaffViewMixin, DataFileUploadView):
model = DataFile
form_class = BasicDataFileForm
template_name = 'portal/secure/admin/datafile_form.html'
page_title = _('New Data Upload')
active_page = 'datafiles'
class AdminMyDataFileDownloadView(StaffViewMixin, MyDataFileDownloadView):
pass
......@@ -31,7 +31,7 @@ class DataSetView(LoginRequiredMixin, ActivePageViewMixin, AjaxDatatableBackbone
class AdminDataSetView(StaffViewMixin, DataSetView):
template_name = 'portal/secure/admin/list.html'
create_url = reverse_lazy('admin.dataset-create')
api_url = reverse_lazy('secure.dataset-json-list')
api_url = reverse_lazy('admin.secure.dataset-json-list')
class DataSetJSONListView(LoginRequiredMixin, JSONListView):
......@@ -39,11 +39,7 @@ class DataSetJSONListView(LoginRequiredMixin, JSONListView):
def get_queryset(self):
qs = self.model.created.all()
if not self.request.user.is_staff:
return qs.filter(created_by=self.request.user.profile)
else:
return qs
return qs.filter(created_by=self.request.user.profile)
def get_rows(self):
rows = []
......@@ -57,8 +53,7 @@ class DataSetJSONListView(LoginRequiredMixin, JSONListView):
{'buttons': [
(reverse('user.dataset-update', args=[o.id]), 'fas fa-edit', ugettext('Edit')),
(reverse('user.dataset-delete', args=[o.id]), 'fas fa-trash-alt', ugettext('Delete'), 'danger')
]}
)
]})
])
return rows
......@@ -117,3 +112,54 @@ class DataSetDeleteView(StaffViewMixin, DeleteViewMixin, DeleteView):
context['confirmation_msg'] = ugettext('Please confirm the deletion of the DataSet <strong>"{0}"</strong>').format(dataset.name)
return context
class AdminDataSetJSONListView(StaffViewMixin, DataSetJSONListView):
model = DataSet
def get_queryset(self):
return self.model.created.all()
def get_rows(self):
rows = []
for o in self.object_list:
rows.append([
o.name,
timezone.localtime(o.creation_ts).strftime('%y-%m-%d %H:%M:%S %Z'),
timezone.localtime(o.update_ts).strftime('%y-%m-%d %H:%M:%S %Z'),
render_to_string(
'portal/templates/portal/widgets/action_buttons.html',
{'buttons': [
(reverse('admin.dataset-update', args=[o.id]), 'fas fa-edit', ugettext('Edit')),
(reverse('admin.dataset-delete', args=[o.id]), 'fas fa-trash-alt', ugettext('Delete'), 'danger')
]}
)
])
return rows
class AdminDataSetCreateView(StaffViewMixin, DataSetCreateView):
model = DataSet
form_class = DataSetForm
success_url = reverse_lazy('admin.datasets')
page_title = _('New DataSet')
active_page = 'datasets'
template_name = 'portal/secure/admin/create_update.html'
class AdminDataSetUpdateView(StaffViewMixin, DataSetUpdateView):
model = DataSet
form_class = DataSetForm
success_url = reverse_lazy('admin.datasets')
page_title = _('Update DataSet')
active_page = 'datasets'
template_name = 'portal/secure/admin/create_update.html'
class AdminDataSetDeleteView(StaffViewMixin, DeleteViewMixin, DeleteView):
model = DataSet
page_title = _('Delete DataSet')
active_page = 'datasets'
success_url = reverse_lazy('admin.datasets')
template_name = 'portal/secure/admin/delete.html'
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment