Update edit_user form page and also minor updates to Form and ArraIO

login_user_id is unique if not null (as index, constraint only with
PostgreSQL 15)
login_user_id_revalidate_after is not longer not null and default set,
no need for this

DB\Extended\ArrayIO:
add sql_read for datetime fields to change amount of data (eg only up
to minute) with to_char() method. sample: YYYY-MM-DD HH24:MI
Add date/datetime/emptynull for setting empty fields to null and not
empty string

Output\From\Generate:
Remove all fill for spacer and change them to placeholder html types.
Add datetime check next to date, time only checks

edit_user Admin Form:
add all new columns there
This commit is contained in:
Clemens Schwaighofer
2022-06-22 15:50:07 +09:00
parent 04e4fe46f2
commit 4600f8f7bf
10 changed files with 148 additions and 31 deletions

View File

@@ -75,9 +75,9 @@ class Login
/** @var string the user id var*/
private $euid;
/** @var string _GET/_POST loginUserId parameter for non password login */
private $login_user_id;
private $login_user_id = '';
/** @var string source, either _GET or _POST or empty */
private $login_user_id_source;
private $login_user_id_source = '';
/** @var bool set to true if illegal characters where found in the login user id string */
private $login_unclear = false;
// is set to one if login okay, or EUID is set and user is okay to access this page
@@ -548,7 +548,8 @@ class Login
. "OR (eu.login_user_id_valid_until IS NOT NULL AND NOW() <= eu.login_user_id_valid_until))"
. ") THEN 1::INT ELSE 0::INT END AS login_user_id_valid_date, "
// check if user must login
. "CASE WHEN eu.login_user_id_revalidate_after > '0 days'::INTERVAL "
. "CASE WHEN eu.login_user_id_revalidate_after IS NOT NULL "
. "AND eu.login_user_id_revalidate_after > '0 days'::INTERVAL "
. "AND (eu.login_user_id_set_date + eu.login_user_id_revalidate_after)::DATE "
. "<= NOW()::DATE "
. "THEN 1::INT ELSE 0::INT END AS login_user_id_revalidate, "
@@ -1888,7 +1889,8 @@ EOM;
. "OR (eu.login_user_id_valid_until IS NOT NULL AND NOW() <= eu.login_user_id_valid_until))"
. ") THEN 1::INT ELSE 0::INT END AS login_user_id_valid_date, "
// check if user must login
. "CASE WHEN eu.login_user_id_revalidate_after > '0 days'::INTERVAL "
. "CASE WHEN eu.login_user_id_revalidate_after IS NOT NULL "
. "AND eu.login_user_id_revalidate_after > '0 days'::INTERVAL "
. "AND eu.login_user_id_set_date + eu.login_user_id_revalidate_after <= NOW()::DATE "
. "THEN 1::INT ELSE 0::INT END AS login_user_id_revalidate, "
. "eu.login_user_id_locked "

View File

@@ -271,7 +271,15 @@ class ArrayIO extends \CoreLibs\DB\IO
if ($q_select) {
$q_select .= ', ';
}
$q_select .= $column;
if (
!empty($data_array['type']) && $data_array['type'] == 'datetime' &&
!empty($data_array['sql_read'])
) {
// convert tom different timestamp type
$q_select .= "TO_CHAR($column, '" . $data_array['sql_read'] . "') AS $column";
} else {
$q_select .= $column;
}
// check FK ...
if (isset($this->table_array[$column]['fk']) && isset($this->table_array[$column]['value'])) {
@@ -450,7 +458,12 @@ class ArrayIO extends \CoreLibs\DB\IO
} elseif (isset($this->table_array[$column]['bool'])) {
// boolean storeage (reverse check on ifset)
$q_data .= "'" . $this->dbBoolean($this->table_array[$column]['value'], true) . "'";
} elseif (isset($this->table_array[$column]['interval'])) {
} elseif (
isset($this->table_array[$column]['interval']) ||
isset($this->table_array[$column]['date']) ||
isset($this->table_array[$column]['datetime']) ||
isset($this->table_array[$column]['emptynull'])
) {
// for interval we check if no value, then we set null
if (
!isset($this->table_array[$column]['value']) ||

View File

@@ -969,11 +969,13 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
}
// date (YYYY-MM-DD)
if ($this->table_array[$element_name]['type'] == 'date') {
if (!$this->table_array[$element_name]['value']) {
$this->table_array[$element_name]['value'] = 'YYYY-MM-DD';
}
$data['name'] = $element_name;
$data['value'] = $this->table_array[$element_name]['value'];
$data['value'] = $this->table_array[$element_name]['value'] ?? '';
}
// date time (no sec) (YYYY-MM-DD HH:mm)
if ($this->table_array[$element_name]['type'] == 'datetime') {
$data['name'] = $element_name;
$data['value'] = $this->table_array[$element_name]['value'] ?? '';
}
// textarea
if ($this->table_array[$element_name]['type'] == 'textarea') {
@@ -1168,7 +1170,7 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
if (!\CoreLibs\Combined\DateTime::checkDate($this->table_array[$key]['value'])) {
$this->msg .= sprintf(
$this->l->__(
'Please enter a vailid date (YYYY-MM-DD) for the <b>%s</b> Field!<br>'
'Please enter a valid date (YYYY-MM-DD) for the <b>%s</b> Field!<br>'
),
$this->table_array[$key]['output_name']
);
@@ -1178,14 +1180,22 @@ class Generate extends \CoreLibs\DB\Extended\ArrayIO
if (!\CoreLibs\Combined\DateTime::checkDateTime($this->table_array[$key]['value'])) {
$this->msg .= sprintf(
$this->l->__(
'Please enter a vailid time (HH:MM[:SS]) for the <b>%s</b> Field!<br>'
'Please enter a valid time (HH:mm[:SS]) for the <b>%s</b> Field!<br>'
),
$this->table_array[$key]['output_name']
);
}
break;
case 'datetime': // YYYY-MM-DD HH:MM[:SS]
// not implemented
if (!\CoreLibs\Combined\DateTime::checkDateTime($this->table_array[$key]['value'])) {
$this->msg .= sprintf(
$this->l->__(
'Please enter a valid date time (YYYY-MM-DD HH:mm) '
. 'for the <b>%s</b> Field!<br>'
),
$this->table_array[$key]['output_name']
);
}
break;
case 'intervalshort': // ony interval n [Y/M/D] only
if (preg_match("/^\d{1,3}\ ?[YMDymd]{1}$/", $this->table_array[$key]['value'])) {