invite codes initial

This commit is contained in:
Ulf Gebhardt 2018-04-09 15:36:51 +02:00
parent 282ce9c946
commit 252ada26f4
35 changed files with 707 additions and 7 deletions

View File

@ -7,8 +7,11 @@ RewriteEngine On
#RewriteRule ^fonts/glyphicons-halflings-regular\.woff$ lib/system/lib/bootstrap/lib/fonts/glyphicons-halflings-regular.woff$1 [L]
#RewriteRule ^fonts/glyphicons-halflings-regular\.woff2$ lib/system/lib/bootstrap/lib/fonts/glyphicons-halflings-regular.woff2$1 [L]
RewriteRule ^invite/([^/]*)$ invite.php?code=$1
RewriteRule ^invite$ invite.php$1
RewriteRule ^(.*)/fonts/fontawesome-webfont(.*)$ lib/font_awesome/lib/fonts/fontawesome-webfont$2 [L]
RewriteRule ^sai$ sai.php$1 [L]
RewriteRule ^files/([^/]+)/([^/]+)$ api.php?call=files&cat=$1&id=$2 [L]
RewriteRule ^cache/([^/]+)/([^/]+)$ api.php?call=cache&id=$1&ident=$2 [L]
RewriteRule ^(.*)files/([^/]+)/([^/]+)$ api.php?call=files&cat=$2&id=$3 [L]
RewriteRule ^(.*)cache/([^/]+)/([^/]+)$ api.php?call=cache&id=$2&ident=$3 [L]

View File

