Repo for the search and displace core module including the interface to select files and search and displace operations to run on them.
https://searchanddisplace.com
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.8 KiB
61 lines
1.8 KiB
<?php
|
|
|
|
namespace App\SearchDisplace;
|
|
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class SearchAndDisplaceFromFiles
|
|
{
|
|
protected $id;
|
|
protected $storage;
|
|
protected $directoryPath;
|
|
protected $infoFilePath;
|
|
|
|
public function __construct($id)
|
|
{
|
|
$this->id = $id;
|
|
|
|
$this->storage = Storage::disk('local');
|
|
|
|
$this->directoryPath = "contracts/$this->id";
|
|
$this->infoFilePath = "searchers/$this->id.json";
|
|
}
|
|
|
|
public function execute()
|
|
{
|
|
if ( ! $this->storage->exists($this->directoryPath) || ! $this->storage->exists($this->infoFilePath)) {
|
|
// Handle this case, must report result to user.
|
|
return;
|
|
}
|
|
|
|
try {
|
|
$documentContent = $this->storage->get("$this->directoryPath/document.md");
|
|
$searchersContent = json_decode($this->storage->get($this->infoFilePath), true);
|
|
|
|
$documentPath = $searchersContent['document_path'];
|
|
$searchers = $searchersContent['searchers'];
|
|
|
|
$this->storage->put($this->infoFilePath, json_encode($searchers[0]['content']));
|
|
|
|
$searchAndDisplace = new SearchAndDisplace($documentContent, [
|
|
'searchers' => [
|
|
[
|
|
'key' => $this->id,
|
|
'replace_with' => $searchers[0]['replace_with'],
|
|
]
|
|
],
|
|
]);
|
|
|
|
$result = $searchAndDisplace->execute();
|
|
|
|
file_put_contents($documentPath, $result['content']);
|
|
} catch (\Exception $exception) {
|
|
\Illuminate\Support\Facades\Log::info('EXCEPTION: ' . $exception->getMessage());
|
|
|
|
return;
|
|
} finally {
|
|
$this->storage->deleteDirectory($this->directoryPath);
|
|
$this->storage->delete($this->infoFilePath);
|
|
}
|
|
}
|
|
}
|