Skip to content

Commit

Permalink
[#1631] Add activities for new groups
Browse files Browse the repository at this point in the history
  • Loading branch information
Sean Hammond committed Jan 12, 2012
1 parent eef8fb1 commit 2e0b88f
Show file tree
Hide file tree
Showing 5 changed files with 74 additions and 2 deletions.
6 changes: 5 additions & 1 deletion ckan/lib/dictization/model_save.py
Expand Up @@ -453,8 +453,12 @@ def activity_dict_save(activity_dict, context):
object_id = activity_dict['object_id']
revision_id = activity_dict['revision_id']
activity_type = activity_dict['activity_type']
if activity_dict.has_key('data'):
data = activity_dict['data']
else:
data = None
activity_obj = model.Activity(user_id, object_id, revision_id,
activity_type)
activity_type, data)
session.add(activity_obj)

# TODO: Handle activity details.
Expand Down
9 changes: 9 additions & 0 deletions ckan/logic/action/create.py
Expand Up @@ -173,6 +173,15 @@ def group_create(context, data_dict):
model.Session.flush()
for item in PluginImplementations(IGroupController):
item.create(group)

activity_dict = {
'user_id': model.User.by_name(user.decode('utf8')).id,
'object_id': group.id,
'activity_type': 'new group',
}
activity_dict['data'] = {'group': group_dictize(group, context)}
activity_create(context, activity_dict)

if not context.get('defer_commit'):
model.repo.commit()
context["group"] = group
Expand Down
5 changes: 5 additions & 0 deletions ckan/logic/action/get.py
Expand Up @@ -915,13 +915,18 @@ def render_changed_user_activity(context, activity):
return render('activity_streams/changed_user.html',
extra_vars = {'activity': activity})

def render_new_group_activity(context, activity):
return render('activity_streams/new_group.html',
extra_vars = {'activity': activity})

# Global dictionary mapping activity types to functions that render activity
# dicts to HTML snippets for including in HTML pages.
activity_renderers = {
'new package' : render_new_package_activity,
'changed package' : render_changed_package_activity,
'new user' : render_new_user_activity,
'changed user' : render_changed_user_activity,
'new group' : render_new_group_activity,
}

def user_activity_list_html(context, data_dict):
Expand Down
20 changes: 20 additions & 0 deletions ckan/templates/activity_streams/new_group.html
@@ -0,0 +1,20 @@
<html
xmlns="http://www.w3.org/1999/xhtml"
xmlns:i18n="http://genshi.edgewall.org/i18n"
xmlns:py="http://genshi.edgewall.org/"
xmlns:xi="http://www.w3.org/2001/XInclude"
py:strip=""
>
<xi:include href="../_util.html" />
<div>
<div style="font-weight:bold;">
${h.linked_user(activity.user_id)}
<span style="background:yellow;">created</span>
the group
<a href="${h.url_for(controller='group', action='read', id=activity.data.group.name)}">
${activity.data.group.display_name}
</a>
${h.render_datetime(activity.timestamp, '%B %d %Y')}
</div>
</div>
</html>
36 changes: 35 additions & 1 deletion ckan/tests/models/test_activity.py
Expand Up @@ -4,7 +4,7 @@

import ckan
import ckan.model as model
from ckan.logic.action.create import package_create, user_create
from ckan.logic.action.create import package_create, user_create, group_create
from ckan.logic.action.update import package_update, resource_update
from ckan.logic.action.update import user_update
from ckan.logic.action.delete import package_delete
Expand Down Expand Up @@ -683,3 +683,37 @@ def test_update_user(self):
"""
for user in model.Session.query(model.User).all():
self._update_user(user)

def test_create_group(self):

user = self.normal_user

before = record_details(user.id)

# Create a new package.
context = {'model': model, 'session': model.Session, 'user': user.name}
request_data = {'name': 'a-new-group', 'title': 'A New Group'}
group_created = group_create(context, request_data)

after = record_details(user.id)

# Find the new activity.
new_activities = find_new_activities(before, after)
assert len(new_activities) == 1, ("There should be 1 new activity in "
"the user's activity stream, but found %i" % len(new_activities))
activity = new_activities[0]

# Check that the new activity has the right attributes.
assert activity['object_id'] == group_created['id'], \
str(activity['object_id'])
assert activity['user_id'] == user.id, str(activity['user_id'])
assert activity['activity_type'] == 'new group', \
str(activity['activity_type'])
if not activity.has_key('id'):
assert False, "activity object should have an id value"
# TODO: Test for the _correct_ revision_id value.
if not activity.has_key('revision_id'):
assert False, "activity object should have a revision_id value"
timestamp = datetime_from_string(activity['timestamp'])
assert timestamp >= before['time'] and timestamp <= after['time'], \
str(activity['timestamp'])

0 comments on commit 2e0b88f

Please sign in to comment.