json(['message' => ctrans('texts.self_update_not_available')], 403); // } // $this->testWritable(); // // Get the new version available // $versionAvailable = $updater->source()->getVersionAvailable(); // // Create a release // $release = $updater->source()->fetch($versionAvailable); // $updater->source()->update($release); // $cacheCompiled = base_path('bootstrap/cache/compiled.php'); // if (file_exists($cacheCompiled)) { unlink ($cacheCompiled); } // $cacheServices = base_path('bootstrap/cache/services.php'); // if (file_exists($cacheServices)) { unlink ($cacheServices); } // Artisan::call('clear-compiled'); // Artisan::call('route:clear'); // Artisan::call('view:clear'); // Artisan::call('optimize'); // return response()->json(['message' => 'Update completed'], 200); // } public function update() { set_time_limit(0); define('STDIN', fopen('php://stdin', 'r')); if (Ninja::isHosted()) { return response()->json(['message' => ctrans('texts.self_update_not_available')], 403); } $this->testWritable(); $contents = file_get_contents($this->getDownloadUrl()); Storage::disk('local')->put('invoiceninja.zip', $contents); $file = Storage::disk('local')->path('invoiceninja.zip'); $zipFile = new \PhpZip\ZipFile(); $zipFile->openFile($file); $zipFile->extractTo('/home/david/Downloads/1/'); $zipFile->close(); unlink($file); $cacheCompiled = base_path('bootstrap/cache/compiled.php'); if (file_exists($cacheCompiled)) { unlink ($cacheCompiled); } $cacheServices = base_path('bootstrap/cache/services.php'); if (file_exists($cacheServices)) { unlink ($cacheServices); } Artisan::call('clear-compiled'); Artisan::call('route:clear'); Artisan::call('view:clear'); Artisan::call('migrate', ['--force' => true]); Artisan::call('optimize'); return response()->json(['message' => 'Update completed'], 200); } private function testWritable() { $directoryIterator = new \RecursiveDirectoryIterator(base_path(), \RecursiveDirectoryIterator::SKIP_DOTS); foreach (new \RecursiveIteratorIterator($directoryIterator) as $file) { if(strpos($file->getPathname(), '.git') !== false) continue; // nlog($file->getPathname()); if ($file->isFile() && ! $file->isWritable()) { // throw new FilePermissionsFailure($file); nlog("Cannot update system because {$file->getFileName()} is not writable"); throw new FilePermissionsFailure("Cannot update system because {$file->getFileName()} is not writable"); return false; } } return true; } public function checkVersion() { return trim(file_get_contents(config('ninja.version_url'))); } private function getDownloadUrl() { $version = $this->checkVersion(); return "https://github.com/invoiceninja/invoiceninja/releases/download/v{$version}/invoiceninja.zip" } }