Example #1
0
 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}
Example #2
0
 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}
Example #3
0
 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':()}
Example #4
0
 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': []}
Example #5
0
File: wiki.py Project: lslaz1/karl
 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': ()}
Example #6
0
File: blog.py Project: disko/karl
 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':()}
Example #7
0
File: wiki.py Project: iotest3/new
 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': ()}
Example #8
0
    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}
Example #9
0
    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)
Example #10
0
 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}
Example #11
0
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,
        )
Example #12
0
 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}
Example #13
0
File: blog.py Project: zagy/karl
 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': ()}
Example #14
0
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,
    )
Example #15
0
File: login.py Project: lslaz1/karl
    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
Example #16
0
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'))
Example #17
0
File: forum.py Project: lslaz1/karl
 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': []}
Example #18
0
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'))
Example #19
0
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'))
Example #20
0
 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':(),
             }
Example #21
0
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'))
Example #22
0
File: blog.py Project: hj91/karl
 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':()}
Example #23
0
 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':()}
Example #24
0
 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}
Example #25
0
File: login.py Project: lslaz1/karl
    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
Example #26
0
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'))
Example #27
0
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"))
Example #28
0
 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': ()}
Example #29
0
 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}
Example #30
0
 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}
Example #31
0
    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),
                }
Example #32
0
File: blog.py Project: lslaz1/karl
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,
        )
Example #33
0
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)
Example #34
0
 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}
Example #35
0
 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}
Example #36
0
File: people.py Project: zagy/karl
 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
Example #37
0
    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),
        }
Example #38
0
File: members.py Project: zagy/karl
    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
        }
Example #39
0
File: people.py Project: zagy/karl
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,
        )
Example #40
0
File: members.py Project: zagy/karl
 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')
Example #41
0
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))
Example #42
0
 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
Example #43
0
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),
    )
Example #44
0
def opensearch_view(context, request):
    api = TemplateAPI(context, request, 'KARL People OpenSearch')
    return dict(
        api=api,
        report=context,
        url=resource_url(context, request),
    )
Example #45
0
File: chatter.py Project: zagy/karl
def followed_by(context, request):
    """ View the list of users following the current user.
    """
    layout = request.layout_manager.layout
    if layout is not None:
        userid = authenticated_userid(request)
        other_user = getattr(request, 'chatter_user_id', userid)
        layout.add_portlet(
            'chatter.follow_info',
            _quippers_from_users(context, request, [other_user]))
        layout.add_portlet('chatter.user_search')
    chatter = find_chatter(context)
    chatter_url = resource_url(chatter, request)
    layout = request.layout_manager.layout
    followed_by = followed_by_json(context, request)
    return {
        'api':
        TemplateAPI(context, request, 'Following: %s' % followed_by['userid']),
        'followed_by':
        followed_by,
        'context_tools':
        get_context_tools(request, selected='followers'),
        'chatter_url':
        chatter_url,
    }
Example #46
0
File: chatter.py Project: zagy/karl
def following_search(context, request):
    """ View the list of users returned by a search
    """
    layout = request.layout_manager.layout
    if layout is not None:
        userid = authenticated_userid(request)
        other_user = getattr(request, 'chatter_user_id', userid)
        layout.add_portlet(
            'chatter.follow_info',
            _quippers_from_users(context, request, [other_user]))
        layout.add_portlet('chatter.user_search')
    chatter = find_chatter(context)
    chatter_url = resource_url(chatter, request)
    layout = request.layout_manager.layout
    profiles = search_profiles_json(context, request)
    if len(profiles) == 1:
        location = '%s%s' % (chatter_url, profiles[0]['value'])
        return HTTPFound(location=location)
    profiles = [profile['value'] for profile in profiles]
    to_follow = {'members': _quippers_from_users(context, request, profiles)}
    return {
        'api': TemplateAPI(context, request, 'Search users for following'),
        'members': to_follow,
        'context_tools': get_context_tools(request, selected='following'),
        'chatter_url': chatter_url,
        'page_title': 'Chatter: Search users for following'
    }
