424 lines
15 KiB
PHP
424 lines
15 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Update;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Controllers\Utility\LibraryController as Utility;
|
|
use App\Model\Update\BarNotification;
|
|
use Artisan;
|
|
use Exception;
|
|
use Illuminate\Http\Request;
|
|
|
|
class UpgradeController extends Controller
|
|
{
|
|
public $dir;
|
|
|
|
public function __construct()
|
|
{
|
|
$dir = base_path();
|
|
$this->dir = $dir;
|
|
}
|
|
|
|
public function getLatestVersion()
|
|
{
|
|
try {
|
|
$name = \Config::get('app.name');
|
|
//dd($name);
|
|
//serial key should be encrypted data
|
|
$serial_key = '64JAHF9WVJA4GCUZ';
|
|
//order number should be encrypted data
|
|
$order_number = '44596328';
|
|
$url = env('APP_URL');
|
|
$data = [
|
|
'serial_key' => $serial_key,
|
|
'order_number' => $order_number,
|
|
'name' => $name,
|
|
'version' => Utility::getFileVersion(),
|
|
'request_type' => 'check_update',
|
|
'url' => $url,
|
|
];
|
|
$data = Utility::encryptByFaveoPublicKey(json_encode($data));
|
|
//dd($data);
|
|
$post_data = [
|
|
'data' => $data,
|
|
];
|
|
$url = 'http://faveohelpdesk.com/billing/public/verification';
|
|
if (str_contains($url, ' ')) {
|
|
$url = str_replace(' ', '%20', $url);
|
|
}
|
|
$curl = $this->postCurl($url, $post_data);
|
|
if (is_array($curl)) {
|
|
if (array_key_exists('status', $curl)) {
|
|
if ($curl['status'] == 'success') {
|
|
if (array_key_exists('version', $curl)) {
|
|
return $curl['version'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch (\Exception $ex) {
|
|
return redirect()->back()->with('fails', $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function downloadLatestCode()
|
|
{
|
|
$name = \Config::get('app.name');
|
|
$durl = 'http://www.faveohelpdesk.com/billing/public/download-url';
|
|
if (str_contains($durl, ' ')) {
|
|
$durl = str_replace(' ', '%20', $durl);
|
|
}
|
|
$data = [
|
|
'name' => $name,
|
|
];
|
|
$download = $this->postDownloadCurl($durl, $data);
|
|
|
|
$download_url = $download['zipball_url'];
|
|
|
|
return $download_url;
|
|
}
|
|
|
|
public function saveLatestCodeAtTemp($download_url)
|
|
{
|
|
echo '<p>Downloading New Update</p>';
|
|
$context = stream_context_create(
|
|
[
|
|
'http' => [
|
|
'header' => 'User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
|
|
],
|
|
]
|
|
);
|
|
|
|
$newUpdate = file_get_contents($download_url, false, $context);
|
|
if (!is_dir("$this->dir/UPDATES/")) {
|
|
\File::makeDirectory($this->dir.'/UPDATES/', 0777);
|
|
}
|
|
|
|
$dlHandler = fopen($this->dir.'/UPDATES/'.'/faveo-helpdesk-master.zip', 'w');
|
|
if (!fwrite($dlHandler, $newUpdate)) {
|
|
echo '<p>Could not save new update. Operation aborted.</p>';
|
|
exit();
|
|
}
|
|
fclose($dlHandler);
|
|
echo '<p>Update Downloaded And Saved</p>';
|
|
}
|
|
|
|
public function doUpdate()
|
|
{
|
|
try {
|
|
$memory_limit = ini_get('memory_limit');
|
|
if ($memory_limit < 256) {
|
|
echo '<ul class=list-unstyled>';
|
|
echo "<li style='color:red;'>Sorry we can not process your request because of limited memory! You have only $memory_limit. For this you need atleast 256 MB</li>";
|
|
echo '</ul>';
|
|
|
|
return 0;
|
|
}
|
|
if (!extension_loaded('zip')) {
|
|
echo '<ul class=list-unstyled>';
|
|
echo "<li style='color:red;'>Sorry we can not process your request because you don't have ZIP extension contact your system admin</li>";
|
|
echo '</ul>';
|
|
|
|
return 0;
|
|
}
|
|
//Artisan::call('down');
|
|
$update = $this->dir.'/UPDATES';
|
|
//Open The File And Do Stuff
|
|
$zipHandle = zip_open($update.'/faveo-helpdesk-master.zip');
|
|
//dd($update . '/faveo-' . $aV . '.zip');
|
|
|
|
echo '<ul class=list-unstyled>';
|
|
while ($aF = zip_read($zipHandle)) {
|
|
$thisFileName = zip_entry_name($aF);
|
|
$thisFileDir = dirname($thisFileName);
|
|
|
|
//Continue if its not a file
|
|
if (substr($thisFileName, -1, 1) == '/') {
|
|
continue;
|
|
}
|
|
|
|
//Make the directory if we need to...
|
|
if (!is_dir($update.'/'.$thisFileDir.'/')) {
|
|
\File::makeDirectory($update.'/'.$thisFileDir, 0775, true, true);
|
|
// mkdir($update.'/'. $thisFileDir, 0775);
|
|
echo '<li style="color:white;">Created Directory '.$thisFileDir.'</li>';
|
|
}
|
|
|
|
//Overwrite the file
|
|
if (!is_dir($update.'/'.$thisFileName)) {
|
|
echo '<li style="color:white;">'.$thisFileName.'...........';
|
|
$contents = zip_entry_read($aF, zip_entry_filesize($aF));
|
|
$contents = str_replace("\r\n", "\n", $contents);
|
|
$updateThis = '';
|
|
|
|
//If we need to run commands, then do it.
|
|
if ($thisFileName == $thisFileDir.'/.env') {
|
|
if (is_file($update.'/'.$thisFileDir.'/.env')) {
|
|
unlink($update.'/'.$thisFileDir.'/.env');
|
|
unlink($update.'/'.$thisFileDir.'/config/database.php');
|
|
}
|
|
echo' EXECUTED</li>';
|
|
} else {
|
|
$updateThis = fopen($update.'/'.$thisFileName, 'w');
|
|
fwrite($updateThis, $contents);
|
|
fclose($updateThis);
|
|
unset($contents);
|
|
echo' UPDATED</li>';
|
|
}
|
|
}
|
|
}
|
|
echo '</ul>';
|
|
//Artisan::call('migrate', ['--force' => true]);
|
|
return true;
|
|
} catch (Exception $ex) {
|
|
echo '<ul class=list-unstyled>';
|
|
echo "<li style='color:red;'>".$ex->getMessage().'</li>';
|
|
echo '</ul>';
|
|
}
|
|
}
|
|
|
|
public function copyToActualDirectory($latest_version)
|
|
{
|
|
try {
|
|
echo '<ul class=list-unstyled>';
|
|
$directory = "$this->dir/UPDATES";
|
|
$destination = $this->dir;
|
|
// $destination = "/Applications/AMPPS/www/test/new";
|
|
$directories = \File::directories($directory);
|
|
|
|
// echo "current directory => $directory <br>";
|
|
// echo "Destination Directory => $destination <br>";
|
|
foreach ($directories as $source) {
|
|
$success = \File::copyDirectory($source, $destination);
|
|
echo '<li class="success">» </li>';
|
|
}
|
|
|
|
\File::deleteDirectory($directory);
|
|
|
|
$this->deleteBarNotification('new-version');
|
|
|
|
echo "<li style='color:green;'>» Faveo Updated to v".Utility::getFileVersion().'</li>';
|
|
echo '</ul>';
|
|
} catch (Exception $ex) {
|
|
echo '<ul class=list-unstyled>';
|
|
echo "<li style='color:red;'>".$ex->getMessage().'</li>';
|
|
echo '</ul>';
|
|
}
|
|
exit();
|
|
}
|
|
|
|
public function deleteBarNotification($key)
|
|
{
|
|
try {
|
|
$noti = new BarNotification();
|
|
$notifications = $noti->where('key', $key)->get();
|
|
foreach ($notifications as $notify) {
|
|
$notify->delete();
|
|
}
|
|
} catch (Exception $ex) {
|
|
throw new Exception($ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function fileUpdate()
|
|
{
|
|
try {
|
|
$latest_version = $this->getLatestVersion();
|
|
if (Utility::getFileVersion() < $latest_version) {
|
|
$url = url('file-upgrade');
|
|
|
|
return view('themes.default1.update.file', compact('url'));
|
|
}
|
|
|
|
return redirect('dashboard')->with('fails', 'Could not find latest realeases from repository.');
|
|
} catch (Exception $ex) {
|
|
return redirect()->back()->with('fails', $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function fileUpgrading(Request $request)
|
|
{
|
|
try {
|
|
//
|
|
$latest_version = $this->getLatestVersion();
|
|
|
|
$current_version = Utility::getFileVersion();
|
|
if ($latest_version != '') {
|
|
if (Utility::getFileVersion() < $latest_version) {
|
|
return view('themes.default1.update.update', compact('latest_version', 'current_version', 'request'));
|
|
}
|
|
}
|
|
|
|
return redirect('dashboard')->with('fails', 'Could not find latest realeases from repository.');
|
|
|
|
// else {
|
|
// return redirect()->back();
|
|
// }
|
|
} catch (Exception $ex) {
|
|
return redirect()->back()->with('fails', $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function testScroll()
|
|
{
|
|
$ex = 1000;
|
|
echo '<ul style=list-unstyled>';
|
|
for ($i = 0; $i < $ex; $i++) {
|
|
echo "<li style='color:white;'>updated</li>";
|
|
}
|
|
echo '</ul>';
|
|
}
|
|
|
|
public function fileUpgrading1(Request $request)
|
|
{
|
|
if (Utility::getFileVersion() < Utility::getDatabaseVersion()) {
|
|
$latest_version = $this->getLatestVersion();
|
|
// dd($latest_version);
|
|
$current_version = Utility::getFileVersion();
|
|
//dd($current_version);
|
|
if ($latest_version != '') {
|
|
echo "<p>CURRENT VERSION: $current_version</p>";
|
|
echo '<p>Reading Current Releases List</p>';
|
|
if ($latest_version > $current_version) {
|
|
echo '<p>New Update Found: v'.$latest_version.'</p>';
|
|
$found = true;
|
|
if (!is_file("$this->dir/UPDATES/faveo-helpdesk-master.zip")) {
|
|
if ($request->get('dodownload') == true) {
|
|
$download_url = $this->downloadLatestCode();
|
|
if ($download_url != null) {
|
|
$this->saveLatestCodeAtTemp($download_url);
|
|
} else {
|
|
echo '<p>Error in you network connection.</p>';
|
|
}
|
|
} else {
|
|
echo '<p>Latest code found. <a href='.url('file-upgrade?dodownload=true').'>» Download Now?</a></p>';
|
|
exit();
|
|
}
|
|
} else {
|
|
echo '<p>Update already downloaded.</p>';
|
|
}
|
|
if ($request->get('doUpdate') == true) {
|
|
$updated = $this->doUpdate();
|
|
} else {
|
|
echo '<p>Update ready. <a href='.url('file-upgrade?doUpdate=true').'>» Install Now?</a></p>';
|
|
exit();
|
|
}
|
|
|
|
if ($updated == true) {
|
|
$this->copyToActualDirectory($latest_version);
|
|
} elseif ($found != true) {
|
|
echo '<p>» No update is available.</p>';
|
|
}
|
|
} else {
|
|
echo '<p>Could not find latest realeases.</p>';
|
|
}
|
|
} else {
|
|
echo '<p>Could not find latest realeases from repository.</p>';
|
|
}
|
|
} else {
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
public function getCurl($url)
|
|
{
|
|
try {
|
|
$curl = Utility::_isCurl();
|
|
if (!$curl) {
|
|
throw new Exception('Please enable your curl function to check latest update');
|
|
}
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
if (curl_exec($ch) === false) {
|
|
echo 'Curl error: '.curl_error($ch);
|
|
}
|
|
$data = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
return $data;
|
|
} catch (Exception $ex) {
|
|
return redirect()->back()->with('fails', $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function postDownloadCurl($url, $data)
|
|
{
|
|
try {
|
|
$curl = Utility::_isCurl();
|
|
if (!$curl) {
|
|
throw new Exception('Please enable your curl function to check latest update');
|
|
}
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
if (curl_exec($ch) === false) {
|
|
echo 'Curl error: '.curl_error($ch);
|
|
}
|
|
$data = curl_exec($ch);
|
|
curl_close($ch);
|
|
|
|
return json_decode($data, true);
|
|
} catch (Exception $ex) {
|
|
return redirect()->back()->with('fails', $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function postCurl($url, $data)
|
|
{
|
|
try {
|
|
$curl = Utility::_isCurl();
|
|
if (!$curl) {
|
|
throw new Exception('Please enable your curl function to check latest update');
|
|
}
|
|
$ch = curl_init();
|
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
if (curl_exec($ch) === false) {
|
|
echo 'Curl error: '.curl_error($ch);
|
|
}
|
|
$data = curl_exec($ch);
|
|
curl_close($ch);
|
|
$data = Utility::decryptByFaveoPrivateKey($data);
|
|
|
|
return json_decode($data, true);
|
|
} catch (Exception $ex) {
|
|
return redirect()->back()->with('fails', $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function databaseUpdate()
|
|
{
|
|
try {
|
|
if (Utility::getFileVersion() > Utility::getDatabaseVersion()) {
|
|
$url = url('database-upgrade');
|
|
//$string = "Your Database is outdated please upgrade <a href=$url>Now !</a>";
|
|
return view('themes.default1.update.database', compact('url'));
|
|
} else {
|
|
return redirect()->back();
|
|
}
|
|
} catch (Exception $ex) {
|
|
return redirect()->back()->with('fails', $ex->getMessage());
|
|
}
|
|
}
|
|
|
|
public function databaseUpgrade()
|
|
{
|
|
try {
|
|
if (Utility::getFileVersion() > Utility::getDatabaseVersion()) {
|
|
Artisan::call('migrate', ['--force' => true]);
|
|
|
|
return redirect('dashboard')->with('success', 'Database updated');
|
|
} else {
|
|
return redirect()->back();
|
|
}
|
|
} catch (Exception $ex) {
|
|
return redirect()->back()->with('fails', $ex->getMessage());
|
|
}
|
|
}
|
|
}
|