Пример #1
0
def jquery_clear_preferred_view(context, request):
    request.response.cache_expires = 0
    communities_folder = find_communities(context)
    set_preferred_communities(communities_folder, request, None)
    updated_communities = get_my_communities(communities_folder, request)
    return {'api': TemplateAPI(context, request),
            'my_communities': updated_communities,
            'preferred': None,
            'show_all': False,
            'profile': None,
            'status_message': _(u'Cleared preferred communities.')}
Пример #2
0
def jquery_set_preferred_view(context, request):
    request.response.cache_expires = 0
    communities_folder = find_communities(context)
    communities = request.params.getall('preferred[]')
    set_preferred_communities(communities_folder, request, communities)
    updated_communities = get_my_communities(communities_folder, request)
    return {'api': TemplateAPI(context, request),
            'my_communities': updated_communities,
            'preferred': communities,
            'show_all': False,
            'profile': None,
            'status_message': _(u'Set preferred communities.')}
Пример #3
0
def myprofile_ajax_view(context, request):
    results = {}
    # template provision
    if request.params.get('needsTemplate', 'false') in ('true', 'True'):
        # We need the template. So, let's fetch it.
        layout = request.layout_manager.layout
        results['microtemplate'] = layout.microtemplates['myprofile']
        results['partials'] = []
    # Fetch the data

    # 2nd column: my communities (preferred communities)
    communities_folder = find_communities(context)
    communities = get_my_communities(communities_folder, request)
    communities = sorted(communities,
                         key=attrgetter('last_activity_date'),
                         reverse=True)
    communities_info = [
        dict(
            title=community.title,
            description=community.description,
            url=community.url,
            actions=[
                dict(
                    url=community.url +
                    (a_name if a_name != 'overview' else 'view.html'),
                    title=a_name.capitalize(),
                    last=a_name == 'wiki',
                )
                for a_name in ('overview', 'blog', 'calendar', 'files', 'wiki')
            ],
        ) for community in communities[:5]
    ]

    # 3rd column: My Recent Activity
    recent_items = []
    recent_items_batch = get_catalog_batch(
        context,
        request,
        batch_size=5,
        interfaces=[ICommunityContent],
        sort_index="modified_date",
        reverse=True,
        modified_by=authenticated_userid(request),
        allowed={
            'query': effective_principals(request),
            'operator': 'or'
        })

    for item in recent_items_batch["entries"]:
        adapted = getMultiAdapter((item, request), IGridEntryInfo)
        community = find_community(item)
        if community is not None:
            community_adapter = getMultiAdapter((community, request),
                                                ICommunityInfo)
            community_info = dict(
                url=community_adapter.url,
                title=community_adapter.title,
            )
        else:
            community_info = None
        # Since this is json, we need a real dict...
        recent_items.append(
            dict(
                title=adapted.title,
                url=adapted.url,
                modified=item.modified.strftime('%Y-%m-%dT%H:%M:%S'),
                creator_title=adapted.creator_title,
                type=adapted.type,
                community=community_info,
            ))

    profiles = find_profiles(request.context)
    userid = authenticated_userid(request)
    profile = profiles.get(userid)

    photo = profile.get('photo')
    if photo is not None:
        icon_url = thumb_url(photo, request, (45, 60))
    else:
        icon_url = request.static_url(
            'karl.views:static/images/defaultUser.gif')
    # Assemble the final result.
    results['data'] = {
        'profile_name':
        profile.title,
        'profile_url':
        request.resource_url(profile),
        'icon_url':
        icon_url,
        'logout_url':
        "%s/logout.html" % request.application_url,
        'department':
        profile.department,
        'position':
        profile.position,
        'email':
        profile.email,
        'extension':
        profile.extension,
        'phone':
        profile.phone,
        'panels': [{
            'class': 'mycommunities',
            'title': 'My Active Communities',
            'communities': communities_info,
        }, {
            'class': 'myrecentitems',
            'title': 'My Recent Activity',
            'contexts': recent_items,
        }],
    }

    return results
