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 = []; | ||||
|  | ||||
|         if ($this->jobManifestPath) { | ||||
|             $context['manifest'] = $this->jobManifestPath; | ||||
|             $context['manifest'] = $this->convertPathForContext($this->jobManifestPath); | ||||
|         } | ||||
|  | ||||
|         if ($this->progressPath) { | ||||
|             $context['progress'] = $this->progressPath; | ||||
|             $context['progress'] = $this->convertPathForContext($this->progressPath); | ||||
|         } | ||||
|  | ||||
|         if (!$context) { | ||||
| @@ -1041,6 +1041,20 @@ class SafeUpgradeManager | ||||
|         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 | ||||
|     { | ||||
|         $executables = [ | ||||
|   | ||||
| @@ -2,10 +2,14 @@ | ||||
|  | ||||
| declare(strict_types=1); | ||||
|  | ||||
| $root = dirname(__DIR__, 3); | ||||
| $root = \defined('GRAV_ROOT') ? GRAV_ROOT : dirname(__DIR__, 3); | ||||
| $jobsDir = $root . '/user/data/upgrades/jobs'; | ||||
| $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('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); | ||||
| header('Pragma: no-cache'); | ||||
| @@ -44,6 +48,18 @@ $normalizeDir = static function (string $path): string { | ||||
|  | ||||
| $jobsDirNormalized = $normalizeDir($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'] ?? ''; | ||||
| if ($contextParam !== '') { | ||||
| @@ -52,7 +68,17 @@ if ($contextParam !== '') { | ||||
|         $decoded = json_decode($decodedRaw, true); | ||||
|         if (is_array($decoded)) { | ||||
|             $validatePath = static function (string $candidate) use ($normalizeDir, $jobsDirNormalized, $userDataDirNormalized) { | ||||
|                 if ($candidate === '') { | ||||
|                     return null; | ||||
|                 } | ||||
|  | ||||
|                 $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); | ||||
|                 $real = realpath($directory); | ||||
|                 if ($real === false) { | ||||
| @@ -133,10 +159,10 @@ if ($jobId !== '' && is_array($progress) && !isset($progress['job_id'])) { | ||||
|  | ||||
| $contextPayload = []; | ||||
| if ($manifestPath) { | ||||
|     $contextPayload['manifest'] = $manifestPath; | ||||
|     $contextPayload['manifest'] = $toRelative($manifestPath); | ||||
| } | ||||
| if ($progressPath) { | ||||
|     $contextPayload['progress'] = $progressPath; | ||||
|     $contextPayload['progress'] = $toRelative($progressPath); | ||||
| } | ||||
|  | ||||
| $contextToken = $contextPayload ? base64_encode(json_encode($contextPayload)) : null; | ||||
|   | ||||
| @@ -55,6 +55,7 @@ export default class SafeUpgrade { | ||||
|         this.jobId = null; | ||||
|         this.statusFailures = 0; | ||||
|         this.statusContext = null; | ||||
|         this.statusIdleCount = 0; | ||||
|         this.directStatusUrl = this.resolveDirectStatusUrl(); | ||||
|         this.preferDirectStatus = !!this.directStatusUrl; | ||||
|  | ||||
| @@ -122,6 +123,7 @@ export default class SafeUpgrade { | ||||
|         this.statusFailures = 0; | ||||
|         this.preferDirectStatus = !!this.directStatusUrl; | ||||
|         this.statusContext = null; | ||||
|         this.statusIdleCount = 0; | ||||
|         this.renderLoading(); | ||||
|         this.modal.open(); | ||||
|         this.fetchPreflight(); | ||||
| @@ -512,6 +514,7 @@ export default class SafeUpgrade { | ||||
|         let jobFailed = false; | ||||
|         let shouldReload = false; | ||||
|         let handled = false; | ||||
|         let lastPayload = null; | ||||
|  | ||||
|         console.debug('[SafeUpgrade] poll status'); | ||||
|  | ||||
| @@ -545,6 +548,7 @@ export default class SafeUpgrade { | ||||
|             } | ||||
|  | ||||
|             const payload = response.data || {}; | ||||
|             lastPayload = payload; | ||||
|             if (Object.prototype.hasOwnProperty.call(payload, 'context')) { | ||||
|                 this.statusContext = payload.context || null; | ||||
|             } | ||||
| @@ -552,6 +556,12 @@ export default class SafeUpgrade { | ||||
|             const data = payload.progress || payload; | ||||
|             nextStage = data.stage || null; | ||||
|  | ||||
|             if (!job || !Object.keys(job).length) { | ||||
|                 this.statusIdleCount += 1; | ||||
|             } else { | ||||
|                 this.statusIdleCount = 0; | ||||
|             } | ||||
|  | ||||
|             this.renderProgress(data, job); | ||||
|  | ||||
|             if (job.status === 'error') { | ||||
| @@ -600,6 +610,10 @@ export default class SafeUpgrade { | ||||
|                     const delay = Math.min(5000, 1200 * Math.max(1, this.statusFailures)); | ||||
|                     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) { | ||||
|                 this.stopPolling(); | ||||
|                 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.statusFailures = 0; | ||||
|     this.statusContext = null; | ||||
|     this.statusIdleCount = 0; | ||||
|     this.directStatusUrl = this.resolveDirectStatusUrl(); | ||||
|     this.preferDirectStatus = !!this.directStatusUrl; | ||||
|     this.registerEvents(); | ||||
| @@ -4678,6 +4679,7 @@ var SafeUpgrade = /*#__PURE__*/function () { | ||||
|       this.statusFailures = 0; | ||||
|       this.preferDirectStatus = !!this.directStatusUrl; | ||||
|       this.statusContext = null; | ||||
|       this.statusIdleCount = 0; | ||||
|       this.renderLoading(); | ||||
|       this.modal.open(); | ||||
|       this.fetchPreflight(); | ||||
| @@ -4984,6 +4986,7 @@ var SafeUpgrade = /*#__PURE__*/function () { | ||||
|       var jobFailed = false; | ||||
|       var shouldReload = false; | ||||
|       var handled = false; | ||||
|       var lastPayload = null; | ||||
|       console.debug('[SafeUpgrade] poll status'); | ||||
|       var endpoint = this.resolveStatusEndpoint(); | ||||
|       var statusUrl = endpoint.url; | ||||
| @@ -5016,8 +5019,14 @@ var SafeUpgrade = /*#__PURE__*/function () { | ||||
|           _this6.statusContext = payload.context || null; | ||||
|         } | ||||
|         var job = payload.job || {}; | ||||
|         lastPayload = payload; | ||||
|         var data = payload.progress || payload; | ||||
|         nextStage = data.stage || null; | ||||
|         if (!job || !Object.keys(job).length) { | ||||
|           _this6.statusIdleCount += 1; | ||||
|         } else { | ||||
|           _this6.statusIdleCount = 0; | ||||
|         } | ||||
|         _this6.renderProgress(data, job); | ||||
|         if (job.status === 'error') { | ||||
|           nextStage = 'error'; | ||||
| @@ -5061,6 +5070,10 @@ var SafeUpgrade = /*#__PURE__*/function () { | ||||
|             var delay = Math.min(5000, 1200 * Math.max(1, _this6.statusFailures)); | ||||
|             _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) { | ||||
|           _this6.stopPolling(); | ||||
|           _this6.jobId = null; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user