Example #47
0
File: chatter.py Project: zagy/karl
def tag_chatter(context, request):
    """ HTML wrapper for 'tag_chatter_json'.
    """
    userid = authenticated_userid(request)
    chatter = find_chatter(context)
    followed_tags = sorted(chatter.listFollowedTags(userid))
    tag_list = chatter.recentTags()
    tag = request.GET.get('tag', None)
    if tag is not None:
        info = tag_chatter_json(context, request)
        subtitle = "Posts that mention %s" % tag
    else:
        info = followed_tag_chatter_json(context, request)
        subtitle = "Followed topics"
    info['api'] = TemplateAPI(context, request, 'Chatter: #%s' % tag)
    chatter_url = resource_url(find_chatter(context), request)
    info['chatter_url'] = chatter_url
    info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url
    info['context_tools'] = get_context_tools(request, selected='topics')
    info['page_title'] = 'Chatter: Topics'
    info['subtitle'] = subtitle
    info['followed_tags'] = followed_tags
    info['tag'] = tag
    layout = request.layout_manager.layout
    if layout is not None:
        layout.add_portlet('chatter.tag_search')
        layout.add_portlet('chatter.tag_info', followed_tags, tag_list, tag)
    return info
Example #48
0
File: chatter.py Project: zagy/karl
def messages(context, request):
    layout = request.layout_manager.layout
    info = {}
    userid = ''
    info['latest_messages_users'] = latest_messages_users_json(
        context, request)
    ## temporary for laying out, will be an ajax call from the frontend
    info['user_messages'] = []
    info['correspondent'] = None
    if info['latest_messages_users']:
        userid = info['latest_messages_users'][0]['userid']
        user_messages = user_messages_json(context, request, userid)
        info['user_messages'] = user_messages['data']
        info['correspondent'] = user_messages['correspondent']
    ##
    info['api'] = TemplateAPI(context, request, 'Messages')
    chatter_url = resource_url(find_chatter(context), request)
    info['chatter_url'] = chatter_url
    info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url
    info['context_tools'] = get_context_tools(request, selected='messages')
    info['page_title'] = 'Chatter: Messages'
    info['recipient'] = userid
    current_userid = authenticated_userid(request)
    profiles = find_profiles(request.context)
    profile = profiles.get(current_userid)
    if profile is not None:
        profile.last_chatter_query = datetime.datetime.utcnow()
    return info
Example #49
0
File: chatter.py Project: zagy/karl
def followed_chatter(context, request):
    """ HTML wrapper for 'followed_chatter_json'.
    """
    userid = authenticated_userid(request)
    other_user = getattr(request, 'chatter_user_id', None)
    if other_user is not None:
        request.GET['creators'] = other_user
        return creators_chatter(context, request)
    layout = request.layout_manager.layout
    if layout is not None:
        layout.add_portlet('chatter.user_info')
        layout.add_portlet('chatter.show_only')
        layout.add_portlet('chatter.search')
    info = followed_chatter_json(context, request)
    info['api'] = TemplateAPI(context, request, 'Posts')
    chatter_url = resource_url(find_chatter(context), request)
    info['chatter_url'] = chatter_url
    info['chatter_form_url'] = '%sadd_chatter.html' % chatter_url
    info['context_tools'] = get_context_tools(request)
    info['page_title'] = 'Chatter: Posts'
    info['pushdown'] = False
    info['inline'] = False
    info['show_more'] = len(info['recent']) >= 40
    profiles = find_profiles(request.context)
    profile = profiles.get(userid)
    if profile is not None:
        profile.last_chatter_query = datetime.datetime.utcnow()
    return info
Example #50
0
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,
    )
Example #51
0
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)
Example #52
0
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
Example #53
0
    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),
                }
Example #54
0
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,
               )
Example #55
0
File: login.py Project: lslaz1/karl
    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)
Example #56
0
File: wiki.py Project: lslaz1/karl
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,
                )
Example #57
0
File: page.py Project: hj91/karl
 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
Example #58
0
    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}
Example #59
0
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)