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