Exemplo n.º 1
0
def _send_signup_email(request, invitation):
    site = find_site(request.context)
    mailer = getUtility(IMailDelivery)
    
    info = {}
    info['system_name'] = get_setting(site, 'system_name', 'OpenCore')
    info['system_email_domain'] = get_setting(site, 'system_email_domain')
    info['from_name'] = '%s invitation' % info['system_name']
    info['from_email'] = 'invitation@%s' % info['system_email_domain']
    info['c_title'] = info['system_name']
    info['c_description'] = ""
    info['c_href'] = model_url(site, request)
    info['mfrom'] = '%s <%s>' % (info['from_name'], info['from_email'])
    info['subject'] = 'Please join the %s community' % info['system_name']
    
    body_template = get_template('templates/email_signup.pt')

    msg = Message()
    msg['From'] = info['mfrom']
    msg['To'] = invitation.email
    msg['Subject'] = info['subject']
    body = body_template(
        system_name=info['system_name'],
        personal_message=invitation.message,
        invitation_url=model_url(site, request, 'signup', invitation.__name__)
        )

    if isinstance(body, unicode):
        body = body.encode("UTF-8")

    msg.set_payload(body, "UTF-8")
    msg.set_type('text/html')
    mailer.send(info['mfrom'], [invitation.email,], msg)    
Exemplo n.º 2
0
def add_referencemanual_view(context, request):
    tags_list=request.POST.getall('tags')
    form = AddReferenceManualForm(tags_list=tags_list)

    if 'form.cancel' in request.POST:
        return HTTPFound(location=model_url(context, request))

    if 'form.submitted' in request.POST:
        try:
            converted = form.validate(request.POST)
            # Create the reference manual and store it
            creator = authenticated_userid(request)
            reference_manual = create_content(IReferenceManual,
                                              converted['title'],
                                              converted['description'],
                                              creator,
                                              )
            name = make_unique_name(context, converted['title'])
            context[name] = reference_manual

            # Save the tags on it.
            set_tags(reference_manual, request, converted['tags'])

            location = model_url(reference_manual, request)
            return HTTPFound(location=location)

        except Invalid, e:
            fielderrors = e.error_dict
            fill_values = form.convert(request.POST)
            tags_field = dict(
                records = [dict(tag=t) for t in request.POST.getall('tags')]
                )
Exemplo n.º 3
0
def edit_referencesection_view(context, request):

    tags_list = request.POST.getall('tags')
    form = EditReferenceSectionForm(tags_list=tags_list)

    if 'form.cancel' in request.POST:
        return HTTPFound(location=model_url(context, request))

    if 'form.submitted' in request.POST:
        try:
            converted = form.validate(request.POST)
            # *will be* modified event
            objectEventNotify(ObjectWillBeModifiedEvent(context))

            context.title = converted['title']
            context.description = converted['description']

            # Save the tags on it
            set_tags(context, request, converted['tags'])

            # Modified
            context.modified_by = authenticated_userid(request)
            objectEventNotify(ObjectModifiedEvent(context))

            location = model_url(context, request)
            msg = "?status_message=Reference%20section%20edited"
            return HTTPFound(location=location+msg)

        except Invalid, e:
            fielderrors = e.error_dict
            fill_values = form.convert(request.POST)
Exemplo n.º 4
0
def report_view(context, request):
    client_json_data = {
        'grid_data': get_grid_data(context, request),
        }
    api = TemplateAPI(context, request, context.title)
    peopledir = find_peopledirectory(context)
    section = context.__parent__
    peopledir_tabs = get_tabs(peopledir, request, section.__name__)

    mgr = ILetterManager(context)
    letter_info = mgr.get_info(request)
    kw, qualifiers = get_search_qualifiers(request)

    descriptions = get_report_descriptions(context)
    print_url = model_url(context, request, 'print.html', **kw)
    csv_url = model_url(context, request, 'csv', **kw)
    pictures_url = model_url(context, request, 'picture_view.html', **kw)
    opensearch_url = model_url(context, request, 'opensearch.xml')

    return render_template_to_response(
        'templates/people_report.pt',
        api=api,
        peopledir=peopledir,
        peopledir_tabs=peopledir_tabs,
        head_data=convert_to_script(client_json_data),
        descriptions=descriptions,
        letters=letter_info,
        print_url=print_url,
        csv_url=csv_url,
        pictures_url=pictures_url,
        qualifiers=qualifiers,
        opensearch_url=opensearch_url,
        actions=get_actions(context, request),
        )
Exemplo n.º 5
0
def calendar_setup_view(context, request):
    default_category_name = ICalendarCategory.getTaggedValue('default_name')
    categories = filter(lambda x: x.__name__ != default_category_name,
                        _get_calendar_categories(context))

    default_layer_name = ICalendarLayer.getTaggedValue('default_name')
    layers = filter(lambda x: x.__name__ != default_layer_name,
                    _get_calendar_layers(context))

    fielderrors = {}
    fielderrors_target = None

    page_title = 'Calendar Setup'
    api = TemplateAPI(context, request, page_title)

    return render_template_to_response(
        'templates/calendar_setup.pt',
        back_to_calendar_url=model_url(context, request),
        categories_url=model_url(context, request, 'categories.html'),
        layers_url=model_url(context, request, 'layers.html'),
        formfields=api.formfields,
        fielderrors=fielderrors,
        fielderrors_target = fielderrors_target,
        api=api,
        editable_categories = categories,
        editable_layers = layers,
        all_categories = _get_all_calendar_categories(context, request),
        colors = _COLORS,
        )
Exemplo n.º 6
0
Arquivo: api.py Projeto: boothead/karl
    def __init__(self, context, request, page_title=None):
        self.context = context
        self.request = request
        self.snippets = get_template("templates/snippets.pt")
        self.snippets.doctype = xhtml
        self.userid = authenticated_userid(request)
        self.app_url = app_url = request.application_url
        self.profile_url = app_url + "/profiles/%s" % self.userid
        self.here_url = self.context_url = model_url(context, request)
        self.view_url = model_url(context, request, request.view_name)
        settings = queryUtility(ISettings)
        self.js_devel_mode = settings and getattr(settings, "js_devel_mode", None)
        self.static_url = "%s/static/%s" % (app_url, _get_static_rev())

        # Provide a setting in the INI to fully control the entire URL
        # to the static.  This is when the proxy runs a different port
        # number, or to "pipeline" resources on a different URL path.
        full_static_path = getattr(settings, "full_static_path", False)
        if full_static_path:
            if "%d" in full_static_path:
                full_static_path = full_static_path % _start_time
            self.static_url = full_static_path
        self.page_title = page_title
        self.system_name = get_setting(context, "system_name", "KARL")
        self.user_is_admin = "group.KarlAdmin" in effective_principals(request)
        site = find_site(context)
        self.admin_url = model_url(site, request, "admin.html")
        self.site_announcement = getattr(site, "site_announcement", "")
