Ejemplo n.º 1
0
    def _renderMore(self, request, data=None):
        myId = request.getSession(IAuthInfo).username

        group = data['id']
        start = data['start']
        itemType = data['type']
        me = base.Entity(myId)
        me_d = me.fetchData()
        args = {'itemType': itemType, 'groupId': group.id, "me": me}

        isMember = yield db.get_count(group.id, "groupMembers", start=myId, finish=myId)
        if isMember:
            feedItems = yield Feed.get(request.getSession(IAuthInfo),
                                       feedId=group.id, start=start,
                                       itemType=itemType)
            args.update(feedItems)
        else:
            args["conversations"] = []
            args["entities"] = {}
        yield me_d
        args["isMember"] = isMember
        args["entities"].update(group)
        args['entities'].update(me)

        onload = "(function(obj){$$.convs.load(obj);})(this);"
        t.renderScriptBlock(request, "group-feed.mako", "feed", False,
                            "#next-load-wrapper", "replace", True,
                            handlers={"onload": onload}, **args)
Ejemplo n.º 2
0
    def _subscribe(self, request, data=None):
        authInfo = request.getSession(IAuthInfo)
        myId = authInfo.username
        orgId = authInfo.organization

        myGroups = []
        _pg = data['_pg']
        group = data['id']
        groupFollowers = {group.id: []}
        entities = base.EntitySet([myId, orgId])
        yield entities.fetchData()
        entities.update(group)
        args = {'entities': entities, "me": entities[myId]}

        isNewMember, pendingRequests = yield Group.subscribe(request, group, entities[myId], entities[orgId])
        if isNewMember or pendingRequests:
            if isNewMember:
                myGroups.append(group.id)
                groupFollowers[group.id].append(myId)
            args["isMember"] = isNewMember
            args["pendingConnections"] = pendingRequests
            args["groupFollowers"] = groupFollowers
            args["groupId"] = group.id
            args["myGroups"] = myGroups

            handlers = {}
            if group.basic['access'] == 'open' and _pg == '/group':
                onload = """
                             $('#group_add_invitee').autocomplete({
                                source: '/auto/users',
                               minLength: 2,
                               select: function( event, ui ) {
                                   $('#group_invitee').attr('value', ui.item.uid)
                               }
                              });
                             """
                t.renderScriptBlock(request, "group-feed.mako", "groupLinks",
                                    False, "#group-links", "set",
                                    handlers={"onload": onload}, **args)

                onload = "$('#sharebar-attach-fileshare,"\
                            "#sharebar-attach-file-input,"\
                            "#sharebar-submit').removeAttr('disabled');"
                onload += "$('#group-share-block').removeClass('disabled');"
                onload += "$('#group-links').show();"
                handlers = {'onload': onload}

            t.renderScriptBlock(request, "group-feed.mako", "group_actions",
                                False, "#group-actions-%s" % (group.id),
                                "set", handlers=handlers, **args)
            if group.basic['access'] == 'open' and _pg == '/group':
                feedItems = yield Feed.get(request.getSession(IAuthInfo), feedId=group.id)
                args.update(feedItems)
                onload = "(function(obj){$$.convs.load(obj);})(this);"
                t.renderScriptBlock(request, "group-feed.mako", "feed",
                                    False, "#user-feed", "set", True,
                                    handlers={"onload": onload}, **args)
Ejemplo n.º 3
0
    def _renderMore(self, request, entityId, start, itemType):
        (appchange, script, args, myId) = yield self._getBasicArgs(request)

        entity = base.Entity(entityId)
        yield entity.fetchData()
        if entity.basic and entity.basic.get("type", '') == "group":
            errors.InvalidRequest("group feed will not be fetched.")

        feedItems = yield Feed.get(request.getSession(IAuthInfo),
                                   feedId=entityId, start=start,
                                   itemType=itemType)
        args.update(feedItems)
        args["feedId"] = entityId
        args['itemType'] = itemType

        onload = "(function(obj){$$.convs.load(obj);})(this);"
        t.renderScriptBlock(request, "feed.mako", "feed", False,
                            "#next-load-wrapper", "replace", True,
                            handlers={"onload": onload}, **args)
