diff src/Helpers/FileModifier.php @ 12:4bb4daa9e3f1 development

Working with the new FileModifier
author luka
date Wed, 24 Apr 2024 19:52:35 -0400
parents
children c969ed13c570
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Helpers/FileModifier.php	Wed Apr 24 19:52:35 2024 -0400
@@ -0,0 +1,98 @@
+<?php
+
+namespace Wizzard\MagicForger\Helpers;
+
+/*
+ * FileModifier
+ *
+ * A class that handles all file modifications
+ *
+ * General flow:
+ * Provide a file, a point to insert, and a value to insert.
+ * Insert the data.
+ *
+ * Replacements will consume the insert point.
+ * Inserts will maintain the insert point.
+ *
+ * */
+class FileModifier
+{
+    private $contents;
+
+    /**
+     * @var mixed
+     */
+    public $file_path;
+
+
+    /**
+     * @param mixed $file_path
+     */
+    public function __construct($file_path)
+    {
+        $this->get_file_contents($file_path);
+        $this->file_path = $file_path;
+    }
+
+
+    /**
+     * @param mixed $file_path
+     * @return void
+     */
+    public function get_file_contents($file_path): void
+    {
+        //TODO: there needs to be more/any error checking
+        $f = fopen($file_path, "r");
+        $this->contents = fread($f, filesize($file_path));
+        fclose($f);
+    }
+
+
+    /**
+     * @param mixed $file_path
+     */
+    public function write_to_path($file_path = null): void
+    {
+        $file_path = $file_path ?? $this->file_path;
+
+        $f = fopen($file_path, "w");
+        fwrite($f, $this->contents);
+        fclose($f);
+    }
+
+
+    /**
+         * Replaces the replacement point with the value in the current contents
+         *
+     * @param mixed $value
+     * @param mixed $replacement_point
+     */
+    public function replace($value, $replacement_point): void
+    {
+        $this->contents = str_replace($replacement_point, $value, $this->contents);
+    }
+
+
+    /**
+         * Inserts the value above the insert point in the current contents
+         *
+     * @param mixed $value
+     * @param mixed $insert_point
+     * @return void
+     */
+    public function insert($value, $insert_point): void
+    {
+        //seperate on new lines into an array
+        $file_arr = explode("\n", $this->contents);
+        $temp_arr = [];
+
+        foreach($file_arr as $line) {
+            if(str_contains($line, $insert_point)) {
+                $temp_arr[] = $value;
+            }
+            $temp_arr[] = $line;
+        }
+
+        $this->contents = implode("\n",$temp_arr);
+    }
+}