@ -94,4 +94,29 @@ class api_democracy extends \SYSTEM\API\api_system {
\SQL\SUBSCRIBE_EMAIL_COUNT::Q1(array($email));
}
public static function call_beta($ios,$android,$email,$code){
$code_valid = self::validate_code($code);
if($code_valid){
$data = \SQL\BETA_EMAIL_FIND::Q1(array($email));
if(!$data){
\SQL\BETA_INSERT::QI(array($code,$email,$android,$ios));
} else {
if(!self::validate_code($data['code'])){
\SQL\BETA_DELETE::QI(array($email));
\SQL\BETA_INSERT::QI(array($code,$email,$android,$ios));
} else {
throw new ERROR('This EMail has already redeemed a Code');}
}
} else {
\SQL\BETA_INSERT::QI(array($code,$email,$android,$ios));
}
return \SYSTEM\LOG\JsonResult::ok();
}
public static function validate_code($code){
return \SQL\BETA_CODE_VALIDATE::Q1(array($code))['count'] !== 0 ? true: false;
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace SQL;
class BETA_CODES_FIND extends \SYSTEM\DB\QQ {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT beta_code.code, COUNT(beta.code) as count, comment, createdAt FROM `beta_code`'.
' LEFT JOIN beta ON beta_code.code = beta.code'.
' GROUP BY beta_code.code'.
' ORDER BY createdAt;';
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class BETA_CODE_INSERT extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'INSERT INTO `beta_code`(`code`, `comment`) VALUES (UPPER(?),?);';
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class BETA_CODE_VALIDATE extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT count(*) as count FROM beta_code WHERE UPPER(`code`) = UPPER(?);';
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class BETA_COMMENT extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'UPDATE `beta_code` SET `comment` = ? WHERE UPPER(`code`) = UPPER(?);';
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace SQL;
class BETA_COUNT_MAIL extends \SYSTEM\DB\QQ {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT COUNT(*) as count FROM `beta`'.
' WHERE emailedAt IS NULL AND storedAt IS NOT NULL;';
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace SQL;
class BETA_COUNT_STORE_ANDROID extends \SYSTEM\DB\QQ {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT COUNT(*) as count FROM `beta`'.
' WHERE storedAt IS NULL AND android = 1;';
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace SQL;
class BETA_COUNT_STORE_IOS extends \SYSTEM\DB\QQ {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT COUNT(*) as count FROM `beta`'.
' WHERE storedAt IS NULL AND ios = 1;';
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class BETA_DELETE extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'DELETE FROM `beta` WHERE LOWER(email) = LOWER(?);';
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class BETA_EMAIL_FIND extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT * FROM `beta` WHERE LOWER(email) = LOWER(?) LIMIT 1;';
}
}

View File

@ -0,0 +1,12 @@
<?php
namespace SQL;
class BETA_GET extends \SYSTEM\DB\QQ {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT beta.code as used_code, beta_code.code, comment,'.
' email, android, ios,'.
' redeemedAt, createdAt, storedAt, emailedAt'.
' FROM beta LEFT JOIN beta_code ON beta.code = beta_code.code;';
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class BETA_INSERT extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'INSERT INTO `beta`(`code`, `email`, `android`, `ios`, `redeemedAt`) VALUES (UPPER(?),LOWER(?),?,?,NOW());';
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class BETA_MAIL extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'UPDATE `beta` SET `emailedAt` = NOW() WHERE LOWER(`email`) = LOWER(?);';
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace SQL;
class BETA_MAIL_FIND extends \SYSTEM\DB\QQ {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT beta.code as used_code, beta_code.code, email, comment, createdAt, emailedAt, android, ios, redeemedAt, storedAt FROM beta LEFT JOIN beta_code ON beta.code = beta_code.code'.
' WHERE storedAt IS NOT NULL ORDER BY emailedAt;';
}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class BETA_STORE extends \SYSTEM\DB\QP {
public static function get_class(){return \get_class();}
public static function mysql(){return
'UPDATE `beta` SET `storedAt` = NOW() WHERE LOWER(`email`) = LOWER(?);';
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace SQL;
class BETA_STORE_ANDROID_FIND extends \SYSTEM\DB\QQ {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT beta.code as used_code, beta_code.code, email, comment, createdAt, android, ios, redeemedAt, storedAt FROM beta LEFT JOIN beta_code ON beta.code = beta_code.code'.
' WHERE android = 1 AND redeemedAt IS NOT NULL ORDER BY storedAt;';
}
}

View File

@ -0,0 +1,10 @@
<?php
namespace SQL;
class BETA_STORE_IOS_FIND extends \SYSTEM\DB\QQ {
public static function get_class(){return \get_class();}
public static function mysql(){return
'SELECT beta.code as used_code, beta_code.code, email, comment, createdAt, android, ios, redeemedAt, storedAt FROM beta LEFT JOIN beta_code ON beta.code = beta_code.code'.
' WHERE ios = 1 AND redeemedAt IS NOT NULL ORDER BY storedAt;';
}
}

View File

@ -8,4 +8,5 @@
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/landing/','landing','*.*');
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/references/','references','*.*');
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/download/','download','*.*');
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/org/','org','*.*');
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/org/','org','*.*');
\SYSTEM\FILES\files::registerFolder(dirname(__FILE__).'/invite/','invite','*.*');

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

View File

@ -14,4 +14,5 @@ SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_impressum');
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_datenschutz');
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_faq');
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_news');
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_spenden');
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_spenden');
SYSTEM\autoload::registerFolder(dirname(__FILE__).'/default_invite');

View File

@ -0,0 +1,198 @@
@font-face {
font-family: 'edosz';
src: url('../files/font/edosz.ttf') format('truetype');
}
@font-face {
font-family: 'helvetica';
src: url('./files/font/HelveticaLt.ttf') format('truetype');
}
html {
height: 100%
}
body {
font-family:'helvetica',sans-serif;
height: 100%;
background: url('../files/invite/Wallpaper.png') no-repeat center center fixed;
background-size: cover;
}
h1 {
margin-top: 30px;
font-family: edosz;
}
@media (max-width: 768px) {
h1{font-size: 55px;}
}
@media (min-width: 769px) {
h1{font-size: 100px;}
}
h2 {
margin-top: 15px;
color: rgb(68,148,211)
}
@media (max-width: 768px) {
h2{font-size: 35px;}
}
@media (min-width: 769px) {
h2{font-size: 50px;}
}
.step {
margin-top: 50px;
}
#apply, #device, #ios, #android, #final_ios, #final_android{
display: none
}
#select_ios, #select_android {
cursor: pointer;
}
#apply_text {
line-height: 1.2;
}
@media (max-width: 768px) {
#apply_text{font-size: 24px;}
}
@media (min-width: 769px) {
#apply_text{font-size: 30px;}
}
#apply_website {
font-size: 30px;
margin-top: 25px;
}
#device img {
border: rgb(165,165,165) 2px solid;
box-shadow: 0px 0px 10px rgb(165,165,165);
border-radius: 25px;
}
#device img:hover {
border: rgb(68,148,211) 2px solid;
box-shadow: 0px 0px 10px rgb(68,148,211);
}
input{
-webkit-border-radius: 50px;
-moz-border-radius: 50px;
border-radius: 50px;
}
input:focus{
outline: none;
box-shadow: 0 0 3pt 2pt rgb(68,148,211);
}
.blink-class { box-shadow: 0 0 3pt 2pt red;}
ol li{
counter-increment: item;
list-style: none;
}
ol li:before {
content: counter(item) ". ";
color: rgb(68,148,211);
font-weight: bold;
}
ol {
padding: 0;
}
#plattform_text {
clear: both;
text-align: center;
letter-spacing: -0.5px;
padding-top: 25px;
margin-bottom: 25px;
}
@media (max-width: 768px) {
#plattform_text{font-size: 22px;}
}
@media (min-width: 769px) {
#plattform_text{font-size: 32px;}
}
#appleid, #googleid {
width: 100%;
height: 83px;
background: rgb(247,247,247);
border: rgb(206,209,210) 1px solid;
font-size: 22px;
text-align: center;
}
#duplicate_ios, #duplicate_android {
display: none;
color: rgb(208,2,27);
margin-top: 25px;
font-size: 22px;
}
@media (max-width: 768px) {
#duplicate_ios, #duplicate_android{font-size: 12px;}
}
@media (min-width: 769px) {
#duplicate_ios, #duplicate_android{font-size: 22px;}
}
.beta_button{
vertical-align: middle;
margin-top: 50px;
height: 83px;
cursor: pointer;
background: rgb(68,148,211);
color: white;
text-align: center;
font-size: 18px;
letter-spacing: 0.9px;
}
#apply_go {
margin-bottom: 25px;
}
@media (max-width: 768px) {
.beta_button{line-height: 40px;}
}
@media (min-width: 769px) {
.beta_button{line-height: 83px;}
}
#apple_id_text, #google_id_text{
text-align: center;
letter-spacing: -0.5px;
margin-top: 50px
}
@media (max-width: 768px) {
#apple_id_text{font-size: 22px;}
#google_id_text{font-size: 20px;}
}
@media (min-width: 769px) {
#apple_id_text, #google_id_text{font-size: 32px;}
}
#apple_id_text_sub, #google_id_text_sub{
text-align: center;
font-size: 22px;
margin-bottom: 25px;
}
@media (max-width: 768px) {
#apple_id_text_sub, #google_id_text_sub{font-size: 14px;}
}
@media (min-width: 769px) {
#apple_id_text_sub, #google_id_text_sub{font-size: 22px;}
}

