Refactor approval queue to display last meaningful status #94
@ -6,27 +6,23 @@
|
||||
{{ extension.name }}
|
||||
</a>
|
||||
</td>
|
||||
<td>
|
||||
{% if extension.authors.count %}
|
||||
{% include "extensions/components/authors.html" %}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{% include "extensions/components/authors.html" %}</td>
|
||||
<td title="{{ extension.date_created }}">{{ extension.date_created|naturaltime_compact }}</td>
|
||||
<td class="d-flex">
|
||||
<a href="{{ extension.get_review_url }}#activity">
|
||||
<span>{{ extension.review_activity.all|length }}</span>
|
||||
<span>{{ stats.count }}</span>
|
||||
</a>
|
||||
|
||||
{% if extension.review_activity.all %}
|
||||
<a href="{{ extension.get_review_url }}#activity-{{ extension.review_activity.all.last.id }}" class="ml-3">
|
||||
<span>{{ extension.review_activity.all.last.date_created|naturaltime_compact }}</span>
|
||||
<a href="{{ extension.get_review_url }}#activity-{{ stats.last_activity.id }}" class="ml-3">
|
||||
<span>{{ stats.last_activity.date_created|naturaltime_compact }}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% include "files/components/scan_details_flag.html" with file=extension.latest_version.file %}
|
||||
</td>
|
||||
<td>
|
||||
<a href="{{ extension.get_review_url }}" class="text-decoration-none">
|
||||
{% include "common/components/status.html" with object=extension class="d-block" %}
|
||||
<div class="d-block badge badge-status-{{ stats.last_type_display|slugify }}">
|
||||
<i class="i-eye"></i>
|
||||
<span>{{ stats.last_type_display }}</span>
|
||||
</div>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -34,12 +34,10 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for extension in object_list %}
|
||||
{% if user.is_moderator %}
|
||||
{% include 'reviewers/components/review_list_item.html' %}
|
||||
{% elif extension.status_slug == 'awaiting-review' %}
|
||||
{% include 'reviewers/components/review_list_item.html' %}
|
||||
{% endif %}
|
||||
{% for stats in object_list %}
|
||||
{% with extension=stats.extension%}
|
||||
{% include 'reviewers/components/review_list_item.html' with extension=extension stats=stats %}
|
||||
{% endwith %}
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
@ -19,9 +19,39 @@ class ApprovalQueueView(ListView):
|
||||
paginate_by = 100
|
||||
|
||||
def get_queryset(self):
|
||||
return Extension.objects.exclude(status=Extension.STATUSES.APPROVED).order_by(
|
||||
'-date_created'
|
||||
qs = (
|
||||
ApprovalActivity.objects.prefetch_related(
|
||||
'extension',
|
||||
'extension__authors',
|
||||
'extension__versions',
|
||||
'extension__versions__file',
|
||||
'extension__versions__file__validation',
|
||||
)
|
||||
|
||||
.order_by('-date_created')
|
||||
.all()
|
||||
)
|
||||
by_extension = {}
|
||||
result = []
|
||||
for item in qs:
|
||||
extension = item.extension
|
||||
stats = by_extension.get(extension, None)
|
||||
if not stats:
|
||||
# this check guarantees that we add a record only once per extension,
|
||||
# and iterating over qs we get result also ordered by item.date_created
|
||||
stats = {
|
||||
'count': 0,
|
||||
'extension': extension,
|
||||
'last_activity': None,
|
||||
'last_type_display': None,
|
||||
}
|
||||
by_extension[extension] = stats
|
||||
result.append(stats)
|
||||
stats['count'] += 1
|
||||
if not stats.get('last_activity', None):
|
||||
stats['last_activity'] = item
|
||||
if not stats.get('last_type_display', None):
|
||||
stats['last_type_display'] = item.get_type_display
|
||||
return result
|
||||
|
||||
template_name = 'reviewers/extensions_review_list.html'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user
For already existing extensions without activity records
ApprovalActivity
will have to be created (with theExtension.date_status_changed
dates asdate_created
) to ensure they still show up in the approval queue.running in shell