Пример #4
0
def radar_ajax_view(context, request):
    # Example result set, for demonstrating the widget without
    # a real server database.
    results = {}
    # Datetime of the current search. (The client will pass it back
    # to us the next time, and we can decide if an update is needed)
    now = datetime.datetime.now()
    now_iso = now.isoformat()
    results['ts'] = now_iso
    ts_iso = request.params.get('ts', '')
    # template provision
    if request.params.get('needsTemplate', 'false') in ('true', 'True'):
        # We need the template. So, let's fetch it.
        layout = request.layout_manager.layout
        results['microtemplate'] = layout.microtemplates['radar']
        results['partials'] = []
    # Sometimes there is no need for an update. The server can just return
    # empty data. A condition is that a ts parameter is sent to us. The
    # other condition (does the client need an update?) is now simulated
    # with a random choice.
    if ts_iso and random.choice([False, True]):
        results['data'] = None
    else:
        # Fetch the data

        # 2nd column: my communities (preferred communities)
        communities_folder = find_communities(context)
        communities = get_my_communities(communities_folder, request)
        communities_info = [
            dict(
                title=community.title,
                description=community.description,
                url=community.url,
                actions=[
                    dict(
                        url=community.url +
                        (a_name if a_name != 'overview' else 'view.html'),
                        title=a_name.capitalize(),
                        last=a_name == 'files',
                    ) for a_name in ('overview', 'blog', 'calendar', 'files',
                                     'wiki')
                ],
            ) for community in communities[:5]
        ]

        # 3rd column: My Recent Activity
        recent_items = []
        recent_items_batch = get_catalog_batch(
            context,
            request,
            batch_size=5,
            interfaces=[ICommunityContent],
            sort_index="modified_date",
            reverse=True,
            modified_by=authenticated_userid(request),
            allowed={
                'query': effective_principals(request),
                'operator': 'or'
            })

        for item in recent_items_batch["entries"]:
            adapted = getMultiAdapter((item, request), IGridEntryInfo)
            community = find_community(item)
            if community is not None:
                community_adapter = getMultiAdapter((community, request),
                                                    ICommunityInfo)
                community_info = dict(
                    url=community_adapter.url,
                    title=community_adapter.title,
                )
            else:
                community_info = None
            # Since this is json, we need a real dict...
            recent_items.append(
                dict(
                    title=adapted.title,
                    url=adapted.url,
                    modified=adapted.modified,
                    creator_title=adapted.creator_title,
                    type=adapted.type,
                    community=community_info,
                ))

        # Provide fake "approval items" for the "approvals" tab.

        approval_waitinglist_items = [{
            'title':
            'Approval Waiting List',
            'group': [{
                'title': 'e-Payment',
                'count': 0,
                'id': 'table1'
            }, {
                'title': 'Grant Payment',
                'count': 2,
                'id': 'table2'
            }, {
                'title': 'Contract Review',
                'count': 3,
            }, {
                'title': 'Contract Approval',
                'count': 2,
            }, {
                'title': 'Contract Payment',
                'count': 1,
            }, {
                'title': 'Hardware / Software Request',
                'count': 4,
            }]
        }, {
            'title':
            'Payment Waiting List',
            'group': [{
                'title': 'e-Payment',
                'count': 0,
            }, {
                'title': 'Grant Payment',
                'count': 133,
            }, {
                'title': 'Contract Payment',
                'count': 116,
            }]
        }, {
            'title':
            'Accrual Waiting List',
            'group': [{
                'title': 'Grant Accrual',
                'count': 7,
            }]
        }, {
            'title':
            'Fixed Assets Waiting List',
            'group': [{
                'title': 'e-Approval',
                'count': 7,
            }, {
                'title': 'e-Bridge for Posting',
                'count': 3,
            }]
        }]

        approval_table1_items = [{
            'amt': '45.09',
            'via': 'Check',
            'approvedBy': 'Some Person',
            'status': 'Approved',
            'statusDate': '02/09/2012',
            'overdueBy': '13',
        }, {
            'amt': '13.00',
            'via': 'Wire',
            'approvedBy': 'Another Person',
            'status': 'Submitted',
            'statusDate': '02/14/2012',
            'overdueBy': '16',
        }, {
            'amt': '71.21',
            'via': 'Check',
            'approvedBy': 'Last Person',
            'status': 'Approved',
            'statusDate': '02/13/2012',
            'overdueBy': '18',
        }]

        for i, row in enumerate(approval_table1_items):
            row['rowClass'] = 'even' if i % 2 else 'odd'

        import copy
        approval_table2_items = 2 * copy.deepcopy(approval_table1_items)
        for i, row in enumerate(approval_table2_items):
            row['rowClass'] = 'even' if i % 2 else 'odd'

        # Assemble the final result.
        results['data'] = {
            # home section
            'home': [{
                'class': 'homepanel1',
                'title': 'My Communities',
                'communities': communities_info,
            }, {
                'class': 'homepanel2',
                'title': 'My Recent Activity',
                'contexts': recent_items,
            }],
            # approvals section
            'approvals': [{
                'class': 'approvalpanel1',
                'waitinglist': {
                    'items': approval_waitinglist_items,
                },
            }, {
                'class':
                'approvalpanel2',
                'tables': [{
                    'id': 'table1',
                    'title': 'Open Project Project',
                    'items': approval_table1_items,
                }, {
                    'id': 'table2',
                    'title': 'Very Open Project',
                    'items': approval_table2_items,
                }],
            }],
        }

        results['state'] = {
            'chart1': {
                'options': {
                    'title': 'Company Performance',
                    'hAxis': {
                        'title': 'Year',
                        'titleTextStyle': {
                            'color': 'red'
                        },
                    },
                    'width': 200,  # Must have fixed width! (matching css)
                },
                'columns': [
                    ['string', 'Year'],
                    ['number', 'Sales'],
                    ['number', 'Expenses'],
                ],
                'rows': [
                    ['2004', 1000, 400],
                    ['2005', 1170, 460],
                    ['2006', 660, 1120],
                    ['2007', 1030, 540],
                ],
            },
            'chart2': {
                'options': {
                    'title': 'Monthly Operating Revenue',
                    'hAxis': {
                        'title': 'Project',
                        'titleTextStyle': {
                            'color': 'red'
                        },
                    },
                    'width': 400,  # Must have fixed width! (matching css)
                },
                'columns': [
                    ['string', 'Project'],
                    ['number', 'Budgeted'],
                    ['number', 'Actual'],
                ],
                'rows': [
                    ['My First Project', 1000, 400],
                    ['Another Project', 1170, 460],
                    ['A Third Project', 660, 1120],
                ],
            },
        }

    return results
