diff --git a/src/Controller/MetaTemplatesController.php b/src/Controller/MetaTemplatesController.php index 0c59120..ac8cd2e 100644 --- a/src/Controller/MetaTemplatesController.php +++ b/src/Controller/MetaTemplatesController.php @@ -404,8 +404,18 @@ class MetaTemplatesController extends AppController $metaTemplate = $this->MetaTemplates->get($template_id, [ 'contain' => ['MetaTemplateFields'] ]); - $templateOnDisk = $this->MetaTemplates->readTemplateFromDisk($metaTemplate->uuid); + $error = ''; + $errorMessage = ''; + $templateOnDisk = $this->MetaTemplates->readTemplateFromDisk($metaTemplate->uuid, $error); + if (is_null($templateOnDisk)) { + $errorMessage = __('Could not retreive template\'s status. Reason: {0}', $error); + $this->Flash->error($errorMessage); + $templateOnDisk = []; + } $templateStatus = $this->MetaTemplates->getStatusForMetaTemplate($templateOnDisk, $metaTemplate); + if (!empty($errorMessage)) { + $templateStatus['error'] = $errorMessage; + } $this->set('templateOnDisk', $templateOnDisk); $this->set('templateStatus', $templateStatus); return [ diff --git a/src/Model/Table/MetaTemplatesTable.php b/src/Model/Table/MetaTemplatesTable.php index 57925a6..d42c97d 100644 --- a/src/Model/Table/MetaTemplatesTable.php +++ b/src/Model/Table/MetaTemplatesTable.php @@ -555,6 +555,10 @@ class MetaTemplatesTable extends AppTable if (substr($file, -5) === '.json') { $errorMessage = ''; $template = $this->decodeTemplateFromDisk($path . $file, $errorMessage); + if (!empty($errorMessage)) { + $error = $errorMessage; + return null; + } if (!empty($template) && $template['uuid'] == $uuid) { return $template; } @@ -1318,6 +1322,13 @@ class MetaTemplatesTable extends AppTable $updateStatus['next_version'] = $template['version']; $updateStatus['new'] = false; $updateStatus['automatically-updateable'] = false; + $updateStatus['conflicts'] = []; + if (empty($template)) { + $updateStatus['up-to-date'] = false; + $updateStatus['automatically-updateable'] = false; + $updateStatus['can-be-removed'] = false; + return $updateStatus; + } if (intval($metaTemplate->version) >= intval($template['version'])) { $updateStatus['up-to-date'] = true; $updateStatus['conflicts'][] = __('Could not update the template. Local version is equal or newer.'); diff --git a/templates/MetaTemplates/update.php b/templates/MetaTemplates/update.php index a1c1821..c01b620 100644 --- a/templates/MetaTemplates/update.php +++ b/templates/MetaTemplates/update.php @@ -11,6 +11,14 @@ if ($updateStatus['up-to-date']) { 'dismissible' => false, ]); $modalType = 'ok-only'; +} else if (empty($updateStatus['templateOnDisk'])) { + $diskTemplateError = $templateStatus['error'] ?? __('Unknown'); + $bodyHtml .= $this->Bootstrap->alert([ + 'variant' => 'danger', + 'html' => sprintf('%s %s

%s

', __('Could not get template on disk.'), __('Reason:'), h($diskTemplateError)), + 'dismissible' => false, + ]); + $modalType = 'ok-only'; } else { if ($updateStatus['automatically-updateable']) { $bodyHtml .= $this->Bootstrap->alert([