Skip to content
Open
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
2 changes: 2 additions & 0 deletions ifcbdb/secure/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@
path('api/sync/<int:dataset_id>', views.sync_dataset, name='sync_dataset'),
path('api/sync/status/<int:dataset_id>', views.sync_dataset_status, name='sync_dataset_status'),
path('api/sync/cancel/<int:dataset_id>', views.sync_cancel, name='sync_cancel'),
path('api/dataset/<int:dataset_id>/bin-count', views.dataset_bin_count, name='dataset_bin_count'),
path('api/delete-dataset/<int:dataset_id>', views.delete_dataset, name='delete_dataset'),
path('api/metadata-upload/status', views.metadata_upload_status, name='metadata_upload_status'),
path('api/metadata-upload/cancel', views.metadata_upload_cancel, name="metadata_upload_cancel"),
path('api/toggle-skip', views.toggle_skip, name='toggle_skip'),
Expand Down
30 changes: 30 additions & 0 deletions ifcbdb/secure/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,36 @@ def edit_dataset(request, id):
})


@login_required
def dataset_bin_count(request, dataset_id):
if not auth.can_manage_datasets(request.user):
return HttpResponseForbidden()

dataset = get_object_or_404(Dataset, pk=dataset_id)

if not auth.is_admin(request.user) and not TeamDataset.objects.filter(dataset=dataset).exists():
return HttpResponseForbidden()

return JsonResponse({
"bin_count": dataset.bins.count(),
})


@require_POST
def delete_dataset(request, dataset_id):
if not auth.can_manage_datasets(request.user):
return HttpResponseForbidden()

dataset = get_object_or_404(Dataset, pk=dataset_id)

if not auth.is_admin(request.user) and not TeamDataset.objects.filter(dataset=dataset).exists():
return HttpResponseForbidden()

dataset.delete()

return JsonResponse({})


@login_required
def edit_directory(request, dataset_id, id):
if not auth.is_admin(request.user):
Expand Down
22 changes: 1 addition & 21 deletions ifcbdb/templates/secure/dataset-management.html
Original file line number Diff line number Diff line change
Expand Up @@ -37,27 +37,7 @@
</a>
</div>

<!-- Delete Confirm Modal -->
<div class="modal" id="datasetDeleteModal" tabindex="-1" role="dialog" aria-labelledby="datasetDeleteModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="datasetDeleteModalLabel">Confirm Deletion</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<p class="h3">Are you certain you wish to delete this dataset?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-sm btn-outline-mdb-color" data-dismiss="modal">No</button>
<button type="button" class="btn btn-sm btn-danger">Yes</button>
</div>
</div>
</div>
</div>
<!-- End Delete Modal -->

{% endblock %} {% block scripts %}
<script>
$(function(){
Expand Down
52 changes: 37 additions & 15 deletions ifcbdb/templates/secure/edit-dataset.html
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
<span class="h3-responsive">{% if dataset.id > 0 %}Edit Dataset {{ dataset.title }}{% else %}Add New Dataset{% endif %}</span>
</div>
<div class="flex-column">
{% if dataset.id > 0 %}
<button type="button" id="delete-dataset-btn" class="btn btn-sm btn-danger mr-2">Delete Dataset</button>
{% endif %}
{% if dataset.id > 0 and request.user.is_superuser %}
<a class="btn btn-sm btn-mdb-color" href="{% url 'secure:directory-management' dataset.id %}">Manage directories</a>
{% endif %}
Expand Down Expand Up @@ -180,6 +183,7 @@
var _csrf = "{{ csrf_token }}";

{% if dataset.id > 0 and request.user.is_superuser %}

function dataset_sync_status() {
$.getJSON("{% url 'secure:sync_dataset_status' dataset.id %}", function(data) {
if(data.state == 'LOCKED') { // job hasn't started yet
Expand Down Expand Up @@ -225,21 +229,6 @@
}
});
}
$('#id_name').keyup(function(){
let $name_field = $('#id_name');
let name = $name_field.val()
if(name.indexOf(" ")!=-1){
name = name.split(" ").join("");
$name_field.val(name)
}

let $name_message_el = $('#id_name_message')
let message = 'The URL to this dataset <strong>will be: </strong>';
message += $name_message_el.data('default-href');
message += '<strong>' + name +'</strong>';
$name_message_el.html(message);

})

$('#sync-button').click(function() {
var payload = {
Expand Down Expand Up @@ -272,7 +261,40 @@
}
});
}, 10);

{% endif %}

$('#id_name').keyup(function(){
let $name_field = $('#id_name');
let name = $name_field.val()
if(name.indexOf(" ")!=-1){
name = name.split(" ").join("");
$name_field.val(name)
}

let $name_message_el = $('#id_name_message')
let message = 'The URL to this dataset <strong>will be: </strong>';
message += $name_message_el.data('default-href');
message += '<strong>' + name +'</strong>';
$name_message_el.html(message);
});

$("#delete-dataset-btn").click(function() {
$.getJSON("/secure/api/dataset/{{ dataset.id }}/bin-count", function(data) {
const warning = data.bin_count > 0
? `This dataset contains ${data.bin_count} bin${data.bin_count === 1 ? '' : 's'} which may become orphaned if they are not associated with any other datasets`
: "This dataset does not have any bins and can be safely deleted";

if (!confirm("Are you sure you want to delete this dataset?\n\n" + warning)) {
return;
}

const payload = { csrfmiddlewaretoken: _csrf };
$.post("/secure/api/delete-dataset/{{ dataset.id }}", payload, function() {
window.location.href = "{% url 'secure:dataset-management' %}";
});
});
});
</script>

{% endblock %}