def user_update(context, data_dict): """Updates the user\'s details""" model = context["model"] user = context["user"] session = context["session"] schema = context.get("schema") or default_update_user_schema() id = data_dict["id"] user_obj = model.User.get(id) context["user_obj"] = user_obj if user_obj is None: raise NotFound("User was not found.") check_access("user_update", context, data_dict) data, errors = validate(data_dict, schema, context) if errors: session.rollback() raise ValidationError(errors, group_error_summary(errors)) user = user_dict_save(data, context) activity_dict = {"user_id": user.id, "object_id": user.id, "activity_type": "changed user"} activity_create_context = {"model": model, "user": user, "defer_commit": True, "session": session} from ckan.logic.action.create import activity_create activity_create(activity_create_context, activity_dict, ignore_auth=True) # TODO: Also create an activity detail recording what exactly changed in # the user. if not context.get("defer_commit"): model.repo.commit() return user_dictize(user, context)
def group_update(context, data_dict): model = context["model"] user = context["user"] session = context["session"] schema = context.get("schema") or default_update_group_schema() id = data_dict["id"] parent = context.get("parent", None) group = model.Group.get(id) context["group"] = group if group is None: raise NotFound("Group was not found.") check_access("group_update", context, data_dict) data, errors = validate(data_dict, schema, context) if errors: session.rollback() raise ValidationError(errors, group_error_summary(errors)) rev = model.repo.new_revision() rev.author = user if "message" in context: rev.message = context["message"] else: rev.message = _(u"REST API: Update object %s") % data.get("name") group = group_dict_save(data, context) if parent: parent_group = model.Group.get(parent) if parent_group and not parent_group in group.get_groups(group.type): # Delete all of this groups memberships current = ( session.query(model.Member) .filter(model.Member.table_id == group.id) .filter(model.Member.table_name == "group") .all() ) for c in current: session.delete(c) member = model.Member(group=parent_group, table_id=group.id, table_name="group") session.add(member) for item in PluginImplementations(IGroupController): item.edit(group) activity_dict = { "user_id": model.User.by_name(user.decode("utf8")).id, "object_id": group.id, "activity_type": "changed group", } # Handle 'deleted' groups. # When the user marks a group as deleted this comes through here as # a 'changed' group activity. We detect this and change it to a 'deleted' # activity. if group.state == u"deleted": if session.query(ckan.model.Activity).filter_by(object_id=group.id, activity_type="deleted").all(): # A 'deleted group' activity for this group has already been # emitted. # FIXME: What if the group was deleted and then activated again? activity_dict = None else: # We will emit a 'deleted group' activity. activity_dict["activity_type"] = "deleted group" if activity_dict is not None: activity_dict["data"] = {"group": ckan.lib.dictization.table_dictize(group, context)} from ckan.logic.action.create import activity_create activity_create_context = {"model": model, "user": user, "defer_commit": True, "session": session} activity_create(activity_create_context, activity_dict, ignore_auth=True) # TODO: Also create an activity detail recording what exactly changed # in the group. if not context.get("defer_commit"): model.repo.commit() return group_dictize(group, context)