Example #1
0
def groups_role_api(request, group_name, uid, role):
	"""
	API for setting a group members role, or removing them from a group.
	"""
	if request.method != "POST":
		return jsonResponse({"error": "Unsupported HTTP method."})
	group = Group().load({"name": group_name})
	if not group:
		return jsonResponse({"error": "No group named %s." % group_name})
	uid = int(uid)
	if request.user.id not in group.admins:
		if not (uid == request.user.id and role == "remove"): # non admins can remove themselves
			return jsonResponse({"error": "You must be a group admin to change member roles."})
	user = UserProfile(uid)
	if not user.exists():
		return jsonResponse({"error": "No user with the specified ID exists."})
	if role not in ("member", "publisher", "admin", "remove"):
		return jsonResponse({"error": "Unknown group member role."})
	if uid == request.user.id and group.admins == [request.user.id] and role != "admin":
		return jsonResponse({"error": "This action would leave the group without any admins. Please appoint another admin first."})
	if role == "remove":
		group.remove_member(uid)
	else:
		group.add_member(uid, role)

	group_content = group.contents(with_content=True, authenticated=True)
	return jsonResponse(group_content)
Example #2
0
def groups_invite_api(request, group_name, uid_or_email, uninvite=False):
	"""
	API for adding or removing group members, or group invitations
	"""
	if request.method != "POST":
		return jsonResponse({"error": "Unsupported HTTP method."})
	group = Group().load({"name": group_name})
	if not group:
		return jsonResponse({"error": "No group named %s." % group_name})
	if request.user.id not in group.admins:
		return jsonResponse({"error": "You must be a group admin to invite new members."})

	user = UserProfile(email=uid_or_email)
	if not user.exists():
		if uninvite:
			group.remove_invitation(uid_or_email)
			message = "Invitation removed."
		else:
			group.invite_member(uid_or_email, request.user.id)
			message = "Invitation sent."
	else:
		is_new_member = not group.is_member(user.id)

		if is_new_member:
			group.add_member(user.id)
			from sefaria.model.notification import Notification
			notification = Notification({"uid": user.id})
			notification.make_group_add(adder_id=request.user.id, group_name=group_name)
			notification.save()
			message = "Group member added."
		else:
			message = "%s is already a member of this group." % user.full_name

	group_content = group.contents(with_content=True, authenticated=True)
	return jsonResponse({"group": group_content, "message": message})
Example #3
0
def groups_invite_api(request, group_name, uid_or_email, uninvite=False):
	"""
	API for adding or removing group members, or group invitations
	"""
	if request.method != "POST":
		return jsonResponse({"error": "Unsupported HTTP method."})
	group = Group().load({"name": group_name})
	if not group:
		return jsonResponse({"error": "No group named %s." % group_name})
	if request.user.id not in group.admins:
		return jsonResponse({"error": "You must be a group admin to invite new members."})

	user = UserProfile(email=uid_or_email)
	if not user.exists():
		if uninvite:
			group.remove_invitation(uid_or_email)
			message = "Invitation removed."
		else:
			group.invite_member(uid_or_email, request.user.id)
			message = "Invitation sent."
	else:
		is_new_member = not group.is_member(user.id)

		if is_new_member:
			group.add_member(user.id)
			from sefaria.model.notification import Notification
			notification = Notification({"uid": user.id})
			notification.make_group_add(adder_id=request.user.id, group_name=group_name)
			notification.save()
			message = "Group member added."
		else:
			message = "%s is already a member of this group." % user.full_name

	group_content = group.contents(with_content=True, authenticated=True)
	return jsonResponse({"group": group_content, "message": message})
