Basic email template for notifications #96

Merged
Anna Sirota merged 14 commits from notification-templates into main 2024-05-02 14:04:24 +02:00
6 changed files with 34 additions and 29 deletions
Showing only changes of commit 0ad1f72fb3 - Show all commits

View File

@ -328,6 +328,8 @@
a
color: var(--color-text)
// TODO: @web-assets check arbitrary style table link display specificity
display: inline !important
+padding(1, y)
padding-inline: 0 !important

View File

@ -27,6 +27,16 @@
<a href="{{ extension.get_absolute_url }}"><strong>{{ extension.name }}</strong></a>
</p>
<hr>
{% if not extension and drafts %}
<div>
<span class="text-warning">You have unfinished drafts:</span>
<ul>
{% for d in drafts %}
<li><a href="{{ d.get_draft_url }}">{{ d }}</a></li>
{% endfor %}
</ul>
</div>
{% endif %}
<p>Please make sure that:</p>
<ul>
<li><strong>You are the creator or maintainer</strong> of this extension.</li>

View File

@ -460,3 +460,15 @@ class NewVersionTest(TestCase):
).count(),
1,
)
class DraftsWarningTest(TestCase):
fixtures = ['licenses']
def test_page_contains_warning(self):
version = create_version(extension__extension_id='draft_warning')
extension = version.extension
self.assertEqual(extension.status, Extension.STATUSES.INCOMPLETE)
self.client.force_login(extension.authors.all()[0])
response = self.client.get(reverse_lazy('extensions:submit'))
self.assertContains(response, extension.get_draft_url())

View File

@ -14,7 +14,6 @@ from .mixins import (
OwnsFileMixin,
MaintainedExtensionMixin,
DraftVersionMixin,
DraftMixin,
)
from extensions.forms import (
EditPreviewFormSet,
@ -104,7 +103,6 @@ class UpdateExtensionView(
LoginRequiredMixin,
MaintainedExtensionMixin,
SuccessMessageMixin,
DraftMixin,
UpdateView,
):
model = Extension

View File

@ -1,5 +1,5 @@
from django.contrib.auth.mixins import UserPassesTestMixin
from django.shortcuts import get_object_or_404, redirect
from django.shortcuts import get_object_or_404
from extensions.models import Extension
from files.models import File
@ -60,27 +60,3 @@ class DraftVersionMixin:
def dispatch(self, *args, **kwargs):
self.version = self.extension.versions.first()
return super().dispatch(*args, **kwargs)
class DraftMixin:
"""If the extension is incomplete, returns the FinalizeDraftView"""
def dispatch(self, request, *args, **kwargs):
if (
'slug' in kwargs
and Extension.objects.filter(
slug=kwargs['slug'], status=Extension.STATUSES.APPROVED
).first()
):
return super().dispatch(request, *args, **kwargs)
extension = (
Extension.objects.listed_or_authored_by(user_id=self.request.user.pk)
.filter(status=Extension.STATUSES.INCOMPLETE)
.first()
)
if not extension:
return super().dispatch(request, *args, **kwargs)
return redirect(extension.get_draft_url())

View File

@ -4,7 +4,6 @@ from django.contrib.auth.mixins import LoginRequiredMixin
from django.db import transaction
from django.views.generic.edit import CreateView
from .mixins import DraftMixin
from extensions.models import Version, Extension
from files.forms import FileForm
from files.models import File
@ -12,11 +11,19 @@ from files.models import File
logger = logging.getLogger(__name__)
class UploadFileView(LoginRequiredMixin, DraftMixin, CreateView):
class UploadFileView(LoginRequiredMixin, CreateView):
model = File
template_name = 'extensions/submit.html'
form_class = FileForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
drafts = Extension.objects.authored_by(user_id=self.request.user.pk).filter(
status=Extension.STATUSES.INCOMPLETE
)
context['drafts'] = drafts
return context
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs['request'] = self.request