de0826ed69494b02abe67862df626d2de9935364
[yaffs-website] / vendor / drupal / console-core / src / Generator / Generator.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Console\Core\Generator\Generator.
6  */
7
8 namespace Drupal\Console\Core\Generator;
9
10 use Drupal\Console\Core\Utils\TwigRenderer;
11 use Drupal\Console\Core\Utils\FileQueue;
12 use Drupal\Console\Core\Utils\CountCodeLines;
13 use Drupal\Console\Core\Utils\DrupalFinder;
14
15 /**
16  * Class Generator
17  *
18  * @package Drupal\Console\Core\Generator
19  */
20 abstract class Generator
21 {
22     /**
23      * @var TwigRenderer
24      */
25     protected $renderer;
26
27     /**
28      * @var FileQueue
29      */
30     protected $fileQueue;
31
32     /**
33      * @var CountCodeLines
34      */
35     protected $countCodeLines;
36
37     /**
38      * @var DrupalFinder
39      */
40     protected $drupalFinder;
41
42     /**
43      * @param $renderer
44      */
45     public function setRenderer(TwigRenderer $renderer)
46     {
47         $this->renderer = $renderer;
48     }
49
50     /**
51      * @param $fileQueue
52      */
53     public function setFileQueue(FileQueue $fileQueue)
54     {
55         $this->fileQueue = $fileQueue;
56     }
57
58     /**
59      * @param $countCodeLines
60      */
61     public function setCountCodeLines(CountCodeLines $countCodeLines)
62     {
63         $this->countCodeLines = $countCodeLines;
64     }
65
66     /**
67      * @param DrupalFinder $drupalFinder
68      */
69     public function setDrupalFinder($drupalFinder)
70     {
71         $this->drupalFinder = $drupalFinder;
72     }
73
74     /**
75      * @param string $template
76      * @param string $target
77      * @param array  $parameters
78      * @param null   $flag
79      *
80      * @return bool
81      */
82     protected function renderFile(
83         $template,
84         $target,
85         $parameters = [],
86         $flag = null
87     ) {
88         if (!is_dir(dirname($target))) {
89             if (!mkdir(dirname($target), 0777, true)) {
90                 throw new \InvalidArgumentException(
91                     sprintf(
92                         'Path "%s" is invalid. You need to provide a valid path.',
93                         dirname($target)
94                     )
95                 );
96             }
97         }
98
99         $currentLine = 0;
100         if (!empty($flag) && file_exists($target)) {
101             $currentLine = count(file($target));
102         }
103         $content = $this->renderer->render($template, $parameters);
104
105         if (file_put_contents($target, $content, $flag)) {
106             $this->fileQueue->addFile($target);
107
108             $newCodeLine = count(file($target));
109
110             if ($currentLine > 0) {
111                 $newCodeLine = ($newCodeLine-$currentLine);
112             }
113
114             $this->countCodeLines->addCountCodeLines($newCodeLine);
115
116             return true;
117         }
118
119         return false;
120     }
121
122     public function addSkeletonDir($skeletonDir)
123     {
124         $this->renderer->addSkeletonDir($skeletonDir);
125     }
126 }