]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Admin/Storage.php
Some removed escapeTags calls
[friendica.git] / src / Module / Admin / Storage.php
index a8f0b592509767379e1836f3f2197963f5345a1a..51e70d841ebc73eba194a95627ea649e7e499ff4 100644 (file)
@@ -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,
                ]);
        }