Exemplo n.º 7
0
def forbidden(context, request):
    site = find_site(context)
    environ = request.environ
    referrer = environ.get('HTTP_REFERER', '')
    if 'repoze.who.identity' in environ:
        # the user is authenticated but he is not allowed to access this
        # resource
        api = TemplateAPI(context, request, 'Forbidden')
        response =  render_template_to_response(
            'templates/forbidden.pt',
            api=api,
            login_form_url = model_url(site, request, 'login.html'),
            homepage_url = model_url(site, request),
            )
        response.status = '403 Forbidden'
        return response
    elif '/login.html' in referrer:
        url = request.url
        # this request came from a user submitting the login form
        login_url = model_url(site, request, 'login.html',
                              query={'reason':'Bad username or password',
                                     'came_from':url})
        return HTTPFound(location=login_url)
    else:
        # the user is not authenticated and did not come in as a result of
        # submitting the login form
        url = request.url
        query = {'came_from':url}
        while url.endswith('/'):
            url = url[:-1]
        if url != request.application_url: # if request isnt for homepage
            query['reason'] = 'Not logged in'
        login_url = model_url(site, request, 'login.html', query=query)
        return HTTPFound(location=login_url)
Exemplo n.º 8
0
def get_previous_next(context, request):

    # Reference Manual sections have inter-item navigation, which
    # means (sigh) that files and pages do as well.

    # Only works on resources whose parents are orderable
    parent = context.__parent__
    ordering = getattr(parent, 'ordering', None)
    if ordering is None:
        return None, None

    # Be a chicken and sync
    ordering.sync(parent.keys())

    # Find the prev/next names, then flatten some info about them for
    # the ZPT
    current_name = context.__name__
    previous = parent.get(ordering.previous_name(current_name))
    next = parent.get(ordering.next_name(current_name))

    if previous:
        previous = {'title': previous.title,
                    'href': model_url(previous, request)}
    if next:
        next = {'title': next.title,
                    'href': model_url(next, request)}

    return previous, next
Exemplo n.º 9
0
def lock_info_for_view(context, request, from_time=None):
    """return a structure suitable for displaying in a template"""

    if is_locked(context, from_time):
        lock = lock_info(context)
        userid = lock['userid']
        profiles = find_profiles(context)
        profile = profiles.get(userid, None)
        if profile is not None:
            return dict(
                is_locked = True,
                url = model_url(profile, request),
                name = '%s %s' % (profile.firstname,
                                            profile.lastname),
                email = profile.email,
                )
        else:
            return dict(
                is_locked = True,
                url = model_url(profiles, request),
                name = 'Unknown',
                email = '',
                )
    else:
        return dict(
            is_locked = False,
            url = None,
            name = None,
            email = None,
            )
Exemplo n.º 10
0
def _add_existing_users(context, community, profiles, text, request, status=None):
    users = find_users(community)
    for profile in profiles:
        group_name = community.members_group_name
        user_name = profile.__name__
        users.add_group(user_name, group_name)

    # Generate HTML and text mail messages and send a mail for
    # each user added to the community.
    community_href = model_url(community, request)
    _send_aeu_emails(community, community_href, profiles, text)

    # We delivered invitation messages to each user.  Redirect to
    # Manage Members with a status message.
    n = len(profiles)
    if n == 1:
        msg = 'One member added and email sent.'
    else:
        fmt = '%s members added and emails sent.'
        msg = fmt % len(profiles)
    if status:
        msg = msg + ' ' + status    
    if request.POST.get('return_to') is not None:
        location  = request.POST['return_to']
        return render_template_to_response('templates/javascript_redirect.pt', 
                url=location)

    else:
        location = model_url(context, request, 'manage.html',
                             query={'status_message': msg})
        return HTTPFound(location=location)
Exemplo n.º 11
0
def pages_view(context, request):
    page_urls = [(context[p].dublincore['title'],
                  model_url(context, request, p))
                 for p in request.context.keys()]
    return {'project': PROJECT,
            'page_urls': page_urls,
            'page_add_url': model_url(context, request, "@@page_add")
            }
Exemplo n.º 12
0
def edit_page(context, request):
    if 'form.submitted' in request.params:
        context.data = request.params['body']
        return HTTPFound(location = model_url(context, request))

    logged_in = authenticated_userid(request)
    return dict(page = context, logged_in=logged_in,
                save_url = model_url(context, request, 'edit_page'))
Exemplo n.º 13
0
def calendar_setup_layers_view(context, request):
    form = CalendarLayersForm()

    default_layer_name = ICalendarLayer.getTaggedValue('default_name')
    layers = filter(lambda x: x.__name__ != default_layer_name,
                    _get_calendar_layers(context))
    layer_titles = [ x.title for x in layers]
    layer_names = [ x.__name__ for x in layers ]

    default_category_name = ICalendarCategory.getTaggedValue('default_name')
    categories = filter(lambda x: x.__name__ != default_category_name,
                        _get_calendar_categories(context))

    if 'form.delete' in request.POST:
        layer_name = request.POST['form.delete']
        if layer_name == default_layer_name:
            message = 'Cannot delete default layer'
        elif layer_name and layer_name in layer_names:
            title = context[layer_name].title
            del context[layer_name]
            message = '%s layer removed' % title
        else:
            message = 'Layer is invalid'

        location = model_url(context, request, 'layers.html',
                             query={'status_message': message})
        return HTTPFound(location=location)

    fielderrors_target = None
    fielderrors = {}

    if 'form.submitted' in request.POST:
        try:
            converted = form.validate(request.POST)
            category_paths = list(set(request.POST.getall('category_paths')))
            layer_name = generate_name(context)
            layer_title = converted['layer_title']
            layer_color = converted['layer_color']

            if layer_title in layer_titles:
                msg = "Name is already used"
                raise Invalid(value=layer_title, state=None,
                          msg=msg, error_list=None,
                          error_dict={'layer_title': msg})

            layer = create_content(ICalendarLayer,
                                   layer_title, layer_color, category_paths)
            context[layer_name] = layer

            location = model_url(
                context, request,
                'layers.html',
                query={'status_message':'Calendar layer added'})
            return HTTPFound(location=location)

        except Invalid, e:
            fielderrors_target = '__add_layer__'
            fielderrors = e.error_dict