Ejemplo n.º 4
0
    def _getTagItems(self, request, tagId, start='', count=10):
        itemsFromFeed = {}

        @defer.inlineCallbacks
        def getter(start='', count=12):
            items = yield db.get_slice(tagId, "tagItems", count=count,
                                       start=start, reverse=True)
            items = utils.columnsToDict(items, ordered=True)
            itemsFromFeed.update(items)
            defer.returnValue(items)

        @defer.inlineCallbacks
        def cleaner(convIds):
            deleteKeys = []
            for key, value in itemsFromFeed.items():
                if value in deleted:
                    deleteKeys.append(key)
            yield db.batch_remove({'tagItems': [tagId]}, names=deleteKeys)

        return Feed.get(request.getSession(IAuthInfo), getFn=getter,
                        cleanFn=cleaner, start=start, count=count,
                        getReasons=False)
Ejemplo n.º 5
0
    def _feed(self, request, data=None):
        (appchange, script, args, myId) = yield self._getBasicArgs(request)
        landing = not self._ajax

        group = data['id']
        start = data['start']
        itemType = data['type']

        #if user dont belong to this group show "Join Group" message
        isMember = yield db.get_count(group.id, "groupMembers", start=myId, finish=myId)
        isFollower = yield db.get_count(group.id, "followers", start=myId, finish=myId)
        columns = ["GI:%s" % (group.id), "GO:%s" % (group.id)]
        cols = yield db.get_slice(myId, "pendingConnections",  columns)
        pendingConnections = utils.columnsToDict(cols)

        args["menuId"] = "groups"
        args["groupId"] = group.id
        args["isMember"] = isMember
        args['itemType'] = itemType
        args["entities"] = base.EntitySet(group)

        ##XXX: following should not be static
        args["pendingConnections"] = pendingConnections
        args["myGroups"] = [group.id] if isMember else []
        args["groupFollowers"] = {group.id: [myId]} if isFollower else {group.id: []}

        if script and landing:
            t.render(request, "group-feed.mako", **args)
        elif script and appchange:
            t.renderScriptBlock(request, "group-feed.mako", "layout",
                                landing, "#mainbar", "set", **args)
        if script:
            name = group.basic['name']
            onload = "$$.acl.switchACL('sharebar-acl', 'group', '%s', '%s');" % (group.id, name.replace("'", "\\'"))
            onload += "$$.files.init('sharebar-attach');"
            onload += "$('#sharebar-acl-button').attr('disabled', 'disabled');"
            if not isMember:
                onload += "$('#sharebar-attach-fileshare').attr('disabled', 'disabled');"
                onload += "$('#sharebar-attach-file-input').attr('disabled', 'disabled');"
                onload += "$('#sharebar-submit').attr('disabled', 'disabled');"
                onload += "$('#group-share-block').addClass('disabled');"

            t.renderScriptBlock(request, "group-feed.mako", "summary",
                                landing, "#group-summary", "set", **args)
            t.renderScriptBlock(request, "feed.mako", "share_block",
                                landing,  "#group-share-block", "set",
                                handlers={"onload": onload}, **args)
            yield self._renderShareBlock(request, "status")

        if isMember:
            feedItems = yield Feed.get(request.getSession(IAuthInfo),
                                       feedId=group.id, start=start,
                                       itemType=itemType)
            args.update(feedItems)
        else:
            args["conversations"] = []

        entities = base.EntitySet(group.admins.keys())
        yield entities.fetchData()
        for entityId in entities.keys():
            if entityId not in args['entities']:
                args['entities'][entityId] = entities[entityId]
        #group info fetched by feed may not have required info. overwrite it.
        args['entities'].update(group)

        if script:
            onload = "(function(obj){$$.convs.load(obj);})(this);"
            t.renderScriptBlock(request, "group-feed.mako", "feed", landing,
                                "#user-feed", "set", True,
                                handlers={"onload": onload}, **args)
            t.renderScriptBlock(request, "feed.mako", "feedFilterBar", landing,
                                "#feed-filter-bar", "set", True,
                                args=[itemType], **args)
            if isMember:
                onload = """
                         $('#group_add_invitee').autocomplete({
                               source: '/auto/users',
                               minLength: 2,
                               select: function( event, ui ) {
                                   $('#group_invitee').attr('value', ui.item.uid)
                               }
                          });
                          $('#feed-side-block-container').empty();
                         """
                t.renderScriptBlock(request, "group-feed.mako", "groupLinks",
                                    landing, "#group-links", "set",
                                    handlers={"onload": onload}, **args)

            t.renderScriptBlock(request, "group-feed.mako", "groupAdmins",
                                landing, "#group-admins", "set", True, **args)

            if isMember:
                for pluginType in plugins:
                    plugin = plugins[pluginType]
                    if hasattr(plugin, 'renderFeedSideBlock'):
                        yield plugins["event"].renderFeedSideBlock(request,
                                                        landing, group.id, args)

        else:
            t.render(request, "group-feed.mako", **args)
