/**
  * @Flow\Before("method(TYPO3\Neos\Service\LinkingService->createNodeUri())")
  * @param \TYPO3\Flow\Aop\JoinPointInterface $joinPoint The current join point
  * @return void
  */
 public function dontResolveShortcuts(JoinPointInterface $joinPoint)
 {
     $node = $joinPoint->getMethodArgument('node');
     if ($node instanceof NodeInterface) {
         if (!in_array($node->getProperty('targetMode'), $this->legitShortcutTargets)) {
             $joinPoint->setMethodArgument('resolveShortcuts', FALSE);
         }
     } else {
         $joinPoint->setMethodArgument('resolveShortcuts', FALSE);
     }
 }
 /**
  * Add the current node and all parent identifiers to be used for cache entry tagging
  *
  * @Flow\Before("method(TYPO3\Flow\Mvc\Routing\RouterCachingService->extractUuids())")
  * @param \TYPO3\Flow\Aop\JoinPointInterface $joinPoint The current join point
  * @return void
  */
 public function addCurrentNodeIdentifier(JoinPointInterface $joinPoint)
 {
     $values = $joinPoint->getMethodArgument('values');
     if (!isset($values['node']) || strpos($values['node'], '@') === false) {
         return;
     }
     // Build context explicitly without authorization checks because the security context isn't available yet
     // anyway and any Entity Privilege targeted on Workspace would fail at this point:
     $this->securityContext->withoutAuthorizationChecks(function () use($joinPoint, $values) {
         $contextPathPieces = NodePaths::explodeContextPath($values['node']);
         $context = $this->contextFactory->create(['workspaceName' => $contextPathPieces['workspaceName'], 'dimensions' => $contextPathPieces['dimensions'], 'invisibleContentShown' => true]);
         $node = $context->getNode($contextPathPieces['nodePath']);
         if (!$node instanceof NodeInterface) {
             return;
         }
         $values['node-identifier'] = $node->getIdentifier();
         $node = $node->getParent();
         $values['node-parent-identifier'] = array();
         while ($node !== null) {
             $values['node-parent-identifier'][] = $node->getIdentifier();
             $node = $node->getParent();
         }
         $joinPoint->setMethodArgument('values', $values);
     });
 }
 /**
  * @Flow\Around("within(TYPO3\Flow\Property\TypeConverter\MediaTypeConverterInterface) && method(.*->convertMediaType())")
  * @param JoinPointInterface $joinPoint The current joinpoint
  * @return mixed
  */
 public function rewriteJsonApiOrgMediaTypeToJson(JoinPointInterface $joinPoint)
 {
     $mediaType = $joinPoint->getMethodArgument('mediaType');
     if (strpos($mediaType, 'application/vnd.api+json') !== false) {
         $joinPoint->setMethodArgument('mediaType', 'application/json');
     }
     return $joinPoint->getAdviceChain()->proceed($joinPoint);
 }
 /**
  * @Flow\Around("method(TYPO3\TYPO3CR\Domain\Model\NodeType->__construct())")
  * @return void
  */
 public function enrichNodeTypeConfiguration(JoinPointInterface $joinPoint)
 {
     $configuration = $joinPoint->getMethodArgument('configuration');
     $nodeTypeName = $joinPoint->getMethodArgument('name');
     $this->addEditorDefaultsToNodeTypeConfiguration($nodeTypeName, $configuration);
     $this->addLabelsToNodeTypeConfiguration($nodeTypeName, $configuration);
     $joinPoint->setMethodArgument('configuration', $configuration);
     $joinPoint->getAdviceChain()->proceed($joinPoint);
 }
 /**
  * @Flow\Before("method(TYPO3\Neos\Routing\FrontendNodeRoutePartHandler->matchValue())")
  * @return void
  */
 public function convertRoutePartToLowerCase(\TYPO3\Flow\AOP\JoinPointInterface $joinPoint)
 {
     $requestPath = $joinPoint->getMethodArgument('requestPath');
     if (strpos($requestPath, 'user')) {
         $parts = explode("user", $requestPath);
         $lowerCaseRequestPath = strtolower($parts[0]) . "user" . $parts[1];
     } else {
         $lowerCaseRequestPath = strtolower($requestPath);
     }
     $joinPoint->setMethodArgument('requestPath', $lowerCaseRequestPath);
 }
 /**
  * Add the current node identifier to be used for cache entry tagging
  *
  * @Flow\Before("method(TYPO3\Flow\Mvc\Routing\RouterCachingService->extractUuids())")
  * @param \TYPO3\Flow\Aop\JoinPointInterface $joinPoint The current join point
  * @return void
  */
 public function addCurrentNodeIdentifier(JoinPointInterface $joinPoint)
 {
     $values = $joinPoint->getMethodArgument('values');
     if (!isset($values['node']) || strpos($values['node'], '@') === false) {
         return;
     }
     list($nodePath, $contextArguments) = explode('@', $values['node']);
     $context = $this->getContext($contextArguments);
     $node = $context->getNode($nodePath);
     if ($node instanceof NodeInterface) {
         $values['node-identifier'] = $node->getIdentifier();
         $joinPoint->setMethodArgument('values', $values);
     }
 }
 /**
  * @Flow\Around("method(public TYPO3\Flow\Tests\Functional\Aop\Fixtures\TargetClass01->greet())")
  * @param \TYPO3\Flow\Aop\JoinPointInterface $joinPoint
  * @return string
  */
 public function changeNameArgumentAdvice(\TYPO3\Flow\Aop\JoinPointInterface $joinPoint)
 {
     if ($joinPoint->getMethodArgument('name') === 'Andi') {
         $joinPoint->setMethodArgument('name', 'Robert');
     }
     return $joinPoint->getAdviceChain()->proceed($joinPoint);
 }