public function action__wp_ajax_lift_setting()
 {
     if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['model'])) {
         $settings_data = json_decode(stripslashes($_POST['model']));
         $response = array('status' => 'SUCCESS', 'data' => array(), 'errors' => array());
         $setting_value = $settings_data->value;
         $response['model']['id'] = $setting_key = $settings_data->id;
         $error = new WP_Error();
         if (isset($_GET['nonce']) && wp_verify_nonce($_GET['nonce'], 'lift_setting')) {
             switch ($setting_key) {
                 case 'credentials':
                     if ('' === $setting_value->accessKey && '' === $setting_value->secretKey) {
                         //empty values are used to reset
                         Lift_Search::set_access_key_id('');
                         Lift_Search::set_secret_access_key('');
                     } else {
                         $result = $this->test_credentials($setting_value->accessKey, $setting_value->secretKey);
                         if ($result['error']) {
                             $error->add('invalid_credentials', $result['message']);
                         } else {
                             Lift_Search::set_access_key_id($setting_value->accessKey);
                             Lift_Search::set_secret_access_key($setting_value->secretKey);
                         }
                     }
                     $response['model']['value'] = array('accessKey' => Lift_Search::get_access_key_id(), 'secretKey' => Lift_Search::get_secret_access_key());
                     break;
                 case 'batch_interval':
                     $value = max(array(1, intval($setting_value->value)));
                     $unit = $setting_value->unit;
                     Lift_Search::set_batch_interval_display($value, $unit);
                     $response['model']['value'] = Lift_Search::get_batch_interval_display();
                     break;
                 case 'domainname':
                     $domain_manager = Lift_Search::get_domain_manager();
                     $replacing_domain = Lift_Search::get_search_domain_name() != $setting_value;
                     $region = !empty($settings_data->region) ? $settings_data->region : false;
                     if ($setting_value === '') {
                         //assume that empty domain name means that we're clearing the set domain
                         Lift_Search::set_search_domain_name('');
                         Lift_Batch_Handler::_deactivation_cleanup();
                         $response['model']['value'] = '';
                     } elseif ($domain_manager->domain_exists($setting_value, $region)) {
                         $changed_fields = array();
                         if (!is_wp_error($result = $domain_manager->apply_schema($setting_value, null, $changed_fields, $region))) {
                             if ($replacing_domain) {
                                 Lift_Batch_Handler::queue_all();
                                 Lift_Batch_Handler::enable_cron();
                             }
                             Lift_Search::set_search_domain_name($setting_value);
                             Lift_Search::set_domain_region($region);
                         } else {
                             $error->add('schema_error', 'There was an error while applying the schema to the domain.');
                         }
                     } else {
                         $error->add('invalid_domain', 'The given domain does not exist.');
                     }
                     $response['model']['value'] = Lift_Search::get_search_domain_name();
                     break;
                 case 'region':
                     $response['model']['value'] = Lift_Search::get_domain_region();
                     break;
                 case 'next_sync':
                     //for now just assume that anh post for next_sync is to fire sync immediately
                     Lift_Batch_Handler::disable_cron();
                     Lift_Batch_Handler::enable_cron(time());
                     break;
                 case 'override_search':
                     Lift_Search::set_override_search((bool) $setting_value);
                     $response['model']['value'] = Lift_Search::get_override_search();
                     break;
                 default:
                     $error->add('invalid_setting', 'The name of the setting you are trying to set is invalid.');
                     break;
             }
         } else {
             $error->add('invalid_nonce', 'The request was missing required authentication data.');
         }
         if (count($error->get_error_codes())) {
             foreach ($error->get_error_codes() as $code) {
                 $response['errors'][] = array('code' => $code, 'message' => $error->get_error_message($code));
             }
             status_header(400);
             header('Content-Type: application/json');
             $response['status'] = 'FAILURE';
         }
         die(json_encode($response));
     }
 }