missing files, corrected email format

This commit is contained in:
Ulf Gebhardt 2018-04-09 21:42:07 +02:00
parent dcf132d166
commit c53b4e3b6b
23 changed files with 754 additions and 4 deletions

View File

@ -50,11 +50,11 @@
<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" 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">
<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>
@ -84,10 +84,10 @@
</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%;">
<img src="../files/invite/group2@3x.png" alt="Apple Logo" style="width: 100%; background: white;">
</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%;">
<img src="../files/invite/group3@3x.png" alt="Android Logo" style="width: 100%; background: white;">
</div>
<div class="col-12" id="plattform_text">Bitte wähle Deine Plattform</div>
</div>

View File

@ -0,0 +1,5 @@
<?php
require_once dirname(__FILE__).'/sql/autoload.inc';
// \SYSTEM\autoload::registerFolder(dirname(__FILE__).'/sql','SQL');
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'SAI');
\SYSTEM\SAI\sai::register('\SAI\saimod_beta');

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -0,0 +1,159 @@
function init_saimod_beta_all() {
$("#table_beta_all").tablesorter();
$('#tabs_beta li a').each(function(){
$(this).removeClass('active');});
$('#menu_tag_beta').addClass('active');
};
function init_saimod_beta_code() {
$("#table_beta_code").tablesorter();
$('#tabs_beta li a').each(function(){
$(this).removeClass('active');});
$('#menu_tag_code').addClass('active');
$('#code_generate').click(function(){
var comment = $('#code_comment').val();
$.ajax({
async: true,
url: this.endpoint,
type: 'GET',
dataType: 'JSON',
data: {
sai_mod: '.SAI.saimod_beta',
action: 'generate',
comment: comment
},
success: function(){
system.reload();
},
error: function(){
alert('Something happend - try again!');
}
});
});
$('.code_setcomment').click(function(){
var code = $(this).attr('code');
var email = $(this).attr('email');
var i = $(this).attr('i');
var comment = $('#comment_'+i).val();
$.ajax({
async: true,
url: this.endpoint,
type: 'GET',
dataType: 'JSON',
data: {
sai_mod: '.SAI.saimod_beta',
action: 'comment',
code: code,
comment: comment
},
success: function(){
system.reload();
},
error: function(){
alert('Something happend - try again!');
}
});
});
}
function init_saimod_beta_store_android() {
$("#table_beta_store_android").tablesorter();
$('#tabs_beta li a').each(function(){
$(this).removeClass('active');});
$('#menu_tag_store_android').addClass('active');
$('.code_android').click(function(){
var code = $(this).attr('code');
var email = $(this).attr('email');
$.ajax({
async: true,
url: this.endpoint,
type: 'GET',
dataType: 'JSON',
data: {
sai_mod: '.SAI.saimod_beta',
action: 'store',
code: code,
email: email
},
success: function(){
system.reload();
},
error: function(){
alert('Something happend - try again!');
}
});
});
$('.copy_email').click(function(){
var i = $(this).attr('i');
var $temp = $("<input>");
$("body").append($temp);
$temp.val($('#email_'+i).text()).select();
document.execCommand("copy");
$temp.remove();
});
};
function init_saimod_beta_store_ios() {
$("#table_beta_store_ios").tablesorter();
$('#tabs_beta li a').each(function(){
$(this).removeClass('active');});
$('#menu_tag_store_ios').addClass('active');
$('.code_ios').click(function(){
var code = $(this).attr('code');
var email = $(this).attr('email');
$.ajax({
async: true,
url: this.endpoint,
type: 'GET',
dataType: 'JSON',
data: {
sai_mod: '.SAI.saimod_beta',
action: 'store',
code: code,
email: email
},
success: function(){
system.reload();
},
error: function(){
alert('Something happend - try again!');
}
});
});
$('.copy_email').click(function(){
var i = $(this).attr('i');
var $temp = $("<input>");
$("body").append($temp);
$temp.val($('#email_'+i).text()).select();
document.execCommand("copy");
$temp.remove();
});
};
function init_saimod_beta_mail() {
$("#table_beta_mail").tablesorter();
$('#tabs_beta li a').each(function(){
$(this).removeClass('active');});
$('#menu_tag_mail').addClass('active');
$('.beta_mail').click(function(){
var email = $(this).attr('email');
var android = $(this).attr('android');
var ios = $(this).attr('ios');
$.ajax({
async: true,
url: this.endpoint,
type: 'GET',
dataType: 'JSON',
data: {
sai_mod: '.SAI.saimod_beta',
action: 'email',
email: email,
android: android,
ios: ios
},
success: function(){
system.reload();
},
error: function(){
alert('Something happend - try again!');
}
});
});
};

