def tag_chatter(context, request): """ HTML wrapper for 'tag_chatter_json'. """ userid = authenticated_userid(request) chatter = find_chatter(context) followed_tags = sorted(chatter.listFollowedTags(userid)) tag_list = chatter.recentTags() tag = request.GET.get('tag', None) if tag is not None: info = tag_chatter_json(context, request) subtitle = "Posts that mention %s" % tag else: info = followed_tag_chatter_json(context, request) subtitle = "Followed topics" info['api'] = TemplateAPI(context, request, 'Chatter: #%s' % tag) chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request, selected='topics') info['page_title'] = 'Chatter: Topics' info['subtitle'] = subtitle info['followed_tags'] = followed_tags info['tag'] = tag layout = request.layout_manager.layout if layout is not None: layout.add_portlet('chatter.tag_search') layout.add_portlet('chatter.tag_info', followed_tags, tag_list, tag) return info
def threaded_conversation(request, quip_id): chatter = find_chatter(request.context) replies = chatter.recentInReplyTo(quip_id) thread = [(quip_info(request, *(reply, ))[0], threaded_conversation(request, reply.__name__)) for reply in replies] return thread
def followed_by(context, request): """ View the list of users following the current user. """ layout = request.layout_manager.layout if layout is not None: userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', userid) layout.add_portlet( 'chatter.follow_info', _quippers_from_users(context, request, [other_user])) layout.add_portlet('chatter.user_search') chatter = find_chatter(context) chatter_url = resource_url(chatter, request) layout = request.layout_manager.layout followed_by = followed_by_json(context, request) return { 'api': TemplateAPI(context, request, 'Following: %s' % followed_by['userid']), 'followed_by': followed_by, 'context_tools': get_context_tools(request, selected='followers'), 'chatter_url': chatter_url, }
def messages(context, request): layout = request.layout_manager.layout info = {} userid = '' info['latest_messages_users'] = latest_messages_users_json(context, request) ## temporary for laying out, will be an ajax call from the frontend info['user_messages'] = [] info['correspondent'] = None if info['latest_messages_users']: userid = info['latest_messages_users'][0]['userid'] user_messages = user_messages_json(context, request, userid) info['user_messages'] = user_messages['data'] info['correspondent'] = user_messages['correspondent'] ## info['api'] = TemplateAPI(context, request, 'Messages') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request, selected='messages') info['page_title'] = 'Chatter: Messages' info['recipient'] = userid current_userid = authenticated_userid(request) profiles = find_profiles(request.context) profile = profiles.get(current_userid) if profile is not None: profile.last_chatter_query = datetime.datetime.utcnow() return info
def threaded_conversation(request, quip_id): chatter = find_chatter(request.context) replies = chatter.recentInReplyTo(quip_id) thread = [(quip_info(request, *(reply,))[0], threaded_conversation(request, reply.__name__)) for reply in replies] return thread
def followed_chatter(context, request): """ HTML wrapper for 'followed_chatter_json'. """ userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', None) if other_user is not None: request.GET['creators'] = other_user return creators_chatter(context, request) layout = request.layout_manager.layout if layout is not None: layout.add_portlet('chatter.user_info') layout.add_portlet('chatter.show_only') layout.add_portlet('chatter.search') info = followed_chatter_json(context, request) info['api'] = TemplateAPI(context, request, 'Posts') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request) info['page_title'] = 'Chatter: Posts' info['pushdown'] = False info['inline'] = False info['show_more'] = len(info['recent']) >= 40 profiles = find_profiles(request.context) profile = profiles.get(userid) if profile is not None: profile.last_chatter_query = datetime.datetime.utcnow() return info
def creators_chatter_json(context, request): """ Return recent chatter by any of the named users. Query string must include: - 'creators': a sequence of userid's (may be a comma-separated string). Query string may include: - 'start': the item index at which to begin including items. - 'count': the maximun number of items to return. - 'before': a string timestamp (in timeago format); include items which are older than the indicated time. - 'since': a string timestamp (in timeago format); include items which are newer than the indicated time. Note that we return the *last* 'count' items newer than the supplied value. """ creators = request.GET['creators'] if isinstance(creators, basestring): creators = creators.split(',') else: creators = list(creators) creators = _quippers_from_users(context, request, creators) creator_list = [x['userid'] for x in creators] chatter = find_chatter(context) return {'recent': _do_slice(chatter.recentWithCreators(*creator_list), request), 'creators': creators, }
def names_chatter_json(context, request): """ Return recent chatter mentioning any of the named users. Query string must include: - 'names': a sequence of userid's (may be a comma-separated string). Query string may include: - 'start': the item index at which to begin including items. - 'count': the maximun number of items to return. - 'before': a string timestamp (in timeago format); include items which are older than the indicated time. - 'since': a string timestamp (in timeago format); include items which are newer than the indicated time. Note that we return the *last* 'count' items newer than the supplied value. """ names = request.GET['names'] if isinstance(names, basestring): names = names.split(',') else: names = list(names) chatter = find_chatter(context) return {'recent': _do_slice(chatter.recentWithNames(*names), request), 'names': names, }
def messages(context, request): layout = request.layout_manager.layout info = {} userid = '' info['latest_messages_users'] = latest_messages_users_json( context, request) ## temporary for laying out, will be an ajax call from the frontend info['user_messages'] = [] info['correspondent'] = None if info['latest_messages_users']: userid = info['latest_messages_users'][0]['userid'] user_messages = user_messages_json(context, request, userid) info['user_messages'] = user_messages['data'] info['correspondent'] = user_messages['correspondent'] ## info['api'] = TemplateAPI(context, request, 'Messages') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request, selected='messages') info['page_title'] = 'Chatter: Messages' info['recipient'] = userid current_userid = authenticated_userid(request) profiles = find_profiles(request.context) profile = profiles.get(current_userid) if profile is not None: profile.last_chatter_query = datetime.datetime.utcnow() return info
def following_search(context, request): """ View the list of users returned by a search """ layout = request.layout_manager.layout if layout is not None: userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', userid) layout.add_portlet('chatter.follow_info', _quippers_from_users(context, request, [other_user])) layout.add_portlet('chatter.user_search') chatter = find_chatter(context) chatter_url = resource_url(chatter, request) layout = request.layout_manager.layout profiles = search_profiles_json(context, request) if len(profiles)==1: location = '%s%s' % (chatter_url, profiles[0]['value']) return HTTPFound(location=location) profiles = [profile['value'] for profile in profiles] to_follow = {'members': _quippers_from_users(context, request, profiles)} return {'api': TemplateAPI(context, request, 'Search users for following'), 'members': to_follow, 'context_tools': get_context_tools(request, selected='following'), 'chatter_url': chatter_url, 'page_title': 'Chatter: Search users for following' }
def creators_chatter_json(context, request): """ Return recent chatter by any of the named users. Query string must include: - 'creators': a sequence of userid's (may be a comma-separated string). Query string may include: - 'start': the item index at which to begin including items. - 'count': the maximun number of items to return. - 'before': a string timestamp (in timeago format); include items which are older than the indicated time. - 'since': a string timestamp (in timeago format); include items which are newer than the indicated time. Note that we return the *last* 'count' items newer than the supplied value. """ creators = request.GET['creators'] if isinstance(creators, basestring): creators = creators.split(',') else: creators = list(creators) creators = _quippers_from_users(context, request, creators) creator_list = [x['userid'] for x in creators] chatter = find_chatter(context) return { 'recent': _do_slice(chatter.recentWithCreators(*creator_list), request), 'creators': creators, }
def names_chatter_json(context, request): """ Return recent chatter mentioning any of the named users. Query string must include: - 'names': a sequence of userid's (may be a comma-separated string). Query string may include: - 'start': the item index at which to begin including items. - 'count': the maximun number of items to return. - 'before': a string timestamp (in timeago format); include items which are older than the indicated time. - 'since': a string timestamp (in timeago format); include items which are newer than the indicated time. Note that we return the *last* 'count' items newer than the supplied value. """ names = request.GET['names'] if isinstance(names, basestring): names = names.split(',') else: names = list(names) chatter = find_chatter(context) return { 'recent': _do_slice(chatter.recentWithNames(*names), request), 'names': names, }
def get_context_tools(request, selected='posts'): chatter = find_chatter(request.context) userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', '') chatter_url = resource_url(chatter, request, other_user) if chatter_url.endswith('/'): chatter_url = chatter_url[:-1] tools = [{ 'url': chatter_url, 'title': 'Posts', 'selected': selected == 'posts' and 'selected', }, { 'url': '%s/following.html' % chatter_url, 'title': 'Following', 'selected': selected == 'following' and 'selected', }, { 'url': '%s/followers.html' % chatter_url, 'title': 'Followers', 'selected': selected == 'followers' and 'selected', }] if other_user == '' or other_user == userid: tools.extend([{ 'url': '%s/followed_tags.html' % chatter_url, 'title': 'Topics', 'selected': selected == 'topics' and 'selected', }, { 'url': '%s/messages.html' % chatter_url, 'title': 'Messages', 'selected': selected == 'messages' and 'selected', }]) return tools
def get_context_tools(request, selected='posts'): chatter = find_chatter(request.context) userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', '') chatter_url = resource_url(chatter, request, other_user) if chatter_url.endswith('/'): chatter_url = chatter_url[:-1] tools = [{'url': chatter_url, 'title': 'Posts', 'selected': selected=='posts' and 'selected', }, {'url': '%s/following.html' % chatter_url, 'title': 'Following', 'selected': selected=='following' and 'selected', }, {'url': '%s/followers.html' % chatter_url, 'title': 'Followers', 'selected': selected=='followers' and 'selected', }] if other_user == '' or other_user == userid: tools.extend([ {'url': '%s/followed_tags.html' % chatter_url, 'title': 'Topics', 'selected': selected=='topics' and 'selected', }, {'url': '%s/messages.html' % chatter_url, 'title': 'Messages', 'selected': selected=='messages' and 'selected', } ]) return tools
def following_search(context, request): """ View the list of users returned by a search """ layout = request.layout_manager.layout if layout is not None: userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', userid) layout.add_portlet( 'chatter.follow_info', _quippers_from_users(context, request, [other_user])) layout.add_portlet('chatter.user_search') chatter = find_chatter(context) chatter_url = resource_url(chatter, request) layout = request.layout_manager.layout profiles = search_profiles_json(context, request) if len(profiles) == 1: location = '%s%s' % (chatter_url, profiles[0]['value']) return HTTPFound(location=location) profiles = [profile['value'] for profile in profiles] to_follow = {'members': _quippers_from_users(context, request, profiles)} return { 'api': TemplateAPI(context, request, 'Search users for following'), 'members': to_follow, 'context_tools': get_context_tools(request, selected='following'), 'chatter_url': chatter_url, 'page_title': 'Chatter: Search users for following' }
def evolve(site): """Add the chatterbox. """ chatter = find_chatter(site) if chatter is None: print "Adding chatterbox" site['chatter'] = Chatterbox()
def chatter_user_info(context, request, userid=None): chatter = find_chatter(context) chatter_url = resource_url(chatter, request) profiles = find_profiles(context) if userid is None: userid = request.GET.get('userid') if userid is None: userid = authenticated_userid(request) profile = profiles.get(userid) profile_url = profile and resource_url(profile, request) or None photo = profile and profile.get('photo') or None if photo is not None: photo_url = thumb_url(photo, request, CHATTER_THUMB_SIZE) else: photo_url = get_static_url(request) + "/images/defaultUser.gif" posts = sum(1 for p in chatter.recentWithCreators(*[userid])) following = sum(1 for u in chatter.listFollowed(userid)) followers = sum(1 for u in chatter.listFollowing(userid)) return { 'creator': getattr(profile, 'title', 'anonymous'), 'creator_url': '%s%s' % (chatter_url, userid), 'creator_profile_url': profile_url, 'creator_image_url': photo_url, 'creator_userid': userid, 'chatter_url': chatter_url, 'posts': posts, 'following': following, 'followers': followers }
def chatter_user_info(context, request, userid=None): chatter = find_chatter(context) chatter_url = resource_url(chatter, request) profiles = find_profiles(context) if userid is None: userid = request.GET.get('userid') if userid is None: userid = authenticated_userid(request) profile = profiles.get(userid) profile_url = profile and resource_url(profile, request) or None photo = profile and profile.get('photo') or None if photo is not None: photo_url = thumb_url(photo, request, CHATTER_THUMB_SIZE) else: photo_url = get_static_url(request) + "/images/defaultUser.gif" posts = sum(1 for p in chatter.recentWithCreators(*[userid])) following = sum(1 for u in chatter.listFollowed(userid)) followers = sum(1 for u in chatter.listFollowing(userid)) return {'creator': getattr(profile, 'title', 'anonymous'), 'creator_url': '%s%s' % (chatter_url, userid), 'creator_profile_url': profile_url, 'creator_image_url': photo_url, 'creator_userid': userid, 'chatter_url': chatter_url, 'posts': posts, 'following': following, 'followers': followers}
def chatter_tag_info(context, request, followed_tags, tag_list, tag=None): limit = 40 chatter = find_chatter(context) chatter_url = resource_url(chatter, request) return {'tag_list': tag_list[:limit], 'followed_tags': followed_tags, 'this_tag': tag, 'chatter_url': chatter_url}
def search_tags_json(context, request): chatter = find_chatter(context) tag = request.GET.get('term', '').lower() if tag.startswith('#'): tag = tag[1:] tags = chatter.recentTags() tags = [t for t in tags if t.startswith(tag)] return tags
def search_tags_json(context, request): chatter = find_chatter(context) tag = request.GET.get('term','').lower() if tag.startswith('#'): tag = tag[1:] tags = chatter.recentTags() tags = [t for t in tags if t.startswith(tag)] return tags
def my_communities_chatter(context, request): """ HTML wrapper for 'my_communities_chatter_json'. """ info = community_chatter_json(context, request) info['api'] = TemplateAPI(context, request, 'Chatter: My Communities') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url return info
def chatter_tag_info(context, request, followed_tags, tag_list, tag=None): limit = 40 chatter = find_chatter(context) chatter_url = resource_url(chatter, request) return { 'tag_list': tag_list[:limit], 'followed_tags': followed_tags, 'this_tag': tag, 'chatter_url': chatter_url }
def flat_conversation(request, quip_id, conversation=None): if conversation is None: conversation = [] chatter = find_chatter(request.context) replies = [reply for reply in chatter.recentInReplyTo(quip_id)] conversation.extend( [quip_info(request, *(reply, ))[0] for reply in replies]) for reply in replies: conversation = flat_conversation(request, reply.__name__, conversation) return conversation
def __init__(self, context, request): self.context = context self.request = request self.app_url = request.application_url # what if context is not traversable? if getattr(context, '__name__', None) is not None: self.context_url = request.resource_url(context) else: self.context_url = request.url self.portlets = [] self.settings = settings = request.registry.settings self.app_url = app_url = request.application_url if getattr(context, '__name__', '_no_name_') != '_no_name_': self.here_url = resource_url(context, request) self.site = find_site(context) chatter = find_chatter(context) self.chatter_url = resource_url(chatter, request) self.current_intranet = find_intranet(context) self.people_url = app_url + '/' + settings.get('people_path', 'people') self.profiles_url = app_url + '/profiles' self.project_name = settings.get('system_name', 'KARL') self.page_title = getattr(context, 'title', 'Page Title') self.userid = authenticated_userid(request) self.tinymce_height = 400 self.tinymce_width = 560 self.html_id_next = 0 self.client_components = set() self.js_devel_mode = asbool(settings.get('js_devel_mode', 'false')) if self.settings: self.kaltura_info = dict( enabled = self.settings.get( 'kaltura_enabled', False) in ('true', 'True'), partner_id = self.settings.get('kaltura_partner_id', ''), sub_partner_id = self.settings.get( 'kaltura_sub_partner_id', ''), admin_secret = self.settings.get('kaltura_admin_secret', ''), user_secret = self.settings.get('kaltura_user_secret', ''), kcw_uiconf_id = self.settings.get( 'kaltura_kcw_uiconf_id', '1000741'), player_uiconf_id = self.settings.get( 'kaltura_player_uiconf_id', ''), player_cache_st = self.settings.get( 'kaltura_player_cache_st', ''), local_user = self.userid, ) if not self.settings.get( 'kaltura_client_session', False) in ('true', 'True'): # Secrets will not be sent to client, instead session is handled on the server. self.kaltura_info['session_url'] = app_url + '/' + 'kaltura_create_session.json' else: self.kaltura_info = dict( enabled = False, )
def discover_people(context, request): """ View the list of users that share communities with the current user. """ chatter = find_chatter(context) share_with = discover_community_members_json(context, request) return {'api': TemplateAPI(context, request, 'Share communities with: %s' % share_with['userid']), 'members': share_with, 'context_tools': get_context_tools(request, selected='discover'), 'chatter_url': request.resource_url(chatter), }
def flat_conversation(request, quip_id, conversation=None): if conversation is None: conversation = [] chatter = find_chatter(request.context) replies = [reply for reply in chatter.recentInReplyTo(quip_id)] conversation.extend([quip_info(request, *(reply,))[0] for reply in replies]) for reply in replies: conversation = flat_conversation(request, reply.__name__, conversation) return conversation
def direct_messages(context, request): """ HTML wrapper for 'followed_chatter_json'. """ layout = request.layout_manager.layout info = direct_messages_json(context, request) info['api'] = TemplateAPI(context, request, 'Messages') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request, selected='messages') info['page_title'] = 'Chatter: Direct Messages' return info
def __init__(self, context, request): self.context = context self.request = request self.app_url = request.application_url # what if context is not traversable? if getattr(context, '__name__', None) is not None: self.context_url = request.resource_url(context) else: self.context_url = request.url self.portlets = [] self.settings = settings = request.registry.settings self.app_url = app_url = request.application_url if getattr(context, '__name__', '_no_name_') != '_no_name_': self.here_url = resource_url(context, request) self.site = find_site(context) chatter = find_chatter(context) self.chatter_url = resource_url(chatter, request) self.current_intranet = find_intranet(context) self.people_url = app_url + '/' + settings.get('people_path', 'people') self.profiles_url = app_url + '/profiles' self.project_name = settings.get('system_name', 'KARL') self.page_title = getattr(context, 'title', 'Page Title') self.userid = authenticated_userid(request) self.tinymce_height = 400 self.tinymce_width = 560 self.html_id_next = 0 self.client_components = set() self.js_devel_mode = asbool(settings.get('js_devel_mode', 'false')) if self.settings: self.kaltura_info = dict( enabled=self.settings.get('kaltura_enabled', False) in ('true', 'True'), partner_id=self.settings.get('kaltura_partner_id', ''), sub_partner_id=self.settings.get('kaltura_sub_partner_id', ''), admin_secret=self.settings.get('kaltura_admin_secret', ''), user_secret=self.settings.get('kaltura_user_secret', ''), kcw_uiconf_id=self.settings.get('kaltura_kcw_uiconf_id', '1000741'), player_uiconf_id=self.settings.get('kaltura_player_uiconf_id', ''), player_cache_st=self.settings.get('kaltura_player_cache_st', ''), local_user=self.userid, ) if not self.settings.get('kaltura_client_session', False) in ('true', 'True'): # Secrets will not be sent to client, instead session is handled on the server. self.kaltura_info[ 'session_url'] = app_url + '/' + 'kaltura_create_session.json' else: self.kaltura_info = dict(enabled=False, )
def latest_messages_users_json(context, request): userid = authenticated_userid(request) chatter = find_chatter(context) correspondents = chatter.recentCorrespondents(userid) latest = correspondents.keys() users = _quippers_from_users(context, request, latest) for user in users: timeago = correspondents[user['userid']]['timeago'] timeago = str(timeago.strftime(TIMEAGO_FORMAT)) user['timeago'] = timeago user['summary'] = '%s...' % correspondents[user['userid']]['summary'] sorted_users = sorted(users, key=itemgetter('timeago'), reverse=True) return sorted_users
def user_messages_json(context, request, correspondent=None): correspondent = request.GET.get('correspondent', correspondent) if correspondent is None: return [] chatter = find_chatter(context) userid = authenticated_userid(request) conversations = chatter.recentConversations(userid, correspondent) layout = request.layout_manager.layout return { 'correspondent': correspondent, 'template': layout.microtemplates['chatter_message_partial'], 'data': quip_info(request, *list(conversations)) }
def all_chatter(context, request): """ HTML wrapper for 'all_chatter_json'. """ layout = request.layout_manager.layout if layout is not None: layout.add_portlet('chatter.discover') info = all_chatter_json(context, request) info['api'] = TemplateAPI(context, request, 'All Chatter') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request, selected='discover') info['page_title'] = 'Chatter: Discover' return info
def quip_info(request, *quips): result = [] chatter = find_chatter(request.context) profiles = find_profiles(request.context) chatter_url = resource_url(chatter, request) userid = authenticated_userid(request) for quip in quips: quip_id = quip.__name__ creator = quip.creator reposter = None reposter_fullname = '' if quip.repost is not None: creator = quip.repost reposter = quip.creator profile = profiles.get(reposter) reposter_fullname = profile and profile.title or reposter reply = None if quip.reply in chatter: reply = quip_info(request, *(chatter[quip.reply], ))[0] profile = profiles.get(creator) photo = profile and profile.get('photo') or None creator_fullname = profile and profile.title or creator if photo is not None: photo_url = thumb_url(photo, request, CHATTER_THUMB_SIZE) else: photo_url = get_static_url(request) + "/images/defaultUser.gif" timeago = str(quip.created.strftime(TIMEAGO_FORMAT)) info = { 'text': quip.text, 'html': quip.html or quip.text, 'creator': creator, 'creator_fullname': creator_fullname, 'creator_url': '%s%s' % (chatter_url, quip.creator), 'creator_image_url': photo_url, 'is_current_user': creator == userid, 'reposter': reposter, 'reposter_fullname': reposter_fullname, 'reply': reply, 'timeago': timeago, 'names': list(quip.names), 'communities': list(quip.communities), 'tags': list(quip.tags), 'url': resource_url(quip, request), 'private': bool(getattr(quip, '__acl__', ())), 'quip_id': quip_id, } result.append(info) return result
def names_chatter(context, request): """ HTML wrapper for 'names_chatter_json'. """ try: info = names_chatter_json(context, request) except KeyError: return HTTPFound(location=resource_url(context, request)) info['api'] = TemplateAPI(context, request, 'Chatter: %s' % ', '.join(['@%s' % x for x in info['names']])) chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request) info['page_title'] = 'Chatter: %s' % ', '.join(['@%s' % x for x in info['names']]) return info
def discover_people(context, request): """ View the list of users that share communities with the current user. """ chatter = find_chatter(context) share_with = discover_community_members_json(context, request) return { 'api': TemplateAPI(context, request, 'Share communities with: %s' % share_with['userid']), 'members': share_with, 'context_tools': get_context_tools(request, selected='discover'), 'chatter_url': request.resource_url(chatter), }
def quip_info(request, *quips): result = [] chatter = find_chatter(request.context) profiles = find_profiles(request.context) chatter_url = resource_url(chatter, request) userid = authenticated_userid(request) for quip in quips: quip_id = quip.__name__ creator = quip.creator reposter = None reposter_fullname = '' if quip.repost is not None: creator = quip.repost reposter = quip.creator profile = profiles.get(reposter) reposter_fullname = profile and profile.title or reposter reply = None if quip.reply in chatter: reply = quip_info(request, *(chatter[quip.reply],))[0] profile = profiles.get(creator) photo = profile and profile.get('photo') or None creator_fullname = profile and profile.title or creator if photo is not None: photo_url = thumb_url(photo, request, CHATTER_THUMB_SIZE) else: photo_url = get_static_url(request) + "/images/defaultUser.gif" timeago = str(quip.created.strftime(TIMEAGO_FORMAT)) info = {'text': quip.text, 'html': quip.html or quip.text, 'creator': creator, 'creator_fullname': creator_fullname, 'creator_url': '%s%s' % (chatter_url, quip.creator), 'creator_image_url': photo_url, 'is_current_user': creator == userid, 'reposter': reposter, 'reposter_fullname': reposter_fullname, 'reply': reply, 'timeago': timeago, 'names': list(quip.names), 'communities': list(quip.communities), 'tags': list(quip.tags), 'url': resource_url(quip, request), 'private': bool(getattr(quip, '__acl__', ())), 'quip_id': quip_id, } result.append(info) return result
def quip_view(context, request): """ View a single quip """ layout = request.layout_manager.layout if layout is not None: layout.add_portlet('chatter.user_info', context.creator) chatter_url = resource_url(find_chatter(context), request) chatter_url = chatter_url chatter_form_url = '%sadd_chatter.html' % chatter_url conversation = flat_conversation(request, context.__name__) return {'quip': quip_info(request, *[context])[0], 'context_tools': get_context_tools(request, selected='posts'), 'page_title': 'Chatter: Quip', 'chatter_url': chatter_url, 'conversation': conversation, 'chatter_form_url': chatter_form_url, }
def add_followed_tags(context, request): """ Add a tag to the list of tags followed by the current user. The form data must include the following: - 'add': a new tag to add to the list. """ chatter = find_chatter(context) userid = authenticated_userid(request) add = request.GET.get('add') if add is not None: following = list(chatter.listFollowedTags(userid)) if add not in following: following.append(add) chatter.setFollowedTags(userid, following) location = resource_url(context, request, 'followed_tags.html') return HTTPFound(location=location)
def all_chatter_json(context, request): """ Return *all* recent chatter. Query string may include: - 'start': the item index at which to begin including items. - 'count': the maximun number of items to return. - 'before': a string timestamp (in timeago format); include items which are older than the indicated time. - 'since': a string timestamp (in timeago format); include items which are newer than the indicated time. Note that we return the *last* 'count' items newer than the supplied value. """ chatter = find_chatter(context) return {'recent': _do_slice(chatter.recent(), request), }
def remove_followed_tags(context, request): """ Remove a tag from the list of tags followed by the current user. The form data must include the following: - 'remove': a tag to remove from the list. """ chatter = find_chatter(context) userid = authenticated_userid(request) remove = request.GET.get('remove') if remove is not None: following = list(chatter.listFollowedTags(userid)) if remove in following: following.remove(remove) chatter.setFollowedTags(userid, following) location = resource_url(context, request, 'followed_tags.html') return HTTPFound(location=location)
def names_chatter(context, request): """ HTML wrapper for 'names_chatter_json'. """ try: info = names_chatter_json(context, request) except KeyError: return HTTPFound(location=resource_url(context, request)) info['api'] = TemplateAPI( context, request, 'Chatter: %s' % ', '.join(['@%s' % x for x in info['names']])) chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request) info['page_title'] = 'Chatter: %s' % ', '.join( ['@%s' % x for x in info['names']]) return info
def followed_tags_json(context, request): """ View the list of tags whom a given user is following. Query string may include: - 'userid': the user for whom to enumerate followed tags. If not passed, defaults to the current user. """ chatter = find_chatter(context) chatter_url = resource_url(chatter, request) profiles = find_profiles(context) userid = request.GET.get('userid') if userid is None: userid = authenticated_userid(request) tag_list = sorted(chatter.listFollowedTags(userid)) return {'tag_list': tag_list, }
def all_chatter_json(context, request): """ Return *all* recent chatter. Query string may include: - 'start': the item index at which to begin including items. - 'count': the maximun number of items to return. - 'before': a string timestamp (in timeago format); include items which are older than the indicated time. - 'since': a string timestamp (in timeago format); include items which are newer than the indicated time. Note that we return the *last* 'count' items newer than the supplied value. """ chatter = find_chatter(context) return { 'recent': _do_slice(chatter.recent(), request), }
def followed_tag_chatter_json(context, request): """ Return recent chatter with tags followed by current user. Query string may include: - 'start': the item index at which to begin including items. - 'count': the maximun number of items to return. - 'before': a string timestamp (in timeago format); include items which are older than the indicated time. - 'since': a string timestamp (in timeago format); include items which are newer than the indicated time. Note that we return the *last* 'count' items newer than the supplied value. """ chatter = find_chatter(context) userid = authenticated_userid(request) messages = _do_slice(chatter.recentFollowedTags(userid), request) return {'recent': messages}
def followed_tags_json(context, request): """ View the list of tags whom a given user is following. Query string may include: - 'userid': the user for whom to enumerate followed tags. If not passed, defaults to the current user. """ chatter = find_chatter(context) chatter_url = resource_url(chatter, request) profiles = find_profiles(context) userid = request.GET.get('userid') if userid is None: userid = authenticated_userid(request) tag_list = sorted(chatter.listFollowedTags(userid)) return { 'tag_list': tag_list, }
def quip_view(context, request): """ View a single quip """ layout = request.layout_manager.layout if layout is not None: layout.add_portlet('chatter.user_info', context.creator) chatter_url = resource_url(find_chatter(context), request) chatter_url = chatter_url chatter_form_url = '%sadd_chatter.html' % chatter_url conversation = flat_conversation(request, context.__name__) return { 'quip': quip_info(request, *[context])[0], 'context_tools': get_context_tools(request, selected='posts'), 'page_title': 'Chatter: Quip', 'chatter_url': chatter_url, 'conversation': conversation, 'chatter_form_url': chatter_form_url, }
def global_nav(context, request): def menu_item(title, url, id=None, count=None, secondary=None): if id is None: id = make_name(EMPTY_CONTEXT, title) selected = request.resource_url(context).startswith(url) if secondary is not None and not selected: selected = request.resource_url(context).startswith(secondary) item = dict(title=title, url=url, id=id, selected=selected and 'selected' or None) if count is not None: item['count'] = count return item layout = request.layout_manager.layout site = layout.site menu_items = [ menu_item("Communities", request.resource_url(site, 'communities')), menu_item("People", layout.people_url, secondary=layout.profiles_url), menu_item("Feeds", request.resource_url(site, 'contentfeeds.html')), ] intranets = find_intranets(site) if layout.current_intranet is not None: menu_items.insert( 0, menu_item("Intranet", request.resource_url(intranets))) if layout.should_show_calendar_tab: menu_items.append( menu_item("Calendar", request.resource_url(site, 'offices', 'calendar'))) if layout.user_is_staff: menu_items.append( menu_item("Tags", request.resource_url(site, 'tagcloud.html'), id='tagcloud')) chatter = find_chatter(site) menu_items.append(menu_item("Chatter", request.resource_url(chatter))) # XXX Radar is disabled for the time. ## menu_items.append(menu_item("Radar", "#", count="7")) overflow_menu = [] #if layout.user_is_staff: # overflow_menu.append(menu_item("Tags", # request.resource_url(site, 'tagcloud.html'), id='tagcloud')) return {'nav_menu': menu_items, 'overflow_menu': overflow_menu}
def update_followed_tags(context, request): """ View / update the list of tags followed by the current user. If posted, the form data must include the following: - 'followed': a newline-separated list of tags. """ chatter = find_chatter(context) userid = authenticated_userid(request) followed = request.POST.get('followed') if followed is not None: followed = filter(None, followed.splitlines()) chatter.setFollowedTags(userid, followed) location = resource_url(context, request) return HTTPFound(location=location) return {'api': TemplateAPI(context, request, 'Followed by: %s' % userid), 'followed': '\n'.join(chatter.listFollowed(userid)), 'view_url': resource_url(context, request, request.view_name), }
def search_chatter(context, request): """ HTML wrapper for 'search_chatter_json'. """ layout = request.layout_manager.layout if layout is not None: layout.add_portlet('chatter.user_info') layout.add_portlet('chatter.search') info = search_chatter_json(context, request) info['api'] = TemplateAPI(context, request, 'Posts') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request) info['page_title'] = 'Chatter: Search' info['pushdown'] = False info['inline'] = False info['subtitle'] = "Search results for: %s" % info['query'] info['omit_post_box'] = True return info