View File

@ -0,0 +1,36 @@
<?php
class default_invite implements \SYSTEM\PAGE\DefaultPage {
public static function js(){
return \SYSTEM\HTML\html::script(\SYSTEM\CACHE\cache_js::minify(array(
\LIB\lib_jquery::js(),
\LIB\lib_bootstrap::js(),
new PPAGE('default_invite/js/default_invite.js')
)));
}
public static function css(){
return \SYSTEM\HTML\html::link(\SYSTEM\CACHE\cache_css::minify(array(
\LIB\lib_bootstrap::css(),
\LIB\lib_font_awesome::css(),
new PPAGE('default_invite/css/default_invite.css')
)));
}
public function html($_escaped_fragment_ = null){
$vars = array();
$vars['js'] = '';
if(!$_escaped_fragment_){
$vars['js'] = self::js();}
$vars['css'] = self::css();
//Code
$code = null;
if(array_key_exists('code', $_GET)){
$code = $_GET['code'];}
$vars['code'] = $code;
$vars['code_valid'] = api_democracy::validate_code($code);
$vars = array_merge($vars, \SYSTEM\PAGE\text::tag('democracy'));
return \SYSTEM\PAGE\replace::replaceFile((new PPAGE('default_invite/tpl/default_invite.tpl'))->SERVERPATH(), $vars);
}
}

View File