View File

@ -0,0 +1,266 @@
<?php
namespace SAI;
class saimod_beta extends \SYSTEM\SAI\sai_module{
public static function sai_mod__SAI_saimod_beta(){
$vars = array();
$vars['store_android_count'] = \SQL\BETA_COUNT_STORE_ANDROID::Q1()['count'];
$vars['store_ios_count'] = \SQL\BETA_COUNT_STORE_IOS::Q1()['count'];
$vars['mail_count'] = \SQL\BETA_COUNT_MAIL::Q1()['count'];
return \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/saimod_beta.tpl'))->SERVERPATH(),$vars);}
public static function sai_mod__SAI_saimod_beta_action_all(){
$vars = array();
$vars['data'] = '';
$beta = \SQL\BETA_GET::QQ();
while($row = $beta->next()){
if($row['android']){
$row['device'] = 'android';}
if($row['ios']){
$row['device'] = 'apple';}
$row['generated'] = $row['createdAt'] ? \SYSTEM\time::time_ago_string(strtotime($row['createdAt'])) : 'invalid';
if($row['redeemedAt']){
$row['redeemed'] = 'check';
$row['redeemed_time'] = \SYSTEM\time::time_ago_string(strtotime($row['redeemedAt']));
} else {
$row['redeemed'] = 'times';
$row['redeemed_time'] = '';
}
if($row['storedAt']){
$row['stored'] = 'check';
$row['stored_time'] = \SYSTEM\time::time_ago_string(strtotime($row['storedAt']));
} else {
$row['stored'] = 'times';
$row['stored_time'] = '';
}
if($row['emailedAt']){
$row['emailed'] = 'check';
$row['emailed_time'] = \SYSTEM\time::time_ago_string(strtotime($row['emailedAt']));
} else {
$row['emailed'] = 'times';
$row['emailed_time'] = '';
}
$row['used_code'] = $row['used_code'] == '' ? 'invalid' : $row['used_code'];
if($row['used_code'] == $row['code']){
$row['valid'] = 'green';
} else {
$row['valid'] = 'red';
}
$vars['data'] .= \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/all_tr.tpl'))->SERVERPATH(),$row);
}
$vars = array_merge($vars, \SYSTEM\PAGE\text::tag('time'));
return \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/all.tpl'))->SERVERPATH(),$vars);
}
public static function sai_mod__SAI_saimod_beta_action_code(){
$vars = array();
$vars['data'] = '';
$beta = \SQL\BETA_CODES_FIND::QQ();
$i = 0;
while($row = $beta->next()){
$row['i'] = $i++;
$row['generated'] = \SYSTEM\time::time_ago_string(strtotime($row['createdAt']));
$vars['data'] .= \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/code_tr.tpl'))->SERVERPATH(),$row);
}
$vars = array_merge($vars, \SYSTEM\PAGE\text::tag('time'));
return \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/code.tpl'))->SERVERPATH(),$vars);
}
public static function sai_mod__SAI_saimod_beta_action_generate($comment){
$code = bin2hex(openssl_random_pseudo_bytes(4));
\SQL\BETA_CODE_INSERT::QI(array($code,$comment));
return \JsonResult::ok();
}
public static function sai_mod__SAI_saimod_beta_action_comment($code,$comment){
\SQL\BETA_COMMENT::QI(array($comment,$code));
return \JsonResult::ok();
}
public static function sai_mod__SAI_saimod_beta_action_store_android(){
$vars = array();
$vars['data'] = '';
$beta = \SQL\BETA_STORE_ANDROID_FIND::QQ();
$i = 0;
while($row = $beta->next()){
$row['i'] = $i++;
if($row['android']){
$row['device'] = 'android';}
if($row['ios']){
$row['device'] = 'apple';}
$row['generated'] = $row['createdAt'] ? \SYSTEM\time::time_ago_string(strtotime($row['createdAt'])) : 'invalid';
if($row['redeemedAt']){
$row['redeemed'] = 'check';
$row['redeemed_time'] = \SYSTEM\time::time_ago_string(strtotime($row['redeemedAt']));
} else {
$row['redeemed'] = 'times';
$row['redeemed_time'] = '';
}
if($row['storedAt']){
$row['stored'] = 'check';
$row['stored_time'] = \SYSTEM\time::time_ago_string(strtotime($row['storedAt']));
$row['disabled'] = 'disabled';
} else {
$row['stored'] = 'times';
$row['stored_time'] = '';
$row['disabled'] = '';
}
$row['used_code'] = $row['used_code'] == '' ? 'invalid' : $row['used_code'];
if($row['used_code'] == $row['code']){
$row['valid'] = 'green';
} else {
$row['valid'] = 'red';
}
$vars['data'] .= \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/store_android_tr.tpl'))->SERVERPATH(),$row);
}
$vars = array_merge($vars, \SYSTEM\PAGE\text::tag('time'));
return \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/store_android.tpl'))->SERVERPATH(),$vars);
}
public static function sai_mod__SAI_saimod_beta_action_store_ios(){
$vars = array();
$vars['data'] = '';
$beta = \SQL\BETA_STORE_IOS_FIND::QQ();
$i = 0;
while($row = $beta->next()){
$row['i'] = $i++;
if($row['android']){
$row['device'] = 'android';}
if($row['ios']){
$row['device'] = 'apple';}
$row['generated'] = $row['createdAt'] ? \SYSTEM\time::time_ago_string(strtotime($row['createdAt'])) : 'invalid';
if($row['redeemedAt']){
$row['redeemed'] = 'check';
$row['redeemed_time'] = \SYSTEM\time::time_ago_string(strtotime($row['redeemedAt']));
} else {
$row['redeemed'] = 'times';
$row['redeemed_time'] = '';
}
if($row['storedAt']){
$row['stored'] = 'check';
$row['stored_time'] = \SYSTEM\time::time_ago_string(strtotime($row['storedAt']));
$row['disabled'] = 'disabled';
} else {
$row['stored'] = 'times';
$row['stored_time'] = '';
$row['disabled'] = '';
}
$row['used_code'] = $row['used_code'] == '' ? 'invalid' : $row['used_code'];
if($row['used_code'] == $row['code']){
$row['valid'] = 'green';
} else {
$row['valid'] = 'red';
}
$vars['data'] .= \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/store_ios_tr.tpl'))->SERVERPATH(),$row);
}
$vars = array_merge($vars, \SYSTEM\PAGE\text::tag('time'));
return \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/store_ios.tpl'))->SERVERPATH(),$vars);
}
public static function sai_mod__SAI_saimod_beta_action_store($email){
\SQL\BETA_STORE::QI(array($email));
return \JsonResult::ok();
}
public static function sai_mod__SAI_saimod_beta_action_mail(){
$vars = array();
$vars['data'] = '';
$beta = \SQL\BETA_MAIL_FIND::QQ();
$i = 0;
while($row = $beta->next()){
$row['i'] = $i++;
if($row['android']){
$row['device'] = 'android';}
if($row['ios']){
$row['device'] = 'apple';}
if($row['redeemedAt']){
$row['redeemed'] = 'check';
$row['redeemed_time'] = \SYSTEM\time::time_ago_string(strtotime($row['redeemedAt']));
} else {
$row['redeemed'] = 'times';
$row['redeemed_time'] = '';
}
if($row['storedAt']){
$row['stored'] = 'check';
$row['stored_time'] = \SYSTEM\time::time_ago_string(strtotime($row['storedAt']));
} else {
$row['stored'] = 'times';
$row['stored_time'] = '';
}
if($row['emailedAt']){
$row['mailed'] = 'check';
$row['mailed_time'] = \SYSTEM\time::time_ago_string(strtotime($row['emailedAt']));
$row['disabled'] = 'disabled';
} else {
$row['mailed'] = 'times';
$row['mailed_time'] = '';
$row['disabled'] = '';
}
$row['used_code'] = $row['used_code'] == '' ? 'invalid' : $row['used_code'];
if($row['used_code'] == $row['code']){
$row['valid'] = 'green';
} else {
$row['valid'] = 'red';
}
$vars['data'] .= \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/mail_tr.tpl'))->SERVERPATH(),$row);
}
$vars = array_merge($vars, \SYSTEM\PAGE\text::tag('time'));
return \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/mail.tpl'))->SERVERPATH(),$vars);
}
public static function sai_mod__SAI_saimod_beta_action_email($email,$android,$ios){
require((new \SYSTEM\PROOT('PHPMailer-master/PHPMailerAutoload.php'))->SERVERPATH());
date_default_timezone_set('Europe/Berlin');
$mail = new \PHPMailer;
$mail->CharSet = 'utf-8';
$mail->Encoding = 'base64';
$mail->Host = 'atmanspacher.eu';
$mail->Port = 465;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->setFrom( 'prototyping@democracy-deutschland.de', 'DEMOCRACY Deutschland Prototyp');
$mail->addReplyTo( 'prototyping@democracy-deutschland.de', 'DEMOCRACY Deutschland Prototyp');
$mail->addAddress( $email);
$vars = array();
$vars['datum'] = date("d.m.Y");
$vars['uhrzeit'] = date("H:i");
if($android){
$html = \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/mail_android.tpl'))->SERVERPATH(), $vars);
} else {
$html = \SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/mail_ios.tpl'))->SERVERPATH(), $vars);
}
$mail->Subject = '📱 DEMOCRACY: Dein Prototyp Zugang';
$mail->Body = $html;
$mail->IsHTML(true);
$mail->AddEmbeddedImage((new \PSAI('saimod_beta/img/logo.png'))->SERVERPATH(), 'democracy_logo', 'logo.png');
//send the message, check for errors
if(!$mail->send()){
throw new \SYSTEM\LOG\ERROR("Mailer Error: " . $mail->ErrorInfo);}
\SQL\BETA_MAIL::QI(array($email));
return \JsonResult::ok();
}
public static function menu(){
return new \SYSTEM\SAI\sai_module_menu( 99,
\SYSTEM\SAI\sai_module_menu::POISITION_LEFT,
\SYSTEM\SAI\sai_module_menu::DIVIDER_LEFT,
\SYSTEM\PAGE\replace::replaceFile((new \PSAI('saimod_beta/tpl/menu.tpl'))->SERVERPATH()));}
public static function right_public(){return false;}
public static function right_right(){return \SYSTEM\SECURITY\security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI);}
public static function js(){
return array(new \PSAI('saimod_beta/js/saimod_beta.js'));}
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class DATA_SAIMOD_BETA extends \SYSTEM\DB\QI {
public static function get_class(){return \get_class();}
public static function files_mysql(){
return array( (new \PSAI('/saimod_beta/sql/mysql/system_page.sql'))->SERVERPATH(),
(new \PSAI('/saimod_beta/sql/mysql/system_api.sql'))->SERVERPATH());
}
}

View File

@ -0,0 +1,3 @@
<?php
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'SQL');
\SYSTEM\SQL\setup::register('SQL\\DATA_SAIMOD_BETA');

