Browse Source

Do not generate files whose first line is "<?php /* DO NOT GENERATE */ ?>"

Vijayakrishnan Krishnan 5 năm trước cách đây
mục cha
commit
b54f099b74
1 tập tin đã thay đổi với 48 bổ sung27 xóa
  1. 48 27
      app/Console/Commands/GenerateTreeCommand.php

+ 48 - 27
app/Console/Commands/GenerateTreeCommand.php

@@ -27,7 +27,7 @@ class GenerateTreeCommand extends Command
     {
 
         $lines = ['<?php', '', 'use Illuminate\Support\Facades\Route;', '', ''];
-        file_put_contents(base_path("routes/generated.php"), implode("\n", $lines));
+        GenerateTreeCommand::save(base_path("routes/generated.php"), implode("\n", $lines));
 
         $sideLinks = [];
 
@@ -320,7 +320,7 @@ class GenerateTreeCommand extends Command
         echo "Saved " . base_path("routes/generated.php") . "\n";
 
         // save side links
-        file_put_contents(resource_path("views/layouts/generated-links.blade.php"), implode("\n", $sideLinks));
+        GenerateTreeCommand::save(resource_path("views/layouts/generated-links.blade.php"), implode("\n", $sideLinks));
         echo "Saved " . resource_path("views/layouts/generated-links.blade.php") . "\n";
 
         $this->humanizeRoutes();
@@ -413,11 +413,45 @@ class GenerateTreeCommand extends Command
             $lines[] = "";
         }
 
-        file_put_contents($path, implode("\n", $lines));
+        GenerateTreeCommand::save($path, implode("\n", $lines));
 
         echo "Cleaned " . base_path("routes/generated.php") . "\n";
 
     }