Example #4
0
def groups_role_api(request, group_name, uid, role):
	"""
	API for setting a group members role, or removing them from a group.
	"""
	if request.method != "POST":
		return jsonResponse({"error": "Unsupported HTTP method."})
	group = Group().load({"name": group_name})
	if not group:
		return jsonResponse({"error": "No group named %s." % group_name})
	uid = int(uid)
	if request.user.id not in group.admins:
		if not (uid == request.user.id and role == "remove"): # non admins can remove themselves
			return jsonResponse({"error": "You must be a group admin to change member roles."})
	user = UserProfile(uid)
	if not user.exists():
		return jsonResponse({"error": "No user with the specified ID exists."})
	if role not in ("member", "publisher", "admin", "remove"):
		return jsonResponse({"error": "Unknown group member role."})
	if uid == request.user.id and group.admins == [request.user.id] and role != "admin":
		return jsonResponse({"error": "This action would leave the group without any admins. Please appoint another admin first."})
	if role == "remove":
		group.remove_member(uid)
	else:
		group.add_member(uid, role)

	group_content = group.contents(with_content=True, authenticated=True)
	return jsonResponse(group_content)
Example #5
0
def groups_api(request, group=None):
    if request.method == "GET":
        if not group:
            return jsonResponse({
                "private": [
                    g.listing_contents()
                    for g in GroupSet().for_user(request.user.id)
                ],
                "public": [
                    g.listing_contents() for g in GroupSet(
                        {
                            "listed": True,
                            "moderationStatus": {
                                "$ne": "nolist"
                            }
                        },
                        sort=[("name", 1)])
                ]
            })
        group = Group().load({"name": group})
        if not group:
            return jsonResponse({"error": "No group named '%s'" % group})
        is_member = request.user.is_authenticated and group.is_member(
            request.user.id)
        group_content = group.contents(with_content=True,
                                       authenticated=is_member)
        return jsonResponse(group_content)
    else:
        return groups_post_api(request, group_name=group)
Example #6
0
def edit_group_page(request, group=None):
	if group:
		group = group.replace("-", " ").replace("_", " ")
		group = Group().load({"name": group})
		if not group:
			raise Http404
		groupData = group.contents()
	else:
		groupData = None

	return render_to_response('edit_group.html', {"groupData": groupData}, RequestContext(request))	
Example #7
0
def edit_group_page(request, group=None):
	if group:
		group = group.replace("-", " ").replace("_", " ")
		group = Group().load({"name": group})
		if not group:
			raise Http404
		groupData = group.contents()
	else:
		groupData = None

	return render_to_response('edit_group.html', {"groupData": groupData}, RequestContext(request))	
Example #8
0
def groups_pin_sheet_api(request, group_name, sheet_id):
	if request.method != "POST":
		return jsonResponse({"error": "Unsupported HTTP method."})
	group = Group().load({"name": group_name})
	if not group:
		return jsonResponse({"error": "No group named %s." % group_name})
	if request.user.id not in group.admins:
		return jsonResponse({"error": "You must be a group admin to invite new members."})

	sheet_id = int(sheet_id)
	group.pin_sheet(sheet_id)
	group_content = group.contents(with_content=True, authenticated=True)
	return jsonResponse({"group": group_content, "status": "success"})
Example #9
0
def groups_pin_sheet_api(request, group_name, sheet_id):
	if request.method != "POST":
		return jsonResponse({"error": "Unsupported HTTP method."})
	group = Group().load({"name": group_name})
	if not group:
		return jsonResponse({"error": "No group named %s." % group_name})
	if request.user.id not in group.admins:
		return jsonResponse({"error": "You must be a group admin to invite new members."})

	sheet_id = int(sheet_id)
	group.pin_sheet(sheet_id)
	group_content = group.contents(with_content=True, authenticated=True)
	return jsonResponse({"group": group_content, "status": "success"})
Example #10
0
def groups_api(request, group=None):
	if request.method == "GET":
		if not group:
			return jsonResponse({
				"private": [g.listing_contents() for g in GroupSet().for_user(request.user.id)],
				"public": [g.listing_contents() for g in GroupSet({"listed": True, "moderationStatus": {"$ne": "nolist"}}, sort=[("name", 1)])]
			})
		group = Group().load({"name": group})
		if not group:
			return jsonResponse({"error": "No group named '%s'" % group})
		is_member = request.user.is_authenticated and group.is_member(request.user.id)
		group_content = group.contents(with_content=True, authenticated=is_member)
		return jsonResponse(group_content)
	else:
		return groups_post_api(request, group_name=group)