View File

@ -0,0 +1,12 @@
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (7000, 42, 0, 0, '_SAI_saimod_beta', 'action', NULL);
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (7010, 42, 2, 7000, 'generate', 'comment', 'STRING');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (7020, 42, 2, 7000, 'comment', 'code', 'STRING');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (7021, 42, 2, 7000, 'comment', 'comment', 'STRING');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (7030, 42, 2, 7000, 'store', 'email', 'STRING');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (7040, 42, 2, 7000, 'email', 'email', 'STRING');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (7041, 42, 2, 7000, 'email', 'android', 'BOOL');
REPLACE INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (7042, 42, 2, 7000, 'email', 'ios', 'BOOL');

View File

@ -0,0 +1,6 @@
REPLACE INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (700, 42, 'beta', 'beta', -1, 0, 0, '#content', './sai.php?sai_mod=.SAI.saimod_beta', 'init_saimod_beta', '\\SAI\\saimod_beta');
REPLACE INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (701, 42, 'all', 'beta', 700, 0, 0, '#content_beta', './sai.php?sai_mod=.SAI.saimod_beta&action=all', 'init_saimod_beta_all', '\\SAI\\saimod_beta');
REPLACE INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (702, 42, 'code', 'beta', 700, 0, 1, '#content_beta', './sai.php?sai_mod=.SAI.saimod_beta&action=code', 'init_saimod_beta_code', '\\SAI\\saimod_beta');
REPLACE INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (703, 42, 'store_android', 'beta', 700, 0, 1, '#content_beta', './sai.php?sai_mod=.SAI.saimod_beta&action=store_android', 'init_saimod_beta_store_android', '\\SAI\\saimod_beta');
REPLACE INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (704, 42, 'store_ios', 'beta', 700, 0, 1, '#content_beta', './sai.php?sai_mod=.SAI.saimod_beta&action=store_ios', 'init_saimod_beta_store_ios', '\\SAI\\saimod_beta');
REPLACE INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (705, 42, 'mail', 'beta', 700, 0, 1, '#content_beta', './sai.php?sai_mod=.SAI.saimod_beta&action=mail', 'init_saimod_beta_mail', '\\SAI\\saimod_beta');