@ -0,0 +1,85 @@
$(document).ready(function() {
if($('#code').attr('valid') === '1'){
$('#device').show();
} else {
$('#apply').show();
}
$('#apply_go').click(function(){
$('#apply').hide();
$('#device').show();
});
$('#select_ios').click(function(){
$('#device').hide();
$('#ios').show();
});
$('#select_android').click(function(){
$('#device').hide();
$('#android').show();
});
$('#android_go').click(function(){
var email = $('#googleid').val();
var code = $('#code').attr('code');
var android = 1;
var ios = 0;
if(!validateEmail(email)){
$('#googleid').addClass("blink-class");
$('#duplicate_android').hide();
} else {
$('#googleid').removeClass("blink-class");
$('#duplicate_android').hide();
register(email,code,ios,android,function(data){
if(data.status){
$('#android').hide();
$('#final_android').show();
} else {
$('#duplicate_android').show();
}
});
}
});
$('#ios_go').click(function(){
var email = $('#appleid').val();
var code = $('#code').attr('code');
var android = 0;
var ios = 1;
if(!validateEmail(email)){
$('#appleid').addClass("blink-class");
$('#duplicate_ios').hide();
} else {
$('#appleid').removeClass("blink-class");
$('#duplicate_ios').hide();
register(email,code,ios,android,function(data){
if(data.status){
$('#ios').hide();
$('#final_ios').show();
} else {
$('#duplicate_ios').show();
}
});
}
});
});
function register(email,code,ios,android, success){
$.ajax({
url: '../api.php',
type: 'GET',
dataType: 'JSON',
data: {
call: 'beta',
ios: ios,
android: android,
email: email,
code: code
},
success: success
});
}
function validateEmail(email) {
var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(String(email).toLowerCase());
}

View File

