Compare commits

..

12 Commits

6 changed files with 108 additions and 13 deletions

View File

@@ -1 +1 @@
9.2.0 9.3.5

View File

@@ -231,8 +231,6 @@ class Login
) { ) {
// attach db class // attach db class
$this->db = $db; $this->db = $db;
// log login data for this class only
$log->setLogFlag(\CoreLibs\Logging\Logger\Flag::per_class);
// attach logger // attach logger
$this->log = $log; $this->log = $log;
// attach session class // attach session class
@@ -1060,9 +1058,9 @@ class Login
]; ];
// set the default unit // set the default unit
if ($res['edit_default']) { if ($res['edit_default']) {
$_SESSION['UNIT_DEFAULT'] = $res['edit_access_id']; $_SESSION['UNIT_DEFAULT'] = (int)$res['edit_access_id'];
} }
$_SESSION['UNIT_UID'][$res['uid']] = $res['edit_access_id']; $_SESSION['UNIT_UID'][$res['uid']] = (int)$res['edit_access_id'];
// sub arrays for simple access // sub arrays for simple access
array_push($eauid, $res['edit_access_id']); array_push($eauid, $res['edit_access_id']);
$unit_acl[$res['edit_access_id']] = $res['level']; $unit_acl[$res['edit_access_id']] = $res['level'];
@@ -1148,18 +1146,18 @@ class Login
// user > page > group // user > page > group
// group ACL 0 // group ACL 0
if ($_SESSION['GROUP_ACL_LEVEL'] != -1) { if ($_SESSION['GROUP_ACL_LEVEL'] != -1) {
$this->acl['base'] = $_SESSION['GROUP_ACL_LEVEL']; $this->acl['base'] = (int)$_SESSION['GROUP_ACL_LEVEL'];
} }
// page ACL 1 // page ACL 1
if ( if (
isset($_SESSION['PAGES_ACL_LEVEL'][$this->page_name]) && isset($_SESSION['PAGES_ACL_LEVEL'][$this->page_name]) &&
$_SESSION['PAGES_ACL_LEVEL'][$this->page_name] != -1 $_SESSION['PAGES_ACL_LEVEL'][$this->page_name] != -1
) { ) {
$this->acl['base'] = $_SESSION['PAGES_ACL_LEVEL'][$this->page_name]; $this->acl['base'] = (int)$_SESSION['PAGES_ACL_LEVEL'][$this->page_name];
} }
// user ACL 2 // user ACL 2
if ($_SESSION['USER_ACL_LEVEL'] != -1) { if ($_SESSION['USER_ACL_LEVEL'] != -1) {
$this->acl['base'] = $_SESSION['USER_ACL_LEVEL']; $this->acl['base'] = (int)$_SESSION['USER_ACL_LEVEL'];
} }
} }
$_SESSION['BASE_ACL_LEVEL'] = $this->acl['base']; $_SESSION['BASE_ACL_LEVEL'] = $this->acl['base'];
@@ -2347,7 +2345,10 @@ HTML;
is_array($_SESSION['UNIT']) && is_array($_SESSION['UNIT']) &&
!array_key_exists($edit_access_id, $_SESSION['UNIT']) !array_key_exists($edit_access_id, $_SESSION['UNIT'])
) { ) {
return $_SESSION['UNIT_DEFAULT'] ?? null; $edit_access_id = null;
if (is_numeric($_SESSION['UNIT_DEFAULT'])) {
$edit_access_id = (int)$_SESSION['UNIT_DEFAULT'];
}
} }
return $edit_access_id; return $edit_access_id;
} }

View File