View File

@ -0,0 +1,17 @@
<div class="table-responsive">
<table class="table table-striped table-condensed tablesorter sai_margin_off" id="table_beta_all">
<thead>
<tr>
<th>Code</th>
<th>EMail</th>
<th>Device</th>
<th>Generated</th>
<th>Redeemed</th>
<th>Store</th>
<th>Email</th>
<th>Comment</th>
</tr>
</thead>
<tbody>${data}</tbody>
</table>
</div>

View File

@ -0,0 +1,10 @@
<tr>
<td style="color: ${valid}">${used_code}</td>
<td>${email}</td>
<td><i class="fa fa-${device}"></i></td>
<td>${generated}</td>
<td><i class="fa fa-${redeemed}"></i>&nbsp;${redeemed_time}</td>
<td><i class="fa fa-${stored}"></i>&nbsp;${stored_time}</td>
<td><i class="fa fa-${emailed}"></i>&nbsp;${emailed_time}</td>
<td>${comment}</td>
</tr>

View File

@ -0,0 +1,25 @@
<div class="row-fluid sai_margin_bottom_20 sai_margin_top_10">
<div class="col-12">
<h3>Generate Code</h3>
<div class="input-group">
<input id="code_comment" type="text" class="form-control" placeholder="Comment">
<div class="input-group-append">
<button id="code_generate" type="button" class="btn btn-success"><i class="fa fa-plus"></i></button>
</div>
</div>
</div>
</div>
<div class="table-responsive">
<table class="table table-striped table-condensed tablesorter sai_margin_off" id="table_beta_code">
<thead>
<tr>
<th>Code</th>
<th>Generated</th>
<th>Redeemed Count</th>
<th>Comment</th>
<th>Action</th>
</tr>
</thead>
<tbody>${data}</tbody>
</table>
</div>

