예제 #1
0
def handle_edit_account_main_json(cwruid):
    """
    This view allows the user and administrators
    to submit an ajax update request
    """

    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result':'failure', 'msg':'Permission denied'})

    main_form = forms.MainUpdateUserForm()

    if main_form.validate():
        try:
            user = find_users(1, cwruid=('=', cwruid))[0]
        except IndexError:
            return jsonify({'result':'failure', 'name':'main', 'errors': {}})

        user.fname = main_form.fname.data
        user.mname = main_form.mname.data
        user.lname = main_form.lname.data
        user.avatar = main_form.avatar.data
        user.save()
        return jsonify({'result':'success'})
    else:
        return jsonify({'result':'failure', 'name':'main', 'errors': main_form.errors})
예제 #2
0
def handle_edit_contacts_phones_json(cwruid):
    """
    This method handles the submission
    of the PhoneUpdateForm submitted from the
    display_edit_contacts view
    """
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result': 'failure', 'msg': 'Permission denied'})

    try:
        user = find_users(1, cwruid=('=', cwruid))[0]
    except IndexError:
        return jsonify({'result': 'failure', 'name': 'main', 'errors': {}})

    phones_form = forms.PhoneUpdateForm()

    if phones_form.validate():
        query = models.PhoneModel.all()
        query.filter('user ='******'':
                name = None
            if phone_form.key.data == '':
                # create new phone
                phone = models.PhoneModel(user=user.key(),
                                          number=phone_form.phoneNumber.data,
                                          name=name)
                phone.put()
            else:
                # try and see what phone was updated
                index = None
                for i, phone in enumerate(phones):
                    if str(phone.key()) == phone_form.key.data:
                        phone.name = name
                        phone.number = phone_form.phoneNumber.data
                        phone.put()
                        index = i
                        break
                if index is not None:
                    del phones[index]
        for phone in phones:
            phone.delete()
    else:
        # process errors
        errors = {}
        for i, phone_form in enumerate(phones_form.phones):
            for error in phone_form.errors:
                errors['phones-%i-%s' %
                       (i, error)] = phone_form[str(error)].errors
        return jsonify({
            'result': 'failure',
            'name': 'phones',
            'errors': errors
        })

    return jsonify({'result': 'success'})
예제 #3
0
def handle_edit_account_main_json(cwruid):
    """
    This view allows the user and administrators
    to submit an ajax update request
    """

    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result': 'failure', 'msg': 'Permission denied'})

    main_form = forms.MainUpdateUserForm()

    if main_form.validate():
        try:
            user = find_users(1, cwruid=('=', cwruid))[0]
        except IndexError:
            return jsonify({'result': 'failure', 'name': 'main', 'errors': {}})

        user.fname = main_form.fname.data
        user.mname = main_form.mname.data
        user.lname = main_form.lname.data
        user.avatar = main_form.avatar.data
        user.save()
        return jsonify({'result': 'success'})
    else:
        return jsonify({
            'result': 'failure',
            'name': 'main',
            'errors': main_form.errors
        })
예제 #4
0
def display_edit_user_account(cwruid):
    """
    This view allows the user and administrators
    to edit the account information of that user
    """
    import urllib, urlparse

    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return permission_denied(cwruid)

    # get the user object for this page
    try:
        user = find_users(1,cwruid=('=', cwruid))[0]
    except IndexError:
        return render_template('404.html'), 404

    main_form = forms.MainUpdateUserForm(None)

    # initialize admin form if this user has
    # admin privileges
    admin_form = None
    if permissions[1]:
        admin_form = forms.AdminUpdateUserForm(None)

        # set the choices
        admin_form.family.choices = get_family_choices()
        admin_form.roles.choices = get_role_choices()

    # populate the main form
    main_form.fname.data = user.fname
    main_form.mname.data = user.mname
    main_form.lname.data = user.lname
    main_form.avatar.data = user.avatar

    # initialize the admin_form if needed
    if admin_form is not None:
        if user.family is not None:
            admin_form.family.data = user.family.name
        if user.big is not None:
            admin_form.big.data = user.big.cwruid

        query = UserRoleModel.all()
        query.filter('user ='******'members/edit_account.html',
                           user=user,
                           permissions=permissions,
                           main_form=main_form,
                           admin_form=admin_form)
예제 #5
0
def handle_edit_contacts_emails_json(cwruid):
    """
    This method handles the submission
    of the EmailUpdateForm submitted from the
    display_edit_contacts view
    """
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result':'failure', 'msg':'Permission denied'})

    emails_form = forms.EmailUpdateForm()
    
    if emails_form.validate():
        try:
            user = find_users(1, cwruid=('=', cwruid))[0]
        except IndexError:
            return jsonify({'result':'failure', 'name':'main', 'errors': {}})

        query = models.EmailModel.all()
        query.filter('user ='******'':
                # create new email
                name = email_form.emailName.data
                if name == '':
                    name = None
                email = models.EmailModel(user=user.key(),
                                          email=email_form.emailAddress.data,
                                          name=name)
                email.put()
            else:
                # try and see what email was updated
                index = None
                for i, email in enumerate(emails):
                    if str(email.key()) == email_form.key.data:
                        email.name = email_form.emailName.data
                        email.email = email_form.emailAddress.data
                        email.put()
                        index = i
                        break
                # remove from the list so that
                # only emails with no associated
                # forms get deleted at the end
                if index is not None:
                    del emails[index]
        for email in emails:
            email.delete()
    else:
        # process errors
        errors = {}
        for i, email_form in enumerate(emails_form.emails):
            for error in email_form.errors:
                errors['emails-%i-%s' % (i, error)] =  email_form[str(error)].errors
        return jsonify({'result':'failure', 'name':'emails', 'errors': errors})
    
    return jsonify({'result':'success'})
예제 #6
0
def display_edit_user_account(cwruid):
    """
    This view allows the user and administrators
    to edit the account information of that user
    """
    import urllib, urlparse

    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return permission_denied(cwruid)

    # get the user object for this page
    try:
        user = find_users(1, cwruid=('=', cwruid))[0]
    except IndexError:
        return render_template('404.html'), 404

    main_form = forms.MainUpdateUserForm(None)

    # initialize admin form if this user has
    # admin privileges
    admin_form = None
    if permissions[1]:
        admin_form = forms.AdminUpdateUserForm(None)

        # set the choices
        admin_form.family.choices = get_family_choices()
        admin_form.roles.choices = get_role_choices()

    # populate the main form
    main_form.fname.data = user.fname
    main_form.mname.data = user.mname
    main_form.lname.data = user.lname
    main_form.avatar.data = user.avatar

    # initialize the admin_form if needed
    if admin_form is not None:
        if user.family is not None:
            admin_form.family.data = user.family.name
        if user.big is not None:
            admin_form.big.data = user.big.cwruid

        query = UserRoleModel.all()
        query.filter('user ='******'members/edit_account.html',
                           user=user,
                           permissions=permissions,
                           main_form=main_form,
                           admin_form=admin_form)
예제 #7
0
def handle_edit_contacts_phones_json(cwruid):
    """
    This method handles the submission
    of the PhoneUpdateForm submitted from the
    display_edit_contacts view
    """
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result':'failure', 'msg':'Permission denied'})

    try:
        user = find_users(1, cwruid=('=', cwruid))[0]
    except IndexError:
        return jsonify({'result':'failure', 'name':'main', 'errors': {}})
        
    phones_form = forms.PhoneUpdateForm()
        
    if phones_form.validate():
        query = models.PhoneModel.all()
        query.filter('user ='******'':
                name = None
            if phone_form.key.data == '':
                # create new phone
                phone = models.PhoneModel(user=user.key(),
                                          number=phone_form.phoneNumber.data,
                                          name=name)
                phone.put()
            else:
                # try and see what phone was updated
                index = None
                for i, phone in enumerate(phones):
                    if str(phone.key()) == phone_form.key.data:
                        phone.name = name
                        phone.number = phone_form.phoneNumber.data
                        phone.put()
                        index = i
                        break
                if index is not None:
                    del phones[index]
        for phone in phones:
            phone.delete()
    else:
        # process errors
        errors = {}
        for i, phone_form in enumerate(phones_form.phones):
            for error in phone_form.errors:
                errors['phones-%i-%s' % (i, error)] =  phone_form[str(error)].errors
        return jsonify({'result':'failure', 'name':'phones', 'errors': errors})
        
    return jsonify({'result':'success'})
예제 #8
0
def display_edit_user_profile(cwruid):
    """
    This view allows the user and administrators to
    edit the profile of that user
    """

    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result': 'failure', 'msg': 'Permission denied'})

    return "Not yet implemented!"
예제 #9
0
def view_user(cwruid):
    """
    This view displays the profile information
    for the request cwruid
    """
    try:
        user = find_users(limit=1, cwruid=('=',cwruid))[0]
    except IndexError:
        return render_template('404.html'), 404

    show_edit_link = False
    permissions = check_permissions(cwruid)
    if permissions[0] or permissions[1]:
        show_edit_link = True

    minitial = ''
    if user.mname is not None and user.mname != '':
        minitial = user.mname[0].capitalize() + '.'

    avatar_address = ''
    if user.avatar is not None:
        avatar_address = user.avatar
        
    avatar = get_avatar_url(avatar_address, request.host_url, size=200)

        
    # get the email addresses associated with this user
    query = models.AddressModel.all()
    query.filter('user ='******'user ='******'user ='******'members/view.html',
                           show_edit_link=show_edit_link,
                           user=user,
                           minitial=minitial,
                           avatar=avatar,
                           family=family,
                           big=user.big,
                           emails=emails,
                           numbers=numbers,
                           addresses=addresses)
예제 #10
0
def display_edit_user_profile(cwruid):
    """
    This view allows the user and administrators to
    edit the profile of that user
    """

    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result':'failure', 'msg':'Permission denied'})
    
    return "Not yet implemented!"
예제 #11
0
def view_user(cwruid):
    """
    This view displays the profile information
    for the request cwruid
    """
    try:
        user = find_users(limit=1, cwruid=('=', cwruid))[0]
    except IndexError:
        return render_template('404.html'), 404

    show_edit_link = False
    permissions = check_permissions(cwruid)
    if permissions[0] or permissions[1]:
        show_edit_link = True

    minitial = ''
    if user.mname is not None and user.mname != '':
        minitial = user.mname[0].capitalize() + '.'

    avatar_address = ''
    if user.avatar is not None:
        avatar_address = user.avatar

    avatar = get_avatar_url(avatar_address, request.host_url, size=200)

    # get the email addresses associated with this user
    query = models.AddressModel.all()
    query.filter('user ='******'user ='******'user ='******'members/view.html',
                           show_edit_link=show_edit_link,
                           user=user,
                           minitial=minitial,
                           avatar=avatar,
                           family=family,
                           big=user.big,
                           emails=emails,
                           numbers=numbers,
                           addresses=addresses)
예제 #12
0
def handle_edit_account_admin_json(cwruid):
    """
    This view handles the AJAX request
    for the AdminUpdateUserForm submission
    from the display_edit_account(cwruid) view
    """

    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result': 'failure', 'msg': 'Permission denied'})

    admin_form = forms.AdminUpdateUserForm()

    # set the choices
    admin_form.family.choices = get_family_choices()
    admin_form.roles.choices = get_role_choices()

    if admin_form.validate():
        try:
            user = find_users(1, cwruid=('=', cwruid))[0]
        except IndexError:
            return jsonify({
                'result': 'failure: no such user',
                'name': 'admin',
                'errors': {}
            })

        if admin_form.big.data != '':
            try:
                big = find_users(1, cwruid=('=', admin_form.big.data))[0]
                user.big = big.key()
            except IndexError:
                user.big = None
                return jsonify({
                    'result': 'failure: no such big',
                    'name': 'admin',
                    'errors': {}
                })
        else:
            user.big = None

        if admin_form.family.data != 'none':
            query = models.FamilyModel.all()
            query.filter('name =', admin_form.family.data)
            try:
                family = query.fetch(query.count())[0]
                user.family = family.key()
            except IndexError:
                user.family = None
                return jsonify({
                    'result': 'failure: no such family',
                    'name': 'admin',
                    'errors': {}
                })
        else:
            user.family = None

        query = UserRoleModel.all()
        query.filter('user ='******'name =', role)
                try:
                    new_role = role_query.fetch(query.count())[0]
                except IndexError:
                    return jsonify({
                        'result': 'failure: no such role',
                        'name': 'admin',
                        'errors': {}
                    })
                new_urole = UserRoleModel(user=user.key(), role=new_role.key())
                new_urole.put()
            else:
                del uroles[index]
        for urole in uroles:
            urole.delete()

        user.save()

        return jsonify({'result': 'success'})
    else:
        return jsonify({
            'result': 'failure',
            'name': 'admin',
            'errors': admin_form.errors
        })
예제 #13
0
def handle_edit_contacts_addresses_json(cwruid):
    """
    This method handles the submission of the
    AddressUpdateForm. It is submitted from the
    display_edit_contacts view
    """
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result':'failure', 'msg':'Permission denied'})

    try:
        user = find_users(1, cwruid=('=', cwruid))[0]
    except IndexError:
        return jsonify({'result':'failure', 'name':'main', 'errors': {}})
        
    addresses_form = forms.AddressUpdateForm()
        
    if addresses_form.validate():
        query = models.AddressModel.all()
        query.filter('user ='******'':
                name = None
            street2 = address_form.street2.data
            if street2 == '':
                street2 = None
            if address_form.key.data == '':
                # create new address
                address = models.AddressModel(user=user.key(),
                                             street1=address_form.street1.data,
                                             street2=street2,
                                             city=address_form.city.data,
                                             state=address_form.state.data,
                                             zip_code=str(address_form.zip_code.data),
                                             name=name)
                address.put()
            else:
                # try and see what address was updated
                index = None
                for i, address in enumerate(addresses):
                    if str(address.key()) == address_form.key.data:
                        address.name = name
                        address.street1 = address_form.street1.data
                        address.city = address_form.city.data
                        address.state = address_form.state.data
                        address.zip_code = str(address_form.zip_code.data)
                        address.street2 = street2
                        address.put()
                        index = i
                        break
                if index is not None:
                    del addresses[index]
        for address in addresses:
            address.delete()
    else:
        errors = {}
        for i, address_form in enumerate(addresses_form.addresses):
            for error in address_form.errors:
                errors['addresses-%i-%s' % (i, error)] =  address_form[str(error)].errors
        return jsonify({'result':'failure', 'name':'addresses', 'errors': errors})
        
    return jsonify({'result':'success'})
예제 #14
0
def display_edit_user_contact(cwruid):
    """
    This view allows the user and administrators
    to edit the contact information of that user
    """
    from flask.ext import wtf
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return permission_denied(cwruid)

    # get the user object and all associated objects
    try:
        user = find_users(1, cwruid=('=', cwruid))[0]
    except IndexError:
        return render_template('404.html'), 404

    # create blank forms
    emails_form = forms.EmailUpdateForm(None)
    addresses_form = forms.AddressUpdateForm(None)
    phones_form = forms.PhoneUpdateForm(None)

    # populate the form

    # get the emails
    query = models.EmailModel.all()
    query.filter('user ='******'user ='******'user ='******'members/edit_contacts.html',
                           emails_form=emails_form,
                           phones_form=phones_form,
                           addresses_form=addresses_form,
                           current_user=current_user,
                           user=user)
예제 #15
0
def display_edit_user_contact(cwruid):
    """
    This view allows the user and administrators
    to edit the contact information of that user
    """
    from flask.ext import wtf
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return permission_denied(cwruid)

    # get the user object and all associated objects
    try:
        user = find_users(1, cwruid=('=', cwruid))[0]
    except IndexError:
        return render_template('404.html'), 404


    # create blank forms
    emails_form = forms.EmailUpdateForm(None)
    addresses_form = forms.AddressUpdateForm(None)
    phones_form = forms.PhoneUpdateForm(None)

    # populate the form

    # get the emails
    query = models.EmailModel.all()
    query.filter('user ='******'user ='******'user ='******'members/edit_contacts.html',
                           emails_form=emails_form,
                           phones_form=phones_form,
                           addresses_form=addresses_form,
                           current_user=current_user,
                           user=user)
예제 #16
0
def handle_edit_account_admin_json(cwruid):
    """
    This view handles the AJAX request
    for the AdminUpdateUserForm submission
    from the display_edit_account(cwruid) view
    """
    
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result':'failure', 'msg':'Permission denied'})

    admin_form = forms.AdminUpdateUserForm()

    # set the choices
    admin_form.family.choices = get_family_choices()
    admin_form.roles.choices = get_role_choices()

    if admin_form.validate():
        try:
            user = find_users(1, cwruid=('=', cwruid))[0]
        except IndexError:
            return jsonify({'result':'failure: no such user', 'name':'admin', 'errors': {}})

        if admin_form.big.data != '':
            try:
                big = find_users(1, cwruid=('=', admin_form.big.data))[0]
                user.big = big.key()
            except IndexError:
                user.big = None
                return jsonify({'result':'failure: no such big', 'name':'admin', 'errors': {}})
        else:
            user.big = None


        if admin_form.family.data != 'none':
            query = models.FamilyModel.all()
            query.filter('name =', admin_form.family.data)
            try:
                family = query.fetch(query.count())[0]
                user.family = family.key()
            except IndexError:
                user.family = None
                return jsonify({'result':'failure: no such family', 'name':'admin', 'errors': {}})
        else:
            user.family = None


        query = UserRoleModel.all()
        query.filter('user ='******'name =', role)
                try:
                    new_role = role_query.fetch(query.count())[0]
                except IndexError:
                    return jsonify({'result':'failure: no such role', 'name':'admin', 'errors': {}})
                new_urole = UserRoleModel(user=user.key(),
                                          role=new_role.key())
                new_urole.put()
            else:
                del uroles[index]
        for urole in uroles:
            urole.delete()

        user.save()
        
        return jsonify({'result':'success'})
    else:
        return jsonify({'result':'failure', 'name':'admin', 'errors': admin_form.errors})
예제 #17
0
def handle_edit_contacts_emails_json(cwruid):
    """
    This method handles the submission
    of the EmailUpdateForm submitted from the
    display_edit_contacts view
    """
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result': 'failure', 'msg': 'Permission denied'})

    emails_form = forms.EmailUpdateForm()

    if emails_form.validate():
        try:
            user = find_users(1, cwruid=('=', cwruid))[0]
        except IndexError:
            return jsonify({'result': 'failure', 'name': 'main', 'errors': {}})

        query = models.EmailModel.all()
        query.filter('user ='******'':
                # create new email
                name = email_form.emailName.data
                if name == '':
                    name = None
                email = models.EmailModel(user=user.key(),
                                          email=email_form.emailAddress.data,
                                          name=name)
                email.put()
            else:
                # try and see what email was updated
                index = None
                for i, email in enumerate(emails):
                    if str(email.key()) == email_form.key.data:
                        email.name = email_form.emailName.data
                        email.email = email_form.emailAddress.data
                        email.put()
                        index = i
                        break
                # remove from the list so that
                # only emails with no associated
                # forms get deleted at the end
                if index is not None:
                    del emails[index]
        for email in emails:
            email.delete()
    else:
        # process errors
        errors = {}
        for i, email_form in enumerate(emails_form.emails):
            for error in email_form.errors:
                errors['emails-%i-%s' %
                       (i, error)] = email_form[str(error)].errors
        return jsonify({
            'result': 'failure',
            'name': 'emails',
            'errors': errors
        })

    return jsonify({'result': 'success'})
예제 #18
0
def handle_edit_contacts_addresses_json(cwruid):
    """
    This method handles the submission of the
    AddressUpdateForm. It is submitted from the
    display_edit_contacts view
    """
    permissions = check_permissions(cwruid)
    if not permissions[0] and not permissions[1]:
        return jsonify({'result': 'failure', 'msg': 'Permission denied'})

    try:
        user = find_users(1, cwruid=('=', cwruid))[0]
    except IndexError:
        return jsonify({'result': 'failure', 'name': 'main', 'errors': {}})

    addresses_form = forms.AddressUpdateForm()

    if addresses_form.validate():
        query = models.AddressModel.all()
        query.filter('user ='******'':
                name = None
            street2 = address_form.street2.data
            if street2 == '':
                street2 = None
            if address_form.key.data == '':
                # create new address
                address = models.AddressModel(
                    user=user.key(),
                    street1=address_form.street1.data,
                    street2=street2,
                    city=address_form.city.data,
                    state=address_form.state.data,
                    zip_code=str(address_form.zip_code.data),
                    name=name)
                address.put()
            else:
                # try and see what address was updated
                index = None
                for i, address in enumerate(addresses):
                    if str(address.key()) == address_form.key.data:
                        address.name = name
                        address.street1 = address_form.street1.data
                        address.city = address_form.city.data
                        address.state = address_form.state.data
                        address.zip_code = str(address_form.zip_code.data)
                        address.street2 = street2
                        address.put()
                        index = i
                        break
                if index is not None:
                    del addresses[index]
        for address in addresses:
            address.delete()
    else:
        errors = {}
        for i, address_form in enumerate(addresses_form.addresses):
            for error in address_form.errors:
                errors['addresses-%i-%s' %
                       (i, error)] = address_form[str(error)].errors
        return jsonify({
            'result': 'failure',
            'name': 'addresses',
            'errors': errors
        })

    return jsonify({'result': 'success'})