diff --git a/patchwork/forms.py b/patchwork/forms.py
index ed06d0d1..2948b002 100644
--- a/patchwork/forms.py
+++ b/patchwork/forms.py
@@ -224,3 +224,55 @@ def save(self, instance, commit=True):
if commit:
instance.save()
return instance
+
+
+class SeriesBulkUpdatePatchesForm(forms.Form):
+ action = 'update'
+ archived = OptionalBooleanField(
+ choices=[
+ ('*', 'no change'),
+ ('True', 'Archived'),
+ ('False', 'Unarchived'),
+ ],
+ coerce=lambda x: x == 'True',
+ empty_value='*',
+ )
+
+ def __init__(self, project, *args, **kwargs):
+ super(SeriesBulkUpdatePatchesForm, self).__init__(*args, **kwargs)
+ self.fields['delegate'] = OptionalModelChoiceField(
+ queryset=_get_delegate_qs(project=project), required=False
+ )
+ self.fields['state'] = OptionalModelChoiceField(
+ queryset=State.objects.all()
+ )
+
+ def save(self, series, request):
+ update_values = {}
+ data = self.cleaned_data
+
+ for name, obj in self.fields.items():
+ value = data[name]
+ if not obj.is_no_change(value):
+ update_values[name] = value
+
+ patches = Patch.objects.filter(series=series)
+ err = bulk_update_patches(patches, request, update_values)
+
+ return err
+
+
+def bulk_update_patches(patches, request, values_to_update):
+ errors = []
+ for patch in patches:
+ if not patch.is_editable(request.user):
+ errors.append(
+ "You don't have permissions to edit patch '%s'" % patch.name
+ )
+ continue
+
+ if len(errors) > 0:
+ return errors
+
+ patches.update(**values_to_update)
+ return errors
diff --git a/patchwork/templates/patchwork/series-detail.html b/patchwork/templates/patchwork/series-detail.html
new file mode 100644
index 00000000..720df3be
--- /dev/null
+++ b/patchwork/templates/patchwork/series-detail.html
@@ -0,0 +1,41 @@
+{% extends "base.html" %}
+
+{% load humanize %}
+{% load syntax %}
+{% load person %}
+{% load patch %}
+{% load static %}
+{% load utils %}
+
+{% block title %}{{series.name}}{% endblock %}
+
+{% block body %}
+
+
+
{{ series.name }}
+
+
+
+
+Patches:
+
+{% include "patchwork/partials/patch-list.html" %}
+
+{% endblock %}
diff --git a/patchwork/templates/patchwork/series-list.html b/patchwork/templates/patchwork/series-list.html
new file mode 100644
index 00000000..af0eedcd
--- /dev/null
+++ b/patchwork/templates/patchwork/series-list.html
@@ -0,0 +1,99 @@
+{% extends "base.html" %}
+
+{% load person %}
+{% load static %}
+
+{% block title %}{{project.name}}{% endblock %}
+{% block series_active %}active{% endblock %}
+
+{% block body %}
+
+{% load person %}
+{% load listurl %}
+{% load patch %}
+{% load project %}
+{% load static %}
+
+{% include "patchwork/partials/pagination.html" %}
+
+
+
+
+
+
+{% endblock %}
diff --git a/patchwork/templates/patchwork/submission.html b/patchwork/templates/patchwork/submission.html
index 85e7be4b..90ee22b2 100644
--- a/patchwork/templates/patchwork/submission.html
+++ b/patchwork/templates/patchwork/submission.html
@@ -20,6 +20,22 @@
{{ submission.name }}
+
+
+
+