Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
typo3
qfq
Commits
ffb1215a
Commit
ffb1215a
authored
Feb 17, 2019
by
Carsten Rose
Browse files
Refs #7634. Parameter parsing.
parent
aeaa4d4c
Changes
4
Hide whitespace changes
Inline
Side-by-side
extension/Source/api/rest.php
0 → 100644
View file @
ffb1215a
<?php
/**
* Created by PhpStorm.
* User: crose
* Date: 17.02.19
* Time: 15:40
*/
namespace
qfq
;
use
qfq
;
require_once
(
__DIR__
.
'/../core/QuickFormQuery.php'
);
require_once
(
__DIR__
.
'/../core/helper/OnString.php'
);
require_once
(
__DIR__
.
'/../core/Constants.php'
);
require_once
(
__DIR__
.
'/../core/exceptions/UserFormException.php'
);
require_once
(
__DIR__
.
'/../core/exceptions/CodeException.php'
);
require_once
(
__DIR__
.
'/../core/exceptions/DbException.php'
);
try
{
$bodytext
=
OnString
::
extractFormRecordId
(
$_SERVER
[
'PATH_INFO'
]);
$qfq
=
new
QuickFormQuery
([
'bodytext'
=>
$bodytext
]);
// $data = $qfq->rest();
}
catch
(
qfq\CodeException
$e
)
{
$answer
[
API_MESSAGE
]
=
$e
->
formatMessage
();
}
catch
(
qfq\UserFormException
$e
)
{
$answer
[
API_MESSAGE
]
=
$e
->
formatMessage
();
}
catch
(
qfq\UserReportException
$e
)
{
$answer
[
API_MESSAGE
]
=
$e
->
formatMessage
();
}
catch
(
qfq\DbException
$e
)
{
$answer
[
API_MESSAGE
]
=
$e
->
formatMessage
();
}
header
(
"Content-Type: application/json"
);
echo
json_encode
(
$answer
);
extension/Source/core/Constants.php
View file @
ffb1215a
...
...
@@ -425,6 +425,7 @@ const CLIENT_COOKIE_QFQ = 'cookieQfq';
// T3 Bodytext Keywords
const
TYPO3_FORM
=
CLIENT_FORM
;
const
TYPO3_RECORD_ID
=
CLIENT_RECORD_ID
;
const
TYPO3_REST_PATH
=
'restPath'
;
const
TYPO3_BE_USER_LOGGED_IN
=
'beUserLoggedIn'
;
// 'yes' | 'no'
const
TYPO3_BE_USER
=
'beUser'
;
// 'yes' | 'no'
const
TYPO3_FE_USER
=
'feUser'
;
...
...
extension/Source/core/helper/OnString.php
View file @
ffb1215a
...
...
@@ -14,7 +14,8 @@ require_once(__DIR__ . '/../Constants.php');
* Class OnString
* @package qfq
*/
class
OnString
{
class
OnString
{
/**
* Returns part of haystack string starting from and including the last occurrence of needle to the end of haystack.
...
...
@@ -94,11 +95,11 @@ class OnString {
* @param &$row - return the digit part of $pos
* @return bool - true if a alpha string and a numeric string is found, else false.
*/
public
static
function
splitExcelPos
(
$pos
,
&
$column
,
&
$row
){
public
static
function
splitExcelPos
(
$pos
,
&
$column
,
&
$row
)
{
preg_match_all
(
'/[A-Z]+|\d+/'
,
$pos
,
$matches
);
if
(
count
(
$matches
[
0
])
!=
2
)
{
if
(
count
(
$matches
[
0
])
!=
2
)
{
return
false
;
}
...
...
@@ -164,7 +165,7 @@ class OnString {
$nestingStart
=
0
;
// Process the string one start/end delimiter at a time
while
(
true
)
{
while
(
true
)
{
// find the next start/end delimiter
$nextDelimStartPos
=
strpos
(
$str
,
$delimStart
,
$lastDelimPos
+
strlen
(
$delimStart
));
$nextDelimEndPos
=
strpos
(
$str
,
$delimEnd
,
$lastDelimPos
+
strlen
(
$delimEnd
));
...
...
@@ -183,7 +184,6 @@ class OnString {
ERROR_MESSAGE_SUPPORT
=>
"in '
$str
'"
]),
ERROR_MISSING_OPEN_DELIMITER
);
break
;
}
elseif
(
$exprDepth
==
0
)
{
// end of nesting -> replace \n inside nested expression with space
...
...
@@ -199,11 +199,66 @@ class OnString {
$lastDelimPos
=
$nextDelimPos
;
}
if
(
$exprDepth
>
0
)
{
if
(
$exprDepth
>
0
)
{
throw
new
UserFormException
(
json_encode
([
ERROR_MESSAGE_TO_USER
=>
"Missing close delimiter '
$delimEnd
'"
,
ERROR_MESSAGE_SUPPORT
=>
"in '
$str
'"
]),
ERROR_MISSING_CLOSE_DELIMITER
);
}
return
$str
;
}
/**
* Split a $_SERVER['PATH_INFO'] of the form '/form1/id1/form2/id2/form3/id3/...)' to
* r=id1
* form=form1
* restPath=form2/id2/form3/id3/...
*
* @param $pathInfo
* @return string
* @throws UserFormException
*/
public
static
function
extractFormRecordId
(
$pathInfo
)
{
$text
=
''
;
if
(
$pathInfo
==
''
)
{
return
''
;
}
if
(
$pathInfo
[
0
]
==
'/'
)
{
$pathInfo
=
substr
(
$pathInfo
,
1
);
}
$len
=
strlen
(
$pathInfo
);
if
(
$len
>
0
&&
$pathInfo
[
$len
-
1
]
==
'/'
)
{
$pathInfo
=
substr
(
$pathInfo
,
0
,
$len
-
1
);
}
if
(
$pathInfo
==
''
)
{
return
''
;
}
$param
=
explode
(
'/'
,
$pathInfo
);
$cnt
=
count
(
$param
);
if
(
$cnt
%
2
==
0
)
{
$id
=
array_pop
(
$param
);
if
(
!
ctype_digit
(
$id
))
{
throw
new
UserFormException
(
'Expect numerial id'
,
ERROR_BROKEN_PARAMETER
);
}
$text
=
TYPO3_RECORD_ID
.
'='
.
$id
.
PHP_EOL
;
}
$form
=
array_pop
(
$param
);
if
(
!
ctype_alnum
(
$form
))
{
throw
new
UserFormException
(
'Expect alphanumeric string'
,
ERROR_BROKEN_PARAMETER
);
}
$text
.
=
TYPO3_FORM
.
'='
.
$form
.
PHP_EOL
;
if
(
count
(
$param
)
>
0
)
{
$text
.
=
TYPO3_REST_PATH
.
'='
.
implode
(
'/'
,
$param
)
.
PHP_EOL
;
}
return
$text
;
}
}
extension/Tests/unit/core/helper/OnStringTest.php
View file @
ffb1215a
...
...
@@ -14,7 +14,8 @@ use PHPUnit\Framework\TestCase;
* Class OnStringTest
* @package qfq
*/
class
OnStringTest
extends
TestCase
{
class
OnStringTest
extends
TestCase
{
/**
*
...
...
@@ -78,6 +79,48 @@ class OnStringTest extends TestCase {
OnString
::
removeNewlinesInNestedExpression
(
"sqlInsert = {{SELECT *
\n
FROM test
\n
WHERE '
{
{var}}'='true'}
}
\n
param1=abc"
));
}
/**
* @throws UserFormException
*/
public
function
testExtractFormRecordId
()
{
$this
->
assertEquals
(
''
,
OnString
::
extractFormRecordId
(
''
));
$this
->
assertEquals
(
''
,
OnString
::
extractFormRecordId
(
'/'
));
$this
->
assertEquals
(
''
,
OnString
::
extractFormRecordId
(
'//'
));
$this
->
assertEquals
(
TYPO3_FORM
.
'=path1'
.
PHP_EOL
,
OnString
::
extractFormRecordId
(
'/path1'
));
$this
->
assertEquals
(
TYPO3_FORM
.
'=path1'
.
PHP_EOL
,
OnString
::
extractFormRecordId
(
'/path1/'
));
$this
->
assertEquals
(
TYPO3_FORM
.
'=path1'
.
PHP_EOL
,
OnString
::
extractFormRecordId
(
'path1/'
));
$expected
=
TYPO3_RECORD_ID
.
'=12'
.
PHP_EOL
.
TYPO3_FORM
.
'=path1'
.
PHP_EOL
;
$this
->
assertEquals
(
$expected
,
OnString
::
extractFormRecordId
(
'/path1/12'
));
$expected
=
TYPO3_RECORD_ID
.
'=12'
.
PHP_EOL
.
TYPO3_FORM
.
'=path1'
.
PHP_EOL
;
$this
->
assertEquals
(
$expected
,
OnString
::
extractFormRecordId
(
'/path1/12/'
));
$expected
=
TYPO3_FORM
.
'=path2'
.
PHP_EOL
.
TYPO3_REST_PATH
.
'=path1/12'
.
PHP_EOL
;
$this
->
assertEquals
(
$expected
,
OnString
::
extractFormRecordId
(
'/path1/12/path2'
));
$expected
=
TYPO3_RECORD_ID
.
'=34'
.
PHP_EOL
.
TYPO3_FORM
.
'=path2'
.
PHP_EOL
.
TYPO3_REST_PATH
.
'=path1/12'
.
PHP_EOL
;
$this
->
assertEquals
(
$expected
,
OnString
::
extractFormRecordId
(
'/path1/12/path2/34'
));
}
/**
* @expectedException \qfq\UserFormException
*
*/
public
function
testExtractFormRecordId_1
()
{
# An alnum string is requested as path
$this
->
assertEquals
(
''
,
OnString
::
extractFormRecordId
(
'/%'
));
}
/**
* @expectedException \qfq\UserFormException
*
*/
public
function
testExtractFormRecordId_2
()
{
# A numerical value is requested as id
$this
->
assertEquals
(
''
,
OnString
::
extractFormRecordId
(
'/path1/path2'
));
}
/**
* @expectedException \qfq\UserFormException
*
...
...
@@ -85,6 +128,7 @@ class OnStringTest extends TestCase {
public
function
testRemoveNewlinesInNestedExpression_missingClosing_1
()
{
$str
=
OnString
::
removeNewlinesInNestedExpression
(
"Hi! {{Test "
);
}
/**
* @expectedException \qfq\UserFormException
*
...
...
@@ -92,6 +136,7 @@ class OnStringTest extends TestCase {
public
function
testRemoveNewlinesInNestedExpression_missingClosing_2
()
{
$str
=
OnString
::
removeNewlinesInNestedExpression
(
"Hi!
{
{Test
}
"
);
}
/**
* @expectedException \qfq\UserFormException
*
...
...
@@ -107,6 +152,7 @@ class OnStringTest extends TestCase {
public
function
testRemoveNewlinesInNestedExpression_missingOpening_1
()
{
$str
=
OnString
::
removeNewlinesInNestedExpression
(
"}}"
);
}
/**
* @expectedException \qfq\UserFormException
*
...
...
@@ -114,6 +160,7 @@ class OnStringTest extends TestCase {
public
function
testRemoveNewlinesInNestedExpression_missingOpening_2
()
{
$str
=
OnString
::
removeNewlinesInNestedExpression
(
"
{
}
}
"
);
}
/**
* @expectedException \qfq\UserFormException
*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment