X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FAdmin%2FStorage.php;h=51e70d841ebc73eba194a95627ea649e7e499ff4;hb=23b10cf2ae5fe10ba21a4b43e1aae17818647661;hp=a8f0b592509767379e1836f3f2197963f5345a1a;hpb=e34795762d72347746bd506f253495da7d0ab329;p=friendica.git diff --git a/src/Module/Admin/Storage.php b/src/Module/Admin/Storage.php index a8f0b59250..51e70d841e 100644 --- a/src/Module/Admin/Storage.php +++ b/src/Module/Admin/Storage.php @@ -23,7 +23,9 @@ namespace Friendica\Module\Admin; use Friendica\Core\Renderer; use Friendica\DI; -use Friendica\Model\Storage\IStorage; +use Friendica\Core\Storage\Exception\InvalidClassStorageException; +use Friendica\Core\Storage\Capability\ICanConfigureStorage; +use Friendica\Core\Storage\Capability\ICanWriteToStorage; use Friendica\Module\BaseAdmin; use Friendica\Util\Strings; @@ -35,40 +37,53 @@ class Storage extends BaseAdmin self::checkFormSecurityTokenRedirectOnError('/admin/storage', 'admin_storage'); - $storagebackend = Strings::escapeTags(trim($parameters['name'] ?? '')); - - /** @var IStorage $newstorage */ - $newstorage = DI::storageManager()->getByName($storagebackend); - - // save storage backend form - $storage_opts = $newstorage->getOptions(); - $storage_form_prefix = preg_replace('|[^a-zA-Z0-9]|', '', $storagebackend); - $storage_opts_data = []; - foreach ($storage_opts as $name => $info) { - $fieldname = $storage_form_prefix . '_' . $name; - switch ($info[0]) { // type - case 'checkbox': - case 'yesno': - $value = !empty($_POST[$fieldname]); - break; - default: - $value = $_POST[$fieldname] ?? ''; - } - $storage_opts_data[$name] = $value; + $storagebackend = trim($parameters['name'] ?? ''); + + try { + /** @var ICanConfigureStorage|false $newStorageConfig */ + $newStorageConfig = DI::storageManager()->getConfigurationByName($storagebackend); + } catch (InvalidClassStorageException $storageException) { + notice(DI::l10n()->t('Storage backend, %s is invalid.', $storagebackend)); + DI::baseUrl()->redirect('admin/storage'); } - unset($name); - unset($info); - $storage_form_errors = $newstorage->saveOptions($storage_opts_data); - if (count($storage_form_errors)) { - foreach ($storage_form_errors as $name => $err) { - notice('Storage backend, ' . $storage_opts[$name][1] . ': ' . $err); + if ($newStorageConfig !== false) { + // save storage backend form + $storage_opts = $newStorageConfig->getOptions(); + $storage_form_prefix = preg_replace('|[^a-zA-Z0-9]|', '', $storagebackend); + $storage_opts_data = []; + foreach ($storage_opts as $name => $info) { + $fieldname = $storage_form_prefix . '_' . $name; + switch ($info[0]) { // type + case 'checkbox': + case 'yesno': + $value = !empty($_POST[$fieldname]); + break; + default: + $value = $_POST[$fieldname] ?? ''; + } + $storage_opts_data[$name] = $value; + } + unset($name); + unset($info); + + $storage_form_errors = $newStorageConfig->saveOptions($storage_opts_data); + if (count($storage_form_errors)) { + foreach ($storage_form_errors as $name => $err) { + notice(DI::l10n()->t('Storage backend %s error: %s', $storage_opts[$name][1], $err)); + } + DI::baseUrl()->redirect('admin/storage'); } - DI::baseUrl()->redirect('admin/storage'); } if (!empty($_POST['submit_save_set'])) { - if (empty($storagebackend) || !DI::storageManager()->setBackend($storagebackend)) { + try { + $newstorage = DI::storageManager()->getWritableStorageByName($storagebackend); + + if (!DI::storageManager()->setBackend($newstorage)) { + notice(DI::l10n()->t('Invalid storage backend setting value.')); + } + } catch (InvalidClassStorageException $storageException) { notice(DI::l10n()->t('Invalid storage backend setting value.')); } } @@ -80,43 +95,40 @@ class Storage extends BaseAdmin { parent::content($parameters); - $current_storage_backend = DI::storage(); - $available_storage_backends = []; - $available_storage_forms = []; - - // show legacy option only if it is the current backend: - // once changed can't be selected anymore - if ($current_storage_backend == null) { - $available_storage_backends[''] = DI::l10n()->t('Database (legacy)'); - } + $current_storage_backend = DI::storage(); + $available_storage_forms = []; - foreach (DI::storageManager()->listBackends() as $name => $class) { - $available_storage_backends[$name] = $name; + foreach (DI::storageManager()->listBackends() as $name) { // build storage config form, $storage_form_prefix = preg_replace('|[^a-zA-Z0-9]|', '', $name); - $storage_form = []; - foreach (DI::storageManager()->getByName($name)->getOptions() as $option => $info) { - $type = $info[0]; - // Backward compatibilty with yesno field description - if ($type == 'yesno') { - $type = 'checkbox'; - // Remove translated labels Yes No from field info - unset($info[4]); - } + $storage_form = []; + $storageConfig = DI::storageManager()->getConfigurationByName($name); + + if ($storageConfig !== false) { + foreach ($storageConfig->getOptions() as $option => $info) { - $info[0] = $storage_form_prefix . '_' . $option; - $info['type'] = $type; - $info['field'] = 'field_' . $type . '.tpl'; - $storage_form[$option] = $info; + $type = $info[0]; + // Backward compatibilty with yesno field description + if ($type == 'yesno') { + $type = 'checkbox'; + // Remove translated labels Yes No from field info + unset($info[4]); + } + + $info[0] = $storage_form_prefix . '_' . $option; + $info['type'] = $type; + $info['field'] = 'field_' . $type . '.tpl'; + $storage_form[$option] = $info; + } } $available_storage_forms[] = [ 'name' => $name, 'prefix' => $storage_form_prefix, 'form' => $storage_form, - 'active' => $name === $current_storage_backend::getName(), + 'active' => $current_storage_backend instanceof ICanWriteToStorage && $name === $current_storage_backend::getName(), ]; } @@ -124,15 +136,17 @@ class Storage extends BaseAdmin return Renderer::replaceMacros($t, [ '$title' => DI::l10n()->t('Administration'), + '$label_current' => DI::l10n()->t('Current Storage Backend'), + '$label_config' => DI::l10n()->t('Storage Configuration'), '$page' => DI::l10n()->t('Storage'), '$save' => DI::l10n()->t('Save'), - '$save_activate' => DI::l10n()->t('Save & Activate'), - '$activate' => DI::l10n()->t('Activate'), + '$save_use' => DI::l10n()->t('Save & Use storage backend'), + '$use' => DI::l10n()->t('Use storage backend'), '$save_reload' => DI::l10n()->t('Save & Reload'), '$noconfig' => DI::l10n()->t('This backend doesn\'t have custom settings'), '$baseurl' => DI::baseUrl()->get(true), '$form_security_token' => self::getFormSecurityToken("admin_storage"), - '$storagebackend' => $current_storage_backend, + '$storagebackend' => $current_storage_backend instanceof ICanWriteToStorage ? $current_storage_backend::getName() : DI::l10n()->t('Database (legacy)'), '$availablestorageforms' => $available_storage_forms, ]); }