Пример #5
0
def show_profile_view(context, request):
    """Show a profile with actions if the current user"""
    page_title = 'View Profile'
    api = TemplateAPI(context, request, page_title)

    # Create display values from model object
    profile = {}
    for name in [name for name in context.__dict__.keys()
                 if not name.startswith("_")]:
        profile_value = getattr(context, name)
        if profile_value is not None:
            # Don't produce u'None'
            profile[name] = unicode(profile_value)
        else:
            profile[name] = None

    if 'fax' not in profile:
        profile['fax'] = '' # BBB

    # 'websites' is a property, so the loop above misses it
    profile["websites"] = context.websites

    # ditto for 'title'
    profile["title"] = context.title

    if profile.has_key("languages"):
        profile["languages"] = context.languages

    if profile.has_key("department"):
        profile["department"] = context.department

    if profile.get("last_login_time"):
        stamp = context.last_login_time.strftime('%Y-%m-%dT%H:%M:%SZ')
        profile["last_login_time"] = stamp

    if profile.has_key("country"):
        # translate from country code to country name
        country_code = profile["country"]
        country = countries.as_dict.get(country_code, u'')
        profile["country"] = country

    # Display portrait
    photo = context.get('photo')
    display_photo = {}
    if photo is not None:
        display_photo["url"] = thumb_url(photo, request, PROFILE_THUMB_SIZE)
    else:
        display_photo["url"] = api.static_url + "/images/defaultUser.gif"
    profile["photo"] = display_photo

    # provide client data for rendering current tags in the tagbox
    client_json_data = dict(
        tagbox = get_tags_client_data(context, request),
        )

    # Get communities this user is a member of, along with moderator info
    #
    communities = {}
    communities_folder = find_communities(context)
    user_info = find_users(context).get_by_id(context.__name__)
    if user_info is not None:
        for group in user_info["groups"]:
            if group.startswith("group.community:"):
                unused, community_name, role = group.split(":")
                if (communities.has_key(community_name) and
                    role != "moderators"):
                    continue

                community = communities_folder.get(community_name, None)
                if community is None:
                    continue

                if has_permission('view', community, request):
                    communities[community_name] = {
                        "title": community.title,
                        "moderator": role == "moderators",
                        "url": resource_url(community, request),
                    }

    communities = communities.values()
    communities.sort(key=lambda x:x["title"])

    preferred_communities = []
    my_communities = None
    name = context.__name__
    # is this the current user's profile?
    if authenticated_userid(request) == name:
        preferred_communities = get_preferred_communities(communities_folder,
                                                          request)
        my_communities = get_my_communities(communities_folder, request)

    tagger = find_tags(context)
    if tagger is None:
        tags = ()
    else:
        tags = []
        names = tagger.getTags(users=[context.__name__])
        for name, count in sorted(tagger.getFrequency(names,
                                                      user=context.__name__),
                                  key=lambda x: x[1],
                                  reverse=True,
                                 )[:10]:
            tags.append({'name': name, 'count': count})

    # List recently added content
    num, docids, resolver = ICatalogSearch(context)(
        sort_index='creation_date', reverse=True,
        interfaces=[IContent], limit=5, creator=context.__name__,
        allowed={'query': effective_principals(request), 'operator': 'or'},
        )
    recent_items = []
    for docid in docids:
        item = resolver(docid)
        if item is None:
            continue
        adapted = getMultiAdapter((item, request), IGridEntryInfo)
        recent_items.append(adapted)

    return render_to_response(
        'templates/profile.pt',
        dict(api=api,
             profile=profile,
             actions=get_profile_actions(context, request),
             photo=photo,
             head_data=convert_to_script(client_json_data),
             communities=communities,
             my_communities=my_communities,
             preferred_communities=preferred_communities,
             tags=tags,
             recent_items=recent_items),
        request=request,
        )
