Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d070c4e461 | ||
|
|
e57c336dba | ||
|
|
075fe967d5 | ||
|
|
0e5f637052 | ||
|
|
2e1b767a85 | ||
|
|
f78c67c378 | ||
|
|
75e69932fc |
@@ -27,7 +27,7 @@ use Phan\Config;
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
// "target_php_version" => "8.2",
|
// "target_php_version" => "8.2",
|
||||||
"minimum_target_php_version" => "8.1",
|
"minimum_target_php_version" => "8.2",
|
||||||
// turn color on (-C)
|
// turn color on (-C)
|
||||||
"color_issue_messages_if_supported" => true,
|
"color_issue_messages_if_supported" => true,
|
||||||
// If true, missing properties will be created when
|
// If true, missing properties will be created when
|
||||||
|
|||||||
@@ -6,7 +6,8 @@
|
|||||||
-- @param name col The column to be changed
|
-- @param name col The column to be changed
|
||||||
-- @param varchar identity_type [default=a] Allowed a, d, assigned, default
|
-- @param varchar identity_type [default=a] Allowed a, d, assigned, default
|
||||||
-- @param varchar col_type [default=''] Allowed smallint, int, bigint, int2, int4, int8
|
-- @param varchar col_type [default=''] Allowed smallint, int, bigint, int2, int4, int8
|
||||||
-- @raises EXCEPTON on column not found, no linked sequence, more than one linked sequence found
|
-- @returns varchar status tring
|
||||||
|
-- @raises EXCEPTON on column not found, no linked sequence, more than one linked sequence found, invalid col type
|
||||||
--
|
--
|
||||||
CREATE OR REPLACE FUNCTION upgrade_serial_to_identity(
|
CREATE OR REPLACE FUNCTION upgrade_serial_to_identity(
|
||||||
tbl regclass,
|
tbl regclass,
|
||||||
@@ -14,17 +15,18 @@ CREATE OR REPLACE FUNCTION upgrade_serial_to_identity(
|
|||||||
identity_type varchar = 'a',
|
identity_type varchar = 'a',
|
||||||
col_type varchar = ''
|
col_type varchar = ''
|
||||||
)
|
)
|
||||||
RETURNS void
|
RETURNS varchar
|
||||||
LANGUAGE plpgsql
|
LANGUAGE plpgsql
|
||||||
AS $$
|
AS $$
|
||||||
DECLARE
|
DECLARE
|
||||||
colnum smallint;
|
colnum SMALLINT;
|
||||||
seqid oid;
|
seqid OID;
|
||||||
count int;
|
count INT;
|
||||||
col_type_oid int;
|
col_type_oid INT;
|
||||||
col_type_len int;
|
col_type_len INT;
|
||||||
current_col_atttypid oid;
|
current_col_atttypid OID;
|
||||||
current_col_attlen int;
|
current_col_attlen INT;
|
||||||
|
status_string VARCHAR;
|
||||||
BEGIN
|
BEGIN
|
||||||
-- switch between always (default) or default identiy type
|
-- switch between always (default) or default identiy type
|
||||||
IF identity_type NOT IN ('a', 'd', 'assigned', 'default') THEN
|
IF identity_type NOT IN ('a', 'd', 'assigned', 'default') THEN
|
||||||
@@ -59,6 +61,10 @@ BEGIN
|
|||||||
RAISE EXCEPTION 'more than one linked sequence found';
|
RAISE EXCEPTION 'more than one linked sequence found';
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
IF col_type <> '' AND col_type NOT IN ('smallint', 'int', 'bigint', 'int2', 'int4', 'int8') THEN
|
||||||
|
RAISE EXCEPTION 'Invalid col type: %', col_type;
|
||||||
|
END IF;
|
||||||
|
|
||||||
-- drop the default
|
-- drop the default
|
||||||
EXECUTE 'ALTER TABLE ' || tbl || ' ALTER COLUMN ' || quote_ident(col) || ' DROP DEFAULT';
|
EXECUTE 'ALTER TABLE ' || tbl || ' ALTER COLUMN ' || quote_ident(col) || ' DROP DEFAULT';
|
||||||
|
|
||||||
@@ -74,34 +80,31 @@ BEGIN
|
|||||||
SET attidentity = identity_type
|
SET attidentity = identity_type
|
||||||
WHERE attrelid = tbl
|
WHERE attrelid = tbl
|
||||||
AND attname = col;
|
AND attname = col;
|
||||||
RAISE NOTICE 'Update to identity for table "%" and columen "%" with type "%"', tbl, col, identity_type;
|
status_string := 'Updated to identity for table "' || tbl || '" and columen "' || col || '" with type "' || identity_type || '"';
|
||||||
|
|
||||||
-- set type if requested and not empty
|
-- set type if requested and not empty
|
||||||
IF col_type <> '' THEN
|
IF col_type <> '' THEN
|
||||||
IF col_type IN ('smallint', 'int', 'bigint', 'int2', 'int4', 'int8') THEN
|
-- rewrite smallint, int, bigint
|
||||||
-- rewrite smallint, int, bigint
|
IF col_type = 'smallint' THEN
|
||||||
IF col_type = 'smallint' THEN
|
col_type := 'int2';
|
||||||
col_type := 'int2';
|
ELSIF col_type = 'int' THEN
|
||||||
ELSIF col_type = 'int' THEN
|
col_type := 'int4';
|
||||||
col_type := 'int4';
|
ELSIF col_type = 'bigint' THEN
|
||||||
ELSIF col_type = 'bigint' THEN
|
col_type := 'int8';
|
||||||
col_type := 'int8';
|
END IF;
|
||||||
END IF;
|
-- get the length and oid for selected
|
||||||
-- get the length and oid for selected
|
SELECT oid, typlen INTO col_type_oid, col_type_len FROM pg_type WHERE typname = col_type;
|
||||||
SELECT oid, typlen INTO col_type_oid, col_type_len FROM pg_type WHERE typname = col_type;
|
-- set only if diff or hight
|
||||||
-- set only if diff or hight
|
IF current_col_atttypid <> col_type_oid AND col_type_len > current_col_attlen THEN
|
||||||
IF current_col_atttypid <> col_type_oid AND col_type_len > current_col_attlen THEN
|
status_string := status_string || '. Change col type: ' || col_type;
|
||||||
RAISE NOTICE 'Change col type: %', col_type;
|
-- update type
|
||||||
-- update type
|
UPDATE pg_attribute
|
||||||
UPDATE pg_attribute
|
SET
|
||||||
SET
|
atttypid = col_type_oid, attlen = col_type_len
|
||||||
atttypid = col_type_oid, attlen = col_type_len
|
WHERE attrelid = tbl
|
||||||
WHERE attrelid = tbl
|
AND attname = col;
|
||||||
AND attname = col;
|
|
||||||
END IF;
|
|
||||||
ELSE
|
|
||||||
RAISE NOTICE 'Invalid col type: %', col_type;
|
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
RETURN status_string;
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
|||||||
@@ -12,5 +12,3 @@ CREATE TABLE edit_menu_group (
|
|||||||
flag VARCHAR,
|
flag VARCHAR,
|
||||||
order_number INT NOT NULL
|
order_number INT NOT NULL
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,5 +16,3 @@ CREATE TABLE edit_page_access (
|
|||||||
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
FOREIGN KEY (edit_access_right_id) REFERENCES edit_access_right (edit_access_right_id) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
|
||||||
enabled SMALLINT NOT NULL DEFAULT 0
|
enabled SMALLINT NOT NULL DEFAULT 0
|
||||||
) INHERITS (edit_generic) WITHOUT OIDS;
|
) INHERITS (edit_generic) WITHOUT OIDS;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1089,9 +1089,9 @@ final class CoreLibsACLLoginTest extends TestCase
|
|||||||
/** @var \CoreLibs\Create\Session&MockObject */
|
/** @var \CoreLibs\Create\Session&MockObject */
|
||||||
$session_mock = $this->createPartialMock(
|
$session_mock = $this->createPartialMock(
|
||||||
\CoreLibs\Create\Session::class,
|
\CoreLibs\Create\Session::class,
|
||||||
['startSession', 'checkActiveSession', 'sessionDestroy']
|
['getSessionId', 'checkActiveSession', 'sessionDestroy']
|
||||||
);
|
);
|
||||||
$session_mock->method('startSession')->willReturn('ACLLOGINTEST12');
|
$session_mock->method('getSessionId')->willReturn('ACLLOGINTEST12');
|
||||||
$session_mock->method('checkActiveSession')->willReturn(true);
|
$session_mock->method('checkActiveSession')->willReturn(true);
|
||||||
$session_mock->method('sessionDestroy')->will(
|
$session_mock->method('sessionDestroy')->will(
|
||||||
$this->returnCallback(function () {
|
$this->returnCallback(function () {
|
||||||
@@ -1792,9 +1792,9 @@ final class CoreLibsACLLoginTest extends TestCase
|
|||||||
/** @var \CoreLibs\Create\Session&MockObject */
|
/** @var \CoreLibs\Create\Session&MockObject */
|
||||||
$session_mock = $this->createPartialMock(
|
$session_mock = $this->createPartialMock(
|
||||||
\CoreLibs\Create\Session::class,
|
\CoreLibs\Create\Session::class,
|
||||||
['startSession', 'checkActiveSession', 'sessionDestroy']
|
['getSessionId', 'checkActiveSession', 'sessionDestroy']
|
||||||
);
|
);
|
||||||
$session_mock->method('startSession')->willReturn('ACLLOGINTEST34');
|
$session_mock->method('getSessionId')->willReturn('ACLLOGINTEST34');
|
||||||
$session_mock->method('checkActiveSession')->willReturn(true);
|
$session_mock->method('checkActiveSession')->willReturn(true);
|
||||||
$session_mock->method('sessionDestroy')->will(
|
$session_mock->method('sessionDestroy')->will(
|
||||||
$this->returnCallback(function () {
|
$this->returnCallback(function () {
|
||||||
@@ -1906,9 +1906,9 @@ final class CoreLibsACLLoginTest extends TestCase
|
|||||||
/** @var \CoreLibs\Create\Session&MockObject */
|
/** @var \CoreLibs\Create\Session&MockObject */
|
||||||
$session_mock = $this->createPartialMock(
|
$session_mock = $this->createPartialMock(
|
||||||
\CoreLibs\Create\Session::class,
|
\CoreLibs\Create\Session::class,
|
||||||
['startSession', 'checkActiveSession', 'sessionDestroy']
|
['getSessionId', 'checkActiveSession', 'sessionDestroy']
|
||||||
);
|
);
|
||||||
$session_mock->method('startSession')->willReturn('ACLLOGINTEST34');
|
$session_mock->method('getSessionId')->willReturn('ACLLOGINTEST34');
|
||||||
$session_mock->method('checkActiveSession')->willReturn(true);
|
$session_mock->method('checkActiveSession')->willReturn(true);
|
||||||
$session_mock->method('sessionDestroy')->will(
|
$session_mock->method('sessionDestroy')->will(
|
||||||
$this->returnCallback(function () {
|
$this->returnCallback(function () {
|
||||||
@@ -1994,9 +1994,9 @@ final class CoreLibsACLLoginTest extends TestCase
|
|||||||
/** @var \CoreLibs\Create\Session&MockObject */
|
/** @var \CoreLibs\Create\Session&MockObject */
|
||||||
$session_mock = $this->createPartialMock(
|
$session_mock = $this->createPartialMock(
|
||||||
\CoreLibs\Create\Session::class,
|
\CoreLibs\Create\Session::class,
|
||||||
['startSession', 'checkActiveSession', 'sessionDestroy']
|
['getSessionId', 'checkActiveSession', 'sessionDestroy']
|
||||||
);
|
);
|
||||||
$session_mock->method('startSession')->willReturn('ACLLOGINTEST34');
|
$session_mock->method('getSessionId')->willReturn('ACLLOGINTEST34');
|
||||||
$session_mock->method('checkActiveSession')->willReturn(true);
|
$session_mock->method('checkActiveSession')->willReturn(true);
|
||||||
$session_mock->method('sessionDestroy')->will(
|
$session_mock->method('sessionDestroy')->will(
|
||||||
$this->returnCallback(function () {
|
$this->returnCallback(function () {
|
||||||
@@ -2090,9 +2090,9 @@ final class CoreLibsACLLoginTest extends TestCase
|
|||||||
/** @var \CoreLibs\Create\Session&MockObject */
|
/** @var \CoreLibs\Create\Session&MockObject */
|
||||||
$session_mock = $this->createPartialMock(
|
$session_mock = $this->createPartialMock(
|
||||||
\CoreLibs\Create\Session::class,
|
\CoreLibs\Create\Session::class,
|
||||||
['startSession', 'checkActiveSession', 'sessionDestroy']
|
['getSessionId', 'checkActiveSession', 'sessionDestroy']
|
||||||
);
|
);
|
||||||
$session_mock->method('startSession')->willReturn('ACLLOGINTEST34');
|
$session_mock->method('getSessionId')->willReturn('ACLLOGINTEST34');
|
||||||
$session_mock->method('checkActiveSession')->willReturn(true);
|
$session_mock->method('checkActiveSession')->willReturn(true);
|
||||||
$session_mock->method('sessionDestroy')->will(
|
$session_mock->method('sessionDestroy')->will(
|
||||||
$this->returnCallback(function () {
|
$this->returnCallback(function () {
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
public function sessionProvider(): array
|
public function sessionProvider(): array
|
||||||
{
|
{
|
||||||
// 0: session name as parameter or for GLOBAL value
|
// 0: session name as parameter or for GLOBAL value
|
||||||
// 1: type p: parameter, g: global, d: php.ini default
|
|
||||||
// 2: mock data as array
|
// 2: mock data as array
|
||||||
// checkCliStatus: true/false,
|
// checkCliStatus: true/false,
|
||||||
// getSessionStatus: PHP_SESSION_DISABLED for abort,
|
// getSessionStatus: PHP_SESSION_DISABLED for abort,
|
||||||
@@ -31,13 +30,10 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
// checkActiveSession: true/false, [1st call, 2nd call]
|
// checkActiveSession: true/false, [1st call, 2nd call]
|
||||||
// getSessionId: string or false
|
// getSessionId: string or false
|
||||||
// 3: exepcted name (session)]
|
// 3: exepcted name (session)]
|
||||||
// 4: Exception thrown on error
|
// 4: auto write close flag
|
||||||
// 5: exception code, null for none
|
|
||||||
// 6: expected error string
|
|
||||||
return [
|
return [
|
||||||
'session parameter' => [
|
'session parameter' => [
|
||||||
'sessionNameParameter',
|
'sessionNameParameter',
|
||||||
'p',
|
|
||||||
[
|
[
|
||||||
'checkCliStatus' => false,
|
'checkCliStatus' => false,
|
||||||
'getSessionStatus' => PHP_SESSION_NONE,
|
'getSessionStatus' => PHP_SESSION_NONE,
|
||||||
@@ -47,12 +43,9 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
],
|
],
|
||||||
'sessionNameParameter',
|
'sessionNameParameter',
|
||||||
null,
|
null,
|
||||||
null,
|
|
||||||
'',
|
|
||||||
],
|
],
|
||||||
'session globals' => [
|
'session globals' => [
|
||||||
'sessionNameGlobals',
|
'sessionNameGlobals',
|
||||||
'g',
|
|
||||||
[
|
[
|
||||||
'checkCliStatus' => false,
|
'checkCliStatus' => false,
|
||||||
'getSessionStatus' => PHP_SESSION_NONE,
|
'getSessionStatus' => PHP_SESSION_NONE,
|
||||||
@@ -61,13 +54,10 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
'getSessionId' => '1234abcd4567'
|
'getSessionId' => '1234abcd4567'
|
||||||
],
|
],
|
||||||
'sessionNameGlobals',
|
'sessionNameGlobals',
|
||||||
null,
|
false,
|
||||||
null,
|
|
||||||
'',
|
|
||||||
],
|
],
|
||||||
'session name default' => [
|
'auto write close' => [
|
||||||
'',
|
'sessionNameAutoWriteClose',
|
||||||
'd',
|
|
||||||
[
|
[
|
||||||
'checkCliStatus' => false,
|
'checkCliStatus' => false,
|
||||||
'getSessionStatus' => PHP_SESSION_NONE,
|
'getSessionStatus' => PHP_SESSION_NONE,
|
||||||
@@ -75,109 +65,8 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
'checkActiveSession' => [false, true],
|
'checkActiveSession' => [false, true],
|
||||||
'getSessionId' => '1234abcd4567'
|
'getSessionId' => '1234abcd4567'
|
||||||
],
|
],
|
||||||
'',
|
'sessionNameAutoWriteClose',
|
||||||
null,
|
true,
|
||||||
null,
|
|
||||||
'',
|
|
||||||
],
|
|
||||||
// error checks
|
|
||||||
// 1: we are in cli
|
|
||||||
'on cli error' => [
|
|
||||||
'',
|
|
||||||
'd',
|
|
||||||
[
|
|
||||||
'checkCliStatus' => true,
|
|
||||||
'getSessionStatus' => PHP_SESSION_NONE,
|
|
||||||
'setSessionName' => true,
|
|
||||||
'checkActiveSession' => [false, true],
|
|
||||||
'getSessionId' => '1234abcd4567'
|
|
||||||
],
|
|
||||||
'',
|
|
||||||
'RuntimeException',
|
|
||||||
1,
|
|
||||||
'[SESSION] No sessions in php cli'
|
|
||||||
],
|
|
||||||
// 2: session disabled
|
|
||||||
'session disabled error' => [
|
|
||||||
'',
|
|
||||||
'd',
|
|
||||||
[
|
|
||||||
'checkCliStatus' => false,
|
|
||||||
'getSessionStatus' => PHP_SESSION_DISABLED,
|
|
||||||
'setSessionName' => true,
|
|
||||||
'checkActiveSession' => [false, true],
|
|
||||||
'getSessionId' => '1234abcd4567'
|
|
||||||
],
|
|
||||||
'',
|
|
||||||
'RuntimeException',
|
|
||||||
2,
|
|
||||||
'[SESSION] Sessions are disabled'
|
|
||||||
],
|
|
||||||
// 3: invalid session name: string
|
|
||||||
'invalid name chars error' => [
|
|
||||||
'1invalid$session#;',
|
|
||||||
'p',
|
|
||||||
[
|
|
||||||
'checkCliStatus' => false,
|
|
||||||
'getSessionStatus' => PHP_SESSION_NONE,
|
|
||||||
'setSessionName' => false,
|
|
||||||
'checkActiveSession' => [false, true],
|
|
||||||
'getSessionId' => '1234abcd4567'
|
|
||||||
],
|
|
||||||
'',
|
|
||||||
'UnexpectedValueException',
|
|
||||||
3,
|
|
||||||
'[SESSION] Invalid session name: 1invalid$session#;'
|
|
||||||
],
|
|
||||||
// 3: invalid session name: only numbers
|
|
||||||
'invalid name numbers only error' => [
|
|
||||||
'123',
|
|
||||||
'p',
|
|
||||||
[
|
|
||||||
'checkCliStatus' => false,
|
|
||||||
'getSessionStatus' => PHP_SESSION_NONE,
|
|
||||||
'setSessionName' => false,
|
|
||||||
'checkActiveSession' => [false, true],
|
|
||||||
'getSessionId' => '1234abcd4567'
|
|
||||||
],
|
|
||||||
'',
|
|
||||||
'UnexpectedValueException',
|
|
||||||
3,
|
|
||||||
'[SESSION] Invalid session name: 123'
|
|
||||||
],
|
|
||||||
// 3: invalid session name: invalid name short
|
|
||||||
// 3: invalid session name: too long (128)
|
|
||||||
// 4: failed to start session (2nd false on check active session)
|
|
||||||
'invalid name numbers only error' => [
|
|
||||||
'',
|
|
||||||
'd',
|
|
||||||
[
|
|
||||||
'checkCliStatus' => false,
|
|
||||||
'getSessionStatus' => PHP_SESSION_NONE,
|
|
||||||
'setSessionName' => true,
|
|
||||||
'checkActiveSession' => [false, false],
|
|
||||||
'getSessionId' => '1234abcd4567'
|
|
||||||
],
|
|
||||||
'',
|
|
||||||
'RuntimeException',
|
|
||||||
4,
|
|
||||||
'[SESSION] Failed to activate session'
|
|
||||||
],
|
|
||||||
// 5: get session id return false
|
|
||||||
'invalid name numbers only error' => [
|
|
||||||
'',
|
|
||||||
'd',
|
|
||||||
[
|
|
||||||
'checkCliStatus' => false,
|
|
||||||
'getSessionStatus' => PHP_SESSION_NONE,
|
|
||||||
'setSessionName' => true,
|
|
||||||
'checkActiveSession' => [false, true],
|
|
||||||
'getSessionId' => false
|
|
||||||
],
|
|
||||||
'',
|
|
||||||
'UnexpectedValueException',
|
|
||||||
5,
|
|
||||||
'[SESSION] getSessionId did not return a session id'
|
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -190,32 +79,23 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
* @testdox startSession $input name for $type will be $expected (error: $expected_error) [$_dataName]
|
* @testdox startSession $input name for $type will be $expected (error: $expected_error) [$_dataName]
|
||||||
*
|
*
|
||||||
* @param string $input
|
* @param string $input
|
||||||
* @param string $type
|
|
||||||
* @param array<mixed> $mock_data
|
* @param array<mixed> $mock_data
|
||||||
* @param string $expected
|
* @param string $expected
|
||||||
* @param string|null $exception
|
|
||||||
* @param string $expected_error
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function testStartSession(
|
public function testStartSession(
|
||||||
string $input,
|
string $input,
|
||||||
string $type,
|
|
||||||
array $mock_data,
|
array $mock_data,
|
||||||
string $expected,
|
string $expected,
|
||||||
?string $exception,
|
?bool $auto_write_close,
|
||||||
?int $exception_code,
|
|
||||||
string $expected_error
|
|
||||||
): void {
|
): void {
|
||||||
// override expected
|
|
||||||
if ($type == 'd') {
|
|
||||||
$expected = ini_get('session.name');
|
|
||||||
}
|
|
||||||
/** @var \CoreLibs\Create\Session&MockObject $session_mock */
|
/** @var \CoreLibs\Create\Session&MockObject $session_mock */
|
||||||
$session_mock = $this->createPartialMock(
|
$session_mock = $this->createPartialMock(
|
||||||
\CoreLibs\Create\Session::class,
|
\CoreLibs\Create\Session::class,
|
||||||
[
|
[
|
||||||
'checkCliStatus', 'getSessionStatus', 'checkActiveSession',
|
'checkCliStatus',
|
||||||
'setSessionName', 'startSessionCall', 'getSessionId',
|
'getSessionStatus', 'checkActiveSession',
|
||||||
|
'getSessionId',
|
||||||
'getSessionName'
|
'getSessionName'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
@@ -234,12 +114,8 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
$mock_data['checkActiveSession'][0],
|
$mock_data['checkActiveSession'][0],
|
||||||
$mock_data['checkActiveSession'][1],
|
$mock_data['checkActiveSession'][1],
|
||||||
);
|
);
|
||||||
// dummy set for session name
|
|
||||||
$session_mock->method('setSessionName')->with($input)->willReturn($mock_data['setSessionName']);
|
|
||||||
// set session name & return bsed on request data
|
// set session name & return bsed on request data
|
||||||
$session_mock->method('getSessionName')->willReturn($expected);
|
$session_mock->method('getSessionName')->willReturn($expected);
|
||||||
// will not return anything
|
|
||||||
$session_mock->method('startSessionCall');
|
|
||||||
// in test case only return string
|
// in test case only return string
|
||||||
// false: will return false
|
// false: will return false
|
||||||
$session_mock->method('getSessionId')->willReturn($mock_data['getSessionId']);
|
$session_mock->method('getSessionId')->willReturn($mock_data['getSessionId']);
|
||||||
@@ -247,25 +123,7 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
// regex for session id
|
// regex for session id
|
||||||
$ression_id_regex = "/^\w+$/";
|
$ression_id_regex = "/^\w+$/";
|
||||||
|
|
||||||
if ($exception !== null) {
|
$session_id = $session_mock->getSessionId();
|
||||||
$this->expectException($exception);
|
|
||||||
$this->expectExceptionCode($exception_code);
|
|
||||||
}
|
|
||||||
|
|
||||||
unset($GLOBALS['SET_SESSION_NAME']);
|
|
||||||
$session_id = '';
|
|
||||||
switch ($type) {
|
|
||||||
case 'p':
|
|
||||||
$session_id = $session_mock->startSession($input);
|
|
||||||
break;
|
|
||||||
case 'g':
|
|
||||||
$GLOBALS['SET_SESSION_NAME'] = $input;
|
|
||||||
$session_id = $session_mock->startSession();
|
|
||||||
break;
|
|
||||||
case 'd':
|
|
||||||
$session_id = $session_mock->startSession();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// asert checks
|
// asert checks
|
||||||
if (!empty($session_id)) {
|
if (!empty($session_id)) {
|
||||||
$this->assertMatchesRegularExpression(
|
$this->assertMatchesRegularExpression(
|
||||||
@@ -284,6 +142,73 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function providerSessionException(): array
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'not cli' => [
|
||||||
|
'TEST_EXCEPTION',
|
||||||
|
\RuntimeException::class,
|
||||||
|
1,
|
||||||
|
'/^\[SESSION\] No sessions in php cli$/',
|
||||||
|
],
|
||||||
|
/* 'session disabled ' => [
|
||||||
|
'TEST_EXCEPTION',
|
||||||
|
\RuntimeException::class,
|
||||||
|
2,
|
||||||
|
'/^\[SESSION\] Sessions are disabled/'
|
||||||
|
],
|
||||||
|
'invalid session name' => [
|
||||||
|
'--#as^-292p-',
|
||||||
|
\UnexpectedValueException::class,
|
||||||
|
3,
|
||||||
|
'/^\[SESSION\] Invalid session name: /'
|
||||||
|
],
|
||||||
|
'failed to activate session' => [
|
||||||
|
'TEST_EXCEPTION',
|
||||||
|
\RuntimeException::class,
|
||||||
|
4,
|
||||||
|
'/^\[SESSION\] Failed to activate session/'
|
||||||
|
],
|
||||||
|
'not a valid session id returned' => [
|
||||||
|
\UnexpectedValueException::class,
|
||||||
|
5,
|
||||||
|
'/^\[SESSION\] getSessionId did not return a session id/'
|
||||||
|
], */
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* exception checks
|
||||||
|
*
|
||||||
|
* @covers ::initSession
|
||||||
|
* @dataProvider providerSessionException
|
||||||
|
* @testdox create session $session_name with exception $exception ($exception_code) [$_dataName]
|
||||||
|
*
|
||||||
|
* @param string $session_name
|
||||||
|
* @param string $exception
|
||||||
|
* @param int $exception_code
|
||||||
|
* @param string $expected_error
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testSessionException(
|
||||||
|
string $session_name,
|
||||||
|
string $exception,
|
||||||
|
int $exception_code,
|
||||||
|
string $expected_error,
|
||||||
|
): void {
|
||||||
|
//
|
||||||
|
// throws only on new Object creation
|
||||||
|
$this->expectException($exception);
|
||||||
|
$this->expectExceptionCode($exception_code);
|
||||||
|
$this->expectExceptionMessageMatches($expected_error);
|
||||||
|
new \CoreLibs\Create\Session($session_name);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* provider for session name check
|
* provider for session name check
|
||||||
*
|
*
|
||||||
@@ -347,109 +272,147 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
public function sessionDataProvider(): array
|
public function providerSessionData(): array
|
||||||
{
|
{
|
||||||
return [
|
return [
|
||||||
'test' => [
|
'test' => [
|
||||||
'foo',
|
'foo',
|
||||||
'bar',
|
'bar',
|
||||||
'bar',
|
'bar',
|
||||||
|
null,
|
||||||
],
|
],
|
||||||
'int key test' => [
|
'int key test' => [
|
||||||
123,
|
123,
|
||||||
'bar',
|
'bar',
|
||||||
'bar',
|
'bar',
|
||||||
|
\UnexpectedValueException::class
|
||||||
],
|
],
|
||||||
// more complex value tests
|
// more complex value tests
|
||||||
'array values' => [
|
'array values' => [
|
||||||
'array',
|
'array',
|
||||||
[1, 2, 3],
|
[1, 2, 3],
|
||||||
[1, 2, 3],
|
[1, 2, 3],
|
||||||
|
null,
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NOTE: with auto start session, we cannot test this in the command line
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* method call test
|
* method call test
|
||||||
*
|
*
|
||||||
* @covers ::setS
|
* @covers ::set
|
||||||
* @covers ::getS
|
* @covers ::get
|
||||||
* @covers ::issetS
|
* @covers ::isset
|
||||||
* @covers ::unsetS
|
* @covers ::unset
|
||||||
* @dataProvider sessionDataProvider
|
* @dataProvider providerSessionData
|
||||||
* @testdox setS/getS/issetS/unsetS $name with $input is $expected [$_dataName]
|
* @testdox set/get/isset/unset $name with $input is $expected ($exception) [$_dataName]
|
||||||
*
|
*
|
||||||
* @param string|int $name
|
* @param string|int $name
|
||||||
* @param mixed $input
|
* @param mixed $input
|
||||||
* @param mixed $expected
|
* @param mixed $expected
|
||||||
|
* @param ?mixed $exception
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function testMethodSetGet($name, $input, $expected): void
|
public function testMethodSetGet($name, $input, $expected, $exception): void
|
||||||
{
|
{
|
||||||
$session = new \CoreLibs\Create\Session();
|
if (\CoreLibs\Get\System::checkCLI()) {
|
||||||
$session->setS($name, $input);
|
$this->markTestSkipped('Cannot run testMethodSetGet in CLI');
|
||||||
|
}
|
||||||
|
$session = new \CoreLibs\Create\Session('TEST_METHOD');
|
||||||
|
if ($expected !== null) {
|
||||||
|
$this->expectException($exception);
|
||||||
|
}
|
||||||
|
$session->set($name, $input);
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$expected,
|
$expected,
|
||||||
$session->getS($name),
|
$session->get($name),
|
||||||
'method set assert'
|
'method set assert'
|
||||||
);
|
);
|
||||||
// isset true
|
// isset true
|
||||||
$this->assertTrue(
|
$this->assertTrue(
|
||||||
$session->issetS($name),
|
$session->isset($name),
|
||||||
'method isset assert ok'
|
'method isset assert ok'
|
||||||
);
|
);
|
||||||
$session->unsetS($name);
|
$session->unset($name);
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'',
|
'',
|
||||||
$session->getS($name),
|
$session->get($name),
|
||||||
'method unset assert'
|
'method unset assert'
|
||||||
);
|
);
|
||||||
// iset false
|
// isset false
|
||||||
$this->assertFalse(
|
$this->assertFalse(
|
||||||
$session->issetS($name),
|
$session->isset($name),
|
||||||
'method isset assert false'
|
'method isset assert false'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* magic call test
|
* Undocumented function
|
||||||
*
|
*
|
||||||
* @covers ::__set
|
* @return array
|
||||||
* @covers ::__get
|
*/
|
||||||
* @covers ::__isset
|
public function providerSessionDataMany(): array
|
||||||
* @covers ::__unset
|
{
|
||||||
* @dataProvider sessionDataProvider
|
return [
|
||||||
* @testdox __set/__get/__iseet/__unset $name with $input is $expected [$_dataName]
|
'valid set' => [
|
||||||
|
[
|
||||||
|
'foo 1' => 'bar 1',
|
||||||
|
'foo 2' => 'bar 1',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'foo 1' => 'bar 1',
|
||||||
|
'foo 2' => 'bar 1',
|
||||||
|
],
|
||||||
|
null,
|
||||||
|
],
|
||||||
|
'invalid entry' => [
|
||||||
|
[
|
||||||
|
'foo 1' => 'bar 1',
|
||||||
|
123 => 'bar 1',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'foo 1' => 'bar 1',
|
||||||
|
],
|
||||||
|
\UnexpectedValueException::class
|
||||||
|
]
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undocumented function
|
||||||
*
|
*
|
||||||
* @param string|int $name
|
* @covers ::setMany
|
||||||
* @param mixed $input
|
* @covers ::getMany
|
||||||
* @param mixed $expected
|
* @dataProvider providerSessionDataMany
|
||||||
|
* @testdox setMany/getMany/unsetMany $set is $expected ($exception) [$_dataName]
|
||||||
|
*
|
||||||
|
* @param array<string|int,mixed> $set
|
||||||
|
* @param array<string,mixed> $expected
|
||||||
|
* @param ?mixed $exception
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function testMagicSetGet($name, $input, $expected): void
|
public function testMany($set, $expected, $exception): void
|
||||||
{
|
{
|
||||||
$session = new \CoreLibs\Create\Session();
|
if (\CoreLibs\Get\System::checkCLI()) {
|
||||||
$session->$name = $input;
|
$this->markTestSkipped('Cannot run testMethodSetGet in CLI');
|
||||||
|
}
|
||||||
|
$session = new \CoreLibs\Create\Session('TEST_METHOD');
|
||||||
|
if ($expected !== null) {
|
||||||
|
$this->expectException($exception);
|
||||||
|
}
|
||||||
|
$session->setMany($set);
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$expected,
|
$expected,
|
||||||
$session->$name,
|
$session->getMany(array_keys($set)),
|
||||||
'magic set assert'
|
'set many failed'
|
||||||
);
|
);
|
||||||
// isset true
|
$session->unsetMany(array_keys($set));
|
||||||
$this->assertTrue(
|
|
||||||
isset($session->$name),
|
|
||||||
'magic isset assert ok'
|
|
||||||
);
|
|
||||||
unset($session->$name);
|
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'',
|
[],
|
||||||
$session->$name,
|
$session->getMany(array_keys($set)),
|
||||||
'magic unset assert'
|
'unset many failed'
|
||||||
);
|
|
||||||
// isset true
|
|
||||||
$this->assertFalse(
|
|
||||||
isset($session->$name),
|
|
||||||
'magic isset assert false'
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -463,27 +426,30 @@ final class CoreLibsCreateSessionTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function testUnsetAll(): void
|
public function testUnsetAll(): void
|
||||||
{
|
{
|
||||||
|
if (\CoreLibs\Get\System::checkCLI()) {
|
||||||
|
$this->markTestSkipped('Cannot run testUnsetAll in CLI');
|
||||||
|
}
|
||||||
$test_values = [
|
$test_values = [
|
||||||
'foo' => 'abc',
|
'foo' => 'abc',
|
||||||
'bar' => '123'
|
'bar' => '123'
|
||||||
];
|
];
|
||||||
$session = new \CoreLibs\Create\Session();
|
$session = new \CoreLibs\Create\Session('TEST_UNSET');
|
||||||
foreach ($test_values as $name => $value) {
|
foreach ($test_values as $name => $value) {
|
||||||
$session->setS($name, $value);
|
$session->set($name, $value);
|
||||||
// confirm set
|
// confirm set
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
$value,
|
$value,
|
||||||
$session->getS($name),
|
$session->get($name),
|
||||||
'set assert: ' . $name
|
'set assert: ' . $name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// unset all
|
// unset all
|
||||||
$session->unsetAllS();
|
$session->clear();
|
||||||
// check unset
|
// check unset
|
||||||
foreach (array_keys($test_values) as $name) {
|
foreach (array_keys($test_values) as $name) {
|
||||||
$this->assertEquals(
|
$this->assertEquals(
|
||||||
'',
|
'',
|
||||||
$session->getS($name),
|
$session->get($name),
|
||||||
'unsert assert: ' . $name
|
'unsert assert: ' . $name
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -228,7 +228,7 @@ print "RETURN ROW PARAMS: " . print_r(
|
|||||||
$db->dbPrepare("ins_test_foo", "INSERT INTO test_foo (test) VALUES ($1) RETURNING test");
|
$db->dbPrepare("ins_test_foo", "INSERT INTO test_foo (test) VALUES ($1) RETURNING test");
|
||||||
$status = $db->dbExecute("ins_test_foo", ['BAR TEST ' . time()]);
|
$status = $db->dbExecute("ins_test_foo", ['BAR TEST ' . time()]);
|
||||||
print "PREPARE INSERT[ins_test_foo] STATUS: " . Support::printToString($status) . " |<br>"
|
print "PREPARE INSERT[ins_test_foo] STATUS: " . Support::printToString($status) . " |<br>"
|
||||||
. "QUERY: " . $db->dbGetPrepareCursorValue('ins_test_foo', 'query') . " |<br>"
|
. "QUERY: " . Support::printToString($db->dbGetPrepareCursorValue('ins_test_foo', 'query')) . " |<br>"
|
||||||
. "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | "
|
. "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | "
|
||||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||||
. "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
. "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||||
@@ -255,7 +255,7 @@ SQL;
|
|||||||
$db->dbPrepare("ins_test_foo_eom", $query);
|
$db->dbPrepare("ins_test_foo_eom", $query);
|
||||||
$status = $db->dbExecute("ins_test_foo_eom", ['EOM BAR TEST ' . time()]);
|
$status = $db->dbExecute("ins_test_foo_eom", ['EOM BAR TEST ' . time()]);
|
||||||
print "EOM STRING PREPARE INSERT[ins_test_foo_eom] STATUS: " . Support::printToString($status) . " |<br>"
|
print "EOM STRING PREPARE INSERT[ins_test_foo_eom] STATUS: " . Support::printToString($status) . " |<br>"
|
||||||
. "QUERY: " . $db->dbGetPrepareCursorValue('ins_test_foo_eom', 'query') . " |<br>"
|
. "QUERY: " . Support::printToString($db->dbGetPrepareCursorValue('ins_test_foo_eom', 'query')) . " |<br>"
|
||||||
. "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | "
|
. "PRIMARY KEY: " . Support::printToString($db->dbGetInsertPK()) . " | "
|
||||||
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
. "RETURNING EXT: " . print_r($db->dbGetReturningExt(), true) . " | "
|
||||||
. "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
. "RETURNING RETURN: " . print_r($db->dbGetReturningArray(), true) . "<br>";
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ define('USE_DATABASE', false);
|
|||||||
require 'config.php';
|
require 'config.php';
|
||||||
// define log file id
|
// define log file id
|
||||||
$LOG_FILE_ID = 'classTest-lang';
|
$LOG_FILE_ID = 'classTest-lang';
|
||||||
|
$SET_SESSION_NAME = EDIT_SESSION_NAME;
|
||||||
|
$session = new CoreLibs\Create\Session($SET_SESSION_NAME);
|
||||||
ob_end_flush();
|
ob_end_flush();
|
||||||
|
|
||||||
$PAGE_NAME = 'TEST CLASS: LANG';
|
$PAGE_NAME = 'TEST CLASS: LANG';
|
||||||
@@ -70,10 +72,12 @@ print "[OVERRIDE]: " . Support::printAr($get_locale) . "<br>";
|
|||||||
// DEFAULT_DOMAIN
|
// DEFAULT_DOMAIN
|
||||||
// DEFAULT_CHARSET (should be set from DEFAULT_LOCALE)
|
// DEFAULT_CHARSET (should be set from DEFAULT_LOCALE)
|
||||||
// LOCALE_PATH
|
// LOCALE_PATH
|
||||||
$_SESSION['DEFAULT_LOCALE'] = 'ja_JP.UTF-8';
|
$session->setMany([
|
||||||
$_SESSION['DEFAULT_CHARSET'] = 'UTF-8';
|
'DEFAULT_LOCALE' => 'ja_JP.UTF-8',
|
||||||
$_SESSION['DEFAULT_DOMAIN'] = 'admin';
|
'DEFAULT_CHARSET' => 'UTF-8',
|
||||||
$_SESSION['LOCALE_PATH'] = BASE . INCLUDES . LOCALE;
|
'DEFAULT_DOMAIN' => 'admin',
|
||||||
|
'LOCALE_PATH' => BASE . INCLUDES . LOCALE,
|
||||||
|
]);
|
||||||
$get_locale = Language\GetLocale::setLocaleFromSession(
|
$get_locale = Language\GetLocale::setLocaleFromSession(
|
||||||
SITE_LOCALE,
|
SITE_LOCALE,
|
||||||
SITE_DOMAIN,
|
SITE_DOMAIN,
|
||||||
@@ -86,10 +90,12 @@ print "[SESSION SET]: " . Support::printAr($get_locale) . "<br>";
|
|||||||
// DEFAULT_DOMAIN
|
// DEFAULT_DOMAIN
|
||||||
// DEFAULT_CHARSET (should be set from DEFAULT_LOCALE)
|
// DEFAULT_CHARSET (should be set from DEFAULT_LOCALE)
|
||||||
// LOCALE_PATH
|
// LOCALE_PATH
|
||||||
$_SESSION['DEFAULT_LOCALE'] = '00000#####';
|
$session->setMany([
|
||||||
$_SESSION['DEFAULT_CHARSET'] = '';
|
'DEFAULT_LOCALE' => '00000#####',
|
||||||
$_SESSION['DEFAULT_DOMAIN'] = 'admin';
|
'DEFAULT_CHARSET' => '',
|
||||||
$_SESSION['LOCALE_PATH'] = BASE . INCLUDES . LOCALE;
|
'DEFAULT_DOMAIN' => 'admin',
|
||||||
|
'LOCALE_PATH' => BASE . INCLUDES . LOCALE,
|
||||||
|
]);
|
||||||
$get_locale = Language\GetLocale::setLocaleFromSession(
|
$get_locale = Language\GetLocale::setLocaleFromSession(
|
||||||
SITE_LOCALE,
|
SITE_LOCALE,
|
||||||
SITE_DOMAIN,
|
SITE_DOMAIN,
|
||||||
|
|||||||
@@ -205,8 +205,8 @@ print "HOST: " . HOST_NAME . " => DB HOST: " . DB_CONFIG_NAME . " => " . Support
|
|||||||
print "DS is: " . DIRECTORY_SEPARATOR . "<br>";
|
print "DS is: " . DIRECTORY_SEPARATOR . "<br>";
|
||||||
print "SERVER HOST: " . $_SERVER['HTTP_HOST'] . "<br>";
|
print "SERVER HOST: " . $_SERVER['HTTP_HOST'] . "<br>";
|
||||||
|
|
||||||
print "ECUID: " . $_SESSION['ECUID'] . "<br>";
|
print "ECUID: " . $session->get('ECUID') . "<br>";
|
||||||
print "ECUUID: " . $_SESSION['ECUUID'] . "<br>";
|
print "ECUUID: " . $session->get('ECUUID') . "<br>";
|
||||||
|
|
||||||
print "</body></html>";
|
print "</body></html>";
|
||||||
|
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ $log = new CoreLibs\Logging\Logging([
|
|||||||
'log_file_id' => $LOG_FILE_ID,
|
'log_file_id' => $LOG_FILE_ID,
|
||||||
'log_per_date' => true,
|
'log_per_date' => true,
|
||||||
]);
|
]);
|
||||||
|
use CoreLibs\Debug\Support;
|
||||||
use CoreLibs\Create\Session;
|
use CoreLibs\Create\Session;
|
||||||
$session = new Session();
|
|
||||||
|
|
||||||
$PAGE_NAME = 'TEST CLASS: SESSION';
|
$PAGE_NAME = 'TEST CLASS: SESSION';
|
||||||
print "<!DOCTYPE html>";
|
print "<!DOCTYPE html>";
|
||||||
@@ -56,50 +56,30 @@ print '<div><a href="class_test.php">Class Test Master</a></div>';
|
|||||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||||
|
|
||||||
$session_name = 'class-test-session';
|
$session_name = 'class-test-session';
|
||||||
|
print "Valid session name static check for '" . $session_name . "': "
|
||||||
|
. Support::prBl(Session::checkValidSessionName($session_name)) . "<br>";
|
||||||
$var = 'foo';
|
$var = 'foo';
|
||||||
$value = 'bar';
|
$value = 'bar';
|
||||||
|
$session = new Session($session_name);
|
||||||
|
|
||||||
foreach (['123', '123-123', '123abc'] as $_session_name) {
|
foreach (['123', '123-123', '123abc'] as $_session_name) {
|
||||||
print "[UNSET] Session Name valid for " . $_session_name . ": "
|
print "[UNSET] Session Name valid for '" . $_session_name . "': "
|
||||||
. ($session->checkValidSessionName($_session_name) ? 'Valid' : 'Invalid') . "<br>";
|
. ($session->checkValidSessionName($_session_name) ? 'Valid' : 'Invalid') . "<br>";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "Global session name: " . ($GLOBALS['SET_SESSION_NAME'] ?? '-') . "<br>";
|
echo "Global session name: " . ($GLOBALS['SET_SESSION_NAME'] ?? '-') . "<br>";
|
||||||
|
|
||||||
print "[UNSET] Current session id: " . $session->getSessionId() . "<br>";
|
|
||||||
print "[UNSET] Current session name: " . $session->getSessionName() . "<br>";
|
|
||||||
print "[UNSET] Current session active: " . ($session->checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
|
||||||
print "[UNSET] Current session status: " . getSessionStatusString($session->getSessionStatus()) . "<br>";
|
|
||||||
if (isset($_SESSION)) {
|
|
||||||
print "[UNSET] _SESSION is: set<br>";
|
|
||||||
} else {
|
|
||||||
print "[UNSET] _SESSION is: not set<br>";
|
|
||||||
}
|
|
||||||
#
|
|
||||||
print "[UNSET] To set session name valid: "
|
|
||||||
. ($session->checkValidSessionName($session_name) ? 'Valid' : 'Invalid') . "<br>";
|
|
||||||
try {
|
|
||||||
$session_id = $session->startSession($session_name);
|
|
||||||
print "[SET] Current session id: " . $session_id . "<br>";
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
print "[FAILED] Session start failed:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
|
|
||||||
}
|
|
||||||
// set again
|
|
||||||
try {
|
|
||||||
$session_id = $session->startSession($session_name);
|
|
||||||
print "[2 SET] Current session id: " . $session_id . "<br>";
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
print "[2 FAILED] Session start failed:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
|
|
||||||
}
|
|
||||||
print "[SET] Current session id: " . $session->getSessionId() . "<br>";
|
print "[SET] Current session id: " . $session->getSessionId() . "<br>";
|
||||||
print "[SET] Current session name: " . $session->getSessionName() . "<br>";
|
print "[SET] Current session name: " . $session->getSessionName() . "<br>";
|
||||||
print "[SET] Current session active: " . ($session->checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
print "[SET] Current session active: " . ($session->checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
||||||
|
print "[SET] Current session auto write close: " . ($session->checkAutoWriteClose() ? 'Yes' : 'No') . "<br>";
|
||||||
print "[SET] Current session status: " . getSessionStatusString($session->getSessionStatus()) . "<br>";
|
print "[SET] Current session status: " . getSessionStatusString($session->getSessionStatus()) . "<br>";
|
||||||
if (isset($_SESSION)) {
|
if (isset($_SESSION)) {
|
||||||
print "[SET] _SESSION is: set<br>";
|
print "[SET] _SESSION is: set<br>";
|
||||||
} else {
|
} else {
|
||||||
print "[SET] _SESSION is: not set<br>";
|
print "[SET] _SESSION is: not set<br>";
|
||||||
}
|
}
|
||||||
|
#
|
||||||
if (!isset($_SESSION['counter'])) {
|
if (!isset($_SESSION['counter'])) {
|
||||||
$_SESSION['counter'] = 0;
|
$_SESSION['counter'] = 0;
|
||||||
}
|
}
|
||||||
@@ -111,62 +91,85 @@ print "[READ] Confirm " . $var . " is " . $value . ": "
|
|||||||
. (($_SESSION[$var] ?? '') == $value ? 'Matching' : 'Not matching') . "<br>";
|
. (($_SESSION[$var] ?? '') == $value ? 'Matching' : 'Not matching') . "<br>";
|
||||||
|
|
||||||
// test set wrappers methods
|
// test set wrappers methods
|
||||||
$session->setS('setwrap', 'YES, method set _SESSION var');
|
$session->set('setwrap', 'YES, method set _SESSION var');
|
||||||
print "[READ WRAP] A setwrap: " . $session->getS('setwrap') . "<br>";
|
print "[READ WRAP] A setwrap: " . $session->get('setwrap') . "<br>";
|
||||||
print "[READ WRAP] Isset: " . ($session->issetS('setwrap') ? 'Yes' : 'No') . "<br>";
|
print "[READ WRAP] Isset: " . ($session->isset('setwrap') ? 'Yes' : 'No') . "<br>";
|
||||||
$session->unsetS('setwrap');
|
$session->unset('setwrap');
|
||||||
print "[READ WRAP] unset setwrap: " . $session->getS('setwrap') . "<br>";
|
print "[READ WRAP] unset setwrap: " . $session->get('setwrap') . "<br>";
|
||||||
print "[READ WRAP] unset Isset: " . ($session->issetS('setwrap') ? 'Yes' : 'No') . "<br>";
|
print "[READ WRAP] unset Isset: " . ($session->isset('setwrap') ? 'Yes' : 'No') . "<br>";
|
||||||
// test __get/__set
|
$session->set('foo 3', 'brause');
|
||||||
$session->setwrap = 'YES, magic set _SESSION var'; /** @phpstan-ignore-line GET/SETTER */
|
// set many
|
||||||
print "[READ MAGIC] A setwrap: " . ($session->setwrap ?? '') . "<br>";
|
$session->setMany([
|
||||||
print "[READ MAGIC] Isset: " . (isset($session->setwrap) ? 'Yes' : 'No') . "<br>";
|
'foo 1' => 'bar',
|
||||||
unset($session->setwrap);
|
'foo 2' => 'kamel',
|
||||||
print "[READ MAGIC] unset setwrap: " . ($session->setwrap ?? '') . "<br>";
|
]);
|
||||||
print "[READ MAGIC] unset Isset: " . (isset($session->setwrap) ? 'Yes' : 'No') . "<br>";
|
print "[READ MANY]: " . Support::printAr($session->getMany(['foo 1', 'foo 2'])) . "<br>";
|
||||||
|
try {
|
||||||
|
$session->setMany([ /** @phpstan-ignore-line deliberate error */
|
||||||
|
'ok' => 'ok',
|
||||||
|
'a123' => 'bar',
|
||||||
|
1 => 'bar',
|
||||||
|
]);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
print "FAILED] Session manySet failed:<br>" . $e->getMessage() . "<br><pre>" . $e . "</pre><br>";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
$session->set('123', 'illigal');
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
print "FAILED] Session set failed:<br>" . $e->getMessage() . "<br><pre>" . $e . "</pre><br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
print "<hr>";
|
||||||
// differnt session name
|
// differnt session name
|
||||||
$session_name = 'class-test-session-ALT';
|
$session_name = 'class-test-session-ALT';
|
||||||
try {
|
try {
|
||||||
$session_id = $session->startSession($session_name);
|
$session_alt = new Session($session_name);
|
||||||
print "[3 SET] Current session id: " . $session_id . "<br>";
|
print "[3 SET] Current session id: " . $session_alt->getSessionId() . "<br>";
|
||||||
|
print "[SET AGAIN] Current session id: " . $session_alt->getSessionId() . "<br>";
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
print "[3 FAILED] Session start failed:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
|
print "[3 FAILED] Session start failed:<br>" . $e->getMessage() . "<br><pre>" . $e . "</pre><br>";
|
||||||
}
|
}
|
||||||
print "[SET AGAIN] Current session id: " . $session->getSessionId() . "<br>";
|
|
||||||
|
|
||||||
print "[ALL SESSION]: " . \CoreLibs\Debug\Support::printAr($_SESSION) . "<br>";
|
|
||||||
|
print "[ALL SESSION]: " . Support::printAr($_SESSION) . "<br>";
|
||||||
|
|
||||||
// close session
|
// close session
|
||||||
$session->writeClose();
|
$session->writeClose();
|
||||||
// will never be written
|
// will never be written
|
||||||
$_SESSION['will_never_be_written'] = 'empty';
|
$_SESSION['will_never_be_written'] = 'empty';
|
||||||
|
// auto open session if closed to write
|
||||||
|
$session->set('auto_write_session', 'Some value');
|
||||||
|
// restart session
|
||||||
|
$session->restartSession();
|
||||||
|
$_SESSION['this_will_be_written'] = 'not empty';
|
||||||
|
|
||||||
// open again
|
// open again with same name
|
||||||
$session_name = 'class-test-session';
|
$session_name = 'class-test-session';
|
||||||
try {
|
try {
|
||||||
$session_id = $session->startSession($session_name);
|
$session_alt = new Session($session_name, auto_write_close:true);
|
||||||
print "[4 SET] Current session id: " . $session_id . "<br>";
|
print "[4 SET] Current session id: " . $session_alt->getSessionId() . "<br>";
|
||||||
|
print "[4 SET] Current session auto write close: " . ($session_alt->checkAutoWriteClose() ? 'Yes' : 'No') . "<br>";
|
||||||
|
print "[START AGAIN] Current session id: " . $session_alt->getSessionId() . "<br>";
|
||||||
|
$session_alt->set('alt_write_auto_close', 'set auto');
|
||||||
|
// below is deprecated
|
||||||
|
// $session_alt->do_not_do_this = 'foo bar auto set';
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
print "[4 FAILED] Session start failed:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
|
print "[4 FAILED] Session start failed:<br>" . $e->getMessage() . "<br><pre>" . $e . "</pre><br>";
|
||||||
}
|
}
|
||||||
print "[START AGAIN] Current session id: " . $session->getSessionId() . "<br>";
|
|
||||||
$_SESSION['will_be_written_again'] = 'Full';
|
$_SESSION['will_be_written_again'] = 'Full';
|
||||||
|
|
||||||
|
print "[ALL SESSION]: " . Support::printAr($_SESSION) . "<br>";
|
||||||
|
|
||||||
// close session
|
// close session
|
||||||
$session->writeClose();
|
$session->writeClose();
|
||||||
// invalid
|
// invalid
|
||||||
$session_name = '123';
|
$session_name = '123';
|
||||||
try {
|
try {
|
||||||
$session_id = $session->startSession($session_name);
|
$session_bad = new Session($session_name);
|
||||||
print "[5 SET] Current session id: " . $session_id . "<br>";
|
print "[5 SET] Current session id: " . $session_bad->getSessionId() . "<br>";
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
print "[5 FAILED] Session start failed:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
|
print "[5 FAILED] Session start failed:<br>" . $e->getMessage() . "<br><pre>" . $e . "</pre><br>";
|
||||||
}
|
}
|
||||||
print "[BAD NAME] Current session id: " . $session->getSessionId() . "<br>";
|
|
||||||
print "[BAD NAME] Current session name: " . $session->getSessionName() . "<br>";
|
|
||||||
print "[BAD NAME] Current session active: " . ($session->checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
|
||||||
print "[BAD NAME] Current session status: " . getSessionStatusString($session->getSessionStatus()) . "<br>";
|
|
||||||
|
|
||||||
print "</body></html>";
|
print "</body></html>";
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ $log = new CoreLibs\Logging\Logging([
|
|||||||
'log_per_date' => true,
|
'log_per_date' => true,
|
||||||
]);
|
]);
|
||||||
use CoreLibs\Create\Session;
|
use CoreLibs\Create\Session;
|
||||||
$session = new Session();
|
|
||||||
|
|
||||||
$PAGE_NAME = 'TEST CLASS: SESSION (READ)';
|
$PAGE_NAME = 'TEST CLASS: SESSION (READ)';
|
||||||
print "<!DOCTYPE html>";
|
print "<!DOCTYPE html>";
|
||||||
@@ -56,32 +55,22 @@ print '<div><a href="class_test.php">Class Test Master</a></div>';
|
|||||||
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
print '<div><h1>' . $PAGE_NAME . '</h1></div>';
|
||||||
|
|
||||||
$session_name = 'class-test-session';
|
$session_name = 'class-test-session';
|
||||||
|
$session = new Session($session_name);
|
||||||
// $session_name = '';
|
// $session_name = '';
|
||||||
$var = 'foo';
|
$var = 'foo';
|
||||||
$value = 'bar';
|
$value = 'bar';
|
||||||
|
|
||||||
echo "Global session name: " . ($GLOBALS['SET_SESSION_NAME'] ?? '-') . "<br>";
|
echo "Global session name: " . ($GLOBALS['SET_SESSION_NAME'] ?? '-') . "<br>";
|
||||||
|
|
||||||
print "[UNSET] Current session id: " . $session->getSessionId() . "<br>";
|
print "[SET] Current session id: " . $session->getSessionId() . "<br>";
|
||||||
print "[UNSET] Current session name: " . $session->getSessionName() . "<br>";
|
print "[SET] Current session name: " . $session->getSessionName() . "<br>";
|
||||||
print "[UNSET] Current session active: " . ($session->checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
print "[SET] Current session active: " . ($session->checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
||||||
print "[UNSET] Current session status: " . getSessionStatusString($session->getSessionStatus()) . "<br>";
|
print "[SET] Current session status: " . getSessionStatusString($session->getSessionStatus()) . "<br>";
|
||||||
|
|
||||||
print "[READ] " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
|
print "[READ] " . $var . ": " . ($_SESSION[$var] ?? '{UNSET}') . "<br>";
|
||||||
// start
|
|
||||||
try {
|
|
||||||
$session_id = $session->startSession($session_name);
|
|
||||||
print "[1] Current session id: " . $session_id . "<br>";
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
print "[1] Session start failed:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
|
|
||||||
}
|
|
||||||
// set again
|
// set again
|
||||||
try {
|
print "[2] Restarted session: " . \CoreLibs\Debug\Support::prBl($session->restartSession()) . "<br>";
|
||||||
$session_id = $session->startSession($session_name);
|
|
||||||
print "[2] Current session id: " . $session_id . "<br>";
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
print "[2] Session start failed:<br>" . $e->getMessage() . "<br>" . $e . "<br>";
|
|
||||||
}
|
|
||||||
print "[SET] Current session id: " . $session->getSessionId() . "<br>";
|
print "[SET] Current session id: " . $session->getSessionId() . "<br>";
|
||||||
print "[SET] Current session name: " . $session->getSessionName() . "<br>";
|
print "[SET] Current session name: " . $session->getSessionName() . "<br>";
|
||||||
print "[SET] Current session active: " . ($session->checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
print "[SET] Current session active: " . ($session->checkActiveSession() ? 'Yes' : 'No') . "<br>";
|
||||||
|
|||||||
@@ -372,9 +372,6 @@ class Login
|
|||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
// init default ACL list array
|
|
||||||
$_SESSION['DEFAULT_ACL_LIST'] = [];
|
|
||||||
$_SESSION['DEFAULT_ACL_LIST_TYPE'] = [];
|
|
||||||
// read the current edit_access_right list into an array
|
// read the current edit_access_right list into an array
|
||||||
$q = "SELECT level, type, name FROM edit_access_right "
|
$q = "SELECT level, type, name FROM edit_access_right "
|
||||||
. "WHERE level >= 0 ORDER BY level";
|
. "WHERE level >= 0 ORDER BY level";
|
||||||
@@ -387,8 +384,10 @@ class Login
|
|||||||
$this->default_acl_list_type[(string)$res['type']] = (int)$res['level'];
|
$this->default_acl_list_type[(string)$res['type']] = (int)$res['level'];
|
||||||
}
|
}
|
||||||
// write that into the session
|
// write that into the session
|
||||||
$_SESSION['DEFAULT_ACL_LIST'] = $this->default_acl_list;
|
$this->session->setMany([
|
||||||
$_SESSION['DEFAULT_ACL_LIST_TYPE'] = $this->default_acl_list_type;
|
'DEFAULT_ACL_LIST' => $this->default_acl_list,
|
||||||
|
'DEFAULT_ACL_LIST_TYPE' => $this->default_acl_list_type,
|
||||||
|
]);
|
||||||
|
|
||||||
$this->loginSetEditLogWriteTypeAvailable();
|
$this->loginSetEditLogWriteTypeAvailable();
|
||||||
|
|
||||||
@@ -580,7 +579,7 @@ class Login
|
|||||||
// set path
|
// set path
|
||||||
$options['locale_path'] = BASE . INCLUDES . LOCALE;
|
$options['locale_path'] = BASE . INCLUDES . LOCALE;
|
||||||
}
|
}
|
||||||
$_SESSION['LOCALE_PATH'] = $options['locale_path'];
|
$this->session->set('LOCALE_PATH', $options['locale_path']);
|
||||||
// LANG: LOCALE
|
// LANG: LOCALE
|
||||||
if (empty($options['site_locale'])) {
|
if (empty($options['site_locale'])) {
|
||||||
trigger_error(
|
trigger_error(
|
||||||
@@ -615,7 +614,7 @@ class Login
|
|||||||
$options['set_domain'] = str_replace(DIRECTORY_SEPARATOR, '', CONTENT_PATH);
|
$options['set_domain'] = str_replace(DIRECTORY_SEPARATOR, '', CONTENT_PATH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$_SESSION['DEFAULT_DOMAIN'] = $options['site_domain'];
|
$this->session->set('DEFAULT_DOMAIN', $options['site_domain']);
|
||||||
// LANG: ENCODING
|
// LANG: ENCODING
|
||||||
if (empty($options['site_encoding'])) {
|
if (empty($options['site_encoding'])) {
|
||||||
trigger_error(
|
trigger_error(
|
||||||
@@ -901,9 +900,14 @@ class Login
|
|||||||
}
|
}
|
||||||
// normal user processing
|
// normal user processing
|
||||||
// set class var and session var
|
// set class var and session var
|
||||||
$_SESSION['EUID'] = $this->euid = (int)$res['edit_user_id'];
|
$this->euid = (int)$res['edit_user_id'];
|
||||||
$_SESSION['ECUID'] = $this->ecuid = (string)$res['cuid'];
|
$this->ecuid = (string)$res['cuid'];
|
||||||
$_SESSION['ECUUID'] = $this->ecuuid = (string)$res['cuuid'];
|
$this->ecuuid = (string)$res['cuuid'];
|
||||||
|
$this->session->setMany([
|
||||||
|
'EUID' => $this->euid,
|
||||||
|
'ECUID' => $this->ecuid,
|
||||||
|
'ECUUID' => $this->ecuuid,
|
||||||
|
]);
|
||||||
// check if user is okay
|
// check if user is okay
|
||||||
$this->loginCheckPermissions();
|
$this->loginCheckPermissions();
|
||||||
if ($this->login_error == 0) {
|
if ($this->login_error == 0) {
|
||||||
@@ -916,27 +920,39 @@ class Login
|
|||||||
. "WHERE edit_user_id = " . $this->euid;
|
. "WHERE edit_user_id = " . $this->euid;
|
||||||
$this->db->dbExec($q);
|
$this->db->dbExec($q);
|
||||||
}
|
}
|
||||||
// now set all session vars and read page permissions
|
$locale = $res['locale'] ?? 'en';
|
||||||
$_SESSION['DEBUG_ALL'] = $this->db->dbBoolean($res['debug']);
|
$encoding = $res['encoding'] ?? 'UTF-8';
|
||||||
$_SESSION['DB_DEBUG'] = $this->db->dbBoolean($res['db_debug']);
|
$this->session->setMany([
|
||||||
// general info for user logged in
|
// now set all session vars and read page permissions
|
||||||
$_SESSION['USER_NAME'] = $res['username'];
|
'DEBUG_ALL' => $this->db->dbBoolean($res['debug']),
|
||||||
$_SESSION['ADMIN'] = $res['admin'];
|
'DB_DEBUG' => $this->db->dbBoolean($res['db_debug']),
|
||||||
$_SESSION['GROUP_NAME'] = $res['edit_group_name'];
|
// general info for user logged in
|
||||||
$_SESSION['USER_ACL_LEVEL'] = $res['user_level'];
|
'USER_NAME' => $res['username'],
|
||||||
$_SESSION['USER_ACL_TYPE'] = $res['user_type'];
|
'ADMIN' => $res['admin'],
|
||||||
$_SESSION['USER_ADDITIONAL_ACL'] = Json::jsonConvertToArray($res['user_additional_acl']);
|
'GROUP_NAME' => $res['edit_group_name'],
|
||||||
$_SESSION['GROUP_ACL_LEVEL'] = $res['group_level'];
|
'USER_ACL_LEVEL' => $res['user_level'],
|
||||||
$_SESSION['GROUP_ACL_TYPE'] = $res['group_type'];
|
'USER_ACL_TYPE' => $res['user_type'],
|
||||||
$_SESSION['GROUP_ADDITIONAL_ACL'] = Json::jsonConvertToArray($res['group_additional_acl']);
|
'USER_ADDITIONAL_ACL' => Json::jsonConvertToArray($res['user_additional_acl']),
|
||||||
// deprecated TEMPLATE setting
|
'GROUP_ACL_LEVEL' => $res['group_level'],
|
||||||
$_SESSION['TEMPLATE'] = $res['template'] ? $res['template'] : '';
|
'GROUP_ACL_TYPE' => $res['group_type'],
|
||||||
$_SESSION['HEADER_COLOR'] = !empty($res['second_header_color']) ?
|
'GROUP_ADDITIONAL_ACL' => Json::jsonConvertToArray($res['group_additional_acl']),
|
||||||
$res['second_header_color'] :
|
// deprecated TEMPLATE setting
|
||||||
$res['first_header_color'];
|
'TEMPLATE' => $res['template'] ? $res['template'] : '',
|
||||||
|
'HEADER_COLOR' => !empty($res['second_header_color']) ?
|
||||||
|
$res['second_header_color'] :
|
||||||
|
$res['first_header_color'],
|
||||||
|
// LANGUAGE/LOCALE/ENCODING:
|
||||||
|
'LANG' => $locale,
|
||||||
|
'DEFAULT_CHARSET' => $encoding,
|
||||||
|
'DEFAULT_LOCALE' => $locale . '.' . strtoupper($encoding),
|
||||||
|
'DEFAULT_LANG' => $locale . '_' . strtolower(str_replace('-', '', $encoding))
|
||||||
|
]);
|
||||||
// missing # before, this is for legacy data, will be deprecated
|
// missing # before, this is for legacy data, will be deprecated
|
||||||
if (preg_match("/^[\dA-Fa-f]{6,8}$/", $_SESSION['HEADER_COLOR'])) {
|
if (
|
||||||
$_SESSION['HEADER_COLOR'] = '#' . $_SESSION['HEADER_COLOR'];
|
!empty($this->session->get('HEADER_COLOR')) &&
|
||||||
|
preg_match("/^[\dA-Fa-f]{6,8}$/", $this->session->get('HEADER_COLOR'))
|
||||||
|
) {
|
||||||
|
$this->session->set('HEADER_COLOR', '#' . $this->session->get('HEADER_COLOR'));
|
||||||
}
|
}
|
||||||
// TODO: make sure that header color is valid:
|
// TODO: make sure that header color is valid:
|
||||||
// # + 6 hex
|
// # + 6 hex
|
||||||
@@ -945,13 +961,6 @@ class Login
|
|||||||
// rgb: nnn.n for each
|
// rgb: nnn.n for each
|
||||||
// hsl: nnn.n for first, nnn.n% for 2nd, 3rd
|
// hsl: nnn.n for first, nnn.n% for 2nd, 3rd
|
||||||
// Check\Colors::validateColor()
|
// Check\Colors::validateColor()
|
||||||
// LANGUAGE/LOCALE/ENCODING:
|
|
||||||
$_SESSION['LANG'] = $res['locale'] ?? 'en';
|
|
||||||
$_SESSION['DEFAULT_CHARSET'] = $res['encoding'] ?? 'UTF-8';
|
|
||||||
$_SESSION['DEFAULT_LOCALE'] = $_SESSION['LANG']
|
|
||||||
. '.' . strtoupper($_SESSION['DEFAULT_CHARSET']);
|
|
||||||
$_SESSION['DEFAULT_LANG'] = $_SESSION['LANG'] . '_'
|
|
||||||
. strtolower(str_replace('-', '', $_SESSION['DEFAULT_CHARSET']));
|
|
||||||
// reset any login error count for this user
|
// reset any login error count for this user
|
||||||
if ($res['login_error_count'] > 0) {
|
if ($res['login_error_count'] > 0) {
|
||||||
$q = "UPDATE edit_user "
|
$q = "UPDATE edit_user "
|
||||||
@@ -1041,8 +1050,10 @@ class Login
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
// write back the pages data to the output array
|
// write back the pages data to the output array
|
||||||
$_SESSION['PAGES'] = $pages;
|
$this->session->setMany([
|
||||||
$_SESSION['PAGES_ACL_LEVEL'] = $pages_acl;
|
'PAGES' => $pages,
|
||||||
|
'PAGES_ACL_LEVEL' => $pages_acl,
|
||||||
|
]);
|
||||||
// load the edit_access user rights
|
// load the edit_access user rights
|
||||||
$q = "SELECT ea.edit_access_id, level, type, ea.name, "
|
$q = "SELECT ea.edit_access_id, level, type, ea.name, "
|
||||||
. "ea.color, ea.uid, edit_default, ea.additional_acl "
|
. "ea.color, ea.uid, edit_default, ea.additional_acl "
|
||||||
@@ -1054,6 +1065,7 @@ class Login
|
|||||||
$unit_access = [];
|
$unit_access = [];
|
||||||
$eauid = [];
|
$eauid = [];
|
||||||
$unit_acl = [];
|
$unit_acl = [];
|
||||||
|
$unit_uid = [];
|
||||||
while (is_array($res = $this->db->dbReturn($q))) {
|
while (is_array($res = $this->db->dbReturn($q))) {
|
||||||
// read edit access data fields and drop them into the unit access array
|
// read edit access data fields and drop them into the unit access array
|
||||||
$q_sub = "SELECT name, value "
|
$q_sub = "SELECT name, value "
|
||||||
@@ -1077,16 +1089,19 @@ class Login
|
|||||||
];
|
];
|
||||||
// set the default unit
|
// set the default unit
|
||||||
if ($res['edit_default']) {
|
if ($res['edit_default']) {
|
||||||
$_SESSION['UNIT_DEFAULT'] = (int)$res['edit_access_id'];
|
$this->session->set('UNIT_DEFAULT', (int)$res['edit_access_id']);
|
||||||
}
|
}
|
||||||
$_SESSION['UNIT_UID'][$res['uid']] = (int)$res['edit_access_id'];
|
$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'];
|
||||||
}
|
}
|
||||||
$_SESSION['UNIT'] = $unit_access;
|
$this->session->setMany([
|
||||||
$_SESSION['UNIT_ACL_LEVEL'] = $unit_acl;
|
'UNIT_UID' => $unit_uid,
|
||||||
$_SESSION['EAID'] = $eauid;
|
'UNIT' => $unit_access,
|
||||||
|
'UNIT_ACL_LEVEL' => $unit_acl,
|
||||||
|
'EAID' => $eauid,
|
||||||
|
]);
|
||||||
} // user has permission to THIS page
|
} // user has permission to THIS page
|
||||||
} // user was not enabled or other login error
|
} // user was not enabled or other login error
|
||||||
if ($this->login_error && is_array($res)) {
|
if ($this->login_error && is_array($res)) {
|
||||||
@@ -1182,7 +1197,7 @@ class Login
|
|||||||
$this->acl['base'] = (int)$_SESSION['USER_ACL_LEVEL'];
|
$this->acl['base'] = (int)$_SESSION['USER_ACL_LEVEL'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$_SESSION['BASE_ACL_LEVEL'] = $this->acl['base'];
|
$this->session->set('BASE_ACL_LEVEL', $this->acl['base']);
|
||||||
|
|
||||||
// set the current page acl
|
// set the current page acl
|
||||||
// start with base acl
|
// start with base acl
|
||||||
@@ -1889,13 +1904,13 @@ HTML;
|
|||||||
),
|
),
|
||||||
[
|
[
|
||||||
// row 1
|
// row 1
|
||||||
empty($username) ? $_SESSION['USER_NAME'] ?? '' : $username,
|
empty($username) ? $this->session->get('USER_NAME') ?? '' : $username,
|
||||||
!empty($_SESSION['EUID']) && is_numeric($_SESSION['EUID']) ?
|
is_numeric($this->session->get('EUID')) ?
|
||||||
$_SESSION['EUID'] : null,
|
$this->session->get('EUID') : null,
|
||||||
!empty($_SESSION['ECUID']) && is_string($_SESSION['ECUID']) ?
|
is_string($this->session->get('ECUID')) ?
|
||||||
$_SESSION['ECUID'] : null,
|
$this->session->get('ECUID') : null,
|
||||||
!empty($_SESSION['ECUUID']) && Uids::validateUuuidv4($_SESSION['ECUUID']) ?
|
!empty($this->session->get('ECUUID')) && Uids::validateUuuidv4($this->session->get('ECUUID')) ?
|
||||||
$_SESSION['ECUUID'] : null,
|
$this->session->get('ECUUID') : null,
|
||||||
(string)$event,
|
(string)$event,
|
||||||
(string)$error,
|
(string)$error,
|
||||||
$data_write,
|
$data_write,
|
||||||
@@ -1913,7 +1928,7 @@ HTML;
|
|||||||
$_SERVER['HTTP_ACCEPT'] ?? null,
|
$_SERVER['HTTP_ACCEPT'] ?? null,
|
||||||
$_SERVER['HTTP_ACCEPT_CHARSET'] ?? null,
|
$_SERVER['HTTP_ACCEPT_CHARSET'] ?? null,
|
||||||
$_SERVER['HTTP_ACCEPT_ENCODING'] ?? null,
|
$_SERVER['HTTP_ACCEPT_ENCODING'] ?? null,
|
||||||
$this->session->getSessionId() !== false ?
|
$this->session->getSessionId() !== '' ?
|
||||||
$this->session->getSessionId() : null,
|
$this->session->getSessionId() : null,
|
||||||
// row 4
|
// row 4
|
||||||
$action_set['action'] ?? null,
|
$action_set['action'] ?? null,
|
||||||
@@ -2022,10 +2037,10 @@ HTML;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if there is none, there is none, saves me POST/GET check
|
// if there is none, there is none, saves me POST/GET check
|
||||||
$this->euid = array_key_exists('EUID', $_SESSION) ? (int)$_SESSION['EUID'] : 0;
|
$this->euid = (int)($this->session->get('EUID') ?? 0);
|
||||||
// TODO: allow load from cuid
|
// TODO: allow load from cuid
|
||||||
// $this->ecuid = array_key_exists('ECUID', $_SESSION) ? (string)$_SESSION['ECUID'] : '';
|
// $this->ecuid = (string)($this->session->get('ECUID') ?? '');
|
||||||
// $this->ecuuid = array_key_exists('ECUUID', $_SESSION) ? (string)$_SESSION['ECUUID'] : '';
|
// $this->ecuuid = (string)($this->session->get('ECUUID') ?? '');
|
||||||
// get login vars, are so, can't be changed
|
// get login vars, are so, can't be changed
|
||||||
// prepare
|
// prepare
|
||||||
// pass on vars to Object vars
|
// pass on vars to Object vars
|
||||||
@@ -2368,8 +2383,12 @@ HTML;
|
|||||||
$this->login_error = 103;
|
$this->login_error = 103;
|
||||||
}
|
}
|
||||||
// set ECUID
|
// set ECUID
|
||||||
$_SESSION['ECUID'] = $this->ecuid = (string)$res['cuid'];
|
$this->ecuid = (string)$res['cuid'];
|
||||||
$_SESSION['ECUUID'] = $this->ecuuid = (string)$res['cuuid'];
|
$this->ecuuid = (string)$res['cuuid'];
|
||||||
|
$this->session->setMany([
|
||||||
|
'ECUID' => $this->ecuid,
|
||||||
|
'ECUUID' => $this->ecuuid,
|
||||||
|
]);
|
||||||
// if called from public, so we can check if the permissions are ok
|
// if called from public, so we can check if the permissions are ok
|
||||||
return $this->permission_okay;
|
return $this->permission_okay;
|
||||||
}
|
}
|
||||||
@@ -2515,13 +2534,12 @@ HTML;
|
|||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
$edit_access_id !== null &&
|
$edit_access_id !== null &&
|
||||||
isset($_SESSION['UNIT']) &&
|
is_array($this->session->get('UNIT')) &&
|
||||||
is_array($_SESSION['UNIT']) &&
|
!array_key_exists($edit_access_id, $this->session->get('UNIT'))
|
||||||
!array_key_exists($edit_access_id, $_SESSION['UNIT'])
|
|
||||||
) {
|
) {
|
||||||
$edit_access_id = null;
|
$edit_access_id = null;
|
||||||
if (is_numeric($_SESSION['UNIT_DEFAULT'])) {
|
if (is_numeric($this->session->get('UNIT_DEFAULT'))) {
|
||||||
$edit_access_id = (int)$_SESSION['UNIT_DEFAULT'];
|
$edit_access_id = (int)$this->session->get('UNIT_DEFAULT');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $edit_access_id;
|
return $edit_access_id;
|
||||||
@@ -2652,7 +2670,7 @@ HTML;
|
|||||||
*/
|
*/
|
||||||
public function loginGetHeaderColor(): ?string
|
public function loginGetHeaderColor(): ?string
|
||||||
{
|
{
|
||||||
return $_SESSION['HEADER_COLOR'] ?? null;
|
return $this->session->get('HEADER_COLOR');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2663,7 +2681,7 @@ HTML;
|
|||||||
public function loginGetPages(): array
|
public function loginGetPages(): array
|
||||||
{
|
{
|
||||||
|
|
||||||
return $_SESSION['PAGES'] ?? [];
|
return $this->session->get('PAGES');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -380,12 +380,12 @@ class Backend
|
|||||||
[
|
[
|
||||||
// row 1
|
// row 1
|
||||||
'',
|
'',
|
||||||
!empty($_SESSION['EUID']) && is_numeric($_SESSION['EUID']) ?
|
is_numeric($this->session->get('EUID')) ?
|
||||||
$_SESSION['EUID'] : null,
|
$this->session->get('EUID') : null,
|
||||||
!empty($_SESSION['ECUID']) && is_string($_SESSION['ECUID']) ?
|
is_string($this->session->get('ECUID')) ?
|
||||||
$_SESSION['ECUID'] : null,
|
$this->session->get('ECUID') : null,
|
||||||
!empty($_SESSION['ECUUID']) && Uids::validateUuuidv4($_SESSION['ECUID']) ?
|
!empty($this->session->get('ECUUID')) && Uids::validateUuuidv4($this->session->get('ECUID')) ?
|
||||||
$_SESSION['ECUID'] : null,
|
$this->session->get('ECUID') : null,
|
||||||
(string)$event,
|
(string)$event,
|
||||||
'',
|
'',
|
||||||
$data_write,
|
$data_write,
|
||||||
@@ -403,7 +403,7 @@ class Backend
|
|||||||
$_SERVER['HTTP_ACCEPT'] ?? '',
|
$_SERVER['HTTP_ACCEPT'] ?? '',
|
||||||
$_SERVER['HTTP_ACCEPT_CHARSET'] ?? '',
|
$_SERVER['HTTP_ACCEPT_CHARSET'] ?? '',
|
||||||
$_SERVER['HTTP_ACCEPT_ENCODING'] ?? '',
|
$_SERVER['HTTP_ACCEPT_ENCODING'] ?? '',
|
||||||
$this->session->getSessionId() !== false ?
|
$this->session->getSessionId() !== '' ?
|
||||||
$this->session->getSessionId() : null,
|
$this->session->getSessionId() : null,
|
||||||
// row 4
|
// row 4
|
||||||
$this->action ?? '',
|
$this->action ?? '',
|
||||||
@@ -468,7 +468,7 @@ class Backend
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get the session pages array
|
// get the session pages array
|
||||||
$PAGES = $_SESSION['PAGES'] ?? null;
|
$PAGES = $this->session->get('PAGES');
|
||||||
if (!isset($PAGES) || !is_array($PAGES)) {
|
if (!isset($PAGES) || !is_array($PAGES)) {
|
||||||
$PAGES = [];
|
$PAGES = [];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,19 +15,27 @@ namespace CoreLibs\Create;
|
|||||||
|
|
||||||
class Session
|
class Session
|
||||||
{
|
{
|
||||||
|
/** @var string current session name */
|
||||||
|
private string $session_name = '';
|
||||||
|
/** @var string current session id */
|
||||||
|
private string $session_id = '';
|
||||||
|
/** @var bool flag auto write close */
|
||||||
|
private bool $auto_write_close = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* init a session, if array is empty or array does not have session_name set
|
* init a session, if array is empty or array does not have session_name set
|
||||||
* then no auto init is run
|
* then no auto init is run
|
||||||
*
|
*
|
||||||
* @param string $session_name if set and not empty, will start session
|
* @param string $session_name if set and not empty, will start session
|
||||||
*/
|
*/
|
||||||
public function __construct(string $session_name = '')
|
public function __construct(string $session_name, bool $auto_write_close = false)
|
||||||
{
|
{
|
||||||
if (!empty($session_name)) {
|
$this->initSession($session_name);
|
||||||
$this->startSession($session_name);
|
$this->auto_write_close = $auto_write_close;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: private methods
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start session
|
* Start session
|
||||||
* startSession should be called for complete check
|
* startSession should be called for complete check
|
||||||
@@ -36,36 +44,32 @@ class Session
|
|||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function startSessionCall(): void
|
private function startSessionCall(): void
|
||||||
{
|
{
|
||||||
session_start();
|
session_start();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check if we are in CLI, we set this, so we can mock this
|
* get current set session id or false if none started
|
||||||
* Not this is just a wrapper for the static System::checkCLI call
|
|
||||||
*
|
*
|
||||||
* @return bool True if we are in a CLI enviroment, or false for everything else
|
* @return string|false
|
||||||
*/
|
*/
|
||||||
public function checkCliStatus(): bool
|
public function getSessionIdCall(): string|false
|
||||||
{
|
{
|
||||||
return \CoreLibs\Get\System::checkCLI();
|
return session_id();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set session name call. If not valid session name, will return false
|
* automatically closes a session if the auto write close flag is set
|
||||||
*
|
*
|
||||||
* @param string $session_name A valid string for session name
|
* @return bool
|
||||||
* @return bool True if session name is valid,
|
|
||||||
* False if not
|
|
||||||
*/
|
*/
|
||||||
public function setSessionName(string $session_name): bool
|
private function closeSessionCall(): bool
|
||||||
{
|
{
|
||||||
if (!$this->checkValidSessionName($session_name)) {
|
if ($this->auto_write_close) {
|
||||||
return false;
|
return $this->writeClose();
|
||||||
}
|
}
|
||||||
session_name($session_name);
|
return false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -94,15 +98,34 @@ class Session
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* start session with given session name if set
|
* validate _SESSION key, must be valid variable
|
||||||
|
*
|
||||||
|
* @param int|float|string $key
|
||||||
|
* @return true
|
||||||
|
*/
|
||||||
|
private function checkValidSessionEntryKey(int|float|string $key): true
|
||||||
|
{
|
||||||
|
if (!is_string($key) || is_numeric($key)) {
|
||||||
|
throw new \UnexpectedValueException(
|
||||||
|
'[SESSION] Given key for _SESSION is not a valid value for a varaible: ' . $key,
|
||||||
|
1
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: init session (on class start)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* stinitart session with given session name if set
|
||||||
* aborts on command line or if sessions are not enabled
|
* aborts on command line or if sessions are not enabled
|
||||||
* also aborts if session cannot be started
|
* also aborts if session cannot be started
|
||||||
* On sucess returns the session id
|
* On sucess returns the session id
|
||||||
*
|
*
|
||||||
* @param string|null $session_name
|
* @param string $session_name
|
||||||
* @return string|bool
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function startSession(?string $session_name = null): string|bool
|
private function initSession(string $session_name): void
|
||||||
{
|
{
|
||||||
// we can't start sessions on command line
|
// we can't start sessions on command line
|
||||||
if ($this->checkCliStatus()) {
|
if ($this->checkCliStatus()) {
|
||||||
@@ -115,39 +138,85 @@ class Session
|
|||||||
// session_status
|
// session_status
|
||||||
// initial the session if there is no session running already
|
// initial the session if there is no session running already
|
||||||
if (!$this->checkActiveSession()) {
|
if (!$this->checkActiveSession()) {
|
||||||
// if session name is emtpy, check if there is a global set
|
// invalid session name, abort
|
||||||
// this is a deprecated fallback
|
if (!$this->checkValidSessionName($session_name)) {
|
||||||
$session_name = $session_name ?? $GLOBALS['SET_SESSION_NAME'] ?? '';
|
throw new \UnexpectedValueException('[SESSION] Invalid session name: ' . $this->session_name, 3);
|
||||||
// DEPRECTED: constant SET_SESSION_NAME is no longer used
|
|
||||||
// if set, set special session name
|
|
||||||
if (!empty($session_name)) {
|
|
||||||
// invalid session name, abort
|
|
||||||
if (!$this->checkValidSessionName($session_name)) {
|
|
||||||
throw new \UnexpectedValueException('[SESSION] Invalid session name: ' . $session_name, 3);
|
|
||||||
}
|
|
||||||
$this->setSessionName($session_name);
|
|
||||||
}
|
}
|
||||||
|
// set session name
|
||||||
|
$this->session_name = $session_name;
|
||||||
|
session_name($this->session_name);
|
||||||
// start session
|
// start session
|
||||||
$this->startSessionCall();
|
$this->startSessionCall();
|
||||||
|
// if we faild to start the session
|
||||||
|
if (!$this->checkActiveSession()) {
|
||||||
|
throw new \RuntimeException('[SESSION] Failed to activate session', 5);
|
||||||
|
}
|
||||||
|
} elseif ($session_name != $this->getSessionName()) {
|
||||||
|
throw new \UnexpectedValueException(
|
||||||
|
'[SESSION] Another session exists with a different name: ' . $this->getSessionName(),
|
||||||
|
4
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// if we still have no active session
|
// check session id
|
||||||
|
if (false === ($session_id = $this->getSessionIdCall())) {
|
||||||
|
throw new \UnexpectedValueException('[SESSION] getSessionId did not return a session id', 6);
|
||||||
|
}
|
||||||
|
// set session id
|
||||||
|
$this->session_id = $session_id;
|
||||||
|
// if flagged auto close, write close session
|
||||||
|
if ($this->auto_write_close) {
|
||||||
|
$this->writeClose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: public set/get status
|
||||||
|
|
||||||
|
/**
|
||||||
|
* start session, will only run after initSession
|
||||||
|
*
|
||||||
|
* @return bool True if started, False if alrady running
|
||||||
|
*/
|
||||||
|
public function restartSession(): bool
|
||||||
|
{
|
||||||
if (!$this->checkActiveSession()) {
|
if (!$this->checkActiveSession()) {
|
||||||
throw new \RuntimeException('[SESSION] Failed to activate session', 4);
|
if (empty($this->session_name)) {
|
||||||
|
throw new \RuntimeException('[SESSION] Cannot restart session without a session name', 1);
|
||||||
|
}
|
||||||
|
$this->startSessionCall();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
if (false === ($session_id = $this->getSessionId())) {
|
return false;
|
||||||
throw new \UnexpectedValueException('[SESSION] getSessionId did not return a session id', 5);
|
|
||||||
}
|
|
||||||
return $session_id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get current set session id or false if none started
|
* current set session id
|
||||||
*
|
*
|
||||||
* @return string|bool
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getSessionId(): string|bool
|
public function getSessionId(): string
|
||||||
{
|
{
|
||||||
return session_id();
|
return $this->session_id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set the auto write close flag
|
||||||
|
*
|
||||||
|
* @param bool $flag
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setAutoWriteClose(bool $flag): void
|
||||||
|
{
|
||||||
|
$this->auto_write_close = $flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* return the auto write close flag
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function checkAutoWriteClose(): bool
|
||||||
|
{
|
||||||
|
return $this->auto_write_close;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -175,6 +244,34 @@ class Session
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check if we are in CLI, we set this, so we can mock this
|
||||||
|
* Not this is just a wrapper for the static System::checkCLI call
|
||||||
|
*
|
||||||
|
* @return bool True if we are in a CLI enviroment, or false for everything else
|
||||||
|
*/
|
||||||
|
public function checkCliStatus(): bool
|
||||||
|
{
|
||||||
|
return \CoreLibs\Get\System::checkCLI();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get session status
|
||||||
|
* PHP_SESSION_DISABLED if sessions are disabled.
|
||||||
|
* PHP_SESSION_NONE if sessions are enabled, but none exists.
|
||||||
|
* PHP_SESSION_ACTIVE if sessions are enabled, and one exists.
|
||||||
|
*
|
||||||
|
* https://www.php.net/manual/en/function.session-status.php
|
||||||
|
*
|
||||||
|
* @return int See possible return int values above
|
||||||
|
*/
|
||||||
|
public function getSessionStatus(): int
|
||||||
|
{
|
||||||
|
return session_status();
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: write close session
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* unlock the session file, so concurrent AJAX requests can be done
|
* unlock the session file, so concurrent AJAX requests can be done
|
||||||
* NOTE: after this has been called, no changes in _SESSION will be stored
|
* NOTE: after this has been called, no changes in _SESSION will be stored
|
||||||
@@ -188,17 +285,24 @@ class Session
|
|||||||
return session_write_close();
|
return session_write_close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: session close and clean up
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Proper destroy a session
|
* Proper destroy a session
|
||||||
* - unset the _SESSION array
|
* - unset the _SESSION array
|
||||||
* - unset cookie if cookie on and we have not strict mode
|
* - unset cookie if cookie on and we have not strict mode
|
||||||
|
* - unset session_name and session_id internal vars
|
||||||
* - destroy session
|
* - destroy session
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool True on successful session destroy
|
||||||
*/
|
*/
|
||||||
public function sessionDestroy(): bool
|
public function sessionDestroy(): bool
|
||||||
{
|
{
|
||||||
$_SESSION = [];
|
// abort to false if not unsetable
|
||||||
|
if (!session_unset()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$this->clear();
|
||||||
if (
|
if (
|
||||||
ini_get('session.use_cookies') &&
|
ini_get('session.use_cookies') &&
|
||||||
!ini_get('session.use_strict_mode')
|
!ini_get('session.use_strict_mode')
|
||||||
@@ -218,68 +322,92 @@ class Session
|
|||||||
$params['httponly']
|
$params['httponly']
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
// unset internal vars
|
||||||
|
$this->session_name = '';
|
||||||
|
$this->session_id = '';
|
||||||
return session_destroy();
|
return session_destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
// MARK: _SESSION set/unset methods
|
||||||
* get session status
|
|
||||||
* PHP_SESSION_DISABLED if sessions are disabled.
|
|
||||||
* PHP_SESSION_NONE if sessions are enabled, but none exists.
|
|
||||||
* PHP_SESSION_ACTIVE if sessions are enabled, and one exists.
|
|
||||||
*
|
|
||||||
* https://www.php.net/manual/en/function.session-status.php
|
|
||||||
*
|
|
||||||
* @return int See possible return int values above
|
|
||||||
*/
|
|
||||||
public function getSessionStatus(): int
|
|
||||||
{
|
|
||||||
return session_status();
|
|
||||||
}
|
|
||||||
|
|
||||||
// _SESSION set/unset methods
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* unset all _SESSION entries
|
* unset all _SESSION entries
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function unsetAllS(): void
|
public function clear(): void
|
||||||
{
|
{
|
||||||
foreach (array_keys($_SESSION ?? []) as $name) {
|
$this->restartSession();
|
||||||
unset($_SESSION[$name]);
|
if (!session_unset()) {
|
||||||
|
throw new \RuntimeException('[SESSION] Cannot unset session vars', 1);
|
||||||
}
|
}
|
||||||
|
if (!empty($_SESSION)) {
|
||||||
|
$_SESSION = [];
|
||||||
|
}
|
||||||
|
$this->closeSessionCall();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set _SESSION entry 'name' with any value
|
* set _SESSION entry 'name' with any value
|
||||||
*
|
*
|
||||||
* @param string|int $name array name in _SESSION
|
* @param string $name array name in _SESSION
|
||||||
* @param mixed $value value to set (can be anything)
|
* @param mixed $value value to set (can be anything)
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setS(string|int $name, mixed $value): void
|
public function set(string $name, mixed $value): void
|
||||||
{
|
{
|
||||||
|
$this->checkValidSessionEntryKey($name);
|
||||||
|
$this->restartSession();
|
||||||
$_SESSION[$name] = $value;
|
$_SESSION[$name] = $value;
|
||||||
|
$this->closeSessionCall();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set many session entries in one set
|
||||||
|
*
|
||||||
|
* @param array<string,mixed> $set key is the key in the _SESSION, value is any data to set
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function setMany(array $set): void
|
||||||
|
{
|
||||||
|
$this->restartSession();
|
||||||
|
// skip any that are not valid
|
||||||
|
foreach ($set as $key => $value) {
|
||||||
|
$this->checkValidSessionEntryKey($key);
|
||||||
|
$_SESSION[$key] = $value;
|
||||||
|
}
|
||||||
|
$this->closeSessionCall();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get _SESSION 'name' entry or empty string if not set
|
* get _SESSION 'name' entry or empty string if not set
|
||||||
*
|
*
|
||||||
* @param string|int $name value key to get from _SESSION
|
* @param string $name value key to get from _SESSION
|
||||||
* @return mixed value stored in _SESSION
|
* @return mixed value stored in _SESSION, if not found set to null
|
||||||
*/
|
*/
|
||||||
public function getS(string|int $name): mixed
|
public function get(string $name): mixed
|
||||||
{
|
{
|
||||||
return $_SESSION[$name] ?? '';
|
return $_SESSION[$name] ?? null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get multiple session entries
|
||||||
|
*
|
||||||
|
* @param array<string> $set
|
||||||
|
* @return array<string,mixed>
|
||||||
|
*/
|
||||||
|
public function getMany(array $set): array
|
||||||
|
{
|
||||||
|
return array_intersect_key($_SESSION, array_flip($set));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a name is set in the _SESSION array
|
* Check if a name is set in the _SESSION array
|
||||||
*
|
*
|
||||||
* @param string|int $name Name to check for
|
* @param string $name Name to check for
|
||||||
* @return bool True for set, False fornot set
|
* @return bool True for set, False fornot set
|
||||||
*/
|
*/
|
||||||
public function issetS(string|int $name): bool
|
public function isset(string $name): bool
|
||||||
{
|
{
|
||||||
return isset($_SESSION[$name]);
|
return isset($_SESSION[$name]);
|
||||||
}
|
}
|
||||||
@@ -287,67 +415,35 @@ class Session
|
|||||||
/**
|
/**
|
||||||
* unset one _SESSION entry 'name' if exists
|
* unset one _SESSION entry 'name' if exists
|
||||||
*
|
*
|
||||||
* @param string|int $name _SESSION key name to remove
|
* @param string $name _SESSION key name to remove
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function unsetS(string|int $name): void
|
public function unset(string $name): void
|
||||||
{
|
{
|
||||||
if (isset($_SESSION[$name])) {
|
if (!isset($_SESSION[$name])) {
|
||||||
unset($_SESSION[$name]);
|
return;
|
||||||
}
|
}
|
||||||
|
$this->restartSession();
|
||||||
|
unset($_SESSION[$name]);
|
||||||
|
$this->closeSessionCall();
|
||||||
}
|
}
|
||||||
|
|
||||||
// set/get below
|
|
||||||
// ->var = value;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Undocumented function
|
* reset many session entry
|
||||||
*
|
*
|
||||||
* @param string|int $name
|
* @param array<string> $set list of session keys to reset
|
||||||
* @param mixed $value
|
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function __set(string|int $name, mixed $value): void
|
public function unsetMany(array $set): void
|
||||||
{
|
{
|
||||||
$_SESSION[$name] = $value;
|
$this->restartSession();
|
||||||
}
|
foreach ($set as $key) {
|
||||||
|
if (!isset($_SESSION[$key])) {
|
||||||
/**
|
continue;
|
||||||
* Undocumented function
|
}
|
||||||
*
|
unset($_SESSION[$key]);
|
||||||
* @param string|int $name
|
|
||||||
* @return mixed If name is not found, it will return null
|
|
||||||
*/
|
|
||||||
public function __get(string|int $name): mixed
|
|
||||||
{
|
|
||||||
if (isset($_SESSION[$name])) {
|
|
||||||
return $_SESSION[$name];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Undocumented function
|
|
||||||
*
|
|
||||||
* @param string|int $name
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function __isset(string|int $name): bool
|
|
||||||
{
|
|
||||||
return isset($_SESSION[$name]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Undocumented function
|
|
||||||
*
|
|
||||||
* @param string|int $name
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function __unset(string|int $name): void
|
|
||||||
{
|
|
||||||
if (isset($_SESSION[$name])) {
|
|
||||||
unset($_SESSION[$name]);
|
|
||||||
}
|
}
|
||||||
|
$this->closeSessionCall();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* sets a form token in the _SESSION variable
|
* sets a form token in the _SESSION variable
|
||||||
* session must be started for this to work
|
* session must be started and running for this to work
|
||||||
*/
|
*/
|
||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|||||||
Reference in New Issue
Block a user