348 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			348 lines
		
	
	
		
			12 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()
 | |
|     {
 | |
|         $name = \Config::get('app.name');
 | |
|         //serial key should be encrypted data
 | |
|         $serial_key = Utility::encryptByFaveoPublicKey('O5Y647RJF8QHLDOE');
 | |
|         //order number should be encrypted data
 | |
|         $order_number = Utility::encryptByFaveoPublicKey('23540755');
 | |
|         $url = url('/');
 | |
|         //dd($url);
 | |
|         $post_data = [
 | |
|             'serial_key'   => $serial_key,
 | |
|             'order_number' => $order_number,
 | |
|             'name'         => $name,
 | |
|             'version'      => Utility::getFileVersion(),
 | |
|             'request_type' => 'check_update',
 | |
|             'url'          => $url,
 | |
|         ];
 | |
|         $url = 'http://www.faveohelpdesk.com/billing/verification';
 | |
|         if (str_contains($url, ' ')) {
 | |
|             $url = str_replace(' ', '%20', $url);
 | |
|         }
 | |
|         $curl = $this->postCurl($url, $post_data);
 | |
|         //dd($curl);
 | |
|         if (is_array($curl)) {
 | |
|             if (array_key_exists('status', $curl)) {
 | |
|                 if ($curl['status'] == 'success') {
 | |
|                     if (array_key_exists('version', $curl)) {
 | |
|                         return $curl['version'];
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function downloadLatestCode()
 | |
|     {
 | |
|         $name = \Config::get('app.name');
 | |
|         $url = 'http://www.faveohelpdesk.com/billing/download-url';
 | |
|         if (str_contains($url, ' ')) {
 | |
|             $url = str_replace(' ', '%20', $url);
 | |
|         }
 | |
|         $data = [
 | |
|             'name' => $name,
 | |
|         ];
 | |
|         $download = $this->postCurl($url, $data);
 | |
| 
 | |
|         $url = $download['zipball_url'];
 | |
| 
 | |
|         return $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()
 | |
|     {
 | |
|         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('up');
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     public function copyToActualDirectory($latest_version)
 | |
|     {
 | |
|         $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 '<p class="success">» </p>';
 | |
|         }
 | |
| 
 | |
|         \File::deleteDirectory($directory);
 | |
| 
 | |
|         $this->deleteBarNotification('new-version');
 | |
| 
 | |
|         echo '<p class="success">» Faveo Updated to v'.Utility::getFileVersion().'</p>';
 | |
|     }
 | |
| 
 | |
|     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 {
 | |
|             if (Utility::getFileVersion() < Utility::getDatabaseVersion()) {
 | |
|                 $url = url('file-upgrade');
 | |
|                 //$string = "Your Database is outdated please upgrade <a href=$url>Now !</a>";
 | |
|                 return view('themes.default1.update.file', compact('url'));
 | |
|             } else {
 | |
|                 return redirect()->back();
 | |
|             }
 | |
|         } catch (Exception $ex) {
 | |
|             return redirect()->back()->with('fails', $ex->getMessage());
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function fileUpgrading(Request $request)
 | |
|     {
 | |
|         try {
 | |
|             if (Utility::getFileVersion() < Utility::getDatabaseVersion()) {
 | |
|                 $latest_version = $this->getLatestVersion();
 | |
|                 //dd($latest_version);
 | |
|                 $current_version = Utility::getFileVersion();
 | |
|                 if ($latest_version != '') {
 | |
|                     $_this = new self();
 | |
| 
 | |
|                     return view('themes.default1.update.test', compact('latest_version', 'current_version', 'request'));
 | |
|                 } else {
 | |
|                     return redirect()->back()->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)
 | |
|     {
 | |
|         $ch = curl_init();
 | |
|         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 | |
|         //curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
 | |
|         curl_setopt($ch, CURLOPT_URL, $url);
 | |
|         if (curl_exec($ch) === false) {
 | |
|             echo 'Curl error: '.curl_error($ch);
 | |
|         }
 | |
|         $data = curl_exec($ch);
 | |
|         dd($data);
 | |
|         curl_close($ch);
 | |
| 
 | |
|         return $data;
 | |
|     }
 | |
| 
 | |
|     public function postCurl($url, $data)
 | |
|     {
 | |
|         $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);
 | |
|     }
 | |
| 
 | |
|     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());
 | |
|         }
 | |
|     }
 | |
| }
 | 