Пример #6
0
def show_profile_view(context, request):
    """Show a profile with actions if the current user"""
    page_title = "Profile: %s" % context.title
    api = TemplateAPI(context, request, page_title)

    # Create display values from model object
    profile = {}
    for name in [
            name for name in context.__dict__.keys()
            if not name.startswith("_")
    ]:
        profile_value = getattr(context, name)
        if profile_value is not None:
            # Don't produce u'None'
            profile[name] = unicode(profile_value)
        else:
            profile[name] = None

    if 'fax' not in profile:
        profile['fax'] = ''  # BBB

    # 'websites' is a property, so the loop above misses it
    profile["websites"] = context.websites

    # ditto for 'title'
    profile["title"] = context.title

    if profile.has_key("languages"):
        profile["languages"] = context.languages

    if profile.has_key("department"):
        profile["department"] = context.department

    if profile.get("last_login_time"):
        stamp = context.last_login_time.strftime('%Y-%m-%dT%H:%M:%SZ')
        profile["last_login_time"] = stamp

    if profile.has_key("country"):
        # translate from country code to country name
        country_code = profile["country"]
        country = countries.as_dict.get(country_code, u'')
        profile["country"] = country

    # Display portrait
    photo = context.get('photo')
    display_photo = {}
    if photo is not None:
        display_photo["url"] = thumb_url(photo, request, PROFILE_THUMB_SIZE)
    else:
        display_photo["url"] = api.static_url + "/images/defaultUser.gif"
    profile["photo"] = display_photo

    # provide client data for rendering current tags in the tagbox
    client_json_data = dict(tagbox=get_tags_client_data(context, request), )

    # Get communities this user is a member of, along with moderator info
    #
    communities = {}
    communities_folder = find_communities(context)
    user_info = find_users(context).get_by_id(context.__name__)
    if user_info is not None:
        for group in user_info["groups"]:
            if group.startswith("group.community:"):
                unused, community_name, role = group.split(":")
                if (communities.has_key(community_name)
                        and role != "moderators"):
                    continue

                community = communities_folder.get(community_name, None)
                if community is None:
                    continue

                if has_permission('view', community, request):
                    communities[community_name] = {
                        "title": community.title,
                        "moderator": role == "moderators",
                        "url": resource_url(community, request),
                    }

    communities = communities.values()
    communities.sort(key=lambda x: x["title"])

    preferred_communities = []
    my_communities = None
    name = context.__name__
    # is this the current user's profile?
    if authenticated_userid(request) == name:
        preferred_communities = get_preferred_communities(
            communities_folder, request)
        my_communities = get_my_communities(communities_folder, request)

    tagger = find_tags(context)
    if tagger is None:
        tags = ()
    else:
        tags = []
        names = tagger.getTags(users=[context.__name__])
        for name, count in sorted(
                tagger.getFrequency(names, user=context.__name__),
                key=lambda x: x[1],
                reverse=True,
        )[:10]:
            tags.append({'name': name, 'count': count})

    # List recently added content
    num, docids, resolver = ICatalogSearch(context)(
        sort_index='creation_date',
        reverse=True,
        interfaces=[IContent],
        limit=5,
        creator=context.__name__,
        allowed={
            'query': effective_principals(request),
            'operator': 'or'
        },
    )
    recent_items = []
    for docid in docids:
        item = resolver(docid)
        if item is None:
            continue
        adapted = getMultiAdapter((item, request), IGridEntryInfo)
        recent_items.append(adapted)
    recent_url = request.resource_url(context, 'recent_content.html')

    return dict(api=api,
                profile=profile,
                actions=get_profile_actions(context, request),
                photo=photo,
                head_data=convert_to_script(client_json_data),
                communities=communities,
                my_communities=my_communities,
                preferred_communities=preferred_communities,
                tags=tags,
                recent_items=recent_items,
                recent_url=recent_url)