Exemplo n.º 14
0
def journal_add_view(context, request):

    if IJournalEntry.providedBy(context):
        entry = context
        project = context.__parent__.__parent__
        add_form = False
    else:
        entry = JournalEntry()
        project = context
        add_form = True

    errors = {}
    defaults = {}

    if 'form.submitted' in request.POST:
        try:
            # FormEncode validation
            defaults = dict(request.POST)
            defaults['indicators'] = request.POST.get('indicators')
            form_result = entry_schema.to_python(request.POST)
        except formencode.validators.Invalid, why:
            errors = why.error_dict
        else:

            session = DBSession()

            # Handle image upload
            if form_result['image'] is not None:
                entry.image = File('image.jpg', form_result['image'].read())

            elif form_result['image_action'] == 'delete' and entry.image:
                session.delete(entry.image)

            entry.date = datetime.now()
            entry.text = form_result['text']
            entry.user = authenticated_user(request)

            # Check whether indicator belongs to this project.
            indicator_query = session.query(Indicator)
            indicator_query = indicator_query.filter(Project.id == project.id)
            indicator_query = indicator_query.join(Project.objectives)
            indicator_query = indicator_query.join(Objective.competences)
            indicator_query = indicator_query.join(Competence.indicator_sets)
            indicator_query = indicator_query.join(IndicatorSet.indicators)
            if form_result['indicators']:
                indicator_query = indicator_query.filter(
                    Indicator.id.in_(form_result['indicators']))
                indicators = indicator_query.all()
                entry.indicators = indicators

            if add_form:
                project.journal_entries.append(entry)

            if ITeacher.providedBy(authenticated_user(request)):
                return HTTPFound(location=model_url(
                    get_root(request)['projects'][project.id], request))
            return HTTPFound(
                location=model_url(authenticated_user(request), request))
Exemplo n.º 15
0
def jquery_livesearch_view(context, request):
    # Prefix search is with a wildcard at the end
    searchterm = request.params.get("val", None)

    if searchterm is None:
        # The request forgot to send the key we use to do a search, so
        # make a friendly error message.  Important for the unit test.
        msg = "Client failed to send a 'val' parameter as the searchterm"
        return HTTPBadRequest(msg)
    else:
        searchterm = searchterm + "*"

    records = LivesearchResults()
    principals = effective_principals(request)

    site_path = model_path(context)

    records.set_header("", pre='<div class="header"></div>')
    records.append_to(
        rowclass="showall",
        title="Show All",
        href=model_url(context, request, "searchresults.html", query={"body": searchterm}),
    )

    for listitem in get_listitems(IGroupSearchFactory):
        utility = listitem["component"]

        factory = utility(context, request, searchterm)

        if factory is None:
            continue

        try:
            num, docids, resolver = factory()
        except ParseError:
            continue

        groupname = listitem["title"]

        records.set_header(groupname, pre='<div class="header">%s</div>' % (groupname,))

        results = filter(None, map(resolver, docids))

        qs = {"body": searchterm, "kind": groupname}
        sr_href = model_url(context, request, "searchresults.html", query=qs)

        for result in results:
            records.append_to(
                rowclass="result", title=getattr(result, "title", "<No Title>"), href=model_url(result, request)
            )

        if results:
            records.append_to(rowclass="showall", title="Show All", href=sr_href)
        else:
            records.append_to(rowclass="noresult", title="No Result", href=sr_href)

    result = JSONEncoder().encode(list(records))
    return Response(result, content_type="application/x-json")
Exemplo n.º 16
0
    def __call__(self):
        context, request = self.context, self.request
        api = AdminTemplateAPI(context, request, "Admin UI: Send Email")
        admin_email = get_setting(context, "admin_email")
        system_name = get_setting(context, "system_name")
        profiles = find_profiles(context)
        admin = profiles[authenticated_userid(request)]
        from_emails = [
            ("self", "%s <%s>" % (admin.title, admin.email)),
            ("admin", "%s Administrator <%s>" % (system_name, admin_email)),
        ]

        if "send_email" in request.params:
            mailer = getUtility(IMailDelivery)
            group = request.params["to_group"]
            users = find_users(context)
            search = ICatalogSearch(context)
            count, docids, resolver = search(interfaces=[IProfile])
            n = 0
            for docid in docids:
                profile = resolver(docid)
                if getattr(profile, "security_state", None) == "inactive":
                    continue
                userid = profile.__name__
                if group and not users.member_of_group(userid, group):
                    continue

                message = Message()
                if request.params["from_email"] == "self":
                    message["From"] = from_emails[0][1]
                    message_from = admin.email
                else:
                    message["From"] = from_emails[1][1]
                    message_from = admin_email
                message["To"] = "%s <%s>" % (profile.title, profile.email)
                message["Subject"] = request.params["subject"]
                body = u"<html><body>%s</body></html>" % (request.params["text"])
                message.set_payload(body.encode("UTF-8"), "UTF-8")
                message.set_type("text/html")

                mailer.send([profile.email], message)
                n += 1

            status_message = "Sent message to %d users." % n
            if has_permission(ADMINISTER, context, request):
                redirect_to = model_url(context, request, "admin.html", query=dict(status_message=status_message))
            else:
                redirect_to = model_url(
                    find_communities(context),
                    request,
                    "all_communities.html",
                    query=dict(status_message=status_message),
                )

            return HTTPFound(location=redirect_to)

        return dict(api=api, menu=_menu_macro(), to_groups=self.to_groups, from_emails=from_emails)
Exemplo n.º 17
0
def application_view(context, request):

    user = authenticated_user(request)
    if user:
        if ITeacher.providedBy(user):
            return HTTPFound(location=model_url(context, request, "dashboard.html"))
        return HTTPFound(location=model_url(user, request))

    return HTTPFound(location=model_url(context, request, "login.html"))
Exemplo n.º 18
0
def redirector_view(context, request):
    where = context.target_url
    if not where.startswith('http'):
        if where.startswith('/'):
            where = basejoin(model_url(context, request), where)
        else:
            elements = where.split('/')
            where = model_url(context.__parent__, request, *elements)
    return HTTPFound(location=where)
