maidstone-hackspace/site/pages/profile.py

164 lines
5.9 KiB
Python

from flask import Blueprint
from flask import request
from flask import redirect
from flask.ext.login import current_user, login_required
import gocardless
from pages import web
from pages import header, footer
from data.site_user import get_user_details, update_membership_status, get_user_bio
from data.profile import update_description, create_description
from config.settings import gocardless_environment, gocardless_credentials
from config.settings import app_domain
profile_pages = Blueprint('profile_pages', __name__, template_folder='templates')
@profile_pages.route("/profile", methods=['GET'])
@login_required
def index():
web.template.create('Maidstone Hackspace - User profile')
header('User Profile', url='/profile')
print current_user
user = get_user_details({'id': current_user.get_id()}).get()
name = '%s %s' % (user.get('first_name', '').capitalize(), user.get('last_name', '').capitalize())
web.page.create('%s - Profile' % name)
web.columns.create()
web.paragraph.create(
web.images.create(user.get('profile_image', '/static/images/hackspace.png'), name).add_attributes('width', '200').render()
)
web.paragraph.add(name)
web.paragraph.add('%s' % (user.get('email')))
web.paragraph.add('Last Login %s' % (user.get('last_login', '')))
web.paragraph.add('Member since %s' % (user.get('created', '')))
web.paragraph.add('Description %s' % (user.get('description', '')))
web.paragraph.add('Skills %s' % (user.get('skills', '')))
web.columns.append(web.paragraph.render())
# membership form
#~ if user.get('status') != 1:
print user
web.columns.append(
web.member_card.create(
reference=str(user.get('user_id')).zfill(5),
name=name,
active=user.get('status')==1
).render()
)
web.paragraph.create(
web.link.create(
'Edit Description',
'Edit Description',
'/profile/details'
).set_classes('ajaxPopup').render())
web.columns.append(web.paragraph.render())
web.page.section(web.columns.render())
web.template.body.append(web.page.render())
web.template.body.append(web.popup.create('').render())
web.template.body.append('<script type="type/javascript">document.cookie = "status=1";</script>')
return footer()
@profile_pages.route("/profile/membership", methods=['POST'])
@login_required
def pay_membership():
import gocardless
user = get_user_details({'id': current_user.get_id()}).get()
user_code = str(user.get('user_id')).zfill(5)
gocardless.environment = gocardless_environment
gocardless.set_details(**gocardless_credentials)
url = gocardless.client.new_subscription_url(
amount=request.form.get('amount'),
interval_length=1,
interval_unit="month",
name="Membership your membership id is MH%s" % user_code,
redirect_uri='%s/profile/gocardless' % app_domain)
return redirect(url)
@profile_pages.route("/profile/membership/cancel", methods=['GET'])
@login_required
def cancel_membership():
import gocardless
user = get_user_details({'id': current_user.get_id()}).get()
user_code = str(user.get('user_id')).zfill(5)
gocardless.environment = gocardless_environment
gocardless.set_details(**gocardless_credentials)
subscription = gocardless.client.subscription('0540QD22SKND')
subscription.cancel()
return redirect(url)
@profile_pages.route("/profile/gocardless", methods=['GET'])
@login_required
def gocardless_signup():
web.template.create('Maidstone Hackspace')
header('Maidstone Hackspace Member registration')
# confirm the payment
bill_id = request.args.get('resource_id')
try:
import gocardless
gocardless.environment = gocardless_environment
gocardless.set_details(**gocardless_credentials)
print gocardless.client.confirm_resource(request.args)
web.page.create('Thanks for becoming a member.')
web.paragraph.create(
"""Your membership request has been recieved and will be active shortly.""")
except:
# TODO log what actually has gone wrong
web.page.create('Something went wrong')
web.paragraph.create(
"""We could not confirm the payment something may have gone terribly wrong.""")
update_membership_status().execute({'user_id': current_user.get_id(), 'status': '1'})
update_membership().execute({'user_id': current_user.get_id(), 'status': '1', 'join_date': '', 'amount': '', 'subscription_id': ''})
web.page.section(web.paragraph.render())
web.template.body.append(web.page.render())
return footer()
@profile_pages.route("/profile/details", methods=['GET'])
@login_required
def edit_profile():
user_details = get_user_details({'id': current_user.get_id()}).get() or {}
print user_details
if not user_details:
print 'create'
create_description().execute({'user_id': current_user.get_id()})
web.form.create('Update your details', '/profile/update')
web.form.append(name='description', label='Description', placeholder='This is me i am great', value=user_details.get('description') or '')
web.form.append(name='skills', label='skills', placeholder='python, arduino, knitting', value=user_details.get('skills') or '')
return web.form.render()
@profile_pages.route("/profile/update", methods=['POST'])
@login_required
def update_profile():
""" handle form submit to update description and skills"""
data = {
'user_id': current_user.get_id(),
'skills': request.form.get('skills'),
'description': request.form.get('description')}
user_details = get_user_details({'id': current_user.get_id()}).get() or {}
if user_details.get('user_detail_id', None) is None:
create_description().execute(data)
else:
update_description().execute(data)
return redirect('/profile')