Esempio n. 1
0
    def get_admin_master_data(self, request):
        communities_message = []
        query = Community.query().filter(Community.team_secret != None)

        if request.team_key:
            query = query.filter(Community.team_key == request.team_key)

        communities = query.fetch()

        for community in communities:
            community_message = CommunityAdminMasterMessage()
            community_message.community_name = community.name
            community_message.team_key = community.team_key
            community_message.team_secret = community.team_secret
            community_message.team_hash = community.team_hash
            community_message.plan = community.plan

            app = community.apps[0].get()
            if app:
                community_message.app_name = app.name
                community_message.app_icon = app.icon_url

            community_message.users = []
            if request.get_user_list:
                for userrole in UserRole.community_user_list(community_key=community.key):
                    user = userrole.user.get()
                    if user and (user.account_type == community.team_key):
                        if user.user_email.split("@")[1] == "devnull.usersource.io":
                            break

                        user_message = UserAdminMasterMessage()
                        user_message.display_name = user.display_name
                        user_message.user_email = user.user_email
                        user_message.password_present = True if user.password else False
                        user_message.role = userrole.role
                        user_message.image_url = user.image_url
                        if community.circles:
                            user_message.circle = community.circles.get(str(userrole.circle_level))
                        community_message.users.append(user_message)

            communities_message.append(community_message)

        return CommunityAdminMasterListMessage(communities=communities_message)
Esempio n. 2
0
    def user_list(self, request):
        community_user_message_list = []

        status = InvitationStatusType.ACCEPTED
        userroles = UserRole.community_user_list(request.id)
        for userrole in userroles:
            user = userrole.user.get()
            if user:
                user_message = UserMessage(id=user.key.id(), display_name=user.display_name, user_email=user.user_email)
                community_user_message = CommunityUserMessage(user=user_message, role=userrole.role, status=status)
                community_user_message_list.append(community_user_message)

        if request.include_invite:
            status = InvitationStatusType.PENDING
            from model.invite import Invite
            invited_users = Invite.list_by_community(request.id)
            for invited_user in invited_users:
                user_message = UserMessage(display_name=invited_user.name, user_email=invited_user.email)
                community_user_message = CommunityUserMessage(user=user_message, role=invited_user.role, status=status)
                community_user_message_list.append(community_user_message)

        return CommunityUserListMessage(user_list=community_user_message_list)
    def get_noft_devices(cls, first_user, anno, action_type):
        """
        Get list of device ids to which notification to be sent

        :param ndb.Model first_user: "******" datastore of user who did anno action
        :param ndb.Model anno: "anno" datastore
        :param str action_type: one of the :py:class:`.AnnoActionType`
        :returns: list of device ids for iOS and Android devices
        :rtype: dict
        """
        interested_user_deviceids = {PlatformType.IOS: [], PlatformType.ANDROID: []}
        community_manager_deviceids = {PlatformType.IOS: [], PlatformType.ANDROID: []}

        # get all interested users for anno if action_type is other than "created"
        if action_type != AnnoActionType.CREATED:
            interested_user_list = UserAnnoState.list_users_by_anno(
                anno_key=anno.key, projection=[UserAnnoState.user, UserAnnoState.last_read]
            )
            interested_user_deviceids = cls.list_deviceid(interested_user_list)

        # anno is in community-scope then send notification to all managers of that community
        if anno.community:
            community_id = anno.community.id()
            community_manager_list = UserRole.community_user_list(community_id=community_id, only_managers=True)
            community_manager_deviceids = cls.list_deviceid(community_manager_list)

        # merging device ids of interested users and community managers
        notf_devices = {
            platform: list(set(interested_user_deviceids[platform] + community_manager_deviceids[platform]))
            for platform in interested_user_deviceids
        }

        # removing first user from push notification task
        if first_user.device_id and first_user.device_type:
            if first_user.device_id in notf_devices[first_user.device_type]:
                notf_devices[first_user.device_type].remove(first_user.device_id)

        return notf_devices