Further modules included.
[yaffs-website] / web / modules / contrib / drupalmoduleupgrader / src / Plugin / DMU / Fixer / ImplementHook.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\drupalmoduleupgrader\Plugin\DMU\Fixer\ImplementHook.
6  */
7
8 namespace Drupal\drupalmoduleupgrader\Plugin\DMU\Fixer;
9
10 use Drupal\Core\Extension\ModuleHandlerInterface;
11 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
12 use Drupal\drupalmoduleupgrader\FixerBase;
13 use Pharborist\DocCommentNode;
14 use Pharborist\Functions\FunctionDeclarationNode;
15 use Pharborist\Functions\ParameterNode;
16 use Symfony\Component\DependencyInjection\ContainerInterface;
17
18 /**
19  * @Fixer(
20  *  id = "implement_hook"
21  * )
22  */
23 class ImplementHook extends FixerBase implements ContainerFactoryPluginInterface {
24
25   protected $moduleHandler;
26
27   public function __construct(array $configuration, $plugin_id, $plugin_definition, ModuleHandlerInterface $module_handler) {
28     parent::__construct($configuration, $plugin_id, $plugin_definition);
29     $this->moduleHandler = $module_handler;
30   }
31
32   /**
33    * {@inheritdoc}
34    */
35   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
36     return new static(
37       $configuration,
38       $plugin_id,
39       $plugin_definition,
40       $container->get('module_handler')
41     );
42   }
43
44   /**
45    * {@inheritdoc}
46    */
47   public function execute() {
48     $this->moduleHandler->loadInclude($this->configuration['module'], 'php', 'api');
49
50     $hook = $this->configuration['hook'];
51     $function = FunctionDeclarationNode::create($this->target->id() . '_' . $hook);
52     $function->setDocComment(DocCommentNode::create('Implements hook_' . $hook));
53
54     $reflector = new \ReflectionFunction('hook_' . $hook);
55     $function->matchReflector($reflector);
56
57     $module = $this->target->getPath('.module');
58     $doc = $this->target->open($module)->append($function);
59     $this->target->save($doc);
60   }
61
62 }