Exemplo n.º 19
0
def change_password_view(context, request):
    min_pw_length = get_setting(context, 'min_pw_length')
    form = ChangePasswordForm(min_pw_length=min_pw_length)
    if 'form.cancel' in request.POST:
        return HTTPFound(location=model_url(context, request))

    if 'form.submitted' in request.POST:
        try:
            converted = form.validate(request.POST)
            users = find_users(context)
            userid = context.__name__
            user = users.get_by_id(userid)

            # check the old password
            # XXX: repoze.who.plugins.zodb.interfaces.IUsers
            # really should have a check_password(id, password)
            # method.  We shouldn't have to use get_sha_password
            # directly.
            enc = get_sha_password(converted['old_password'])
            if enc != user['password']:
                raise CustomInvalid({'old_password': '******'})

            users.change_password(userid, converted['password'])

            # send email
            system_name = get_setting(context, 'system_name', 'KARL')
            mail = karl.mail.Message()
            admin_email = get_setting(context, 'admin_email')
            mail["From"] = "%s Administrator <%s>" % (system_name, admin_email)
            mail["To"] = "%s <%s>" % (context.title, context.email)
            mail["Subject"] = "%s Password Change Notification" % system_name
            system_name = get_setting(context, 'system_name', 'KARL')
            body = render_template(
                "templates/email_change_password.pt",
                login=user['login'],
                password=converted['password'],
                system_name=system_name,
            )

            if isinstance(body, unicode):
                body = body.encode("UTF-8")

            mail.set_payload(body, "UTF-8")
            mail.set_type("text/html")

            recipients = [context.email]
            mailer = getUtility(IMailDelivery)
            mailer.send(admin_email, recipients, mail)

            path = model_url(context, request)
            msg = '?status_message=Password%20changed'
            return HTTPFound(location=path+msg)

        except Invalid, e:
            fielderrors = e.error_dict
            fill_values = form.convert(request.POST)
Exemplo n.º 20
0
def members_view(context, request):

    session = DBSession()
    all_students = session.query(Student).all()
    all_students = [
        student for student in all_students if not student in context.students
    ]
    all_teachers = session.query(Teacher).all()
    all_teachers = [
        teacher for teacher in all_teachers if not teacher in context.teachers
    ]

    if 'form.submitted' in request.POST:
        student_id = request.POST.get('student_id', None)
        if student_id:
            student = session.query(Student).filter_by(id=student_id).first()
            if student:
                context.students.append(student)
        teacher_id = request.POST.get('teacher_id', None)
        if teacher_id:
            teacher = session.query(Teacher).filter_by(id=teacher_id).first()
            if teacher:
                context.teachers.append(teacher)

        return HTTPFound(location=model_url(context, request, 'members.html'))
    # This should be a post request, but it has to be finished today ...
    elif 'remove_student' in request.GET:
        student_id = request.GET.get('remove_student', None)
        if student_id:
            student = context.students.filter_by(id=student_id).first()
            if student:
                context.students.remove(student)
        return HTTPFound(location=model_url(context, request, 'members.html'))
    elif 'remove_teacher' in request.GET:
        teacher_id = request.GET.get('remove_teacher', None)
        if teacher_id:
            teacher = context.teachers.filter_by(id=teacher_id).first()
            if teacher:
                context.teachers.remove(teacher)
        return HTTPFound(location=model_url(context, request, 'members.html'))

    root = get_root(request)
    students = []
    for student in context.students:
        students.append(root['users'][student.id])

    teachers = []
    for teacher in context.teachers:
        teachers.append(root['users'][teacher.id])

    return dict(api=TemplateAPI(request),
                context=context,
                students=students,
                all_students=all_students,
                teachers=teachers,
                all_teachers=all_teachers)
Exemplo n.º 21
0
def page_view(context, request):
    dc_schema = DublinCoreSchema()
    dc_form = Form(dc_schema)
    dc_form['subject'].widget.category = None # HACK: display sequence label
    return {'project': PROJECT,
            'page': context,
            'dc_form': dc_form.render(context.dublincore, readonly=True),
            'page_edit_url': model_url(context, request, "@@page_edit"),
            'page_edit_dc_url': model_url(context, request, "@@page_edit_dc")
            }
Exemplo n.º 22
0
 def status_response(self, msg):
     location = model_url(self.parent, self.request)
     if IComment.providedBy(self.context):
         # for comment replies we need the location of the real container 
         # like forum topic or profile or community
         log.debug('commenting status_response: reply context=%s, grandparent=%s' % (self.context, self.parent.__parent__))
         location = model_url(self.parent.__parent__, self.request)
         
     location = '%s?status_message=%s' % (location, urllib.quote(msg))
     return HTTPFound(location=location)
Exemplo n.º 23
0
def application_view(context, request):

    user = authenticated_user(request)
    if user:
        if ITeacher.providedBy(user):
            return HTTPFound(
                location=model_url(context, request, 'dashboard.html'))
        return HTTPFound(location=model_url(user, request))

    return HTTPFound(location=model_url(context, request, 'login.html'))
Exemplo n.º 24
0
def journal_add_view(context, request):
    
    if IJournalEntry.providedBy(context):
        entry = context
        project = context.__parent__.__parent__
        add_form = False
    else:
        entry = JournalEntry()
        project = context
        add_form = True
        
    errors = {}
    defaults = {}
    
    if 'form.submitted' in request.POST:
        try:
            # FormEncode validation
            defaults = dict(request.POST)
            defaults['indicators'] = request.POST.get('indicators')
            form_result = entry_schema.to_python(request.POST)
        except formencode.validators.Invalid, why:
            errors=why.error_dict
        else:
            
            session = DBSession()
            
            # Handle image upload
            if form_result['image'] is not None:
                entry.image = File('image.jpg', form_result['image'].read())

            elif form_result['image_action'] == 'delete' and entry.image:
                session.delete(entry.image)
            
            entry.date = datetime.now()
            entry.text = form_result['text']
            entry.user = authenticated_user(request)
            
            # Check whether indicator belongs to this project.
            indicator_query = session.query(Indicator)
            indicator_query = indicator_query.filter(Project.id == project.id)
            indicator_query = indicator_query.join(Project.objectives)
            indicator_query = indicator_query.join(Objective.competences)
            indicator_query = indicator_query.join(Competence.indicator_sets)
            indicator_query = indicator_query.join(IndicatorSet.indicators)
            if form_result['indicators']:
                indicator_query = indicator_query.filter(Indicator.id.in_(form_result['indicators']))
                indicators = indicator_query.all()
                entry.indicators = indicators
            
            if add_form:
                project.journal_entries.append(entry)
                
            if ITeacher.providedBy(authenticated_user(request)):
                return HTTPFound(location = model_url(get_root(request)['projects'][project.id], request))
            return HTTPFound(location = model_url(authenticated_user(request), request))
Exemplo n.º 25
0
 def url(self):
     if self._url is None:
         if IComment.providedBy(self.context):
             # show the comment in context of its grandparent.
             # (its parent is a comments folder.)
             parent = self.context.__parent__.__parent__
             self._url = '%s#comment-%s' % (
                 model_url(parent, self.request), self.context.__name__)
         else:
             self._url = model_url(self.context, self.request)
     return self._url
