Compare commits

...

8 commits

Author SHA1 Message Date
43b5f0c14b Merge branch 'release/1.0.0'
All checks were successful
ci/woodpecker/tag/code-style Pipeline was successful
ci/woodpecker/tag/functional-tests/1 Pipeline was successful
ci/woodpecker/tag/functional-tests/3 Pipeline was successful
ci/woodpecker/tag/functional-tests/2 Pipeline was successful
ci/woodpecker/tag/functional-tests/4 Pipeline was successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
2024-08-07 11:09:39 +02:00
f1227b963f removing senseless property override
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/pr/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
ci/woodpecker/pr/functional-tests/1 Pipeline was successful
ci/woodpecker/pr/functional-tests/2 Pipeline was successful
ci/woodpecker/pr/functional-tests/3 Pipeline was successful
ci/woodpecker/pr/functional-tests/4 Pipeline was successful
2024-06-02 03:59:34 +02:00
b8931bd048 adding description
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
ci/woodpecker/pr/code-style Pipeline was successful
ci/woodpecker/pr/functional-tests/1 Pipeline was successful
ci/woodpecker/pr/functional-tests/2 Pipeline was successful
ci/woodpecker/pr/functional-tests/3 Pipeline was successful
ci/woodpecker/pr/functional-tests/4 Pipeline was successful
2024-05-30 16:10:51 +02:00
8695ecc9fe adding license
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/pr/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
ci/woodpecker/pr/functional-tests/1 Pipeline was successful
ci/woodpecker/pr/functional-tests/2 Pipeline was successful
ci/woodpecker/pr/functional-tests/3 Pipeline was successful
ci/woodpecker/pr/functional-tests/4 Pipeline was successful
2024-05-30 15:32:12 +02:00
e303f86640 adding minimal documentation and package meta information
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/pr/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
ci/woodpecker/pr/functional-tests/1 Pipeline was successful
ci/woodpecker/pr/functional-tests/2 Pipeline was successful
ci/woodpecker/pr/functional-tests/3 Pipeline was successful
ci/woodpecker/pr/functional-tests/4 Pipeline was successful
2024-05-30 15:27:19 +02:00
193d9b925a fixing an accidently error introduced by removing case insensitivity - and allowing path expressions for action request retrieval
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
2024-05-30 15:12:49 +02:00
f75b21a874 changing the format of the expression detections to avoid accidently being identified as objectaccessor and adding a test, where that happend with the previous expression
Some checks failed
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline failed
ci/woodpecker/push/functional-tests/2 Pipeline failed
ci/woodpecker/push/functional-tests/3 Pipeline failed
ci/woodpecker/push/functional-tests/4 Pipeline failed
2024-05-30 15:08:53 +02:00
b3430789ec first version passing tests in Flow 8.3
All checks were successful
ci/woodpecker/push/code-style Pipeline was successful
ci/woodpecker/push/functional-tests/2 Pipeline was successful
ci/woodpecker/push/functional-tests/1 Pipeline was successful
ci/woodpecker/push/functional-tests/3 Pipeline was successful
ci/woodpecker/push/functional-tests/4 Pipeline was successful
2024-05-30 14:03:28 +02:00
14 changed files with 294 additions and 0 deletions

View file

@ -0,0 +1,10 @@
steps:
code-style:
image: composer
commands:
- composer global config repositories.repo-name vcs https://git.digital-competence.de/Packages/php-codesniffer
- composer global config --no-plugins allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
- composer global require digicomp/php-codesniffer:@dev
- composer global exec -- phpcs --runtime-set ignore_warnings_on_exit 1 --standard=DigiComp Classes/ Tests/
when:
- event: [push, pull_request, manual]

View file