View File

@ -0,0 +1,10 @@
<tr>
<td>
<a href="./invite/${code}" target="blank"><i class="fa fa-link"></i>&nbsp;${code}</a>&nbsp;&nbsp;&nbsp;
<a href="https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=https%3A%2F%2Fwww.democracy-deutschland.de%2Finvite%2F${code}&choe=UTF-8" target="blank"><i class="fa fa-qrcode"></i>&nbsp;QR-Code</a>
</td>
<td>${generated}</td>
<td>${count}</td>
<td><input id="comment_${i}" type="text" class="form-control" value="${comment}"></td>
<td><button type="button" class="btn btn-warning code_setcomment" code="${code}" i="${i}"><i class="fa fa-pencil"></i></button></td>
</tr>

View File

@ -0,0 +1,17 @@
<div class="table-responsive">
<table class="table table-striped table-condensed tablesorter sai_margin_off" id="table_store_ios">
<thead>
<tr>
<th>Code</th>
<th>EMail</th>
<th>Device</th>
<th>Redeemed</th>
<th>Store</th>
<th>Mail</th>
<th>Comment</th>
<th>Action</th>
</tr>
</thead>
<tbody>${data}</tbody>
</table>
</div>

View File

@ -0,0 +1,62 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="font-family: 'Helvetica Neue'; color: rgb(69, 69, 69); font-size: medium;">
<div>
<span>Hallo lieber </span>
<span style="font-weight: 700; ">Prototyp-Tester,</span>
</div>
<br>
<div>
<span>im folgenden erklären wir Dir, wie du <b>zur 1. Version von DEMOCRACY </b>gelangst.</span>
</div>
<br>
<br>
<span style="text-decoration: underline;"><b>Anleitung für Android</b></span>
<ol style="line-height: 2;">
<li>Öffne diesen Link mit Deinem Handy: <a href="https://play.google.com/apps/testing/de.democracydeutschland.app">https://play.google.com/apps/testing/de.democracydeutschland.app</a></li>
<li>Drücke den Button ganz unten auf dem es heißt: <i>Tester werden</i></li>
<li>Eine neue Ansicht lädt, drücke nun die <i>App DEMOCRACY bei Google Play herunterladen</i>.</li>
<li>Du wirst in den Google Play Store weitergeleitet und kannst die App dort herunter laden</li>
<li>Öffne DEMOCRACY und teste wie du Bugs korrekt reportest, entnehme bitte der Anleitung zum Bug-Report</li>
<li>Solltest Du beim Öffnen des Links von Schritt 1 eine Fehlermeldung bekommen, in der es heißt <i>App nicht verfügbar</i>, hast du dich entweder mit einer anderen als uns zur Verfügung gestellten Email-Adresse angemeldet oder uns die falsche Email-Adresse zur Verfügung gestellt. Gerne kannst du uns mit einer Mail an <a href="mailto:prototyping@democracy-deutschland.de">prototyping@democracy-deutschland.de</a> deine richtige Adresse zur Verfügung stellen.</li>
</ol>
<div>
<span><br></span>
</div>
<div>
<span style="text-decoration: underline;"><b>Anleitung zum Bug-Report</b></span>
<span><br><br></span>
</div>
<div>
<span>Ein qualifiziertes Feedback ist notwendig, um Fehler zu beheben. Deshalb gib uns möglichst viele Informationen zu den von Dir gefunden Fehlern oder Verbesserungsvorschlägen.</span>
</div>
<br>
<div>
<span>Wie du das machst?</span>
</div>
<div>
<span>Zunächst: Mach aus der unten stehenden Liste bitte nur das, was Dir zumutbar erscheint. Im Optimalfall:</span>
</div>
<br>
<ol style="line-height: 2;">
<li>Mach einen Screenshot (n Android: An- und Leiser-Taste gleichzeitig drücken oder An-Taste drücken und Screenshot auswählen)</li>
<li>Markiere die fehlerhaften Bereiche in dem Screenshot (z.B Roter Kreis um den Fehler)</li>
<li>Beschreib das Problem möglichst genau in wenigen Sätzen</li>
<li>Gib eine Schritt-für-Schritt-Anleitung, wie es zu dem Problem gekommen ist, und wenn es dir für notwendig erscheint</li>
<li>Klassifiziere das Problem in einen Fehlerbericht und/oder einen Verbesserungsvorschlag</li>
<li>Schicke uns den (bearbeiteten) Screenshot, die Fehlerbeschreibung sowie Deine Plattform (iOS/Android) und Deine Gerätebezeichnung (z.B. iPhone SE) per E-Mail an <a href="mailto:prototyping@democracy-deutschland.de">prototyping@democracy-deutschland.de</a> oder optional</li>
<li>Erstelle ein Issue für das Problem und lade den Screenshot auf Github hoch <a href="https://github.com/demokratie-live/democracy-client/issues">https://github.com/demokratie-live/democracy-client/issues</a></li>
</ol>
<br>
<div>
<span><img src="cid:democracy_logo"></span>
<br><br><br>
<div>DEMOCRACY Deutschland e.V.</div>
<div>IBAN: DE33 5003 1000 1049 7560 00<br></div>
<div>BIC: TRODDEF1<br>mobil &nbsp;+49 176 470 40 213</div>
<br>
</div>
</body>
</html>