Exemplo n.º 26
0
def show_forum_view(context, request):

    page_title = context.title
    api = request.api
 
    actions = []
    if has_permission('create', context, request):
        actions.append(('Add Forum Topic', 'add_forum_topic.html'))
    if has_permission('edit', context, request):
        actions.append(('Edit', 'edit.html'))
    if has_permission('delete', context, request):
        actions.append(('Delete', 'delete.html'))

    profiles = find_profiles(context)
    appdates = getUtility(IAppDates)

    topic_batch = get_topic_batch(context, request)
    topic_entries = topic_batch['entries']

    topics = []
    for topic in topic_entries:
        D = {}
        profile = profiles.get(topic.creator)
        posted_by = getattr(profile, 'title', None)
        date = appdates(topic.created, 'longform')
        D['url'] = model_url(topic, request)
        D['title'] = topic.title
        D['posted_by'] = posted_by
        D['date'] = date
        D['number_of_comments'] = len(topic['comments'])
        topics.append(D)

    # In the intranet side, the backlinks should go to the show_forums
    # view (the default)
    forums = context.__parent__
    backto = {
        'href': model_url(forums, request),
        'title': forums.title,
        }

    # Get a layout
    layout_provider = get_layout_provider(context, request)
    layout = layout_provider('generic')

    return render_template_to_response(
        'templates/show_forum.pt',
        api = api,
        actions = actions,
        title = context.title,
        topics = topics,
        batch_info = topic_batch,
        backto=backto,
        layout=layout,
        )
Exemplo n.º 27
0
def show_forum_topic_view(context, request):
    post_url = model_url(context, request, "comments", "add_comment.html")
    page_title = context.title

    actions = []
    if has_permission('edit', context, request):
        actions.append(('Edit', 'edit.html'))
    if has_permission('delete', context, request):
        actions.append(('Delete', 'delete.html'))

    api = request.api
    api.page_title = page_title

    byline_info = getMultiAdapter((context, request), IBylineInfo)
    forum = find_interface(context, IForum)
    backto = {
        'href': model_url(forum, request),
        'title': forum.title,
        }

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

    # Get a layout
    layout_provider = get_layout_provider(context, request)
    layout = layout_provider('community')

    if support_attachments(context):
        attachments = fetch_attachments(context['attachments'], request)
    else:
        attachments = ()

    # enable imagedrawer for adding forum replies (comments)
    api.karl_client_data['text'] = dict(
            enable_imagedrawer_upload = True,
            )

    return render_template_to_response(
        'templates/show_forum_topic.pt',
        api=api,
        actions=actions,
        comments=comments_to_display(request),
        attachments=attachments,
        formfields=api.formfields,
        post_url=post_url,
        byline_info=byline_info,
        head_data=convert_to_script(client_json_data),
        backto=backto,
        layout=layout,
        comment_form={},
        )
Exemplo n.º 28
0
def members_view(context, request):
    
    session = DBSession()
    all_students = session.query(Student).all()
    all_students = [student for student in all_students if not student in context.students]
    all_teachers = session.query(Teacher).all()
    all_teachers = [teacher for teacher in all_teachers if not teacher in context.teachers]
    
    if 'form.submitted' in request.POST:
        student_id = request.POST.get('student_id', None)
        if student_id:
            student = session.query(Student).filter_by(id=student_id).first()
            if student:
                context.students.append(student)
        teacher_id = request.POST.get('teacher_id', None)
        if teacher_id:
            teacher = session.query(Teacher).filter_by(id=teacher_id).first()
            if teacher:
                context.teachers.append(teacher)
        
        return HTTPFound(location = model_url(context, request, 'members.html'))
    # This should be a post request, but it has to be finished today ...
    elif 'remove_student' in request.GET:
        student_id = request.GET.get('remove_student', None)
        if student_id:
            student = context.students.filter_by(id=student_id).first()
            if student:
                context.students.remove(student)
        return HTTPFound(location = model_url(context, request, 'members.html'))
    elif 'remove_teacher' in request.GET:
        teacher_id = request.GET.get('remove_teacher', None)
        if teacher_id:
            teacher = context.teachers.filter_by(id=teacher_id).first()
            if teacher:
                context.teachers.remove(teacher)
        return HTTPFound(location = model_url(context, request, 'members.html'))
        
    root = get_root(request)
    students = []
    for student in context.students:
        students.append(root['users'][student.id])
        
    teachers = []
    for teacher in context.teachers:
        teachers.append(root['users'][teacher.id])
    
    return dict(api=TemplateAPI(request),
                context=context,
                students=students,
                all_students=all_students,
                teachers=teachers,
                all_teachers=all_teachers)
    
Exemplo n.º 29
0
def logout_view(context, request, reason='Logged out'):
    site = find_site(context)
    site_url = model_url(site, request)
    login_url = model_url(site, request, 'login.html', query={
        'reason': reason, 'came_from': site_url})

    redirect = HTTPFound(location=login_url)
    plugins = request.environ.get('repoze.who.plugins', {})
    auth_tkt = plugins.get('auth_tkt')
    if auth_tkt is not None:
        forget_headers = auth_tkt.forget(request.environ, {})
        redirect.headers.update(forget_headers)
    return redirect
Exemplo n.º 30
0
    def __call__(self):
        context = self.context
        request = self.request

        page_title = context.title
        api = request.api
        api.page_title = page_title
        appdates = getUtility(IAppDates)

        actions = []
        if has_permission('create', context, request):
            actions = self._admin_actions

        forums = list(context.values())
        forums.sort(titlesort)

        forum_data = []

        for forum in forums:
            D = {}
            D['title'] = forum.title
            D['url'] = model_url(forum, request)
            D['number_of_topics'] = number_of_topics(forum)
            D['number_of_comments'] = number_of_comments(forum, request)

            latest = latest_object(forum, request)

            _NOW = datetime.datetime.now()

            if latest:
                D['latest_activity_url'] = model_url(latest, request)
                D['latest_activity_link'] = getattr(latest, 'title', None)
                D['latest_activity_by'] = getattr(latest, 'creator', None)
                modified = getattr(latest, 'modified_date', _NOW)
                modified_str = appdates(modified, 'longform')
                D['latest_activity_at'] = modified_str
            else:
                D['latest_activity_url'] = None
                D['latest_activity_link'] = None
                D['latest_activity_by'] = None
                D['latest_activity_at'] = None

            forum_data.append(D)

        return render_template_to_response(
            'templates/show_forums.pt',
            api=api,
            actions=actions,
            forum_data = forum_data,
            layout = self.layout
            )
