示例#1
0
def subscription():
    marketings = api_client.get_marketings()
    subscription_form = SubscriptionForm()
    subscription_form.setup(marketings)

    if subscription_form.validate_on_submit():
        try:
            api_client.add_subscription_email(
                subscription_form.subscription_name.data,
                subscription_form.subscription_email.data,
                subscription_form.subscription_marketings.data)
            return render_page(
                'views/subscription.html',
                subscription_form=subscription_form,
                done=True if 'error' not in session else False,
            )
        except Exception as e:
            current_app.logger.error('Problem subscribing email: %r', e)
            return render_page('views/subscription.html',
                               subscription_form=subscription_form,
                               email=subscription_form.subscription_email.data,
                               error=str(e))
    elif subscription_form.errors:
        return render_page('views/subscription.html',
                           subscription_form=subscription_form,
                           email=subscription_form.subscription_email.data)

    return render_page(
        'views/subscription.html',
        subscription_form=subscription_form,
        email=request.args.get('email'),
    )
示例#2
0
def complete_order(status, linked_txn_id, delivery_zone='UK', delivery_balance=0):
    missing_address_form = None

    errors = []
    if 'error' in session:
        err = session.pop('error')
        errors.append(err['response']['error']['message'])

    if status == statuses.DELIVERY_MISSING_ADDRESS:
        missing_address_form = MissingAddressForm()
        missing_address_form.setup_country(missing_address_form.data['state'] is None)

        if missing_address_form.validate_on_submit():
            selected_country = [
                c for c in missing_address_form.country.choices if c[0] == missing_address_form.country.data
            ]
            country_name = selected_country[0][1] if selected_country else 'Unknown'
            data = api_client.update_order_address(
                linked_txn_id,
                missing_address_form.street.data,
                missing_address_form.city.data,
                missing_address_form.state.data,
                missing_address_form.postcode.data,
                missing_address_form.country.data,
                country_name
            )

            return render_page(
                'views/complete_order.html',
                linked_txn_id=linked_txn_id,
                status=data['delivery_status'],
                delivery_zone=data['delivery_zone'],
                delivery_balance=data['delivery_balance'],
                errors=errors
            )
        elif missing_address_form.is_submitted():
            missing_address_form.validate()
            if missing_address_form.errors:
                for field in missing_address_form.errors:
                    for e in missing_address_form.errors[field]:
                        errors.append(e)
    elif status == statuses.DELIVERY_EXTRA:
        return render_page(
            'views/complete_order.html',
            linked_txn_id=linked_txn_id,
            status=statuses.DELIVERY_EXTRA,
            delivery_zone=delivery_zone,
            delivery_balance=delivery_balance,
            errors=errors
        )

    return render_page(
        'views/complete_order.html',
        form=missing_address_form,
        linked_txn_id=linked_txn_id,
        status='missing_address',
        errors=errors
    )
示例#3
0
def events():
    articles = api_client.get_articles_summary()

    future_events = api_client.get_events_in_future(approved_only=True)

    for event in future_events:
        if event['venue']['name'] == 'Online Event':
            event['event_type'] = 'Online ' + event['event_type']

    past_events = []
    all_past_events = api_client.get_events_past_year()
    if all_past_events:
        while len(past_events) < 3 and all_past_events:
            event = all_past_events.pop(-1)
            if event['id'] not in [e['id'] for e in future_events]:
                if event['venue']['name'] == 'Online Event':
                    event['event_type'] = 'Online ' + event['event_type']

                past_events.append(event)

    return render_page(
        'views/events.html',
        articles=articles,
        future_events=future_events,
        past_events=past_events,
    )
示例#4
0
def index():
    future_events = api_client.get_events_in_future(approved_only=True)

    for event in future_events:
        if event['event_type'] == 'Introductory Course':
            event['carousel_text'] = 'Courses starting {}'.format(
                event['event_monthyear'])
        if event['venue']['name'] == 'Online Event':
            event['event_type'] = 'Online ' + event['event_type']
    articles = api_client.get_articles_summary()
    if articles:
        index = randint(0, len(articles) - 1)
        main_article = articles[index]
        del articles[index]
    else:
        main_article = ''

    all_events = future_events
    if len(all_events) < 3:
        past_events = api_client.get_events_past_year()
        if past_events:
            while len(all_events) < 3 and past_events:
                event = past_events.pop(-1)
                if event['id'] not in [e['id'] for e in future_events]:
                    event['past'] = True
                    all_events.append(event)
    return render_page('views/home.html',
                       main_article=main_article,
                       articles=articles,
                       all_events=all_events[:4])
