From dcd6c9f5c96148f00dbcc45591db6148dbc836aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C4=8Ciha=C5=99?= Date: Tue, 23 Apr 2024 13:47:49 +0200 Subject: [PATCH] dashboard: added list of managed projects Fixes #8631 --- docs/changes.rst | 1 + .../0009_alter_profile_dashboard_view.py | 31 +++++++++++++++++++ weblate/accounts/models.py | 3 ++ weblate/templates/dashboard/user.html | 12 +++++++ weblate/trans/views/dashboard.py | 5 +++ 5 files changed, 52 insertions(+) create mode 100644 weblate/accounts/migrations/0009_alter_profile_dashboard_view.py diff --git a/docs/changes.rst b/docs/changes.rst index 898c499e8de3..d6a3bff5a169 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -10,6 +10,7 @@ Not yet released. * Display more details on source string change in history. * :ref:`mt-microsoft-translator` now supports using custom translators. * Improved error handling in :ref:`invite-user`. +* Added list of managed projects to the dashboard view. **Bug fixes** diff --git a/weblate/accounts/migrations/0009_alter_profile_dashboard_view.py b/weblate/accounts/migrations/0009_alter_profile_dashboard_view.py new file mode 100644 index 000000000000..57fbdd9f4cff --- /dev/null +++ b/weblate/accounts/migrations/0009_alter_profile_dashboard_view.py @@ -0,0 +1,31 @@ +# Copyright © Michal Čihař +# +# SPDX-License-Identifier: GPL-3.0-or-later + +# Generated by Django 5.0.3 on 2024-04-23 11:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("accounts", "0008_alter_auditlog_activity"), + ] + + operations = [ + migrations.AlterField( + model_name="profile", + name="dashboard_view", + field=models.IntegerField( + choices=[ + (1, "Watched translations"), + (6, "Component lists"), + (4, "Component list"), + (5, "Suggested translations"), + (7, "Managed projects"), + ], + default=1, + verbose_name="Default dashboard view", + ), + ), + ] diff --git a/weblate/accounts/models.py b/weblate/accounts/models.py index 7492f89b5bf1..045e36cb20fa 100644 --- a/weblate/accounts/models.py +++ b/weblate/accounts/models.py @@ -510,12 +510,14 @@ class Profile(models.Model): DASHBOARD_COMPONENT_LIST = 4 DASHBOARD_SUGGESTIONS = 5 DASHBOARD_COMPONENT_LISTS = 6 + DASHBOARD_MANAGED = 7 DASHBOARD_CHOICES = ( (DASHBOARD_WATCHED, gettext_lazy("Watched translations")), (DASHBOARD_COMPONENT_LISTS, gettext_lazy("Component lists")), (DASHBOARD_COMPONENT_LIST, gettext_lazy("Component list")), (DASHBOARD_SUGGESTIONS, gettext_lazy("Suggested translations")), + (DASHBOARD_MANAGED, gettext_lazy("Managed projects")), ) DASHBOARD_SLUGS = { @@ -523,6 +525,7 @@ class Profile(models.Model): DASHBOARD_COMPONENT_LIST: "list", DASHBOARD_SUGGESTIONS: "suggestions", DASHBOARD_COMPONENT_LISTS: "componentlists", + DASHBOARD_MANAGED: "managed", } dashboard_view = models.IntegerField( diff --git a/weblate/templates/dashboard/user.html b/weblate/templates/dashboard/user.html index 8d3a63ed7a7f..89d3eec69050 100644 --- a/weblate/templates/dashboard/user.html +++ b/weblate/templates/dashboard/user.html @@ -21,6 +21,9 @@
  • {% trans "Component lists" %} {{ all_componentlists|length }}
  • {% endif %}
  • {% trans "Suggested translations" %} {{ suggestions|length }}
  • +{% if owned_projects %} +
  • {% trans "Managed projects" %} {{ all_owned_projects|length }}
  • +{% endif %} {% for componentlist in componentlists %}
  • {{ componentlist.name }} {{ componentlist.translations|length }}
  • {% endfor %} @@ -60,6 +63,15 @@ {% endif %} +{% if owned_projects %} +
    +{% include "snippets/list-objects.html" with objects=owned_projects label=_("Project") %} +{% if all_owned_projects|length > 10 %} + {% trans "Browse all managed projects" %} +{% endif %} +
    +{% endif %} + {# Suggested translations #}
    {% if suggestions %} diff --git a/weblate/trans/views/dashboard.py b/weblate/trans/views/dashboard.py index 774b5193f814..325090a3c3ce 100644 --- a/weblate/trans/views/dashboard.py +++ b/weblate/trans/views/dashboard.py @@ -263,6 +263,9 @@ def dashboard_user(request: AuthenticatedHttpRequest): usersubscriptions = get_paginator(request, usersubscriptions) usersubscriptions = translation_prefetch_tasks(usersubscriptions) + owned = user.owned_projects.order() + else: + owned = Project.objects.none() return render( request, @@ -282,6 +285,8 @@ def dashboard_user(request: AuthenticatedHttpRequest): ), "active_tab_slug": active_tab_slug, "reports_form": ReportsForm({}), + "all_owned_projects": owned, + "owned_projects": prefetch_project_flags(prefetch_stats(owned[:10])), }, )