Ejemplo n.º 6
0
    def _render(self, request, entityId, start, itemType):
        (appchange, script, args, myId) = yield self._getBasicArgs(request)
        itemType = utils.getRequestArg(request, 'type')
        start = utils.getRequestArg(request, "start") or ''

        landing = not self._ajax
        myOrgId = args["orgId"]

        feedTitle = _("News Feed")
        menuId = "feed"

        if entityId:
            entity = base.Entity(entityId)
            yield entity.fetchData(['basic', 'admins'])

            if not entity.basic:
                raise errors.InvalidEntity("feed", entityId)

            entityType = entity.basic['type']

            orgId = entity.basic["org"] if entityType != "org" else entityId

            if myOrgId != orgId:
                raise errors.EntityAccessDenied("organization", entityId)

            if entityType == 'org':
                menuId = "org"
                feedTitle = _("Company Feed: %s") % entity.basic["name"]
            elif entityType == 'group':
                request.redirect("/group?id=%s"%(entityId))
                defer.returnValue(None)
            elif entityId != myId:
                raise errors.EntityAccessDenied("user", entityId)

        feedId = entityId or myId
        args["feedTitle"] = feedTitle
        args["menuId"] = menuId
        args["feedId"] = feedId

        if script and landing:
            t.render(request, "feed.mako", **args)
            request.write('<script>$("#invite-form").html5form({messages: "en"})</script>')
        elif script and appchange:
            onload = '$("#invite-form").html5form({messages: "en"})'
            t.renderScriptBlock(request, "feed.mako", "layout",
                                    landing, "#mainbar", "set", handlers={'onload':onload}, **args)
        elif script and feedTitle:
            t.renderScriptBlock(request, "feed.mako", "feed_title",
                                landing, "#title", "set", True,
                                handlers={"onload": "$$.menu.selectItem('%s')"%(menuId)}, **args)

        if script:
            handlers = {}
            handlers["onload"] = handlers.get("onload", "") +\
                                 "$$.files.init('sharebar-attach');"
            t.renderScriptBlock(request, "feed.mako", "share_block",
                                landing, "#share-block", "set",
                                handlers=handlers, **args)
            yield self.renderShareBlock(request, "status")

        feedItems = yield Feed.get(request.getSession(IAuthInfo),
                                   feedId=feedId, start=start,
                                   itemType=itemType)
        args.update(feedItems)
        args['itemType'] = itemType

        suggestions, entities = yield people.get_suggestions(request,
                                                SUGGESTION_PER_PAGE, mini=True)
        args["suggestions"] = suggestions

        if "entities" not in args:
            args["entities"] = entities
        else:
            for entity in entities.keys():
                if entity not in args["entities"].keys():
                    args["entities"][entity] = entities[entity]

        if script:
            onload = """
                        (function(obj){$$.convs.load(obj);})(this);
                        $('#feed-side-block-container').empty();
                     """
            t.renderScriptBlock(request, "feed.mako", "feed", landing,
                                "#user-feed", "set", True,
                                handlers={"onload": onload}, **args)
            t.renderScriptBlock(request, "feed.mako", "feedFilterBar", landing,
                                "#feed-filter-bar", "set", True,
                                args=[itemType], **args)
            t.renderScriptBlock(request, "feed.mako", "_suggestions",
                                landing, "#suggestions", "set", True, **args)

            for pluginType in plugins:
                plugin = plugins[pluginType]
                if hasattr(plugin, 'renderFeedSideBlock'):
                    if not entityId:
                        entityId = myId
                    yield plugin.renderFeedSideBlock(request, landing,
                                                     entityId, args)

        if script and landing:
            request.write("</body></html>")

        if not script:
            t.render(request, "feed.mako", **args)