/** * Delete saved settings, restoring default values * * @since 2.11 * * @return array Message(s) reflecting the results of the operation */ private static function _reset_language_settings() { $message_list = ''; foreach (MLA_WPML::$mla_language_option_definitions as $key => $value) { if ('language' == $value['tab']) { if ('custom' == $value['type'] && isset($value['reset'])) { $message = self::$value['reset']('reset', $key, $value, $_REQUEST); } elseif ('header' == $value['type'] || 'hidden' == $value['type']) { $message = ''; } else { MLACore::mla_delete_option($key, MLA_WPML::$mla_language_option_definitions); /* translators: 1: option name */ $message = '<br>' . sprintf(_x('delete_option "%1$s"', 'message_list', 'media-library-assistant'), $key); } $message_list .= $message; } } $page_content = array('message' => __('Language settings reset to default values.', 'media-library-assistant') . "\n", 'body' => ''); /* * Uncomment this for debugging. */ //$page_content['message'] .= $message_list; return $page_content; }
/** * Sanitize and expand query arguments from request variables * * Prepare the arguments for WP_Query. * Modeled after wp_edit_attachments_query in wp-admin/post.php * * @since 0.1 * * @param array query parameters from web page, usually found in $_REQUEST * @param int Optional number of rows (default 0) to skip over to reach desired page * @param int Optional number of rows on each page (0 = all rows, default) * * @return array revised arguments suitable for WP_Query */ private static function _prepare_list_table_query($raw_request, $offset = 0, $count = 0) { /* * Go through the $raw_request, take only the arguments that are used in the query and * sanitize or validate them. */ if (!is_array($raw_request)) { /* translators: 1: ERROR tag 2: function name 3: non-array value */ error_log(sprintf(_x('%1$s: %2$s non-array "%3$s"', 'error_log', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), 'MLAQuery::_prepare_list_table_query', var_export($raw_request, true)), 0); return NULL; } /* * Make sure the current orderby choice still exists or revert to default. */ $default_orderby = array_merge(array('none' => array('none', false)), self::mla_get_sortable_columns()); $current_orderby = MLACore::mla_get_option(MLACore::MLA_DEFAULT_ORDERBY); $found_current = false; foreach ($default_orderby as $key => $value) { if ($current_orderby == $value[0]) { $found_current = true; break; } } if ($found_current) { /* * Custom fields can have HTML reserved characters, which are encoded by * mla_get_sortable_columns, so a separate, unencoded list is required. */ $default_orderby = MLACore::mla_custom_field_support('custom_sortable_columns'); foreach ($default_orderby as $sort_key => $sort_value) { if ($current_orderby == $sort_key) { $current_orderby = 'c_' . $sort_value[0]; break; } } // foreach } else { MLACore::mla_delete_option(MLACore::MLA_DEFAULT_ORDERBY); $current_orderby = MLACore::mla_get_option(MLACore::MLA_DEFAULT_ORDERBY); } $clean_request = array('m' => 0, 'orderby' => $current_orderby, 'order' => MLACore::mla_get_option(MLACore::MLA_DEFAULT_ORDER), 'post_type' => 'attachment', 'post_status' => 'inherit', 'mla_search_connector' => 'AND', 'mla_search_fields' => array()); foreach ($raw_request as $key => $value) { switch ($key) { /* * 'sentence' and 'exact' modify the keyword search ('s') * Their value is not important, only their presence. */ case 'sentence': case 'exact': case 'mla-tax': case 'mla-term': $clean_request[$key] = sanitize_key($value); break; case 'orderby': if (in_array($value, array('none', 'post__in'))) { $clean_request[$key] = $value; } else { $orderby = NULL; /* * Custom fields can have HTML reserved characters, which are encoded by * mla_get_sortable_columns, so a separate, unencoded list is required. */ $sortable_columns = MLACore::mla_custom_field_support('custom_sortable_columns'); foreach ($sortable_columns as $sort_key => $sort_value) { if ($value == $sort_key) { $orderby = 'c_' . $sort_value[0]; break; } } // foreach if (NULL === $orderby) { $sortable_columns = MLAQuery::mla_get_sortable_columns(); foreach ($sortable_columns as $sort_key => $sort_value) { if ($value == $sort_value[0]) { $orderby = $value; break; } } // foreach } if (NULL !== $orderby) { $clean_request[$key] = $orderby; } } break; /* * ids allows hooks to supply a persistent list of items */ /* * ids allows hooks to supply a persistent list of items */ case 'ids': if (is_array($value)) { $clean_request['post__in'] = $value; } else { $clean_request['post__in'] = array_map('absint', explode(',', $value)); } break; /* * post__in and post__not_in are used in the Media Modal Ajax queries */ /* * post__in and post__not_in are used in the Media Modal Ajax queries */ case 'post__in': case 'post__not_in': case 'post_mime_type': $clean_request[$key] = $value; break; case 'parent': case 'post_parent': $clean_request['post_parent'] = absint($value); break; /* * ['m'] - filter by year and month of post, e.g., 201204 */ /* * ['m'] - filter by year and month of post, e.g., 201204 */ case 'author': case 'm': $clean_request[$key] = absint($value); break; /* * ['mla_filter_term'] - filter by category or tag ID; -1 allowed */ /* * ['mla_filter_term'] - filter by category or tag ID; -1 allowed */ case 'mla_filter_term': $clean_request[$key] = intval($value); break; case 'order': switch ($value = strtoupper($value)) { case 'ASC': case 'DESC': $clean_request[$key] = $value; break; default: $clean_request[$key] = 'ASC'; } break; case 'detached': if ('0' == $value || '1' == $value) { $clean_request['detached'] = $value; } break; case 'status': if ('trash' == $value) { $clean_request['post_status'] = 'trash'; } break; /* * ['s'] - Search Media by one or more keywords * ['mla_search_connector'], ['mla_search_fields'] - Search Media options */ /* * ['s'] - Search Media by one or more keywords * ['mla_search_connector'], ['mla_search_fields'] - Search Media options */ case 's': switch (substr($value, 0, 3)) { case '>|<': $clean_request['debug'] = 'console'; break; case '<|>': $clean_request['debug'] = 'log'; break; } if (isset($clean_request['debug'])) { $value = substr($value, 3); } $value = stripslashes(trim($value)); if (!empty($value)) { $clean_request[$key] = $value; } break; case 'mla_terms_search': if (!empty($value['phrases']) && !empty($value['taxonomies'])) { $value['phrases'] = stripslashes(trim($value['phrases'])); if (!empty($value['phrases'])) { $clean_request[$key] = $value; } } break; case 'mla_search_connector': case 'mla_search_fields': $clean_request[$key] = $value; break; case 'mla-metakey': case 'mla-metavalue': $clean_request[$key] = stripslashes($value); break; case 'meta_query': if (!empty($value)) { if (is_array($value)) { $clean_request[$key] = $value; } else { $clean_request[$key] = unserialize(stripslashes($value)); unset($clean_request[$key]['slug']); } // not array } break; default: // ignore anything else in $_REQUEST } // switch $key } // foreach $raw_request /* * Pass query and search parameters to the filters for _execute_list_table_query */ self::$query_parameters = array('use_alt_text_view' => false, 'use_postmeta_view' => false, 'use_orderby_view' => false, 'orderby' => $clean_request['orderby'], 'order' => $clean_request['order']); self::$query_parameters['detached'] = isset($clean_request['detached']) ? $clean_request['detached'] : NULL; self::$search_parameters = array('debug' => 'none'); /* * Matching a meta_value to NULL requires a LEFT JOIN to a view and a special WHERE clause * Matching a wildcard pattern requires mainpulating the WHERE clause, too */ if (isset($clean_request['meta_query']['key'])) { self::$query_parameters['use_postmeta_view'] = true; self::$query_parameters['postmeta_key'] = $clean_request['meta_query']['key']; self::$query_parameters['postmeta_value'] = NULL; unset($clean_request['meta_query']); } elseif (isset($clean_request['meta_query']['patterns'])) { self::$query_parameters['patterns'] = $clean_request['meta_query']['patterns']; unset($clean_request['meta_query']['patterns']); } if (isset($clean_request['debug'])) { self::$query_parameters['debug'] = $clean_request['debug']; self::$search_parameters['debug'] = $clean_request['debug']; MLACore::mla_debug_mode($clean_request['debug']); unset($clean_request['debug']); } /* * We must patch the WHERE clause if there are leading spaces in the meta_value */ if (isset($clean_request['mla-metavalue']) && 0 < strlen($clean_request['mla-metavalue']) && ' ' == $clean_request['mla-metavalue'][0]) { self::$query_parameters['mla-metavalue'] = $clean_request['mla-metavalue']; } /* * We will handle "Terms Search" in the mla_query_posts_search_filter. */ if (isset($clean_request['mla_terms_search'])) { self::$search_parameters['mla_terms_search'] = $clean_request['mla_terms_search']; /* * The Terms Search overrides any terms-based keyword search for now; too complicated. */ if (isset($clean_request['mla_search_fields'])) { foreach ($clean_request['mla_search_fields'] as $index => $field) { if ('terms' == $field) { unset($clean_request['mla_search_fields'][$index]); } } } } /* * We will handle keyword search in the mla_query_posts_search_filter. */ if (isset($clean_request['s'])) { self::$search_parameters['s'] = $clean_request['s']; self::$search_parameters['mla_search_fields'] = apply_filters('mla_list_table_search_filter_fields', $clean_request['mla_search_fields'], array('content', 'title', 'excerpt', 'alt-text', 'name', 'terms')); self::$search_parameters['mla_search_connector'] = $clean_request['mla_search_connector']; self::$search_parameters['sentence'] = isset($clean_request['sentence']); self::$search_parameters['exact'] = isset($clean_request['exact']); if (in_array('alt-text', self::$search_parameters['mla_search_fields'])) { self::$query_parameters['use_alt_text_view'] = true; } if (in_array('terms', self::$search_parameters['mla_search_fields'])) { self::$search_parameters['mla_search_taxonomies'] = MLACore::mla_supported_taxonomies('term-search'); } unset($clean_request['s']); unset($clean_request['mla_search_connector']); unset($clean_request['mla_search_fields']); unset($clean_request['sentence']); unset($clean_request['exact']); } /* * We have to handle custom field/post_meta values here * because they need a JOIN clause supplied by WP_Query */ if ('c_' == substr($clean_request['orderby'], 0, 2)) { $option_value = MLAQuery::mla_custom_field_option_value($clean_request['orderby']); if (isset($option_value['name'])) { self::$query_parameters['use_orderby_view'] = true; self::$query_parameters['postmeta_key'] = $option_value['name']; if (isset($clean_request['orderby'])) { unset($clean_request['orderby']); } if (isset($clean_request['order'])) { unset($clean_request['order']); } } } else { // custom field switch (self::$query_parameters['orderby']) { /* * '_wp_attachment_image_alt' is special; it can have NULL values, * so we'll handle it in the JOIN and ORDERBY filters */ case '_wp_attachment_image_alt': self::$query_parameters['use_orderby_view'] = true; self::$query_parameters['postmeta_key'] = '_wp_attachment_image_alt'; if (isset($clean_request['orderby'])) { unset($clean_request['orderby']); } if (isset($clean_request['order'])) { unset($clean_request['order']); } break; case '_wp_attached_file': $clean_request['meta_key'] = '_wp_attached_file'; $clean_request['orderby'] = 'meta_value'; $clean_request['order'] = self::$query_parameters['order']; break; } // switch $orderby } /* * Ignore incoming paged value; use offset and count instead */ if ((int) $count > 0) { $clean_request['offset'] = $offset; $clean_request['posts_per_page'] = $count; } elseif ((int) $count == -1) { $clean_request['posts_per_page'] = $count; } /* * ['mla_filter_term'] - filter by taxonomy * * cat = 0 is "All Categories", i.e., no filtering * cat = -1 is "No Categories" */ if (isset($clean_request['mla_filter_term'])) { if ($clean_request['mla_filter_term'] != 0) { $tax_filter = MLACore::mla_taxonomy_support('', 'filter'); if ($clean_request['mla_filter_term'] == -1) { $term_list = get_terms($tax_filter, array('fields' => 'ids', 'hide_empty' => false)); $clean_request['tax_query'] = array(array('taxonomy' => $tax_filter, 'field' => 'id', 'terms' => $term_list, 'operator' => 'NOT IN')); } else { // mla_filter_term == -1 $clean_request['tax_query'] = array(array('taxonomy' => $tax_filter, 'field' => 'id', 'terms' => array((int) $clean_request['mla_filter_term']), 'include_children' => 'checked' == MLACore::mla_get_option(MLACore::MLA_TAXONOMY_FILTER_INCLUDE_CHILDREN))); } // mla_filter_term != -1 } // mla_filter_term != 0 unset($clean_request['mla_filter_term']); } // isset mla_filter_term if (isset($clean_request['mla-tax']) && isset($clean_request['mla-term'])) { $clean_request['tax_query'] = array(array('taxonomy' => $clean_request['mla-tax'], 'field' => 'slug', 'terms' => $clean_request['mla-term'], 'include_children' => false)); unset($clean_request['mla-tax']); unset($clean_request['mla-term']); } // isset mla_tax if (isset($clean_request['mla-metakey']) && isset($clean_request['mla-metavalue'])) { $clean_request['meta_key'] = $clean_request['mla-metakey']; $clean_request['meta_value'] = $clean_request['mla-metavalue']; unset($clean_request['mla-metakey']); unset($clean_request['mla-metavalue']); } // isset mla_tax return $clean_request; }
/** * Ajax handler for Media Manager "Query Attachments" queries * * Adapted from wp_ajax_query_attachments in /wp-admin/includes/ajax-actions.php * * @since 2.20 * * @return void passes array of post arrays to wp_send_json_success() for JSON encoding and transmission */ public static function mla_query_attachments_action() { if (!current_user_can('upload_files')) { wp_send_json_error(); } /* * Pick out and clean up the query terms we can process */ $raw_query = isset($_REQUEST['query']) ? (array) $_REQUEST['query'] : array(); $query = array_intersect_key($raw_query, array_flip(array('order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type', 'post_parent', 'post__in', 'post__not_in', 'mla_filter_month', 'mla_filter_term', 'mla_terms_search', 'mla_search_value', 's', 'mla_search_fields', 'mla_search_connector'))); $query = apply_filters('mla_media_modal_query_initial_terms', $query, $raw_query); if (isset($query['post_mime_type'])) { if ('detached' == $query['post_mime_type']) { $query['detached'] = '1'; unset($query['post_mime_type']); } elseif ('attached' == $query['post_mime_type']) { $query['detached'] = '0'; unset($query['post_mime_type']); } elseif ('trash' == $query['post_mime_type']) { $query['status'] = 'trash'; unset($query['post_mime_type']); } else { $view = $query['post_mime_type']; unset($query['post_mime_type']); $query = array_merge($query, MLACore::mla_prepare_view_query('view', $view)); } } /* * Convert mla_filter_month back to the WordPress "m" parameter */ if (isset($query['mla_filter_month'])) { if ('0' != $query['mla_filter_month']) { $query['m'] = $query['mla_filter_month']; } unset($query['mla_filter_month']); } /* * Process the enhanced search box OR fix up the default search box */ if (isset($query['mla_search_value'])) { if (!empty($query['mla_search_value'])) { $query['s'] = $query['mla_search_value']; } unset($query['mla_search_value']); } if (isset($query['posts_per_page'])) { $count = $query['posts_per_page']; $offset = $count * (isset($query['paged']) ? $query['paged'] - 1 : 0); } else { $count = 0; $offset = 0; } /* * Check for sorting override */ $option = MLACore::mla_get_option(MLACoreOptions::MLA_MEDIA_MODAL_ORDERBY); if ('default' != $option) { /* * Make sure the current orderby choice still exists or revert to default. */ $default_orderby = array_merge(array('none' => array('none', false)), MLAQuery::mla_get_sortable_columns()); $found_current = false; foreach ($default_orderby as $key => $value) { if ($option == $value[0]) { $found_current = true; break; } } if (!$found_current) { MLACore::mla_delete_option(MLACoreOptions::MLA_DEFAULT_ORDERBY); $option = MLACore::mla_get_option(MLACoreOptions::MLA_DEFAULT_ORDERBY); } $query['orderby'] = $option; } $option = MLACore::mla_get_option(MLACoreOptions::MLA_MEDIA_MODAL_ORDER); if ('default' != $option) { $query['order'] = $option; } $query['post_type'] = 'attachment'; if (empty($query['status'])) { $query['post_status'] = 'inherit'; if (current_user_can(get_post_type_object('attachment')->cap->read_private_posts)) { $query['post_status'] .= ',private'; } } $query = apply_filters('mla_media_modal_query_filtered_terms', $query, $raw_query); $query = MLAQuery::mla_query_media_modal_items($query, $offset, $count); $posts = array_map('wp_prepare_attachment_for_js', $query->posts); $posts = array_filter($posts); wp_send_json_success($posts); }
/** * Render and manage iptc/exif support options * * @since 1.00 * @uses $mla_option_templates contains row and table templates * * @param string 'render', 'update', 'delete', or 'reset' * @param string option name, e.g., 'iptc_exif_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_iptc_exif_option_handler($action, $key, $value, $args = NULL) { $current_values = MLACore::mla_get_option('iptc_exif_mapping'); switch ($action) { case 'render': switch ($key) { case 'iptc_exif_standard_mapping': $row_template = MLAOptions::$mla_option_templates['iptc-exif-standard-row']; $table_rows = ''; foreach ($current_values['standard'] as $row_name => $row_value) { $row_values = array('key' => esc_attr($row_name), 'name_attr' => esc_attr($row_value['name']), 'name' => esc_html($row_value['name']), 'iptc_field_options' => MLAOptions::_compose_iptc_option_list($row_value['iptc_value']), 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => esc_attr($row_value['exif_value']), 'iptc_selected' => '', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant')); if ($row_value['iptc_first']) { $row_values['iptc_selected'] = 'selected="selected"'; } else { $row_values['exif_selected'] = 'selected="selected"'; } if ($row_value['keep_existing']) { $row_values['keep_selected'] = 'selected="selected"'; } else { $row_values['replace_selected'] = 'selected="selected"'; } $table_rows .= MLAData::mla_parse_template($row_template, $row_values); } // foreach row $option_values = array('Field Title' => __('Field Title', 'media-library-assistant'), 'IPTC Value' => __('IPTC Value', 'media-library-assistant'), 'EXIF/Template Value' => __('EXIF/Template Value', 'media-library-assistant'), 'Priority' => __('Priority', 'media-library-assistant'), 'Existing Text' => __('Existing Text', 'media-library-assistant'), 'table_rows' => $table_rows, 'help' => $value['help']); return MLAData::mla_parse_template(MLAOptions::$mla_option_templates['iptc-exif-standard-table'], $option_values); case 'iptc_exif_taxonomy_mapping': $row_template = MLAOptions::$mla_option_templates['iptc-exif-taxonomy-row']; $select_template = MLAOptions::$mla_option_templates['iptc-exif-select']; $table_rows = ''; $taxonomies = get_taxonomies(array('show_ui' => true), 'objects'); foreach ($taxonomies as $row_name => $row_value) { if (!MLACore::mla_taxonomy_support($row_name, 'support')) { continue; } $row_values = array('key' => esc_attr($row_name), 'name' => esc_html($row_value->labels->name), 'hierarchical' => (string) $row_value->hierarchical, 'iptc_field_options' => '', 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => '', 'iptc_selected' => '', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'delimiters_size' => 4, 'delimiters_text' => '', 'parent_select' => ''); if (array_key_exists($row_name, $current_values['taxonomy'])) { $current_value = $current_values['taxonomy'][$row_name]; $row_values['iptc_field_options'] = MLAOptions::_compose_iptc_option_list($current_value['iptc_value']); $row_values['exif_text'] = esc_attr($current_value['exif_value']); if ($current_value['iptc_first']) { $row_values['iptc_selected'] = 'selected="selected"'; } else { $row_values['exif_selected'] = 'selected="selected"'; } if ($current_value['keep_existing']) { $row_values['keep_selected'] = 'selected="selected"'; } else { $row_values['replace_selected'] = 'selected="selected"'; } $row_values['delimiters_text'] = $current_value['delimiters']; if ($row_value->hierarchical) { $parent = isset($current_value['parent']) ? (int) $current_value['parent'] : 0; $select_values = array('array' => 'taxonomy', 'key' => esc_attr($row_name), 'element' => 'parent', 'options' => MLAOptions::_compose_parent_option_list($row_name, $parent)); $row_values['parent_select'] = MLAData::mla_parse_template($select_template, $select_values); } } else { $row_values['iptc_field_options'] = MLAOptions::_compose_iptc_option_list('none'); $row_values['iptc_selected'] = 'selected="selected"'; $row_values['keep_selected'] = 'selected="selected"'; if ($row_value->hierarchical) { $select_values = array('array' => 'taxonomy', 'key' => esc_attr($row_name), 'element' => 'parent', 'options' => MLAOptions::_compose_parent_option_list($row_name, 0)); $row_values['parent_select'] = MLAData::mla_parse_template($select_template, $select_values); } } $table_rows .= MLAData::mla_parse_template($row_template, $row_values); } // foreach row $option_values = array('Field Title' => __('Field Title', 'media-library-assistant'), 'IPTC Value' => __('IPTC Value', 'media-library-assistant'), 'EXIF/Template Value' => __('EXIF/Template Value', 'media-library-assistant'), 'Priority' => __('Priority', 'media-library-assistant'), 'Existing Text' => __('Existing Text', 'media-library-assistant'), 'Delimiter(s)' => __('Delimiter(s)', 'media-library-assistant'), 'Parent' => __('Parent', 'media-library-assistant'), 'table_rows' => $table_rows, 'help' => $value['help']); return MLAData::mla_parse_template(MLAOptions::$mla_option_templates['iptc-exif-taxonomy-table'], $option_values); case 'iptc_exif_custom_mapping': if (empty($current_values['custom'])) { $table_rows = MLAData::mla_parse_template(MLAOptions::$mla_option_templates['iptc-exif-custom-empty-row'], array('No Mapping Rules' => __('No Custom Field Mapping Rules Defined', 'media-library-assistant'), 'column_count' => 5)); } else { $row_template = MLAOptions::$mla_option_templates['iptc-exif-custom-rule-row']; $table_rows = ''; $index = 0; } /* * One row for each existing rule, case insensitive "natural order" */ $sorted_keys = array(); foreach ($current_values['custom'] 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['custom'] 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['custom'][$row_name]; $row_values = array('column_count' => 5, 'column_count_meta' => 5 - 2, 'index' => $index++, 'key' => esc_attr($row_name), 'name_attr' => esc_attr($current_value['name']), 'name' => esc_html($current_value['name']), 'iptc_field_options' => MLAOptions::_compose_iptc_option_list($current_value['iptc_value']), 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => esc_attr($current_value['exif_value']), 'iptc_selected' => '', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => '', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'Format' => __('Format', 'media-library-assistant'), 'native_format' => '', 'Native' => __('Native', 'media-library-assistant'), 'commas_format' => '', 'Commas' => __('Commas', 'media-library-assistant'), 'raw_format' => '', 'Raw' => __('Raw', 'media-library-assistant'), '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['iptc_first']) { $row_values['iptc_selected'] = 'selected="selected"'; } else { $row_values['exif_selected'] = 'selected="selected"'; } 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 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_values key } // foreach sorted_name /* * Add a row for defining a new rule, existing Custom Field */ $row_template = MLAOptions::$mla_option_templates['iptc-exif-custom-new-rule-row']; $row_values = array('column_count' => 5, 'column_count_meta' => 5 - 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['custom']), 'iptc_field_options' => MLAOptions::_compose_iptc_option_list('none'), 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => '', 'iptc_selected' => 'selected="selected"', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => 'selected="selected"', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'Format' => __('Format', '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'), '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 rule, new Custom Field */ $row_template = MLAOptions::$mla_option_templates['iptc-exif-custom-new-field-row']; $row_values = array('column_count' => 5, 'column_count_meta' => 5 - 2, 'Add new Field' => __('Add a new Field and Mapping Rule', 'media-library-assistant'), 'index' => MLACoreOptions::MLA_NEW_CUSTOM_FIELD, 'field_name_size' => '24', 'iptc_field_options' => MLAOptions::_compose_iptc_option_list('none'), 'exif_size' => MLACoreOptions::MLA_EXIF_SIZE, 'exif_text' => '', 'iptc_selected' => 'selected="selected"', 'IPTC' => __('IPTC', 'media-library-assistant'), 'exif_selected' => '', 'EXIF' => __('EXIF', 'media-library-assistant'), 'keep_selected' => 'selected="selected"', 'Keep' => __('Keep', 'media-library-assistant'), 'replace_selected' => '', 'Replace' => __('Replace', 'media-library-assistant'), 'Format' => __('Format', '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'), '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'), 'IPTC Value' => __('IPTC Value', 'media-library-assistant'), 'EXIF/Template Value' => __('EXIF/Template Value', 'media-library-assistant'), 'Priority' => __('Priority', 'media-library-assistant'), 'Existing Text' => __('Existing Text', 'media-library-assistant'), 'table_rows' => $table_rows, 'help' => $value['help']); return MLAData::mla_parse_template(MLAOptions::$mla_option_templates['iptc-exif-custom-table'], $option_values); default: /* translators: 1: ERROR tag 2: option name */ return '<br>' . sprintf(__('%1$s: Render unknown custom %2$s.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $key) . "\r\n"; } // switch $key // switch $key case 'update': case 'delete': $settings_changed = false; $messages = ''; switch ($key) { case 'iptc_exif_standard_mapping': $results = MLAOptions::_update_iptc_exif_standard_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed = $results['changed']; break; case 'iptc_exif_taxonomy_mapping': $results = MLAOptions::_update_iptc_exif_taxonomy_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed = $results['changed']; break; case 'iptc_exif_custom_mapping': $results = MLAOptions::_update_iptc_exif_custom_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed = $results['changed']; break; case 'iptc_exif_mapping': $results = MLAOptions::_update_iptc_exif_standard_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed = $results['changed']; $results = MLAOptions::_update_iptc_exif_taxonomy_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed |= $results['changed']; $results = MLAOptions::_update_iptc_exif_custom_mapping($current_values, $args); $messages .= $results['message']; $current_values = $results['values']; $settings_changed |= $results['changed']; break; default: /* translators: 1: ERROR tag 2: option name */ return '<br>' . sprintf(__('%1$s: Update/delete unknown custom %2$s.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $key) . "\r\n"; } // switch $key if ($settings_changed) { $settings_changed = MLACore::mla_update_option('iptc_exif_mapping', $current_values); if ($settings_changed) { $results = __('IPTC/EXIF mapping settings updated.', 'media-library-assistant') . "\r\n"; } else { $results = __('ERROR', 'media-library-assistant') . ': ' . __('IPTC/EXIF settings update failed.', 'media-library-assistant') . "\r\n"; } } else { $results = __('IPTC/EXIF no mapping changes detected.', 'media-library-assistant') . "\r\n"; } return $results . $messages; case 'reset': switch ($key) { case 'iptc_exif_standard_mapping': $current_values['standard'] = MLACoreOptions::$mla_option_definitions['iptc_exif_mapping']['std']['standard']; $settings_changed = MLACore::mla_update_option('iptc_exif_mapping', $current_values); if ($settings_changed) { /* translators: 1: field type */ return sprintf(__('%1$s settings saved.', 'media-library-assistant'), 'IPTC/EXIF ' . __('Standard field', 'media-library-assistant')) . "\r\n"; } else { /* translators: 1: ERROR tag 2: field type */ return sprintf(__('%1$s: IPTC/EXIF %2$s settings update failed.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), __('Standard field', 'media-library-assistant')) . "\r\n"; } case 'iptc_exif_taxonomy_mapping': $current_values['taxonomy'] = MLACoreOptions::$mla_option_definitions['iptc_exif_mapping']['std']['taxonomy']; $settings_changed = MLACore::mla_update_option('iptc_exif_mapping', $current_values); if ($settings_changed) { /* translators: 1: field type */ return sprintf(__('%1$s settings saved.', 'media-library-assistant'), 'IPTC/EXIF ' . __('Taxonomy term', 'media-library-assistant')) . "\r\n"; } else { /* translators: 1: ERROR tag 2: field type */ return sprintf(__('%1$s: IPTC/EXIF %2$s settings update failed.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), __('Taxonomy term', 'media-library-assistant')) . "\r\n"; } case 'iptc_exif_custom_mapping': $current_values['custom'] = MLACoreOptions::$mla_option_definitions['iptc_exif_mapping']['std']['custom']; $settings_changed = MLACore::mla_update_option('iptc_exif_mapping', $current_values); if ($settings_changed) { /* translators: 1: field type */ return sprintf(__('%1$s settings saved.', 'media-library-assistant'), 'IPTC/EXIF ' . __('Custom field', 'media-library-assistant')) . "\r\n"; } else { /* translators: 1: ERROR tag 2: field type */ return sprintf(__('%1$s: IPTC/EXIF %2$s settings update failed.', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), __('Custom field', 'media-library-assistant')) . "\r\n"; } case 'iptc_exif_mapping': MLACore::mla_delete_option($key); /* translators: 1: option name, e.g., taxonomy_support */ return '<br>' . sprintf(__('Reset custom %1$s', 'media-library-assistant'), $key) . "\r\n"; default: /* translators: 1: ERROR tag 2: option name, e.g., taxonomy_support */ return '<br>' . sprintf(__('%1$s: Reset unknown custom %2$s', 'media-library-assistant'), __('ERROR', 'media-library-assistant'), $key) . "\r\n"; } // switch $key // switch $key 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 }