arcadiasuite/plus/app/Http/Controllers/UpdateFileController.php

141 lines
4.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\SystemUpdate;
class UpdateFileController extends Controller
{
public function index(){
$update = SystemUpdate::orderBy('id', 'desc')->first();
return view('update_file.index', compact('update'));
}
public function log(){
$data = SystemUpdate::orderBy('id', 'desc')->get();
return view('update_file.log', compact('data'));
}
public function setVersion(Request $request){
$versao = $request->versao;
$system = SystemUpdate::where('versao', $versao)->first();
if($system == null){
SystemUpdate::create(['versao' => $versao]);
}
return redirect()->back();
}
public function store(Request $request){
$raiz = public_path();
$raiz = substr($raiz, 0, strlen($raiz)-7);
if (!is_dir("$raiz/temp-files")){
mkdir("$raiz/temp-files", 0777, true);
}
$logMessage = [];
$zip = new \ZipArchive();
if ($zip->open($request->file) === TRUE) {
$zip->extractTo("$raiz/temp-files");
$zip->close();
array_push($logMessage, "Arquivo zip extraido em /temp-files");
}else{
echo "Erro ao extrair arquivo";
die;
}
if(is_file("$raiz/temp-files/new_tables_api.sql")){
$lines = file_get_contents("$raiz/temp-files/new_tables_api.sql");
$lines = explode(";", $lines);
foreach($lines as $sql){
if(trim($sql)){
try{
\DB::unprepared("$sql;");
array_push($logMessage, "Comando SQL executado <strong class='text-info'>$sql</strong>;");
}catch(\Exception $e){
// array_push($logMessage, "Erro ao inserir tabela: " . $e->getMessage() . " - <strong class='text-success'>ISSO NÃO AFETA A ATUALIZAÇÃO</strong>");
}
}
}
}
if(is_file("$raiz/temp-files/comand_api.sql")){
$lines = file_get_contents("$raiz/temp-files/comand_api.sql");
$lines = explode(";", $lines);
foreach($lines as $sql){
if(trim($sql)){
try{
\DB::unprepared("$sql;");
array_push($logMessage, "Comando SQL executado <strong class='text-info'>$sql;</strong>");
}catch(\Exception $e){
// array_push($logMessage, "Erro ao executar SQL: " . $e->getMessage() . " - <strong class='text-success'>ISSO NÃO AFETA A ATUALIZAÇÃO</strong>");
}
}
}
}
$dir = "$raiz/temp-files";
$directories = array_diff(scandir($dir), array('..', '.'));
foreach($directories as $dir){
$source = "$raiz/temp-files/$dir";
$map = $this->mapDiretories($dir);
if($map != ""){
$destiny = "$raiz$map";
// echo $source . "<br>";
array_push($logMessage, "Alteração de diretório <strong class='text-success'>$source</strong>");
// echo $destiny . "<br>";
shell_exec("cp -r $source $destiny");
}
}
sleep(1);
if(is_file("$raiz/temp-files/versao.txt")){
$versao = file_get_contents("$raiz/temp-files/versao.txt");
$versao = explode("=", $versao);
$versao = isset($versao[1]) ? $versao[1] : "";
$system = SystemUpdate::where('versao', $versao)->first();
if($system == null){
SystemUpdate::create(['versao' => $versao]);
}
}
$this->unlinkr("$raiz/temp-files");
session()->flash('mensagem_sucesso', "Sua aplicação foi atualizada!!");
return view('update_file.finish', compact('logMessage'));
}
private function mapDiretories($dir){
$mapsDiretories = [
'app' => '/',
'routes' => '/',
'database' => '/',
'resources' => '/',
// 'vendor' => '/',
'config' => '/',
'js' => '/public',
'css' => '/public',
'imgs' => '/public',
'delivery' => '/public',
'food-files' => '/public',
];
return isset($mapsDiretories[$dir]) ? $mapsDiretories[$dir] : "";
}
function unlinkr($dir)
{
$files = array_diff(scandir($dir), array('.', '..'));
foreach ($files as $file) {
(is_dir("$dir/$file")) ? $this->unlinkr("$dir/$file") : unlink("$dir/$file");
}
return rmdir($dir);
}
}