kopia lustrzana https://github.com/wagtail/wagtail
Initial work on workflow report
rodzic
c59cae51ee
commit
3ab3f5d171
|
@ -0,0 +1,108 @@
|
|||
{% extends "wagtailadmin/base.html" %}
|
||||
{% load i18n l10n wagtailadmin_tags wagtailui_tags %}
|
||||
|
||||
{% block titletag %}{% trans "Workflows" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<header role="banner">
|
||||
<div class="row nice-padding">
|
||||
<div class="left">
|
||||
<div class="col header-title">
|
||||
<h1 class="icon icon-placeholder">{% trans "Workflows" %}</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="addbutton">
|
||||
<a href="{% url 'wagtailadmin_reports:workflow_tasks' %}" class="button">{% trans "By Task" %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="nice-padding">
|
||||
{% if object_list %}
|
||||
<table class="listing">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
{% trans 'Workflow' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Page' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Status' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Tasks' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Requested by' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Started at' %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for workflow_state in object_list %}
|
||||
<tr>
|
||||
<td>
|
||||
<b>{{ workflow_state.workflow }}</b>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'wagtailadmin_pages:edit' workflow_state.page.id %}">
|
||||
{{ workflow_state.page.get_admin_display_title }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="{% url 'wagtailadmin_pages:workflow_history_detail' workflow_state.page.id workflow_state.id %}" class="status-tag primary">
|
||||
{{ workflow_state.get_status_display }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
<h2>{{ workflow_name }}</h2>
|
||||
{% trans 'Approved task' as approved_title %}
|
||||
{% trans 'Incomplete task' as incomplete_title %}
|
||||
{% for task in workflow_state.all_tasks_with_status %}
|
||||
<span data-wagtail-tooltip="{{ task.name }}: {{ task.status_display }}">
|
||||
{% if task.status == 'approved' %}
|
||||
{% wagtail_icon name="success" title=approved_title %}
|
||||
{% else %}
|
||||
{% wagtail_icon name="radio-empty" title=incomplete_title %}
|
||||
{% endif %}
|
||||
</span>
|
||||
{% endfor %}
|
||||
</td>
|
||||
<td>{{ workflow_state.requested_by }}</td>
|
||||
<td>{{ workflow_state.created_at }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% else %}
|
||||
<p>{% trans "No pages have been submitted for moderation yet" %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block extra_js %}
|
||||
{{ block.super }}
|
||||
|
||||
{# load editor js to get tooltips #}
|
||||
{% include "wagtailadmin/pages/_editor_js.html" %}
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$('[data-wagtail-tooltip]').tooltip({
|
||||
animation: false,
|
||||
title: function() {
|
||||
return $(this).attr('data-wagtail-tooltip');
|
||||
},
|
||||
trigger: 'hover',
|
||||
placement: 'bottom',
|
||||
});
|
||||
})
|
||||
</script>
|
||||
{% endblock %}
|
|
@ -0,0 +1,74 @@
|
|||
{% extends "wagtailadmin/base.html" %}
|
||||
{% load i18n l10n wagtailadmin_tags wagtailui_tags %}
|
||||
|
||||
{% block titletag %}{% trans "Workflows" %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% trans "Workflows" as title_str %}
|
||||
|
||||
<header role="banner">
|
||||
<div class="row nice-padding">
|
||||
<div class="left">
|
||||
<div class="col header-title">
|
||||
<h1 class="icon icon-placeholder">Workflows</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="addbutton">
|
||||
<a href="{% url 'wagtailadmin_reports:workflow' %}" class="button">By Workflow</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="nice-padding">
|
||||
{% if object_list %}
|
||||
<table class="listing">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
{% trans 'Task' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Page' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Status' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Started at' %}
|
||||
</th>
|
||||
<th>
|
||||
{% trans 'Completed at' %}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for task_state in object_list %}
|
||||
<tr>
|
||||
<td>
|
||||
<b>{{ task_state.task }}</b>
|
||||
</td>
|
||||
<td>
|
||||
{% with task_state.workflow_state.page as page %}
|
||||
<a href="{% url 'wagtailadmin_pages:edit' page.id %}">
|
||||
{{ page.get_admin_display_title }}
|
||||
</a>
|
||||
{% endwith %}
|
||||
</td>
|
||||
<td>
|
||||
<div class="status-tag primary">
|
||||
{{ task_state.get_status_display }}
|
||||
</div>
|
||||
</td>
|
||||
<td>{{ task_state.started_at }}</td>
|
||||
<td>{{ task_state.finished_at }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
{% else %}
|
||||
<p>{% blocktrans %}No pages have been submitted for moderation yet{% endblocktrans %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -4,5 +4,7 @@ from wagtail.admin.views import reports
|
|||
|
||||
app_name = 'wagtailadmin_reports'
|
||||
urlpatterns = [
|
||||
path('locked/', reports.LockedPagesView.as_view(), name='locked_pages')
|
||||
path('locked/', reports.LockedPagesView.as_view(), name='locked_pages'),
|
||||
path('workflow/', reports.WorkflowView.as_view(), name='workflow'),
|
||||
path('workflow/tasks/', reports.WorkflowTasksView.as_view(), name='workflow_tasks'),
|
||||
]
|
||||
|
|
|
@ -12,7 +12,7 @@ from xlsxwriter.workbook import Workbook
|
|||
|
||||
from wagtail.admin.auth import permission_denied
|
||||
from wagtail.admin.filters import LockedPagesReportFilterSet
|
||||
from wagtail.core.models import Page, UserPagePermissionsProxy
|
||||
from wagtail.core.models import Page, TaskState, UserPagePermissionsProxy, WorkflowState
|
||||
|
||||
|
||||
class Echo:
|
||||
|
@ -271,3 +271,23 @@ class LockedPagesView(PageReportView):
|
|||
if not UserPagePermissionsProxy(request.user).can_remove_locks():
|
||||
return permission_denied(request)
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
|
||||
class WorkflowView(ReportView):
|
||||
template_name = 'wagtailadmin/reports/workflow.html'
|
||||
title = _('Workflow')
|
||||
header_icon = 'placeholder'
|
||||
|
||||
def get_queryset(self):
|
||||
pages = UserPagePermissionsProxy(self.request.user).editable_pages()
|
||||
return WorkflowState.objects.filter(page__in=pages)
|
||||
|
||||
|
||||
class WorkflowTasksView(ReportView):
|
||||
template_name = 'wagtailadmin/reports/workflow_tasks.html'
|
||||
title = _('Workflow')
|
||||
header_icon = 'placeholder'
|
||||
|
||||
def get_queryset(self):
|
||||
pages = UserPagePermissionsProxy(self.request.user).editable_pages()
|
||||
return TaskState.objects.filter(workflow_state__page__in=pages)
|
||||
|
|
|
@ -648,11 +648,21 @@ class LockedPagesMenuItem(MenuItem):
|
|||
return UserPagePermissionsProxy(request.user).can_remove_locks()
|
||||
|
||||
|
||||
class WorkflowReportMenuItem(MenuItem):
|
||||
def is_shown(self, request):
|
||||
return True
|
||||
|
||||
|
||||
@hooks.register('register_reports_menu_item')
|
||||
def register_locked_pages_menu_item():
|
||||
return LockedPagesMenuItem(_('Locked Pages'), reverse('wagtailadmin_reports:locked_pages'), classnames='icon icon-locked', order=700)
|
||||
|
||||
|
||||
@hooks.register('register_reports_menu_item')
|
||||
def register_workflow_report_menu_item():
|
||||
return WorkflowReportMenuItem(_('Workflows'), reverse('wagtailadmin_reports:workflow'), classnames='icon icon-placeholder', order=800)
|
||||
|
||||
|
||||
@hooks.register('register_admin_menu_item')
|
||||
def register_reports_menu():
|
||||
return ReportsMenuItem(
|
||||
|
|
Ładowanie…
Reference in New Issue