diff --git a/wagtail/wagtailadmin/forms.py b/wagtail/wagtailadmin/forms.py
index cc921defb..4cd689427 100644
--- a/wagtail/wagtailadmin/forms.py
+++ b/wagtail/wagtailadmin/forms.py
@@ -21,7 +21,9 @@ from taggit.managers import TaggableManager
from wagtail.wagtailadmin import widgets
from wagtail.wagtailcore.models import (
- Collection, GroupCollectionPermission, Page, PageViewRestriction
+ BaseViewRestriction,
+ Collection, CollectionViewRestriction, GroupCollectionPermission,
+ Page, PageViewRestriction
)
@@ -192,29 +194,43 @@ class CopyForm(forms.Form):
return cleaned_data
-class PageViewRestrictionForm(forms.ModelForm):
+class BaseViewRestrictionForm(forms.ModelForm):
restriction_type = forms.ChoiceField(
- label=ugettext_lazy("Visibility"), choices=PageViewRestriction.RESTRICTION_CHOICES,
+ label=ugettext_lazy("Visibility"), choices=BaseViewRestriction.RESTRICTION_CHOICES,
widget=forms.RadioSelect)
def __init__(self, *args, **kwargs):
- super(PageViewRestrictionForm, self).__init__(*args, **kwargs)
+ super(BaseViewRestrictionForm, self).__init__(*args, **kwargs)
self.fields['groups'].widget = forms.CheckboxSelectMultiple()
self.fields['groups'].queryset = Group.objects.all()
def clean_password(self):
password = self.cleaned_data.get('password')
- if self.cleaned_data.get('restriction_type') == PageViewRestriction.PASSWORD and not password:
+ if self.cleaned_data.get('restriction_type') == BaseViewRestriction.PASSWORD and not password:
raise forms.ValidationError(_("This field is required."), code='invalid')
return password
def clean_groups(self):
groups = self.cleaned_data.get('groups')
- if self.cleaned_data.get('restriction_type') == PageViewRestriction.GROUPS and not groups:
+ if self.cleaned_data.get('restriction_type') == BaseViewRestriction.GROUPS and not groups:
raise forms.ValidationError(_("Please select at least one group."), code='invalid')
return groups
+ class Meta:
+ model = BaseViewRestriction
+ fields = ('restriction_type', 'password', 'groups')
+
+
+class CollectionViewRestrictionForm(BaseViewRestrictionForm):
+
+ class Meta:
+ model = CollectionViewRestriction
+ fields = ('restriction_type', 'password', 'groups')
+
+
+class PageViewRestrictionForm(BaseViewRestrictionForm):
+
class Meta:
model = PageViewRestriction
fields = ('restriction_type', 'password', 'groups')
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/ancestor_privacy.html b/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/ancestor_privacy.html
new file mode 100644
index 000000000..0e9a26a76
--- /dev/null
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/ancestor_privacy.html
@@ -0,0 +1,8 @@
+{% load i18n %}
+{% trans "Collection privacy" as title_str %}
+{% include "wagtailadmin/shared/header.html" with title=title_str icon="no-view" %}
+
+
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy.html b/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy.html
new file mode 100644
index 000000000..4c0b6fb15
--- /dev/null
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy.html
@@ -0,0 +1,19 @@
+{% load i18n %}
+{% trans "Collection privacy" as title_str %}
+{% include "wagtailadmin/shared/header.html" with title=title_str icon="no-view" %}
+
+
+
{% trans "Privacy settings determine who is able to view documents in this collection." %}
+
+
+
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy.js b/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy.js
new file mode 100644
index 000000000..045c31b4d
--- /dev/null
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy.js
@@ -0,0 +1,27 @@
+function(modal) {
+ $('form', modal.body).submit(function() {
+ modal.postForm(this.action, $(this).serialize());
+ return false;
+ });
+
+ var restrictionTypePasswordField = $("input[name='restriction_type'][value='password']", modal.body);
+ var restrictionTypeGroupsField = $("input[name='restriction_type'][value='groups']", modal.body);
+ var passwordField = $(".password-field", modal.body);
+ var groupsFields = $('#groups-fields', modal.body);
+
+ function refreshFormFields() {
+ if (restrictionTypePasswordField.is(':checked')) {
+ passwordField.show();
+ groupsFields.hide();
+ } else if (restrictionTypeGroupsField.is(':checked')){
+ passwordField.hide();
+ groupsFields.show();
+ } else {
+ passwordField.hide();
+ groupsFields.hide();
+ }
+ }
+ refreshFormFields();
+
+ $("input[name='restriction_type']", modal.body).change(refreshFormFields);
+}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy_done.js b/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy_done.js
new file mode 100644
index 000000000..dafbc7b36
--- /dev/null
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/collection_privacy/set_privacy_done.js
@@ -0,0 +1,4 @@
+function(modal) {
+ modal.respond('setPermission', {% if is_public %}true{% else %}false{% endif %});
+ modal.close();
+}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/collections/_privacy_switch.html b/wagtail/wagtailadmin/templates/wagtailadmin/collections/_privacy_switch.html
new file mode 100644
index 000000000..e5ad100ba
--- /dev/null
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/collections/_privacy_switch.html
@@ -0,0 +1,14 @@
+{% load i18n wagtailadmin_tags %}
+
+{% test_collection_is_public collection as is_public %}
+
+{% if not collection.is_root %}
+
+{% endif %}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/collections/edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/collections/edit.html
new file mode 100644
index 000000000..ed2086681
--- /dev/null
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/collections/edit.html
@@ -0,0 +1,12 @@
+{% extends "wagtailadmin/generic/edit.html" %}
+{% load static %}
+
+{% block before_form %}
+ {% include "wagtailadmin/collections/_privacy_switch.html" with collection=object collection_perms=collection_perms only %}
+{% endblock %}
+
+{% block extra_js %}
+ {{ block.super }}
+
+
+{% endblock %}
diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/generic/edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/generic/edit.html
index 3de5b4e51..1a64ee314 100644
--- a/wagtail/wagtailadmin/templates/wagtailadmin/generic/edit.html
+++ b/wagtail/wagtailadmin/templates/wagtailadmin/generic/edit.html
@@ -8,6 +8,7 @@
{% include "wagtailadmin/shared/header.html" with title=view.page_title subtitle=view.get_page_subtitle icon=view.header_icon %}
+ {% block before_form %}{% endblock %}