diff --git a/db/base/migrations/0048_add_merge_permission.py b/db/base/migrations/0048_add_merge_permission.py new file mode 100644 index 0000000..a906d64 --- /dev/null +++ b/db/base/migrations/0048_add_merge_permission.py @@ -0,0 +1,17 @@ +# Generated by Django 3.1.5 on 2021-07-15 02:20 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('base', '0047_norad_not_required'), + ] + + operations = [ + migrations.AlterModelOptions( + name='satellite', + options={'permissions': (('merge_satellites', 'Can merge satellites'),)}, + ), + ] diff --git a/db/base/models.py b/db/base/models.py index 14c3c11..0a4e237 100644 --- a/db/base/models.py +++ b/db/base/models.py @@ -255,6 +255,9 @@ class Satellite(models.Model): ) last_modified = models.DateTimeField(auto_now=True) + class Meta: + permissions = (('merge_satellites', 'Can merge satellites'), ) + def __str__(self): if self.satellite_entry: name = self.satellite_entry.name diff --git a/db/base/urls.py b/db/base/urls.py index b276f88..cc4826d 100644 --- a/db/base/urls.py +++ b/db/base/urls.py @@ -33,6 +33,7 @@ BASE_URLPATTERNS = ( path('users/edit/', views.users_edit, name='users_edit'), path('robots.txt', views.robots, name='robots'), path('search/', views.search, name='search_results'), + path('merge_satellites/', views.merge_satellites, name='merge_satellites'), path('create_satellite/', views.SatelliteCreateView.as_view(), name='create_satellite'), path( 'update_satellite//', diff --git a/db/base/views.py b/db/base/views.py index 88dca34..b7cef8f 100644 --- a/db/base/views.py +++ b/db/base/views.py @@ -462,6 +462,26 @@ class TransmitterUpdateView(LoginRequiredMixin, BSModalUpdateView): return self.request.META.get('HTTP_REFERER') +@login_required +@require_POST +def merge_satellites(request): + """Merges satellites if user has merge permission. + """ + primary_satellite = get_object_or_404(Satellite, pk=request.POST['primary-satellite']) + associated_satellite = get_object_or_404(Satellite, pk=request.POST['associated-satellite']) + + if request.user.has_perm('base.merge_satellites'): + if primary_satellite.pk == associated_satellite.pk: + messages.error(request, ('Primary and Associated satellites are the same!')) + else: + associated_satellite.associated_satellite = primary_satellite + associated_satellite.save(update_fields=['associated_satellite']) + messages.success(request, ('Merge is complete!')) + else: + messages.error(request, ('No permission to merge satellites!')) + return redirect(reverse('satellites')) + + class SatelliteCreateView(LoginRequiredMixin, BSModalCreateView): """A django-bootstrap-modal-forms view for creating satellite suggestions""" template_name = 'base/modals/satellite_create.html' diff --git a/db/static/js/app.js b/db/static/js/app.js index fef8fa6..f16b615 100644 --- a/db/static/js/app.js +++ b/db/static/js/app.js @@ -28,6 +28,10 @@ $(document).ready(function() { alerticon = 'far fa-thumbs-up'; alerttitle = 'Success'; } + if ($(this).data('alertclass') == 'alert-error') { + alerticon = 'fas fa-ban'; + alerttitle = 'Error'; + } if ($(this).data('alertclass') == 'alert-warning') { alerticon = 'fas fa-exclamation'; alerttitle = 'Alert'; diff --git a/db/static/js/satellites.js b/db/static/js/satellites.js index 4a35669..053d939 100644 --- a/db/static/js/satellites.js +++ b/db/static/js/satellites.js @@ -62,4 +62,10 @@ $(document).ready(function() { table.on('draw', function(){ updateSatelliteModalForm(); }); + + $('.satellite-to-merge').select2({ + placeholder: 'Select a satellite', + dropdownAutoWidth: true, + dropdownParent: $('#merge-satellites-modal') + }); }); diff --git a/db/templates/base.html b/db/templates/base.html index acddf43..e8c8751 100644 --- a/db/templates/base.html +++ b/db/templates/base.html @@ -244,4 +244,4 @@ {% endcompress %} - \ No newline at end of file + diff --git a/db/templates/base/satellites.html b/db/templates/base/satellites.html index 27bf5b0..1c4d8ea 100644 --- a/db/templates/base/satellites.html +++ b/db/templates/base/satellites.html @@ -7,6 +7,7 @@ + {% endblock %} {% block top-menu-left %} @@ -28,6 +29,13 @@

Submit New Satellite

+ {% if perms.base.merge_satellites %} + + +

Merge Satellites

+
+ {% endif %} @@ -128,6 +136,53 @@ + + {% if perms.base.merge_satellites %} + + {% endif %} {% endif %} @@ -140,6 +195,7 @@ + {% endblock %}