diff --git a/interface/admin.py b/interface/admin.py index c65d0a9..49e3754 100644 --- a/interface/admin.py +++ b/interface/admin.py @@ -16,6 +16,10 @@ class SubmissionAdmin(admin.ModelAdmin): list_display = ['name', 'instrument', 'date', 'complete'] list_filter = ['project', 'complete'] +class ResourceAdmin(admin.ModelAdmin): + list_display = ['name', 'media_type', 'project'] + list_filter = ['project'] + class WikiPageAdmin(admin.ModelAdmin): list_display = ['title', 'project'] list_filter = ['project'] @@ -23,5 +27,5 @@ class WikiPageAdmin(admin.ModelAdmin): admin.site.register(models.Ensemble, EnsembleAdmin) admin.site.register(models.Project, ProjectAdmin) admin.site.register(models.Submission, SubmissionAdmin) -admin.site.register(models.Resource) +admin.site.register(models.Resource, ResourceAdmin) admin.site.register(models.WikiPage, WikiPageAdmin) \ No newline at end of file diff --git a/interface/decorators.py b/interface/decorators.py deleted file mode 100644 index 764f608..0000000 --- a/interface/decorators.py +++ /dev/null @@ -1,29 +0,0 @@ -from django.http import HttpResponseRedirect - -def check_allowed(view_func): - - def _view(request, *args, **kwargs): - - code = request.GET.get('code') - if code: - # just change if we can - try: - ensemble = request.session.get('registered', {})[code.replace('-', '')] - request.session['ensemble'] = ensemble - except KeyError: - # need to register this code - return HttpResponseRedirect('/register?code=' + code) - - request.ensemble_id = request.session.get('ensemble') - - if request.ensemble_id is None: - return HttpResponseRedirect('/register') - - return view_func(request, *args, **kwargs) - - _view.__name__ = view_func.__name__ - _view.__dict__ = view_func.__dict__ - _view.__doc__ = view_func.__doc__ - - return _view - diff --git a/interface/migrations/0014_auto_20200909_1016.py b/interface/migrations/0014_auto_20200909_1016.py new file mode 100644 index 0000000..bf2e489 --- /dev/null +++ b/interface/migrations/0014_auto_20200909_1016.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.1 on 2020-09-09 00:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('interface', '0013_auto_20200907_1455'), + ] + + operations = [ + migrations.AddField( + model_name='resource', + name='description', + field=models.TextField(blank=True), + ), + migrations.AlterField( + model_name='resource', + name='key', + field=models.CharField(blank=True, max_length=255), + ), + ] diff --git a/interface/migrations/0015_resource_media_type.py b/interface/migrations/0015_resource_media_type.py new file mode 100644 index 0000000..269c3e0 --- /dev/null +++ b/interface/migrations/0015_resource_media_type.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.1 on 2020-09-09 01:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('interface', '0014_auto_20200909_1016'), + ] + + operations = [ + migrations.AddField( + model_name='resource', + name='media_type', + field=models.CharField(choices=[('audio', 'Audio'), ('video', 'Video'), ('*', 'General')], default='*', max_length=10), + ), + ] diff --git a/interface/models.py b/interface/models.py index b6f9044..2752ba8 100644 --- a/interface/models.py +++ b/interface/models.py @@ -15,6 +15,11 @@ s3client = boto3.client('s3') BUCKET = settings.AWS_BUCKET +MEDIA_TYPES = [ + ('audio', "Audio"), + ('video', "Video"), + ('*', "General"), +] def generate_code(length=9): return "".join([ random.choice('0123456789') for _ in range(length) ]) @@ -53,11 +58,21 @@ class Project(models.Model): class Resource(models.Model): project = models.ForeignKey(Project, related_name='resources', on_delete=models.CASCADE) name = models.CharField(max_length=100) - key = models.CharField(max_length=255) - + description = models.TextField(blank=True) + key = models.CharField(max_length=255, blank=True) + media_type = models.CharField(max_length=10, choices=MEDIA_TYPES, default='*') + + def key_template(self): + return "{}_${{filename}}".format(slugify(self.name)) + def presigned_url(self): + if not self.key: + return "" params = {'Bucket': BUCKET, 'Key': self.key} - return s3client.generate_presigned_url('get_object', Params=params, ExpiresIn=3600) + return s3client.generate_presigned_url('get_object', Params=params, ExpiresIn=3600*24) + + def __str__(self): + return self.name class WikiPage(models.Model): project = models.ForeignKey(Project, related_name='wiki_pages', on_delete=models.CASCADE) diff --git a/interface/static/interface/css/polyphonic.css b/interface/static/interface/css/polyphonic.css index 3c7fc93..6dc44ce 100644 --- a/interface/static/interface/css/polyphonic.css +++ b/interface/static/interface/css/polyphonic.css @@ -95,6 +95,11 @@ UL.nav-buttons > LI { margin: 2px 10px; } +.admin-actions { + text-align: right; + margin: 10px; +} + /* FORMS */ FORM { @@ -157,14 +162,14 @@ TEXTAREA { flex-direction: column; } -.list-group A { +.list-group > * { border: 1px solid var(--gray-blue); border-radius: 10px; padding: 2px 20px; margin-top: 20px; } -.list-group A:hover { +.list-group > A:hover { background-color: var(--light-blue); text-decoration: none; } @@ -211,4 +216,9 @@ TABLE.horizontal TH { TABLE.horizontal TD, TABLE.horizontal TH { padding: 5px; +} + +.resource-player { + width: 100%; + border-radius: 10px; } \ No newline at end of file diff --git a/interface/templates/base.html b/interface/templates/base.html index 62d5f13..1fe19ea 100644 --- a/interface/templates/base.html +++ b/interface/templates/base.html @@ -21,7 +21,7 @@