@ -0,0 +1,34 @@
workspace:
base: /woodpecker
path: package
matrix:
include:
- FLOW_VERSION: 6.3
PHP_VERSION: 7.4
- FLOW_VERSION: 7.3
PHP_VERSION: 7.4
- FLOW_VERSION: 7.3
PHP_VERSION: 8.2
- FLOW_VERSION: 8.2
PHP_VERSION: 8.2
steps:
functional-tests:
image: "thecodingmachine/php:${PHP_VERSION}-v4-cli"
environment:
# Enable the PDO_SQLITE extension
- "PHP_EXTENSION_PDO_SQLITE=1"
- "FLOW_VERSION=${FLOW_VERSION}"
- "NEOS_BUILD_DIR=/woodpecker/Build-${FLOW_VERSION}"
commands:
- "sudo mkdir $NEOS_BUILD_DIR"
- "sudo chown -R docker:docker $NEOS_BUILD_DIR"
- "cd $NEOS_BUILD_DIR"
- "composer create-project --no-install neos/flow-base-distribution:^$FLOW_VERSION ."
- "composer config repositories.repo-name path /woodpecker/package"
- "composer remove --dev --no-update neos/behat || composer remove --no-update neos/behat"
- "composer require digicomp/fluid-currentcontroller-expression:@dev"
- "bin/phpunit --configuration Build/BuildEssentials/PhpUnit/FunctionalTests.xml Packages/Application/DigiComp.FluidCurrentControllerExpression/Tests/Functional"
when:
- event: [ push, pull_request, manual ]

View file

@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace DigiComp\FluidCurrentControllerExpression;
use Neos\FluidAdaptor\Core\Rendering\RenderingContext;
use Neos\Utility\ObjectAccess;
use TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\AbstractExpressionNode;
use TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\ExpressionNodeInterface;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
class CurrentControllerExpressionNode extends AbstractExpressionNode implements ExpressionNodeInterface
{
/**
* note: this could be readonly in PHP8
* @var string
*/
public static string $detectionExpression = '/\{#currentController\.([a-zA-Z0-9\.]+)\}/';
public static function evaluateExpression(RenderingContextInterface $renderingContext, $expression, array $matches)
{
if ($renderingContext instanceof RenderingContext) {
$propertyToReturn = $matches[1];
if (
\in_array(
$propertyToReturn,
['actionName', 'name', 'objectName', 'packageKey', 'subpackageKey'],
true
)
) {
$propertyToReturn = 'controller' . \ucfirst($propertyToReturn);
}
return ObjectAccess::getPropertyPath(
$renderingContext->getControllerContext()->getRequest(),
$propertyToReturn
);
}
return '';
}
}

View file

@ -0,0 +1,9 @@
Neos\FluidAdaptor\Core\Rendering\RenderingContext:
properties:
expressionNodeTypes:
value:
- Neos\FluidAdaptor\Core\Parser\SyntaxTree\Expression\LegacyNamespaceExpressionNode
- TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\CastingExpressionNode
- TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\MathExpressionNode
- TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\Expression\TernaryExpressionNode
- DigiComp\FluidCurrentControllerExpression\CurrentControllerExpressionNode

View file

@ -0,0 +1,7 @@
-
requestFilter: 'isFormat("html") && isPackage("DigiComp.FluidCurrentControllerExpression")'
options:
layoutRootPaths:
- "resource://DigiComp.FluidCurrentControllerExpression/Private/Layouts"
partialRootPaths:
- "resource://DigiComp.FluidCurrentControllerExpression/Private/Partials"

19
License.txt Normal file
View file

@ -0,0 +1,19 @@
Copyright (c) 2024 Ferdinand Kuhl <f.kuhl@digital-competence.de>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

13
README.md Normal file
View file

@ -0,0 +1,13 @@
# DigiComp.FluidCurrentControllerExpression
This extends the fluid language with an expression to allow you to access values of the current action request.
```html
<html>
<title>Welcome to {#currentController.name} {#currentController.actionName}</title>
</html>
```
The pattern is `{#currentController.PROPERTY_OF_ACTIONREQUEST}` - all properties are possible. To avoid duplicated "controller" in the expression you are allowed to omit them (even if it works, if you do not).
It is really helpful if you try to generalize partials - being an expression, it is not depending on any aliased namespace, which might change in deeper structures.

View file

@ -0,0 +1 @@
<f:render section="Content" />

View file