Exemplo n.º 31
0
    def handle_submit(self, converted):
        context = self.context
        community = self.community
        request = self.request
        users = find_users(context)
        profiles = self.profiles

        password = converted['password']
        password_confirm = converted['password_confirm']

        if password != password_confirm:
            msg = 'Mismatched password and confirm'
            raise ValidationError(password_confirm=msg, password=msg)

        username = converted['username']
        if username in profiles:
            raise ValidationError(username='******')

        community_href = model_url(community, request)
        groups = [ community.members_group_name ]
        users.add(username, username, password, groups)
        plugin = request.environ['repoze.who.plugins']['auth_tkt']
        identity = {'repoze.who.userid':username}
        remember_headers = plugin.remember(request.environ, identity)
        profile = create_content(
            IProfile,
            firstname=converted['firstname'],
            lastname=converted['lastname'],
            email=context.email,
            phone=converted['phone'],
            extension=converted['extension'],
            department=converted['department'],
            position=converted['position'],
            organization=converted['organization'],
            location=converted['location'],
            country=converted['country'],
            website=converted['website'],
            languages=converted['languages']
            )
        profiles[username] = profile
        workflow = get_workflow(IProfile, 'security')
        if workflow is not None:
            workflow.initialize(profile)
        handle_photo_upload(profile, converted, thumbnail=True)

        del context.__parent__[context.__name__]
        url = model_url(community, request,
                        query={'status_message':'Welcome!'})
        _send_ai_email(community, community_href, username, profile)
        self.filestore.clear()
        return HTTPFound(headers=remember_headers, location=url)
Exemplo n.º 32
0
def advanced_folder_view(context, request):

    page_title = 'Advanced Settings For ' + context.title
    api = TemplateAPI(context, request, page_title)

    if 'form.cancel' in request.POST:
        return HTTPFound(location=model_url(context, request))

    if 'form.submitted' in request.POST:
        marker = request.POST.get('marker', False)
        if marker == 'reference_manual':
            alsoProvides(context, IReferencesFolder)
            noLongerProvides(context, INetworkNewsMarker)
            noLongerProvides(context, INetworkEventsMarker)
        elif marker == 'network_news':
            alsoProvides(context, INetworkNewsMarker)
            noLongerProvides(context, IReferencesFolder)
            noLongerProvides(context, INetworkEventsMarker)
        elif marker == 'network_events':
            alsoProvides(context, INetworkEventsMarker)
            noLongerProvides(context, IReferencesFolder)
            noLongerProvides(context, INetworkNewsMarker)

        if marker:
            location = model_url(context, request, query=
                                 {'status_message': 'Marker changed'})
            return HTTPFound(location=location)

    # Get a layout
    layout_provider = get_layout_provider(context, request)
    layout = layout_provider('community')

    if IReferencesFolder.providedBy(context):
        selected = 'reference_manual'
    elif INetworkNewsMarker.providedBy(context):
        selected = 'network_news'
    elif INetworkEventsMarker.providedBy(context):
        selected = 'network_events'
    else:
        selected = None

    return render_template_to_response(
        'templates/advanced_folder.pt',
        api=api,
        actions=[],
        formfields=api.formfields,
        post_url=model_url(context, request, 'advanced.html'),
        layout=layout,
        fielderrors={},
        selected=selected,
        )
Exemplo n.º 33
0
    def message(self):
        if self._message is not None:
            return self._message

        community = self._community
        request = self.request
        profile = self.profile
        model = self._model

        community_href = model_url(community, request)
        model_href = model_url(model, request)
        manage_preferences_href = model_url(profile, request)
        system_name = get_setting(self.context, "system_name", "KARL")
        system_email_domain = get_setting(self.context, "system_email_domain")

        body_template = get_template(self._template)
        from_name = "%s | %s" % (self.creator.title, system_name)
        msg = Message()
        msg["From"] = "%s <%s>" % (from_name, self.mfrom)
        msg["To"] = "%s <%s>" % (community.title, profile.email)
        msg["Subject"] = self._subject
        body = body_template(
            context=self.context,
            community=community,
            community_href=community_href,
            model=model,
            model_href=model_href,
            manage_preferences_href=manage_preferences_href,
            profile=profile,
            creator=self.creator,
            content_type=self._content_type_name,
            digest=self.digest,
            alert=self,
        )

        if self.digest:
            # Only interested in body for digest
            html = document_fromstring(body)
            body_element = html.cssselect('body')[0]
            span = etree.Element("span", nsmap=body_element.nsmap)
            span[:] = body_element[:] # Copy all body elements to an empty span
            body = etree.tostring(span, pretty_print=True)

        if isinstance(body, unicode):
            body = body.encode('utf-8')

        msg.set_payload(body, 'utf-8')
        msg.set_type("text/html")
        self._message = msg
        return msg
Exemplo n.º 34
0
def logged_in_view(context, request):

    user = authenticated_user(request)

    # Direct to the url of the "home" menu item which is user type specific.
    home_entry = get_current_registry().queryMultiAdapter((user, request),
                                                          IGlobalMenuEntry,
                                                          name="home")
    if home_entry:
        return HTTPFound(location=home_entry.url)
    else:
        return HTTPFound(location=model_url(
            context, request, 'login.html', query={'login_failed': '1'}))
Exemplo n.º 35
0
def student_view(context, request):

    competence_cloud = student_competence_cloud_view(context, request)

    # Redirect if the student is accessed by a teacher (gives a nicer URL).
    if authenticated_user(request) != context:
        return HTTPFound(location=model_url(context, request, 'stats.html'))

    return dict(student=context,
                competence_cloud=competence_cloud,
                request=request,
                comments_view=comments_view,
                api=TemplateAPI(request))
Exemplo n.º 36
0
def comments_add_view(context, request):

    journal_entry = context.__parent__

    # Comment to add
    if request.POST.get('comment_text', None):
        comment = Comment()
        comment.journal_entry = journal_entry
        comment.user = authenticated_user(request)
        comment.text = request.POST['comment_text']
        comment.date = datetime.datetime.now()

    html = comments_view(context, request)
    response = simplejson.dumps(dict(id=model_url(context, request),
                                     html=html))

    return Response(response)
Exemplo n.º 37
0
def view_pw_reset(context, request):

    # Second step: User is visiting reset url
    if 'key' in request.params:
        key = request.params['key']

        if 'form.submitted' in request.params:
            try:
                # FormEncode validation
                schema = PWResetSchema()
                form_result = schema.to_python(request.params)
            except formencode.validators.Invalid, why:
                form = render_template('templates/password_reset.pt',
                                       request=request,
                                       api=TemplateAPI(request))
                # FormEncode fills template with error messages
                form = htmlfill.render(form,
                                       defaults=request.params,
                                       errors=why.error_dict)
                return Response(form)
            else:
                session = DBSession()
                user = session.query(User).filter_by(
                    email=form_result['email']).one()
                if key == user.password_reset_key():
                    user.password = '******' % sha.new(
                        form_result['password'].encode('utf-8')).hexdigest()
                    # Login directly
                    headers = []
                    plugins = request.environ.get('repoze.who.plugins', {})
                    identifier = plugins.get('auth_tkt')
                    if identifier:
                        identity = {'repoze.who.userid': form_result['email']}
                        headers = identifier.remember(request.environ,
                                                      identity)
                    request.environ['repoze.who.userid'] = form_result['email']
                    return HTTPFound(location=model_url(context, request),
                                     headers=headers)
                else:
                    statusmessage.show(request, u"Retrieve request not valid.",
                                       u"error")

        return render_template_to_response('templates/password_reset.pt',
                                           request=request,
                                           api=TemplateAPI(request))
