From 3737551f1bf37c4c266db5ba75a81748428b6b09 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Willms Date: Thu, 12 Dec 2024 21:05:16 +0100 Subject: course block type changes rector --- lib/Rectors/Studip-6.0-Set.php | 3 +- .../Studip60/RewriteCoursewareBlockTypesRector.php | 60 ++++++++++++++++++++++ rector-test.php | 42 +++++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 lib/Rectors/Studip60/RewriteCoursewareBlockTypesRector.php diff --git a/lib/Rectors/Studip-6.0-Set.php b/lib/Rectors/Studip-6.0-Set.php index ca019b2..438e794 100644 --- a/lib/Rectors/Studip-6.0-Set.php +++ b/lib/Rectors/Studip-6.0-Set.php @@ -8,7 +8,8 @@ use Studip\Rectors\Studip60\RemoveIncludesRector; return RectorConfig::configure() ->withRules([ Studip\Rectors\Studip60\RemoveGetConfigRector::class, - Studip\Rectors\Studip60\RemoveSidebarMethodsRector::class + Studip\Rectors\Studip60\RemoveSidebarMethodsRector::class, + Studip\Rectors\Studip60\RewriteCoursewareBlockTypesRector::class, ]) ->withConfiguredRule(RenameFunctionRector::class, [ 'studip_json_decode' => 'json_decode', diff --git a/lib/Rectors/Studip60/RewriteCoursewareBlockTypesRector.php b/lib/Rectors/Studip60/RewriteCoursewareBlockTypesRector.php new file mode 100644 index 0000000..396257e --- /dev/null +++ b/lib/Rectors/Studip60/RewriteCoursewareBlockTypesRector.php @@ -0,0 +1,60 @@ +shouldSkip($node)) { + return null; + } + + if ($node instanceof Class_) { + $this->traverseNodesWithCallable( + $node->getMethods(), + [$this, 'refactor'] + ); + + return null; + } elseif ($node instanceof ClassMethod) { + $node->returnType = new Node\Identifier('string'); + return $node; + } elseif ($node instanceof StaticCall) { + return $node->args[0]->value; + } + + } + + public function shouldSkip(Node $node): bool + { + return !( + $node instanceof Class_ + && $this->isName($node->extends, 'Courseware\BlockTypes\BlockType') + ) && !( + $node instanceof ClassMethod + && $this->isName($node->name, 'getJsonSchema') + && $this->isName($node->returnType, 'Opis\JsonSchema\Schema') + ) && !( + $node instanceof StaticCall + && $this->isName($node->class, 'Opis\JsonSchema\Schema') + && $this->isName($node->name, 'fromJsonString') + ); + } +} diff --git a/rector-test.php b/rector-test.php index 046b79a..86f491a 100644 --- a/rector-test.php +++ b/rector-test.php @@ -51,3 +51,45 @@ try { echo 'some exception'; } +class TestBlockType extends \Courseware\BlockTypes\BlockType +{ + public static function getType(): string + { + return ''; + } + + public static function getTitle(): string + { + return ''; + } + + public static function getDescription(): string + { + return ''; + } + + public function initialPayload(): array + { + return []; + } + + public static function getCategories(): array + { + return []; + } + + public static function getContentTypes(): array + { + return []; + } + + public static function getFileTypes(): array + { + return []; + } + + public static function getJsonSchema(): \Opis\JsonSchema\Schema + { + return \Opis\JsonSchema\Schema::fromJsonString(file_get_contents(__FILE__)); + } +} -- cgit v1.0