View File

@ -0,0 +1,62 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="font-family: 'Helvetica Neue'; color: rgb(69, 69, 69); font-size: medium;">
<div>
<span>Hallo lieber </span>
<span style="font-weight: 700; ">Prototyp-Tester,</span>
</div>
<br>
<div>
<span>im folgenden erklären wir Dir, wie du <b>zur 1. Version von DEMOCRACY </b>gelangst.</span>
</div>
<br>
<br>
<span style="text-decoration: underline;"><b>Anleitung für iOS</b></span>
<ol style="line-height: 2;">
<li>Du erhälst in den folgenden Minuten eine Email von TestFlight mit der Betreffzeile <i>DEMOCRACY Deutschland e.V. has invited you to test "DEMOCRACY App"</i></li>
<li>Öffne diese Mail, klicke den blauen Button <i>View in TestFlight </i>und folge der aufgeführten Anleitung, also</li>
<li>Lade dir TestFlight im AppStore herunter</li>
<li>Öffne TestFlight und Drücke “Redeem”</li>
<li>Gib den Bestätigungscode, also z.B. QJHFFNDF ein und lade Dir DEMOCRACY herunter.</li>
<li>Öffne DEMOCRACY und teste wie du Bugs korrekt reportest, entnehme bitte der Anleitung zum Bug-Report</li>
</ol>
<div>
<span><br></span>
</div>
<div>
<span style="text-decoration: underline;"><b>Anleitung zum Bug-Report</b></span>
<span><br><br></span>
</div>
<div>
<span>Ein qualifiziertes Feedback ist notwendig, um Fehler zu beheben. Deshalb gib uns möglichst viele Informationen zu den von Dir gefunden Fehlern oder Verbesserungsvorschlägen.</span>
</div>
<br>
<div>
<span>Wie du das machst?</span>
</div>
<div>
<span>Zunächst: Mach aus der unten stehenden Liste bitte nur das, was Dir zumutbar erscheint. Im Optimalfall:</span>
</div>
<br>
<ol style="line-height: 2;">
<li>Mach einen Screenshot (in iOS: Stand-by- und Home-Taste gleichzeitig drücken)</li>
<li>Markiere die fehlerhaften Bereiche in dem Screenshot (z.B Roter Kreis um den Fehler)</li>
<li>Beschreib das Problem möglichst genau in wenigen Sätzen</li>
<li>Gib eine Schritt-für-Schritt-Anleitung, wie es zu dem Problem gekommen ist, und wenn es dir für notwendig erscheint</li>
<li>Klassifiziere das Problem in einen Fehlerbericht und/oder einen Verbesserungsvorschlag</li>
<li>Schicke uns den (bearbeiteten) Screenshot, die Fehlerbeschreibung sowie Deine Plattform (iOS/Android) und Deine Gerätebezeichnung (z.B. iPhone SE) per E-Mail an <a href="mailto:prototyping@democracy-deutschland.de">prototyping@democracy-deutschland.de</a> oder optional</li>
<li>Erstelle ein Issue für das Problem und lade den Screenshot auf Github hoch <a href="https://github.com/demokratie-live/democracy-client/issues">https://github.com/demokratie-live/democracy-client/issues</a></li>
</ol>
<br>
<div>
<span><img src="cid:democracy_logo"></span>
<br><br><br>
<div>DEMOCRACY Deutschland e.V.</div>
<div>IBAN: DE33 5003 1000 1049 7560 00<br></div>
<div>BIC: TRODDEF1<br>mobil &nbsp;+49 176 470 40 213</div>
<br>
</div>
</body>
</html>