@@ -164,6 +164,10 @@ class Backend
); );
} }
$this->default_acl = $set_default_acl_level ?? DEFAULT_ACL_LEVEL; $this->default_acl = $set_default_acl_level ?? DEFAULT_ACL_LEVEL;
// if negative or larger than 100, reset to 0
if ($this->default_acl < 0 || $this->default_acl > 100) {
$this->default_acl = 0;
}
// queue key // queue key
if (preg_match("/^(add|save|delete|remove|move|up|down|push_live)$/", $this->action)) { if (preg_match("/^(add|save|delete|remove|move|up|down|push_live)$/", $this->action)) {

View File

@@ -452,6 +452,31 @@ class DateTime
return $days; return $days;
} }
} }
/**
* check if a weekend day (sat/sun) is in the given date range
* Can have time too, but is not needed
*
* @param string $start_date Y-m-d
* @param string $end_date Y-m-d
* @return bool True for has weekend, False for has not
*/
public static function dateRangeHasWeekend(
string $start_date,
string $end_date,
): bool {
$dd_start = new \DateTime($start_date);
$dd_end = new \DateTime($end_date);
if (
// starts with a weekend
$dd_start->format('N') >= 6 ||
// start day plus diff will be 6 and so fall into a weekend
((int)$dd_start->format('w') + $dd_start->diff($dd_end)->days) >= 6
) {
return true;
}
return false;
}
} }
// __END__ // __END__

View File

@@ -309,7 +309,7 @@ class IO
// basic vars // basic vars
// the dbh handler, if disconnected by command is null, bool:false on error, // the dbh handler, if disconnected by command is null, bool:false on error,
/** @var \PgSql\Connection|false|null */ /** @var \PgSql\Connection|false|null */
private \PgSql\Connection|false|null $dbh; private \PgSql\Connection|false|null $dbh = null;
/** @var bool DB_DEBUG ... (if set prints out debug msgs) */ /** @var bool DB_DEBUG ... (if set prints out debug msgs) */
private bool $db_debug = false; private bool $db_debug = false;
/** @var string the DB connected to */ /** @var string the DB connected to */
@@ -814,13 +814,13 @@ class IO
switch ($id) { switch ($id) {
case 'DB_ERROR': case 'DB_ERROR':
$this->log->error( $this->log->error(
$debug_id . ' :' . $prefix . $error_string, $prefix . $error_string,
$context $context
); );
break; break;
case 'DB_WARNING': case 'DB_WARNING':
$this->log->warning( $this->log->warning(
$debug_id . ' :' . $prefix . $error_string, $prefix . $error_string,
$context $context
); );
break; break;
@@ -2057,10 +2057,11 @@ class IO
/** /**
* this is only needed for Postgresql. Converts postgresql arrays to PHP * this is only needed for Postgresql. Converts postgresql arrays to PHP
* Recommended to rather user 'array_to_json' instead and convet JSON in PHP * Recommended to rather user 'array_to_json' instead and convet JSON in PHP
* or if ARRAY_AGG -> JSONB_AGG
* *
* @param string $text input text to parse to an array * @param string $text input text to parse to an array
* @return array<mixed> PHP array of the parsed data * @return array<mixed> PHP array of the parsed data
* @deprecated Recommended to use 'array_to_json' in PostgreSQL instead * @deprecated Recommended to use 'array_to_json/jsonb_agg' in PostgreSQL instead
*/ */
public function dbArrayParse(string $text): array public function dbArrayParse(string $text): array
{ {

View File

@@ -458,6 +458,47 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
]; ];
} }
/**
* Undocumented function
*
* @return array
*/
public function dateRangeHasWeekendProvider(): array
{
return [
'no weekend' => [
'2023-07-03',
'2023-07-04',
false
],
'start weekend sat' => [
'2023-07-01',
'2023-07-04',
true
],
'start weekend sun' => [
'2023-07-02',
'2023-07-04',
true
],
'end weekend sat' => [
'2023-07-03',
'2023-07-08',
true
],
'end weekend sun' => [
'2023-07-03',
'2023-07-09',
true
],
'long period > 6 days' => [
'2023-07-03',
'2023-07-27',
true
]
];
}
/** /**
* date string convert test * date string convert test
* *
@@ -780,6 +821,29 @@ final class CoreLibsCombinedDateTimeTest extends TestCase
$output $output
); );
} }
/**
* Undocumented function
*
* @covers ::dateRangeHasWeekend
* @dataProvider dateRangeHasWeekendProvider
* @testdox dateRangeHasWeekend $start_date and $end_date are expected weekend $expected [$_dataName]
*
* @param string $start_date
* @param string $end_date
* @param bool $expected
* @return void
*/
public function testDateRangeHasWeekend(
string $start_date,
string $end_date,
bool $expected
): void {
$this->assertEquals(
$expected,
\CoreLibs\Combined\DateTime::dateRangeHasWeekend($start_date, $end_date)
);
}
} }
// __END__ // __END__