. * */ namespace Friendica\Module\Admin; use Friendica\Core\Renderer; use Friendica\DI; use Friendica\Model\Storage\ISelectableStorage; use Friendica\Module\BaseAdmin; use Friendica\Util\Strings; class Storage extends BaseAdmin { public static function post(array $parameters = []) { self::checkAdminAccess(); self::checkFormSecurityTokenRedirectOnError('/admin/storage', 'admin_storage'); $storagebackend = Strings::escapeTags(trim($parameters['name'] ?? '')); /** @var ISelectableStorage $newstorage */ $newstorage = DI::storageManager()->getSelectableStorageByName($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; } 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); } DI::baseUrl()->redirect('admin/storage'); } if (!empty($_POST['submit_save_set'])) { /** @var ISelectableStorage $newstorage */ $newstorage = DI::storageManager()->getSelectableStorageByName($storagebackend); if (!DI::storageManager()->setBackend($newstorage)) { notice(DI::l10n()->t('Invalid storage backend setting value.')); } } DI::baseUrl()->redirect('admin/storage'); } public static function content(array $parameters = []) { parent::content($parameters); $current_storage_backend = DI::storage(); $available_storage_forms = []; foreach (DI::storageManager()->listBackends() as $name => $class) { // build storage config form, $storage_form_prefix = preg_replace('|[^a-zA-Z0-9]|', '', $name); $storage_form = []; foreach (DI::storageManager()->getSelectableStorageByName($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]); } $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' => $current_storage_backend instanceof ISelectableStorage && $name === $current_storage_backend::getName(), ]; } $t = Renderer::getMarkupTemplate('admin/storage.tpl'); return Renderer::replaceMacros($t, [ '$title' => DI::l10n()->t('Administration'), '$page' => DI::l10n()->t('Storage'), '$save' => DI::l10n()->t('Save'), '$save_activate' => DI::l10n()->t('Save & Activate'), '$activate' => DI::l10n()->t('Activate'), '$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 instanceof ISelectableStorage ? $current_storage_backend::getName() : DI::l10n()->t('Database (legacy)'), '$availablestorageforms' => $available_storage_forms, ]); } }