Exemplo n.º 38
0
def objective_edit_view(context, request):

    session = DBSession()
    competences = session.query(Competence).all()

    if IObjective.providedBy(context):
        add_form = False
        objective = context
        project = context.project
        context = objective.__parent__
    else:
        objective = Objective()
        add_form = True
        project = context.__parent__

    errors = {}
    defaults = {}

    if 'form.submitted' in request.POST:
        try:
            # FormEncode validation
            defaults = dict(request.POST)
            form_result = objective_schema.to_python(request.POST)
        except formencode.validators.Invalid, why:
            errors = why.error_dict
        else:
            # Apply schema fields to the project object
            changed = False
            competences = []
            for competence_id in form_result['competences']:
                competence = session.query(Competence).filter_by(
                    id=competence_id).first()
                if competence:
                    competences.append(competence)
            form_result['competences'] = competences
            for field_name in objective_schema.fields.keys():
                if form_result[field_name] != getattr(objective, field_name):
                    setattr(objective, field_name, form_result[field_name])
                    changed = True
            # Add onjective if this is the add form
            if add_form:
                objective.project = project
                session.add(objective)
            return HTTPFound(location=model_url(context, request))
Exemplo n.º 39
0
def indicator_edit_view(context, request):

    if IIndicator.providedBy(context):
        indicator = context
        indicator_set = indicator.indicator_set
        add_form = False
    else:
        indicator = Indicator()
        indicator_set = context.__parent__
        add_form = True

    competences_container = find_interface(context, ICompetences)

    errors = {}
    defaults = {}

    if 'form.submitted' in request.POST:
        try:
            # FormEncode validation
            defaults = dict(request.POST)
            form_result = indicator_schema.to_python(request.POST)
        except formencode.validators.Invalid, why:
            errors = why.error_dict
        else:
            # Apply schema fields to the project object
            field_names = [
                p.key for p in class_mapper(Indicator).iterate_properties
            ]
            changed = False
            for field_name in field_names:
                if field_name in form_result.keys():
                    if form_result[field_name] != getattr(
                            indicator, field_name):
                        setattr(indicator, field_name, form_result[field_name])
                        changed = True
            # Add project if this is the add form
            if add_form:
                session = DBSession()
                indicator.indicator_set = indicator_set
                indicator.index = indicator_set.indicators.count() - 1
                session.add(indicator)
            return HTTPFound(
                location=model_url(competences_container, request))
Exemplo n.º 40
0
    def obj2Data(self, obj, parent_paths=None):
        dc = obj.metadata.get('dublin', {})
        name = obj.__name__
        title = dc.get('title', obj.__name__)
        icon_url = '/static/folder.gif'
        view = '/view.html'

        url = model_url(obj, self.request)
        if IFRSFolder.providedBy(obj):
            view = ''
        else:
            url = url[:-1]

        if IFRSFile.providedBy(obj):
            icon_url = '/static/file.gif'
        if IFRSDocument.providedBy(obj):
            icon_url = '/static/document.gif'
            view = ''
        if IFRSImage.providedBy(obj):
            icon_url = '/static/image.gif'
        data = {
            'name': name,
            'url': url,
            'view': view,
            'icon': icon_url,
            'title': title,
            'children': [],
            'flag': ''
        }
        if not IFRSFolder.providedBy(obj):
            data['children'] = None
        elif parent_paths is not None:
            data['children'] = self.appendChildren(obj, parent_paths)

        if obj.vpath == self.context.vpath:
            data['flag'] = 'current'
        elif obj.vpath + '/index.rst' == self.context.vpath:
            for child in data['children']:
                if 'index.rst' == data['name']:
                    return data
            data['flag'] = 'current'
        return data
Exemplo n.º 41
0
def competence_edit_view(context, request):

    session = DBSession()
    meta_competences = session.query(MetaCompetence).all()

    if ICompetence.providedBy(context):
        competence = context
        context = competence.__parent__
        add_form = False
    else:
        competence = Competence()
        add_form = True

    errors = {}
    defaults = {}

    if 'form.submitted' in request.POST:
        try:
            # FormEncode validation
            defaults = dict(request.POST)
            form_result = competence_schema.to_python(request.POST)
        except formencode.validators.Invalid, why:
            errors = why.error_dict
        else:
            # Apply schema fields to the project object
            field_names = [
                p.key for p in class_mapper(Competence).iterate_properties
            ]
            changed = False
            for field_name in field_names:
                if field_name in form_result.keys():
                    if form_result[field_name] != getattr(
                            competence, field_name):
                        setattr(competence, field_name,
                                form_result[field_name])
                        changed = True
            # Add project if this is the add form
            if add_form:
                session.add(competence)
            return HTTPFound(location=model_url(context, request))
Exemplo n.º 42
0
def project_edit_view(context, request):

    if IProject.providedBy(context):
        project = context
        context = project.__parent__
        add_form = False
    else:
        project = Project()
        add_form = True

    errors = {}
    defaults = {}

    if 'form.submitted' in request.POST:
        try:
            # FormEncode validation
            defaults = dict(request.POST)
            form_result = project_schema.to_python(request.POST)
        except formencode.validators.Invalid, why:
            errors = why.error_dict
        else:
            # Apply schema fields to the project object
            changed = False
            for field_name in project_schema.fields.keys():
                if form_result[field_name] != getattr(project, field_name):
                    setattr(project, field_name, form_result[field_name])
                    changed = True
            # Add project if this is the add form
            if add_form:
                session = DBSession()
                # Add the teacher that created the project to the project.
                user = authenticated_user(request)
                if ITeacher.providedBy(user):
                    project.teachers.append(user)
                session.add(project)
            return HTTPFound(location=model_url(context, request))
Exemplo n.º 43
0
 def url(self):
     return model_url(self.context, self.request, 'stats.html')
Exemplo n.º 44
0
 def url(self):
     return model_url(self.context, self.request, 'projects_info.html')
Exemplo n.º 45
0
 def url(self):
     return model_url(self.context, self.request)
