コード例 #1
0
    def get_member_data(member):
        member_data = {}

        for source in get_source_labels():
            userdata = getattr(member.user, source)
            is_connected = bool(userdata.is_connected)

            has_files, source_is_public = (False, False)

            # Check for files.
            has_files = (ProjectDataFile.objects.filter(
                user=member.user, source=source).count() > 0)

            # Check public sharing.
            if is_connected:
                source_is_public = is_public(member, source)

            member_data[source] = {
                "is_connected": is_connected,
                "has_files": has_files,
                "is_public": source_is_public,
            }

        member_data["date_joined"] = member.user.date_joined.strftime(
            "%Y%m%dT%H%M%SZ")

        if member.primary_email:
            member_data["email_verified"] = member.primary_email.verified
        else:
            member_data["email_verified"] = False

        member_data[
            "public_data_participant"] = member.public_data_participant.enrolled

        return member_data
コード例 #2
0
    def get_member_data(member):
        member_data = {}

        for source in get_source_labels():
            userdata = getattr(member.user, source)
            is_connected = bool(userdata.is_connected)

            has_files, source_is_public = (False, False)

            # Check for files.
            has_files = (
                ProjectDataFile.objects.filter(user=member.user, source=source).count()
                > 0
            )

            # Check public sharing.
            if is_connected:
                source_is_public = is_public(member, source)

            member_data[source] = {
                "is_connected": is_connected,
                "has_files": has_files,
                "is_public": source_is_public,
            }

        member_data["date_joined"] = member.user.date_joined.strftime("%Y%m%dT%H%M%SZ")

        if member.primary_email:
            member_data["email_verified"] = member.primary_email.verified
        else:
            member_data["email_verified"] = False

        member_data["public_data_participant"] = member.public_data_participant.enrolled

        return member_data
コード例 #3
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        self.activity = activity_from_data_request_project(
            self.project, user=self.request.user
        )
        project = DataRequestProject.objects.get(pk=self.activity["project_id"])

        public_users = [
            pda.user
            for pda in PublicDataAccess.objects.filter(
                project_membership__project=project
            )
            .filter(is_public=True)
            .annotate(user=F("participant__member__user"))
        ]
        public_files = (
            ProjectDataFile.objects.filter(source=self.activity["source_name"])
            .exclude(completed=False)
            .distinct("user")
            .filter(user__in=public_users)
            .count()
        )

        requesting_activities = self.project.requesting_projects.filter(
            approved=True
        ).filter(active=True)
        requested_activities = self.project.requested_sources.all()
        data_is_public = False

        data_files = []
        if self.request.user.is_authenticated:
            data_files = ProjectDataFile.objects.for_user(self.request.user).filter(
                source=self.activity["source_name"]
            )
            data_is_public = is_public(
                self.request.user.member, self.activity["source_name"]
            )

        project_member = None
        project_permissions = None
        granted_permissions = None
        permissions_changed = False

        if "project_id" in self.activity:
            project_permissions = {
                "share_username": project.request_username_access,
                "share_sources": requested_activities,
                "all_sources": project.all_sources_access,
                "returned_data_description": project.returned_data_description,
            }
            if self.activity["is_connected"]:
                project_member = project.active_user(self.request.user)
                granted_sources = project_member.granted_sources.all()
                granted_permissions = {
                    "share_username": project_member.username_shared,
                    "share_sources": project_member.granted_sources.all(),
                    "all_sources": project_member.all_sources_shared,
                    "returned_data_description": project.returned_data_description,
                }
                permissions_changed = not all(
                    [
                        granted_permissions[x] == project_permissions[x]
                        for x in ["share_username", "all_sources"]
                    ]
                )
                gs = set(granted_sources.values_list("id", flat=True))
                ra = set(requested_activities.values_list("id", flat=True))
                permissions_changed = permissions_changed or gs.symmetric_difference(ra)
            if project.no_public_data:
                public_files = []

        try:
            show_toggle_visible_button = (
                not project_member.revoked
            ) and project_member.authorized
        except AttributeError:
            show_toggle_visible_button = False

        context.update(
            {
                "activity": self.activity,
                "data_files": data_files,
                "is_public": data_is_public,
                "source": self.activity["source_name"],
                "project": project,
                "project_member": project_member,
                "project_permissions": project_permissions,
                "granted_permissions": granted_permissions,
                "permissions_changed": permissions_changed,
                "public_files": public_files,
                "requesting_activities": requesting_activities,
                "requested_activities": requested_activities,
                "show_toggle_visible_button": show_toggle_visible_button,
            }
        )

        return context
コード例 #4
0
ファイル: views.py プロジェクト: OpenCitSci/open-humans
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        self.activity = activity_from_data_request_project(
            self.project, user=self.request.user
        )
        project = DataRequestProject.objects.get(pk=self.activity["project_id"])

        public_users = [
            pda.user
            for pda in PublicDataAccess.objects.filter(
                project_membership__project=project
            )
            .filter(is_public=True)
            .annotate(user=F("participant__member__user"))
        ]
        public_files = (
            ProjectDataFile.objects.filter(source=self.activity["source_name"])
            .exclude(completed=False)
            .distinct("user")
            .filter(user__in=public_users)
            .count()
        )

        requesting_activities = self.project.requesting_projects.filter(
            approved=True
        ).filter(active=True)
        requested_activities = self.project.requested_sources.all()
        data_is_public = False

        data_files = []
        if self.request.user.is_authenticated:
            data_files = ProjectDataFile.objects.for_user(self.request.user).filter(
                source=self.activity["source_name"]
            )
            data_is_public = is_public(
                self.request.user.member, self.activity["source_name"]
            )

        project_member = None
        project_permissions = None
        granted_permissions = None
        permissions_changed = False

        if "project_id" in self.activity:
            project_permissions = {
                "share_username": project.request_username_access,
                "share_sources": requested_activities,
                "all_sources": project.all_sources_access,
                "returned_data_description": project.returned_data_description,
            }
            if self.activity["is_connected"]:
                project_member = project.active_user(self.request.user)
                granted_sources = project_member.granted_sources.all()
                granted_permissions = {
                    "share_username": project_member.username_shared,
                    "share_sources": project_member.granted_sources.all(),
                    "all_sources": project_member.all_sources_shared,
                    "returned_data_description": project.returned_data_description,
                }
                permissions_changed = not all(
                    [
                        granted_permissions[x] == project_permissions[x]
                        for x in ["share_username", "all_sources"]
                    ]
                )
                gs = set(granted_sources.values_list("id", flat=True))
                ra = set(requested_activities.values_list("id", flat=True))
                permissions_changed = permissions_changed or gs.symmetric_difference(ra)
            if project.no_public_data:
                public_files = []

        try:
            show_toggle_visible_button = (
                not project_member.revoked
            ) and project_member.authorized
        except AttributeError:
            show_toggle_visible_button = False

        context.update(
            {
                "activity": self.activity,
                "data_files": data_files,
                "is_public": data_is_public,
                "source": self.activity["source_name"],
                "project": project,
                "project_member": project_member,
                "project_permissions": project_permissions,
                "granted_permissions": granted_permissions,
                "permissions_changed": permissions_changed,
                "public_files": public_files,
                "requesting_activities": requesting_activities,
                "requested_activities": requested_activities,
                "show_toggle_visible_button": show_toggle_visible_button,
            }
        )

        return context
コード例 #5
0
def source_is_public(context, source):
    """
    Return True if the given source is public for the user in the current
    request context.
    """
    return is_public(context.request.user.member, source)