Beispiel #1
0
    def post(self, request, group_id):
        """edit a group"""
        user_group = get_object_or_404(models.Group, id=group_id)
        form = forms.GroupForm(request.POST, instance=user_group)
        if not form.is_valid():
            return redirect("group", user_group.id)
        user_group = form.save()

        # let the other members know something about the group changed
        memberships = models.GroupMember.objects.filter(group=user_group)
        model = apps.get_model("bookwyrm.Notification", require_ready=True)
        for field in form.changed_data:
            notification_type = (
                "GROUP_PRIVACY"
                if field == "privacy" else "GROUP_NAME" if field == "name" else
                "GROUP_DESCRIPTION" if field == "description" else None)
            if notification_type:
                for membership in memberships:
                    member = membership.user
                    if member != request.user:
                        model.objects.create(
                            user=member,
                            related_user=request.user,
                            related_group=user_group,
                            notification_type=notification_type,
                        )

        return redirect("group", user_group.id)
Beispiel #2
0
class Group(View):
    """group page"""

    # pylint: disable=unused-argument
    def get(self, request, group_id, slug=None):
        """display a group"""

        group = get_object_or_404(models.Group, id=group_id)
        group.raise_visible_to_user(request.user)

        if redirect_local_path := maybe_redirect_local_path(request, group):
            return redirect_local_path

        lists = (models.List.privacy_filter(
            request.user).filter(group=group).order_by("-updated_date"))

        data = {
            "group":
            group,
            "lists":
            lists,
            "group_form":
            forms.GroupForm(instance=group, auto_id="group_form_id_%s"),
            "list_form":
            forms.ListForm(),
            "path":
            "/group",
        }
        return TemplateResponse(request, "groups/group.html", data)
Beispiel #3
0
 def post(self, request, username):
     """create a user group"""
     form = forms.GroupForm(request.POST)
     if not form.is_valid():
         return redirect(request.user.local_path + "/groups")
     group = form.save()
     # add the creator as a group member
     models.GroupMember.objects.create(group=group, user=request.user)
     return redirect("group", group.id)
Beispiel #4
0
    def get(self, request, username):
        """display a group"""
        user = get_user_from_username(request.user, username)
        groups = (models.Group.privacy_filter(request.user).filter(
            memberships__user=user).order_by("-updated_date"))
        paginated = Paginator(groups, 12)

        data = {
            "groups": paginated.get_page(request.GET.get("page")),
            "is_self": request.user.id == user.id,
            "user": user,
            "group_form": forms.GroupForm(),
            "path": user.local_path + "/group",
        }
        return TemplateResponse(request, "user/groups.html", data)
Beispiel #5
0
    def get(self, request, group_id):
        """basic profile info"""
        user_query = request.GET.get("user_query")
        group = get_object_or_404(models.Group, id=group_id)
        lists = (models.List.privacy_filter(
            request.user).filter(group=group).order_by("-updated_date"))

        if not group:
            return HttpResponseBadRequest()

        if not group.user == request.user:
            return HttpResponseBadRequest()

        user_results = (
            models.User.viewer_aware_objects(request.user).exclude(
                memberships__in=group.memberships.all()
            )  # don't suggest users who are already members
            .annotate(similarity=Greatest(
                TrigramSimilarity("username", user_query),
                TrigramSimilarity("localname", user_query),
            )).filter(similarity__gt=0.5,
                      local=True).order_by("-similarity")[:5])
        no_results = not user_results

        if user_results.count() < 5:
            user_results = list(user_results) + list(
                suggested_users.get_suggestions(request.user, local=True))

        data = {
            "suggested_users":
            user_results,
            "no_results":
            no_results,
            "group":
            group,
            "lists":
            lists,
            "group_form":
            forms.GroupForm(instance=group, auto_id="group_form_id_%s"),
            "list_form":
            forms.ListForm(),
            "user_query":
            user_query,
            "requestor_is_manager":
            request.user == group.user,
        }
        return TemplateResponse(request, "groups/find_users.html", data)
Beispiel #6
0
    def get(self, request, group_id):
        """display a group"""

        group = get_object_or_404(models.Group, id=group_id)
        group.raise_visible_to_user(request.user)
        lists = (models.List.privacy_filter(
            request.user).filter(group=group).order_by("-updated_date"))

        data = {
            "group":
            group,
            "lists":
            lists,
            "group_form":
            forms.GroupForm(instance=group, auto_id="group_form_id_%s"),
            "list_form":
            forms.ListForm(),
            "path":
            "/group",
        }
        return TemplateResponse(request, "groups/group.html", data)