Fix all the styling issues in all the files

This commit is contained in:
JP1998 2018-12-09 23:46:21 +01:00
parent 5aa97e162d
commit 9124edc3f2
20 changed files with 798 additions and 815 deletions

View File

@ -16,6 +16,8 @@
} }
}, },
"rules": { "rules": {
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
"indent": [ "indent": [
"error", "error",
4 4

View File

@ -11,11 +11,11 @@ import {
NavLink NavLink
} from 'reactstrap'; } from 'reactstrap';
import { connect } from 'react-redux' import { connect } from 'react-redux';
import React from "react"; import React from 'react';
import { logout } from './api' import { logout } from './api';
export function BigImage(props) { export function BigImage(props) {
return ( return (
@ -77,7 +77,7 @@ function Betabadge() {
class InvisibleLoginLogoutButtons extends React.Component { class InvisibleLoginLogoutButtons extends React.Component {
render() { render() {
const { isSignedIn, username } = this.props const { isSignedIn, username } = this.props;
if(isSignedIn) { if(isSignedIn) {
return ( return (
@ -100,12 +100,12 @@ class InvisibleLoginLogoutButtons extends React.Component {
const mapStateToLoginLogoutButtonProperties = (state) => { const mapStateToLoginLogoutButtonProperties = (state) => {
const { isSignedIn, username } = state.userinfo; const { isSignedIn, username } = state.userinfo;
return { isSignedIn, username } return { isSignedIn, username };
} };
const LoginLogoutButtons = connect( const LoginLogoutButtons = connect(
mapStateToLoginLogoutButtonProperties mapStateToLoginLogoutButtonProperties
)(InvisibleLoginLogoutButtons) )(InvisibleLoginLogoutButtons);
export function Footer() { export function Footer() {
return ( return (

View File

@ -1,5 +1,5 @@
import React from "react"; import React from 'react';
import {Alert, Button, Input, InputGroup, InputGroupAddon} from "reactstrap"; import { Alert, Button, Input, InputGroup, InputGroupAddon } from 'reactstrap';
export default class EditableStringList extends React.Component { export default class EditableStringList extends React.Component {
constructor(props) { constructor(props) {
@ -31,17 +31,14 @@ export default class EditableStringList extends React.Component {
if ((typeof this.state.entries !== 'undefined') && this.state.entries.length > 0) { if ((typeof this.state.entries !== 'undefined') && this.state.entries.length > 0) {
return ( return (
<div className="bg-light p-3 text-secondary font-italic"> <div className="bg-light p-3 text-secondary font-italic">
<StringInput submit={this.add} placeholder={this.props.inputPlaceholder} <StringInput submit={this.add} placeholder={this.props.inputPlaceholder} addButtonText={this.props.addButtonText}/>
addButtonText={this.props.addButtonText}/> {this.state.entries.map((text) => <Item text={text} key={text} removeItem={this.remove}/>)}
{this.state.entries.map((text) => <Item text={text} key={text}
removeItem={this.remove}/>)}
</div> </div>
); );
} else { } else {
return ( return (
<div className="bg-light p-3 text-secondary text-center font-italic"> <div className="bg-light p-3 text-secondary text-center font-italic">
<StringInput submit={this.add} placeholder={this.props.inputPlaceholder} <StringInput submit={this.add} placeholder={this.props.inputPlaceholder} addButtonText={this.props.addButtonText}/>
addButtonText={this.props.addButtonText}/>
{this.props.placeholder} {this.props.placeholder}
</div> </div>
); );
@ -64,8 +61,7 @@ class StringInput extends React.Component {
render() { render() {
return ( return (
<InputGroup className="mb-3"> <InputGroup className="mb-3">
<Input placeholder={this.props.placeholder} type="text" size="255" value={this.state.value} required <Input placeholder={this.props.placeholder} type="text" size="255" value={this.state.value} required onChange={this.handleChange} onKeyPress={(e) => {
onChange={this.handleChange} onKeyPress={(e) => {
if (e.key === 'Enter') { if (e.key === 'Enter') {
this.submit(); this.submit();
return false; return false;
@ -73,10 +69,10 @@ class StringInput extends React.Component {
}}/> }}/>
<InputGroupAddon addonType="append"> <InputGroupAddon addonType="append">
<Button color="success" outline={true} <Button color="success" outline={true}
onClick={(e) => this.submit()}>{this.props.addButtonText}</Button> onClick={() => this.submit()}>{this.props.addButtonText}</Button>
</InputGroupAddon> </InputGroupAddon>
</InputGroup> </InputGroup>
) );
} }
submit() { submit() {

View File

@ -1,4 +1,4 @@
import React from "react"; import React from 'react';
export function BigImage(props) { export function BigImage(props) {
return ( return (

View File

@ -7,5 +7,5 @@ export const errorMessages = {
login_errorunknown : { login_errorunknown : {
en : 'An unknown error prevented a successful login.' en : 'An unknown error prevented a successful login.'
} }
} };

View File

@ -1,20 +1,20 @@
import React from 'react' import React from 'react';
import { initializeStore } from '../api' import { initializeStore } from '../api';
const isServer = typeof window === 'undefined' const isServer = typeof window === 'undefined';
const __NEXT_REDUX_STORE__ = '__NEXT_REDUX_STORE__' const __NEXT_REDUX_STORE__ = '__NEXT_REDUX_STORE__';
function getOrCreateStore (initialState) { function getOrCreateStore (initialState) {
// Always make a new store if server, otherwise state is shared between requests // Always make a new store if server, otherwise state is shared between requests
if (isServer) { if (isServer) {
return initializeStore(initialState) return initializeStore(initialState);
} }
// Create store if unavailable on the client and set it on the window object // Create store if unavailable on the client and set it on the window object
if (!window[__NEXT_REDUX_STORE__]) { if (!window[__NEXT_REDUX_STORE__]) {
window[__NEXT_REDUX_STORE__] = initializeStore(initialState) window[__NEXT_REDUX_STORE__] = initializeStore(initialState);
} }
return window[__NEXT_REDUX_STORE__] return window[__NEXT_REDUX_STORE__];
} }
export default (App) => { export default (App) => {
@ -22,29 +22,29 @@ export default (App) => {
static async getInitialProps (appContext) { static async getInitialProps (appContext) {
// Get or Create the store with `undefined` as initialState // Get or Create the store with `undefined` as initialState
// This allows you to set a custom default initialState // This allows you to set a custom default initialState
const reduxStore = getOrCreateStore() const reduxStore = getOrCreateStore();
// Provide the store to getInitialProps of pages // Provide the store to getInitialProps of pages
appContext.ctx.reduxStore = reduxStore appContext.ctx.reduxStore = reduxStore;
let appProps = {} let appProps = {};
if (typeof App.getInitialProps === 'function') { if (typeof App.getInitialProps === 'function') {
appProps = await App.getInitialProps(appContext) appProps = await App.getInitialProps(appContext);
} }
return { return {
...appProps, ...appProps,
initialReduxState: reduxStore.getState() initialReduxState: reduxStore.getState()
} };
} }
constructor (props) { constructor (props) {
super(props) super(props);
this.reduxStore = getOrCreateStore(props.initialReduxState) this.reduxStore = getOrCreateStore(props.initialReduxState);
} }
render () { render () {
return <App {...this.props} reduxStore={this.reduxStore} /> return <App {...this.props} reduxStore={this.reduxStore} />;
} }
} };
} };

View File

@ -1,3 +1,3 @@
const withCSS = require('@zeit/next-css') const withCSS = require('@zeit/next-css');
module.exports = withCSS() module.exports = withCSS();

View File

@ -1,25 +1,25 @@
import App, {Container} from 'next/app' import App, {Container} from 'next/app';
import React from 'react' import React from 'react';
import { Provider } from 'react-redux' import { Provider } from 'react-redux';
import withReduxStore from '../js/redux/reduxStoreBinder' import withReduxStore from '../js/redux/reduxStoreBinder';
import { verifyCredentials } from '../js/api' import { verifyCredentials } from '../js/api';
class TurniereApp extends App { class TurniereApp extends App {
componentDidMount() { componentDidMount() {
verifyCredentials(); verifyCredentials();
} }
render () { render () {
const {Component, pageProps, reduxStore} = this.props const {Component, pageProps, reduxStore} = this.props;
return ( return (
<Container> <Container>
<Provider store={reduxStore}> <Provider store={reduxStore}>
<Component {...pageProps} /> <Component {...pageProps} />
</Provider> </Provider>
</Container> </Container>
) );
} }
} }
export default withReduxStore(TurniereApp) export default withReduxStore(TurniereApp);

View File

@ -1,15 +1,15 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Footer, TurniereNavigation} from "../js/CommonComponents"; import {Footer, TurniereNavigation} from '../js/CommonComponents';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import {Container} from "reactstrap"; import {Container} from 'reactstrap';
import '../static/everypage.css' import '../static/everypage.css';
import '../static/css/error.css' import '../static/css/error.css';
export default class Error extends React.Component { export default class Error extends React.Component {
static getInitialProps({ res, err }) { static getInitialProps({ res, err }) {
const statusCode = res ? res.statusCode : err ? err.statusCode : 400; const statusCode = res ? res.statusCode : err ? err.statusCode : 400;
return { statusCode } return { statusCode };
} }
render() { render() {
@ -22,7 +22,7 @@ export default class Error extends React.Component {
<ErrorPage statusCode={this.props.statusCode}/> <ErrorPage statusCode={this.props.statusCode}/>
<Footer/> <Footer/>
</div> </div>
) );
} }
} }
@ -44,43 +44,43 @@ function ErrorPage(props){
function ErrorMessage(props) { function ErrorMessage(props) {
switch (props.code) { switch (props.code) {
case 400: case 400:
return (<div className="running-text"> return (<div className="running-text">
<h2>Deine Anfrage ist fehlerhaft.</h2> <h2>Deine Anfrage ist fehlerhaft.</h2>
<p> <p>
Wir empfehlen, die eingegebene Seite über die <a href="/">Startseite</a> zu suchen. Wir empfehlen, die eingegebene Seite über die <a href="/">Startseite</a> zu suchen.
</p> </p>
</div>); </div>);
case 403: case 403:
return (<div className="running-text"> return (<div className="running-text">
<h2>Du bist nicht autorisiert, diese Seite aufzurufen.</h2> <h2>Du bist nicht autorisiert, diese Seite aufzurufen.</h2>
<p> <p>
Bitte stelle sicher, dass Du angemeldet bist und auf dieses Turnier oder dieses Match zugreifen darfst. Bitte stelle sicher, dass Du angemeldet bist und auf dieses Turnier oder dieses Match zugreifen darfst.
</p> </p>
<p> <p>
Wir empfehlen, die eingegebene Seite über die <a href="/">Startseite</a> zu suchen. Wir empfehlen, die eingegebene Seite über die <a href="/">Startseite</a> zu suchen.
</p> </p>
</div>); </div>);
case 404: case 404:
return (<div className="running-text"> return (<div className="running-text">
<h2>Die aufgerufene Seite wurde leider nicht gefunden.</h2> <h2>Die aufgerufene Seite wurde leider nicht gefunden.</h2>
<p> <p>
Entweder hast Du dich vertippt, oder die gesuchte Seite gibt es nicht. Entweder hast Du dich vertippt, oder die gesuchte Seite gibt es nicht.
</p> </p>
<p> <p>
Wir empfehlen, die eingegebene Seite über die <a href="/">Startseite</a> zu suchen. Wir empfehlen, die eingegebene Seite über die <a href="/">Startseite</a> zu suchen.
</p> </p>
</div>); </div>);
case 500: case 500:
return (<div className="running-text"> return (<div className="running-text">
<h2>Diese Seite funktioniert nicht.</h2> <h2>Diese Seite funktioniert nicht.</h2>
<p> <p>
turnie.re kann Deine Anfrage im Moment nicht verarbeiten. Bitte versuche es später erneut. turnie.re kann Deine Anfrage im Moment nicht verarbeiten. Bitte versuche es später erneut.
</p> </p>
</div>); </div>);
default: default:
return (<div> return (<div>
<h2>Ein unbekannter Fehler ist aufgetreten.</h2> <h2>Ein unbekannter Fehler ist aufgetreten.</h2>
</div>); </div>);
} }
} }

View File

@ -1,9 +1,22 @@
import Head from 'next/head' import Head from 'next/head';
import '../static/everypage.css' import '../static/everypage.css';
import {Footer, TurniereNavigation} from "../js/CommonComponents"; import { Footer, TurniereNavigation } from '../js/CommonComponents';
import React from "react"; import React from 'react';
import {Button, Card, CardBody, Container, CustomInput, Fade, Form, FormGroup, Input, Label} from "reactstrap";
import EditableStringList from "../js/EditableStringList"; import {
Button,
Card,
CardBody,
Container,
CustomInput,
Fade,
Form,
FormGroup,
Input,
Label
} from 'reactstrap';
import EditableStringList from '../js/EditableStringList';
export default () => ( export default () => (
<div className="main generic-fullpage-bg"> <div className="main generic-fullpage-bg">
@ -16,7 +29,7 @@ export default () => (
</div> </div>
<Footer/> <Footer/>
</div> </div>
) );
function CreateTournamentCard() { function CreateTournamentCard() {
return ( return (
@ -53,12 +66,12 @@ class CreateTournamentForm extends React.Component {
</FormGroup> </FormGroup>
<FormGroup> <FormGroup>
<CustomInput type="checkbox" id="public" <CustomInput type="checkbox" id="public"
label="Turnier öffentlich anzeigen (schreibgeschützt)"/> label="Turnier öffentlich anzeigen (schreibgeschützt)"/>
<CustomInput type="checkbox" id="mix-teams" label="Teams mischen"/> <CustomInput type="checkbox" id="mix-teams" label="Teams mischen"/>
<CustomInput type="checkbox" id="group-phase" label="Gruppenphase" onClick={this.toggle}/> <CustomInput type="checkbox" id="group-phase" label="Gruppenphase" onClick={this.toggle}/>
</FormGroup> </FormGroup>
<Fade in={this.state.fadeIn} tag="div" className="mt-3" baseClass="d-none" <Fade in={this.state.fadeIn} tag="div" className="mt-3" baseClass="d-none"
baseClassActive="d-block"> baseClassActive="d-block">
<FormGroup> <FormGroup>
<Label for="teams-per-group">Anzahl Teams pro Gruppe</Label> <Label for="teams-per-group">Anzahl Teams pro Gruppe</Label>
<Input type="number" name="teams-per-group" size="255"/> <Input type="number" name="teams-per-group" size="255"/>
@ -72,7 +85,7 @@ class CreateTournamentForm extends React.Component {
</Form> </Form>
<h3 className="custom-font mt-4">Teams</h3> <h3 className="custom-font mt-4">Teams</h3>
<EditableStringList addButtonText="hinzufügen" placeholder="Keine Teams hinzugefügt!" entries={[]} <EditableStringList addButtonText="hinzufügen" placeholder="Keine Teams hinzugefügt!" entries={[]}
onChange={this.teamListUpdate} inputPlaceholder="Teamname"/> onChange={this.teamListUpdate} inputPlaceholder="Teamname"/>
<Button color="success" size="lg" className="w-100 shadow-sm mt-4">Turnier erstellen</Button> <Button color="success" size="lg" className="w-100 shadow-sm mt-4">Turnier erstellen</Button>
</div> </div>
); );

View File

@ -1,9 +1,9 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Col, Container, Row} from 'reactstrap'; import {Col, Container, Row} from 'reactstrap';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js' import { BigImage, Footer, TurniereNavigation } from '../js/CommonComponents.js';
import '../static/everypage.css' import '../static/everypage.css';
function Main() { function Main() {
return ( return (
@ -33,25 +33,28 @@ function GeneralFaq() {
mit allen Leuten teilen kannst, ohne dir Gedanken machen zu müssen, wer gegen wen spielen mit allen Leuten teilen kannst, ohne dir Gedanken machen zu müssen, wer gegen wen spielen
muss. Du trägst ein, wer gewonnen hat, und turnie.re sagt, wer als nächstes spielt. muss. Du trägst ein, wer gewonnen hat, und turnie.re sagt, wer als nächstes spielt.
</p> </p>
</Col><Col sm="4"> </Col>
<h4>Für welche Sportarten ist turnie.re geeignet?</h4> <Col sm="4">
<p> <h4>Für welche Sportarten ist turnie.re geeignet?</h4>
turnie.re ist prinzipiell für jede Sportart geeignet. Die einzige Vor&shy;aus&shy;setzung ist, dass <p>
in jedem Spiel zwei Mannschaften oder Spieler gegeinander antreten und dass derjenige mit turnie.re ist prinzipiell für jede Sportart geeignet. Die einzige Vor&shy;aus&shy;setzung ist, dass
den meisten Punkten gewinnt. in jedem Spiel zwei Mannschaften oder Spieler gegeinander antreten und dass derjenige mit
</p> den meisten Punkten gewinnt.
</Col><Col sm="4"> </p>
<h4>Für welche Anzahl an Teams ist turnie.re geeignet?</h4> </Col>
<p> <Col sm="4">
turnie.re ist unabhängig von der Anzahl der Teams nutzbar. <h4>Für welche Anzahl an Teams ist turnie.re geeignet?</h4>
</p> <p>
</Col><Col sm="4"> turnie.re ist unabhängig von der Anzahl der Teams nutzbar.
<h4>Fallen für die Nutzung von turnie.re Kosten an?</h4> </p>
<p> </Col>
turnie.re ist ein kostenloser Service! Wir erheben keine Kosten und sind nur darauf aus, <Col sm="4">
dein Turnier-Management so einfach wie möglich zu gestalten. <h4>Fallen für die Nutzung von turnie.re Kosten an?</h4>
</p> <p>
</Col> turnie.re ist ein kostenloser Service! Wir erheben keine Kosten und sind nur darauf aus,
dein Turnier-Management so einfach wie möglich zu gestalten.
</p>
</Col>
</Row> </Row>
</div> </div>
); );
@ -69,40 +72,46 @@ function AccountFaq() {
dich als berechtigt verifizieren können, benötigst du einen Acoount, sodass wir dir die dich als berechtigt verifizieren können, benötigst du einen Acoount, sodass wir dir die
entsprechenden Bearbeitungsrechte zuteilen können. entsprechenden Bearbeitungsrechte zuteilen können.
</p> </p>
</Col><Col sm="4"> </Col>
<h4>Welche Daten muss ich bei der Accounterstellung angeben?</h4> <Col sm="4">
<p> <h4>Welche Daten muss ich bei der Accounterstellung angeben?</h4>
Um einen Account anzulegen musst du einen Nutzernamen, eine gültige E-Mailadresse sowie ein <p>
Passwort angeben. Um einen Account anzulegen musst du einen Nutzernamen, eine gültige E-Mailadresse sowie ein
</p> Passwort angeben.
</Col><Col sm="4"> </p>
<h4>Wie werden meine Daten verarbeitet?</h4> </Col>
<p> <Col sm="4">
Deine Daten werden in unserer Datenbank gespeichert. Eine Weitergabe dieser Daten an Dritte <h4>Wie werden meine Daten verarbeitet?</h4>
erfolgt nicht!</p> <p>
<p> Deine Daten werden in unserer Datenbank gespeichert. Eine Weitergabe dieser Daten an Dritte
Zusätlich wird dein Passwort verschlüsselt gespeichert, das bedeutet auch wir kennen dein erfolgt nicht!
Passwort nicht und dein Account wird zuverlässig geschützt. </p>
</p> <p>
</Col><Col sm="4"> Zusätlich wird dein Passwort verschlüsselt gespeichert, das bedeutet auch wir kennen dein
<h4>Wie kann ich meinen Nutzernamen ändern?</h4> Passwort nicht und dein Account wird zuverlässig geschützt.
<p> </p>
Über deinen Nutzernamen, der in der Kopfzeile angezeigt wird, gelangst du auf deine </Col>
Profilseite. Hier kannst du deinen Nutzernamen ändern. <Col sm="4">
</p> <h4>Wie kann ich meinen Nutzernamen ändern?</h4>
</Col><Col sm="4"> <p>
<h4>Wie kann ich meine E-Mailadresse ändern?</h4> Über deinen Nutzernamen, der in der Kopfzeile angezeigt wird, gelangst du auf deine
<p> Profilseite. Hier kannst du deinen Nutzernamen ändern.
Über deinen Nutzernamen, der in der Kopfzeile angezeigt wird, gelangst du auf deine </p>
Profilseite. Hier kannst du deine E-Mailadresse ändern ändern. </Col>
</p> <Col sm="4">
</Col><Col sm="4"> <h4>Wie kann ich meine E-Mailadresse ändern?</h4>
<h4>Wie kann ich mein Passwort ändern?</h4> <p>
<p> Über deinen Nutzernamen, der in der Kopfzeile angezeigt wird, gelangst du auf deine
Auf deiner Profilseite findest du einen "Passwort ändern" Button. Auf der sich dann Profilseite. Hier kannst du deine E-Mailadresse ändern ändern.
öffnenden Seite kannst du dein Passwort ändern. </p>
</p> </Col>
</Col> <Col sm="4">
<h4>Wie kann ich mein Passwort ändern?</h4>
<p>
Auf deiner Profilseite findest du einen "Passwort ändern" Button. Auf der sich dann
öffnenden Seite kannst du dein Passwort ändern.
</p>
</Col>
</Row> </Row>
</div> </div>
); );
@ -121,15 +130,16 @@ function TournamentFaq() {
Über "Turnier erstellen" gelangst du auf die "Turnier erstellen" Seite. Auf dieser kannst du Über "Turnier erstellen" gelangst du auf die "Turnier erstellen" Seite. Auf dieser kannst du
deinem Turnier einen Namen geben und eine (optionale) Beschreibung hinzufügen. Dann kannst deinem Turnier einen Namen geben und eine (optionale) Beschreibung hinzufügen. Dann kannst
du dein Turnier <a href="#public-tournament">öffentlich oder privat</a> erstellen, die Teams du dein Turnier <a href="#public-tournament">öffentlich oder privat</a> erstellen, die Teams
für die Spielpaarungen <a href="#randomize-teams">mischen</a> lassen und eine <a für die Spielpaarungen <a href="#randomize-teams">mischen</a> lassen und eine <a href="#groupstage">Gruppenphase</a>
href="#groupstage">Gruppenphase</a> hinzufügen. Im Feld "Teams" kannst du die hinzufügen. Im Feld "Teams" kannst du die
teilnehmenden <a href="#add-teams">Teams teilnehmenden <a href="#add-teams">Teams
eintragen</a> und hinzufügen. </p> eintragen</a> und hinzufügen. </p>
<p> <p>
Wenn du die Option Gruppenphase aktiviert hast, kannst du zusätzlich noch die Größe der Wenn du die Option Gruppenphase aktiviert hast, kannst du zusätzlich noch die Größe der
Gruppen angeben. Gruppen angeben.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4 id="public-tournament">Was ist der Unterschied zwischen einem öffentlichen und einem <h4 id="public-tournament">Was ist der Unterschied zwischen einem öffentlichen und einem
privaten Turnier?</h4> privaten Turnier?</h4>
<p> <p>
@ -147,7 +157,8 @@ function TournamentFaq() {
Trotzdem bleibt der Turnierersteller der Einzige, der die Turnierinformationen bearbeiten Trotzdem bleibt der Turnierersteller der Einzige, der die Turnierinformationen bearbeiten
und Spielstände eintragen kann. und Spielstände eintragen kann.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4 id="randomize-teams">Was bedeutet "Teams mischen"?</h4> <h4 id="randomize-teams">Was bedeutet "Teams mischen"?</h4>
<p> <p>
Die Spielpaarungen werden anhand der Eingabereihenfolge der Teams erstellt. So spielt z.B. Die Spielpaarungen werden anhand der Eingabereihenfolge der Teams erstellt. So spielt z.B.
@ -157,7 +168,8 @@ function TournamentFaq() {
Wenn du das nicht möchtest kannst du die Option "Teams mischen" aktivieren und die Wenn du das nicht möchtest kannst du die Option "Teams mischen" aktivieren und die
Spielpaarungen werden in einer zufälligen Reihenfolge erstellt. Spielpaarungen werden in einer zufälligen Reihenfolge erstellt.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4 id="groupstage">Was passiert wenn ich die Gruppenphase aktiviere?</h4> <h4 id="groupstage">Was passiert wenn ich die Gruppenphase aktiviere?</h4>
<p> <p>
Grundsätzlich erstellt turnie.re dir einen Spielplan für ein Turnier <strong>ohne</strong> Grundsätzlich erstellt turnie.re dir einen Spielplan für ein Turnier <strong>ohne</strong>
@ -168,7 +180,8 @@ function TournamentFaq() {
<p> <p>
Bitte beachte, dass die Anzahl der Teams durch die Gruppengröße teilbar sein muss. Bitte beachte, dass die Anzahl der Teams durch die Gruppengröße teilbar sein muss.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4 id="add-teams">Wie kann ich Teams hinzufügen?</h4> <h4 id="add-teams">Wie kann ich Teams hinzufügen?</h4>
<p> <p>
Auf der "Turnier erstellen" Seite kannst du im Feld "Teams" deine Teams eintragen. </p> Auf der "Turnier erstellen" Seite kannst du im Feld "Teams" deine Teams eintragen. </p>
@ -177,14 +190,15 @@ function TournamentFaq() {
Button "Team hinzufügen" das Team deinem Turnier hinzufügen. Du kannst aber auch deine Teams Button "Team hinzufügen" das Team deinem Turnier hinzufügen. Du kannst aber auch deine Teams
als eine mit Kommas getrennte Liste eingeben und dann hinzufügen. als eine mit Kommas getrennte Liste eingeben und dann hinzufügen.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Wie starte ich ein Spiel?</h4> <h4>Wie starte ich ein Spiel?</h4>
<p> <p>
Auf der Turnierübersicht Seite gibt es für jede Partie einen "Spiel starten" Button. Über Auf der Turnierübersicht Seite gibt es für jede Partie einen "Spiel starten" Button. Über
diesen kannst du einfach das jeweilige Spiel starten. diesen kannst du einfach das jeweilige Spiel starten.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Wie trage ich einen Spielstand für eine Partie ein?</h4> <h4>Wie trage ich einen Spielstand für eine Partie ein?</h4>
<p> <p>
Auf der Turnierübersicht Seite gibt es für jede Partie einen "Spielstand ändern" Button. Auf der Turnierübersicht Seite gibt es für jede Partie einen "Spielstand ändern" Button.

View File

@ -1,9 +1,9 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Container} from 'reactstrap'; import {Container} from 'reactstrap';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js' import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js';
import '../static/everypage.css' import '../static/everypage.css';
function Main() { function Main() {
return ( return (
@ -14,68 +14,58 @@ function Main() {
} }
function ImprintText(){ function ImprintText(){
return (<Container> return (
<h3> <Container>
Angaben gemäß §5 TMG: <h3>
</h3> Angaben gemäß §5 TMG:
<p> </h3>
Jonas Seydel<br/> <p>
August-Euler-Weg 3<br/> Jonas Seydel<br/>
76133 Karlsruhe<br/> August-Euler-Weg 3<br/>
Germany<br/> 76133 Karlsruhe<br/>
</p> Germany<br/>
</p>
<p> <p>
<strong>Vertreten durch</strong><br/> <strong>Vertreten durch</strong><br/>
Jonas Seydel Jonas Seydel
</p> </p>
<p>
<p> <strong>Kontakt</strong><br/>
<strong>Kontakt</strong><br/> jon@s-seydel.de
jon@s-seydel.de </p>
</p> <h3>Haftungsausschluss</h3>
<h4>Haftung für Inhalte</h4>
<p>
<h3>Haftungsausschluss</h3> Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität
der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene
<h4>Haftung für Inhalte</h4> Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als
Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach
<p> Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung
Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist
der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von
Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.
Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach </p>
Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung <h4>Haftung für Links</h4>
der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist <p>
jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können
entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen. wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der
</p> jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung
auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine
<h4>Haftung für Links</h4> permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung
nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.
<p> </p>
Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können <h4>Urheberrecht</h4>
wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der <p>
jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht.
auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes
permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind
nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen. nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber
</p> erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche
gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen
<h4>Urheberrecht</h4> entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.
</p>
<p> </Container>
Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. );
Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes
bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind
nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber
erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche
gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen
entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.
</p>
</Container>);
} }

View File

@ -1,16 +1,16 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Alert, Button, Card, CardBody} from 'reactstrap'; import { Alert, Button, Card, CardBody } from 'reactstrap';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import { BigImage, Footer, TurniereNavigation } from '../js/CommonComponents.js' import { BigImage, Footer, TurniereNavigation } from '../js/CommonComponents.js';
import '../static/everypage.css' import '../static/everypage.css';
import '../static/css/index.css' import '../static/css/index.css';
import { connect } from 'react-redux' import { connect } from 'react-redux';
function Main() { function Main() {
return ( return (
@ -26,7 +26,6 @@ function Marketing() {
return ( return (
<div className="container marketing my-5"> <div className="container marketing my-5">
<div className="row"> <div className="row">
<div className="col-lg-4"> <div className="col-lg-4">
<h2>Für jede Sportart</h2> <h2>Für jede Sportart</h2>
<p> <p>
@ -88,12 +87,10 @@ function MainBottomSummary() {
<div className="col-lg-6"> <div className="col-lg-6">
<h2>Ich habe einen Turniercode bekommen. Was nun?</h2> <h2>Ich habe einen Turniercode bekommen. Was nun?</h2>
<p> <p>
Der Turniercode führt dich direkt zu einem Turnier. Gebe dafür den Code <a className="text-success" Der Turniercode führt dich direkt zu einem Turnier. Gebe dafür den Code
href="#turniercode-form">oben </a> <a className="text-success" href="#turniercode-form">oben</a> ein, dann wirst du sofort weitergeleitet.
ein, dann wirst du sofort weitergeleitet.
</p> </p>
</div> </div>
</div> </div>
<div className="my-5 text-center"> <div className="my-5 text-center">
<p> <p>

View File

@ -1,4 +1,4 @@
import Head from 'next/head' import Head from 'next/head';
export default () => ( export default () => (
<div> <div>
@ -7,4 +7,4 @@ export default () => (
</Head> </Head>
<p>Turnierliste</p> <p>Turnierliste</p>
</div> </div>
) );

View File

@ -1,10 +1,10 @@
import Head from 'next/head' import Head from 'next/head';
import '../static/everypage.css' import '../static/everypage.css';
import {Footer, TurniereNavigation} from "../js/CommonComponents"; import {Footer, TurniereNavigation} from '../js/CommonComponents';
import React from "react"; import React from 'react';
import {Button, Card, CardBody, Container, Form, FormGroup, Input, Label} from "reactstrap"; import { Button, Card, CardBody, Container, Form, FormGroup, Input, Label } from 'reactstrap';
import { login } from '../js/api' import { login } from '../js/api';
import { connect } from 'react-redux' import { connect } from 'react-redux';
export default () => ( export default () => (
<div className="main generic-fullpage-bg"> <div className="main generic-fullpage-bg">
@ -17,7 +17,7 @@ export default () => (
</div> </div>
<Footer/> <Footer/>
</div> </div>
) );
function Login() { function Login() {
return ( return (
@ -37,7 +37,6 @@ function Login() {
} }
class LoginErrorList extends React.Component { class LoginErrorList extends React.Component {
render() { render() {
const { error, errorMessages } = this.props; const { error, errorMessages } = this.props;
if(error) { if(error) {
@ -64,7 +63,7 @@ class LoginErrorList extends React.Component {
const mapStateToErrorMessages = (state) => { const mapStateToErrorMessages = (state) => {
const { errorMessages, error } = state.userinfo; const { errorMessages, error } = state.userinfo;
return { errorMessages, error } return { errorMessages, error };
}; };
const VisibleLoginErrorList = connect( const VisibleLoginErrorList = connect(

View File

@ -1,9 +1,9 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Container} from 'reactstrap'; import {Container} from 'reactstrap';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js' import { BigImage, Footer, TurniereNavigation } from '../js/CommonComponents.js';
import '../static/everypage.css' import '../static/everypage.css';
function Main() { function Main() {
return ( return (
@ -14,504 +14,477 @@ function Main() {
} }
function PrivacyText(){ function PrivacyText(){
return (<Container> return (
<p> <Container>
Die nachfolgende Datenschutzerklärung gilt für die Nutzung unseres Online-Angebots turnie.re (nachfolgend <p>
Website).<br/> Die nachfolgende Datenschutzerklärung gilt für die Nutzung unseres Online-Angebots turnie.re (nachfolgend
Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Ihrer personenbezogenen Daten Website).<br/>
geschieht Wir messen dem Datenschutz große Bedeutung bei. Die Erhebung und Verarbeitung Ihrer personenbezogenen Daten
unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der geschieht
Datenschutzgrundverordnung unter Beachtung der geltenden datenschutzrechtlichen Vorschriften, insbesondere der
(DSGVO). Datenschutzgrundverordnung
</p> (DSGVO).
</p>
<h3>1 Verantwortlicher</h3>
<p>
Verantwortlicher für die Erhebung, Verarbeitung und Nutzung Ihrer personenbezogenen Daten im Sinne von Art.
4 Nr. 7
DSGVO ist
</p>
<p>
Jonas Seydel<br/>
August-Euler-Weg 3<br/>
76133 Karlsruhe<br/>
Germany<br/>
jon@s-seydel.de<br/>
</p>
<p>
Sofern Sie der Erhebung, Verarbeitung oder Nutzung Ihrer Daten durch uns nach Maßgabe dieser
Datenschutzbestimmungen
insgesamt oder für einzelne Maßnahmen widersprechen wollen, können Sie Ihren Widerspruch an den
Verantwortlichen
richten.<br/>
Sie können diese Datenschutzerklärung jederzeit speichern und ausdrucken.
</p>
<h3>2 Allgemeine Zwecke der Verarbeitung</h3>
<p>
Wir verwenden personenbezogene Daten zum Zweck des Betriebs der Website.
</p>
<h3>3 Welche Daten wir verwenden und warum</h3>
<h4>3.1 Hosting</h4>
<p>
Die von uns in Anspruch genommenen Hosting-Leistungen dienen der Zurverfügungstellung der folgenden
Leistungen:
Infrastruktur- und Plattformdienstleistungen, Rechenkapazität, Speicherplatz und Datenbankdienste,
Sicherheitsleistungen sowie technische Wartungsleistungen, die wir zum Zweck des Betriebs der Website
einsetzen.<br/>
Hierbei verarbeiten wir, bzw. unser Hostinganbieter Bestandsdaten, Kontaktdaten, Inhaltsdaten,
Vertragsdaten,
Nutzungsdaten, Meta- und Kommunikationsdaten von Kunden, Interessenten und Besuchern dieser Website auf
Grundlage
unserer berechtigten Interessen an einer effizienten und sicheren Zurverfügungstellung unserer Website gem.
Art. 6
Abs. 1 S. 1 f) DSGVO i.V.m. Art. 28 DSGVO.
</p>
<h4>3.2 Zugriffsdaten</h4>
<p>
Wir sammeln Informationen über Sie, wenn Sie diese Website nutzen. Wir erfassen automatisch Informationen
über Ihr
Nutzungsverhalten und Ihre Interaktion mit uns und registrieren Daten zu Ihrem Computer oder Mobilgerät. Wir
erheben,
speichern und nutzen Daten über jeden Zugriff auf unsere Website (sogenannte Serverlogfiles). Zu den
Zugriffsdaten
gehören:
</p>
<ul>
<li>Name und URL der abgerufenen Datei</li>
<li>Datum und Uhrzeit des Abrufs</li>
<li>übertragene Datenmenge</li>
<li>Meldung über erfolgreichen Abruf (HTTP response code)</li>
<li>Browsertyp und Browserversion</li>
<li>Betriebssystem</li>
<li>Referer URL (d.h. die zuvor besuchte Seite)</li>
<li>Websites, die vom System des Nutzers über unsere Website aufgerufen werden</li>
<li>Internet-Service-Provider des Nutzers</li>
<li>IP-Adresse und der anfragende Provider</li>
</ul>
<p>
Wir nutzen diese Protokolldaten ohne Zuordnung zu Ihrer Person oder sonstiger Profilerstellung für
statistische
Auswertungen zum Zweck des Betriebs, der Sicherheit und der Optimierung unserer Website, aber auch zur
anonymen
Erfassung der Anzahl der Besucher auf unserer Website (traffic) sowie zum Umfang und zur Art der Nutzung
unserer
Website und Dienste, ebenso zu Abrechnungszwecken, um die Anzahl der von Kooperationspartnern erhaltenen
Clicks zu
messen. Aufgrund dieser Informationen können wir personalisierte und standortbezogene Inhalte zur Verfügung
stellen
und den Datenverkehr analysieren, Fehler suchen und beheben und unsere Dienste verbessern.<br/>
Hierin liegt auch unser berechtigtes Interesse gemäß Art 6 Abs. 1 S. 1 f) DSGVO.<br/>
Wir behalten uns vor, die Protokolldaten nachträglich zu überprüfen, wenn aufgrund konkreter Anhaltspunkte
der
berechtigte Verdacht einer rechtswidrigen Nutzung besteht. IP-Adressen speichern wir für einen begrenzten
Zeitraum in
den Logfiles, wenn dies für Sicherheitszwecke erforderlich oder für die Leistungserbringung oder die
Abrechnung einer
Leistung nötig ist, z. B. wenn Sie eines unserer Angebote nutzen. Nach Abbruch des Vorgangs der Bestellung
oder nach
Zahlungseingang löschen wir die IP-Adresse, wenn diese für Sicherheitszwecke nicht mehr erforderlich ist.
IP-Adressen
speichern wir auch dann, wenn wir den konkreten Verdacht einer Straftat im Zusammenhang mit der Nutzung
unserer
Website haben. Außerdem speichern wir als Teil Ihres Accounts das Datum Ihres letzten Besuchs (z.B. bei
Registrierung,
Login, Klicken von Links etc.).
</p>
<h4>3.3 Cookies</h4>
<p>
Wir verwenden sogenannte Session-Cookies, um unsere Website zu optimieren. Ein Session-Cookie ist eine
kleine
Textdatei, die von den jeweiligen Servern beim Besuch einer Internetseite verschickt und auf Ihrer
Festplatte
zwischengespeichert wird. Diese Datei als solche enthält eine sogenannte Session-ID, mit welcher sich
verschiedene
Anfragen Ihres Browsers der gemeinsamen Sitzung zuordnen lassen. Dadurch kann Ihr Rechner wiedererkannt
werden, wenn
Sie auf unsere Website zurückkehren. Diese Cookies werden gelöscht, nachdem Sie Ihren Browser schließen. Sie
dienen z.
B. dazu, dass Sie die Warenkorbfunktion über mehrere Seiten hinweg nutzen können.<br/>
Wir verwenden in geringem Umfang auch persistente Cookies (ebenfalls kleine Textdateien, die auf Ihrem
Endgerät
abgelegt werden), die auf Ihrem Endgerät verbleiben und es uns ermöglichen, Ihren Browser beim nächsten
Besuch
wiederzuerkennen. Diese Cookies werden auf Ihrer Festplatte gespeichert und löschen sich nach der
vorgegebenen Zeit
von allein. Ihre Lebensdauer beträgt 1 Monat bis 10 Jahre. So können wir Ihnen unser Angebot
nutzerfreundlicher,
effektiver und sicherer präsentieren und Ihnen beispielsweise speziell auf Ihre Interessen abgestimmte
Informationen
auf der Seite anzeigen.<br/>
Unser berechtigtes Interesse an der Nutzung der Cookies gemäß Art 6 Abs. 1 S. 1 f) DSGVO liegt darin, unsere
Website
nutzerfreundlicher, effektiver und sicherer zu machen.<br/>
In den Cookies werden etwa folgende Daten und Informationen gespeichert:
</p>
<ul>
<li>Log-In-Informationen</li>
<li>Spracheinstellungen</li>
<li>eingegebene Suchbegriffe</li>
<li>Informationen über die Anzahl der Aufrufe unserer Website sowie Nutzung einzelner Funktionen unseres
Internetauftritts.
</li>
</ul>
<p>
Bei Aktivierung des Cookies wird diesem eine Identifikationsnummer zugewiesen und eine Zuordnung Ihrer
personenbezogenen Daten zu dieser Identifikationsnummer wird nicht vorgenommen. Ihr Name, Ihre IP-Adresse
oder
ähnliche Daten, die eine Zuordnung des Cookies zu Ihnen ermöglichen würden, werden nicht in den Cookie
eingelegt. Auf
Basis der Cookie-Technologie erhalten wir lediglich pseudonymisierte Informationen, beispielsweise darüber,
welche
Seiten unseres Shops besucht wurden, welche Produkte angesehen wurden, etc.<br/>
Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies vorab informiert werden und im
Einzelfall
entscheiden können, ob Sie die Annahme von Cookies für bestimmte Fälle oder generell ausschließen, oder dass
Cookies
komplett verhindert werden. Dadurch kann die Funktionalität der Website eingeschränkt werden.
</p>
<h4>3.4 Nutzerkonto</h4>
<p>Sie können auf unserer Website ein Nutzerkonto anlegen. Wünschen Sie dies, so benötigen wir die beim Login
abgefragten
personenbezogenen Daten. Beim späteren Einloggen werden nur Ihre Email bzw. Benutzername und das von Ihnen
gewählte
Passwort benötigt.<br/>
Für die Neuregistrierung erheben wir Stammdaten (z. B. Name, Adresse), Kommunikationsdaten (z. B.
E-Mail-Adresse)
sowie Zugangsdaten (Benutzername u. Passwort).<br/>
Sie können ein einmal angelegtes Nutzerkonto jederzeit von uns löschen lassen, ohne dass hierfür andere
als die
Übermittlungskosten nach den Basistarifen entstehen. Eine Mitteilung in Textform an die unter Ziffer 1
genannten
Kontaktdaten (z.B. E-Mail, Fax, Brief) reicht hierfür aus. Wir werden dann Ihre gespeicherten
personenbezogenen Daten
löschen, soweit wir diese nicht noch zur Abwicklung von Bestellungen oder aufgrund gesetzlicher
Aufbewahrungspflichten
speichern müssen.<br/>
Rechtgrundlage für die Verarbeitung dieser Daten ist Ihre Einwilligung gemäß Art. 6 Abs. 1 S. 1 a)
DSGVO.
</p>
<h4>3.5 E-Mail Kontakt</h4>
<p>
Wenn Sie mit uns in Kontakt treten (z. B. per Kontaktformular oder E-Mail), verarbeiten wir Ihre Angaben zur
Bearbeitung der Anfrage sowie für den Fall, dass Anschlussfragen entstehen.
Erfolgt die Datenverarbeitung zur Durchführung vorvertraglicher Maßnahmen, die auf Ihre Anfrage hin
erfolgen, bzw.,
wenn Sie bereits unser Kunde sind, zur Durchführung des Vertrages, ist Rechtsgrundlage für diese
Datenverarbeitung
Art. 6 Abs. 1 S. 1 b) DSGVO.
Weitere personenbezogene Daten verarbeiten wir nur, wenn Sie dazu einwilligen (Art. 6 Abs. 1 S. 1 a) DSGVO)
oder wir
ein berechtigtes Interesse an der Verarbeitung Ihrer Daten haben (Art. 6 Abs. 1 S. 1 f) DSGVO). Ein
berechtigtes
Interesse liegt z. B. darin, auf Ihre E-Mail zu antworten.
</p>
<h3>4 Speicherdauer</h3>
<p>
Sofern nicht spezifisch angegeben speichern wir personenbezogene Daten nur so lange, wie dies zur Erfüllung
der
verfolgten Zwecke notwendig ist.<br/>
In einigen Fällen sieht der Gesetzgeber die Aufbewahrung von personenbezogenen Daten vor, etwa im Steuer-
oder
Handelsrecht. In diesen Fällen werden die Daten von uns lediglich für diese gesetzlichen Zwecke weiter
gespeichert,
aber nicht anderweitig verarbeitet und nach Ablauf der gesetzlichen Aufbewahrungsfrist gelöscht.
</p>
<h3>5 Ihre Rechte als von der Datenverarbeitung Betroffener</h3>
<p>
Nach den anwendbaren Gesetzen haben Sie verschiedene Rechte bezüglich Ihrer personenbezogenen Daten. Möchten
Sie diese
Rechte geltend machen, so richten Sie Ihre Anfrage bitte per E-Mail oder per Post unter eindeutiger
Identifizierung
Ihrer Person an die in Ziffer 1 genannte Adresse.<br/>
Nachfolgend finden Sie eine Übersicht über Ihre Rechte.
</p>
<h4>5.1 Recht auf Bestätigung und Auskunft</h4>
<p>
Sie haben das Recht auf eine übersichtliche Auskunft über die Verarbeitung Ihrer personenbezogenen
Daten.<br/>
Im Einzelnen:<br/>
<h3>1 Verantwortlicher</h3> Sie haben jederzeit das Recht, von uns eine Bestätigung darüber zu erhalten, ob Sie betreffende
<p> personenbezogene Daten
Verantwortlicher für die Erhebung, Verarbeitung und Nutzung Ihrer personenbezogenen Daten im Sinne von Art. verarbeitet werden. Ist dies der Fall, so haben Sie das Recht, von uns eine unentgeltliche Auskunft über die
4 Nr. 7 zu Ihnen
DSGVO ist gespeicherten personenbezogenen Daten nebst einer Kopie dieser Daten zu verlangen. Des Weiteren besteht ein
</p> Recht auf
<p> folgende Informationen:
Jonas Seydel<br/> </p>
August-Euler-Weg 3<br/> <ol>
76133 Karlsruhe<br/> <li>die Verarbeitungszwecke;</li>
Germany<br/> <li>die Kategorien personenbezogener Daten, die verarbeitet werden;</li>
jon@s-seydel.de<br/> <li>die Empfänger oder Kategorien von Empfängern, gegenüber denen die personenbezogenen Daten offengelegt
</p> worden sind
<p> oder noch offengelegt werden, insbesondere bei Empfängern in Drittländern oder bei internationalen
Sofern Sie der Erhebung, Verarbeitung oder Nutzung Ihrer Daten durch uns nach Maßgabe dieser Organisationen;
Datenschutzbestimmungen </li>
insgesamt oder für einzelne Maßnahmen widersprechen wollen, können Sie Ihren Widerspruch an den <li>falls möglich, die geplante Dauer, für die die personenbezogenen Daten gespeichert werden, oder, falls
Verantwortlichen dies nicht
richten.<br/> möglich ist, die Kriterien für die Festlegung dieser Dauer;
Sie können diese Datenschutzerklärung jederzeit speichern und ausdrucken. </li>
</p> <li>das Bestehen eines Rechts auf Berichtigung oder Löschung der Sie betreffenden personenbezogenen Daten
oder auf
Einschränkung der Verarbeitung durch den Verantwortlichen oder eines Widerspruchsrechts gegen diese
Verarbeitung;
</li>
<li>das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde;</li>
<li>wenn die personenbezogenen Daten nicht bei Ihnen erhoben werden, alle verfügbaren Informationen über die
Herkunft
der Daten;
</li>
<li>das Bestehen einer automatisierten Entscheidungsfindung einschließlich Profiling gemäß Art. 22 Abs. 1
und 4 DSGVO
und zumindest in diesen Fällen aussagekräftige Informationen über die involvierte Logik sowie die
Tragweite
und die angestrebten Auswirkungen einer derartigen Verarbeitung für Sie.
</li>
</ol>
<p>
Werden personenbezogene Daten an ein Drittland oder an eine internationale Organisation übermittelt, so
haben Sie das
Recht, über die geeigneten Garantien gemäß Art. 46 DSGVO im Zusammenhang mit der Übermittlung unterrichtet
zu werden.
</p>
<h4>5.2 Recht auf Berichtigung</h4>
<p>
Sie haben das Recht, von uns die Berichtigung und ggf. auch Vervollständigung Sie betreffender
personenbezogener Daten
zu verlangen.<br/>
Im Einzelnen:<br/>
Sie haben das Recht, von uns unverzüglich die Berichtigung Sie betreffender unrichtiger personenbezogener
Daten zu
verlangen. Unter Berücksichtigung der Zwecke der Verarbeitung haben Sie das Recht, die Vervollständigung
unvollständiger personenbezogener Daten auch mittels einer ergänzenden Erklärung zu verlangen.<br/>
</p>
<h4>5.3 Recht auf Löschung ("Recht auf Vergessenwerden")</h4>
<p>
In einer Reihe von Fällen sind wir verpflichtet, Sie betreffende personenbezogene Daten zu löschen.<br/>
Im Einzelnen:<br/>
Sie haben gemäß Art. 17 Abs. 1 DSGVO das Recht, von uns zu verlangen, dass Sie betreffende personenbezogene
Daten
unverzüglich gelöscht werden, und wir sind verpflichtet, personenbezogene Daten unverzüglich zu löschen,
sofern einer
der folgenden Gründe zutrifft:
</p>
<ol>
<li>Die personenbezogenen Daten sind für die Zwecke, für die sie erhoben oder auf sonstige Weise verarbeitet
wurden,
nicht mehr notwendig.
</li>
<li>Sie widerrufen Ihre Einwilligung, auf die sich die Verarbeitung gemäß Art. 6 Abs. 1 S. 1 a) DSGVO oder
Art. 9 Abs.
2 a) DSGVO stützte, und es fehlt an einer anderweitigen Rechtsgrundlage für die Verarbeitung.
</li>
<li>Sie legen gemäß Art. 21 Abs. 1 DSGVO Widerspruch gegen die Verarbeitung ein und es liegen keine
vorrangigen
berechtigten Gründe für die Verarbeitung vor, oder Sie legen gemäß Art. 21 Abs. 2 DSGVO Widerspruch
gegen die
Verarbeitung ein.
</li>
<li>Die personenbezogenen Daten wurden unrechtmäßig verarbeitet.</li>
<li>Die Löschung der personenbezogenen Daten ist zur Erfüllung einer rechtlichen Verpflichtung nach dem
Unionsrecht
oder dem Recht der Mitgliedstaaten erforderlich, dem wir unterliegen.
</li>
<li>Die personenbezogenen Daten wurden in Bezug auf angebotene Dienste der Informationsgesellschaft gemäß
Art. 8 Abs.
1 DSGVO erhoben.
</li>
</ol>
<p>
Haben wir die personenbezogenen Daten öffentlich gemacht und sind wir gemäß Art. 17 Abs. 1 DSGVO zu deren
Löschung
verpflichtet, so treffen wir unter Berücksichtigung der verfügbaren Technologie und der
Implementierungskosten
angemessene Maßnahmen, auch technischer Art, um für die Datenverarbeitung Verantwortliche, die die
personenbezogenen
Daten verarbeiten, darüber zu informieren, dass Sie von ihnen die Löschung aller Links zu diesen
personenbezogenen
Daten oder von Kopien oder Replikationen dieser personenbezogenen Daten verlangt haben.
</p>
<h4>5.4 Recht auf Einschränkung der Verarbeitung</h4>
<p>
In einer Reihe von Fällen sind Sie berechtigt, von uns eine Einschränkung der Verarbeitung Ihrer
personenbezogenen
Daten zu verlangen.<br/>
Im Einzelnen:<br/>
Sie haben das Recht, von uns die Einschränkung der Verarbeitung zu verlangen, wenn eine der folgenden
Voraussetzungen
gegeben ist:
</p>
<ol>
<li>die Richtigkeit der personenbezogenen Daten wird von Ihnen bestritten, und zwar für eine Dauer, die es
uns
ermöglicht, die Richtigkeit der personenbezogenen Daten zu überprüfen,
</li>
<li>die Verarbeitung unrechtmäßig ist und Sie die Löschung der personenbezogenen Daten ablehnten und
stattdessen die
Einschränkung der Nutzung der personenbezogenen Daten verlangt haben;
</li>
<li>wir die personenbezogenen Daten für die Zwecke der Verarbeitung nicht länger benötigen, Sie die Daten
jedoch zur
Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen benötigen, oder
</li>
<li>Sie Widerspruch gegen die Verarbeitung gemäß Art. 21 Abs. 1 DSGVO eingelegt haben, solange noch nicht
feststeht,
ob die berechtigten Gründe unseres Unternehmens gegenüber den Ihren überwiegen.
</li>
</ol>
<h4>5.5 Recht auf Datenübertragbarkeit</h4>
<p>
Sie haben das Recht, Sie betreffende personenbezogene Daten maschinenlesbar zu erhalten, zu übermitteln,
oder von uns
übermitteln zu lasen.<br/>
Im Einzelnen:<br/>
Sie haben das Recht, die Sie betreffenden personenbezogenen Daten, die Sie uns bereitgestellt haben, in
einem
strukturierten, gängigen und maschinenlesbaren Format zu erhalten, und Sie haben das Recht, diese Daten
einem anderen
Verantwortlichen ohne Behinderung durch uns zu übermitteln, sofern
</p>
<ol>
<li>die Verarbeitung auf einer Einwilligung gemäß Art. 6 Abs. 1 S. 1 a) DSGVO oder Art. 9 Abs. 2 a) DSGVO
oder auf
einem Vertrag gemäß Art. 6 Abs. 1 S. 1 b) DSGVO beruht und
</li>
<li>die Verarbeitung mithilfe automatisierter Verfahren erfolgt.</li>
</ol>
<p>
Bei der Ausübung Ihres Rechts auf Datenübertragbarkeit gemäß Absatz 1 haben Sie das Recht, zu erwirken, dass
die
personenbezogenen Daten direkt von uns einem anderen Verantwortlichen übermittelt werden, soweit dies
technisch
machbar ist.
</p>
<h4>5.6 Widerspruchsrecht</h4>
<p>
Sie haben das Recht, auch einer rechtmäßigen Verarbeitung Ihrer personenbezogenen Daten durch uns zu
widersprechen,
wenn sich dies aus Ihrer besonderen Situation begründet und unsere Interessen an der Verarbeitung nicht
überwiegen.<br/>
Im Einzelnen:<br/>
Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit gegen die
Verarbeitung
Sie betreffender personenbezogener Daten, die aufgrund von Art. 6 Abs. 1 S. 1 e) oder f) DSGVO erfolgt,
Widerspruch
einzulegen; dies gilt auch für ein auf diese Bestimmungen gestütztes Profiling. Wir verarbeiten die
personenbezogenen
Daten nicht mehr, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen,
die Ihre
Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder
Verteidigung von Rechtsansprüchen.<br/>
Werden personenbezogene Daten von uns verarbeitet, um Direktwerbung zu betreiben, so haben Sie das Recht,
jederzeit
Widerspruch gegen die Verarbeitung Sie betreffender personenbezogener Daten zum Zwecke derartiger Werbung
einzulegen;
dies gilt auch für das Profiling, soweit es mit solcher Direktwerbung in Verbindung steht.<br/>
Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, gegen die Sie betreffende
Verarbeitung Sie betreffender personenbezogener Daten, die zu wissenschaftlichen oder historischen
Forschungszwecken
oder zu statistischen Zwecken gemäß Art. 89 Abs. 1 DSGVO erfolgt, Widerspruch einzulegen, es sei denn, die
Verarbeitung ist zur Erfüllung einer im öffentlichen Interesse liegenden Aufgabe erforderlich.<br/>
</p>
<h4>5.7 Automatisierte Entscheidungen einschließlich Profiling</h4>
<p>
Sie haben das Recht, nicht einer ausschließlich auf einer automatisierten Verarbeitung einschließlich
Profiling
beruhenden Entscheidung unterworfen zu werden, die Ihnen gegenüber rechtliche Wirkung entfaltet oder Sie in
ähnlicher
Weise erheblich beeinträchtigt.<br/>
Eine automatisierte Entscheidungsfindung auf der Grundlage der erhobenen personenbezogenen Daten findet
nicht statt.
</p>
<h4>5.8 Recht auf Widerruf einer datenschutzrechtlichen Einwilligung</h4>
<p>
Sie haben das Recht, eine Einwilligung zur Verarbeitung personenbezogener Daten jederzeit zu widerrufen.
</p>
<h3>2 Allgemeine Zwecke der Verarbeitung</h3> <h4>5.9 Recht auf Beschwerde bei einer Aufsichtsbehörde</h4>
<p> <p>
Wir verwenden personenbezogene Daten zum Zweck des Betriebs der Website. Sie haben das Recht auf Beschwerde bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat Ihres
</p> Aufenthaltsorts, Ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes, wenn Sie der Ansicht sind,
dass die
Verarbeitung der Sie betreffenden personenbezogenen Daten rechtswidrig ist.
<h3>3 Welche Daten wir verwenden und warum</h3> </p>
<h3>6 Datensicherheit</h3>
<h4>3.1 Hosting</h4> <p>
<p> Wir sind um die Sicherheit Ihrer Daten im Rahmen der geltenden Datenschutzgesetze und technischen
Die von uns in Anspruch genommenen Hosting-Leistungen dienen der Zurverfügungstellung der folgenden Möglichkeiten
Leistungen: maximal bemüht.<br/>
Infrastruktur- und Plattformdienstleistungen, Rechenkapazität, Speicherplatz und Datenbankdienste, Ihre persönlichen Daten werden bei uns verschlüsselt übertragen. Dies gilt für Ihre Bestellungen und auch
Sicherheitsleistungen sowie technische Wartungsleistungen, die wir zum Zweck des Betriebs der Website für das
einsetzen.<br/> Kundenlogin. Wir nutzen das Codierungssystem SSL (Secure Socket Layer), weisen jedoch darauf hin, dass die
Hierbei verarbeiten wir, bzw. unser Hostinganbieter Bestandsdaten, Kontaktdaten, Inhaltsdaten, Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein
Vertragsdaten, lückenloser
Nutzungsdaten, Meta- und Kommunikationsdaten von Kunden, Interessenten und Besuchern dieser Website auf Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.<br/>
Grundlage Zur Sicherung Ihrer Daten unterhalten wir technische und organisatorische Sicherungsmaßnahmen entsprechend
unserer berechtigten Interessen an einer effizienten und sicheren Zurverfügungstellung unserer Website gem. Art. 32
Art. 6 DSGVO, die wir immer wieder dem Stand der Technik anpassen.<br/>
Abs. 1 S. 1 f) DSGVO i.V.m. Art. 28 DSGVO. Wir gewährleisten außerdem nicht, dass unser Angebot zu bestimmten Zeiten zur Verfügung steht; Störungen,
</p> Unterbrechungen oder Ausfälle können nicht ausgeschlossen werden. Die von uns verwendeten Server werden
regelmäßig
<h4>3.2 Zugriffsdaten</h4> sorgfältig gesichert.
<p> </p>
Wir sammeln Informationen über Sie, wenn Sie diese Website nutzen. Wir erfassen automatisch Informationen <h3>7 Weitergabe von Daten an Dritte, keine Datenübertragung ins Nicht-EU-Ausland</h3>
über Ihr <p>
Nutzungsverhalten und Ihre Interaktion mit uns und registrieren Daten zu Ihrem Computer oder Mobilgerät. Wir Grundsätzlich verwenden wir Ihre personenbezogenen Daten nur innerhalb unseres Unternehmens.<br/>
erheben, Wenn und soweit wir Dritte im Rahmen der Erfüllung von Verträgen einschalten (etwa Logistik-Dienstleister),
speichern und nutzen Daten über jeden Zugriff auf unsere Website (sogenannte Serverlogfiles). Zu den erhalten
Zugriffsdaten diese personenbezogene Daten nur in dem Umfang, in welchem die Übermittlung für die entsprechende Leistung
gehören: erforderlich ist.<br/>
</p> Für den Fall, dass wir bestimmte Teile der Datenverarbeitung auslagern (Auftragsverarbeitung),
<ul> verpflichten wir
<li>Name und URL der abgerufenen Datei</li> Auftragsverarbeiter vertraglich dazu, personenbezogene Daten nur im Einklang mit den Anforderungen der
<li>Datum und Uhrzeit des Abrufs</li> Datenschutzgesetze zu verwenden und den Schutz der Rechte der betroffenen Person zu gewährleisten.<br/>
<li>übertragene Datenmenge</li> Eine Datenübertragung an Stellen oder Personen außerhalb der EU außerhalb des in dieser Erklärung in Ziffer
<li>Meldung über erfolgreichen Abruf (HTTP response code)</li> 4
<li>Browsertyp und Browserversion</li> genannten Falls findet nicht statt und ist nicht geplant.
<li>Betriebssystem</li> </p>
<li>Referer URL (d.h. die zuvor besuchte Seite)</li> <h3>8 Datenschutzbeauftragter</h3>
<li>Websites, die vom System des Nutzers über unsere Website aufgerufen werden</li> <p>
<li>Internet-Service-Provider des Nutzers</li> Sollten Sie noch Fragen oder Bedenken zum Datenschutz haben, so wenden Sie sich bitte an unseren
<li>IP-Adresse und der anfragende Provider</li> Datenschutzbeauftragten:
</ul> </p>
<p> <p>
Wir nutzen diese Protokolldaten ohne Zuordnung zu Ihrer Person oder sonstiger Profilerstellung für Jonas Seydel<br/>
statistische August-Euler-Weg 3<br/>
Auswertungen zum Zweck des Betriebs, der Sicherheit und der Optimierung unserer Website, aber auch zur 76133 Karlsruhe<br/>
anonymen Germany<br/>
Erfassung der Anzahl der Besucher auf unserer Website (traffic) sowie zum Umfang und zur Art der Nutzung jon@s-seydel.de
unserer </p>
Website und Dienste, ebenso zu Abrechnungszwecken, um die Anzahl der von Kooperationspartnern erhaltenen </Container>
Clicks zu );
messen. Aufgrund dieser Informationen können wir personalisierte und standortbezogene Inhalte zur Verfügung
stellen
und den Datenverkehr analysieren, Fehler suchen und beheben und unsere Dienste verbessern.<br/>
Hierin liegt auch unser berechtigtes Interesse gemäß Art 6 Abs. 1 S. 1 f) DSGVO.<br/>
Wir behalten uns vor, die Protokolldaten nachträglich zu überprüfen, wenn aufgrund konkreter Anhaltspunkte
der
berechtigte Verdacht einer rechtswidrigen Nutzung besteht. IP-Adressen speichern wir für einen begrenzten
Zeitraum in
den Logfiles, wenn dies für Sicherheitszwecke erforderlich oder für die Leistungserbringung oder die
Abrechnung einer
Leistung nötig ist, z. B. wenn Sie eines unserer Angebote nutzen. Nach Abbruch des Vorgangs der Bestellung
oder nach
Zahlungseingang löschen wir die IP-Adresse, wenn diese für Sicherheitszwecke nicht mehr erforderlich ist.
IP-Adressen
speichern wir auch dann, wenn wir den konkreten Verdacht einer Straftat im Zusammenhang mit der Nutzung
unserer
Website haben. Außerdem speichern wir als Teil Ihres Accounts das Datum Ihres letzten Besuchs (z.B. bei
Registrierung,
Login, Klicken von Links etc.).
</p>
<h4>3.3 Cookies</h4>
<p>
Wir verwenden sogenannte Session-Cookies, um unsere Website zu optimieren. Ein Session-Cookie ist eine
kleine
Textdatei, die von den jeweiligen Servern beim Besuch einer Internetseite verschickt und auf Ihrer
Festplatte
zwischengespeichert wird. Diese Datei als solche enthält eine sogenannte Session-ID, mit welcher sich
verschiedene
Anfragen Ihres Browsers der gemeinsamen Sitzung zuordnen lassen. Dadurch kann Ihr Rechner wiedererkannt
werden, wenn
Sie auf unsere Website zurückkehren. Diese Cookies werden gelöscht, nachdem Sie Ihren Browser schließen. Sie
dienen z.
B. dazu, dass Sie die Warenkorbfunktion über mehrere Seiten hinweg nutzen können.<br/>
Wir verwenden in geringem Umfang auch persistente Cookies (ebenfalls kleine Textdateien, die auf Ihrem
Endgerät
abgelegt werden), die auf Ihrem Endgerät verbleiben und es uns ermöglichen, Ihren Browser beim nächsten
Besuch
wiederzuerkennen. Diese Cookies werden auf Ihrer Festplatte gespeichert und löschen sich nach der
vorgegebenen Zeit
von allein. Ihre Lebensdauer beträgt 1 Monat bis 10 Jahre. So können wir Ihnen unser Angebot
nutzerfreundlicher,
effektiver und sicherer präsentieren und Ihnen beispielsweise speziell auf Ihre Interessen abgestimmte
Informationen
auf der Seite anzeigen.<br/>
Unser berechtigtes Interesse an der Nutzung der Cookies gemäß Art 6 Abs. 1 S. 1 f) DSGVO liegt darin, unsere
Website
nutzerfreundlicher, effektiver und sicherer zu machen.<br/>
In den Cookies werden etwa folgende Daten und Informationen gespeichert:
</p>
<ul>
<li>Log-In-Informationen</li>
<li>Spracheinstellungen</li>
<li>eingegebene Suchbegriffe</li>
<li>Informationen über die Anzahl der Aufrufe unserer Website sowie Nutzung einzelner Funktionen unseres
Internetauftritts.
</li>
</ul>
<p>
Bei Aktivierung des Cookies wird diesem eine Identifikationsnummer zugewiesen und eine Zuordnung Ihrer
personenbezogenen Daten zu dieser Identifikationsnummer wird nicht vorgenommen. Ihr Name, Ihre IP-Adresse
oder
ähnliche Daten, die eine Zuordnung des Cookies zu Ihnen ermöglichen würden, werden nicht in den Cookie
eingelegt. Auf
Basis der Cookie-Technologie erhalten wir lediglich pseudonymisierte Informationen, beispielsweise darüber,
welche
Seiten unseres Shops besucht wurden, welche Produkte angesehen wurden, etc.<br/>
Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies vorab informiert werden und im
Einzelfall
entscheiden können, ob Sie die Annahme von Cookies für bestimmte Fälle oder generell ausschließen, oder dass
Cookies
komplett verhindert werden. Dadurch kann die Funktionalität der Website eingeschränkt werden.
</p>
<h4>3.4 Nutzerkonto</h4>
<p>Sie können auf unserer Website ein Nutzerkonto anlegen. Wünschen Sie dies, so benötigen wir die beim Login
abgefragten
personenbezogenen Daten. Beim späteren Einloggen werden nur Ihre Email bzw. Benutzername und das von Ihnen
gewählte
Passwort benötigt.<br/>
Für die Neuregistrierung erheben wir Stammdaten (z. B. Name, Adresse), Kommunikationsdaten (z. B.
E-Mail-Adresse)
sowie Zugangsdaten (Benutzername u. Passwort).<br/>
Sie können ein einmal angelegtes Nutzerkonto jederzeit von uns löschen lassen, ohne dass hierfür andere
als die
Übermittlungskosten nach den Basistarifen entstehen. Eine Mitteilung in Textform an die unter Ziffer 1
genannten
Kontaktdaten (z.B. E-Mail, Fax, Brief) reicht hierfür aus. Wir werden dann Ihre gespeicherten
personenbezogenen Daten
löschen, soweit wir diese nicht noch zur Abwicklung von Bestellungen oder aufgrund gesetzlicher
Aufbewahrungspflichten
speichern müssen.<br/>
Rechtgrundlage für die Verarbeitung dieser Daten ist Ihre Einwilligung gemäß Art. 6 Abs. 1 S. 1 a)
DSGVO.
</p>
<h4>3.5 E-Mail Kontakt</h4>
<p>
Wenn Sie mit uns in Kontakt treten (z. B. per Kontaktformular oder E-Mail), verarbeiten wir Ihre Angaben zur
Bearbeitung der Anfrage sowie für den Fall, dass Anschlussfragen entstehen.
Erfolgt die Datenverarbeitung zur Durchführung vorvertraglicher Maßnahmen, die auf Ihre Anfrage hin
erfolgen, bzw.,
wenn Sie bereits unser Kunde sind, zur Durchführung des Vertrages, ist Rechtsgrundlage für diese
Datenverarbeitung
Art. 6 Abs. 1 S. 1 b) DSGVO.
Weitere personenbezogene Daten verarbeiten wir nur, wenn Sie dazu einwilligen (Art. 6 Abs. 1 S. 1 a) DSGVO)
oder wir
ein berechtigtes Interesse an der Verarbeitung Ihrer Daten haben (Art. 6 Abs. 1 S. 1 f) DSGVO). Ein
berechtigtes
Interesse liegt z. B. darin, auf Ihre E-Mail zu antworten.
</p>
<h3>4 Speicherdauer</h3>
<p>
Sofern nicht spezifisch angegeben speichern wir personenbezogene Daten nur so lange, wie dies zur Erfüllung
der
verfolgten Zwecke notwendig ist.<br/>
In einigen Fällen sieht der Gesetzgeber die Aufbewahrung von personenbezogenen Daten vor, etwa im Steuer-
oder
Handelsrecht. In diesen Fällen werden die Daten von uns lediglich für diese gesetzlichen Zwecke weiter
gespeichert,
aber nicht anderweitig verarbeitet und nach Ablauf der gesetzlichen Aufbewahrungsfrist gelöscht.
</p>
<h3>5 Ihre Rechte als von der Datenverarbeitung Betroffener</h3>
<p>
Nach den anwendbaren Gesetzen haben Sie verschiedene Rechte bezüglich Ihrer personenbezogenen Daten. Möchten
Sie diese
Rechte geltend machen, so richten Sie Ihre Anfrage bitte per E-Mail oder per Post unter eindeutiger
Identifizierung
Ihrer Person an die in Ziffer 1 genannte Adresse.<br/>
Nachfolgend finden Sie eine Übersicht über Ihre Rechte.
</p>
<h4>5.1 Recht auf Bestätigung und Auskunft</h4>
<p>
Sie haben das Recht auf eine übersichtliche Auskunft über die Verarbeitung Ihrer personenbezogenen
Daten.<br/>
Im Einzelnen:<br/>
Sie haben jederzeit das Recht, von uns eine Bestätigung darüber zu erhalten, ob Sie betreffende
personenbezogene Daten
verarbeitet werden. Ist dies der Fall, so haben Sie das Recht, von uns eine unentgeltliche Auskunft über die
zu Ihnen
gespeicherten personenbezogenen Daten nebst einer Kopie dieser Daten zu verlangen. Des Weiteren besteht ein
Recht auf
folgende Informationen:
</p>
<ol>
<li>die Verarbeitungszwecke;</li>
<li>die Kategorien personenbezogener Daten, die verarbeitet werden;</li>
<li>die Empfänger oder Kategorien von Empfängern, gegenüber denen die personenbezogenen Daten offengelegt
worden sind
oder noch offengelegt werden, insbesondere bei Empfängern in Drittländern oder bei internationalen
Organisationen;
</li>
<li>falls möglich, die geplante Dauer, für die die personenbezogenen Daten gespeichert werden, oder, falls
dies nicht
möglich ist, die Kriterien für die Festlegung dieser Dauer;
</li>
<li>das Bestehen eines Rechts auf Berichtigung oder Löschung der Sie betreffenden personenbezogenen Daten
oder auf
Einschränkung der Verarbeitung durch den Verantwortlichen oder eines Widerspruchsrechts gegen diese
Verarbeitung;
</li>
<li>das Bestehen eines Beschwerderechts bei einer Aufsichtsbehörde;</li>
<li>wenn die personenbezogenen Daten nicht bei Ihnen erhoben werden, alle verfügbaren Informationen über die
Herkunft
der Daten;
</li>
<li>das Bestehen einer automatisierten Entscheidungsfindung einschließlich Profiling gemäß Art. 22 Abs. 1
und 4 DSGVO
und zumindest in diesen Fällen aussagekräftige Informationen über die involvierte Logik sowie die
Tragweite
und die angestrebten Auswirkungen einer derartigen Verarbeitung für Sie.
</li>
</ol>
<p>
Werden personenbezogene Daten an ein Drittland oder an eine internationale Organisation übermittelt, so
haben Sie das
Recht, über die geeigneten Garantien gemäß Art. 46 DSGVO im Zusammenhang mit der Übermittlung unterrichtet
zu werden.
</p>
<h4>5.2 Recht auf Berichtigung</h4>
<p>
Sie haben das Recht, von uns die Berichtigung und ggf. auch Vervollständigung Sie betreffender
personenbezogener Daten
zu verlangen.<br/>
Im Einzelnen:<br/>
Sie haben das Recht, von uns unverzüglich die Berichtigung Sie betreffender unrichtiger personenbezogener
Daten zu
verlangen. Unter Berücksichtigung der Zwecke der Verarbeitung haben Sie das Recht, die Vervollständigung
unvollständiger personenbezogener Daten auch mittels einer ergänzenden Erklärung zu verlangen.<br/>
</p>
<h4>5.3 Recht auf Löschung ("Recht auf Vergessenwerden")</h4>
<p>
In einer Reihe von Fällen sind wir verpflichtet, Sie betreffende personenbezogene Daten zu löschen.<br/>
Im Einzelnen:<br/>
Sie haben gemäß Art. 17 Abs. 1 DSGVO das Recht, von uns zu verlangen, dass Sie betreffende personenbezogene
Daten
unverzüglich gelöscht werden, und wir sind verpflichtet, personenbezogene Daten unverzüglich zu löschen,
sofern einer
der folgenden Gründe zutrifft:
</p>
<ol>
<li>Die personenbezogenen Daten sind für die Zwecke, für die sie erhoben oder auf sonstige Weise verarbeitet
wurden,
nicht mehr notwendig.
</li>
<li>Sie widerrufen Ihre Einwilligung, auf die sich die Verarbeitung gemäß Art. 6 Abs. 1 S. 1 a) DSGVO oder
Art. 9 Abs.
2 a) DSGVO stützte, und es fehlt an einer anderweitigen Rechtsgrundlage für die Verarbeitung.
</li>
<li>Sie legen gemäß Art. 21 Abs. 1 DSGVO Widerspruch gegen die Verarbeitung ein und es liegen keine
vorrangigen
berechtigten Gründe für die Verarbeitung vor, oder Sie legen gemäß Art. 21 Abs. 2 DSGVO Widerspruch
gegen die
Verarbeitung ein.
</li>
<li>Die personenbezogenen Daten wurden unrechtmäßig verarbeitet.</li>
<li>Die Löschung der personenbezogenen Daten ist zur Erfüllung einer rechtlichen Verpflichtung nach dem
Unionsrecht
oder dem Recht der Mitgliedstaaten erforderlich, dem wir unterliegen.
</li>
<li>Die personenbezogenen Daten wurden in Bezug auf angebotene Dienste der Informationsgesellschaft gemäß
Art. 8 Abs.
1 DSGVO erhoben.
</li>
</ol>
<p>
Haben wir die personenbezogenen Daten öffentlich gemacht und sind wir gemäß Art. 17 Abs. 1 DSGVO zu deren
Löschung
verpflichtet, so treffen wir unter Berücksichtigung der verfügbaren Technologie und der
Implementierungskosten
angemessene Maßnahmen, auch technischer Art, um für die Datenverarbeitung Verantwortliche, die die
personenbezogenen
Daten verarbeiten, darüber zu informieren, dass Sie von ihnen die Löschung aller Links zu diesen
personenbezogenen
Daten oder von Kopien oder Replikationen dieser personenbezogenen Daten verlangt haben.
</p>
<h4>5.4 Recht auf Einschränkung der Verarbeitung</h4>
<p>
In einer Reihe von Fällen sind Sie berechtigt, von uns eine Einschränkung der Verarbeitung Ihrer
personenbezogenen
Daten zu verlangen.<br/>
Im Einzelnen:<br/>
Sie haben das Recht, von uns die Einschränkung der Verarbeitung zu verlangen, wenn eine der folgenden
Voraussetzungen
gegeben ist:
</p>
<ol>
<li>die Richtigkeit der personenbezogenen Daten wird von Ihnen bestritten, und zwar für eine Dauer, die es
uns
ermöglicht, die Richtigkeit der personenbezogenen Daten zu überprüfen,
</li>
<li>die Verarbeitung unrechtmäßig ist und Sie die Löschung der personenbezogenen Daten ablehnten und
stattdessen die
Einschränkung der Nutzung der personenbezogenen Daten verlangt haben;
</li>
<li>wir die personenbezogenen Daten für die Zwecke der Verarbeitung nicht länger benötigen, Sie die Daten
jedoch zur
Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen benötigen, oder
</li>
<li>Sie Widerspruch gegen die Verarbeitung gemäß Art. 21 Abs. 1 DSGVO eingelegt haben, solange noch nicht
feststeht,
ob die berechtigten Gründe unseres Unternehmens gegenüber den Ihren überwiegen.
</li>
</ol>
<h4>5.5 Recht auf Datenübertragbarkeit</h4>
<p>
Sie haben das Recht, Sie betreffende personenbezogene Daten maschinenlesbar zu erhalten, zu übermitteln,
oder von uns
übermitteln zu lasen.<br/>
Im Einzelnen:<br/>
Sie haben das Recht, die Sie betreffenden personenbezogenen Daten, die Sie uns bereitgestellt haben, in
einem
strukturierten, gängigen und maschinenlesbaren Format zu erhalten, und Sie haben das Recht, diese Daten
einem anderen
Verantwortlichen ohne Behinderung durch uns zu übermitteln, sofern
</p>
<ol>
<li>die Verarbeitung auf einer Einwilligung gemäß Art. 6 Abs. 1 S. 1 a) DSGVO oder Art. 9 Abs. 2 a) DSGVO
oder auf
einem Vertrag gemäß Art. 6 Abs. 1 S. 1 b) DSGVO beruht und
</li>
<li>die Verarbeitung mithilfe automatisierter Verfahren erfolgt.</li>
</ol>
<p>
Bei der Ausübung Ihres Rechts auf Datenübertragbarkeit gemäß Absatz 1 haben Sie das Recht, zu erwirken, dass
die
personenbezogenen Daten direkt von uns einem anderen Verantwortlichen übermittelt werden, soweit dies
technisch
machbar ist.
</p>
<h4>5.6 Widerspruchsrecht</h4>
<p>
Sie haben das Recht, auch einer rechtmäßigen Verarbeitung Ihrer personenbezogenen Daten durch uns zu
widersprechen,
wenn sich dies aus Ihrer besonderen Situation begründet und unsere Interessen an der Verarbeitung nicht
überwiegen.<br/>
Im Einzelnen:<br/>
Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit gegen die
Verarbeitung
Sie betreffender personenbezogener Daten, die aufgrund von Art. 6 Abs. 1 S. 1 e) oder f) DSGVO erfolgt,
Widerspruch
einzulegen; dies gilt auch für ein auf diese Bestimmungen gestütztes Profiling. Wir verarbeiten die
personenbezogenen
Daten nicht mehr, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen,
die Ihre
Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder
Verteidigung von Rechtsansprüchen.<br/>
Werden personenbezogene Daten von uns verarbeitet, um Direktwerbung zu betreiben, so haben Sie das Recht,
jederzeit
Widerspruch gegen die Verarbeitung Sie betreffender personenbezogener Daten zum Zwecke derartiger Werbung
einzulegen;
dies gilt auch für das Profiling, soweit es mit solcher Direktwerbung in Verbindung steht.<br/>
Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, gegen die Sie betreffende
Verarbeitung Sie betreffender personenbezogener Daten, die zu wissenschaftlichen oder historischen
Forschungszwecken
oder zu statistischen Zwecken gemäß Art. 89 Abs. 1 DSGVO erfolgt, Widerspruch einzulegen, es sei denn, die
Verarbeitung ist zur Erfüllung einer im öffentlichen Interesse liegenden Aufgabe erforderlich.<br/>
</p>
<h4>5.7 Automatisierte Entscheidungen einschließlich Profiling</h4>
<p>
Sie haben das Recht, nicht einer ausschließlich auf einer automatisierten Verarbeitung einschließlich
Profiling
beruhenden Entscheidung unterworfen zu werden, die Ihnen gegenüber rechtliche Wirkung entfaltet oder Sie in
ähnlicher
Weise erheblich beeinträchtigt.<br/>
Eine automatisierte Entscheidungsfindung auf der Grundlage der erhobenen personenbezogenen Daten findet
nicht statt.
</p>
<h4>5.8 Recht auf Widerruf einer datenschutzrechtlichen Einwilligung</h4>
<p>
Sie haben das Recht, eine Einwilligung zur Verarbeitung personenbezogener Daten jederzeit zu widerrufen.
</p>
<h4>5.9 Recht auf Beschwerde bei einer Aufsichtsbehörde</h4>
<p>
Sie haben das Recht auf Beschwerde bei einer Aufsichtsbehörde, insbesondere in dem Mitgliedstaat Ihres
Aufenthaltsorts, Ihres Arbeitsplatzes oder des Orts des mutmaßlichen Verstoßes, wenn Sie der Ansicht sind,
dass die
Verarbeitung der Sie betreffenden personenbezogenen Daten rechtswidrig ist.
</p>
<h3>6 Datensicherheit</h3>
<p>
Wir sind um die Sicherheit Ihrer Daten im Rahmen der geltenden Datenschutzgesetze und technischen
Möglichkeiten
maximal bemüht.<br/>
Ihre persönlichen Daten werden bei uns verschlüsselt übertragen. Dies gilt für Ihre Bestellungen und auch
für das
Kundenlogin. Wir nutzen das Codierungssystem SSL (Secure Socket Layer), weisen jedoch darauf hin, dass die
Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein
lückenloser
Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.<br/>
Zur Sicherung Ihrer Daten unterhalten wir technische und organisatorische Sicherungsmaßnahmen entsprechend
Art. 32
DSGVO, die wir immer wieder dem Stand der Technik anpassen.<br/>
Wir gewährleisten außerdem nicht, dass unser Angebot zu bestimmten Zeiten zur Verfügung steht; Störungen,
Unterbrechungen oder Ausfälle können nicht ausgeschlossen werden. Die von uns verwendeten Server werden
regelmäßig
sorgfältig gesichert.
</p>
<h3>7 Weitergabe von Daten an Dritte, keine Datenübertragung ins Nicht-EU-Ausland</h3>
<p>
Grundsätzlich verwenden wir Ihre personenbezogenen Daten nur innerhalb unseres Unternehmens.<br/>
Wenn und soweit wir Dritte im Rahmen der Erfüllung von Verträgen einschalten (etwa Logistik-Dienstleister),
erhalten
diese personenbezogene Daten nur in dem Umfang, in welchem die Übermittlung für die entsprechende Leistung
erforderlich ist.<br/>
Für den Fall, dass wir bestimmte Teile der Datenverarbeitung auslagern (Auftragsverarbeitung),
verpflichten wir
Auftragsverarbeiter vertraglich dazu, personenbezogene Daten nur im Einklang mit den Anforderungen der
Datenschutzgesetze zu verwenden und den Schutz der Rechte der betroffenen Person zu gewährleisten.<br/>
Eine Datenübertragung an Stellen oder Personen außerhalb der EU außerhalb des in dieser Erklärung in Ziffer
4
genannten Falls findet nicht statt und ist nicht geplant.
</p>
<h3>8 Datenschutzbeauftragter</h3>
<p>
Sollten Sie noch Fragen oder Bedenken zum Datenschutz haben, so wenden Sie sich bitte an unseren
Datenschutzbeauftragten:
</p>
<p>
Jonas Seydel<br/>
August-Euler-Weg 3<br/>
76133 Karlsruhe<br/>
Germany<br/>
jon@s-seydel.de
</p>
</Container>);
} }

View File

@ -1,10 +1,10 @@
import Head from 'next/head' import Head from 'next/head';
import '../static/everypage.css' import '../static/everypage.css';
import {Footer, TurniereNavigation} from "../js/CommonComponents"; import {Footer, TurniereNavigation} from '../js/CommonComponents';
import React from "react"; import React from 'react';
import {Button, Card, CardBody, Container, Form, FormGroup, FormText, Input, Label} from "reactstrap"; import { Button, Card, CardBody, Container, Form, FormGroup, FormText, Input, Label } from 'reactstrap';
import { register } from '../js/api' import { register } from '../js/api';
import { connect } from 'react-redux' import { connect } from 'react-redux';
export default () => ( export default () => (
<div className="main generic-fullpage-bg"> <div className="main generic-fullpage-bg">
@ -18,7 +18,7 @@ export default () => (
</div> </div>
<Footer/> <Footer/>
</div> </div>
) );
function Register() { function Register() {
return ( return (
@ -37,7 +37,6 @@ function Register() {
} }
class RegisterErrorList extends React.Component { class RegisterErrorList extends React.Component {
render() { render() {
const { error, errorMessages } = this.props; const { error, errorMessages } = this.props;
if(error) { if(error) {
@ -64,7 +63,7 @@ class RegisterErrorList extends React.Component {
const mapStateToErrorMessages = (state) => { const mapStateToErrorMessages = (state) => {
const { errorMessages, error } = state.userinfo; const { errorMessages, error } = state.userinfo;
return { errorMessages, error } return { errorMessages, error };
}; };
const VisibleRegisterErrorList = connect( const VisibleRegisterErrorList = connect(

View File

@ -1,9 +1,10 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react';
class FullscreenTournamentPage extends React.Component { class FullscreenTournamentPage extends React.Component {
static async getInitialProps({query}) { static async getInitialProps({query}) {
return {query} return {query};
} }
render() { render() {
@ -19,4 +20,4 @@ class FullscreenTournamentPage extends React.Component {
} }
} }
export default FullscreenTournamentPage export default FullscreenTournamentPage;

View File

@ -1,10 +1,11 @@
import Head from 'next/head' import Head from 'next/head';
import "../style.css" import React from 'react';
import '../style.css';
class TournamentPage extends React.Component { class TournamentPage extends React.Component {
static async getInitialProps({query}) { static async getInitialProps({query}) {
return {query} return {query};
} }
render() { render() {
@ -20,4 +21,4 @@ class TournamentPage extends React.Component {
} }
} }
export default TournamentPage export default TournamentPage;

View File

@ -1,36 +1,34 @@
const express = require('express') const express = require('express');
const next = require('next') const next = require('next');
const dev = process.env.NODE_ENV !== 'production' const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev }) const app = next({ dev });
const handle = app.getRequestHandler() const handle = app.getRequestHandler();
app.prepare() app.prepare()
.then(() => { .then(() => {
const server = express() const server = express();
server.get('/t/:code', (req, res) => { server.get('/t/:code', (req, res) => {
const actualPage = '/tournament' const actualPage = '/tournament';
const queryParam = { code: req.params.code } const queryParam = { code: req.params.code };
app.render(req, res, actualPage, queryParam) app.render(req, res, actualPage, queryParam);
}) });
server.get('/t/:code/fullscreen', (req, res) => { server.get('/t/:code/fullscreen', (req, res) => {
const actualPage = '/tournament-fullscreen' const actualPage = '/tournament-fullscreen';
const queryParam = { code: req.params.code } const queryParam = { code: req.params.code };
app.render(req, res, actualPage, queryParam) app.render(req, res, actualPage, queryParam);
}) });
server.get('*', (req, res) => { server.get('*', (req, res) => {
return handle(req, res) return handle(req, res);
}) });
server.listen(3000, (err) => { server.listen(3000, (err) => {
if (err) throw err if (err) throw err;
console.log('> Ready on http://localhost:3000') });
}) })
}) .catch(() => {
.catch((ex) => { process.exit(1);
console.error(ex.stack) });
process.exit(1)
})