Exemplo n.º 46
0
            for field_name in field_names:
                if field_name in form_result.keys():
                    if form_result[field_name] != getattr(
                            indicator_set, field_name):
                        setattr(indicator_set, field_name,
                                form_result[field_name])
                        changed = True
            # Add project if this is the add form
            if add_form:
                session = DBSession()
                indicator_set.competence = competence
                session.add(indicator_set)
            return HTTPFound(
                location=model_url(competence.__parent__, request))
    elif 'form.cancel' in request.POST:
        return HTTPFound(location=model_url(competence.__parent__, request))

    else:
        if not add_form:
            field_names = [
                p.key for p in class_mapper(IndicatorSet).iterate_properties
            ]
            for field_name in field_names:
                defaults[field_name] = getattr(indicator_set, field_name)

    form = render_template('templates/indicator_set_edit.pt',
                           indicator_set=indicator_set,
                           competence=competence,
                           add_form=add_form,
                           api=TemplateAPI(request))
    # FormEncode fills template with default values
Exemplo n.º 47
0
 def url(self):
     return model_url(self.request.root, self.request, 'users')
Exemplo n.º 48
0
 def url(self):
     return model_url(self.context, self.request, 'edit.html')
Exemplo n.º 49
0
 def url(self):
     return model_url(self.user, self.request)
Exemplo n.º 50
0
    if 'form.submitted' in request.params:
        try:
            # FormEncode validation
            schema = PWResetRequestSchema()
            form_result = schema.to_python(request.params)
        except formencode.validators.Invalid, why:
            form = render_template(
                'templates/password_retrieve.pt',
                request=request,
                api=TemplateAPI(request),
            )
            # FormEncode fills template with error messages
            form = htmlfill.render(form,
                                   defaults=request.params,
                                   errors=why.error_dict)
            return Response(form)
        else:
            session = DBSession()
            user = session.query(User).filter_by(
                email=form_result['email']).one()
            reset_url = model_url(get_root(request), request,
                                  'retrieve_password.html')
            user.send_password_reset(reset_url)

            statusmessage.show(request, u'Password retrieval e-mail sent.')
            return HTTPFound(location=model_url(context, request))

    return render_template_to_response('templates/password_retrieve.pt',
                                       request=request,
                                       api=TemplateAPI(request))
Exemplo n.º 51
0
            # Add student if this is the add form
            if add_form:
                session = DBSession()
                session.add(student)

                if not form_result['password']:
                    reset_url = model_url(get_root(request), request,
                                          'retrieve_password.html')
                    student.send_password_reset(reset_url)

            return HTTPFound(
                location=model_url(context, request, str(student.id)))

    elif 'form.cancel' in request.POST:
        if add_form:
            return HTTPFound(location=model_url(context, request))
        else:
            return HTTPFound(
                location=model_url(context, request, str(student.id)))

    else:
        if not add_form:
            field_names = [
                p.key for p in class_mapper(Student).iterate_properties
            ]
            for field_name in field_names:
                defaults[field_name] = getattr(student, field_name)
            defaults['portrait'] = ''
            if defaults['date_of_birth']:
                defaults['date_of_birth'] = defaults['date_of_birth'].strftime(
                    '%d/%m/%Y')
Exemplo n.º 52
0
 def absolute_url(self, request=None):
     if request is None:
         request = self._request()
     return model_url(self, request)
Exemplo n.º 53
0
                competence = session.query(Competence).filter_by(
                    id=competence_id).first()
                if competence:
                    competences.append(competence)
            form_result['competences'] = competences
            for field_name in objective_schema.fields.keys():
                if form_result[field_name] != getattr(objective, field_name):
                    setattr(objective, field_name, form_result[field_name])
                    changed = True
            # Add onjective if this is the add form
            if add_form:
                objective.project = project
                session.add(objective)
            return HTTPFound(location=model_url(context, request))
    elif 'form.cancel' in request.POST:
        return HTTPFound(location=model_url(context, request))

    else:
        if not add_form:
            for field_name in objective_schema.fields.keys():
                value = getattr(objective, field_name)
                if field_name == 'competences':
                    values = []
                    for competence in value:
                        values.append(competence.id)
                    value = values
                defaults[field_name] = value

    form = render_template('templates/objective_edit.pt',
                           objective=objective,
                           competences=competences,
Exemplo n.º 54
0
 def url(self):
     return model_url(self.context, self.request, 'objectives')
Exemplo n.º 55
0
 def url(self):
     return model_url(self.context, self.request, 'application.html')
Exemplo n.º 56
0
def teacher_edit_view(context, request):
    
    if ITeacher.providedBy(context):
        teacher = context
        context = teacher.__parent__
        add_form = False
    else:
        teacher = Teacher(id=uuid.uuid4())
        add_form = True
    
    errors = {}
    defaults = {}
    
    if 'form.submitted' in request.POST:
        try:
            # FormEncode validation
            defaults = dict(request.POST)
            state = FormencodeState()
            state.user_id = teacher.user_name
            if add_form:
                form_result = teacher_add_schema.to_python(request.POST, state)
            else:
                form_result = teacher_schema.to_python(request.POST, state)
        except formencode.validators.Invalid, why:
            errors=why.error_dict
        else:
            changed = False
            
            # Convert password to SHA hash
            if form_result.get('password', None):
                form_result['password'] = '******' % sha.new(form_result['password']).hexdigest()
                changed = True
            
            # Handle portrait upload
            if form_result['portrait'] is not None:
                
                # Scale image and convert to JPEG
                im = Image.open(form_result['portrait'].file)
                im.thumbnail((128, 128),Image.ANTIALIAS)
                # Convert to RGB if neccessary
                if im.mode != "RGB":
                    im = im.convert("RGB")
                outfile = StringIO()
                im.save(outfile, "JPEG")
                outfile.seek(0)

                teacher.portrait = File('portrait.jpg', outfile.read())
                changed = True
                
            del form_result['portrait']
            
            # Apply schema fields to the student object
            field_names = [ p.key for p in class_mapper(Teacher).iterate_properties ]
            for field_name in field_names:
                if field_name in form_result.keys():
                    if form_result[field_name] != getattr(teacher, field_name):
                        setattr(teacher, field_name, form_result[field_name])
                        changed = True
            
            # Add student if this is the add form
            if add_form:
                session = DBSession()
                session.add(teacher)
                
                if not form_result['password']:
                    reset_url = model_url(get_root(request), request, 'retrieve_password.html')
                    teacher.send_password_reset(reset_url)
                
            return HTTPFound(location = model_url(context, request))
Exemplo n.º 57
0
 def url(self):
     return model_url(self.request.root, self.request, 'competences')
Exemplo n.º 58
0
 def url(self):
     return model_url(self.context, self.request, 'members.html')
Exemplo n.º 59
0
 def url(self):
     return model_url(self.request.root, self.request, 'dashboard.html')
Exemplo n.º 60
0
 def url(self):
     return model_url(self.request.root, self.request, 'projects')