8e552764c70a9dfffb91989b65a862a67bed3a68
[yaffs-website] / vendor / drupal / console / src / Generator / ServiceGenerator.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Generator\ServiceGenerator.
6  */
7
8 namespace Drupal\Console\Generator;
9
10 use Drupal\Console\Core\Generator\Generator;
11 use Drupal\Console\Extension\Manager;
12
13 class ServiceGenerator extends Generator
14 {
15     /**
16      * @var Manager
17      */
18     protected $extensionManager;
19
20     /**
21      * AuthenticationProviderGenerator constructor.
22      *
23      * @param Manager $extensionManager
24      */
25     public function __construct(
26         Manager $extensionManager
27     ) {
28         $this->extensionManager = $extensionManager;
29     }
30
31     /**
32      * {@inheritdoc}
33      */
34     public function generate(array $parameters)
35     {
36         $module = $parameters['module'];
37         $class = $parameters['class'];
38         $path_service = $parameters['path_service'];
39
40         $parameters['interface'] = $parameters['interface'] ? ($parameters['interface_name'] ?: $class . 'Interface') : false;
41         $interface = $parameters['interface'];
42         $moduleServiceYaml = $this->extensionManager->getModule($module)->getPath() . '/' . $module . '.services.yml';
43         $parameters['class_path'] = sprintf('Drupal\%s\%s', $module, $class);
44         $parameters['file_exists'] = file_exists($moduleServiceYaml);
45        
46         $this->renderFile(
47             'module/services.yml.twig',
48             $moduleServiceYaml,
49             $parameters,
50             FILE_APPEND
51         );
52
53         $this->renderFile(
54             'module/src/service.php.twig',
55             $this->setDirectory($path_service, 'service.php.twig', $module, $class),
56             $parameters
57         );
58
59         if ($interface) {
60             $this->renderFile(
61                 'module/src/service-interface.php.twig',
62                 $this->setDirectory($path_service, 'interface.php.twig', $module, $interface),
63                 $parameters
64             );
65         }
66     }
67
68     protected function setDirectory($target, $template, $module, $class)
69     {
70         $default_path = '/modules/custom/' . $module . '/src/';
71         $directory = '';
72         $modulePath = $this->extensionManager->getModule($module)->getPath();
73
74         switch ($template) {
75             case 'service.php.twig':
76             case 'interface.php.twig':
77                 $default_target = $modulePath . '/src/' . $class . '.php';
78                 $custom_target = $modulePath . '/' . $target . '/' . $class . '.php';
79
80                 $directory = (strcmp($target, $default_path) == 0) ? $default_target : $custom_target;
81             break;
82         default:
83             // code...
84             break;
85         }
86
87         return $directory;
88     }
89 }