]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/Admin/Storage.php
Rename Storage Backend labels
[friendica.git] / src / Module / Admin / Storage.php
index 08d2df316b9e2725eca2bca3e7fff4dbcd0d3d96..c6bc3878efdf41d40d672d5511487b28574ec598 100644 (file)
@@ -23,6 +23,8 @@ namespace Friendica\Module\Admin;
 
 use Friendica\Core\Renderer;
 use Friendica\DI;
+use Friendica\Model\Storage\InvalidClassStorageException;
+use Friendica\Model\Storage\IWritableStorage;
 use Friendica\Module\BaseAdmin;
 use Friendica\Util\Strings;
 
@@ -34,37 +36,54 @@ class Storage extends BaseAdmin
 
                self::checkFormSecurityTokenRedirectOnError('/admin/storage', 'admin_storage');
 
-               $storagebackend = Strings::escapeTags(trim($_POST['storagebackend'] ?? ''));
+               $storagebackend = Strings::escapeTags(trim($parameters['name'] ?? ''));
+
+               try {
+                       /** @var IWritableStorage $newstorage */
+                       $newstorage = DI::storageManager()->getWritableStorageByName($storagebackend);
+               } catch (InvalidClassStorageException $storageException) {
+                       notice(DI::l10n()->t('Storage backend, %s is invalid.', $storagebackend));
+                       DI::baseUrl()->redirect('admin/storage');
+               }
 
                // save storage backend form
-               if (DI::storageManager()->setBackend($storagebackend)) {
-                       $storage_opts        = DI::storage()->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;
+               $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] ?? '';
                        }
-                       unset($name);
-                       unset($info);
+                       $storage_opts_data[$name] = $value;
+               }
+               unset($name);
+               unset($info);
 
-                       $storage_form_errors = DI::storage()->saveOptions($storage_opts_data);
-                       if (count($storage_form_errors)) {
-                               foreach ($storage_form_errors as $name => $err) {
-                                       notice('Storage backend, ' . $storage_opts[$name][1] . ': ' . $err);
+               $storage_form_errors = $newstorage->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');
+               }
+
+               if (!empty($_POST['submit_save_set'])) {
+                       try {
+                               /** @var IWritableStorage $newstorage */
+                               $newstorage = DI::storageManager()->getWritableStorageByName($storagebackend);
+
+                               if (!DI::storageManager()->setBackend($newstorage)) {
+                                       notice(DI::l10n()->t('Invalid storage backend setting value.'));
                                }
-                               DI::baseUrl()->redirect('admin/storage');
+                       } catch (InvalidClassStorageException $storageException) {
+                               notice(DI::l10n()->t('Invalid storage backend setting value.'));
                        }
-               } elseif (!empty($storagebackend)) {
-                       notice(DI::l10n()->t('Invalid storage backend setting value.'));
                }
 
                DI::baseUrl()->redirect('admin/storage');
@@ -74,24 +93,16 @@ class Storage extends BaseAdmin
        {
                parent::content($parameters);
 
-               $current_storage_backend    = DI::storage();
-               $available_storage_backends = [];
-               $available_storage_forms    = [];
+               $current_storage_backend = DI::storage();
+               $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)');
-               }
-
-               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]|', '', $current_storage_backend);
+                       $storage_form_prefix = preg_replace('|[^a-zA-Z0-9]|', '', $name);
 
                        $storage_form = [];
-                       foreach (DI::storageManager()->getByName($name)->getOptions() as $option => $info) {
+                       foreach (DI::storageManager()->getWritableStorageByName($name)->getOptions() as $option => $info) {
                                $type = $info[0];
                                // Backward compatibilty with yesno field description
                                if ($type == 'yesno') {
@@ -106,24 +117,29 @@ class Storage extends BaseAdmin
                                $storage_form[$option] = $info;
                        }
 
-                       if (count($storage_form) > 0) {
-                               $available_storage_forms[] = [
-                                       'name' => $name,
-                                       'form' => $storage_form,
-                               ];
-                       }
+                       $available_storage_forms[] = [
+                               'name'   => $name,
+                               'prefix' => $storage_form_prefix,
+                               'form'   => $storage_form,
+                               'active' => $current_storage_backend instanceof IWritableStorage && $name === $current_storage_backend::getName(),
+                       ];
                }
 
                $t = Renderer::getMarkupTemplate('admin/storage.tpl');
 
                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'),
-                       '$submit'                => DI::l10n()->t('Save Settings'),
-                       '$clear'                 => DI::l10n()->t('Clear'),
+                       '$save'                  => DI::l10n()->t('Save'),
+                       '$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'        => ['storagebackend', DI::l10n()->t('File storage backend'), $current_storage_backend, DI::l10n()->t('The backend used to store uploaded data. If you change the storage backend, you can manually move the existing files. If you do not do so, the files uploaded before the change will still be available at the old backend. Please see <a href="/help/Settings#1_2_3_1">the settings documentation</a> for more information about the choices and the moving procedure.'), $available_storage_backends],
+                       '$storagebackend'        => $current_storage_backend instanceof IWritableStorage ? $current_storage_backend::getName() : DI::l10n()->t('Database (legacy)'),
                        '$availablestorageforms' => $available_storage_forms,
                ]);
        }