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

<?php
namespace App\SearchDisplace;
use Illuminate\Support\Facades\Storage;
class SearchAndDisplaceFromFiles
{
protected $id;
protected $storage;
protected $documentFilePath;
protected $infoFilePath;
public function __construct($id)
{
$this->id = $id;
$this->storage = Storage::disk('local');
$this->documentFilePath = "contracts/$this->id.md";
$this->infoFilePath = "searchers/$this->id.json";
}
public function execute()
{
if ( ! $this->storage->exists($this->documentFilePath) || ! $this->storage->exists($this->infoFilePath)) {
// Handle this case, must report result to user.
return;
}
try {
$documentContent = $this->storage->get($this->documentFilePath);
$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->delete($this->documentFilePath);
$this->storage->delete($this->infoFilePath);
}
}
}