From 6417e79afaf8dee2ba8dc5d1b1f4c5e16c5513ca Mon Sep 17 00:00:00 2001
From: Jan-Hendrik Willms <tleilax+github@gmail.com>
Date: Thu, 14 Oct 2021 09:14:16 +0200
Subject: [PATCH] more rector expirements

---
 rector.php                                    |  5 +--
 ...emoveIncludeOfDefaultControllersRector.php | 43 +++++++++++++++++++
 resources/rectors/sets/studip-5.0.php         | 32 ++++++++++++++
 3 files changed, 77 insertions(+), 3 deletions(-)
 create mode 100644 resources/rectors/rules/RemoveIncludeOfDefaultControllersRector.php

diff --git a/rector.php b/rector.php
index d6c4bf18d3..87d8f75731 100644
--- a/rector.php
+++ b/rector.php
@@ -2,8 +2,6 @@
 
 declare(strict_types=1);
 
-require_once __DIR__ . '/resources/rectors/rules/ReplaceConfigFunctionWithClassMethodRector.php';
-
 use Rector\Core\Configuration\Option;
 use Rector\Core\ValueObject\PhpVersion;
 use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
@@ -36,7 +34,8 @@ return static function (ContainerConfigurator $containerConfigurator): void
 
     $parameters->set(Option::PHPSTAN_FOR_RECTOR_PATH, __DIR__ . '/phpstan.neon');
     $parameters->set(Option::PATHS, [
-        getcwd() . '/db/migrations',
+        getcwd() . '/app/controllers',
+//        getcwd() . '/db/migrations',
         getcwd() . '/lib',
         getcwd() . '/public/plugins_packages/core',
     ]);
diff --git a/resources/rectors/rules/RemoveIncludeOfDefaultControllersRector.php b/resources/rectors/rules/RemoveIncludeOfDefaultControllersRector.php
new file mode 100644
index 0000000000..daa3529c17
--- /dev/null
+++ b/resources/rectors/rules/RemoveIncludeOfDefaultControllersRector.php
@@ -0,0 +1,43 @@
+<?php
+namespace Studip\Rectors;
+
+use PhpParser\Node;
+use PhpParser\Node\Expr\Include_;
+use Rector\Core\Rector\AbstractRector;
+use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
+use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
+
+final class RemoveIncludeOfDefaultControllersRector extends AbstractRector
+{
+    public function getRuleDefinition(): RuleDefinition
+    {
+        return new RuleDefinition('Remove includes/requires of default controllers', [
+            new CodeSample(
+                'require \'app/controllers/studip_controller.php\';',
+                ''
+            )
+        ]);
+    }
+
+    public function getNodeTypes(): array
+    {
+        return [Include_::class];
+    }
+
+    /**
+     * @param Include_ $node
+     */
+    public function refactor(Node $node)
+    {
+        if ($node->expr instanceof Node\Scalar\String_ && $this->isDefaultController($node->expr)) {
+            $this->removeNode($node);
+            return null;
+        }
+        return null;
+    }
+
+    private function isDefaultController(Node\Scalar\String_ $string): bool
+    {
+        return strpos($string->value, 'studip_controller') !== false;
+    }
+}
diff --git a/resources/rectors/sets/studip-5.0.php b/resources/rectors/sets/studip-5.0.php
index a5b7abe0bb..ffefd7ea24 100644
--- a/resources/rectors/sets/studip-5.0.php
+++ b/resources/rectors/sets/studip-5.0.php
@@ -2,10 +2,42 @@
 declare (strict_types=1);
 namespace Studip\Rectors\Sets;
 
+require_once __DIR__ . '/../rules/RemoveIncludeOfDefaultControllersRector.php';
+require_once __DIR__ . '/../rules/ReplaceConfigFunctionWithClassMethodRector.php';
+
+use Range;
+use Rector\Renaming\Rector\FuncCall\RenameFunctionRector;
+use Rector\Renaming\Rector\MethodCall\RenameMethodRector;
+use Rector\Renaming\ValueObject\MethodCallRename;
+use Studip\Rectors\RemoveIncludeOfDefaultControllersRector;
 use Studip\Rectors\ReplaceConfigFunctionWithClassMethodRector;
 use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
+use Symplify\SymfonyPhpConfig\ValueObjectInliner;
 
 return static function (ContainerConfigurator $containerConfigurator) : void {
     $services = $containerConfigurator->services();
     $services->set(ReplaceConfigFunctionWithClassMethodRector::class);
+    $services->set(RemoveIncludeOfDefaultControllersRector::class);
+    $services->set(RenameMethodRector::class)->call('configure', [
+        [
+            RenameMethodRector::METHOD_CALL_RENAMES => ValueObjectInliner::inline([
+                new MethodCallRename(Range::class, 'userMayAccessRange', 'isAccessibleToUser')
+            ]),
+        ],
+        [
+            RenameMethodRector::METHOD_CALL_RENAMES => ValueObjectInliner::inline([
+                new MethodCallRename(Range::class, 'userMayEditRange', 'isEditableByUser')
+            ]),
+        ],
+    ]);
+    $services->set(RenameFunctionRector::class)->call('configure', [
+        [
+            RenameFunctionRector::OLD_FUNCTION_TO_NEW_FUNCTION => [
+                'studip_utf8decode' => 'utf8_decode',
+                'studip_utf8encode' => 'utf8_encode',
+                'studip_json_decode' => 'json_decode', // Second parameter must be true?
+                'studip_json_encode' => 'json_encode',
+            ]
+        ]
+    ]);
 };
-- 
GitLab