diff --git a/wagtail/wagtailredirects/forms.py b/wagtail/wagtailredirects/forms.py index 902554377..522f9b0c7 100644 --- a/wagtail/wagtailredirects/forms.py +++ b/wagtail/wagtailredirects/forms.py @@ -1,11 +1,15 @@ from django import forms +from django.utils.translation import ugettext_lazy as _ from wagtail.wagtailadmin.widgets import AdminPageChooser -from wagtail.wagtailredirects import models +from wagtail.wagtailcore.models import Site +from wagtail.wagtailredirects.models import Redirect class RedirectForm(forms.ModelForm): + site = forms.ModelChoiceField(label=_("From site"), queryset=Site.objects.all(), required=False, empty_label=_("All sites")) + def __init__(self, *args, **kwargs): super(RedirectForm, self).__init__(*args, **kwargs) self.fields['redirect_page'].widget = AdminPageChooser() @@ -13,5 +17,5 @@ class RedirectForm(forms.ModelForm): required_css_class = "required" class Meta: - model = models.Redirect - fields = ('old_path', 'is_permanent', 'redirect_page', 'redirect_link') + model = Redirect + fields = ('old_path', 'site', 'is_permanent', 'redirect_page', 'redirect_link') diff --git a/wagtail/wagtailredirects/migrations/0003_make_site_field_editable.py b/wagtail/wagtailredirects/migrations/0003_make_site_field_editable.py new file mode 100644 index 000000000..e988b577a --- /dev/null +++ b/wagtail/wagtailredirects/migrations/0003_make_site_field_editable.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wagtailredirects', '0002_add_verbose_names'), + ] + + operations = [ + migrations.AlterField( + model_name='redirect', + name='site', + field=models.ForeignKey(null=True, to='wagtailcore.Site', verbose_name='Site', blank=True, related_name='redirects'), + ), + ] diff --git a/wagtail/wagtailredirects/models.py b/wagtail/wagtailredirects/models.py index e795297d4..9936928f1 100644 --- a/wagtail/wagtailredirects/models.py +++ b/wagtail/wagtailredirects/models.py @@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _ class Redirect(models.Model): old_path = models.CharField(verbose_name=_("Redirect from"), max_length=255, unique=True, db_index=True) - site = models.ForeignKey('wagtailcore.Site', verbose_name=_('Site'), null=True, blank=True, related_name='redirects', db_index=True, editable=False) + site = models.ForeignKey('wagtailcore.Site', verbose_name=_('Site'), null=True, blank=True, related_name='redirects', db_index=True) is_permanent = models.BooleanField(verbose_name=_("Permanent"), default=True, help_text=_("Recommended. Permanent redirects ensure search engines forget the old page (the 'Redirect from') and index the new page instead.")) redirect_page = models.ForeignKey('wagtailcore.Page', verbose_name=_("Redirect to a page"), null=True, blank=True) redirect_link = models.URLField(verbose_name=_("Redirect to any URL"), blank=True) diff --git a/wagtail/wagtailredirects/tests.py b/wagtail/wagtailredirects/tests.py index e987a2197..418cd4f30 100644 --- a/wagtail/wagtailredirects/tests.py +++ b/wagtail/wagtailredirects/tests.py @@ -172,6 +172,7 @@ class TestRedirectsAddView(TestCase, WagtailTestUtils): def test_add(self): response = self.post({ 'old_path': '/test', + 'site': '', 'is_permanent': 'on', 'redirect_link': 'http://www.test.com/', }) @@ -185,6 +186,24 @@ class TestRedirectsAddView(TestCase, WagtailTestUtils): self.assertEqual(redirects.first().redirect_link, 'http://www.test.com/') self.assertEqual(redirects.first().site, None) + def test_add_with_site(self): + localhost = Site.objects.get(hostname='localhost') + response = self.post({ + 'old_path': '/test', + 'site': localhost.id, + 'is_permanent': 'on', + 'redirect_link': 'http://www.test.com/', + }) + + # Should redirect back to index + self.assertRedirects(response, reverse('wagtailredirects:index')) + + # Check that the redirect was created + redirects = models.Redirect.objects.filter(old_path='/test') + self.assertEqual(redirects.count(), 1) + self.assertEqual(redirects.first().redirect_link, 'http://www.test.com/') + self.assertEqual(redirects.first().site, localhost) + def test_add_validation_error(self): response = self.post({ 'old_path': '', @@ -223,6 +242,7 @@ class TestRedirectsEditView(TestCase, WagtailTestUtils): response = self.post({ 'old_path': '/test', 'is_permanent': 'on', + 'site': '', 'redirect_link': 'http://www.test.com/ive-been-edited', }) @@ -233,6 +253,26 @@ class TestRedirectsEditView(TestCase, WagtailTestUtils): redirects = models.Redirect.objects.filter(old_path='/test') self.assertEqual(redirects.count(), 1) self.assertEqual(redirects.first().redirect_link, 'http://www.test.com/ive-been-edited') + self.assertEqual(redirects.first().site, None) + + def test_edit_with_site(self): + localhost = Site.objects.get(hostname='localhost') + + response = self.post({ + 'old_path': '/test', + 'is_permanent': 'on', + 'site': localhost.id, + 'redirect_link': 'http://www.test.com/ive-been-edited', + }) + + # Should redirect back to index + self.assertRedirects(response, reverse('wagtailredirects:index')) + + # Check that the redirect was edited + redirects = models.Redirect.objects.filter(old_path='/test') + self.assertEqual(redirects.count(), 1) + self.assertEqual(redirects.first().redirect_link, 'http://www.test.com/ive-been-edited') + self.assertEqual(redirects.first().site, localhost) def test_edit_validation_error(self): response = self.post({