105 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * @file
 | |
|  * Redis module administration pages.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Main settings and review administration screen.
 | |
|  */
 | |
| function redis_settings_form($form, &$form_state) {
 | |
| 
 | |
|   $form['connection'] = array(
 | |
|     '#type' => 'fieldset',
 | |
|     '#title' => t("Connection information"),
 | |
|     '#collapsible' => TRUE,
 | |
|     '#collapsed' => TRUE,
 | |
|   );
 | |
|   $form['connection']['scheme'] = array(
 | |
|     '#type' => 'textfield',
 | |
|     '#title' => t("Scheme"),
 | |
|     '#default_value' => 'tcp',
 | |
|     '#disabled' => TRUE,
 | |
|     '#description' => t("Connection scheme.") . " " . t("Only <em>tcp</em> is currently supported. This is ignored when using a UNIX socket."),
 | |
|   );
 | |
|   $form['connection']['redis_client_host'] = array(
 | |
|     '#type' => 'textfield',
 | |
|     '#title' => t("Host"),
 | |
|     '#default_value' => variable_get('redis_client_host', NULL),
 | |
|     '#description' => t("Redis server host. Default is <em>@default</em>.", array('@default' => Redis_Client_Manager::REDIS_DEFAULT_HOST)),
 | |
|   );
 | |
|   $form['connection']['redis_client_port'] = array(
 | |
|     '#type' => 'textfield',
 | |
|     '#title' => t("Port"),
 | |
|     '#default_value' => variable_get('redis_client_port', NULL),
 | |
|     '#description' => t("Redis server port. Default is <em>@default</em>.", array('@default' => Redis_Client_Manager::REDIS_DEFAULT_PORT)),
 | |
|   );
 | |
|   $form['connection']['redis_client_socket'] = array(
 | |
|     '#type' => 'textfield',
 | |
|     '#title' => t("UNIX socket"),
 | |
|     '#default_value' => variable_get('redis_client_socket', NULL),
 | |
|     '#description' => t("Redis UNIX socket for connection. If set remote server host and port will be ignored."),
 | |
|   );
 | |
|   $form['connection']['redis_client_base'] = array(
 | |
|     '#type' => 'textfield',
 | |
|     '#title' => t("Database"),
 | |
|     '#default_value' => variable_get('redis_client_base', NULL),
 | |
|     '#description' => t("Redis server database. Default is none, Redis server will autoselect the database 0."),
 | |
|   );
 | |
|   $form['connection']['redis_client_interface'] = array(
 | |
|     '#type' => 'radios',
 | |
|     '#title' => t("Client"),
 | |
|     '#options' => array(
 | |
|       NULL => t("None or automatic"),
 | |
|       'PhpRedis' => t("PhpRedis PHP extension"),
 | |
|       'Predis' => t("Predis PHP library"),
 | |
|     ),
 | |
|     '#default_value' => variable_get('redis_client_interface', NULL),
 | |
|     '#description' => t("Redis low level backend."),
 | |
|   );
 | |
| 
 | |
|   $form = system_settings_form($form);
 | |
| 
 | |
|   // Enforce empty values drop from the $form_state in order to avoid empty
 | |
|   // values saving. Empty values would cause the isset() checks in client
 | |
|   // options to see false positives and fail upon connection.
 | |
|   array_unshift($form['#submit'], 'redis_settings_form_submit_clean_values');
 | |
| 
 | |
|   return $form;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Deep clean of $form_state values.
 | |
|  */
 | |
| function redis_settings_form_submit_clean_values($form, &$form_state) {
 | |
| 
 | |
|   $string_values = array('redis_client_host', 'redis_client_interface');
 | |
| 
 | |
|   foreach ($string_values as $name) {
 | |
|     // Empty check is sufficient to verify that the field is indeed empty.
 | |
|     if (empty($form_state['values'][$name])) {
 | |
|       // Using unset() will keep the key in the array, with an associated NULL
 | |
|       // value. While this wouldn't really matter, it's safer to remove it so
 | |
|       // that system_settings_form_submit() won't find it and attempt to save
 | |
|       // it.
 | |
|       $form_state['values'] = array_diff_key($form_state['values'], array($name => NULL));
 | |
|       variable_del($name);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   $numeric_values = array('redis_client_base', 'redis_client_port');
 | |
| 
 | |
|   foreach ($numeric_values as $name) {
 | |
|     // Numeric values can be both of NULL or 0 (NULL meaning the value is not
 | |
|     // not set and the client will use the default, while 0 has a business
 | |
|     // meaning and should be kept as is).
 | |
|     if ('0' !== $form_state['values'][$name] && empty($form_state['values'][$name])) {
 | |
|       $form_state['values'] = array_diff_key($form_state['values'], array($name => NULL));
 | |
|       variable_del($name);
 | |
|     } else {
 | |
|       $form_state['values'][$name] = (int)$form_state['values'][$name];
 | |
|     }
 | |
|   }
 | |
| }
 | 