@ -0,0 +1,6 @@
<f:render section="Test" arguments="{controllername: '{#currentController.name}'}" /><f:section name="Test">{controllername}
{#currentController.actionName}
{#currentController.packageKey}
{#currentController.subpackageKey}
{#currentController.objectName}
{#currentController.format}</f:section>

View file

@ -0,0 +1,6 @@
{#currentController.name}
{#currentController.actionName}
{#currentController.packageKey}
{#currentController.subpackageKey}
{#currentController.objectName}
{#currentController.format}

View file

@ -0,0 +1,7 @@
<f:layout name="Test" />
<f:section name="Content">{#currentController.name}
{#currentController.actionName}
{#currentController.packageKey}
{#currentController.subpackageKey}
{#currentController.objectName}
{#currentController.format}</f:section>

View file

@ -0,0 +1,84 @@
<?php
declare(strict_types=1);
namespace DigiComp\FluidCurrentControllerExpression\Tests\Functional;
use Neos\Flow\Mvc\Routing\Route;
use Neos\Flow\Tests\FunctionalTestCase;
class CurrentControllerExpressionNodeTest extends FunctionalTestCase
{
/**
* Initializer
*/
protected function setUp(): void
{
parent::setUp();
$route = new Route();
$route->setUriPattern('test/currentcontrollerexpressions/test(/{@action})');
$route->setDefaults([
'@package' => 'DigiComp.FluidCurrentControllerExpression',
'@subpackage' => 'Tests\Functional\Fixtures',
'@controller' => 'Test',
'@action' => 'index',
]);
$route->setAppendExceedingArguments(true);
$this->router->addRoute($route);
}
/**
* @test
*/
public function itReturnsCurrentControllerInformations(): void
{
$response = $this->browser->request('http://localhost/test/currentcontrollerexpressions/test');
static::assertEquals(
'Test
index
DigiComp.FluidCurrentControllerExpression
Tests\Functional\Fixtures
DigiComp\FluidCurrentControllerExpression\Tests\Functional\Fixtures\Controller\TestController
html
',
(string)$response->getBody()
);
}
/**
* @test
*/
public function itReturnsCurrentControllerInformationsUsedInLayouts(): void
{
$response = $this->browser->request('http://localhost/test/currentcontrollerexpressions/test/withlayout');
static::assertEquals(
'Test
withLayout
DigiComp.FluidCurrentControllerExpression
Tests\Functional\Fixtures
DigiComp\FluidCurrentControllerExpression\Tests\Functional\Fixtures\Controller\TestController
html
',
(string)$response->getBody()
);
}
/**
* @test
*/
public function itReturnsCurrentControllerInformationsUsedInArrays(): void
{
$response = $this->browser->request('http://localhost/test/currentcontrollerexpressions/test/inArrays');
static::assertEquals(
'Test
inArrays
DigiComp.FluidCurrentControllerExpression
Tests\Functional\Fixtures
DigiComp\FluidCurrentControllerExpression\Tests\Functional\Fixtures\Controller\TestController
html
',
(string)$response->getBody()
);
}
}

View file

@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
namespace DigiComp\FluidCurrentControllerExpression\Tests\Functional\Fixtures\Controller;
use Neos\Flow\Mvc\Controller\ActionController;
class TestController extends ActionController
{
public function indexAction()
{
}
public function withLayoutAction()
{
}
public function inArraysAction()
{
}
}

35
composer.json Normal file
View file

@ -0,0 +1,35 @@
{
"name": "digicomp/fluid-currentcontroller-expression",
"type": "neos-package",
"description": "Extends fluid with expressions to retrieve current's ActionRequest values",
"require": {
"php": "^7.4 | ^8.1",
"neos/flow": "^6.3 | ^7.3 | ^8.2",
"neos/fluid-adaptor": "^6.3 | ^7.3 | ^8.3"
},
"extra":{
"branch-alias": {
"dev-develop": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"DigiComp\\FluidCurrentControllerExpression\\": "Classes/"
}
},
"authors": [
{
"name": "Ferdinand Kuhl",
"email": "f.kuhl@digital-competence.de",
"homepage": "https://www.digital-competence.de",
"role": "Developer"
}
],
"license": "MIT",
"homepage": "https://git.digital-competence.de/Packages/DigiComp.FluidCurrentControllerExpression",
"keywords": [
"Neos",
"Flow",
"fluid"
]
}