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.')}
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.')}
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
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
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, )
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)
'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)
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
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