started work on donate pages

This commit is contained in:
Oliver Marks 2015-12-15 09:14:34 +00:00
parent c101b17f37
commit 445bcd4943
20 changed files with 215 additions and 105 deletions

View File

@ -11,11 +11,12 @@ RUN \
apt-get update && \ apt-get update && \
apt-get upgrade -y && \ apt-get upgrade -y && \
apt-get install -y software-properties-common python-software-properties && \ apt-get install -y software-properties-common python-software-properties && \
apt-get install -y python-requests python-lxml python-flask python-flask-login python-misaka python-tz python-mysqldb python-psycopg2 python-requests-oauthlib apt-get install -y python-pip python-requests python-lxml python-flask python-flask-login python-misaka python-tz python-mysqldb python-psycopg2 python-requests-oauthlib
RUN add-apt-repository -y ppa:oly/ppa RUN add-apt-repository -y ppa:oly/ppa
RUN apt-get update RUN apt-get update
RUN apt-get install -y python-scaffold RUN apt-get install -y python-scaffold
RUN pip install gocardless
ADD site /var/www/ ADD site /var/www/

View File

@ -108,8 +108,17 @@ def auth_required():
def register_form(): def register_form():
header('Register for access') header('Register for access')
web.page.create('Register for access') web.page.create('Register for access')
web.page.section(web.register_form.create().render()) #~ web.page.section(web.register_form.create().render())
web.form.create('Register new user account', '/register')
web.form.append(name='name', label='Your full name', placeholder='Ralf Green', value='')
web.form.append(name='email', label='Valid Email', placeholder='ralf@maidstone-hackspace.org.uk', value='')
web.form.append(input_type='password', name='password', label='Password', placeholder='quick brown fox jumped over', value='')
web.form.append(input_type='password', name='password_confirm', label='Password Confirm', placeholder='quick brown fox jumped over', value='')
web.page.section(web.form.render())
web.template.body.append(web.page.render()) web.template.body.append(web.page.render())
return make_response(footer()) return make_response(footer())
@authorize_pages.route("/register", methods=['POST']) @authorize_pages.route("/register", methods=['POST'])
@ -155,6 +164,7 @@ def oauth(provider=None):
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
print session print session
print provider
if provider: if provider:
oauth_session = OAuth2Session( oauth_session = OAuth2Session(
oauth_provider.get('client_id'), oauth_provider.get('client_id'),
@ -168,9 +178,10 @@ def oauth(provider=None):
oauth_provider.get('auth_uri'), oauth_provider.get('auth_uri'),
access_type=oauth_access_type, access_type=oauth_access_type,
approval_prompt=oauth_approval_prompt) approval_prompt=oauth_approval_prompt)
print state
# State is used to prevent CSRF, keep this for later, make sure oauth returns to the same url. # State is used to prevent CSRF, keep this for later, make sure oauth returns to the same url.
session['oauth_state'] = state session['oauth_state'] = state
session.modified = True
return redirect(authorization_url) return redirect(authorization_url)
print session print session
@ -365,7 +376,6 @@ def login_screen_submit():
@authorize_pages.route("/logout") @authorize_pages.route("/logout")
@login_required
def logout(): def logout():
logout_user() logout_user()
return redirect('/') return redirect('/')

View File

