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'), )
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 )
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, )
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])
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 )
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)
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 )
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']) )
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)
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)
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)
def about(): return render_page('views/about.html')
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)