Various improvements and additions.
This commit is contained in:
parent
a583351ac4
commit
944ad8ff37
@ -3,4 +3,4 @@
|
|||||||
</Files>
|
</Files>
|
||||||
|
|
||||||
RewriteEngine on
|
RewriteEngine on
|
||||||
RewriteRule ^([^.]+)/?$ index.php?action=$1 [L,NC]
|
RewriteRule ^([^./]+)/?$ index.php?action=$1 [L,NC]
|
||||||
|
18
css/frs.css
18
css/frs.css
@ -69,3 +69,21 @@
|
|||||||
color: inherit !important;
|
color: inherit !important;
|
||||||
text-decoration: inherit !important;
|
text-decoration: inherit !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.mdl-list__item-avatar {
|
||||||
|
background-color: transparent !important;
|
||||||
|
color: rgb(117, 117, 117) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frs-selector li {
|
||||||
|
transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.frs-selector li:hover {
|
||||||
|
background-color: rgb(238, 238, 238);
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
60
index.php
60
index.php
@ -39,22 +39,70 @@ if (isset($_GET['code']) && $_GET['code']) {
|
|||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
|
$tpl_done = false;
|
||||||
|
|
||||||
|
// route pages that work with and without login
|
||||||
|
if (isset($_GET['action'])) {
|
||||||
|
switch ($_GET['action']) {
|
||||||
|
case 'faq':
|
||||||
|
$tpl = $m->loadTemplate('faq_html');
|
||||||
|
$tpl_done = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$tpl_done && isset($_SESSION['access_token']) && $_SESSION['access_token']) {
|
||||||
// Authenticated
|
// Authenticated
|
||||||
|
try {
|
||||||
|
$created = $_SESSION['access_token']['created'];
|
||||||
|
$expires = $_SESSION['access_token']['expires_in'];
|
||||||
|
$expire_stamp = intval($created) + intval($expires);
|
||||||
|
$data['session_created'] = $created;
|
||||||
|
$data['session_expires'] = $expires;
|
||||||
|
$data['session_time_left'] = ($expire_stamp) - time();
|
||||||
$client->setAccessToken($_SESSION['access_token']);
|
$client->setAccessToken($_SESSION['access_token']);
|
||||||
|
} catch (Exception $e) {
|
||||||
|
print_r($e);
|
||||||
|
$_SESSION['access_token'] = $client->refreshToken(null);
|
||||||
|
print_r($_SESSION['access_token']);
|
||||||
|
}
|
||||||
|
|
||||||
$data['auth_needed'] = false;
|
$data['auth_needed'] = false;
|
||||||
|
|
||||||
|
try {
|
||||||
$oauth = new Google_Service_Oauth2($client);
|
$oauth = new Google_Service_Oauth2($client);
|
||||||
$userdata = $oauth->userinfo->get();
|
$userdata = $oauth->userinfo->get();
|
||||||
$data['user']['name_first'] = $userdata->givenName;
|
} catch (Exception $e) {
|
||||||
$data['userdata'] = print_r($userdata, true);
|
print_r($e);
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
$data['user'] = array(
|
||||||
|
'name_first' => $userdata->givenName,
|
||||||
|
'name_last' => $userdata->familyName,
|
||||||
|
'name' => $userdata->name,
|
||||||
|
'picture' => $userdata->picture,
|
||||||
|
'email' => $userdata->email,
|
||||||
|
'gender' => $userdata->gender,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Check $userdata->verifiedEmail and deny if not verified.
|
||||||
|
if (!$userdata->verifiedEmail) {
|
||||||
|
$tpl = $m->loadTemplate('notverified_html');
|
||||||
|
$tpl_done = true;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO: Check $userdata->verifiedEmail and deny if not verified.
|
switch ($_GET['action']) {
|
||||||
|
case 'faq':
|
||||||
|
$tpl = $m->loadTemplate('faq_html');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (!$tpl_done) {
|
||||||
$tpl = $m->loadTemplate('loggedin_html');
|
$tpl = $m->loadTemplate('loggedin_html');
|
||||||
} else {
|
$tpl_done = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} elseif (!$tpl_done) {
|
||||||
// Not authenticated
|
// Not authenticated
|
||||||
$data['auth_needed'] = true;
|
$data['auth_needed'] = true;
|
||||||
$data['auth_url'] = $client->createAuthUrl();
|
$data['auth_url'] = $client->createAuthUrl();
|
||||||
|
21
templates/faq_html.mustache
Normal file
21
templates/faq_html.mustache
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{{> html_head}}
|
||||||
|
{{> mdl_head}}
|
||||||
|
{{> mdl_content_head}}
|
||||||
|
|
||||||
|
<div class="frs-crumbs mdl-color-text--grey-500">
|
||||||
|
<a href="./">Fake Reservation System</a> > FAQ
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Frequently Asked Questions</h3>
|
||||||
|
|
||||||
|
<h4>What happens to my data?</h4>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Your data won't be stored on our servers. It is solely used to compose the mail.
|
||||||
|
After the mail is sent, your data is deleted from our servers.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
{{> mdl_content_foot}}
|
||||||
|
{{> mdl_foot}}
|
||||||
|
{{> html_foot}}
|
@ -3,215 +3,54 @@
|
|||||||
{{> mdl_content_head}}
|
{{> mdl_content_head}}
|
||||||
|
|
||||||
<div class="frs-crumbs mdl-color-text--grey-500">
|
<div class="frs-crumbs mdl-color-text--grey-500">
|
||||||
Not Google > Not Google Now > Fake Reservation System
|
<a href="./">Fake Reservation System</a> > Welcome
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3>What is this?</h3>
|
<h3>What is this?</h3>
|
||||||
|
|
||||||
{{# auth_needed}}
|
|
||||||
<p>
|
<p>
|
||||||
|
Some time ago, Google introduced features to highlight special items from your
|
||||||
|
mails, like hotel reservations, event tickets, car rentals and more.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Later, they added features to Google Now on Android smartphones so that you
|
||||||
|
get notified when to leave to catch your flight or event … or how to get to
|
||||||
|
your booked hotel and when the checkin opens.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
And recently, they even added a feature to Google Search, that shows your
|
||||||
|
booked items when you search for similar things. All that from a mail in your
|
||||||
|
inbox.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A nice overview with sample images can be found on Google's Developer pages:<br/>
|
||||||
|
<a href="https://developers.google.com/gmail/markup/">https://developers.google.com/gmail/markup/</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
But while the needed data is easy to be added to confirmation mails, many
|
||||||
|
companies didn't do this yet. And sometimes, you don't even get any confirmation
|
||||||
|
by email. To make those things show up in Google Now, I made this tool.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>What does it do?</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
After login with your Google account, you can select a type of reservation,
|
||||||
|
fill in all your details and send it to the mail address of your account.
|
||||||
|
We will add all the neccessary markup to the mail so that Google Now can
|
||||||
|
recognise it. This will make the events/reservations show up when you need
|
||||||
|
them.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
To begin, please sign in:<br/>
|
||||||
<a href="{{auth_url}}"><img id="signin-button" src="img/btn_google_signin_dark_normal_web.png"/></a>
|
<a href="{{auth_url}}"><img id="signin-button" src="img/btn_google_signin_dark_normal_web.png"/></a>
|
||||||
</p>
|
</p>
|
||||||
{{/ auth_needed}}
|
|
||||||
|
|
||||||
{{# userdata}}
|
|
||||||
<p>
|
|
||||||
<pre>{{userdata}}</pre>
|
|
||||||
</p>
|
|
||||||
{{/ userdata}}
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Hello, world! ({{action}})
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Hello, world!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{{> mdl_content_foot}}
|
{{> mdl_content_foot}}
|
||||||
{{> mdl_foot}}
|
{{> mdl_foot}}
|
||||||
|
@ -3,19 +3,62 @@
|
|||||||
{{> mdl_content_head}}
|
{{> mdl_content_head}}
|
||||||
|
|
||||||
<div class="frs-crumbs mdl-color-text--grey-500">
|
<div class="frs-crumbs mdl-color-text--grey-500">
|
||||||
Not Google > Not Google Now > Fake Reservation System
|
<a href="./">Fake Reservation System</a> > Logged in
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h3>What is this?</h3>
|
<h3>Select the type of reservation you want to create</h3>
|
||||||
|
|
||||||
{{# userdata}}
|
|
||||||
<p>
|
|
||||||
<pre>{{userdata}}</pre>
|
|
||||||
</p>
|
|
||||||
{{/ userdata}}
|
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Welcome, to the <strong>Fake Reservation System</strong>. Where you can book travels you'll never attend.
|
<ul class="frs-selector mdl-list">
|
||||||
|
<li class="mdl-list__item mdl-list__item--three-line" onclick="location.href='./event';">
|
||||||
|
<span class="mdl-list__item-primary-content">
|
||||||
|
<i class="material-icons mdl-list__item-avatar">event</i>
|
||||||
|
<span>Generic Event</span>
|
||||||
|
<span class="mdl-list__item-text-body">
|
||||||
|
Use this type to declare a reservation for one or more guests at an event.
|
||||||
|
Tickets may be declared as well.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
<li class="mdl-list__item mdl-list__item--three-line" onclick="location.href='./flight';">
|
||||||
|
<span class="mdl-list__item-primary-content">
|
||||||
|
<i class="material-icons mdl-list__item-avatar">flight_takeoff</i>
|
||||||
|
<span>Flight Reservation</span>
|
||||||
|
<span class="mdl-list__item-text-body">
|
||||||
|
Use this type to declare a reservation for air travel.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
<li class="mdl-list__item mdl-list__item--three-line" onclick="location.href='./hotel';">
|
||||||
|
<span class="mdl-list__item-primary-content">
|
||||||
|
<i class="material-icons mdl-list__item-avatar">hotel</i>
|
||||||
|
<span>Hotel Reservation</span>
|
||||||
|
<span class="mdl-list__item-text-body">
|
||||||
|
Use this type to declare a reservation for one or more guests at a hotel
|
||||||
|
or place of lodging.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
<li class="mdl-list__item mdl-list__item--three-line" onclick="location.href='./rentalcar';">
|
||||||
|
<span class="mdl-list__item-primary-content">
|
||||||
|
<i class="material-icons mdl-list__item-avatar">directions_car</i>
|
||||||
|
<span>Rental Car Reservation</span>
|
||||||
|
<span class="mdl-list__item-text-body">
|
||||||
|
Use this type to declare a reservation for a rental car.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
<li class="mdl-list__item mdl-list__item--three-line" onclick="location.href='./restaurant';">
|
||||||
|
<span class="mdl-list__item-primary-content">
|
||||||
|
<i class="material-icons mdl-list__item-avatar">restaurant</i>
|
||||||
|
<span>Restaurant Reservation</span>
|
||||||
|
<span class="mdl-list__item-text-body">
|
||||||
|
Use this type to declare a reservation for one or more guests at a
|
||||||
|
restaurant or other food establishment.
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{{> mdl_content_foot}}
|
{{> mdl_content_foot}}
|
||||||
|
21
templates/notverified_html.mustache
Normal file
21
templates/notverified_html.mustache
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{{> html_head}}
|
||||||
|
{{> mdl_head}}
|
||||||
|
{{> mdl_content_head}}
|
||||||
|
|
||||||
|
<div class="frs-crumbs mdl-color-text--grey-500">
|
||||||
|
<a href="./">Fake Reservation System</a> > Logged in
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Your email address is not verified!</h3>
|
||||||
|
<p>
|
||||||
|
To use this system, you must verify your Google email address first!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
You can find more information at this address:<br/>
|
||||||
|
<a href="https://support.google.com/accounts/answer/63950">https://support.google.com/accounts/answer/63950</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{{> mdl_content_foot}}
|
||||||
|
{{> mdl_foot}}
|
||||||
|
{{> html_foot}}
|
@ -3,9 +3,8 @@
|
|||||||
<footer class="frs-footer mdl-mini-footer">
|
<footer class="frs-footer mdl-mini-footer">
|
||||||
<div class="mdl-mini-footer--left-section">
|
<div class="mdl-mini-footer--left-section">
|
||||||
<ul class="mdl-mini-footer--link-list">
|
<ul class="mdl-mini-footer--link-list">
|
||||||
<li><a href="#">Help</a></li>
|
<li><a href="./">Home</a></li>
|
||||||
<li><a href="#">Privacy and Terms</a></li>
|
<li><a href="faq">FAQ</a></li>
|
||||||
<li><a href="#">User Agreement</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<!-- Navigation -->
|
<!-- Navigation -->
|
||||||
<nav class="mdl-navigation">
|
<nav class="mdl-navigation">
|
||||||
{{# user.name_first}}
|
{{# user.name_first}}
|
||||||
<span class="mdl-navigation__link mdl-color-text--grey-800">Hello, {{user.name_first}}!</span>
|
<span class="mdl-navigation__link mdl-color-text--grey-800">Hello, {{user.name_first}}!<span id="session_expires"></span></span>
|
||||||
{{/ user.name_first}}
|
{{/ user.name_first}}
|
||||||
<button id="frs-menu-top" class="mdl-button mdl-js-button mdl-button--icon">
|
<button id="frs-menu-top" class="mdl-button mdl-js-button mdl-button--icon">
|
||||||
<span class="material-icons">more_vert</span>
|
<span class="material-icons">more_vert</span>
|
||||||
@ -19,3 +19,25 @@
|
|||||||
</header>
|
</header>
|
||||||
<div class="frs-ribbon"></div>
|
<div class="frs-ribbon"></div>
|
||||||
<main class="frs-main mdl-layout__content">
|
<main class="frs-main mdl-layout__content">
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var page_load_time = Math.floor(Date.now() / 1000);
|
||||||
|
var seconds_left = {{session_time_left}};
|
||||||
|
var expire_time = page_load_time + seconds_left;
|
||||||
|
|
||||||
|
function updateTimeLeft() {
|
||||||
|
var now = Math.floor(Date.now() / 1000);
|
||||||
|
var time_left = expire_time - now;
|
||||||
|
var obj = document.getElementById('session_expires');
|
||||||
|
var minutes = Math.floor(time_left / 60);
|
||||||
|
var seconds = time_left % 60;
|
||||||
|
if (minutes+seconds > 0) {
|
||||||
|
obj.innerHTML = ' (' + ('0' + minutes).slice(-2) + ':' + ('0' + seconds).slice(-2) + ')';
|
||||||
|
} else {
|
||||||
|
obj.innerHTML = '';
|
||||||
|
window.clearInterval(window.updateTimer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var updateTimer = window.setInterval('updateTimeLeft();', 1000);
|
||||||
|
</script>
|
||||||
|
Reference in New Issue
Block a user