Mercurial > packages > magicforger
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); + } +}