+
+    public static function save($dir, $contents, $flags = FALSE){
+
+        // if file exists, check if it has "DO NOT GENERATE" as the first line
+        if(file_exists($dir) && is_file($dir)) {
+            $file = fopen($dir, "r");
+            $lines = [];
+            $line = rtrim(fgets($file));
+            if($line === '<?php /* DO NOT GENERATE */ ?>') {
+                dump("Not writing to protected file: $dir");
+                fclose($file);
+                return;
+            }
+            fclose($file);
+            $file = null;
+        }
+
+        $dir = str_replace("\\", "/", $dir);
+        $dir = str_replace( '//', '/', $dir);
+        $parts = explode('/', $dir);
+        $file = array_pop($parts);
+        $dir = '';
+        foreach($parts as $part) {
+            if(strlen($part) === 0 || $part[strlen($part) - 1] !== ':') {
+                if(!is_dir($dir .= "/$part")) mkdir($dir);
+            }
+        }
+        if($flags !== FALSE) {
+            file_put_contents("$dir/$file", $contents, $flags);
+        }
+        else {
+            file_put_contents("$dir/$file", $contents);
+        }
+    }
 }
 
 class GenController {
@@ -585,7 +619,7 @@ class GenController {
         }
         $text = str_replace("_NAME_", "{$this->name}_Controller", $text);
         $text = str_replace("// __METHODS__", implode("\n", $code), $text);
-        file_put_contents(app_path("Http/Controllers/{$this->name}_Controller.php"), $text);
+        GenerateTreeCommand::save(app_path("Http/Controllers/{$this->name}_Controller.php"), $text);
         echo "Generated " . app_path("Http/Controllers/{$this->name}_Controller.php") . "\n";
     }
     public function saveView(GenController $controller, GenControllerMethod $method) {
@@ -707,7 +741,7 @@ class GenController {
         }
         $text = str_replace("<!-- __SCAFFOLD_THS__ -->", implode("\n", $ths), $text);
         $text = str_replace("<!-- __SCAFFOLD_TDS__ -->", implode("\n", $tds), $text);
-        $this->file_force_contents(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
+        GenerateTreeCommand::save(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
         echo "Generated " . resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php") . "\n";
     }
     public function saveShowView(GenController $controller, GenControllerMethod $method)
@@ -725,7 +759,7 @@ class GenController {
         $text = str_replace("_NAME_", $this->snakeToTitleCase($controller->name), $text);
         $text = str_replace("_UID_", '<?= $record->uid ?>', $text);
         $text = str_replace("_INDEX_ROUTE_", $controller->name . '-index', $text);
-        $this->file_force_contents(resource_path("views/{$controller->root}/{$controller->name}/info.blade.php"), $text);
+        GenerateTreeCommand::save(resource_path("views/{$controller->root}/{$controller->name}/info.blade.php"), $text);
         echo "Generated " . resource_path("views/{$controller->root}/{$controller->name}/info.blade.php") . "\n";
 
         // write main view
@@ -735,7 +769,7 @@ class GenController {
         $text = str_replace("_INDEX_ROUTE_", $controller->name . '-index', $text);
         $text = str_replace("_SUB_LINKS_VIEW_", "{$controller->root}/{$controller->name}/subs", $text);
         $text = str_replace("_INFO_VIEW_", "{$controller->root}/{$controller->name}/info", $text);
-        $this->file_force_contents(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
+        GenerateTreeCommand::save(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
         echo "Generated " . resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php") . "\n";
     }
     public function saveSubLinks(GenController $controller, GenControllerMethod $method)
@@ -759,7 +793,7 @@ class GenController {
                 . "'>$display</a>" .
                 ($meth->show ? " @endif" : "");
         }
-        $this->file_force_contents($subLinksView, implode("\n", $subLinks));
+        GenerateTreeCommand::save($subLinksView, implode("\n", $subLinks));
         echo "Generated " . $subLinksView . "\n";
         $controller->subLinksSaved = true;
     }
@@ -778,7 +812,7 @@ class GenController {
                 "class='d-block btn btn-sm btn-default mb-3'>$display</a>" .
                 ($meth->show ? " @endif" : "");
         }
-        $this->file_force_contents($actionLinksView, implode("\n", $actionLinks));
+        GenerateTreeCommand::save($actionLinksView, implode("\n", $actionLinks));
         echo "Generated " . $actionLinksView . "\n";
         $controller->actionLinksSaved = true;
     }
@@ -787,7 +821,7 @@ class GenController {
         $text = file_get_contents(base_path('generatecv/tree-templates/sub.template.blade.php'));
         $text = str_replace("_LAYOUT_", "{$controller->root}.{$controller->parentControllerName}.view", $text);
         $text = $this->generateSubContent($controller, $method, $text);
-        $this->file_force_contents(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
+        GenerateTreeCommand::save(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
         echo "Generated " . resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php") . "\n";
     }
     public function saveSubActionView(GenController $controller, GenControllerMethod $method) {
@@ -817,7 +851,7 @@ class GenController {
             }
         }
         $text = str_replace("<!-- _SCAFFOLD_FIELDS_ -->", implode("\n", $fields), $text);
-        $this->file_force_contents(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
+        GenerateTreeCommand::save(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
         echo "Generated " . resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php") . "\n";
     }
     public function saveSubIndexView(GenController $controller, GenControllerMethod $method) {
@@ -898,7 +932,7 @@ class GenController {
         }
         $text = str_replace("<!-- __SCAFFOLD_THS__ -->", implode("\n", $ths), $text);
         $text = str_replace("<!-- __SCAFFOLD_TDS__ -->", implode("\n", $tds), $text);
-        $this->file_force_contents(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
+        GenerateTreeCommand::save(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
         echo "Generated " . resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php") . "\n";
     }
     public function generateSubContent(GenController $controller, GenControllerMethod $method, $text) {
@@ -1037,7 +1071,7 @@ class GenController {
             $fields[] = $this->generateFormField($column);
         }
         $text = str_replace("<!-- _SCAFFOLD_FIELDS_ -->", implode("\n", $fields), $text);
-        $this->file_force_contents(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
+        GenerateTreeCommand::save(resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php"), $text);
         echo "Generated " . resource_path("views/{$controller->root}/{$controller->name}/{$method->name}.blade.php") . "\n";
     }
     public function saveRoutes() {
@@ -1049,7 +1083,7 @@ class GenController {
         }
         $lines[] = '';
         $lines[] = '';
-        file_put_contents(base_path("routes/generated.php"), implode("\n", $lines), FILE_APPEND);
+        GenerateTreeCommand::save(base_path("routes/generated.php"), implode("\n", $lines), FILE_APPEND);
     }
     public function log() {
         $this->w('');
@@ -1092,19 +1126,6 @@ class GenController {
         $text[0] = strtolower($text[0]);
         return $text;
     }
-    private function file_force_contents($dir, $contents){
-        $dir = str_replace("\\", "/", $dir);
-        $dir = str_replace( '//', '/', $dir);
-        $parts = explode('/', $dir);
-        $file = array_pop($parts);
-        $dir = '';
-        foreach($parts as $part) {
-            if(strlen($part) === 0 || $part[strlen($part) - 1] !== ':') {
-                if(!is_dir($dir .= "/$part")) mkdir($dir);
-            }
-        }
-        file_put_contents("$dir/$file", $contents);
-    }
     private function generateFormField($line) {
         $tokens = explode("=", $line);
         $default = false;