Пример #7
0
                        'description': description,
                        'href': urlname,
                        'selected': name == view_cookie,
                       })

    actions = []
    if has_permission('create', context, request):
        actions.append((_(u'Add Community'), 'add_community.html'))

    system_name = get_setting(context, 'system_name', 'KARL')

    page_title = _(u'Communities ${prefix}${system_name}',
                                    mapping={'prefix': prefix,
                                             'system_name': system_name})

    my_communities = get_my_communities(context, request)

    preferred_communities = get_preferred_communities(context, request)

    return {'communities': communities,
            'batch_info': batch_info,
            'letters': letter_info,
            'community_tabs': classes,
            'actions': actions,
            'my_communities': my_communities,
            'preferred_communities': preferred_communities,
            'api': TemplateAPI(context, request, page_title),
            'profile': None,
            'qualifiers': qualifiers,
            'error': error,
           }
 def _callFUT(self, context, request):
     from karl.views.communities import get_my_communities
     return get_my_communities(context, request)
Пример #9
0
 def _callFUT(self, context, request):
     from karl.views.communities import get_my_communities
     return get_my_communities(context, request)
Пример #10
0
def myprofile_ajax_view(context, request):
    results = {}
    # template provision
    if request.params.get('needsTemplate', 'false') in ('true', 'True'):
        # We need the template. So, let's fetch it.
        layout = request.layout_manager.layout
        results['microtemplate'] = layout.microtemplates['myprofile']
        results['partials'] = []
    # Fetch the data

    # 2nd column: my communities (preferred communities)
    communities_folder = find_communities(context)
    communities = get_my_communities(communities_folder, request)
    communities = sorted(communities,
                         key=attrgetter('last_activity_date'),
                         reverse=True)
    communities_info = [
        dict(
            title=community.title,
            description=community.description,
            url=community.url,
            actions=[dict(
                url=community.url + (a_name if a_name != 'overview' else 'view.html'),
                title=a_name.capitalize(),
                last=a_name == 'wiki',
                ) for a_name in ('overview', 'blog', 'calendar', 'files', 'wiki')],
        )
        for community in communities[:5]
    ]

    # 3rd column: My Recent Activity
    recent_items = []
    recent_items_batch = get_catalog_batch(context, request, batch_size=5,
        interfaces=[ICommunityContent], sort_index="modified_date",
        reverse=True, modified_by=authenticated_userid(request),
        allowed={'query': effective_principals(request), 'operator': 'or'})

    for item in recent_items_batch["entries"]:
        adapted = getMultiAdapter((item, request), IGridEntryInfo)
        community = find_community(item)
        if community is not None:
            community_adapter = getMultiAdapter((community, request),
                                                ICommunityInfo)
            community_info = dict(
                url=community_adapter.url,
                title=community_adapter.title,
            )
        else:
            community_info = None
        # Since this is json, we need a real dict...
        recent_items.append(dict(
            title=adapted.title,
            url=adapted.url,
            modified=item.modified.strftime('%Y-%m-%dT%H:%M:%S'),
            creator_title=adapted.creator_title,
            type=adapted.type,
            community=community_info,
            ))

    profiles = find_profiles(request.context)
    userid = authenticated_userid(request)
    profile = profiles.get(userid)

    photo = profile.get('photo')
    if photo is not None:
        icon_url = thumb_url(photo, request, (45,60))
    else:
        icon_url = request.static_url('karl.views:static/images/defaultUser.gif')
    # Assemble the final result.
    results['data'] = {
        'profile_name': profile.title,
        'profile_url': request.resource_url(profile),
        'icon_url': icon_url,
        'logout_url': "%s/logout.html" % request.application_url,
        'department': profile.department,
        'position': profile.position,
        'email': profile.email,
        'extension': profile.extension,
        'phone': profile.phone,
        'panels': [{
            'class': 'mycommunities',
            'title': 'My Active Communities',
            'communities': communities_info,
            }, {
            'class': 'myrecentitems',
            'title': 'My Recent Activity',
            'contexts': recent_items,
            }],
        }

    return results