View File

@ -0,0 +1,10 @@
<tr>
<td style="color: ${valid}">${used_code}</td>
<td>${email}</td>
<td><i class="fa fa-${device}"></i></td>
<td><i class="fa fa-${redeemed}"></i>&nbsp;${redeemed_time}</td>
<td><i class="fa fa-${stored}"></i>&nbsp;${stored_time}</td>
<td><i class="fa fa-${mailed}"></i>&nbsp;${mailed_time}</td>
<td>${comment}</td>
<td><button type="button" class="btn btn-danger beta_mail" ${disabled} email="${email}" ios="${ios}" android="${android}"><i class="fa fa-check"></i>&nbsp;Send Mail</button></td>
</tr>

View File

@ -0,0 +1,7 @@
<li class="nav-item">
<a id="menu_beta" class="nav-link" data-toggle="tooltip" data-placement="bottom" title="Beta" href="#!beta">
<span class="d-md-none" style="padding-left: 15px;"></span>
<i class="fa fa-check" aria-hidden="true"></i>
<span class="d-md-none">&nbsp;&nbsp;Beta</span>
</a>
</li>

View File

@ -0,0 +1,16 @@
<div class="row">
<div class="col-12 sai_padding_off bg-primary sai_padding_10">
<h4 class="sai_margin_off" style="float:left;">&nbsp;<span class="fa fa-check" aria-hidden="true"></span>&nbsp;&nbsp;Beta</h4>
</div>
<div class="col-md-2 sai_padding_off">
<ul class="nav bg-light flex-column" id="tabs_beta">
<li class="nav-item"><a class="nav-link active" href="#!beta" id="menu_tag_beta">(All) Beta</a></li>
<li class="nav-item"><a class="nav-link" href="#!beta(code)" id="menu_tag_code">1. Code</a></li>
<li class="nav-item"><a class="nav-link" href="#!beta(store_android)" id="menu_tag_store_android">2. Store (Android)&nbsp;<span class="pull-right badge badge-pill badge-danger">${store_android_count}</span></a></li>
<li class="nav-item"><a class="nav-link" href="#!beta(store_ios)" id="menu_tag_store_ios">2. Store (iOS)&nbsp;<span class="pull-right badge badge-pill badge-danger">${store_ios_count}</span></a></li>
<li class="nav-item"><a class="nav-link" href="#!beta(mail)" id="menu_tag_mail">3. Send Mail&nbsp;<span class="pull-right badge badge-pill badge-danger">${mail_count}</span></a></li>
</ul>
</div>
<div class="col-md-10 sai_padding_off sai_border_left" id="content_beta">
</div>
</div>

