Added activity list on task view
This commit is contained in:
@@ -1,12 +1,14 @@
|
||||
"""Task management."""
|
||||
|
||||
import attr
|
||||
import flask
|
||||
import flask_login
|
||||
|
||||
import pillarsdk
|
||||
from pillar import attrs_extra
|
||||
from pillar.web.system_util import pillar_api
|
||||
|
||||
from attract import subquery
|
||||
from attract.node_types.task import node_type_task
|
||||
|
||||
|
||||
@@ -127,6 +129,29 @@ class TaskManager(object):
|
||||
}}, api=api)
|
||||
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):
|
||||
from . import eve_hooks
|
||||
|
@@ -112,3 +112,16 @@ def create_task(project):
|
||||
resp.status_code = 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)
|
||||
|
15
src/templates/attract/tasks/view_activities_embed.jade
Normal file
15
src/templates/attract/tasks/view_activities_embed.jade
Normal 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 }}:
|
||||
| {{ 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 %}
|
@@ -102,12 +102,13 @@
|
||||
| {% endif %}
|
||||
|
||||
#item-view-feed
|
||||
| Task updated {{ task._updated | pretty_date }}
|
||||
#activities
|
||||
| {% if config.DEBUG %}
|
||||
pre.
|
||||
{{ task.to_dict() | pprint }}
|
||||
| {% endif %}
|
||||
|
||||
|
||||
script.
|
||||
$("#assignees").select2();
|
||||
|
||||
@@ -116,3 +117,24 @@ script.
|
||||
}
|
||||
|
||||
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>');
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user