@ -0,0 +1,150 @@
<!DOCTYPE html>
<html lang="de">
<head>
<title>${title_start}</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
${css}
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-109296340-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-109296340-1');
</script>
<meta name="author" content="Democracy Deutschland e.V.">
<meta name="publisher" content="Democracy Deutschland e.V.">
<meta name="copyright" content="Democracy Deutschland e.V.">
<meta name="description" content="DEMOCRACY ist eine Initiative für mehr Basisdemokratie in Deutschland.">
<meta name="keywords" content="Volksabstimmung, Mitbestimmung, Basisdemokratie, Bundestag, Bundestagsabstimmungen, Abstimmungsinitiativen, Demokratie,Bürgerwünsche, Politik, Stimme, Diskussionsforum, Wahlstimmen, abstimmen, appstimmen">
<meta name="page-topic" content="Gesellschaft">
<meta name="page-type" content="Bericht Reportage">
<meta name="audience" content="Anfänger, Azubis, Erwachsene, Experten, Fortgeschrittene, Frauen, Jugendliche, Männer, Profis, Schüler, Studenten">
<meta name="robots" content="index, follow">
<meta name="DC.Creator" content="Democracy Deutschland e.V.">
<meta name="DC.Publisher" content="Democracy Deutschland e.V.">
<meta name="DC.Rights" content="Democracy Deutschland e.V.">
<meta name="DC.Description" content="${meta_start_DC.Description}">
<meta name="DC.Language" content="de">
<meta name="revisit-after" content="3 DAYS" />
<meta property="og:url" content="${meta_start_og:url}"/>
<meta property="og:type" content="article"/>
<meta property="og:title" content="${title_start}"/>
<meta property="og:description" content="${meta_start_og:description}"/>
<meta property="og:image" content="${meta_start_og:image}" />
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<meta name="fragment" content="!">
<link rel="manifest" href="/manifest.json">
<link rel="apple-touch-icon" sizes="57x57" href="./files/icons/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="./files/icons/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="./files/icons/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="./files/icons/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="./files/icons/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="./files/icons/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="./files/icons/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="./files/icons/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="./files/icons/apple-icon-180x180.png">
<link rel="icon" href="./favicon.ico" type="image/x-icon" />
<link rel="icon" type="image/x-icon" sizes="192x192" href="./files/icons/android-icon-192x192.png">
<link rel="icon" type="image/x-icon" sizes="32x32" href="./files/icons/favicon-32x32.png">
<link rel="icon" type="image/x-icon" sizes="96x96" href="./files/icons/favicon-96x96.png">
<link rel="icon" type="image/x-icon" sizes="16x16" href="./favicon.ico">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div id="code" code="${code}" valid="${code_valid}"></div>
<div class="container">
<div class="row">
<div class="col-md-12 no-gutters" style="text-align: center;">
<img src="../files/invite/group@3x.png" alt="DEMOCRACY Logo" style="width: 120px; margin-top: 25px">
<h1>DEMOCRACY</h1>
<h2>prototyp_access</h2>
<div id="apply" class="row step">
<div id="apply_text" class="col-12 col-md-10 offset-md-1">
Als crowdmoderierte und politisch unabhängige
Plattform informiert die App DEMOCRACY über die
aktuellen Bundestagsabstimmungen und ermöglicht
den Nutzer*Innen eine eigene direkte Abstimmung
</div>
<div id="apply_website" class="col-12">
<a href="https://www.democracy-deutschland.de" target="blank"><i class="fa fa-arrow-right"></i>&nbsp;Website</a>
</div>
<div id="apply_go" class="col-10 col-md-8 offset-1 offset-md-2 beta_button">
JETZT FÜR DEN PROTOTYP BEWERBEN
</div>
</div>
<div id="device" class="row step">
<div id="select_ios" class="col-6 col-sm-6 col-md-4 offset-md-2 pull-left">
<img src="../files/invite/group2@3x.png" alt="Apple Logo" style="width: 100%;">
</div>
<div id="select_android" class="col-6 col-sm-6 col-md-4 pull-left">
<img src="../files/invite/group3@3x.png" alt="Android Logo" style="width: 100%;">
</div>
<div class="col-12" id="plattform_text">Bitte wähle Deine Plattform</div>
</div>
<div id="ios" class="row step">
<div class="col-10 col-md-8 offset-1 offset-md-2" style="padding: 0;">
<input id="appleid" type="email" placeholder="Apple-ID eingeben">
<p id="duplicate_ios">Diese EMail scheint bereits registriert zu sein!</p>
</div>
<div id="ios_go" class="col-10 col-md-8 offset-1 offset-md-2 beta_button">
FREISCHALTUNG ANFORDERN
</div>
<div id="apple_id_text" class="col-12">Bitte gib Deine Apple-ID ein</div>
<div id="apple_id_text_sub" class="col-12">(Die AppStore-EMail-Adresse Deines Handys)</div>
</div>
<div id="android" class="row step">
<div class="col-10 col-md-8 offset-1 offset-md-2" style="padding: 0;">
<input id="googleid" type="email" placeholder="Google Play ID eingeben">
<p id="duplicate_android">Diese EMail scheint bereits registriert zu sein!</p>
</div>
<div id="android_go" class="col-10 col-md-8 offset-1 offset-md-2 beta_button">
FREISCHALTUNG ANFORDERN
</div>
<div id="google_id_text" class="col-12">Bitte gib Deine Google Play ID ein</div>
<div id="google_id_text_sub">(Die Google-EMail-Adresse Deines Handys)</div>
</div>
<div id="final_ios" class="row step">
<div class="col-10 col-md-8 offset-1 offset-md-2" style="padding: 0; font-size: 24px;">
Sobald Du im AppStore freigeschaltet wurdest, erhälst Du eine EMail mit einer genauen Anleitung von uns.<br>
</div>
<div class="col-10 col-md-8 offset-1 offset-md-2" style="padding: 0; font-size: 22px; margin-top: 25px;">
<ol style="line-height: 2; text-align: left;">
<li>Du erhälst demnächst eine E-Mail von TestFlight</li>
<li style="color: lightgrey;">Öffne diese Mail, klicke den blauen Button View in TestFlight</li>
<li style="color: lightgrey;">Lade dir TestFlight im AppStore herunter</li>
<li style="color: lightgrey;">Öffne TestFlight und Drücke “Redeem”</li>
<li style="color: lightgrey;">Gib den Bestätigungscode, also z.B. QJHFFNDF<br>ein und lade Dir DEMOCRACY herunter.</li>
<li style="color: lightgrey;">Öffne DEMOCRACY und leg los!</li>
</ol>
</div>
</div>
<div id="final_android" class="row step">
<div class="col-10 col-md-8 offset-1 offset-md-2" style="padding: 0; font-size: 24px;">
Sobald Du im PlayStore freigeschaltet wurdest, erhälst Du eine EMail mit einer genauen Anleitung von uns.<br>
</div>
<div class="col-10 col-md-8 offset-1 offset-md-2" style="padding: 0; font-size: 22px; margin-top: 25px;">
<ol style="line-height: 2; text-align: left;">
<li>Du erhälst demnächst eine E-Mail von uns mit einem Bestätigungslink</li>
<li style="color: lightgrey;">Öffne diese Mail auf deinem Handy und folge dem Link</li>
<li style="color: lightgrey;">Drücke den Button ganz unten auf dem es heißt: Tester werden</li>
<li style="color: lightgrey;">Eine neue Ansicht lädt, drücke nun die App DEMOCRACY bei Google Play herunterladen.</li>
<li style="color: lightgrey;">Du wirst in den Google Play Store weitergeleitet und kannst die App dort herunterladen, öffnen und testen</li>
</ol>
</div>
</div>
</div>
</div>
</div>
${js}
</body>
</html>

