Example #1
0
File: chatter.py Project: hj91/karl
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
Example #2
0
File: chatter.py Project: zagy/karl
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
Example #3
0
File: chatter.py Project: zagy/karl
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
Example #4
0
File: chatter.py Project: zagy/karl
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,
    }
Example #5
0
File: chatter.py Project: hj91/karl
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
Example #6
0
File: chatter.py Project: hj91/karl
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
Example #7
0
File: chatter.py Project: hj91/karl
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
Example #8
0
File: chatter.py Project: hj91/karl
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,
           }
Example #9
0
File: chatter.py Project: hj91/karl
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,
           }
Example #10
0
File: chatter.py Project: zagy/karl
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
Example #11
0
File: chatter.py Project: hj91/karl
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'
           }
Example #12
0
File: chatter.py Project: zagy/karl
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,
    }
Example #13
0
File: chatter.py Project: zagy/karl
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,
    }
Example #14
0
File: chatter.py Project: zagy/karl
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
Example #15
0
File: chatter.py Project: hj91/karl
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
Example #16
0
File: chatter.py Project: zagy/karl
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
Example #17
0
File: chatter.py Project: zagy/karl
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'
    }
Example #18
0
def evolve(site):
    """Add the chatterbox.
    """
    chatter = find_chatter(site)
    if chatter is None:
        print "Adding chatterbox"
        site['chatter'] = Chatterbox()
Example #19
0
File: panels.py Project: hj91/karl
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}
Example #22
0
File: chatter.py Project: zagy/karl
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
Example #23
0
File: chatter.py Project: hj91/karl
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
Example #24
0
File: chatter.py Project: zagy/karl
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
Example #25
0
File: chatter.py Project: hj91/karl
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
Example #26
0
File: panels.py Project: hj91/karl
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
    }
Example #27
0
File: chatter.py Project: zagy/karl
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
Example #28
0
File: layout.py Project: hj91/karl
    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,
                )
Example #29
0
File: chatter.py Project: hj91/karl
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),
           }
Example #30
0
File: chatter.py Project: hj91/karl
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
Example #31
0
File: chatter.py Project: zagy/karl
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
Example #32
0
File: chatter.py Project: hj91/karl
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
Example #33
0
File: layout.py Project: hj91/karl
    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, )
Example #34
0
File: chatter.py Project: zagy/karl
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
Example #35
0
File: chatter.py Project: zagy/karl
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))
    }
Example #36
0
File: chatter.py Project: hj91/karl
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
Example #37
0
File: chatter.py Project: hj91/karl
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))
        }
Example #38
0
File: chatter.py Project: hj91/karl
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
Example #39
0
File: chatter.py Project: zagy/karl
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
Example #40
0
File: chatter.py Project: zagy/karl
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
Example #41
0
File: chatter.py Project: hj91/karl
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
Example #42
0
File: chatter.py Project: zagy/karl
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),
    }
Example #43
0
File: chatter.py Project: hj91/karl
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
Example #44
0
File: chatter.py Project: hj91/karl
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,
           }
Example #45
0
File: chatter.py Project: hj91/karl
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)
Example #46
0
File: chatter.py Project: hj91/karl
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),
           }
Example #47
0
File: chatter.py Project: zagy/karl
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)
Example #48
0
File: chatter.py Project: hj91/karl
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)
Example #49
0
File: chatter.py Project: zagy/karl
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
Example #50
0
File: chatter.py Project: zagy/karl
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)
Example #51
0
File: chatter.py Project: hj91/karl
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,
           }
Example #52
0
File: chatter.py Project: zagy/karl
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),
    }
Example #53
0
File: chatter.py Project: zagy/karl
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}
Example #54
0
File: chatter.py Project: hj91/karl
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}
Example #55
0
File: chatter.py Project: zagy/karl
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,
    }
Example #56
0
File: chatter.py Project: zagy/karl
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,
    }
Example #57
0
File: panels.py Project: zagy/karl
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}
Example #58
0
File: chatter.py Project: hj91/karl
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),
           }
Example #59
0
File: chatter.py Project: hj91/karl
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