diff --git a/phpBB/adm/style/acp_storage.html b/phpBB/adm/style/acp_storage.html index ecbddc0e24..60b3540705 100644 --- a/phpBB/adm/style/acp_storage.html +++ b/phpBB/adm/style/acp_storage.html @@ -31,7 +31,7 @@ {% for name, options in provider.get_options %} {% set lang_name = 'STORAGE_ADAPTER_' ~ provider.get_name | upper ~ '_OPTION_' ~ name | upper %} {% set options = options|merge({'name': storage.get_name ~ '[' ~ name ~ ']'}) %} - {{ adm_block(lang(lang_name), '', input(options)) }} + {{ adm_block(lang(lang_name), '', input(options, attribute(CONFIG, 'storage\\' ~ storage.get_name ~ '\\config\\' ~ name))) }} {% endfor %} </fieldset> {% endfor %} diff --git a/phpBB/includes/acp/acp_storage.php b/phpBB/includes/acp/acp_storage.php index 29fc123f22..4b368ffeea 100644 --- a/phpBB/includes/acp/acp_storage.php +++ b/phpBB/includes/acp/acp_storage.php @@ -78,6 +78,7 @@ class acp_storage } } + // TODO: Validate data public function overview($id, $mode) { $form_name = 'acp_storage'; @@ -89,9 +90,65 @@ class acp_storage // Set page title $this->page_title = 'STORAGE_TITLE'; + if ($this->request->is_set_post('submit')) + { + foreach ($this->storage_collection as $storage) + { + $modified = false; + $provider = $this->provider_collection->get_by_class($this->config['storage\\' . $storage->get_name() . '\\provider']); + + // Check if provider have been modified + if ($this->request->variable([$storage->get_name(), 'provider'], '') != $this->config['storage\\' . $storage->get_name() . '\\provider']) + { + $modified = true; + } + + // Check if options have been modified + if(!$modified) + { + foreach($provider->get_options() as $option => $params) + { + if ($this->request->variable([$storage->get_name(), $option], '') != $this->config['storage\\' . $storage->get_name() . '\\provider']) + { + $modified = true; + break; + } + } + } + + // Update storage + if($modified) + { + // TODO: Allow to move data to the new storage automatically + + // TODO: Validate data + + // Remove old straoge config + foreach (array_keys($provider->get_options()) as $def) + { + $this->config->delete('storage\\' . $storage->get_name() . '\\config\\' . $def); + } + + // Update provider + $this->config->set('storage\\' . $storage->get_name() . '\\provider', $this->request->variable([$storage->get_name(), 'provider'], '')); + + // Set new storage config + $new_provider = $this->provider_collection->get_by_class($this->config['storage\\' . $storage->get_name() . '\\provider']); + + foreach (array_keys($new_provider->get_options()) as $def) + { + $this->config->set('storage\\' . $storage->get_name() . '\\config\\' . $def, $this->request->variable([$storage->get_name(), $def], '')); + } + } + } + + // Updated succesfuly + } + $this->template->assign_vars(array( 'STORAGES' => $this->storage_collection, - 'PROVIDERS' => $this->provider_collection + 'PROVIDERS' => $this->provider_collection, + 'CONFIG' => $this->config // Maybe this should be added to \phpbb\templat\twig\extension )); } } diff --git a/phpBB/phpbb/template/twig/extension/form.php b/phpBB/phpbb/template/twig/extension/form.php index 00d3391f47..4cd39058f3 100644 --- a/phpBB/phpbb/template/twig/extension/form.php +++ b/phpBB/phpbb/template/twig/extension/form.php @@ -32,9 +32,9 @@ class form extends \Twig_Extension ]; } - public static function generate_input($options) + public static function generate_input($options, $value = '') { - $input = '<input '; + $input = '<input value="' . $value . '"'; switch ($options['type']) {