View File

@ -0,0 +1,12 @@
<?php
class page_invite extends \SYSTEM\API\api_default {
public static function get_apigroup(){
return 1;}
public static function get_class($params = null){
return self::class;}
public static function get_default_state() {
return null;}
public static function default_page($_escaped_fragment_ = null){
return (new default_invite())->html($_escaped_fragment_);}
}

View File

@ -1,3 +1,2 @@
<?php
//require_once dirname(__FILE__).'/saimod_webcraft_updates/autoload.inc';
//require_once dirname(__FILE__).'/saimod_webcraft_contact/autoload.inc';
require_once dirname(__FILE__).'/saimod_beta/autoload.inc';

View File

@ -4,6 +4,8 @@ class DATA_DEMOCRACY extends \SYSTEM\DB\QI {
public static function get_class(){return \get_class();}
public static function files_mysql(){
return array( (new \PSQL('/mysql/schema_subscribe.sql'))->SERVERPATH(),
(new \PSQL('/mysql/schema_beta.sql'))->SERVERPATH(),
(new \PSQL('/mysql/schema_beta_code.sql'))->SERVERPATH(),
(new \PSQL('/mysql/system_page.sql'))->SERVERPATH(),
(new \PSQL('/mysql/system_text.sql'))->SERVERPATH(),
(new \PSQL('/mysql/system_api.sql'))->SERVERPATH());

View File

@ -0,0 +1,10 @@
CREATE TABLE `beta` (
`code` varchar(8) DEFAULT NULL,
`email` varchar(255) NOT NULL DEFAULT '',
`android` int(11) DEFAULT NULL,
`ios` int(11) DEFAULT NULL,
`redeemedAt` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`storedAt` timestamp NULL DEFAULT NULL,
`emailedAt` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`email`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -0,0 +1,6 @@
CREATE TABLE `beta_code` (
`code` varchar(8) NOT NULL,
`createdAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`comment` varchar(255) DEFAULT NULL,
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -1,2 +1,9 @@
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (100, 0, 2, 10, 'send_mail_faq', 'data', 'JSON');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (110, 0, 2, 10, 'send_subscribe', 'data', 'JSON');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (110, 0, 2, 10, 'send_subscribe', 'data', 'JSON');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (120, 0, 2, 10, 'beta', 'ios', 'BOOL');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (121, 0, 2, 10, 'beta', 'android', 'BOOL');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (122, 0, 2, 10, 'beta', 'email', 'EMAIL');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (123, 0, 2, 10, 'beta', 'code', 'STRING');
# REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (100, 1, 3, -1, null, '_code', 'STRING');

9
invite.php Normal file
View File

@ -0,0 +1,9 @@
<?php
require_once 'lib/autoload.inc'; //SYSTEM Classes
require_once 'democracy/autoload.inc'; //Project Classes
require_once 'config.php';
\SYSTEM\system::start(\WEBCRAFT\democracy_deutschland_config());
echo \SYSTEM\API\api::run('\SYSTEM\API\verify', 'page_invite', array_merge($_POST,$_GET), 1, false, true);
new \SYSTEM\LOG\COUNTER("Page was called sucessfully.");