示例#5
0
def order_end():
    current_app.logger.info("Order end: %r" % request.args)
    status = request.args.get('st')
    txn_code = request.args.get('tx')

    return render_page(
        'views/order_end.html',
        status=status,
        txn_code=txn_code
    )
示例#6
0
def course_details():
    TOPIC_PATH = os.path.join(current_app.static_folder, "images/topics/")
    topic = request.args.get('topic')

    topic_static_filenames = os.listdir(TOPIC_PATH)
    topic_images = sorted(
        [f for f in topic_static_filenames if f.startswith(topic)])

    if not topic_images:
        topic_images = [
            "topic_1.png", "topic_2.png", "topic_3.png", "topic_3.png"
        ]

    return render_page('views/course_details.html', topic_images=topic_images)
示例#7
0
def event_details(event_id=None, **kwargs):
    if not event_id:
        event_id = request.args.get('eventid')
        if not event_id:
            return render_page(
                'errors/errors.html',
                message=['<h3>No event id set</h3>']
            )
        else:
            event = api_client.get_event_by_old_id(event_id)
    else:
        event = api_client.get_event_by_id(event_id)

    if not event:
        return render_page(
            'errors/errors.html',
            message=['<h3>No event found</h3>']
        )
    elif event['venue']['name'] == 'Online Event':
        event['event_type'] = 'Online ' + event['event_type']

    event['is_future_event'] = is_future_event(event)
    event['is_paypal_ready'] = is_paypal_ready(event)
    event['date_ids'] = [str(e['id']) for e in event['event_dates']]
    event['accept_donation'] = event["fee"] == -3
    event['show_buy_now'] = event["fee"] and event["fee"] not in [-3, -1]

    h = HTMLParser()
    event['_description'] = h.unescape(event['description'])

    reserve_place_form = ReservePlaceForm() if event['event_type'] == 'Introductory Course' else None

    return render_page(
        'views/event_details.html',
        event=event,
        reserve_place_form=reserve_place_form
    )
示例#8
0
def preview_events():
    data = json.loads(urlparse.unquote(request.args.get('data')))

    current_app.logger.info(u'Preview event banner args: {}'.format(data))

    data['formatted_event_datetimes'] = common_get_nice_event_dates(data['event_dates'])
    data['is_future_event'] = is_future_event(data)
    data['dates'] = api_client.get_event_dates(data['event_dates'])

    venue = api_client.get_venue_by_id(data['venue_id'])
    if venue['name'] == 'Online Event':
        data['event_type'] = 'Online ' + data['event_type']

    h = HTMLParser()
    data['_description'] = h.unescape(data['description'])

    return render_page(
        'views/events.html',
        future_events=[data],
        preview="Events page: {}".format(data['title'])
    )
示例#9
0
def update(unsubcode):
    message = error = ''
    member = api_client.get_member_from_unsubcode(unsubcode)

    update_member_form = UpdateMemberForm()

    if update_member_form.validate_on_submit():
        if update_member_form.verify_email.data == member['email']:
            response = api_client.update_member(unsubcode,
                                                update_member_form.name.data,
                                                update_member_form.email.data)
            if 'message' in response:
                message = response['message']
        else:
            error = 'Email does not match members email'

    return render_page('views/update_member.html',
                       update_member_form=update_member_form,
                       unsubcode=unsubcode,
                       member_name=member.get('name') if member else None,
                       message=message,
                       error=error)
示例#10
0
def unsubscribe(unsubcode):
    message = error = ''
    member = api_client.get_member_from_unsubcode(unsubcode)

    unsubscribe_form = UnsubscribeForm()

    if not member['active']:
        message = '{} has already unsubscribed'.format(member['name'])

    if unsubscribe_form.validate_on_submit():
        if unsubscribe_form.email.data == member['email']:
            response = api_client.unsubscribe_member(unsubcode)
            if 'message' in response:
                message = response['message']
        else:
            error = 'Email does not match members email'

    return render_page('views/unsubscribe.html',
                       unsubscribe_form=unsubscribe_form,
                       unsubcode=unsubcode,
                       member_name=member.get('name') if member else None,
                       message=message,
                       error=error)
示例#11
0
def resources():
    books = None
    if not current_app.config["SHOW_RESOURCE_MAINTENANCE"]:
        books = api_client.get_books()

    return render_page('views/resources.html', books=books)
示例#12
0
def about():
    return render_page('views/about.html')
示例#13
0
def courses():
    future_events = api_client.get_events_in_future(approved_only=True)
    intro_courses = [
        e for e in future_events if e['event_type'] == 'Introductory Course'
    ]
    return render_page('views/courses.html', intro_courses=intro_courses)