Added activity list on task view

This commit is contained in:
2016-10-12 16:58:42 +02:00
parent 76a4eac145
commit d0bb5aa598
4 changed files with 76 additions and 1 deletions

View File

@@ -1,12 +1,14 @@
"""Task management.""" """Task management."""
import attr import attr
import flask
import flask_login import flask_login
import pillarsdk import pillarsdk
from pillar import attrs_extra from pillar import attrs_extra
from pillar.web.system_util import pillar_api from pillar.web.system_util import pillar_api
from attract import subquery
from attract.node_types.task import node_type_task from attract.node_types.task import node_type_task
@@ -127,6 +129,29 @@ class TaskManager(object):
}}, api=api) }}, api=api)
return tasks return tasks
def activities_for_task(self, task_id, max_results=20, page=1):
"""Returns a page of activities for the given task.
:returns: {'_items': [task, task, ...], '_meta': {Eve metadata}}
"""
api = pillar_api()
activities = pillarsdk.Activity.all({
'where': {
'object_type': 'node',
'object': task_id,
},
'sort': [('_created', -1)],
'max_results': max_results,
'page': page,
}, api=api)
# Fetch more info for each activity.
for act in activities['_items']:
act.actor_user = subquery.get_user_info(act.actor_user)
return activities
def setup_app(app): def setup_app(app):
from . import eve_hooks from . import eve_hooks

View File

@@ -112,3 +112,16 @@ def create_task(project):
resp.status_code = 201 resp.status_code = 201
return flask.make_response(flask.jsonify({'task_id': task['_id']}), 201) return flask.make_response(flask.jsonify({'task_id': task['_id']}), 201)
@perproject_blueprint.route('/<task_id>/activities')
@attract_project_view()
def activities(project, task_id):
if not request.is_xhr:
return flask.redirect(flask.url_for('.view_task',
project_url=project.url,
task_id=task_id))
acts = current_attract.task_manager.activities_for_task(task_id)
return flask.render_template('attract/tasks/view_activities_embed.html',
activities=acts)

View File

@@ -0,0 +1,15 @@
.d-activity
| {% if activities['_meta']['total'] %}
h3 Activity
ul
| {% for act in activities['_items'] %}
li
span.date {{ act._created | pretty_date_time }}:&nbsp;
| {{ act['actor_user']['full_name'] }} {{ act.verb }}
| {% endfor %}
| {% else %}
p.
No activity detected, which is strange, as we also consider creation
to be an activity.
| {% endif %}

View File

@@ -102,12 +102,13 @@
| {% endif %} | {% endif %}
#item-view-feed #item-view-feed
| Task updated {{ task._updated | pretty_date }} #activities
| {% if config.DEBUG %} | {% if config.DEBUG %}
pre. pre.
{{ task.to_dict() | pprint }} {{ task.to_dict() | pprint }}
| {% endif %} | {% endif %}
script. script.
$("#assignees").select2(); $("#assignees").select2();
@@ -116,3 +117,24 @@ script.
} }
new Clipboard('.copy-to-clipboard'); new Clipboard('.copy-to-clipboard');
var url = "{{ url_for('.activities', project_url=project.url, task_id=task['_id']) }}";
$.get(url)
.done(function(data) {
if(console) console.log('Activities for task loaded OK');
$('#activities').html(data);
})
.fail(function(xhr) {
if (console) {
console.log('Error fetching activities');
console.log('XHR:', xhr);
}
$('#status-bar').text('Opening task activity log failed.');
if (xhr.status) {
$('#activities').html(xhr.responseText);
} else {
$('#activities').html('<p class="text-danger">Opening activity log failed. There possibly was ' +
'an error connecting to the server. Please check your network connection and ' +
'try again.</p>');
}
});