@ -32,6 +32,7 @@ oauth_conf = {
gocardless_enviroment = 'sandbox' gocardless_enviroment = 'sandbox'
gocardless_redirect_uri = 'https://test.maidstone-hackspace.org.uk'
gocardless_credentials = { gocardless_credentials = {
'app_id': '', 'app_id': '',
'app_secret': '', 'app_secret': '',

View File

@ -3,6 +3,7 @@ page_menu = [
('Home', '/'), ('Home', '/'),
#('Competition', '/competition'), #('Competition', '/competition'),
('Chat', '/chat'), ('Chat', '/chat'),
('Donate', '/donate'),
('Contact', '#mailing-list-signup')] ('Contact', '#mailing-list-signup')]
banner_images = [ banner_images = [

View File

@ -6,7 +6,8 @@ import argparse
sys.path.append(os.path.abspath('../../../scaffold/')) sys.path.append(os.path.abspath('../../../scaffold/'))
sys.path.insert(0,os.path.abspath('../../../scaffold/')) sys.path.insert(0,os.path.abspath('../../../scaffold/'))
from scaffold import www from scaffold import web
web.load_widgets('widgets')
from libs.rss_fetcher import feed_reader from libs.rss_fetcher import feed_reader
@ -16,6 +17,9 @@ from pages import web
from pages import header, footer from pages import header, footer
from pages import blog from pages import blog
from pages import competition from pages import competition
from pages import donate
from config.settings import *
def examples(): def examples():
@ -41,6 +45,7 @@ if __name__ == "__main__":
('pages.homepage', 'index', 'index.html'), ('pages.homepage', 'index', 'index.html'),
('pages.blog', 'index', 'blog.html'), ('pages.blog', 'index', 'blog.html'),
('pages.chat', 'index', 'chat.html'), ('pages.chat', 'index', 'chat.html'),
('pages.donate', 'index', 'donate.html'),
('pages.competition', 'index', 'competition.html')) ('pages.competition', 'index', 'competition.html'))
args = parser.parse_args() args = parser.parse_args()

File diff suppressed because one or more lines are too long

View File

@ -4,6 +4,9 @@
<head> <head>
<link rel="stylesheet" id="navigationCss" href="/static/css/default.css" media="" type="text/css" /> <link rel="stylesheet" id="navigationCss" href="/static/css/default.css" media="" type="text/css" />
<link rel="stylesheet" id="navigationCss" href="/static/js/jquery-ui/themes/base/jquery-ui.css" media="" type="text/css" /> <link rel="stylesheet" id="navigationCss" href="/static/js/jquery-ui/themes/base/jquery-ui.css" media="" type="text/css" />
<link rel="stylesheet" id="navigationCss" href="/static/css/sprite-navigation-white.css" media="" type="text/css" />
<link rel="stylesheet" id="navigationCss" href="/static/css/sprite-action-white.css" media="" type="text/css" />
<link rel="stylesheet" id="navigationCss" href="/static/css/sprite-content-white.css" media="" type="text/css" />
<script type="text/javascript" src="/static/js/jquery-2.1.4.min.js"></script> <script type="text/javascript" src="/static/js/jquery-2.1.4.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-animate.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-animate.js"></script>
@ -13,13 +16,14 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head> </head>
<body> <body>
<div id="headerstrip"><nav class="navstrip"><div class="left"><a id="mini_logo" href="/login"><img src="/static/images/hackspace.png" class="mini-logo"></a><span class="mini-logo-text">Maidstone Hackspace</span></div><div class="social"><div class="btn"><a href="https://twitter.com/share" class="twitter-share-button" data-via="MHackspace">Tweet</a></div><div class="btn"><div class="fb-share-button" data-href="http://maidstone-hackspace.org.uk/" data-layout="button_count"></div></div><div class="btn"><script type="IN/Share" data-url="http://maidstone-hackspace.org.uk/" data-counter="right"></script></div><div class="btn"><div size="standard" class="g-plusone" data-href="http://maidstone-hackspace.org.uk/" data-size="medium" data-annotation="bubble" count="true"></div></div></div></nav></div> <div id="headerstrip"><nav class="navstrip"><div class="left"><a id="mini_logo" href="/login"><img src="//127.0.0.1:5000/static/images/hackspace.png" class="mini-logo"></a><span class="mini-logo-text">Maidstone Hackspace</span></div><div class="social"><div class="btn"><a href="https://twitter.com/share" class="twitter-share-button" data-via="MHackspace">Tweet</a></div><div class="btn"><div class="fb-share-button" data-href="http://maidstone-hackspace.org.uk/" data-layout="button_count"></div></div><div class="btn"><script type="IN/Share" data-url="http://maidstone-hackspace.org.uk/" data-counter="right"></script></div><div class="btn"><div size="standard" class="g-plusone" data-href="http://maidstone-hackspace.org.uk/" data-size="medium" data-annotation="bubble" count="true"></div></div></div></nav></div>
<nav id="leftNav" class="menu" > <nav id="leftNav" class="menu" >
<ul> <ul>
<li class="active mi0"><a href="/" >Home</a></li> <li class="active mi0"><a href="/" >Home</a></li>
<li class="mi1"><a href="/chat" >Chat</a></li> <li class="mi1"><a href="/chat" >Chat</a></li>
<li class="mi2"><a href="#mailing-list-signup" >Contact</a></li> <li class="mi2"><a href="/donate" >Donate</a></li>
<li class="mi3"><a href="/login" >login</a></li> <li class="mi3"><a href="#mailing-list-signup" >Contact</a></li>
<li class="mi4"><a href="/login" >login</a></li>
</ul> </ul>
<div style="clear:both;"></div> <div style="clear:both;"></div>
</nav> </nav>
@ -85,9 +89,8 @@ This kit comes with an arduino board and various sensors and components, list be
</footer> </footer>
</div> </div>
<div id="footer"><div id="footertop"></div><div id="footerbottom"><div class="container"><div class="copyright">&copy;2015 Maidstone Hackspace</div><div id="mailing-list-signup" class="google-groups-signup"><h3>Signup and make yourself known</h3><form class="block" name="signup" method="get" action="http://groups.google.com/group/maidstone-hackspace/boxsubscribe"><label for="groups-email">Email Address</label><input id="groups-email" name="email" class="required"/><button type="submit" />Subscribe</button><a href="http://groups.google.com/group/maidstone-hackspace">Browse Archives</a></form><div style="clear:both;"></div><div></div></div><div> <div id="footer"><div id="footertop"></div><div id="footerbottom"><div class="container"><div class="copyright">&copy;2015 Maidstone Hackspace</div><div mailing-list-signup class="google-groups-signup"><h3>Signup and make yourself known</h3><form class="block" name="signup" method="get" action="http://groups.google.com/group/maidstone-hackspace/boxsubscribe"><label for="groups-email">Email Address</label><input id="groups-email" name="email" class="required"/><button type="submit" />Subscribe</button><a href="http://groups.google.com/group/maidstone-hackspace">Browse Archives</a></form><div style="clear:both;"></div><div></div></div><div>
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
<div id="ajaxPopup" class="hide" ></div><script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
<script><!--//--><![CDATA[//><!--!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs'); <script><!--//--><![CDATA[//><!--!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');
//]]></script> //]]></script>
@ -99,6 +102,15 @@ This kit comes with an arduino board and various sensors and components, list be
(function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return;js = d.createElement(s); js.id = id;js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v2.3";fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk')); (function(d, s, id) {var js, fjs = d.getElementsByTagName(s)[0];if (d.getElementById(id)) return;js = d.createElement(s); js.id = id;js.src = "//connect.facebook.net/en_GB/sdk.js#xfbml=1&version=v2.3";fjs.parentNode.insertBefore(js, fjs);}(document, 'script', 'facebook-jssdk'));
//]]></script><script type="text/javascript" ><!--//--><![CDATA[//><!-- //]]></script><script type="text/javascript" ><!--//--><![CDATA[//><!--
$(document).ready(function(){
$('#mini_logo').on("click", function(e){
e.preventDefault();
$('#member_navigation').toggle();
});
});
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
@ -112,15 +124,6 @@ ga('create', 'UA-63373181-1', 'maidstone-hackspace.org.uk');
ga('send', 'pageview'); ga('send', 'pageview');
$(document).ready(function(){
$('#mini_logo').on("click", function(e){
e.preventDefault();
$('#member_navigation').toggle();
});
});
var app = angular.module('myApp', ['ngAnimate']); var app = angular.module('myApp', ['ngAnimate']);
app.controller('sliderController', function($scope, $interval) { app.controller('sliderController', function($scope, $interval) {

File diff suppressed because one or more lines are too long

View File

@ -18,6 +18,7 @@ from pages import competition
from pages import members from pages import members
from pages.donate import donate_pages
from pages.google_groups import google_groups_pages from pages.google_groups import google_groups_pages
from pages.equipment import equipment_pages from pages.equipment import equipment_pages
from pages.profile import profile_pages from pages.profile import profile_pages
@ -32,6 +33,7 @@ web_app.register_blueprint(authorize_pages)
web_app.register_blueprint(equipment_pages) web_app.register_blueprint(equipment_pages)
web_app.register_blueprint(profile_pages) web_app.register_blueprint(profile_pages)
web_app.register_blueprint(google_groups_pages) web_app.register_blueprint(google_groups_pages)
web_app.register_blueprint(donate_pages)
# local testing server, add your pages here # local testing server, add your pages here
@ -69,6 +71,11 @@ def index():
#~ equipment.insert() #~ equipment.insert()
#~ return make_response(equipment.index()) #~ return make_response(equipment.index())
#~ @web_app.route("/donate/", methods=['GET'])
#~ def donate_index():
#~ """list of members"""
#~ return make_response(donate.index())
@web_app.route("/members/", methods=['GET']) @web_app.route("/members/", methods=['GET'])
def members_index(): def members_index():
"""list of members""" """list of members"""

View File

@ -9,8 +9,8 @@ db.config(settings.database)
from scaffold.core.data import migrations from scaffold.core.data import migrations
from scaffold.core.data.migrations import export_schema, import_schema from scaffold.core.data.migrations import export_schema, import_schema
#export_schema() export_schema()
import_schema() #import_schema()

View File

@ -12,11 +12,12 @@ def index():
web.page.create('') web.page.create('')
web.page.section( web.page.section(
web.div.create( web.div.create(
web.images.create( web.google_calendar.create().render()
web.template.uri.add_domain(site.tile_images[0][0]) #~ web.images.create(
).append( #~ web.template.uri.add_domain(site.tile_images[0][0])
web.template.uri.add_domain(site.tile_images[1][0]) #~ ).append(
).render() #~ web.template.uri.add_domain(site.tile_images[1][0])
#~ ).render()
).set_classes('tile-right tile-image').render()) ).set_classes('tile-right tile-image').render())
web.banner_slider.reset() web.banner_slider.reset()
web.banner_slider * site.banner_images web.banner_slider * site.banner_images

View File

@ -11,7 +11,7 @@ from pages import web
from pages import header, footer from pages import header, footer
from data.site_user import get_user_details from data.site_user import get_user_details
from data.profile import update_description from data.profile import update_description
from config.settings import gocardless_enviroment, gocardless_credentials
profile_pages = Blueprint('profile_pages', __name__, template_folder='templates') profile_pages = Blueprint('profile_pages', __name__, template_folder='templates')
@ -25,7 +25,6 @@ def index():
print current_user print current_user
user = get_user_details({'id': current_user.get_id()}).get() user = get_user_details({'id': current_user.get_id()}).get()
name = '%s %s' % (user.get('first_name', '').capitalize(), user.get('last_name', '').capitalize()) name = '%s %s' % (user.get('first_name', '').capitalize(), user.get('last_name', '').capitalize())
web.page.create('%s - Profile' % name) web.page.create('%s - Profile' % name)
web.columns.create() web.columns.create()
@ -47,15 +46,12 @@ def index():
'/profile/details' '/profile/details'
).set_classes('ajaxPopup').render()) ).set_classes('ajaxPopup').render())
web.form.create('Join Maidstone Hackspace', '/profile/membership') #~ web.form.create('Join Maidstone Hackspace', '/profile/membership')
web.form.append(name='amount', label='Subscription Amount', placeholder='20.00', value='20.00') #~ web.form.append(name='amount', label='Subscription Amount', placeholder='20.00', value='20.00')
#~ web.form.append(name='skills', label='skills', placeholder='python, arduino, knitting') #~ web.form.render()
web.form.render()
web.columns.append(web.paragraph.render()) web.columns.append(web.paragraph.render())
web.columns.append(web.google_calendar.create().render())
web.columns.append(web.member_card.create(str(user.get('user_id')).zfill(5), name).render()) web.columns.append(web.member_card.create(str(user.get('user_id')).zfill(5), name).render())
web.columns.append(web.form.render())
web.page.section(web.columns.render()) web.page.section(web.columns.render())
web.template.body.append(web.page.render()) web.template.body.append(web.page.render())
web.template.body.append(web.popup.create('').render()) web.template.body.append(web.popup.create('').render())
@ -70,10 +66,10 @@ def pay_membership():
gocardless.environment = gocardless_enviroment gocardless.environment = gocardless_enviroment
gocardless.set_details(**gocardless_credentials) gocardless.set_details(**gocardless_credentials)
url = gocardless.client.new_subscription_url( url = gocardless.client.new_subscription_url(
amount=20.00, amount=request.form.get('amount'),
interval_length=1, interval_length=1,
interval_unit="month", interval_unit="month",
name="Membership Renewal for MH0001") name="Membership Subscription for MH0001")
return redirect(url) return redirect(url)

View File

@ -1,4 +1,15 @@
table_name, column_name, column_type, default table_name, column_name, column_type, default
#members
#pledges
ALTER TABLE pledges ADD INDEX id_UNIQUE (id ASC);
#pledge_amounts
ALTER TABLE pledge_amounts ADD INDEX id_UNIQUE (id ASC);
#requests #requests

View File

@ -1,4 +1,31 @@
table_name, column_name, column_type, default table_name, column_name, column_type, default
#members
ALTER TABLE members ADD COLUMN id int(5) unsigned zerofill PRIMARY KEY (`id`) ;
ALTER TABLE members CHANGE COLUMN id id int(5) unsigned zerofill PRIMARY KEY (`id`) ;
ALTER TABLE members ADD COLUMN user_id varchar(45) NULL ;
ALTER TABLE members CHANGE COLUMN user_id user_id varchar(45) NULL ;
#pledges
ALTER TABLE pledges ADD COLUMN id int(10) unsigned PRIMARY KEY (`id`) AUTO_INCREMENT ;
ALTER TABLE pledges CHANGE COLUMN id id int(10) unsigned PRIMARY KEY (`id`) AUTO_INCREMENT ;
ALTER TABLE pledges ADD COLUMN name varchar(255) NULL ;
ALTER TABLE pledges CHANGE COLUMN name name varchar(255) NULL ;
ALTER TABLE pledges ADD COLUMN total decimal(10,2) NULL DEFAULT 0.00;
ALTER TABLE pledges CHANGE COLUMN total total decimal(10,2) NULL DEFAULT 0.00;
#pledge_amounts
ALTER TABLE pledge_amounts ADD COLUMN amount decimal(10,2) NULL ;
ALTER TABLE pledge_amounts CHANGE COLUMN amount amount decimal(10,2) NULL ;
ALTER TABLE pledge_amounts ADD COLUMN id int(10) unsigned PRIMARY KEY (`id`) AUTO_INCREMENT ;
ALTER TABLE pledge_amounts CHANGE COLUMN id id int(10) unsigned PRIMARY KEY (`id`) AUTO_INCREMENT ;
ALTER TABLE pledge_amounts ADD COLUMN pledge_id varchar(20) NULL ;
ALTER TABLE pledge_amounts CHANGE COLUMN pledge_id pledge_id varchar(20) NULL ;
ALTER TABLE pledge_amounts ADD COLUMN reference varchar(255) NULL ;
ALTER TABLE pledge_amounts CHANGE COLUMN reference reference varchar(255) NULL ;
#requests #requests
ALTER TABLE requests ADD COLUMN description varchar(255) NULL ; ALTER TABLE requests ADD COLUMN description varchar(255) NULL ;
ALTER TABLE requests CHANGE COLUMN description description varchar(255) NULL ; ALTER TABLE requests CHANGE COLUMN description description varchar(255) NULL ;

View File

@ -1,3 +1,6 @@
CREATE TABLE IF NOT EXISTS members;
CREATE TABLE IF NOT EXISTS pledges;
CREATE TABLE IF NOT EXISTS pledge_amounts;
CREATE TABLE IF NOT EXISTS requests; CREATE TABLE IF NOT EXISTS requests;
CREATE TABLE IF NOT EXISTS users; CREATE TABLE IF NOT EXISTS users;
CREATE TABLE IF NOT EXISTS user_detail; CREATE TABLE IF NOT EXISTS user_detail;

View File

@ -3,6 +3,16 @@ body {margin:0px;padding:0px;}
form button {margin:none;} form button {margin:none;}
a {color:#fff;} a {color:#fff;}
li p {margin: 20px 0px 0px 30px;} li p {margin: 20px 0px 0px 30px;}
fieldset {margin:20px;}
label {margin:20px;color:#fff;}
input {float:right;margin:0px;color:#000;padding:10px;}
/*
input {margin:0px;margin-bottom:20px;padding:10px;}
*/
button {margin-top:20px;background-color: #fff; height: 48px; width:100%; border-radius: 3px;box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);}
.left {float:left;}
.right {float:right;}
.hide {display:none;} .hide {display:none;}
#ajaxPopup {position:absolute;width:750px;height:550px;background-color:#fff;top:68px;left:50%;margin-left: -375px;} #ajaxPopup {position:absolute;width:750px;height:550px;background-color:#fff;top:68px;left:50%;margin-left: -375px;}
@ -61,9 +71,6 @@ h2 {margin-left:25px;color:#fff;}
h3 {color:#fff;} h3 {color:#fff;}
li {padding-bottom:10px;line-height:150%;} li {padding-bottom:10px;line-height:150%;}
label {margin-bottom:10px;color:#fff;}
input {margin:0px;margin-bottom:20px;padding:10px;}
button {margin-bottom:20px;background-color: #fff; height: 48px; width:100%; border-radius: 3px;box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);}
.tile-right {margin-top:20px;width:230px;float:right;margin-right:20px;} .tile-right {margin-top:20px;width:230px;float:right;margin-right:20px;}
.tile-right img {float:right;} .tile-right img {float:right;}
@ -175,10 +182,11 @@ height:48px;width:48px; -webkit-animation:spin 2s linear infinite ;-moz-animatio
.col {width:480px;float:left;} .col {width:480px;float:left;}
#login_box {width:500px; margin:auto} #login_box {width:500px; margin:auto;position:relative;}
#login_box p {color:#fff;padding:0px;margin:0px;} #login_box p {color:#fff;padding:0px;margin:0px;}
#login_box label {display:block;margin: 20px 0px 20px;} #login_box label {display:block;margin: 20px 0px 20px;}
#login_box input {margin: 20px 0px 0px;} #login_box input {margin: 20px 0px 0px;float:none;width:100%;}
#login_box button {margin: 20px 0px 0px;float:left;width:100%;}
#login_box .providers {margin: 20px 0px 20px;} #login_box .providers {margin: 20px 0px 20px;}
@ -217,6 +225,21 @@ height:48px;width:48px; -webkit-animation:spin 2s linear infinite ;-moz-animatio
#membercard .date {position:absolute;margin:25px;top:0px;left:0px;} #membercard .date {position:absolute;margin:25px;top:0px;left:0px;}
#membercard .container {position:relative;top:50%; width:100%;} #membercard .container {position:relative;top:50%; width:100%;}
#membercard .middle {position:absolute;top:-60px;width:100%;} #membercard .middle {position:absolute;top:-60px;width:100%;}
#membercard p {margin:0px;}
#membercard label {color:#000;}
#membercard legend {margin:10px;}
#membercard fieldset {margin:20px;border:0px;}
.calendar {border:2px solid #000;} .calendar {width:230px;height:300px;overflow:auto;}
.calendar ul{list-style:none;padding:0px;margin:0px;}
.calendar li{font-size:14px;padding:6px;}
.calendar li:first-child{color:#fff;background-color:#00232D;}
.calendar .but {width:80px;text-align:center;}
.but{
border:1px solid #000a0d; -webkit-border-radius: 3px; -moz-border-radius: 3px;border-radius: 3px;font-size:12px;font-family:arial, helvetica, sans-serif; padding: 10px 10px 10px 10px; text-decoration:none; display:inline-block;text-shadow: -1px -1px 0 rgba(0,0,0,0.3);font-weight:bold; color: #FFFFFF;
background-color: #003645; background-image: -webkit-gradient(linear, left top, left bottom, from(#003645), to(#00232D));
background-image: -webkit-linear-gradient(top, #003645, #00232D);
background-image: -moz-linear-gradient(top, #003645, #00232D);
background-image: -ms-linear-gradient(top, #003645, #00232D);
background-image: -o-linear-gradient(top, #003645, #00232D);
}

View File

@ -1,34 +1,36 @@
from scaffold.core.widget import base_widget_extended from scaffold.core.widget import base_widget_extended
from datetime import datetime
import time
import requests import requests
class control(base_widget_extended): class control(base_widget_extended):
contents = [] contents = []
def create(self, title="Events", calendar_id=None, api_key=None): def create(self, title="Events", calendar_id=None, api_key=None):
super(control, self).create() super(control, self).create()
response = requests.get('https://www.googleapis.com/calendar/v3/calendars/0rtjmmdbsb8e9351mkip02g8n8@group.calendar.google.com/events?singleEvents=true&maxResults=2&timeMin=2015-12-01T10:00:00-00:00&key=AIzaSyA98JvRDmplA9lVLZeKwrs1f2k17resLy0') date_now = datetime.now().strftime('%Y-%m-%dT%H:%M:%S-00:00')
print date_now
response = requests.get('https://www.googleapis.com/calendar/v3/calendars/contact@maidstone-hackspace.org.uk/events?singleEvents=true&maxResults=2&timeMin=%s&key=AIzaSyA98JvRDmplA9lVLZeKwrs1f2k17resLy0' % date_now)
calendar_data = response.json() calendar_data = response.json()
self.contents = [] self.contents = []
print calendar_data
for event in calendar_data.get('items'): for event in calendar_data.get('items'):
str_datetime = time.strptime(event.get('start').get('dateTime'), '%Y-%m-%dT%H:%M:%SZ')
formatted_date = time.strftime('%d %b %Y %H:%M', str_datetime)
description = event.get('description') + '<br />' if event.get('description') else ''
location = '<a target="_blank" href="https://www.google.co.uk/maps/search/%s">%s</a>' % (event.get('location'), event.get('location')) if event.get('location') else ''
self.contents.append(( self.contents.append((
event.get('summary'), event.get('description'), event.get('location') + ' @ ' + event.get('start').get('dateTime'))) event.get('summary')+ '<br />', description, formatted_date+ '<br />' +location))
return self return self
def render(self): def render(self):
htm = '' htm = ''
for row in self.contents: for row in self.contents:
htm += '<li>%s</li><li>%s</li><li>%s</li>' % row htm += '<li>%s %s %s</li>' % row
return '''<div class="calendar"> return '''<div class="calendar">
<ul>%s</ul> <ul>%s</ul>
<span>Subscribe</span><span>View All</span></div>''' % htm <span>
<a class="left but" href="https://calendar.google.com/calendar/render?cid=http://www.google.com/calendar/ical/contact@maidstone-hackspace.org.uk/public/basic.ics">Subscribe</a>
</span>
#~ import requests <span>
<a class="right but" href="https://www.google.com/calendar/embed?src=contact@maidstone-hackspace.org.uk&ctz=Europe/London">View All</a>
#~ requests.get('https://www.googleapis.com/calendar/v3/calendars/%s/events?key=%s') </span></div>''' % htm
#~ response = requests.get('https://www.googleapis.com/calendar/v3/calendars/0rtjmmdbsb8e9351mkip02g8n8@group.calendar.google.com/events?singleEvents=true&maxResults=2&timeMin=2015-12-01T10:00:00-00:00&key=AIzaSyA98JvRDmplA9lVLZeKwrs1f2k17resLy0')
#~ calendar_data = response.json()
#~ for event in calendar_data.get('items'):
#~ print event.get('summary')
#~ print event.get('description')
#~ print event.get('location')
#~ print event.get('start').get('dateTime')

View File

@ -26,10 +26,10 @@ class control(base_widget):
htm+= ''' htm+= '''
<div id="login_box"> <div id="login_box">
<form id="user_info" method="post" action="/login" ><frameset> <form id="user_login" method="post" action="/login" ><frameset>
<label for="username">E-Mail<p><input id="username" name="username" type="text"/></p></label> <label for="username">E-Mail<p><input id="username" name="username" type="text"/></p></label>
<label for="password">Password<p><input id="password" name="password" type="password"/></p></label> <label for="password">Password<p><input id="password" name="password" type="password"/></p></label>
<input class="btn" type="submit" value="Login"/> <button class="btn" form="user_login" type="submit" value="Login"/>Login</button>
</frameset></form> </frameset></form>
<a href="/register">Register for an account</a>&nbsp;|&nbsp;<a href="/reset-password">Reset password</a>''' <a href="/register">Register for an account</a>&nbsp;|&nbsp;<a href="/reset-password">Reset password</a>'''

View File

@ -9,4 +9,16 @@ class control(base_widget_extended):
return self return self
def render(self): def render(self):
return '''<div id="membercard"><div class="date">Joined 02/12/2015</div><div class="container"><div class="middle"><p>MHS%s</p><p>%s</p></div></div></div>''' % (self.reference, self.name)
content = '''
<div class="date">Joined 02/12/2015</div>
<div class="container">
<div class="middle">
<p>MHS%s</p><p>%s</p>
</div>
</div>''' % (self.reference, self.name)
content='<form action="/profile/membership" method="post"><fieldset><legend>Join Maidstone Hackspace</legend><p><label for="amount">Subscription Amount<input name="amount" placeholder="20.00" value="20.00" type="text"></label></p><button type="submit">submit</button></fieldset></form>'
return '''
<div id="membercard">
%s
</div>''' % content

View File

@ -1,8 +1,6 @@
from scaffold.core.widget import base_widget from scaffold.core.widget import base_widget
class control(base_widget): class control(base_widget):
#~ class control(base_widget):
script = ['$document).ready(function(){$()});']
def create(self, hide=True): def create(self, hide=True):
super(control, self).create() super(control, self).create()
@ -14,7 +12,6 @@ class control(base_widget):
self.content.append((title, link)) self.content.append((title, link))
def render(self): def render(self):
htm = '<div id="member_navigation" %s><ul>' % ('style="display:none;"' if self.hide is True else '') htm = '<div id="member_navigation" %s><ul>' % ('style="display:none;"' if self.hide is True else '')
for title, link in self.content: for title, link in self.content:
htm += '<li><a href="%s" title="%s">%s</a></li>' %(link, title, title) htm += '<li><a href="%s" title="%s">%s</a></li>' %(link, title, title)