/** * 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 }