View File

@ -0,0 +1,17 @@
<div class="table-responsive">
<table class="table table-striped table-condensed tablesorter sai_margin_off" id="table_store_android">
<thead>
<tr>
<th>Code</th>
<th>EMail</th>
<th>Device</th>
<th>Generated</th>
<th>Redeemed</th>
<th>Store</th>
<th>Comment</th>
<th>Action</th>
</tr>
</thead>
<tbody>${data}</tbody>
</table>
</div>

View File

@ -0,0 +1,10 @@
<tr>
<td style="color: ${valid}">${used_code}</td>
<td><span id="email_${i}">${email}</span>&nbsp;<button class="btn btn-link copy_email sai_padding_off" i="${i}"><i class="fa fa-clipboard"></i></button></td>
<td><i class="fa fa-${device}"></i></td>
<td>${generated}</td>
<td><i class="fa fa-${redeemed}"></i>&nbsp;${redeemed_time}</td>
<td><i class="fa fa-${stored}"></i>&nbsp;${stored_time}</td>
<td>${comment}</td>
<td><button type="button" class="btn btn-danger code_android" ${disabled} email="${email}"><i class="fa fa-check"></i>&nbsp;Habe ich dem Store hinzugefügt</button></td>
</tr>

View File

@ -0,0 +1,17 @@
<div class="table-responsive">
<table class="table table-striped table-condensed tablesorter sai_margin_off" id="table_store_ios">
<thead>
<tr>
<th>Code</th>
<th>EMail</th>
<th>Device</th>
<th>Generated</th>
<th>Redeemed</th>
<th>Store</th>
<th>Comment</th>
<th>Action</th>
</tr>
</thead>
<tbody>${data}</tbody>
</table>
</div>

View File

@ -0,0 +1,10 @@
<tr>
<td style="color: ${valid}">${used_code}</td>
<td><span id="email_${i}">${email}</span>&nbsp;<button class="btn btn-link copy_email sai_padding_off" i="${i}"><i class="fa fa-clipboard"></i></button></td>
<td><i class="fa fa-${device}"></i></td>
<td>${generated}</td>
<td><i class="fa fa-${redeemed}"></i>&nbsp;${redeemed_time}</td>
<td><i class="fa fa-${stored}"></i>&nbsp;${stored_time}</td>
<td>${comment}</td>
<td><button type="button" class="btn btn-danger code_ios" ${disabled} email="${email}"><i class="fa fa-check"></i>&nbsp;Habe ich dem Store hinzugefügt</button></td>
</tr>