mirror of
				https://github.com/getgrav/grav-plugin-admin.git
				synced 2025-10-31 10:25:50 +01:00 
			
		
		
		
	more fixes for installation process
This commit is contained in:
		| @@ -1025,11 +1025,11 @@ class SafeUpgradeManager | |||||||
|         $context = []; |         $context = []; | ||||||
|  |  | ||||||
|         if ($this->jobManifestPath) { |         if ($this->jobManifestPath) { | ||||||
|             $context['manifest'] = $this->jobManifestPath; |             $context['manifest'] = $this->convertPathForContext($this->jobManifestPath); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if ($this->progressPath) { |         if ($this->progressPath) { | ||||||
|             $context['progress'] = $this->progressPath; |             $context['progress'] = $this->convertPathForContext($this->progressPath); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         if (!$context) { |         if (!$context) { | ||||||
| @@ -1041,6 +1041,20 @@ class SafeUpgradeManager | |||||||
|         return $encoded === false ? null : base64_encode($encoded); |         return $encoded === false ? null : base64_encode($encoded); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private function convertPathForContext(string $path): string | ||||||
|  |     { | ||||||
|  |         $normalized = str_replace('\\', '/', $path); | ||||||
|  |         $root = str_replace('\\', '/', GRAV_ROOT); | ||||||
|  |  | ||||||
|  |         if (strpos($normalized, $root) === 0) { | ||||||
|  |             $relative = substr($normalized, strlen($root)); | ||||||
|  |  | ||||||
|  |             return ltrim($relative, '/'); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         return $normalized; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     protected function ensureExecutablePermissions(): void |     protected function ensureExecutablePermissions(): void | ||||||
|     { |     { | ||||||
|         $executables = [ |         $executables = [ | ||||||
|   | |||||||
| @@ -2,10 +2,14 @@ | |||||||
|  |  | ||||||
| declare(strict_types=1); | declare(strict_types=1); | ||||||
|  |  | ||||||
| $root = dirname(__DIR__, 3); | $root = \defined('GRAV_ROOT') ? GRAV_ROOT : dirname(__DIR__, 3); | ||||||
| $jobsDir = $root . '/user/data/upgrades/jobs'; | $jobsDir = $root . '/user/data/upgrades/jobs'; | ||||||
| $fallbackProgress = $root . '/user/data/upgrades/safe-upgrade-progress.json'; | $fallbackProgress = $root . '/user/data/upgrades/safe-upgrade-progress.json'; | ||||||
|  |  | ||||||
|  | if (!\defined('GRAV_ROOT')) { | ||||||
|  |     \define('GRAV_ROOT', $root); | ||||||
|  | } | ||||||
|  |  | ||||||
| header('Content-Type: application/json; charset=utf-8'); | header('Content-Type: application/json; charset=utf-8'); | ||||||
| header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); | header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); | ||||||
| header('Pragma: no-cache'); | header('Pragma: no-cache'); | ||||||
| @@ -44,6 +48,18 @@ $normalizeDir = static function (string $path): string { | |||||||
|  |  | ||||||
| $jobsDirNormalized = $normalizeDir($jobsDir); | $jobsDirNormalized = $normalizeDir($jobsDir); | ||||||
| $userDataDirNormalized = $normalizeDir(dirname($jobsDir)); | $userDataDirNormalized = $normalizeDir(dirname($jobsDir)); | ||||||
|  | $toRelative = static function (string $path): string { | ||||||
|  |     $normalized = str_replace('\\', '/', $path); | ||||||
|  |     $root = str_replace('\\', '/', GRAV_ROOT); | ||||||
|  |  | ||||||
|  |     if (strpos($normalized, $root) === 0) { | ||||||
|  |         $relative = substr($normalized, strlen($root)); | ||||||
|  |  | ||||||
|  |         return ltrim($relative, '/'); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return $normalized; | ||||||
|  | }; | ||||||
|  |  | ||||||
| $contextParam = $_GET['context'] ?? ''; | $contextParam = $_GET['context'] ?? ''; | ||||||
| if ($contextParam !== '') { | if ($contextParam !== '') { | ||||||
| @@ -52,7 +68,17 @@ if ($contextParam !== '') { | |||||||
|         $decoded = json_decode($decodedRaw, true); |         $decoded = json_decode($decodedRaw, true); | ||||||
|         if (is_array($decoded)) { |         if (is_array($decoded)) { | ||||||
|             $validatePath = static function (string $candidate) use ($normalizeDir, $jobsDirNormalized, $userDataDirNormalized) { |             $validatePath = static function (string $candidate) use ($normalizeDir, $jobsDirNormalized, $userDataDirNormalized) { | ||||||
|  |                 if ($candidate === '') { | ||||||
|  |                     return null; | ||||||
|  |                 } | ||||||
|  |  | ||||||
|                 $candidate = str_replace('\\', '/', $candidate); |                 $candidate = str_replace('\\', '/', $candidate); | ||||||
|  |  | ||||||
|  |                 if ($candidate[0] !== '/' && !preg_match('/^[A-Za-z]:[\\\\\/]/', $candidate)) { | ||||||
|  |                     $candidate = GRAV_ROOT . '/' . ltrim($candidate, '/'); | ||||||
|  |                     $candidate = str_replace('\\', '/', $candidate); | ||||||
|  |                 } | ||||||
|  |  | ||||||
|                 $directory = dirname($candidate); |                 $directory = dirname($candidate); | ||||||
|                 $real = realpath($directory); |                 $real = realpath($directory); | ||||||
|                 if ($real === false) { |                 if ($real === false) { | ||||||
| @@ -133,10 +159,10 @@ if ($jobId !== '' && is_array($progress) && !isset($progress['job_id'])) { | |||||||
|  |  | ||||||
| $contextPayload = []; | $contextPayload = []; | ||||||
| if ($manifestPath) { | if ($manifestPath) { | ||||||
|     $contextPayload['manifest'] = $manifestPath; |     $contextPayload['manifest'] = $toRelative($manifestPath); | ||||||
| } | } | ||||||
| if ($progressPath) { | if ($progressPath) { | ||||||
|     $contextPayload['progress'] = $progressPath; |     $contextPayload['progress'] = $toRelative($progressPath); | ||||||
| } | } | ||||||
|  |  | ||||||
| $contextToken = $contextPayload ? base64_encode(json_encode($contextPayload)) : null; | $contextToken = $contextPayload ? base64_encode(json_encode($contextPayload)) : null; | ||||||
|   | |||||||
| @@ -55,6 +55,7 @@ export default class SafeUpgrade { | |||||||
|         this.jobId = null; |         this.jobId = null; | ||||||
|         this.statusFailures = 0; |         this.statusFailures = 0; | ||||||
|         this.statusContext = null; |         this.statusContext = null; | ||||||
|  |         this.statusIdleCount = 0; | ||||||
|         this.directStatusUrl = this.resolveDirectStatusUrl(); |         this.directStatusUrl = this.resolveDirectStatusUrl(); | ||||||
|         this.preferDirectStatus = !!this.directStatusUrl; |         this.preferDirectStatus = !!this.directStatusUrl; | ||||||
|  |  | ||||||
| @@ -122,6 +123,7 @@ export default class SafeUpgrade { | |||||||
|         this.statusFailures = 0; |         this.statusFailures = 0; | ||||||
|         this.preferDirectStatus = !!this.directStatusUrl; |         this.preferDirectStatus = !!this.directStatusUrl; | ||||||
|         this.statusContext = null; |         this.statusContext = null; | ||||||
|  |         this.statusIdleCount = 0; | ||||||
|         this.renderLoading(); |         this.renderLoading(); | ||||||
|         this.modal.open(); |         this.modal.open(); | ||||||
|         this.fetchPreflight(); |         this.fetchPreflight(); | ||||||
| @@ -512,6 +514,7 @@ export default class SafeUpgrade { | |||||||
|         let jobFailed = false; |         let jobFailed = false; | ||||||
|         let shouldReload = false; |         let shouldReload = false; | ||||||
|         let handled = false; |         let handled = false; | ||||||
|  |         let lastPayload = null; | ||||||
|  |  | ||||||
|         console.debug('[SafeUpgrade] poll status'); |         console.debug('[SafeUpgrade] poll status'); | ||||||
|  |  | ||||||
| @@ -545,6 +548,7 @@ export default class SafeUpgrade { | |||||||
|             } |             } | ||||||
|  |  | ||||||
|             const payload = response.data || {}; |             const payload = response.data || {}; | ||||||
|  |             lastPayload = payload; | ||||||
|             if (Object.prototype.hasOwnProperty.call(payload, 'context')) { |             if (Object.prototype.hasOwnProperty.call(payload, 'context')) { | ||||||
|                 this.statusContext = payload.context || null; |                 this.statusContext = payload.context || null; | ||||||
|             } |             } | ||||||
| @@ -552,6 +556,12 @@ export default class SafeUpgrade { | |||||||
|             const data = payload.progress || payload; |             const data = payload.progress || payload; | ||||||
|             nextStage = data.stage || null; |             nextStage = data.stage || null; | ||||||
|  |  | ||||||
|  |             if (!job || !Object.keys(job).length) { | ||||||
|  |                 this.statusIdleCount += 1; | ||||||
|  |             } else { | ||||||
|  |                 this.statusIdleCount = 0; | ||||||
|  |             } | ||||||
|  |  | ||||||
|             this.renderProgress(data, job); |             this.renderProgress(data, job); | ||||||
|  |  | ||||||
|             if (job.status === 'error') { |             if (job.status === 'error') { | ||||||
| @@ -600,6 +610,10 @@ export default class SafeUpgrade { | |||||||
|                     const delay = Math.min(5000, 1200 * Math.max(1, this.statusFailures)); |                     const delay = Math.min(5000, 1200 * Math.max(1, this.statusFailures)); | ||||||
|                     this.schedulePoll(delay); |                     this.schedulePoll(delay); | ||||||
|                 } |                 } | ||||||
|  |             } else if ((!lastPayload || !lastPayload.job || !Object.keys(lastPayload.job).length) && usingDirect && this.statusIdleCount >= 5) { | ||||||
|  |                 this.preferDirectStatus = false; | ||||||
|  |                 this.statusFailures = 0; | ||||||
|  |                 this.schedulePoll(); | ||||||
|             } else if (jobFailed) { |             } else if (jobFailed) { | ||||||
|                 this.stopPolling(); |                 this.stopPolling(); | ||||||
|                 this.jobId = null; |                 this.jobId = null; | ||||||
|   | |||||||
							
								
								
									
										13
									
								
								themes/grav/js/admin.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								themes/grav/js/admin.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -4611,6 +4611,7 @@ var SafeUpgrade = /*#__PURE__*/function () { | |||||||
|     this.jobId = null; |     this.jobId = null; | ||||||
|     this.statusFailures = 0; |     this.statusFailures = 0; | ||||||
|     this.statusContext = null; |     this.statusContext = null; | ||||||
|  |     this.statusIdleCount = 0; | ||||||
|     this.directStatusUrl = this.resolveDirectStatusUrl(); |     this.directStatusUrl = this.resolveDirectStatusUrl(); | ||||||
|     this.preferDirectStatus = !!this.directStatusUrl; |     this.preferDirectStatus = !!this.directStatusUrl; | ||||||
|     this.registerEvents(); |     this.registerEvents(); | ||||||
| @@ -4678,6 +4679,7 @@ var SafeUpgrade = /*#__PURE__*/function () { | |||||||
|       this.statusFailures = 0; |       this.statusFailures = 0; | ||||||
|       this.preferDirectStatus = !!this.directStatusUrl; |       this.preferDirectStatus = !!this.directStatusUrl; | ||||||
|       this.statusContext = null; |       this.statusContext = null; | ||||||
|  |       this.statusIdleCount = 0; | ||||||
|       this.renderLoading(); |       this.renderLoading(); | ||||||
|       this.modal.open(); |       this.modal.open(); | ||||||
|       this.fetchPreflight(); |       this.fetchPreflight(); | ||||||
| @@ -4984,6 +4986,7 @@ var SafeUpgrade = /*#__PURE__*/function () { | |||||||
|       var jobFailed = false; |       var jobFailed = false; | ||||||
|       var shouldReload = false; |       var shouldReload = false; | ||||||
|       var handled = false; |       var handled = false; | ||||||
|  |       var lastPayload = null; | ||||||
|       console.debug('[SafeUpgrade] poll status'); |       console.debug('[SafeUpgrade] poll status'); | ||||||
|       var endpoint = this.resolveStatusEndpoint(); |       var endpoint = this.resolveStatusEndpoint(); | ||||||
|       var statusUrl = endpoint.url; |       var statusUrl = endpoint.url; | ||||||
| @@ -5016,8 +5019,14 @@ var SafeUpgrade = /*#__PURE__*/function () { | |||||||
|           _this6.statusContext = payload.context || null; |           _this6.statusContext = payload.context || null; | ||||||
|         } |         } | ||||||
|         var job = payload.job || {}; |         var job = payload.job || {}; | ||||||
|  |         lastPayload = payload; | ||||||
|         var data = payload.progress || payload; |         var data = payload.progress || payload; | ||||||
|         nextStage = data.stage || null; |         nextStage = data.stage || null; | ||||||
|  |         if (!job || !Object.keys(job).length) { | ||||||
|  |           _this6.statusIdleCount += 1; | ||||||
|  |         } else { | ||||||
|  |           _this6.statusIdleCount = 0; | ||||||
|  |         } | ||||||
|         _this6.renderProgress(data, job); |         _this6.renderProgress(data, job); | ||||||
|         if (job.status === 'error') { |         if (job.status === 'error') { | ||||||
|           nextStage = 'error'; |           nextStage = 'error'; | ||||||
| @@ -5061,6 +5070,10 @@ var SafeUpgrade = /*#__PURE__*/function () { | |||||||
|             var delay = Math.min(5000, 1200 * Math.max(1, _this6.statusFailures)); |             var delay = Math.min(5000, 1200 * Math.max(1, _this6.statusFailures)); | ||||||
|             _this6.schedulePoll(delay); |             _this6.schedulePoll(delay); | ||||||
|           } |           } | ||||||
|  |         } else if ((!lastPayload || !lastPayload.job || !Object.keys(lastPayload.job).length) && usingDirect && _this6.statusIdleCount >= 5) { | ||||||
|  |           _this6.preferDirectStatus = false; | ||||||
|  |           _this6.statusFailures = 0; | ||||||
|  |           _this6.schedulePoll(); | ||||||
|         } else if (jobFailed) { |         } else if (jobFailed) { | ||||||
|           _this6.stopPolling(); |           _this6.stopPolling(); | ||||||
|           _this6.jobId = null; |           _this6.jobId = null; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user