Newsletter KW 30 and the weeks before
This commit is contained in:
@@ -38,10 +38,10 @@ require_once 'events.inc.php';
|
||||
<!-- Table with events-->
|
||||
<?php echo(eventPlaner::getHtmlEventTable(eventPlaner::getComingWkEvents())); ?>
|
||||
|
||||
<h2 id="detailedEventList">Detailansicht kommender Wettkämpfe</h2>
|
||||
<!-- <h2 id="detailedEventList">Detailansicht kommender Wettkämpfe</h2>
|
||||
<?php foreach (eventPlaner::getComingWkEvents() as $event) {
|
||||
echo($event->asHtmlCard());
|
||||
}?>
|
||||
}?> -->
|
||||
</main>
|
||||
<?php } ?>
|
||||
</body>
|
||||
|
||||
@@ -30,20 +30,19 @@
|
||||
<!-- brings its own li -->
|
||||
<?php require_once 'sidenav/loginStatus.php'; ?>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal" href="/participo">zurück<i
|
||||
class="material-icons">home</i></a>
|
||||
<a class="waves-effect waves-teal" href="/participo">zurück<i class="material-icons">home</i></a>
|
||||
</li>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal right-align" href="#comingStarts">Liste anstehender Starts<i
|
||||
<a class="waves-effect waves-teal right-align" href="#comingStarts">Starts<i
|
||||
class="material-icons">format_list_bulleted</i></a>
|
||||
</li>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal right-align" href="#eventList">Liste anstehender Events<i
|
||||
<a class="waves-effect waves-teal right-align" href="#eventList">Events<i
|
||||
class="material-icons">view_list</i></a>
|
||||
</li>
|
||||
<li class="bold">
|
||||
<!-- <li class="bold">
|
||||
<a class="waves-effect waves-teal right-align" href="#detailedEventList">Eventdetails<i
|
||||
class="material-icons">event</i></a>
|
||||
</li>
|
||||
</li> -->
|
||||
</ul>
|
||||
</div><!-- cwsvJudoApps SideNav -->
|
||||
@@ -38,7 +38,7 @@ class dbConnector
|
||||
if (empty($someOptions['dontFetch'])) {
|
||||
$someOptions['dontFetch'] = false;
|
||||
}
|
||||
|
||||
|
||||
$ignoreErrors = $someOptions['ignoreErrors'] ?? false;
|
||||
|
||||
/// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss
|
||||
|
||||
@@ -122,7 +122,7 @@ class Event
|
||||
'<dt>Einschreibefrist</dt>' .
|
||||
'<dd>' . $this->deadline->format('Y-m-d') . '</dd>' .
|
||||
'<dt>Altersklassen</dt>' .
|
||||
'<dd>' . $this->shiai->getAgeClasses() . '</dd>' .
|
||||
'<dd>' . $this->shiai()->getHtmlDescriptiveAgeClasses() . '</dd>' .
|
||||
'</dl>' .
|
||||
'</div>' .
|
||||
'</div>';
|
||||
@@ -135,7 +135,7 @@ class Event
|
||||
'<tr>' .
|
||||
'<td>' . $this->date->format('Y-m-d') . '</td>' .
|
||||
'<td><a href="/participo/events#' . $this->id . '" >' . $shiai->getHtmlName() . '</a></td>' .
|
||||
'<td>' . $shiai->getAgeClasses() . '</td>' .
|
||||
'<td>' . $shiai->getHtmlDescriptiveAgeClasses() . '</td>' .
|
||||
'<td><a class="waves-effect waves-light btn modal-trigger" href="#event-modal-' . $this->id . '"><i class="material-icons">zoom_in</i></a></td>' .
|
||||
'</tr>';
|
||||
}
|
||||
@@ -148,7 +148,6 @@ class Event
|
||||
. $this->shiai->getHtml()
|
||||
. $this->getHtmlStarterStatistic()
|
||||
. $this->getHtmlStarterList();
|
||||
$kids = participo::getKids();
|
||||
$modal .= '<div class="row">';
|
||||
$modal .= '<div class="s12">Deadline zum Eintragen: ' . $this->deadline->format('Y-m-d') . '</div>';
|
||||
|
||||
@@ -157,9 +156,17 @@ class Event
|
||||
(isset($this->deadline) && ($today <= $this->deadline))
|
||||
|| participo::isUserAdmin($userData['id'])
|
||||
) {
|
||||
$kids = participo::getKids();
|
||||
foreach ($kids as $k) {
|
||||
$modal .= $this->getHtmlAddStarterForm($k, ['returnToUrl' => '/participo/events#' . $this->id]);
|
||||
}
|
||||
|
||||
// foreach ($this->shiai()->ageGroups() as $ageClass => $starterList) {
|
||||
// // $modal .= '<h3>' . $ageClass ?? 'keiner Altersklasse zugeordnet' . '</h3>';
|
||||
// foreach ($starterList as $starter) {
|
||||
// $modal .= $this->getHtmlAddStarterForm($k, ['returnToUrl' => '/participo/events#' . $this->id]);
|
||||
// }
|
||||
// }
|
||||
} else {
|
||||
$modal .= '<div>Es ist leider zu spät noch jemanden einzutragen!</div>';
|
||||
}
|
||||
@@ -175,6 +182,7 @@ class Event
|
||||
echo($modal);
|
||||
}
|
||||
|
||||
/** Get the list of starters as html list */
|
||||
public function getHtmlStarterList()
|
||||
{
|
||||
$listOfStarter = $this->getStarter();
|
||||
|
||||
@@ -10,7 +10,39 @@ class participo
|
||||
{
|
||||
private static $db = null;
|
||||
private static $message = ['error' => null, 'success' => null, 'notice' => null];
|
||||
|
||||
/** id of session user
|
||||
*
|
||||
* Session user describes the currently logged in user
|
||||
*
|
||||
* @var int>0
|
||||
*/
|
||||
private static $userId = null;
|
||||
private static $sessionUser = null;
|
||||
|
||||
/** get session users id
|
||||
*
|
||||
* if not set so far it is loaded from the session cookies
|
||||
*
|
||||
* @return int id of session user
|
||||
*/
|
||||
public static function getSessionUserId()
|
||||
{
|
||||
if (!isset(self::$userId)) {
|
||||
self::$userId = $_SESSION['user']['userId'] ?? null;
|
||||
}
|
||||
self::$userId = filterId(self::$userId);
|
||||
return self::$userId;
|
||||
}
|
||||
|
||||
/** lazy loading of the session user */
|
||||
public static function sessionUser(bool $forceLoading = true)
|
||||
{
|
||||
if (is_null($sessionUser) || $forceLoading) {
|
||||
self::$sessionUser = User::loadFromDb(self::getSessionUserId());
|
||||
}
|
||||
return self::$sessionUser;
|
||||
}
|
||||
|
||||
/** Returns the current login status
|
||||
*
|
||||
@@ -23,15 +55,6 @@ class participo
|
||||
return (isset($_SESSION) && array_key_exists('login', $_SESSION) && $_SESSION['login'] == true);
|
||||
}
|
||||
|
||||
public static function getSessionUserId()
|
||||
{
|
||||
$userId = null;
|
||||
if (isset($_SESSION) && array_key_exists('user', $_SESSION) && array_key_exists('userId', $_SESSION['user'])) {
|
||||
$userId = $_SESSION['user']['userId'];
|
||||
}
|
||||
return $userId;
|
||||
}
|
||||
|
||||
/** Remove all login data from the session data
|
||||
*
|
||||
* @return void
|
||||
@@ -175,6 +198,11 @@ class participo
|
||||
return self::hasUserAttribute($userId, 'isAdmin');
|
||||
}
|
||||
|
||||
public static function getUserId()
|
||||
{
|
||||
}
|
||||
|
||||
/** get current logged in users kids */
|
||||
public static function getKids($userId = null)
|
||||
{
|
||||
$userId = $userId ?? $_SESSION['user']['userId'] ?? null;
|
||||
@@ -412,10 +440,10 @@ function lastLoginTable($jsonFileName = 'lastLogins.json')
|
||||
'<tbody>';
|
||||
foreach ($lastLoginRows as $userName => $lastLogin) {
|
||||
$lastLoginsTable .=
|
||||
'<tr><td>' . $userName . '</td><td>' . $lastLogin . '</td></tr>';
|
||||
'<tr><td>' . $userName . '</td><td>' . $lastLogin . '</td></tr>';
|
||||
}
|
||||
$lastLoginsTable .=
|
||||
'</tbody>'.
|
||||
'</tbody>' .
|
||||
'</table>';
|
||||
return $lastLoginsTable;
|
||||
}
|
||||
@@ -568,6 +596,19 @@ function getHtmlSquareDate($date = null)
|
||||
. '</div>';
|
||||
}
|
||||
|
||||
/** filter_var for a pos int
|
||||
*
|
||||
* check for int; null is default; only values > 0 are excepted
|
||||
*
|
||||
* @param [type] $id
|
||||
* @retval int>0 filtered id
|
||||
* @retval null sth. went wrong
|
||||
* */
|
||||
function filterPosInt($id)
|
||||
{
|
||||
return filter_var($id, FILTER_VALIDATE_INT, ['options' => ['default' => null, 'min_range' => 1]]);
|
||||
}
|
||||
|
||||
/** filter_var for a (db)id
|
||||
*
|
||||
* check for valid id; null is default; only values > 0 are excepted
|
||||
@@ -578,11 +619,11 @@ function getHtmlSquareDate($date = null)
|
||||
*/
|
||||
function filterId($id)
|
||||
{
|
||||
return filter_var($id, FILTER_VALIDATE_INT, ['options' => ['default' => null, 'min_range' => 1]]);
|
||||
return filterPosInt($id);
|
||||
}
|
||||
|
||||
/** filter a variable as count
|
||||
*
|
||||
*
|
||||
* - count means a non negative integer
|
||||
* - helper function to stay DRY
|
||||
*
|
||||
@@ -590,7 +631,7 @@ function filterId($id)
|
||||
* @param integer $min
|
||||
* @return integer the input variable as integer >= 0
|
||||
*/
|
||||
function filterCount($variable, int $min = 0){
|
||||
function filterCount($variable, int $min = 0)
|
||||
{
|
||||
return filter_var($variable, FILTER_VALIDATE_INT, ['options' => ['default' => null, 'min_range' => 1]]);
|
||||
}
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ class Shiai
|
||||
$this->id = (int) $id;
|
||||
$this->date = DateTime::createFromFormat('Y-m-d', $date);
|
||||
$this->name = $name;
|
||||
$this->ageclasses = $ageclasses;
|
||||
$this->ageclasses = $ageclasses ? self::akListString2jgArray($ageclasses) : null;
|
||||
$this->place = $place;
|
||||
$this->announcementUrl = $announcementUrl;
|
||||
$this->routeUrl = $routeUrl;
|
||||
@@ -98,12 +98,151 @@ class Shiai
|
||||
$retHtml =
|
||||
'<div>' .
|
||||
'<h3>' . $this->getHtmlName() . '</h3>' .
|
||||
'<dl>'.
|
||||
'<dt>Datum:</dt><dd>' . $this->getHtmlDate() . '</dd>' .
|
||||
'<dt>Altersklassen</dt><dd>' . $this->getAgeClasses() . '</dd>' .
|
||||
'<dl>' .
|
||||
'<dt>Datum</dt><dd>' . $this->getHtmlDate() . '</dd>' .
|
||||
'<dt>Altersklassen</dt><dd>' . $this->getHtmlDescriptiveAgeClasses() . '</dd>' .
|
||||
'<dt>Ort</dt><dd>' . $this->getPlace() . '</dd>' .
|
||||
'</dl>' .
|
||||
'</div>';
|
||||
return $retHtml;
|
||||
}
|
||||
|
||||
public function getHtmlDescriptiveAgeClasses()
|
||||
{
|
||||
$retList = [];
|
||||
foreach ($this->ageclasses as $ageclass => $years) {
|
||||
$htmlFragment = $ageclass;
|
||||
$years = $years[0];
|
||||
|
||||
if ($years[0] || $years[1]) {
|
||||
$htmlFragment .= '(';
|
||||
if ($years[1]) {
|
||||
$htmlFragment .= strval($years[0]) . '-' . strval($years[1]);
|
||||
} else {
|
||||
$htmlFragment .= '<=' . strval($years[0]);
|
||||
}
|
||||
$htmlFragment .= ')';
|
||||
}
|
||||
$retList[] = $htmlFragment;
|
||||
}
|
||||
return implode(', ', $retList);
|
||||
}
|
||||
|
||||
/** convert a list of age class formatted strings into a list of intervals of years
|
||||
*
|
||||
* @param string $akListString
|
||||
* @param int $year
|
||||
* @return list[array(int,int)] list of tupels with lower/upper bound in date year of the age classes
|
||||
*/
|
||||
private static function akListString2jgArray(string $akListString, int $year = null)
|
||||
{
|
||||
$year = filterPosInt($year) ?? filterPosInt((new DateTime)->format('Y'));
|
||||
$ret = [];
|
||||
foreach (explode(' ', $akListString) as $ak) {
|
||||
$ret[$ak] = self::akString2jgIntervall($ak, $year);
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/** convert age class from formatted string to interval of years
|
||||
*
|
||||
* @param [string] $akString
|
||||
* @param [type] $year
|
||||
* @return array(int,int) [x,y] with x the lower bound and y the upper bound of the age class in years. Both bounds are still included in the interval.
|
||||
*/
|
||||
private static function akString2jgIntervall(string $akString, int $year /*= null*/)
|
||||
{
|
||||
// input sanitation
|
||||
$year = filterPosInt($year) ?? filterPosInt((new DateTime)->format('Y'));
|
||||
|
||||
$ret = [null, null];
|
||||
|
||||
// Matching against the different age class formats
|
||||
// - ..Ux
|
||||
// - Jg.x-y
|
||||
|
||||
// Case Ux
|
||||
$akUmatchString = '/(.*)U(.*)/';
|
||||
|
||||
$matches = [];
|
||||
|
||||
preg_match($akUmatchString, $akString, $matches);
|
||||
// The found match should cover the whole string. Otherwise it isn't applicable.
|
||||
if ($matches[0] == $akString) {
|
||||
// The x in Ux should be a positive integer.
|
||||
$ageLimit = filterPosInt($matches[2]);
|
||||
if ($ageLimit) {
|
||||
$ret[0] = $year - $ageLimit + 1;
|
||||
// lowering the lower bound according to the modifiers
|
||||
if ($matches[1] == '') {
|
||||
$ret[1] = $year - $ageLimit + 2;
|
||||
} elseif ($matches[1] == '-') {
|
||||
$ret[1] = $year - $ageLimit + 3;
|
||||
} elseif ($matches[1] == '--') {
|
||||
$ret[1] = $year - $ageLimit + 4;
|
||||
} elseif (in_array($matches[1], ['<=', '≤', '≤', '≤', '≤'])) {
|
||||
$ret[1] = $year;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
}
|
||||
|
||||
// Case Jg.x-y
|
||||
$akUmatchString = "/Jg\.(.*)\-(.*)/";
|
||||
|
||||
$matches = [];
|
||||
|
||||
preg_match($akUmatchString, $akString, $matches);
|
||||
// The found match should cover the whole string. Otherwise it isn't applicable.
|
||||
|
||||
if ($matches[0] == $akString) {
|
||||
$ret[0] = filterPosInt($matches[1]);
|
||||
$ret[1] = filterPosInt($matches[2]);
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/** grouping users kids by ageGroups
|
||||
*
|
||||
* @return array(ageGroup => list(users in ageGroup))
|
||||
*/
|
||||
public function ageGroups()
|
||||
{
|
||||
$kids = participo::getKids();
|
||||
return self::ageClassGrouping($this->ageclasses, $kids);
|
||||
}
|
||||
|
||||
/** grouping users by given age class
|
||||
*
|
||||
* @param array $ageClassList as array string representation of age class => [lower year bound, upper year bound]
|
||||
* @param array $starterList list of starter (User)
|
||||
* @return array of string representation of age class => array of user in this class
|
||||
*/
|
||||
private static function ageClassGrouping(array $ageClassList, array $starterList)
|
||||
{
|
||||
$grouping = [];
|
||||
foreach ($ageClassList as $ageClass => $yearBoundaries) {
|
||||
$grouping[$ageClass] = [];
|
||||
}
|
||||
$grouping[null] = [];
|
||||
|
||||
foreach ($starterList as $starter) {
|
||||
$startersAgeClass = $starter->yearOfBirth() ? self::getAgeClassFromYear($starter->yearOfBirth(), $ageClassList) : null;
|
||||
array_push($grouping[$startersAgeClass], $starter);
|
||||
}
|
||||
return $grouping;
|
||||
}
|
||||
|
||||
private static function getAgeClassFromYear(int $year, array $ageClassList)
|
||||
{
|
||||
foreach ($ageClassList as $ageClass => $yearBoundaries) {
|
||||
if (($yearBoundaries[0] <= $year) && ($year <= $yearBoundaries[1])) {
|
||||
return $ageClass;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
} // end class shiai
|
||||
|
||||
@@ -10,51 +10,66 @@ class User
|
||||
* @todo Document parameter
|
||||
* @todo Input sanitation
|
||||
*/
|
||||
public function __construct($id, $loginName, $name, $firstName, $dateOfBirth=null, $eMail=null, $config=null, $pwHash=null)
|
||||
public function __construct($id, $loginName, $name, $firstName, $dateOfBirth = null, $eMail = null, $config = null, $pwHash = null)
|
||||
{
|
||||
$this->id = filterId($id);
|
||||
$this->loginName = $loginName;
|
||||
$this->name = $name;
|
||||
$this->firstName = $firstName;
|
||||
$this->dateOfBirth = ($dateOfBirth != null) ? DateTime::createFromFormat('Y-m-d', $dateOfBirth) : null;
|
||||
$this->eMail = ($eMail!=null) ? filter_var($eMail, FILTER_VALIDATE_EMAIL,['options'=>['default'=>null]]):null;
|
||||
$this->eMail = ($eMail != null) ? filter_var($eMail, FILTER_VALIDATE_EMAIL, ['options' => ['default' => null]]) : null;
|
||||
$this->config = $config;
|
||||
$this->pwHash = $pwHash;
|
||||
}
|
||||
|
||||
/** return users year of birth as int
|
||||
*
|
||||
* @retval int>=0 on success,
|
||||
* @retval null failure
|
||||
*/
|
||||
public function yearOfBirth()
|
||||
{
|
||||
if (isset($this->dateOfBirth)) {
|
||||
return filterPosInt($this->dateOfBirth->format('Y'));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
////
|
||||
// dbInterface
|
||||
////
|
||||
|
||||
public function addToDb(){
|
||||
public function addToDb()
|
||||
{
|
||||
// if the user has an Id set it has to come from the Db. Hence don't add an User that is already added.
|
||||
if(isset($this->id) || !participo::isUserAdmin()){
|
||||
if (isset($this->id) || !participo::isUserAdmin()) {
|
||||
return;
|
||||
}
|
||||
$this->id = self::dbInsert(
|
||||
$this->loginName
|
||||
, $this->name
|
||||
, $this->firstName
|
||||
, (isset($this->dateOfBirth))?($this->dateOfBirth->format('Y-m-d')):null
|
||||
, $this->eMail
|
||||
, $this->config
|
||||
, $this->pwHash
|
||||
$this->loginName,
|
||||
$this->name,
|
||||
$this->firstName,
|
||||
(isset($this->dateOfBirth)) ? ($this->dateOfBirth->format('Y-m-d')) : null,
|
||||
$this->eMail,
|
||||
$this->config,
|
||||
$this->pwHash
|
||||
);
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
private static function dbInsert($loginName, $name, $firstName, $dateOfBirth=null, $eMail=null, $config=null, $pwHash=null){
|
||||
$query = 'INSERT INTO `'.self::$tableName.'` '
|
||||
.'(loginName, name, vorname, gebDatum, eMail, config, pwHash) '
|
||||
.' VALUES (:loginName, :name, :vorname, :gebDatum, :eMail, :config, :pwHash);';
|
||||
private static function dbInsert($loginName, $name, $firstName, $dateOfBirth = null, $eMail = null, $config = null, $pwHash = null)
|
||||
{
|
||||
$query = 'INSERT INTO `' . self::$tableName . '` '
|
||||
. '(loginName, name, vorname, gebDatum, eMail, config, pwHash) '
|
||||
. ' VALUES (:loginName, :name, :vorname, :gebDatum, :eMail, :config, :pwHash);';
|
||||
$params = [
|
||||
':loginName'=>['value'=>$loginName, 'data_type' => self::$dbColumns['loginName']],
|
||||
':name'=>['value'=>$name, 'data_type' => self::$dbColumns['name']],
|
||||
':vorname'=>['value'=>$firstName, 'data_type' => self::$dbColumns['vorname']],
|
||||
':gebDatum'=>['value'=>$dateOfBirth, 'data_type' => self::$dbColumns['gebDatum']],
|
||||
':eMail'=>['value'=>$eMail, 'data_type' => self::$dbColumns['eMail']],
|
||||
':config'=>['value'=>$config, 'data_type' => self::$dbColumns['config']],
|
||||
':pwHash'=>['value'=>$pwHash, 'data_type' => self::$dbColumns['pwHash']],
|
||||
':loginName' => ['value' => $loginName, 'data_type' => self::$dbColumns['loginName']],
|
||||
':name' => ['value' => $name, 'data_type' => self::$dbColumns['name']],
|
||||
':vorname' => ['value' => $firstName, 'data_type' => self::$dbColumns['vorname']],
|
||||
':gebDatum' => ['value' => $dateOfBirth, 'data_type' => self::$dbColumns['gebDatum']],
|
||||
':eMail' => ['value' => $eMail, 'data_type' => self::$dbColumns['eMail']],
|
||||
':config' => ['value' => $config, 'data_type' => self::$dbColumns['config']],
|
||||
':pwHash' => ['value' => $pwHash, 'data_type' => self::$dbColumns['pwHash']],
|
||||
];
|
||||
$response = dbConnector::query($query, $params);
|
||||
return dbConnector::getLastInsertId();
|
||||
@@ -81,7 +96,6 @@ class User
|
||||
'pwHash' => PDO::PARAM_STR
|
||||
];
|
||||
|
||||
|
||||
////
|
||||
// html interface
|
||||
////
|
||||
@@ -89,26 +103,26 @@ class User
|
||||
public static function getHtmlFormAddUser($options = [])
|
||||
{
|
||||
$returnToUrl = $options['returnToUrl'] ?? urlencode(getCurPagesUrl());
|
||||
$formClass = isset($options['formClass']) ? 'class="'.$options['formClass'].'"' : '';
|
||||
$formClass = isset($options['formClass']) ? 'class="' . $options['formClass'] . '"' : '';
|
||||
|
||||
$form =
|
||||
'<form ' . $formClass . ' action="api.user.add.php" method="post">'
|
||||
. '<input type="hidden" name="returnToUrl" id="returnToUrl" value="' . $returnToUrl . '" >'
|
||||
.'<div><label for="loginName">Benutzername</label> <input type="text" name="loginName" id="loginName"></div>'
|
||||
.'<div><label for="name">Nachname</label> <input type="text" name="name" id="name"></div>'
|
||||
.'<div><label for="firstName">Vorname</label> <input type="text" name="firstName" id="firstName"></div>'
|
||||
.'<div><label for="dateOfBirth">Geb.Datum</label> <input type="text" name="dateOfBirth" id="dateOfBirth"></div>'
|
||||
.'<div><label for="eMail">eMail</label> <input type="text" name="eMail" id="eMail"></div>'
|
||||
. '<div><label for="loginName">Benutzername</label> <input type="text" name="loginName" id="loginName"></div>'
|
||||
. '<div><label for="name">Nachname</label> <input type="text" name="name" id="name"></div>'
|
||||
. '<div><label for="firstName">Vorname</label> <input type="text" name="firstName" id="firstName"></div>'
|
||||
. '<div><label for="dateOfBirth">Geb.Datum</label> <input type="text" name="dateOfBirth" id="dateOfBirth"></div>'
|
||||
. '<div><label for="eMail">eMail</label> <input type="text" name="eMail" id="eMail"></div>'
|
||||
. '<button class="btn" type="submit" name="submit">erstellen</button>'
|
||||
. '</form>';
|
||||
return $form;
|
||||
}
|
||||
|
||||
public static function htmlFormAddUser($options = []){
|
||||
public static function htmlFormAddUser($options = [])
|
||||
{
|
||||
echo(self::getHtmlFormAddUser($options));
|
||||
}
|
||||
|
||||
|
||||
// member variables
|
||||
private $id;
|
||||
private $loginName;
|
||||
@@ -119,6 +133,49 @@ class User
|
||||
private $config;
|
||||
private $pwHash;
|
||||
|
||||
// database member data
|
||||
/** List of ids of the users kids */
|
||||
private $kidIds = null;
|
||||
/** List of users kids */
|
||||
private $kids = null;
|
||||
|
||||
public function kidIds(bool $forceLoading = false)
|
||||
{
|
||||
if (is_null($this->kidIds) || $forceLoading) {
|
||||
$this->kidIds = self::getKidIds($id);
|
||||
}
|
||||
return self::$kidIds;
|
||||
}
|
||||
|
||||
public function kids(bool $forceLoading = false)
|
||||
{
|
||||
if (is_null($this->kids) || $forceLoading) {
|
||||
$this->kids = participo::getKids($this->id);
|
||||
}
|
||||
return $this->kids;
|
||||
}
|
||||
|
||||
private static function getKidIds(int $id)
|
||||
{
|
||||
$response = dbConnector::query(
|
||||
'SELECT * FROM `wkParticipo_Users` WHERE `' . $name . '` = :' . $name,
|
||||
[$name => ['value' => $value, 'data_type' => self::$dbColumns[$name]]]
|
||||
);
|
||||
|
||||
$query = <<<SQL
|
||||
SELECT *
|
||||
FROM `wkParticipo_Users`
|
||||
JOIN `vormundschaft`
|
||||
ON `wkParticipo_Users`.`id` = `vormundschaft`.`kidId`
|
||||
WHERE `vormundschaft`.`userId` = :userId;
|
||||
SQL;
|
||||
$params = [
|
||||
':userId' => ['value' => $userId, 'data_type' => PDO::PARAM_INT]
|
||||
];
|
||||
$response = dbConnector::query($query, $params);
|
||||
return $response;
|
||||
}
|
||||
|
||||
/** Export the User data into an associative array
|
||||
*
|
||||
* @return array associative array representing the user
|
||||
@@ -192,7 +249,9 @@ class User
|
||||
}
|
||||
|
||||
return new User(
|
||||
$member[$columnMappings['id']] ?? null,
|
||||
$member[
|
||||
$columnMappings['id']
|
||||
] ?? null,
|
||||
$member[$columnMappings['loginName']] ?? null,
|
||||
$member[$columnMappings['name']] ?? null,
|
||||
$member[$columnMappings['vorname']] ?? null,
|
||||
@@ -244,7 +303,6 @@ class User
|
||||
if (count($response) != 1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return User::fromDbArray($response[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,88 +1,92 @@
|
||||
<?php
|
||||
setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
|
||||
require_once 'config/participo.php';
|
||||
require_once 'config/participo.php';
|
||||
|
||||
require_once './local/dbConf.php';
|
||||
require_once './local/cwsvJudo.php';
|
||||
require_once './local/dbConf.php';
|
||||
require_once './local/cwsvJudo.php';
|
||||
|
||||
require_once './lib/participoLib/participo.php';
|
||||
require_once './lib/db.php';
|
||||
require_once './lib/api.php';
|
||||
require_once './lib/participoLib/participo.php';
|
||||
require_once './lib/db.php';
|
||||
require_once './lib/api.php';
|
||||
|
||||
require_once $config['basePath'] . '/config/cwsvJudo.config.php';
|
||||
require_once $config['basePath'] . '/config/phpcount.config.php';
|
||||
|
||||
require_once $config['basePath'] . '/config/cwsvJudo.config.php';
|
||||
require_once $config['basePath'] . '/config/phpcount.config.php';
|
||||
dbConnector::connect(
|
||||
$cwsvJudoConfig['db']['host'],
|
||||
$cwsvJudoConfig['db']['name'],
|
||||
$cwsvJudoConfig['db']['user'],
|
||||
$cwsvJudoConfig['db']['password']
|
||||
);
|
||||
|
||||
dbConnector::connect(
|
||||
$cwsvJudoConfig['db']['host'],
|
||||
$cwsvJudoConfig['db']['name'],
|
||||
$cwsvJudoConfig['db']['user'],
|
||||
$cwsvJudoConfig['db']['password']
|
||||
);
|
||||
participo::authentificate();
|
||||
$userData = getUserData(dbConnector::getDbConnection(), $_SESSION['user']['userId']);
|
||||
$usersKids = getUsersKids(dbConnector::getDbConnection(), $_SESSION['user']['userId']);
|
||||
|
||||
participo::authentificate();
|
||||
$userData = getUserData(dbConnector::getDbConnection(), $_SESSION['user']['userId']);
|
||||
$usersKids = getUsersKids(dbConnector::getDbConnection(), $_SESSION['user']['userId']);
|
||||
|
||||
processPostData(dbConnector::getDbConnection(), $_POST);
|
||||
processPostData(dbConnector::getDbConnection(), $_POST);
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<?php readfile('./shared/imports.php'); ?>
|
||||
<!-- inits for the materializeCss -->
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var elems = document.querySelectorAll('.sidenav');
|
||||
var instances = M.Sidenav.init(elems, {
|
||||
// specify options here
|
||||
});
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
|
||||
<?php readfile('./shared/imports.php'); ?>
|
||||
<!-- inits for the materializeCss -->
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
var elems = document.querySelectorAll('.sidenav');
|
||||
var instances = M.Sidenav.init(elems, {
|
||||
// specify options here
|
||||
});
|
||||
</script>
|
||||
});
|
||||
</script>
|
||||
|
||||
<title>User-Config</title>
|
||||
<meta name="description" content="Benutzereinstellungen">
|
||||
<title>User-Config</title>
|
||||
<meta name="description" content="Benutzereinstellungen">
|
||||
|
||||
<link rel="icon" href="<?echo($config['ressourceUrl']);?>/graphiken/icons/cwsv.ico" />
|
||||
<link rel="apple-touch-icon" href="<?echo($config['baseUrl']);?>/apple-touch-icon.png">
|
||||
</head>
|
||||
<link rel="icon" href="<?echo($config['ressourceUrl']);?>/graphiken/icons/cwsv.ico" />
|
||||
<link rel="apple-touch-icon" href="<?echo($config['baseUrl']);?>/apple-touch-icon.png">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body>
|
||||
|
||||
<header>
|
||||
<nav class="indigo darken-4">cwsvJudo Apps<a class="right top-nav sidenav-trigger waves-effect waves-light hide-on-large-only" href="#" data-target="nav-mobile">
|
||||
<header>
|
||||
<nav class="indigo darken-4">cwsvJudo Apps<a
|
||||
class="right top-nav sidenav-trigger waves-effect waves-light hide-on-large-only" href="#"
|
||||
data-target="nav-mobile">
|
||||
<i class="material-icons">menu</i>
|
||||
</a></nav>
|
||||
<ul class="sidenav sidenav-fixed sidenav-close" id="nav-mobile">
|
||||
<li class="logo">
|
||||
<a style="height:auto;" class="brand-logo" id="logo-container" href="/participo/">
|
||||
<img style="max-width:100%;height:12vh;" class="responsive-img" src="http://cwsvjudo.bplaced.net/ressourcen/graphiken/logos/cwsvJudoLogoWappen.x256.png" />
|
||||
</a>
|
||||
</li>
|
||||
<li><?php require_once 'sidenav/loginStatus.php'; ?></li>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal" href="/participo">zurück</a>
|
||||
</li>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal" href="/participo/user#userInfos">Config</a>
|
||||
</li>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal" href="/participo/user#kidsList">Kinder</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
<ul class="sidenav sidenav-fixed sidenav-close" id="nav-mobile">
|
||||
<li class="logo">
|
||||
<a style="height:auto;" class="brand-logo" id="logo-container" href="/participo/">
|
||||
<img style="max-width:100%;height:12vh;" class="responsive-img"
|
||||
src="http://cwsvjudo.bplaced.net/ressourcen/graphiken/logos/cwsvJudoLogoWappen.x256.png" />
|
||||
</a>
|
||||
</li>
|
||||
<li><?php require_once 'sidenav/loginStatus.php'; ?>
|
||||
</li>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal" href="/participo">zurück</a>
|
||||
</li>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal" href="/participo/user#userInfos">Config</a>
|
||||
</li>
|
||||
<li class="bold">
|
||||
<a class="waves-effect waves-teal" href="/participo/user#kidsList">Kinder</a>
|
||||
</li>
|
||||
</ul>
|
||||
</header>
|
||||
|
||||
<?php
|
||||
<?php
|
||||
if ($_SESSION['login']) {
|
||||
?>
|
||||
<main>
|
||||
<h1>Benutzer-Einstellungen</h1>
|
||||
<p>
|
||||
<?php
|
||||
<main>
|
||||
<h1>Benutzer-Einstellungen</h1>
|
||||
<p>
|
||||
<?php
|
||||
if (array_key_exists('changePasswordSuccess', $_GET)) {
|
||||
if ($_GET['changePasswordSuccess'] == 'true') {
|
||||
echo('<div>Password geändert</div>');
|
||||
@@ -90,122 +94,53 @@ if ($_SESSION['login']) {
|
||||
echo('<div>Fehler während des Setzens des Passwortes.</div>');
|
||||
}
|
||||
} ?>
|
||||
</p>
|
||||
<h2>Benutzer-Info</h2>
|
||||
<p>Informationen zum eigenen Benutzerkonto</p>
|
||||
<div id="userInfos" class="row">
|
||||
</p>
|
||||
<h2>Benutzer-Info</h2>
|
||||
<p>Informationen zum eigenen Benutzerkonto</p>
|
||||
<div id="userInfos" class="row">
|
||||
|
||||
<div style="padding:1%;" class="col s12 m6">
|
||||
<div style="margin:1%;" class="card blue-grey darken-1">
|
||||
<div class="card-content white-text">
|
||||
<span class="card-title"><?php echo($userData['name']); ?>, <?php echo($userData['vorname']); ?></span>
|
||||
<img style="max-height:10vh;" class="responsive-img" src="images/account.svg" />
|
||||
<dl>
|
||||
<dt>Name</dt><dd><?php echo($userData['name']); ?></dd>
|
||||
<dt>Vorname</dt><dd><?php echo($userData['vorname']); ?></dd>
|
||||
<dt>Email</dt><dd><?php echo($userData['eMail']); ?></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<!--
|
||||
<a href="">kommt bald</a>
|
||||
-->
|
||||
<div style="padding:1%;" class="col s12 m6">
|
||||
<div style="margin:1%;" class="card blue-grey darken-1">
|
||||
<div class="card-content white-text">
|
||||
<span
|
||||
class="card-title"><?php echo($userData['name']); ?>,
|
||||
<?php echo($userData['vorname']); ?></span>
|
||||
<img style="max-height:10vh;" class="responsive-img" src="images/account.svg" />
|
||||
<dl>
|
||||
<dt>Name</dt>
|
||||
<dd><?php echo($userData['name']); ?>
|
||||
</dd>
|
||||
<dt>Vorname</dt>
|
||||
<dd><?php echo($userData['vorname']); ?>
|
||||
</dd>
|
||||
<dt>Email</dt>
|
||||
<dd><?php echo($userData['eMail']); ?>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="padding:1%;" class="col s12 m6">
|
||||
<div style="margin:1%;" class="card blue-grey darken-1">
|
||||
<div class="card-content white-text">
|
||||
<span class="card-title">Passwort setzen</span>
|
||||
Im folgenden Formular kann das Passwort geändert werden. Man sollte darauf achten, dass man beim <a href="https://www.bsi-fuer-buerger.de/BSIFB/DE/Empfehlungen/Passwoerter/Umgang/umgang_node.html">Umgang mit Passwörtern</a> die nötige Vorsicht walten lässt.
|
||||
<form action="./user" method="post">
|
||||
<input name="action" type="hidden" value="changePassword" />
|
||||
<input name="redirectLocation" type="hidden" value="./user" />
|
||||
<input name="changerId" type="hidden" value="<?php echo($userData['id']); ?>" />
|
||||
<input name="changeeId" type="hidden" value="<?php echo($userData['id']); ?>" />
|
||||
<fieldset>
|
||||
<legend>Neues Passwort vergeben</legend>
|
||||
<div>
|
||||
<label for="changerPassword">Eigenes Passwort</label>
|
||||
<input type="password" name="changerPassword" id="changerPassword" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="newPassword">Neues Passwort</label>
|
||||
<input type="password" name="newPassword" id="newPassword" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="newPasswordAgain">Neues Passwort wiederholen</label>
|
||||
<input type="password" name="newPasswordAgain" id="newPasswordAgain" />
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div><button type="submit">Passwort neu setzen</button></div>
|
||||
</fieldset>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-action">
|
||||
<!--
|
||||
<div class="card-action">
|
||||
<!--
|
||||
<a href="">kommt bald</a>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Berechtigungen</h2>
|
||||
|
||||
<p>Liste der User, für die man meldeberechtigt ist (bzw. Änderungen vornehmen darf). In der Regel ist das das eigene Kind (bei Eltern) oder man selber (bei Volljährigen).</p>
|
||||
<div class="row" id="kidsList">
|
||||
<?php
|
||||
foreach ($usersKids as $kid) { ?>
|
||||
<div style="padding:1%;" class="col s12 m6">
|
||||
<div style="margin:1%;" class="card blue-grey darken-1">
|
||||
<div class="card-content white-text">
|
||||
<span class="card-title"><?php echo($kid['name']); ?>, <?php echo($kid['vorname']); ?></span>
|
||||
<img style="max-height:10vh;" class="responsive-img" src="images/account.svg" />
|
||||
<dl>
|
||||
<dt>Name</dt><dd><?php echo($kid['name']); ?></dd>
|
||||
<dt>Vorname</dt><dd><?php echo($kid['vorname']); ?></dd>
|
||||
<dt>Geb.datum</dt><dd><?php echo($kid['gebDatum']); ?></dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<span class="card-title">Passwort</span>
|
||||
<p>Im folgenden Formular kann das Passwort des Kindes gesetzt werden. Damit kann das Kind sich auch in das System einloggen - um z.B. die Wissens-Apps zu benutzen - kann sich aber nicht bei Wettkämpfen anmelden. Das eigene Passwort muss dabei noch einmal zur Kontrolle eingegeben werden. Das neue Passwort muss zweimal blind eingegeben.</p>
|
||||
<p>
|
||||
<?php
|
||||
if (($kid['pwHash'] == '') || ($kid['pwHash']) == null) {
|
||||
echo('<p>Derzeit ist kein Passwort gesetzt!</p>');
|
||||
} else {
|
||||
echo('<p>Es ist derzeit ein Passwort gesetzt!</p>'); ?>
|
||||
<p>Es besteht auch die Möglickeit, das Passwort ganz zu entfernen. Man kann sich dann nicht mehr mit diesem Konto einloggen. Das eigene Passwort muss dabei noch einmal zur Kontrolle eingegeben werden.</p>
|
||||
<div style="padding:1%;" class="col s12 m6">
|
||||
<div style="margin:1%;" class="card blue-grey darken-1">
|
||||
<div class="card-content white-text">
|
||||
<span class="card-title">Passwort setzen</span>
|
||||
Im folgenden Formular kann das Passwort geändert werden. Man sollte darauf achten, dass man beim
|
||||
<a
|
||||
href="https://www.bsi-fuer-buerger.de/BSIFB/DE/Empfehlungen/Passwoerter/Umgang/umgang_node.html">Umgang
|
||||
mit Passwörtern</a> die nötige Vorsicht walten lässt.
|
||||
<form action="./user" method="post">
|
||||
<input name="action" type="hidden" value="changePassword" />
|
||||
<input name="redirectLocation" type="hidden" value="./user" />
|
||||
<input name="changerId" type="hidden" value="<?php echo($userData['id']); ?>" />
|
||||
<input name="changeeId" type="hidden" value="<?php echo($kid['kidId']); ?>" />
|
||||
<input name="newPassword" type="hidden" value="" />
|
||||
<input name="newPasswordAgain" type="hidden" value="" />
|
||||
<fieldset>
|
||||
<div>
|
||||
<label for="changerPassword">Eigenes Passwort</label>
|
||||
<input type="password" name="changerPassword" id="changerPassword" />
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div><button type="submit">Passwort entfernen</button></div>
|
||||
</fieldset>
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
<form action="./user" method="post">
|
||||
<input name="action" type="hidden" value="changePassword" />
|
||||
<input name="redirectLocation" type="hidden" value="./user" />
|
||||
<input name="changerId" type="hidden" value="<?php echo($userData['id']); ?>" />
|
||||
<input name="changeeId" type="hidden" value="<?php echo($kid['kidId']); ?>" />
|
||||
<input name="changerId" type="hidden"
|
||||
value="<?php echo($userData['id']); ?>" />
|
||||
<input name="changeeId" type="hidden"
|
||||
value="<?php echo($userData['id']); ?>" />
|
||||
<fieldset>
|
||||
<legend>Neues Passwort vergeben</legend>
|
||||
<div>
|
||||
@@ -213,7 +148,7 @@ if ($_SESSION['login']) {
|
||||
<input type="password" name="changerPassword" id="changerPassword" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="newPassword">Neues Passwort des Kindes</label>
|
||||
<label for="newPassword">Neues Passwort</label>
|
||||
<input type="password" name="newPassword" id="newPassword" />
|
||||
</div>
|
||||
<div>
|
||||
@@ -225,19 +160,120 @@ if ($_SESSION['login']) {
|
||||
<div><button type="submit">Passwort neu setzen</button></div>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<div class="card-action">
|
||||
<!--
|
||||
<a href="">kommt bald</a>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
<div class="card-action">
|
||||
<!--
|
||||
<a href="">kommt bald</a>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h2>Berechtigungen</h2>
|
||||
|
||||
<p>Liste der User, für die man meldeberechtigt ist (bzw. Änderungen vornehmen darf). In der Regel ist das das
|
||||
eigene Kind (bei Eltern) oder man selber (bei Volljährigen).</p>
|
||||
<div class="row" id="kidsList">
|
||||
<?php
|
||||
foreach ($usersKids as $kid) { ?>
|
||||
<div style="padding:1%;" class="col s12 m6">
|
||||
<div style="margin:1%;" class="card blue-grey darken-1">
|
||||
<div class="card-content white-text">
|
||||
<span
|
||||
class="card-title"><?php echo($kid['name']); ?>,
|
||||
<?php echo($kid['vorname']); ?></span>
|
||||
<img style="max-height:10vh;" class="responsive-img" src="images/account.svg" />
|
||||
<dl>
|
||||
<dt>Name</dt>
|
||||
<dd><?php echo($kid['name']); ?>
|
||||
</dd>
|
||||
<dt>Vorname</dt>
|
||||
<dd><?php echo($kid['vorname']); ?>
|
||||
</dd>
|
||||
<dt>Geb.datum</dt>
|
||||
<dd><?php echo($kid['gebDatum']); ?>
|
||||
</dd>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<span class="card-title">Passwort</span>
|
||||
<p>Im folgenden Formular kann das Passwort des Kindes gesetzt werden. Damit kann das Kind sich auch
|
||||
in das System einloggen - um z.B. die Wissens-Apps zu benutzen - kann sich aber nicht bei
|
||||
Wettkämpfen anmelden. Das eigene Passwort muss dabei noch einmal zur Kontrolle eingegeben
|
||||
werden. Das neue Passwort muss zweimal blind eingegeben.</p>
|
||||
<p>
|
||||
<?php
|
||||
if (($kid['pwHash'] == '') || ($kid['pwHash']) == null) {
|
||||
echo('<p>Derzeit ist kein Passwort gesetzt!</p>');
|
||||
} else {
|
||||
echo('<p>Es ist derzeit ein Passwort gesetzt!</p>'); ?>
|
||||
<p>Es besteht auch die Möglickeit, das Passwort ganz zu entfernen. Man kann sich dann nicht mehr mit
|
||||
diesem Konto einloggen. Das eigene Passwort muss dabei noch einmal zur Kontrolle eingegeben
|
||||
werden.</p>
|
||||
<form action="./user" method="post">
|
||||
<input name="action" type="hidden" value="changePassword" />
|
||||
<input name="redirectLocation" type="hidden" value="./user" />
|
||||
<input name="changerId" type="hidden"
|
||||
value="<?php echo($userData['id']); ?>" />
|
||||
<input name="changeeId" type="hidden"
|
||||
value="<?php echo($kid['kidId']); ?>" />
|
||||
<input name="newPassword" type="hidden" value="" />
|
||||
<input name="newPasswordAgain" type="hidden" value="" />
|
||||
<fieldset>
|
||||
<div>
|
||||
<label for="changerPassword">Eigenes Passwort</label>
|
||||
<input type="password" name="changerPassword" id="changerPassword" />
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div><button type="submit">Passwort entfernen</button></div>
|
||||
</fieldset>
|
||||
</form>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
<form action="./user" method="post">
|
||||
<input name="action" type="hidden" value="changePassword" />
|
||||
<input name="redirectLocation" type="hidden" value="./user" />
|
||||
<input name="changerId" type="hidden"
|
||||
value="<?php echo($userData['id']); ?>" />
|
||||
<input name="changeeId" type="hidden"
|
||||
value="<?php echo($kid['kidId']); ?>" />
|
||||
<fieldset>
|
||||
<legend>Neues Passwort vergeben</legend>
|
||||
<div>
|
||||
<label for="changerPassword">Eigenes Passwort</label>
|
||||
<input type="password" name="changerPassword" id="changerPassword" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="newPassword">Neues Passwort des Kindes</label>
|
||||
<input type="password" name="newPassword" id="newPassword" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="newPasswordAgain">Neues Passwort wiederholen</label>
|
||||
<input type="password" name="newPasswordAgain" id="newPasswordAgain" />
|
||||
</div>
|
||||
</fieldset>
|
||||
<fieldset>
|
||||
<div><button type="submit">Passwort neu setzen</button></div>
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<div class="card-action">
|
||||
<!--
|
||||
<a href="">kommt bald</a>
|
||||
-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php
|
||||
} ?>
|
||||
</main>
|
||||
<?php
|
||||
</main>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
Reference in New Issue
Block a user