drupalmoduleupgrader-8.x-1.5/src/Plugin/DMU/Fixer/ImplementHook.php
src/Plugin/DMU/Fixer/ImplementHook.php
<?php
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 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);
}
}
