/**
  * Render and manage custom field mapping options
  *
  * @since 1.10
  * @uses $mla_option_templates contains row and table templates
  *
  * @param	string 	'render', 'update', 'delete', or 'reset'
  * @param	string 	option name, e.g., 'custom_field_mapping'
  * @param	array 	option parameters
  * @param	array 	Optional. null (default) for 'render' else option data, e.g., $_REQUEST
  *
  * @return	string	HTML table row markup for 'render' else message(s) reflecting the results of the operation.
  */
 public static function mla_custom_field_option_handler($action, $key, $value, $args = NULL)
 {
     $current_values = MLACore::mla_get_option('custom_field_mapping');
     switch ($action) {
         case 'render':
             if (empty($current_values)) {
                 $table_rows = MLAData::mla_parse_template(MLAOptions::$mla_option_templates['custom-field-empty-row'], array('No Mapping Rules' => __('No Custom Field Mapping Rules Defined', 'media-library-assistant'), 'column_count' => 7));
             } else {
                 $row_template = MLAOptions::$mla_option_templates['custom-field-rule-row'];
                 $table_rows = '';
                 $index = 0;
             }
             /*
              * One row for each existing rule, case insensitive "natural order"
              */
             $sorted_keys = array();
             foreach ($current_values as $row_name => $current_value) {
                 $sorted_keys[$current_value['name']] = $current_value['name'];
             }
             natcasesort($sorted_keys);
             $sorted_names = array();
             foreach ($sorted_keys as $row_name) {
                 $sorted_names[$row_name] = array();
             }
             /*
              * Allow for multiple rules mapping the same name (an old bug)
              */
             foreach ($current_values as $row_name => $current_value) {
                 $sorted_names[$current_value['name']][] = $row_name;
             }
             foreach ($sorted_names as $sorted_keys) {
                 foreach ($sorted_keys as $row_name) {
                     $current_value = $current_values[$row_name];
                     $row_values = array('column_count' => 7, 'column_count_meta' => 7 - 2, 'index' => $index++, 'key' => esc_attr($row_name), 'name_attr' => esc_attr($row_name), 'name' => esc_html($row_name), 'data_source_options' => MLAOptions::_compose_data_source_option_list($current_value['data_source']), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'native_format' => '', 'Native' => __('Native', 'media-library-assistant'), 'commas_format' => '', 'Commas' => __('Commas', 'media-library-assistant'), 'raw_format' => '', 'Raw' => __('Raw', 'media-library-assistant'), 'mla_column_checked' => '', 'quick_edit_checked' => '', 'bulk_edit_checked' => '', 'meta_name_size' => 30, 'meta_name' => esc_attr($current_value['meta_name']), 'Option' => __('Option', 'media-library-assistant'), 'text_option' => '', 'Text' => __('Text', 'media-library-assistant'), 'single_option' => '', 'Single' => __('Single', 'media-library-assistant'), 'export_option' => '', 'Export' => __('Export', 'media-library-assistant'), 'array_option' => '', 'Array' => __('Array', 'media-library-assistant'), 'multi_option' => '', 'Multi' => __('Multi', 'media-library-assistant'), 'no_null_checked' => '', 'Delete NULL values' => __('Delete NULL values', 'media-library-assistant'), 'Delete Rule' => __('Delete Rule', 'media-library-assistant'), 'Delete Field' => __('Delete Rule AND Field', 'media-library-assistant'), 'Update Rule' => __('Update Rule', 'media-library-assistant'), 'Map All Attachments' => __('Map All Attachments', 'media-library-assistant'));
                     if ($current_value['keep_existing']) {
                         $row_values['keep_selected'] = 'selected="selected"';
                     } else {
                         $row_values['replace_selected'] = 'selected="selected"';
                     }
                     switch ($current_value['format']) {
                         case 'commas':
                             $row_values['commas_format'] = 'selected="selected"';
                             break;
                         case 'raw':
                             $row_values['raw_format'] = 'selected="selected"';
                             break;
                         default:
                             $row_values['native_format'] = 'selected="selected"';
                     }
                     // format
                     if ($current_value['mla_column']) {
                         $row_values['mla_column_checked'] = 'checked="checked"';
                     }
                     if ($current_value['quick_edit']) {
                         $row_values['quick_edit_checked'] = 'checked="checked"';
                     }
                     if ($current_value['bulk_edit']) {
                         $row_values['bulk_edit_checked'] = 'checked="checked"';
                     }
                     switch ($current_value['option']) {
                         case 'single':
                             $row_values['single_option'] = 'selected="selected"';
                             break;
                         case 'export':
                             $row_values['export_option'] = 'selected="selected"';
                             break;
                         case 'array':
                             $row_values['array_option'] = 'selected="selected"';
                             break;
                         case 'multi':
                             $row_values['multi_option'] = 'selected="selected"';
                             break;
                         default:
                             $row_values['text_option'] = 'selected="selected"';
                     }
                     // option
                     if ($current_value['no_null']) {
                         $row_values['no_null_checked'] = 'checked="checked"';
                     }
                     $table_rows .= MLAData::mla_parse_template($row_template, $row_values);
                 }
                 // foreach current_value
             }
             // foreach sorted_name
             /*
              * Add a row for defining a new Custom Rule
              */
             $row_template = MLAOptions::$mla_option_templates['custom-field-new-rule-row'];
             $row_values = array('column_count' => 7, 'column_count_meta' => 7 - 2, 'Add new Rule' => __('Add a new Mapping Rule', 'media-library-assistant'), 'index' => MLACoreOptions::MLA_NEW_CUSTOM_RULE, 'field_name_options' => MLAOptions::_compose_custom_field_option_list('none', $current_values), 'data_source_options' => MLAOptions::_compose_data_source_option_list('none'), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => 'selected="selected"', 'Replace' => __('Replace', 'media-library-assistant'), 'native_format' => 'selected="selected"', 'Native' => __('Native', 'media-library-assistant'), 'commas_format' => '', 'Commas' => __('Commas', 'media-library-assistant'), 'raw_format' => '', 'Raw' => __('Raw', 'media-library-assistant'), 'mla_column_checked' => '', 'quick_edit_checked' => '', 'bulk_edit_checked' => '', 'meta_name_size' => 30, 'meta_name' => '', 'Option' => __('Option', 'media-library-assistant'), 'text_option' => '', 'Text' => __('Text', 'media-library-assistant'), 'single_option' => '', 'Single' => __('Single', 'media-library-assistant'), 'export_option' => '', 'Export' => __('Export', 'media-library-assistant'), 'array_option' => '', 'Array' => __('Array', 'media-library-assistant'), 'multi_option' => '', 'Multi' => __('Multi', 'media-library-assistant'), 'no_null_checked' => '', 'Delete NULL values' => __('Delete NULL values', 'media-library-assistant'), 'Add Rule' => __('Add Rule', 'media-library-assistant'), 'Map All Attachments' => __('Add Rule and Map All Attachments', 'media-library-assistant'));
             $table_rows .= MLAData::mla_parse_template($row_template, $row_values);
             /*
              * Add a row for defining a new Custom Field
              */
             $row_template = MLAOptions::$mla_option_templates['custom-field-new-field-row'];
             $row_values = array('column_count' => 7, 'column_count_meta' => 7 - 2, 'Add new Field' => __('Add a new Field and Mapping Rule', 'media-library-assistant'), 'index' => MLACoreOptions::MLA_NEW_CUSTOM_FIELD, 'field_name_size' => '24', 'data_source_options' => MLAOptions::_compose_data_source_option_list('none'), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => 'selected="selected"', 'Replace' => __('Replace', 'media-library-assistant'), 'native_format' => 'selected="selected"', 'Native' => __('Native', 'media-library-assistant'), 'commas_format' => '', 'Commas' => __('Commas', 'media-library-assistant'), 'raw_format' => '', 'Raw' => __('Raw', 'media-library-assistant'), 'mla_column_checked' => '', 'quick_edit_checked' => '', 'bulk_edit_checked' => '', 'meta_name_size' => 30, 'meta_name' => '', 'Option' => __('Option', 'media-library-assistant'), 'text_option' => '', 'Text' => __('Text', 'media-library-assistant'), 'single_option' => '', 'Single' => __('Single', 'media-library-assistant'), 'export_option' => '', 'Export' => __('Export', 'media-library-assistant'), 'array_option' => '', 'Array' => __('Array', 'media-library-assistant'), 'multi_option' => '', 'Multi' => __('Multi', 'media-library-assistant'), 'no_null_checked' => '', 'Delete NULL values' => __('Delete NULL values', 'media-library-assistant'), 'Add Field' => __('Add Field', 'media-library-assistant'), 'Map All Attachments' => __('Add Field and Map All Attachments', 'media-library-assistant'));
             $table_rows .= MLAData::mla_parse_template($row_template, $row_values);
             $option_values = array('Field Title' => __('Field Title', 'media-library-assistant'), 'Data Source' => __('Data Source', 'media-library-assistant'), 'Existing Text' => __('Existing Text', 'media-library-assistant'), 'Format' => __('Format', 'media-library-assistant'), 'MLA Column' => __('MLA Column', 'media-library-assistant'), 'Quick Edit' => __('Quick Edit', 'media-library-assistant'), 'Bulk Edit' => __('Bulk Edit', 'media-library-assistant'), 'table_rows' => $table_rows, 'help' => $value['help']);
             return MLAData::mla_parse_template(MLAOptions::$mla_option_templates['custom-field-table'], $option_values);
         case 'update':
         case 'delete':
             $settings_changed = false;
             $messages = '';
             $results = MLAOptions::_update_custom_field_mapping($current_values, $args);
             $messages .= $results['message'];
             $current_values = $results['values'];
             $settings_changed = $results['changed'];
             if ($settings_changed) {
                 $settings_changed = MLACore::mla_update_option('custom_field_mapping', $current_values);
                 if ($settings_changed) {
                     $results = __('Custom field mapping rules updated.', 'media-library-assistant') . "\r\n";
                 } else {
                     $results = __('ERROR', 'media-library-assistant') . ': ' . __('Custom field mapping rules update failed.', 'media-library-assistant') . "\r\n";
                 }
             } else {
                 $results = __('Custom field no mapping rule changes detected.', 'media-library-assistant') . "\r\n";
             }
             return $results . $messages;
         case 'reset':
             $current_values = MLACoreOptions::$mla_option_definitions['custom_field_mapping']['std'];
             $settings_changed = MLACore::mla_update_option('custom_field_mapping', $current_values);
             if ($settings_changed) {
                 return __('Custom field mapping settings saved.', 'media-library-assistant') . "\r\n";
             } else {
                 return __('ERROR', 'media-library-assistant') . ': ' . __('Custom field mapping settings reset failed.', 'media-library-assistant') . "\r\n";
             }
         default:
             /* translators: 1: ERROR tag 2: option name 3: action, e.g., update, delete, reset */
             return '<br>' . sprintf(__('%1$s: Custom %2$s unknown action "%3$s"', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $key, $action) . "\r\n";
     }
     // switch $action
 }