def __call__(self): tapi = TemplateAPI(self.context, self.request, 'Trash') if self.error is None: self.fill_deleted() else: tapi.set_status_message(unicode(self.error)) return {'api': tapi, 'deleted': self.deleted}
def __call__(self): api = TemplateAPI(self.context, self.request, 'Add Blog Entry') api.karl_client_data['text'] = dict( enable_imagedrawer_upload = True, ) return {'api':api, 'actions':()}
def __call__(self): layout_provider = get_layout_provider(self.context, self.request) layout = layout_provider('community') page_title = 'Edit %s' % self.context.title api = TemplateAPI(self.context, self.request, page_title) api.karl_client_data['text'] = dict(enable_imagedrawer_upload=True, ) return {'api': api, 'layout': layout, 'actions': []}
def __call__(self): api = TemplateAPI(self.context, self.request, 'Add Wiki Page') api.karl_client_data['text'] = dict( enable_wiki_plugin=True, enable_imagedrawer_upload=True) return {'api': api, 'actions': ()}
def __call__(self): page_title = 'Edit ' + self.context.title api = TemplateAPI(self.context, self.request, page_title) api.karl_client_data['text'] = dict( enable_imagedrawer_upload = True, ) return {'api':api, 'actions':()}
def __call__(self): api = TemplateAPI(self.context, self.request, 'Add Wiki Page') api.karl_client_data['text'] = dict( enable_wiki_plugin=True, enable_imagedrawer_upload=True, ) return {'api': api, 'actions': ()}
def __call__(self): """ Folder contents for the INetworkEvents marker""" context = self.context request = self.request page_title = context.title api = TemplateAPI(context, request, page_title) # Data for the filter bar, get the list of possible years and months this_year = datetime.datetime.now().year fb_years = [str(i) for i in range(2007, this_year + 1)] fb_months = [ ("1", "January"), ("2", "February"), ("3", "March"), ("4", "April"), ("5", "May"), ("6", "June"), ("7", "July"), ("8", "August"), ("9", "September"), ("10", "October"), ("11", "November"), ("12", "December"), ] # Flatten the search results into ZPT data try: batch = self._get_batch() except ParseError, e: api.set_error_message("Error: %s" % e) batch = {"entries": (), "batching_required": False}
def handle_submit(self, converted): try: context = self.context request = self.request key = request.params.get('key') if not key or len(key) != 40: e = ResetFailed() e.page_title = 'Password Reset URL Problem' raise e users = find_users(context) user = users.get_by_login(converted['login']) if user is None: raise ValidationError(login='******') userid = user.get('id') if userid is None: userid = user['login'] profiles = find_profiles(context) profile = profiles.get(userid) if profile is None: raise ValidationError(login='******') if key != getattr(profile, 'password_reset_key', None): e = ResetFailed() e.page_title = 'Password Reset Confirmation Problem' raise e now = datetime.datetime.now() t = getattr(profile, 'password_reset_time', None) if t is None or now - t > max_reset_timedelta: e = ResetFailed() e.page_title = 'Password Reset Confirmation Key Expired' raise e # The key matched. Clear the key and reset the password. profile.password_reset_key = None profile.password_reset_time = None password = converted['password'].encode('UTF-8') users.change_password(userid, password) request.session['password_expired'] = False profile.password_expiration_date = (datetime.datetime.utcnow() + datetime.timedelta(days=180)) max_retries = request.registry.settings.get('max_login_retries', 8) context.login_tries[converted['login']] = max_retries page_title = 'Password Reset Complete' api = TemplateAPI(context, request, page_title) return render_to_response( 'templates/reset_complete.pt', dict(api=api, login=converted['login'], password=converted['password']), request=request, ) except ResetFailed, e: api = TemplateAPI(context, request, e.page_title) return render_to_response('templates/reset_failed.pt', dict(api=api), request=request)
def __call__(self): layout_provider = get_layout_provider(self.context, self.request) layout = layout_provider('community') api = TemplateAPI(self.context, self.request, 'Add Forum Topic') api.karl_client_data['text'] = dict( enable_imagedrawer_upload = True, ) return {'api':api, 'actions':(), 'layout':layout}
def reference_outline_view(context, request): # Look for moveUp or moveDown in QUERY_STRING, telling us to # reorder something status_message = None subpath = request.params.get('subpath') backto = { 'href': resource_url(context.__parent__, request), 'title': context.__parent__.title, } user_can_edit = False actions = [] if has_permission('create', context, request): addables = get_folder_addables(context, request) if addables is not None: actions.extend(addables()) if has_permission('edit', context, request): user_can_edit = True actions.append(('Edit', 'edit.html')) if subpath: direction = request.params['direction'] status_message = move_subpath(context, subpath, direction) if has_permission('delete', context, request): actions.append(('Delete', 'delete.html')) if has_permission('administer', context, request): actions.append(('Advanced', 'advanced.html')) page_title = context.title api = TemplateAPI(context, request, page_title) # Get a layout layout_provider = get_layout_provider(context, request) layout = layout_provider() # provide client data for rendering current tags in the tagbox client_json_data = dict( tagbox=get_tags_client_data(context, request), ) previous, next = get_previous_next(context, request) api.status_message = status_message return render_to_response( 'templates/show_referencemanual.pt', dict(api=api, actions=actions, user_can_edit=user_can_edit, head_data=convert_to_script(client_json_data), tree=getTree(context, request, api), backto=backto, layout=layout, previous_entry=previous, next_entry=next), request=request, )
def __call__(self): tapi = TemplateAPI(self.context, self.request, 'Trash') if self.error is None: self.fill_deleted() else: tapi.set_status_message(unicode(self.error)) layout = self.request.layout_manager.layout layout.page_title += ' Trash' return {'api': tapi, 'deleted': self.deleted}
def __call__(self): page_title = 'Edit ' + self.context.title api = TemplateAPI(self.context, self.request, page_title) # ux1 api.karl_client_data['text'] = dict(enable_imagedrawer_upload=True, ) # ux2 layout = self.request.layout_manager.layout layout.head_data['panel_data']['tinymce'] = api.karl_client_data[ 'text'] return {'api': api, 'actions': ()}
def reference_outline_view(context, request): # Look for moveUp or moveDown in QUERY_STRING, telling us to # reorder something status_message = None subpath = request.params.get('subpath') backto = { 'href': resource_url(context.__parent__, request), 'title': context.__parent__.title, } user_can_edit = False actions = [] if has_permission('create', context, request): addables = get_folder_addables(context, request) if addables is not None: actions.extend(addables()) if has_permission('edit', context, request): user_can_edit = True actions.append(('Edit', 'edit.html')) if subpath: direction = request.params['direction'] status_message = move_subpath(context, subpath, direction) if has_permission('delete', context, request): actions.append(('Delete', 'delete.html')) if has_permission('administer', context, request): actions.append(('Advanced', 'advanced.html')) page_title = context.title api = TemplateAPI(context, request, page_title) # Get a layout layout_provider = get_layout_provider(context, request) layout = layout_provider() # provide client data for rendering current tags in the tagbox client_json_data = dict(tagbox=get_tags_client_data(context, request), ) previous, next = get_previous_next(context, request) api.status_message = status_message return render_to_response( 'templates/show_referencemanual.pt', dict(api=api, actions=actions, user_can_edit=user_can_edit, head_data=convert_to_script(client_json_data), tree=getTree(context, request, api), backto=backto, layout=layout, previous_entry=previous, next_entry=next), request=request, )
def __call__(self): if self.request.params.get('form.submitted', None) is not None: resp = self.login() if resp: # if this returned with something, we deal with it return resp # Log in user seamlessly with kerberos if enabled try_kerberos = self.request.GET.get('try_kerberos', None) if try_kerberos: try_kerberos = asbool(try_kerberos) else: try_kerberos = asbool(get_config_setting('kerberos', 'False')) if try_kerberos: from karl.security.kerberos_auth import get_kerberos_userid userid = get_kerberos_userid(self.request) if userid: return remember_login(self.context, self.request, userid, None) # Break infinite loop if kerberos authorization fails if (self.request.authorization and self.request.authorization[0] == 'Negotiate'): try_kerberos = False page_title = 'Login to %s' % get_setting(self.context, 'title') api = TemplateAPI(self.context, self.request, page_title) sso_providers = [] sso = self.settings.get('sso') if sso: # importing here rather than in global scope allows to only require # velruse be installed for systems using it. from velruse import login_url for name in sso.split(): provider = self.settings.get('sso.%s.provider' % name) title = self.settings.get('sso.%s.title' % name) sso_providers.append({ 'title': title, 'name': name, 'url': login_url(self.request, provider) }) api.status_message = self.request.params.get('reason', None) response = render_to_response( 'templates/login.pt', dict(api=api, nothing='', try_kerberos=try_kerberos, sso_providers=sso_providers, came_from=self.request.params.get('came_from', ''), app_url=self.request.application_url), request=self.request) forget_headers = forget(self.request) response.headers.extend(forget_headers) return response
def admin_contents_moveup_view(context, request): api = TemplateAPI(context, request, 'Contents') name = request.GET['name'] order = context.order n = order.index(name) if n == 0: api.status_message = 'Already at top of list' else: order[n], order[n - 1] = order[n - 1], order[n] context.order = order return HTTPFound(location=resource_url(context, request, 'admin.html'))
def __call__(self): layout_provider = get_layout_provider(self.context, self.request) layout = layout_provider('community') page_title = 'Edit %s' % self.context.title api = TemplateAPI(self.context, self.request, page_title) api.karl_client_data['text'] = dict( enable_imagedrawer_upload=True) return { 'api': api, 'layout': layout, 'actions': []}
def admin_contents_moveup_view(context, request): api = TemplateAPI(context, request, 'Contents') name = request.GET['name'] order = context.order n = order.index(name) if n == 0: api.status_message = 'Already at top of list' else: order[n], order[n-1] = order[n-1], order[n] context.order = order return HTTPFound(location=resource_url(context, request, 'admin.html'))
def admin_contents_movedown_view(context, request): api = TemplateAPI(context, request, 'Contents') name = request.GET['name'] order = list(context.order) # in case it is raw OOBTreeItems n = order.index(name) if n + 1 == len(order): api.status_message = 'Already at bottom of list' else: order[n], order[n + 1] = order[n + 1], order[n] context.order = order return HTTPFound(location=resource_url(context, request, 'admin.html'))
def __call__(self): page_title = 'Edit %s' % self.context.title api = TemplateAPI(self.context, self.request, page_title) # prepare client data api.karl_client_data['text'] = dict( enable_wiki_plugin = True, enable_imagedrawer_upload = True, ) return {'api':api, 'actions':(), }
def admin_contents_movedown_view(context, request): api = TemplateAPI(context, request, 'Contents') name = request.GET['name'] order = list(context.order) # in case it is raw OOBTreeItems n = order.index(name) if n+1 == len(order): api.status_message = 'Already at bottom of list' else: order[n], order[n+1] = order[n+1], order[n] context.order = order return HTTPFound(location=resource_url(context, request, 'admin.html'))
def __call__(self): page_title = 'Edit ' + self.context.title api = TemplateAPI(self.context, self.request, page_title) # ux1 api.karl_client_data['text'] = dict( enable_imagedrawer_upload = True, ) # ux2 layout = self.request.layout_manager.layout layout.head_data['panel_data']['tinymce'] = api.karl_client_data['text'] return {'api':api, 'actions':()}
def __call__(self): api = TemplateAPI(self.context, self.request, 'Add Wiki Page') # ux2 api.karl_client_data['text'] = dict( enable_wiki_plugin = True, enable_imagedrawer_upload = True, ) # ux2 layout = self.request.layout_manager.layout layout.head_data['panel_data']['tinymce'] = api.karl_client_data['text'] return {'api':api, 'actions':()}
def __call__(self): context = self.context request = self.request api = TemplateAPI(context, request, 'Add Page') community = find_community(context) layout_provider = get_layout_provider(context, request) if community is not None: layout = layout_provider('community') else: layout = layout_provider('generic') api.karl_client_data['text'] = dict(enable_imagedrawer_upload=True, ) return {'api': api, 'actions': (), 'layout': layout}
def __call__(self): if self.request.params.get('form.submitted', None) is not None: resp = self.login() if resp: # if this returned with something, we deal with it return resp # Log in user seamlessly with kerberos if enabled try_kerberos = self.request.GET.get('try_kerberos', None) if try_kerberos: try_kerberos = asbool(try_kerberos) else: try_kerberos = asbool(get_config_setting('kerberos', 'False')) if try_kerberos: from karl.security.kerberos_auth import get_kerberos_userid userid = get_kerberos_userid(self.request) if userid: return remember_login(self.context, self.request, userid, None) # Break infinite loop if kerberos authorization fails if (self.request.authorization and self.request.authorization[0] == 'Negotiate'): try_kerberos = False page_title = 'Login to %s' % get_setting(self.context, 'title') api = TemplateAPI(self.context, self.request, page_title) sso_providers = [] sso = self.settings.get('sso') if sso: # importing here rather than in global scope allows to only require # velruse be installed for systems using it. from velruse import login_url for name in sso.split(): provider = self.settings.get('sso.%s.provider' % name) title = self.settings.get('sso.%s.title' % name) sso_providers.append({'title': title, 'name': name, 'url': login_url(self.request, provider)}) api.status_message = self.request.params.get('reason', None) response = render_to_response( 'templates/login.pt', dict( api=api, nothing='', try_kerberos=try_kerberos, sso_providers=sso_providers, came_from=self.request.params.get('came_from', ''), app_url=self.request.application_url), request=self.request) forget_headers = forget(self.request) response.headers.extend(forget_headers) return response
def admin_contents_movedown_view(context, request): peopledir = find_peopledirectory(context) api = TemplateAPI(context, request, 'Contents') name = request.GET['name'] order = context.order n = order.index(name) if n+1 == len(order): api.status_message = 'Already at bottom of list' else: order[n], order[n+1] = order[n+1], order[n] context.order = order return HTTPFound(location=model_url(context, request, 'admin.html'))
def admin_contents_moveup_view(context, request): peopledir = find_peopledirectory(context) api = TemplateAPI(context, request, "Contents") name = request.GET["name"] order = context.order n = order.index(name) if n == 0: api.status_message = "Already at top of list" else: order[n], order[n - 1] = order[n - 1], order[n] context.order = order return HTTPFound(location=resource_url(context, request, "admin.html"))
def __call__(self): api = TemplateAPI(self.context, self.request, 'Add Wiki Page') # ux2 api.karl_client_data['text'] = dict( enable_wiki_plugin=True, enable_imagedrawer_upload=True, ) # ux2 layout = self.request.layout_manager.layout layout.head_data['panel_data']['tinymce'] = api.karl_client_data[ 'text'] return {'api': api, 'actions': ()}
def __call__(self): key = self.request.params.get('key') if not key or len(key) != 40: api = TemplateAPI(self.context, self.request, 'Password Reset URL Problem') return render_to_response('templates/reset_failed.pt', dict(api=api), request=self.request) snippets = get_renderer('forms/templates/snippets.pt').implementation() snippets.doctype = xhtml blurb_macro = snippets.macros['reset_confirm_blurb'] api = TemplateAPI(self.context, self.request, u'Reset Password') return {'api': api, 'blurb_macro': blurb_macro}
def __call__(self): context = self.context request = self.request api = TemplateAPI(context, request, 'Add Page') community = find_community(context) layout_provider = get_layout_provider(context, request) if community is not None: layout = layout_provider('community') else: layout = layout_provider('generic') api.karl_client_data['text'] = dict( enable_imagedrawer_upload = True, ) return {'api': api, 'actions': (), 'layout': layout}
def __call__(self): if not lock.is_locked(self.context): lock.lock(self.context, self.userid) page_title = 'Edit %s' % self.context.title api = TemplateAPI(self.context, self.request, page_title) # prepare client data api.karl_client_data['text'] = dict( enable_wiki_plugin = True, enable_imagedrawer_upload = True, ) return {'api':api, 'actions':(), 'lock_info':lock.lock_info_for_view(self.context, self.request), }
def show_blogentry_view(context, request): post_url = resource_url(context, request, "comments", "add_comment.html") workflow = get_workflow(IBlogEntry, 'security', context) if workflow is None: security_states = [] else: security_states = get_security_states(workflow, context, request) page_title = context.title api = TemplateAPI(context, request, page_title) client_json_data = dict( tagbox=get_tags_client_data(context, request)) actions = [] if has_permission('edit', context, request): actions.append(('Edit', 'edit.html')) if has_permission('edit', context, request): actions.append(('Delete', 'delete.html')) if has_permission('administer', context, request): actions.append(('Advanced', 'advanced.html')) api.is_taggable = True byline_info = getMultiAdapter((context, request), IBylineInfo) blog = find_interface(context, IBlog) backto = { 'href': resource_url(blog, request), 'title': blog.title, } comments = get_comment_data(context, context['comments'], api, request) comment_form = get_comment_form(context, context['comments'], api, request) return dict( api=api, actions=actions, comments=comments, attachments=fetch_attachments( context['attachments'], request), head_data=convert_to_script(client_json_data), comment_form=comment_form, post_url=post_url, byline_info=byline_info, backto=backto, security_states=security_states, )
def deactivate_profile_view(context, request): page_title = 'Deactivate user account for %s %s' % (context.firstname, context.lastname) api = TemplateAPI(context, request, page_title) name = context.__name__ myself = authenticated_userid(request) == context.__name__ if not api.user_is_admin and not myself: raise Forbidden("Only owner or admin can deactivate profile") confirm = request.params.get('confirm') if confirm: try: find_users(context).remove(name) except KeyError: pass workflow = get_workflow(IProfile, 'security', context) workflow.transition_to_state(context, request, 'inactive') if myself: return logout_view(context, request, reason='User removed') query = {'status_message': 'Deactivated user account: %s' % name} parent = context.__parent__ location = resource_url(parent, request, query=query) return HTTPFound(location=location) # Show confirmation page. return dict(api=api, myself=myself)
def __call__(self): context = self.context request = self.request page_title = 'Edit %s' % context.title api = TemplateAPI(context, self.request, page_title) # Get a layout layout_provider = get_layout_provider(context, request) old_layout = layout_provider('community') # ux1 api.karl_client_data['text'] = dict( enable_imagedrawer_upload = True, ) # ux2 layout = self.request.layout_manager.layout layout.head_data['panel_data']['tinymce'] = api.karl_client_data['text'] return {'api': api, 'actions': (), 'old_layout': old_layout}
def form_widgets(self, fields): page_title = self.request.layout_manager.layout.page_title api = TemplateAPI(self.context, self.request, page_title) default_icon = '%s/images/defaultUser.gif' % api.static_url show_remove_checkbox = self.photo is not None widgets = {'firstname': formish.Input(empty=''), 'lastname': formish.Input(empty=''), 'email': formish.Input(), 'phone': formish.Input(empty=''), 'extension': formish.Input(empty=''), 'fax': formish.Input(empty=''), 'department': formish.Input(empty=''), 'position': formish.Input(empty=''), 'organization': formish.Input(empty=''), 'location': formish.Input(empty=''), 'country': formish.SelectChoice(options=countries), 'websites': formish.TextArea( rows=3, converter_options={'delimiter':'\n'}), 'languages': formish.Input(empty=''), 'photo': karlwidgets.PhotoImageWidget( filestore=self.filestore, url_base=resource_url(self.context, self.request), image_thumbnail_default=default_icon, show_remove_checkbox=show_remove_checkbox), 'biography': karlwidgets.RichTextWidget(empty=''), 'date_format': karlwidgets.VerticalRadioChoice( options=cultures, none_option=None), } return widgets
def __call__(self): if not lock.is_locked(self.context): lock.lock(self.context, self.userid) page_title = 'Edit %s' % self.context.title api = TemplateAPI(self.context, self.request, page_title) # prepare client data api.karl_client_data['text'] = dict( enable_wiki_plugin=True, enable_imagedrawer_upload=True, ) return { 'api': api, 'actions': (), 'lock_info': lock.lock_info_for_view(self.context, self.request), }
def __call__(self): community = self.community context = self.context request = self.request profiles = self.profiles layout = request.layout_manager.layout # Handle userid passed in via GET request # Moderator would get here by clicking a link in an email to grant a # user's request to join this community. add_user_id = request.params.get("user_id", None) if add_user_id is not None: profile = profiles.get(add_user_id, None) if profile is not None: return _add_existing_users(context, community, [ profile, ], "", request) system_name = get_setting(context, 'system_name', 'KARL') layout.page_title = u'Add Existing %s Users' % system_name api = TemplateAPI(context, request, layout.page_title) actions = _get_manage_actions(community, request) actions_menu = _get_actions_menu(context, request, actions) desc = ('Type the first few letters of the name of the person you ' 'would like to add to this community, select their name, ' 'and press submit. The short message below is included ' 'along with the text of your invite.') return { 'api': api, # deprecated in ux2 'actions': actions, # deprecated in ux2 'page_title': layout.page_title, # deprecated in ux2 'actions_menu': actions_menu, 'page_description': desc }
def show_profiles_view(context, request): system_name = get_setting(context, 'system_name', 'KARL') page_title = '%s Profiles' % system_name api = TemplateAPI(context, request, page_title) # Grab the data for the two listings, main communities and portlet search = ICatalogSearch(context) query = dict(sort_index='title', interfaces=[IProfile], limit=5) titlestartswith = request.params.get('titlestartswith') if titlestartswith: query['titlestartswith'] = (titlestartswith, titlestartswith) num, docids, resolver = search(**query) profiles = [] for docid in docids: model = resolver(docid) if model is None: continue profiles.append(model) mgr = ILetterManager(context) letter_info = mgr.get_info(request) return render_to_response( 'templates/profiles.pt', dict(api=api, profiles=profiles, letters=letter_info), request=request, )
def __init__(self, context, request): self.context = context self.request = request self.community = find_interface(context, ICommunity) self.profiles = find_profiles(context) self.api = TemplateAPI(context, request) self.filestore = get_filestore(context, request, 'accept-invitation')
def announcements_view(context, request): page_title = 'Site Announcements' api = TemplateAPI(context, request, page_title) userid = authenticated_userid(request) if userid is None: raise Exception("User must be logged in") site = api.site profiles = find_profiles(site) profile = profiles.get(userid, None) if profile is None: raise Exception("User must have a profile") seen = Set() if hasattr(profile, "_seen_announcements"): for item in profile._seen_announcements: seen.add(item) if hasattr(site, 'site_announcements'): newseen = seen.copy() for annc in site.site_announcements: newseen.add(annc['hash']) profile._seen_announcements = PersistentList(list(newseen)) return dict(api=api, seen=list(seen))
def __call__(self): layout_provider = get_layout_provider(self.context, self.request) old_layout = layout_provider('community') api = TemplateAPI(self.context, self.request, 'Add Forum Topic') # ux1 api.karl_client_data['text'] = dict( enable_imagedrawer_upload = True, ) # ux2 layout = self.request.layout_manager.layout layout.section_style = "none" layout.head_data['panel_data']['tinymce'] = api.karl_client_data['text'] return { 'api': api, # deprecated UX1 'old_layout': old_layout, # deprecated UX1 'actions': []} # deprecated UX1
def section_view(context, request): subs = [ sub for sub in context.values() if has_permission('view', sub, request) and IPeopleReport.providedBy(sub) ] if len(subs) == 1: return HTTPFound(location=resource_url(subs[0], request)) api = TemplateAPI(context, request, context.title) peopledir = find_peopledirectory(context) peopledir_tabs = get_tabs(peopledir, request, context.__name__) columns = [{ 'html': render_report_group(x, request, 'column'), 'width': getattr(x, 'width', 50) } for x in context.values()] columns = [x for x in columns if x['html']] return dict( api=api, peopledir=peopledir, peopledir_tabs=peopledir_tabs, context_tools=peopledir_tabs, columns=columns, actions=get_actions(context, request), )
def opensearch_view(context, request): api = TemplateAPI(context, request, 'KARL People OpenSearch') return dict( api=api, report=context, url=resource_url(context, request), )
def followed_by(context, request): """ View the list of users following the current user. """ layout = request.layout_manager.layout if layout is not None: userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', userid) layout.add_portlet( 'chatter.follow_info', _quippers_from_users(context, request, [other_user])) layout.add_portlet('chatter.user_search') chatter = find_chatter(context) chatter_url = resource_url(chatter, request) layout = request.layout_manager.layout followed_by = followed_by_json(context, request) return { 'api': TemplateAPI(context, request, 'Following: %s' % followed_by['userid']), 'followed_by': followed_by, 'context_tools': get_context_tools(request, selected='followers'), 'chatter_url': chatter_url, }
def following_search(context, request): """ View the list of users returned by a search """ layout = request.layout_manager.layout if layout is not None: userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', userid) layout.add_portlet( 'chatter.follow_info', _quippers_from_users(context, request, [other_user])) layout.add_portlet('chatter.user_search') chatter = find_chatter(context) chatter_url = resource_url(chatter, request) layout = request.layout_manager.layout profiles = search_profiles_json(context, request) if len(profiles) == 1: location = '%s%s' % (chatter_url, profiles[0]['value']) return HTTPFound(location=location) profiles = [profile['value'] for profile in profiles] to_follow = {'members': _quippers_from_users(context, request, profiles)} return { 'api': TemplateAPI(context, request, 'Search users for following'), 'members': to_follow, 'context_tools': get_context_tools(request, selected='following'), 'chatter_url': chatter_url, 'page_title': 'Chatter: Search users for following' }
def tag_chatter(context, request): """ HTML wrapper for 'tag_chatter_json'. """ userid = authenticated_userid(request) chatter = find_chatter(context) followed_tags = sorted(chatter.listFollowedTags(userid)) tag_list = chatter.recentTags() tag = request.GET.get('tag', None) if tag is not None: info = tag_chatter_json(context, request) subtitle = "Posts that mention %s" % tag else: info = followed_tag_chatter_json(context, request) subtitle = "Followed topics" info['api'] = TemplateAPI(context, request, 'Chatter: #%s' % tag) chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request, selected='topics') info['page_title'] = 'Chatter: Topics' info['subtitle'] = subtitle info['followed_tags'] = followed_tags info['tag'] = tag layout = request.layout_manager.layout if layout is not None: layout.add_portlet('chatter.tag_search') layout.add_portlet('chatter.tag_info', followed_tags, tag_list, tag) return info
def messages(context, request): layout = request.layout_manager.layout info = {} userid = '' info['latest_messages_users'] = latest_messages_users_json( context, request) ## temporary for laying out, will be an ajax call from the frontend info['user_messages'] = [] info['correspondent'] = None if info['latest_messages_users']: userid = info['latest_messages_users'][0]['userid'] user_messages = user_messages_json(context, request, userid) info['user_messages'] = user_messages['data'] info['correspondent'] = user_messages['correspondent'] ## info['api'] = TemplateAPI(context, request, 'Messages') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request, selected='messages') info['page_title'] = 'Chatter: Messages' info['recipient'] = userid current_userid = authenticated_userid(request) profiles = find_profiles(request.context) profile = profiles.get(current_userid) if profile is not None: profile.last_chatter_query = datetime.datetime.utcnow() return info
def followed_chatter(context, request): """ HTML wrapper for 'followed_chatter_json'. """ userid = authenticated_userid(request) other_user = getattr(request, 'chatter_user_id', None) if other_user is not None: request.GET['creators'] = other_user return creators_chatter(context, request) layout = request.layout_manager.layout if layout is not None: layout.add_portlet('chatter.user_info') layout.add_portlet('chatter.show_only') layout.add_portlet('chatter.search') info = followed_chatter_json(context, request) info['api'] = TemplateAPI(context, request, 'Posts') chatter_url = resource_url(find_chatter(context), request) info['chatter_url'] = chatter_url info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url info['context_tools'] = get_context_tools(request) info['page_title'] = 'Chatter: Posts' info['pushdown'] = False info['inline'] = False info['show_more'] = len(info['recent']) >= 40 profiles = find_profiles(request.context) profile = profiles.get(userid) if profile is not None: profile.last_chatter_query = datetime.datetime.utcnow() return info
def retail_view(context, request): page_title = context.title api = TemplateAPI(context, request, page_title) middle_portlet_html = _get_portlet_html(context, request, context.middle_portlets) right_portlet_html = _get_portlet_html(context, request, context.right_portlets) current_intranet = api.current_intranet feature = getattr(find_intranets(current_intranet), 'feature', u'') # Rendering this separately gives us a chance later to think about # some kind of caching. body = render('templates/intranethome_body.pt', dict(current_intranet=current_intranet, feature=feature, middle_portlet_html=middle_portlet_html, right_portlet_html=right_portlet_html), request=request) return render_to_response( 'templates/intranet_homepage.pt', dict(api=api, body=body), request=request, )
def admin_contents(context, request): peopledir = find_peopledirectory(context) api = TemplateAPI(context, request, "Contents") if "form.delete" in request.POST: if "selected" not in request.POST: api.status_message = "Please select a value" else: selected = request.POST["selected"] if isinstance(selected, basestring): selected = [selected] for name in selected: del context[name] return HTTPFound(location=resource_url(context, request, "admin.html")) actions = get_admin_actions(context, request) del actions[0] # Get rid of "Edit" action--doesn't make sense here. actions += get_actions(context, request) return dict(api=api, peopledir=peopledir, actions=actions, has_categories=peopledir is context)
def _show_calendar_view(context, request, make_presenter, selection): # Check if we are in /offices/calendar. calendar_layout = _select_calendar_layout(context, request) year, month, day = selection['year'], selection['month'], selection['day'] focus_datetime = datetime.datetime(year, month, day) now_datetime = _now() # make the calendar presenter for this view url_for = _make_calendar_presenter_url_func(context, request) calendar = make_presenter(focus_datetime, now_datetime, url_for) # find events and paint them on the calendar selected_layer = _calendar_filter(context, request) events = _get_catalog_events(context, request, first_moment=calendar.first_moment, last_moment=calendar.last_moment, layer_name=selected_layer) calendar.paint_events(events) layers = _get_calendar_layers(context) setup_url = _calendar_setup_url(context, request) # render api = TemplateAPI(context, request, calendar.title) api.karl_client_data['calendar_selection'] = selection response = render_to_response( calendar.template_filename, dict( calendar_format_class = calendar_layout['calendar_format_class'], calendar_layout_template = calendar_layout['calendar_layout_template'], api=api, setup_url=setup_url, calendar=calendar, selected_layer = selected_layer, layers = layers, quote = quote, may_create = has_permission(CREATE, context, request)), request=request, ) return response
def __call__(self): if not lock.is_locked(self.context): lock.lock(self.context, self.userid) page_title = 'Edit %s' % self.context.title api = TemplateAPI(self.context, self.request, page_title) # prepare client data # ux1 api.karl_client_data['text'] = dict( enable_wiki_plugin = True, enable_imagedrawer_upload = True, ) # ux2 layout = self.request.layout_manager.layout layout.head_data['panel_data']['tinymce'] = api.karl_client_data['text'] return {'api':api, 'actions':(), 'lock_info':lock.lock_info_for_view(self.context, self.request), }
def admin_contents(context, request): peopledir = find_peopledirectory(context) api = TemplateAPI(context, request, 'Contents') if 'form.delete' in request.POST: if 'selected' not in request.POST: api.status_message = 'Please select a value' else: for name in request.POST.getall('selected'): del context[name] return HTTPFound(location=resource_url(context, request, 'admin.html') ) actions = get_admin_actions(context, request) del actions[0] # Get rid of "Edit" action--doesn't make sense here. actions += get_actions(context, request) return dict(api=api, peopledir=peopledir, actions=actions, has_categories=peopledir is context, )
def __call__(self): if not self.context.settings.get('allow_request_accesss', False): raise NotFound if self.request.params.get('form.submitted', None): if self.validate(): self.create_access_request() page_title = 'Request access to %s' % get_setting(self.context, 'title') api = TemplateAPI(self.context, self.request, page_title) api.status_messages = self.errors return render_to_response( 'templates/request_access.pt', dict( api=api, nothing='', submitted=self.submitted, fields=self.fields, app_url=self.request.application_url), request=self.request)
def show_wikitoc_view(context, request): is_front_page = (context.__name__ == 'front_page') if is_front_page: community = find_interface(context, ICommunity) page_title = '%s Community Wiki Page' % community.title backto = False else: page_title = context.title backto = { 'href': resource_url(context.__parent__, request), 'title': context.__parent__.title, } actions = [] api = TemplateAPI(context, request, page_title) api.require_javascript('karl-wikitoc') api.require_css('karl-wikitoc') wikitoc_data = get_wikitoc_data(context, request) page_data = dict( wikitoc=wikitoc_data, ) client_json_data = convert_to_script(page_data) wiki = find_interface(context, IWiki) feed_url = resource_url(wiki, request, "atom.xml") repo = find_repo(context) show_trash = repo is not None and has_permission('edit', context, request) return dict(api=api, actions=actions, head_data=client_json_data, feed_url=feed_url, backto=backto, lock_info=lock.lock_info_for_view(context, request), show_trash=show_trash, )
def __call__(self): context = self.context request = self.request api = TemplateAPI(context, request, 'Add Page') community = find_community(context) layout_provider = get_layout_provider(context, request) if community is not None: old_layout = layout_provider('community') else: old_layout = layout_provider('generic') # ux1 api.karl_client_data['text'] = dict( enable_imagedrawer_upload = True, ) # ux2 layout = self.request.layout_manager.layout layout.section_style = "none" layout.head_data['panel_data']['tinymce'] = api.karl_client_data['text'] return { 'api': api, # deprecated UX1 'actions': (), # deprecated UX1 'old_layout': old_layout} # deprecated UX1
def __call__(self): """ Folder contents for the INetworkEvents marker""" context = self.context request = self.request page_title = context.title api = TemplateAPI(context, request, page_title) # Data for the filter bar, get the list of possible years and months this_year = datetime.datetime.now().year fb_years = [str(i) for i in range(2007, this_year+1)] fb_months = [('1', 'January'), ('2', 'February'), ('3', 'March'), ('4', 'April'), ('5', 'May'), ('6', 'June'), ('7', 'July'), ('8', 'August'), ('9', 'September'), ('10', 'October'), ('11', 'November'), ('12', 'December')] # Flatten the search results into ZPT data try: batch = self._get_batch() except ParseError, e: api.set_error_message('Error: %s' % e) batch = {'entries': (), 'batching_required': False}
def configure_twofactor_view(context, request): page_title = "Profile: %s" % context.title api = TemplateAPI(context, request, page_title) tf = TwoFactor(context, request) if (not tf.enabled or not tf.phone_factor_enabled or not authenticated_userid(request) == context.__name__): return HTTPFound(request.resource_url(context)) form = 'number' number = '' if request.method == 'POST': number = request.POST.get('phonenumber', '') if 'form.verifyemail.submitted' in request.POST: number = ''.join(n for n in number if n in string.digits) if len(number) == 10: context.two_factor_phone = number code = context._two_factor_verify_code = make_random_code(6) msg = "%s phone verification code: %s" % ( get_setting(context, 'title'), code) tf.send_text_to_number(number, msg) api.set_status_message('Verification code sent to phone number: %s' % number) form = 'verify' else: api.set_status_message('Invalid phone number') elif 'form.verifycode.submitted' in request.POST: form = 'verify' code = request.POST['code'] if code == context._two_factor_verify_code: context._two_factor_verify_code = '' context.two_factor_verified = True form = 'success' else: api.set_status_message('Invalid verification code') return dict( api=api, form=form, number=number, context=context)