Further modules included.
[yaffs-website] / web / modules / contrib / drupalmoduleupgrader / src / Plugin / DMU / Fixer / ImplementHook.php
diff --git a/web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/ImplementHook.php b/web/modules/contrib/drupalmoduleupgrader/src/Plugin/DMU/Fixer/ImplementHook.php
new file mode 100644 (file)
index 0000000..165bf08
--- /dev/null
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\drupalmoduleupgrader\Plugin\DMU\Fixer\ImplementHook.
+ */
+
+namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Fixer;
+
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Drupal\drupalmoduleupgrader\FixerBase;
+use Pharborist\DocCommentNode;
+use Pharborist\Functions\FunctionDeclarationNode;
+use Pharborist\Functions\ParameterNode;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * @Fixer(
+ *  id = "implement_hook"
+ * )
+ */
+class ImplementHook extends FixerBase implements ContainerFactoryPluginInterface {
+
+  protected $moduleHandler;
+
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, ModuleHandlerInterface $module_handler) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->moduleHandler = $module_handler;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('module_handler')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function execute() {
+    $this->moduleHandler->loadInclude($this->configuration['module'], 'php', 'api');
+
+    $hook = $this->configuration['hook'];
+    $function = FunctionDeclarationNode::create($this->target->id() . '_' . $hook);
+    $function->setDocComment(DocCommentNode::create('Implements hook_' . $hook));
+
+    $reflector = new \ReflectionFunction('hook_' . $hook);
+    $function->matchReflector($reflector);
+
+    $module = $this->target->getPath('.module');
+    $doc = $this->target->open($module)->append($function);
+    $this->target->save($doc);
+  }
+
+}