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
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
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
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)