diff --git a/ckan/logic/action/get.py b/ckan/logic/action/get.py index 6febd0f7c7f..fbab846d930 100644 --- a/ckan/logic/action/get.py +++ b/ckan/logic/action/get.py @@ -939,10 +939,26 @@ def render_removed_tag_activity(context, activity, detail): return render('activity_streams/removed_tag.html', extra_vars = {'activity': activity, 'detail': detail}) +def render_new_package_extra_activity(context, activity, detail): + return render('activity_streams/new_package_extra.html', + extra_vars = {'activity': activity, 'detail': detail}) + +def render_changed_package_extra_activity(context, activity, detail): + return render('activity_streams/changed_package_extra.html', + extra_vars = {'activity': activity, 'detail': detail}) + +def render_deleted_package_extra_activity(context, activity, detail): + return render('activity_streams/deleted_package_extra.html', + extra_vars = {'activity': activity, 'detail': detail}) + def render_changed_package_activity(context, activity): details = activity_detail_list(context=context, data_dict={'id': activity['id']}) + if len(details) == 1: + # If an activity has only one activity detail we try to find an + # activity detail renderer to use instead of rendering the normal + # 'changed package' template. detail = details[0] activity_detail_renderers = { 'Resource': { @@ -954,6 +970,11 @@ def render_changed_package_activity(context, activity): 'added': render_added_tag_activity, 'removed': render_removed_tag_activity, }, + 'PackageExtra': { + 'new': render_new_package_extra_activity, + 'changed': render_changed_package_extra_activity, + 'deleted': render_deleted_package_extra_activity + }, } object_type = detail['object_type'] if activity_detail_renderers.has_key(object_type): @@ -961,7 +982,7 @@ def render_changed_package_activity(context, activity): if activity_detail_renderers[object_type].has_key(activity_type): renderer = activity_detail_renderers[object_type][activity_type] return renderer(context, activity, detail) - + return render('activity_streams/changed_package.html', extra_vars = {'activity': activity}) @@ -1005,7 +1026,8 @@ def _activity_list_to_html(context, activity_stream): if not activity_renderers.has_key(activity_type): raise NotImplementedError, ("No activity renderer for activity " "type '%s'" % str(activity_type)) - html.append(activity_renderers[activity_type](context, activity)) + activity_html = activity_renderers[activity_type](context, activity) + html.append(activity_html) return literal('\n'.join(html)) def user_activity_list_html(context, data_dict): diff --git a/ckan/model/package_extra.py b/ckan/model/package_extra.py index e0774a82b1a..fcdcbda6dad 100644 --- a/ckan/model/package_extra.py +++ b/ckan/model/package_extra.py @@ -28,6 +28,23 @@ class PackageExtra(vdm.sqlalchemy.RevisionedObjectMixin, def related_packages(self): return [self.package] + def activity_stream_detail(self, activity_id, activity_type): + import ckan.model as model + import ckan.model.activity as activity + import ckan.lib.dictization + + # Handle 'deleted' extras. + # When the user marks an extra as deleted this comes through here as a + # 'changed' extra. We detect this and change it to a 'deleted' + # activity. + if activity_type == 'changed' and self.state == u'deleted': + activity_type = 'deleted' + + data_dict = ckan.lib.dictization.table_dictize(self, + context={'model': model}) + return activity.ActivityDetail(activity_id, self.id, u"PackageExtra", + activity_type, {'package_extra': data_dict}) + mapper(PackageExtra, package_extra_table, properties={ 'package': orm.relation(Package, backref=orm.backref('_extras', diff --git a/ckan/templates/activity_streams/changed_package_extra.html b/ckan/templates/activity_streams/changed_package_extra.html new file mode 100644 index 00000000000..5f1fafe5e8c --- /dev/null +++ b/ckan/templates/activity_streams/changed_package_extra.html @@ -0,0 +1,21 @@ + + +
+
+ ${h.linked_user(activity.user_id)} + changed + the extra "${detail.data.package_extra.key}" + in the dataset ${package_summary(activity.data.package)}
+ ${h.render_datetime(activity.timestamp, '%B %d %Y')} +
+
+ ${h.markdown_extract(activity.data.package.notes)} +
+
+ diff --git a/ckan/templates/activity_streams/deleted_package_extra.html b/ckan/templates/activity_streams/deleted_package_extra.html new file mode 100644 index 00000000000..433a0254500 --- /dev/null +++ b/ckan/templates/activity_streams/deleted_package_extra.html @@ -0,0 +1,21 @@ + + +
+
+ ${h.linked_user(activity.user_id)} + deleted + the extra "${detail.data.package_extra.key}" + from the dataset ${package_summary(activity.data.package)}
+ ${h.render_datetime(activity.timestamp, '%B %d %Y')} +
+
+ ${h.markdown_extract(activity.data.package.notes)} +
+
+ diff --git a/ckan/templates/activity_streams/new_package_extra.html b/ckan/templates/activity_streams/new_package_extra.html new file mode 100644 index 00000000000..2dba8215343 --- /dev/null +++ b/ckan/templates/activity_streams/new_package_extra.html @@ -0,0 +1,21 @@ + + +
+
+ ${h.linked_user(activity.user_id)} + added + the extra "${detail.data.package_extra.key}" + to the dataset ${package_summary(activity.data.package)}
+ ${h.render_datetime(activity.timestamp, '%B %d %Y')} +
+
+ ${h.markdown_extract(activity.data.package.notes)} +
+
+