Пример #11
0
def radar_ajax_view(context, request):
    # Example result set, for demonstrating the widget without
    # a real server database.
    results = {}
    # Datetime of the current search. (The client will pass it back
    # to us the next time, and we can decide if an update is needed)
    now = datetime.datetime.now()
    now_iso = now.isoformat()
    results['ts'] = now_iso
    ts_iso = request.params.get('ts', '')
    # template provision
    if request.params.get('needsTemplate', 'false') in ('true', 'True'):
        # We need the template. So, let's fetch it.
        layout = request.layout_manager.layout
        results['microtemplate'] = layout.microtemplates['radar']
        results['partials'] = []
    # Sometimes there is no need for an update. The server can just return
    # empty data. A condition is that a ts parameter is sent to us. The
    # other condition (does the client need an update?) is now simulated
    # with a random choice.
    if ts_iso and random.choice([False, True]):
        results['data'] = None
    else:
        # Fetch the data

        # 2nd column: my communities (preferred communities)
        communities_folder = find_communities(context)
        communities = get_my_communities(communities_folder, request)
        communities_info = [
            dict(
                title=community.title,
                description=community.description,
                url=community.url,
                actions=[dict(
                    url=community.url + (a_name if a_name != 'overview' else 'view.html'),
                    title=a_name.capitalize(),
                    last=a_name == 'files',
                    ) for a_name in ('overview', 'blog', 'calendar', 'files', 'wiki')],
            )
            for community in communities[:5]
        ]

        # 3rd column: My Recent Activity
        recent_items = []
        recent_items_batch = get_catalog_batch(context, request, batch_size=5,
            interfaces=[ICommunityContent], sort_index="modified_date",
            reverse=True, modified_by=authenticated_userid(request),
            allowed={'query': effective_principals(request), 'operator': 'or'})

        for item in recent_items_batch["entries"]:
            adapted = getMultiAdapter((item, request), IGridEntryInfo)
            community = find_community(item)
            if community is not None:
                community_adapter = getMultiAdapter((community, request), ICommunityInfo)
                community_info = dict(
                    url=community_adapter.url,
                    title=community_adapter.title,
                )
            else:
                community_info = None
            # Since this is json, we need a real dict...
            recent_items.append(dict(
                title=adapted.title,
                url=adapted.url,
                modified=adapted.modified,
                creator_title=adapted.creator_title,
                type=adapted.type,
                community=community_info,
                ))

        # Provide fake "approval items" for the "approvals" tab.

        approval_waitinglist_items = [{
            'title': 'Approval Waiting List',
            'group': [{
                'title': 'e-Payment',
                'count': 0,
                'id': 'table1'
                }, {
                'title': 'Grant Payment',
                'count': 2,
                'id': 'table2'
                }, {
                'title': 'Contract Review',
                'count': 3,
                }, {
                'title': 'Contract Approval',
                'count': 2,
                }, {
                'title': 'Contract Payment',
                'count': 1,
                }, {
                'title': 'Hardware / Software Request',
                'count': 4,
                }
            ]
        }, {
            'title': 'Payment Waiting List',
            'group': [{
                'title': 'e-Payment',
                'count': 0,
                }, {
                'title': 'Grant Payment',
                'count': 133,
                }, {
                'title': 'Contract Payment',
                'count': 116,
                }
            ]
        }, {
            'title': 'Accrual Waiting List',
            'group': [{
                'title': 'Grant Accrual',
                'count': 7,
                }
            ]

        }, {
            'title': 'Fixed Assets Waiting List',
            'group': [{
                'title': 'e-Approval',
                'count': 7,
                }, {
                'title': 'e-Bridge for Posting',
                'count': 3,
                }
            ]

        }];


        approval_table1_items = [{
            'amt': '45.09',
            'via': 'Check',
            'approvedBy': 'Some Person',
            'status': 'Approved',
            'statusDate': '02/09/2012',
            'overdueBy': '13',
            }, {
            'amt': '13.00',
            'via': 'Wire',
            'approvedBy': 'Another Person',
            'status': 'Submitted',
            'statusDate': '02/14/2012',
            'overdueBy': '16',
            }, {
            'amt': '71.21',
            'via': 'Check',
            'approvedBy': 'Last Person',
            'status': 'Approved',
            'statusDate': '02/13/2012',
            'overdueBy': '18',
            }]

        for i, row in enumerate(approval_table1_items):
            row['rowClass'] = 'even' if i % 2 else 'odd'

        import copy
        approval_table2_items = 2 * copy.deepcopy(approval_table1_items)
        for i, row in enumerate(approval_table2_items):
            row['rowClass'] = 'even' if i % 2 else 'odd'

        # Assemble the final result.
        results['data'] = {
            # home section
            'home': [{
                'class': 'homepanel1',
                'title': 'My Communities',
                'communities': communities_info,
                }, {
                'class': 'homepanel2',
                'title': 'My Recent Activity',
                'contexts': recent_items,
                }],
            # approvals section
            'approvals': [{
                'class': 'approvalpanel1',
                'waitinglist': {
                    'items': approval_waitinglist_items,
                    },
                }, {
                'class': 'approvalpanel2',
                'tables': [{
                    'id': 'table1',
                    'title': 'Open Project Project',
                    'items': approval_table1_items,
                    }, {
                    'id': 'table2',
                    'title': 'Very Open Project',
                    'items': approval_table2_items,
                    }],
                }],
            }

        results['state'] = {
            'chart1': {
                'options' : {
                    'title': 'Company Performance',
                    'hAxis': {
                        'title': 'Year',
                        'titleTextStyle': {'color': 'red'},
                        },
                    'width': 200,      # Must have fixed width! (matching css)
                    },
                'columns': [
                    ['string', 'Year'],
                    ['number', 'Sales'],
                    ['number', 'Expenses'],
                    ],
                'rows': [
                    ['2004', 1000, 400],
                    ['2005', 1170, 460],
                    ['2006', 660, 1120],
                    ['2007', 1030, 540],
                    ],
                },
            'chart2': {
                'options' : {
                    'title': 'Monthly Operating Revenue',
                    'hAxis': {
                        'title': 'Project',
                        'titleTextStyle': {'color': 'red'},
                        },
                    'width': 400,      # Must have fixed width! (matching css)
                    },
                'columns': [
                    ['string', 'Project'],
                    ['number', 'Budgeted'],
                    ['number', 'Actual'],
                    ],
                'rows': [
                    ['My First Project', 1000, 400],
                    ['Another Project', 1170, 460],
                    ['A Third Project', 660, 1120],
                    ],
                },
            }


    return results