Add authorization header
Add api key protection for all endpoints Add registration list view
This commit is contained in:
parent
c485b12c61
commit
5c2317d839
|
@ -0,0 +1,2 @@
|
||||||
|
RewriteEngine On
|
||||||
|
RewriteRule .* - [e=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
|
@ -8,6 +8,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/strings.php');
|
require_once('../../utils/strings.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if ('POST' === $method) {
|
if ('POST' === $method) {
|
||||||
parse_str(file_get_contents('php://input'), $_POST);
|
parse_str(file_get_contents('php://input'), $_POST);
|
||||||
|
|
|
@ -3,6 +3,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/strings.php');
|
require_once('../../utils/strings.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$connection = connect();
|
$connection = connect();
|
||||||
|
|
||||||
$cid = intval($_GET["cid"]);
|
$cid = intval($_GET["cid"]);
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/tools.php');
|
require_once('../../utils/tools.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if ('POST' === $method) {
|
if ('POST' === $method) {
|
||||||
parse_str(file_get_contents('php://input'), $_POST);
|
parse_str(file_get_contents('php://input'), $_POST);
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
<?php
|
||||||
|
header("Access-Control-Allow-Origin: *");
|
||||||
|
header("Content-Type: application/json; charset=UTF-8");
|
||||||
|
header("Access-Control-Allow-Methods: POST");
|
||||||
|
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
|
||||||
|
|
||||||
|
require_once('../../utils/config.php');
|
||||||
|
require_once('../../utils/db.php');
|
||||||
|
require_once('../../utils/strings.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$connection = connect();
|
||||||
|
|
||||||
|
$returnValue = array();
|
||||||
|
$querystr = "SELECT * FROM li_registrations";
|
||||||
|
|
||||||
|
$result = mysqli_query($connection, $querystr);
|
||||||
|
if($result->num_rows !== 0) {
|
||||||
|
while ($row = mysqli_fetch_object($result)) {
|
||||||
|
$registration = (object) [
|
||||||
|
'rid' => $row->rid,
|
||||||
|
'firstname' => $row->firstname,
|
||||||
|
'lastname' => $row->lastname,
|
||||||
|
'birthday' => $row->birthday,
|
||||||
|
'gender' => $row->gender,
|
||||||
|
'street' => $row->street,
|
||||||
|
'house' => $row->house,
|
||||||
|
'zip' => $row->zip,
|
||||||
|
'city' => $row->city,
|
||||||
|
'phone' => $row->phone,
|
||||||
|
'email' => $row->email,
|
||||||
|
'accountholder' => $row->accountholder,
|
||||||
|
'iban' => $row->iban,
|
||||||
|
'bic' => $row->bic,
|
||||||
|
'bank' => $row->bank,
|
||||||
|
'applicationconsent' => $row->applicationconsent,
|
||||||
|
'datachangeconsent' => $row->datachangeconsent,
|
||||||
|
'privacypolicyconsent' => $row->privacypolicyconsent,
|
||||||
|
'directdebitconsent' => $row->directdebitconsent,
|
||||||
|
'returndebitconsent' => $row->returndebitconsent,
|
||||||
|
'datastorageconsent' => $row->datastorageconsent,
|
||||||
|
'multimediaconsent' => $row->multimediaconsent,
|
||||||
|
'registrationfrom' => $row->registrationfrom
|
||||||
|
];
|
||||||
|
|
||||||
|
array_push($returnValue, $registration);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mysqli_free_result($result);
|
||||||
|
|
||||||
|
echo json_encode($returnValue);
|
||||||
|
?>
|
|
@ -8,6 +8,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/tools.php');
|
require_once('../../utils/tools.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if ('POST' === $method) {
|
if ('POST' === $method) {
|
||||||
parse_str(file_get_contents('php://input'), $_POST);
|
parse_str(file_get_contents('php://input'), $_POST);
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/strings.php');
|
require_once('../../utils/strings.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if ('POST' === $method) {
|
if ('POST' === $method) {
|
||||||
parse_str(file_get_contents('php://input'), $_POST);
|
parse_str(file_get_contents('php://input'), $_POST);
|
||||||
|
|
|
@ -3,12 +3,20 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/strings.php');
|
require_once('../../utils/strings.php');
|
||||||
|
|
||||||
|
header("Access-Control-Allow-Origin: *");
|
||||||
|
header("Access-Control-Allow-Headers: Authorization");
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$connection = connect();
|
$connection = connect();
|
||||||
|
|
||||||
$returnValue = array();
|
$returnValue = array();
|
||||||
$querystr = "SELECT * FROM li_students";
|
$querystr = "SELECT * FROM li_students";
|
||||||
|
|
||||||
|
|
||||||
$result = mysqli_query($connection, $querystr);
|
$result = mysqli_query($connection, $querystr);
|
||||||
if($result->num_rows !== 0) {
|
if($result->num_rows !== 0) {
|
||||||
while ($row = mysqli_fetch_object($result)) {
|
while ($row = mysqli_fetch_object($result)) {
|
||||||
|
@ -56,6 +64,5 @@
|
||||||
|
|
||||||
mysqli_free_result($result);
|
mysqli_free_result($result);
|
||||||
|
|
||||||
header("Access-Control-Allow-Origin: *");
|
|
||||||
echo json_encode($returnValue);
|
echo json_encode($returnValue);
|
||||||
?>
|
?>
|
|
@ -8,6 +8,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/tools.php');
|
require_once('../../utils/tools.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if ('POST' === $method) {
|
if ('POST' === $method) {
|
||||||
parse_str(file_get_contents('php://input'), $_POST);
|
parse_str(file_get_contents('php://input'), $_POST);
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/strings.php');
|
require_once('../../utils/strings.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if ('POST' === $method) {
|
if ('POST' === $method) {
|
||||||
parse_str(file_get_contents('php://input'), $_POST);
|
parse_str(file_get_contents('php://input'), $_POST);
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/strings.php');
|
require_once('../../utils/strings.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if ('POST' === $method) {
|
if ('POST' === $method) {
|
||||||
parse_str(file_get_contents('php://input'), $_POST);
|
parse_str(file_get_contents('php://input'), $_POST);
|
||||||
|
|
|
@ -8,6 +8,12 @@
|
||||||
require_once('../../utils/db.php');
|
require_once('../../utils/db.php');
|
||||||
require_once('../../utils/strings.php');
|
require_once('../../utils/strings.php');
|
||||||
|
|
||||||
|
$authorization = $_SERVER["HTTP_AUTHORIZATION"];
|
||||||
|
if(strcmp($authorization, API_KEY) !== 0) {
|
||||||
|
echo 'STOP TRYING TO STEAL MY DATA!';
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
$method = $_SERVER['REQUEST_METHOD'];
|
$method = $_SERVER['REQUEST_METHOD'];
|
||||||
if ('POST' === $method) {
|
if ('POST' === $method) {
|
||||||
parse_str(file_get_contents('php://input'), $_POST);
|
parse_str(file_get_contents('php://input'), $_POST);
|
||||||
|
|
|
@ -2,10 +2,11 @@
|
||||||
|
|
||||||
define('DB_SERVER','mysql');
|
define('DB_SERVER','mysql');
|
||||||
define('DB_USER','db308647');
|
define('DB_USER','db308647');
|
||||||
define('DB_PASSWORD','1&9r9t6u1r0');
|
define('DB_PASSWORD','9sql4L9!9A2r8');
|
||||||
define('DB_NAME','db308647');
|
define('DB_NAME','db308647');
|
||||||
|
|
||||||
define('IMAGE_PATH', dirname($_SERVER["REQUEST_URI"]) . '/images/');
|
define('IMAGE_PATH', dirname($_SERVER["REQUEST_URI"]) . '/images/');
|
||||||
define('MAGIC_WORD', 'AED717B292EE4F08A0AEE4EBA4B1B1FA');
|
define('MAGIC_WORD', 'AED717B292EE4F08A0AEE4EBA4B1B1FA');
|
||||||
define('MAGIC_DATE', 'YmdHi');
|
define('MAGIC_DATE', 'YmdHi');
|
||||||
|
define('API_KEY', '754259b6-caf0-4eca-a1f6-812731adae79');
|
||||||
?>
|
?>
|
|
@ -41,8 +41,8 @@
|
||||||
"budgets": [
|
"budgets": [
|
||||||
{
|
{
|
||||||
"type": "initial",
|
"type": "initial",
|
||||||
"maximumWarning": "500kb",
|
"maximumWarning": "2mb",
|
||||||
"maximumError": "1mb"
|
"maximumError": "2mb"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "anyComponentStyle",
|
"type": "anyComponentStyle",
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
"test:watch": "jest --watch",
|
"test:watch": "jest --watch",
|
||||||
"test:coverage": "jest --coverage",
|
"test:coverage": "jest --coverage",
|
||||||
"lint": "ng lint",
|
"lint": "ng lint",
|
||||||
"foramt": "npx prettier --write 'src/**/*.ts' 'src/**/*.html' 'src/**/*.scss'"
|
"format": "npx prettier --write 'src/**/*.ts' 'src/**/*.html' 'src/**/*.scss'"
|
||||||
},
|
},
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -3,13 +3,15 @@ import { RouterModule, Routes, provideRouter, withComponentInputBinding } from '
|
||||||
import { StudentListComponent } from './components/students/student-list/student-list.component';
|
import { StudentListComponent } from './components/students/student-list/student-list.component';
|
||||||
import { VisitsComponent } from './components/visits/visits.component';
|
import { VisitsComponent } from './components/visits/visits.component';
|
||||||
import { VisitsDatetimeComponent } from './components/visits/visits-datetime/visits-datetime.component';
|
import { VisitsDatetimeComponent } from './components/visits/visits-datetime/visits-datetime.component';
|
||||||
import { StudentRegisterComponent } from './components/students/student-register/student-register.component';
|
import { RegistrationWizardComponent } from './components/registrations/registration-wizard/registration-wizard.component';
|
||||||
|
import { RegistrationListComponent } from './components/registrations/registration-list/registration-list.component';
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{ path: 'students', component: StudentListComponent },
|
{ path: 'students', component: StudentListComponent },
|
||||||
{ path: 'visits', component: VisitsComponent },
|
{ path: 'visits', component: VisitsComponent },
|
||||||
|
{ path: 'registrations', component: RegistrationListComponent },
|
||||||
{ path: 'select', component: VisitsDatetimeComponent },
|
{ path: 'select', component: VisitsDatetimeComponent },
|
||||||
{ path: 'register', component: StudentRegisterComponent },
|
{ path: 'register', component: RegistrationWizardComponent },
|
||||||
{ path: 'visits/:date/:time', component: VisitsComponent },
|
{ path: 'visits/:date/:time', component: VisitsComponent },
|
||||||
{ path: '**', redirectTo: 'students' },
|
{ path: '**', redirectTo: 'students' },
|
||||||
];
|
];
|
||||||
|
|
|
@ -20,7 +20,7 @@ import { VisitsDatetimeComponent } from './components/visits/visits-datetime/vis
|
||||||
import { MatDatepickerModule } from '@angular/material/datepicker';
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
|
import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
|
||||||
import {MY_DATE_FORMAT, StudentRegisterComponent} from './components/students/student-register/student-register.component';
|
import { MY_DATE_FORMAT, RegistrationWizardComponent} from './components/registrations/registration-wizard/registration-wizard.component';
|
||||||
import { MatStepperModule } from '@angular/material/stepper';
|
import { MatStepperModule } from '@angular/material/stepper';
|
||||||
import { MatInputModule } from '@angular/material/input';
|
import { MatInputModule } from '@angular/material/input';
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
@ -32,6 +32,7 @@ import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
|
import { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';
|
||||||
import { MomentDateAdapter } from '@angular/material-moment-adapter';
|
import { MomentDateAdapter } from '@angular/material-moment-adapter';
|
||||||
import {AngularIbanModule} from "angular-iban";
|
import {AngularIbanModule} from "angular-iban";
|
||||||
|
import { RegistrationListComponent } from './components/registrations/registration-list/registration-list.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [
|
||||||
|
@ -45,7 +46,8 @@ import {AngularIbanModule} from "angular-iban";
|
||||||
VisitsComponent,
|
VisitsComponent,
|
||||||
StudentEnrollComponent,
|
StudentEnrollComponent,
|
||||||
VisitsDatetimeComponent,
|
VisitsDatetimeComponent,
|
||||||
StudentRegisterComponent,
|
RegistrationWizardComponent,
|
||||||
|
RegistrationListComponent,
|
||||||
],
|
],
|
||||||
imports: [
|
imports: [
|
||||||
BrowserModule,
|
BrowserModule,
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
<div id="content">
|
||||||
|
<div class="grid-item-full">
|
||||||
|
<div *ngIf="loading; else table">
|
||||||
|
<mat-spinner class="center"></mat-spinner>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<ng-template #table>
|
||||||
|
<mat-table [dataSource]="dataSource">
|
||||||
|
<ng-container matColumnDef="Firstname">
|
||||||
|
<mat-header-cell *matHeaderCellDef> Vorname </mat-header-cell>
|
||||||
|
<mat-cell *matCellDef="let element">{{element.firstname}}</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="Lastname">
|
||||||
|
<mat-header-cell *matHeaderCellDef> Nachname </mat-header-cell>
|
||||||
|
<mat-cell *matCellDef="let element">{{element.lastname}}</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="Birthday">
|
||||||
|
<mat-header-cell *matHeaderCellDef> Geburtsdatum </mat-header-cell>
|
||||||
|
<mat-cell *matCellDef="let element">{{element.birthday | date: 'dd.MM.yyyy'}}</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<ng-container matColumnDef="Gender">
|
||||||
|
<mat-header-cell *matHeaderCellDef> Geschlecht </mat-header-cell>
|
||||||
|
<mat-cell *matCellDef="let element">{{element.gender}}</mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
<ng-container matColumnDef="Actions">
|
||||||
|
<mat-header-cell *matHeaderCellDef></mat-header-cell>
|
||||||
|
<mat-cell *matCellDef="let element" class="actions"><a><i class="bi bi-trash"></i></a></mat-cell>
|
||||||
|
</ng-container>
|
||||||
|
|
||||||
|
<mat-header-row
|
||||||
|
*matHeaderRowDef="[
|
||||||
|
'Firstname',
|
||||||
|
'Lastname',
|
||||||
|
'Birthday',
|
||||||
|
'Gender',
|
||||||
|
'Actions'
|
||||||
|
]"></mat-header-row>
|
||||||
|
<mat-row
|
||||||
|
*matRowDef="
|
||||||
|
let row;
|
||||||
|
columns: [
|
||||||
|
'Firstname',
|
||||||
|
'Lastname',
|
||||||
|
'Birthday',
|
||||||
|
'Gender',
|
||||||
|
'Actions'
|
||||||
|
]
|
||||||
|
"></mat-row>
|
||||||
|
</mat-table>
|
||||||
|
</ng-template>
|
||||||
|
</div>
|
||||||
|
<div class="grid-item">
|
||||||
|
<input
|
||||||
|
matInput
|
||||||
|
id="pipelineFilter"
|
||||||
|
(keyup)="applyFilter($event)"
|
||||||
|
placeholder="Filtern" />
|
||||||
|
</div>
|
||||||
|
<div class="grid-item"></div>
|
||||||
|
</div>
|
|
@ -0,0 +1,74 @@
|
||||||
|
#content {
|
||||||
|
margin-top: 24px;
|
||||||
|
background-color: rgb(245, 126, 32);
|
||||||
|
color: #ffffff;
|
||||||
|
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: auto auto;
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pipelineFilter {
|
||||||
|
margin: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
color: white;
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
button.button-add {
|
||||||
|
background-color: #411ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
width: 50%;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:link,
|
||||||
|
a:visited,
|
||||||
|
a:active {
|
||||||
|
text-decoration: none;
|
||||||
|
text-transform: none;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #411ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.grid-item-full {
|
||||||
|
grid-column-start: 1;
|
||||||
|
grid-column-end: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bi {
|
||||||
|
color: #411ccc;
|
||||||
|
font-size: 2em;
|
||||||
|
margin-right: 0.4em;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-mdc-row:hover .mat-mdc-cell {
|
||||||
|
background-color: #411ccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.mat-mdc-row:hover .mat-mdc-cell.actions .bi {
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pipelineFilter {
|
||||||
|
display: block;
|
||||||
|
height: 2em;
|
||||||
|
margin-bottom: 1.5em;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.actions a {
|
||||||
|
margin-left: 3em;
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { MatTableDataSource } from '@angular/material/table';
|
||||||
|
import { StudentRegistration } from 'src/app/models/student-registration';
|
||||||
|
import { RegistrationsService } from 'src/app/services/registrations/registrations.service';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'li-registration-list',
|
||||||
|
templateUrl: './registration-list.component.html',
|
||||||
|
styleUrls: ['./registration-list.component.scss'],
|
||||||
|
})
|
||||||
|
export class RegistrationListComponent implements OnInit {
|
||||||
|
public loading: boolean = true;
|
||||||
|
public registrations: StudentRegistration[] = new Array<StudentRegistration>();
|
||||||
|
public dataSource = new MatTableDataSource<StudentRegistration>();
|
||||||
|
|
||||||
|
public constructor(
|
||||||
|
private registrationsService: RegistrationsService
|
||||||
|
) { }
|
||||||
|
|
||||||
|
public ngOnInit() {
|
||||||
|
this.dataSource.filterPredicate = function (record: any, filter: any) {
|
||||||
|
if (filter.length < 3) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const searchIn =
|
||||||
|
record.firstname?.toLocaleLowerCase() +
|
||||||
|
record.lastname?.toLocaleLowerCase() +
|
||||||
|
record.street?.toLocaleLowerCase() +
|
||||||
|
record.email?.toLocaleLowerCase() || '';
|
||||||
|
const searchFor = filter.toLocaleLowerCase() || '';
|
||||||
|
|
||||||
|
return searchIn.indexOf(searchFor) >= 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.getData();
|
||||||
|
}
|
||||||
|
|
||||||
|
public applyFilter(event: Event) {
|
||||||
|
const filterValue = (event.target as HTMLInputElement).value;
|
||||||
|
this.dataSource.filter = filterValue.trim().toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
private getData() {
|
||||||
|
this.registrationsService.get().subscribe({
|
||||||
|
next: registrations => {
|
||||||
|
this.loading = false;
|
||||||
|
this.registrations = registrations;
|
||||||
|
this.dataSource.data = this.registrations;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,11 +17,11 @@ export const MY_DATE_FORMAT= {
|
||||||
};
|
};
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'li-student-register',
|
selector: 'li-registration-wizard',
|
||||||
templateUrl: './student-register.component.html',
|
templateUrl: './registration-wizard.component.html',
|
||||||
styleUrls: ['./student-register.component.scss'],
|
styleUrls: ['./registration-wizard.component.scss'],
|
||||||
})
|
})
|
||||||
export class StudentRegisterComponent implements OnInit {
|
export class RegistrationWizardComponent implements OnInit {
|
||||||
firstFormGroup!: FormGroup;
|
firstFormGroup!: FormGroup;
|
||||||
secondFormGroup!: FormGroup;
|
secondFormGroup!: FormGroup;
|
||||||
thirdFormGroup!: FormGroup;
|
thirdFormGroup!: FormGroup;
|
|
@ -1,24 +0,0 @@
|
||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
|
||||||
|
|
||||||
import { StudentRegisterComponent } from './student-register.component';
|
|
||||||
|
|
||||||
describe('StudentRegisterComponent', () => {
|
|
||||||
let component: StudentRegisterComponent;
|
|
||||||
let fixture: ComponentFixture<StudentRegisterComponent>;
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
await TestBed.configureTestingModule({
|
|
||||||
declarations: [StudentRegisterComponent],
|
|
||||||
}).compileComponents();
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
fixture = TestBed.createComponent(StudentRegisterComponent);
|
|
||||||
component = fixture.componentInstance;
|
|
||||||
fixture.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should create', () => {
|
|
||||||
expect(component).toBeTruthy();
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,4 +1,5 @@
|
||||||
export interface StudentRegistration {
|
export interface StudentRegistration {
|
||||||
|
rid?: number;
|
||||||
firstName: string;
|
firstName: string;
|
||||||
lastName: string;
|
lastName: string;
|
||||||
birthday: Date;
|
birthday: Date;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { HttpClient } from '@angular/common/http';
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { Course } from 'src/app/models/course';
|
import { Course } from 'src/app/models/course';
|
||||||
|
@ -9,12 +9,14 @@ import { environment } from 'src/environments/environment';
|
||||||
})
|
})
|
||||||
export class CoursesService {
|
export class CoursesService {
|
||||||
private readonly serviceName = 'courses';
|
private readonly serviceName = 'courses';
|
||||||
|
private readonly headers = { headers: new HttpHeaders({ "Authorization": environment.apiKey })};
|
||||||
|
|
||||||
constructor(private http: HttpClient) {}
|
constructor(private http: HttpClient) {}
|
||||||
|
|
||||||
public get(): Observable<Course[]> {
|
public get(): Observable<Course[]> {
|
||||||
return this.http.get<Course[]>(
|
return this.http.get<Course[]>(
|
||||||
`${environment.apiUrl}${this.serviceName}/get.php`
|
`${environment.apiUrl}${this.serviceName}/get.php`,
|
||||||
|
this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { formatDate } from '@angular/common';
|
import { formatDate } from '@angular/common';
|
||||||
import { HttpClient, HttpParams } from '@angular/common/http';
|
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { Enrollment } from 'src/app/models/enrollment';
|
import { Enrollment } from 'src/app/models/enrollment';
|
||||||
|
@ -11,6 +11,7 @@ import { environment } from 'src/environments/environment';
|
||||||
})
|
})
|
||||||
export class EnrollService {
|
export class EnrollService {
|
||||||
private readonly serviceName = 'enroll';
|
private readonly serviceName = 'enroll';
|
||||||
|
private readonly headers = { headers: new HttpHeaders({ "Authorization": environment.apiKey })};
|
||||||
|
|
||||||
constructor(private http: HttpClient) {}
|
constructor(private http: HttpClient) {}
|
||||||
|
|
||||||
|
@ -20,7 +21,7 @@ export class EnrollService {
|
||||||
.set('date', formatDate(date, 'yyyy-MM-dd', ''));
|
.set('date', formatDate(date, 'yyyy-MM-dd', ''));
|
||||||
return this.http.get<Enrollment>(
|
return this.http.get<Enrollment>(
|
||||||
`${environment.apiUrl}${this.serviceName}/get.php`,
|
`${environment.apiUrl}${this.serviceName}/get.php`,
|
||||||
{ params: params }
|
{ params: params, headers: this.headers.headers }
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +33,8 @@ export class EnrollService {
|
||||||
|
|
||||||
return this.http.post<boolean>(
|
return this.http.post<boolean>(
|
||||||
`${environment.apiUrl}${this.serviceName}/set.php`,
|
`${environment.apiUrl}${this.serviceName}/set.php`,
|
||||||
payload
|
payload,
|
||||||
|
this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { HttpClient } from "@angular/common/http";
|
import { HttpClient, HttpHeaders } from "@angular/common/http";
|
||||||
import { StudentRegistration } from "../../models/student-registration";
|
import { StudentRegistration } from "../../models/student-registration";
|
||||||
import { Observable } from "rxjs";
|
import { Observable } from "rxjs";
|
||||||
import { environment } from 'src/environments/environment';
|
import { environment } from 'src/environments/environment';
|
||||||
|
@ -9,8 +9,16 @@ import { environment } from 'src/environments/environment';
|
||||||
})
|
})
|
||||||
export class RegistrationsService {
|
export class RegistrationsService {
|
||||||
private readonly serviceName = 'registrations';
|
private readonly serviceName = 'registrations';
|
||||||
|
private readonly headers = { headers: new HttpHeaders({ "Authorization": environment.apiKey })};
|
||||||
|
|
||||||
constructor(private http: HttpClient) { }
|
constructor(private http: HttpClient) { }
|
||||||
|
|
||||||
|
public get(): Observable<StudentRegistration[]> {
|
||||||
|
return this.http.get<StudentRegistration[]>(
|
||||||
|
`${environment.apiUrl}${this.serviceName}/get.php`, this.headers
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public set(registration: StudentRegistration): Observable<void> {
|
public set(registration: StudentRegistration): Observable<void> {
|
||||||
const formatDate = (date: Date): string => date.toISOString().split('T')[0];
|
const formatDate = (date: Date): string => date.toISOString().split('T')[0];
|
||||||
|
|
||||||
|
@ -38,7 +46,8 @@ export class RegistrationsService {
|
||||||
|
|
||||||
|
|
||||||
return this.http.post<void>(`${environment.apiUrl}${this.serviceName}/set.php`,
|
return this.http.post<void>(`${environment.apiUrl}${this.serviceName}/set.php`,
|
||||||
payload
|
payload,
|
||||||
|
this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { HttpClient } from '@angular/common/http';
|
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { Student } from 'src/app/models/student';
|
import { Student } from 'src/app/models/student';
|
||||||
|
@ -9,12 +9,13 @@ import { environment } from 'src/environments/environment';
|
||||||
})
|
})
|
||||||
export class StudentsService {
|
export class StudentsService {
|
||||||
private readonly serviceName = 'students';
|
private readonly serviceName = 'students';
|
||||||
|
private readonly headers = { headers: new HttpHeaders({ "Authorization": environment.apiKey })};
|
||||||
|
|
||||||
constructor(private http: HttpClient) {}
|
constructor(private http: HttpClient) {}
|
||||||
|
|
||||||
public get(): Observable<Student[]> {
|
public get(): Observable<Student[]> {
|
||||||
return this.http.get<Student[]>(
|
return this.http.get<Student[]>(
|
||||||
`${environment.apiUrl}${this.serviceName}/get.php`
|
`${environment.apiUrl}${this.serviceName}/get.php`, this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +27,8 @@ export class StudentsService {
|
||||||
|
|
||||||
return this.http.post<void>(
|
return this.http.post<void>(
|
||||||
`${environment.apiUrl}${this.serviceName}/set.php`,
|
`${environment.apiUrl}${this.serviceName}/set.php`,
|
||||||
payload
|
payload,
|
||||||
|
this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +37,8 @@ export class StudentsService {
|
||||||
|
|
||||||
return this.http.post<void>(
|
return this.http.post<void>(
|
||||||
`${environment.apiUrl}${this.serviceName}/del.php`,
|
`${environment.apiUrl}${this.serviceName}/del.php`,
|
||||||
payload
|
payload,
|
||||||
|
this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import { DatePipe, formatDate } from '@angular/common';
|
import { DatePipe, formatDate } from '@angular/common';
|
||||||
import { HttpClient, HttpParams } from '@angular/common/http';
|
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||||
import { Injectable } from '@angular/core';
|
import { Injectable } from '@angular/core';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { CourseVisit } from 'src/app/models/course-visit';
|
import { CourseVisit } from 'src/app/models/course-visit';
|
||||||
|
@ -11,6 +11,7 @@ import { environment } from 'src/environments/environment';
|
||||||
})
|
})
|
||||||
export class VisitsService {
|
export class VisitsService {
|
||||||
private readonly serviceName = 'visits';
|
private readonly serviceName = 'visits';
|
||||||
|
private readonly headers = { headers: new HttpHeaders({ "Authorization": environment.apiKey })};
|
||||||
|
|
||||||
constructor(private http: HttpClient) {}
|
constructor(private http: HttpClient) {}
|
||||||
|
|
||||||
|
@ -20,7 +21,8 @@ export class VisitsService {
|
||||||
// Not easy to pass "time" over GET
|
// Not easy to pass "time" over GET
|
||||||
return this.http.post<CourseVisit>(
|
return this.http.post<CourseVisit>(
|
||||||
`${environment.apiUrl}${this.serviceName}/get.php`,
|
`${environment.apiUrl}${this.serviceName}/get.php`,
|
||||||
payload
|
payload,
|
||||||
|
this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +31,8 @@ export class VisitsService {
|
||||||
|
|
||||||
return this.http.post<boolean>(
|
return this.http.post<boolean>(
|
||||||
`${environment.apiUrl}${this.serviceName}/set.php`,
|
`${environment.apiUrl}${this.serviceName}/set.php`,
|
||||||
payload
|
payload,
|
||||||
|
this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +42,8 @@ export class VisitsService {
|
||||||
|
|
||||||
return this.http.post<boolean>(
|
return this.http.post<boolean>(
|
||||||
`${environment.apiUrl}${this.serviceName}/del.php`,
|
`${environment.apiUrl}${this.serviceName}/del.php`,
|
||||||
payload
|
payload,
|
||||||
|
this.headers
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
export const environment = {
|
export const environment = {
|
||||||
production: true,
|
production: true,
|
||||||
apiUrl: 'https://li-dance.de/plan/api/',
|
apiUrl: 'https://li-dance.de/plan/api/',
|
||||||
|
apiKey: '754259b6-caf0-4eca-a1f6-812731adae79',
|
||||||
};
|
};
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
export const environment = {
|
export const environment = {
|
||||||
production: false,
|
production: false,
|
||||||
apiUrl: 'https://li-dance.de/plan/api/',
|
apiUrl: 'https://li-dance.de/plan/api/',
|
||||||
|
apiKey: '754259b6-caf0-4eca-a1f6-812731adae79',
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue