Ejemplo n.º 1
0
 /**
  * Adds flat checklist taxonomy support to the Media Manager Modal Window.
  * Declared public because it is an action.
  *
  * @since 2.20
  */
 public static function mla_admin_init_action()
 {
     //error_log( 'DEBUG: MLA_Ajax::mla_admin_init_action() $_REQUEST = ' . var_export( $_REQUEST, true ), 0 );
     /*
      * If there's no action variable, we have nothing more to do
      */
     if (!isset($_POST['action'])) {
         return;
     }
     /*
      * For flat taxonomies that use the checklist meta box, substitute our own handler
      * for /wp-admin/includes/ajax-actions.php function _wp_ajax_add_hierarchical_term().
      */
     if (defined('DOING_AJAX') && DOING_AJAX && 'add-' == substr($_POST['action'], 0, 4)) {
         $key = substr($_POST['action'], 4);
         if (MLACore::mla_taxonomy_support($key, 'flat-checklist')) {
             self::_mla_ajax_add_flat_term($key);
             /* note: this function sends an Ajax response and then dies; no return */
         }
     }
     add_action('wp_ajax_' . 'mla_find_posts', 'MLA_Ajax::mla_find_posts_ajax_action');
     add_action('wp_ajax_' . MLACore::JAVASCRIPT_INLINE_EDIT_SLUG . '-set-parent', 'MLA_Ajax::mla_set_parent_ajax_action');
 }
Ejemplo n.º 2
0
 /**
  * Registers Attachment Categories and Attachment Tags custom taxonomies, adds taxonomy-related filters
  *
  * @since 0.1
  *
  * @return	void
  */
 private static function _build_taxonomies()
 {
     if (MLACore::mla_taxonomy_support('attachment_category')) {
         $labels = array('name' => _x('Att. Categories', 'taxonomy_name_plural', 'media-library-assistant'), 'singular_name' => _x('Att. Category', 'taxonomy_name_singular', 'media-library-assistant'), 'search_items' => __('Search Att. Categories', 'media-library-assistant'), 'all_items' => __('All Att. Categories', 'media-library-assistant'), 'parent_item' => __('Parent Att. Category', 'media-library-assistant'), 'parent_item_colon' => __('Parent Att. Category', 'media-library-assistant') . ':', 'edit_item' => __('Edit Att. Category', 'media-library-assistant'), 'update_item' => __('Update Att. Category', 'media-library-assistant'), 'add_new_item' => sprintf(__('Add New %1$s', 'media-library-assistant'), __('Att. Category', 'media-library-assistant')), 'new_item_name' => __('New Att. Category Name', 'media-library-assistant'), 'menu_name' => __('Att. Category', 'media-library-assistant'));
         register_taxonomy('attachment_category', array('attachment'), array('hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, 'update_count_callback' => '_update_generic_term_count'));
     }
     if (MLACore::mla_taxonomy_support('attachment_tag')) {
         $labels = array('name' => _x('Att. Tags', 'taxonomy_name_plural', 'media-library-assistant'), 'singular_name' => _x('Att. Tag', 'taxonomy_name_singular', 'media-library-assistant'), 'search_items' => __('Search Att. Tags', 'media-library-assistant'), 'all_items' => __('All Att. Tags', 'media-library-assistant'), 'parent_item' => __('Parent Att. Tag', 'media-library-assistant'), 'parent_item_colon' => __('Parent Att. Tag', 'media-library-assistant') . ':', 'edit_item' => __('Edit Att. Tag', 'media-library-assistant'), 'update_item' => __('Update Att. Tag', 'media-library-assistant'), 'add_new_item' => sprintf(__('Add New %1$s', 'media-library-assistant'), __('Att. Tag', 'media-library-assistant')), 'new_item_name' => __('New Att. Tag Name', 'media-library-assistant'), 'menu_name' => __('Att. Tag', 'media-library-assistant'));
         register_taxonomy('attachment_tag', array('attachment'), array('hierarchical' => false, 'labels' => $labels, 'show_ui' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => true, 'update_count_callback' => '_update_generic_term_count'));
     }
     MLACore::mla_initialize_tax_checked_on_top();
     $taxonomies = get_taxonomies(array('show_ui' => true), 'names');
     foreach ($taxonomies as $tax_name) {
         if (MLACore::mla_taxonomy_support($tax_name)) {
             register_taxonomy_for_object_type($tax_name, 'attachment');
             add_filter("manage_edit-{$tax_name}_columns", 'MLAObjects::mla_taxonomy_get_columns_filter', 0x7fffffff, 1);
             // $columns
             add_filter("manage_{$tax_name}_custom_column", 'MLAObjects::mla_taxonomy_column_filter', 0x7fffffff, 3);
             // $place_holder, $column_name, $tag->term_id
         }
         // taxonomy support
     }
     // foreach
 }
 /**
  * Registers meta boxes for the Edit Media screen.
  * Declared public because it is an action.
  *
  * @since 0.80
  *
  * @param	string	type of the current post, e.g., 'attachment' (optional, default 'unknown') 
  * @param	object	current post (optional, default (object) array ( 'ID' => 0 ))
  *
  * @return	void
  */
 public static function mla_add_meta_boxes_action($post_type = 'unknown', $post = NULL)
 {
     /*
      * Plugins call this action with varying numbers of arguments!
      */
     if (NULL == $post) {
         $post = (object) array('ID' => 0);
     }
     if ('attachment' != $post_type) {
         return;
     }
     /*
      * Use the mla_checklist_meta_box callback function for MLA supported taxonomies
      */
     global $wp_meta_boxes;
     $screen = convert_to_screen('attachment');
     $page = $screen->id;
     if ('checked' == MLACore::mla_get_option(MLACoreOptions::MLA_EDIT_MEDIA_SEARCH_TAXONOMY)) {
         $taxonomies = get_taxonomies(array('show_ui' => true), 'objects');
         foreach ($taxonomies as $key => $value) {
             if (MLACore::mla_taxonomy_support($key)) {
                 if ($value->hierarchical) {
                     foreach (array_keys($wp_meta_boxes[$page]) as $a_context) {
                         foreach (array('high', 'sorted', 'core', 'default', 'low') as $a_priority) {
                             if (isset($wp_meta_boxes[$page][$a_context][$a_priority][$key . 'div'])) {
                                 $box =& $wp_meta_boxes[$page][$a_context][$a_priority][$key . 'div'];
                                 if ('post_categories_meta_box' == $box['callback']) {
                                     $box['callback'] = 'MLACore::mla_checklist_meta_box';
                                 }
                             }
                             // isset $box
                         }
                         // foreach priority
                     }
                     // foreach context
                 } elseif (MLACore::mla_taxonomy_support($key, 'flat-checklist')) {
                     foreach (array_keys($wp_meta_boxes[$page]) as $a_context) {
                         foreach (array('high', 'sorted', 'core', 'default', 'low') as $a_priority) {
                             if (isset($wp_meta_boxes[$page][$a_context][$a_priority]['tagsdiv-' . $key])) {
                                 $box =& $wp_meta_boxes[$page][$a_context][$a_priority]['tagsdiv-' . $key];
                                 if ('post_tags_meta_box' == $box['callback']) {
                                     $box['callback'] = 'MLACore::mla_checklist_meta_box';
                                 }
                             }
                             // isset $box
                         }
                         // foreach priority
                     }
                     // foreach context
                 }
                 // flat checklist
             }
             // is supported
         }
         // foreach
     }
     // MLA_EDIT_MEDIA_SEARCH_TAXONOMY
     if ('checked' == MLACore::mla_get_option(MLACoreOptions::MLA_EDIT_MEDIA_META_BOXES)) {
         $active_boxes = apply_filters('mla_edit_media_meta_boxes', array('mla-parent-info' => 'mla-parent-info', 'mla-menu-order' => 'mla-menu-order', 'mla-image-metadata' => 'mla-image-metadata', 'mla-featured-in' => 'mla-featured-in', 'mla-inserted-in' => 'mla-inserted-in', 'mla-gallery-in' => 'mla-gallery-in', 'mla-mla-gallery-in' => 'mla-mla-gallery-in'));
         if (isset($active_boxes['mla-parent-info'])) {
             add_meta_box('mla-parent-info', __('Parent Info', 'media-library-assistant'), 'MLAEdit::mla_parent_info_handler', 'attachment', 'normal', 'core');
         }
         if (isset($active_boxes['mla-menu-order'])) {
             add_meta_box('mla-menu-order', __('Menu Order', 'media-library-assistant'), 'MLAEdit::mla_menu_order_handler', 'attachment', 'normal', 'core');
         }
         if (isset($active_boxes['mla-image-metadata'])) {
             $image_metadata = get_metadata('post', $post->ID, '_wp_attachment_metadata', true);
             if (!empty($image_metadata)) {
                 add_meta_box('mla-image-metadata', __('Attachment Metadata', 'media-library-assistant'), 'MLAEdit::mla_image_metadata_handler', 'attachment', 'normal', 'core');
             }
         }
         if (isset($active_boxes['mla-featured-in']) && MLACore::$process_featured_in) {
             add_meta_box('mla-featured-in', __('Featured in', 'media-library-assistant'), 'MLAEdit::mla_featured_in_handler', 'attachment', 'normal', 'core');
         }
         if (isset($active_boxes['mla-inserted-in']) && MLACore::$process_inserted_in) {
             add_meta_box('mla-inserted-in', __('Inserted in', 'media-library-assistant'), 'MLAEdit::mla_inserted_in_handler', 'attachment', 'normal', 'core');
         }
         if (isset($active_boxes['mla-gallery-in']) && MLACore::$process_gallery_in) {
             add_meta_box('mla-gallery-in', __('Gallery in', 'media-library-assistant'), 'MLAEdit::mla_gallery_in_handler', 'attachment', 'normal', 'core');
         }
         if (isset($active_boxes['mla-mla-gallery-in']) && MLACore::$process_mla_gallery_in) {
             add_meta_box('mla-mla-gallery-in', __('MLA Gallery in', 'media-library-assistant'), 'MLAEdit::mla_mla_gallery_in_handler', 'attachment', 'normal', 'core');
         }
     }
 }
 /**
  * Ajax handler for Media Manager "update compat-attachment-fields" queries 
  *
  * Updates one (or more) supported taxonomy and returns updated checkbox or tag/term lists
  *
  * @since 2.20
  *
  * @return	void	passes array of results to wp_send_json_success() for JSON encoding and transmission
  */
 public static function mla_update_compat_fields_action()
 {
     global $post;
     if (empty($_REQUEST['id']) || !($post_id = absint($_REQUEST['id']))) {
         wp_send_json_error();
     }
     if (empty($post)) {
         $post = get_post($post_id);
         // for filters and wp_popular_terms_checklist
     }
     do_action('mla_media_modal_begin_update_compat_fields', $post);
     $taxonomies = array();
     $results = array();
     foreach (get_taxonomies(array('show_ui' => true), 'objects') as $key => $value) {
         if (isset($_REQUEST[$key]) && MLACore::mla_taxonomy_support($key)) {
             $taxonomies[$key] = $value;
             if (!($use_checklist = $value->hierarchical)) {
                 $use_checklist = MLACore::mla_taxonomy_support($key, 'flat-checklist');
             }
             if ($value->hierarchical) {
                 $terms = array_map('absint', preg_split('/,+/', $_REQUEST[$key]));
             } else {
                 $terms = array_map('trim', preg_split('/,+/', $_REQUEST[$key]));
             }
             $terms = apply_filters('mla_media_modal_update_compat_fields_terms', $terms, $key, $value, $post_id);
             if (is_array($terms)) {
                 wp_set_object_terms($post_id, $terms, $key, false);
                 delete_transient(MLA_OPTION_PREFIX . 't_term_counts_' . $key);
             }
             if ($use_checklist) {
                 ob_start();
                 $popular_ids = wp_popular_terms_checklist($key);
                 $results[$key]["mla-{$key}-checklist-pop"] = ob_get_clean();
                 ob_start();
                 if ($value->hierarchical) {
                     wp_terms_checklist($post_id, array('taxonomy' => $key, 'popular_cats' => $popular_ids));
                 } else {
                     $checklist_walker = new MLA_Checklist_Walker();
                     wp_terms_checklist($post_id, array('taxonomy' => $key, 'popular_cats' => $popular_ids, 'walker' => $checklist_walker));
                 }
                 $results[$key]["mla-{$key}-checklist"] = ob_get_clean();
             } else {
                 $terms = get_object_term_cache($post_id, $key);
                 if (false === $terms) {
                     $terms = wp_get_object_terms($post_id, $key);
                     wp_cache_add($post_id, $terms, $key . '_relationships');
                 }
                 if (is_wp_error($terms) || empty($terms)) {
                     $terms = array();
                 }
                 $list = array();
                 $object_terms = array();
                 foreach ($terms as $term) {
                     $list[] = $term->name;
                     $object_terms[$term->term_id] = $term->name;
                 }
                 // foreach $term
                 sort($list);
                 $hidden_list = join(',', $list);
                 $results[$key]["object-terms"] = $object_terms;
                 $results[$key]["mla-attachments-{$post_id}-{$key}"] = "\t\t<input name='attachments[{$post_id}][{$key}]' class='the-tags' id='mla-attachments-{$post_id}-{$key}' type='hidden' value='{$hidden_list}'>\n";
                 $results[$key]["mla-tags-{$post_id}-{$key}"] = "\t\t<input name='mla_tags[{$post_id}][{$key}]' class='server-tags' id='mla-tags-{$post_id}-{$key}' type='hidden' value='{$hidden_list}'>\n";
             }
         }
         // set and supported
     }
     // foreach taxonomy
     wp_send_json_success(apply_filters('mla_media_modal_end_update_compat_fields', $results, $taxonomies, $post));
 }
 /**
  * Build the hidden form for the "Search Terms" popup modal window
  *
  * @since 1.90
  *
  * @return	string	HTML <form> markup for hidden form
  */
 public static function mla_terms_search_form()
 {
     $page_template_array = MLACore::mla_load_template('admin-terms-search-form.tpl');
     if (!is_array($page_template_array)) {
         /* 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'), 'MLA::_build_terms_search_form', var_export($page_template_array, true)), 0);
         return '';
     }
     $taxonomies = array();
     foreach (get_object_taxonomies('attachment', 'objects') as $taxonomy) {
         if (MLACore::mla_taxonomy_support($taxonomy->name, 'support')) {
             $taxonomies[] = $taxonomy;
         }
     }
     if (empty($taxonomies)) {
         $page_values = array('Search Terms' => __('Search Terms', 'media-library-assistant'), 'message' => __('There are no taxonomies to search', 'media-library-assistant'));
         $terms_search_tpl = MLAData::mla_parse_template($page_template_array['mla-terms-search-empty-div'], $page_values);
     } else {
         $taxonomy_list = '';
         foreach ($taxonomies as $taxonomy) {
             $page_values = array('taxonomy_checked' => MLACore::mla_taxonomy_support($taxonomy->name, 'term-search') ? 'checked="checked"' : '', 'taxonomy_slug' => $taxonomy->name, 'taxonomy_label' => esc_attr($taxonomy->label));
             $taxonomy_list .= MLAData::mla_parse_template($page_template_array['mla-terms-search-taxonomy'], $page_values);
         }
         $page_values = array('Search Terms' => __('Search Terms', 'media-library-assistant'), 'Search' => __('Search', 'media-library-assistant'), 'phrases_and_checked' => 'checked="checked"', 'All phrases' => __('All phrases', 'media-library-assistant'), 'phrases_or_checked' => '', 'Any phrase' => __('Any phrase', 'media-library-assistant'), 'terms_and_checked' => '', 'All terms' => __('All terms', 'media-library-assistant'), 'terms_or_checked' => 'checked="checked"', 'Any term' => __('Any term', 'media-library-assistant'), 'exact_checked' => '', 'Exact' => __('Exact', 'media-library-assistant'), 'mla_terms_search_taxonomies' => $taxonomy_list);
         $terms_search_tpl = MLAData::mla_parse_template($page_template_array['mla-terms-search-div'], $page_values);
     }
     $page_values = array('mla_terms_search_url' => esc_url(add_query_arg(array_merge(MLA_List_Table::mla_submenu_arguments(false), array('page' => MLACore::ADMIN_PAGE_SLUG)), admin_url('upload.php'))), 'mla_terms_search_action' => MLA::MLA_ADMIN_TERMS_SEARCH, 'wpnonce' => wp_nonce_field(MLACore::MLA_ADMIN_NONCE_ACTION, MLACore::MLA_ADMIN_NONCE_NAME, true, false), 'mla_terms_search_div' => $terms_search_tpl);
     $terms_search_tpl = MLAData::mla_parse_template($page_template_array['mla-terms-search-form'], $page_values);
     return $terms_search_tpl;
 }
Ejemplo n.º 6
0
 /**
  * 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;
 }
 /**
  * Manages the creation of new taxonomy terms from metadata values
  *
  * @since 2.20
  *
  * @param	mixed 	string or array value returned by the rule
  * @param	string 	field name or taxonomy name
  * @param	integer post ID to be evaluated
  * @param	string 	category/scope to evaluate against: iptc_exif_standard_mapping, iptc_exif_taxonomy_mapping or iptc_exif_custom_mapping
  * @param	array 	attachment_metadata, default NULL
  *
  * @return	array	updated rule EXIF/Template value
  */
 public static function mla_mapping_new_text($new_text, $setting_key, $post_id, $category, $attachment_metadata)
 {
     global $polylang;
     static $replicate = NULL, $current_language, $taxonomies, $other_languages, $parent_term;
     if ('iptc_exif_taxonomy_mapping' !== $category) {
         return $new_text;
     }
     if (is_null($replicate)) {
         $replicate = 'checked' == MLACore::mla_get_option('term_mapping_replication', false, false, MLA_Polylang::$mla_language_option_definitions);
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $replicate = ' . var_export( $replicate, true ), 0 );
         if ($polylang->curlang) {
             $current_language = $polylang->curlang->slug;
         } else {
             $current_language = pll_default_language();
         }
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $current_language = ' . var_export( $current_language, true ), 0 );
         $taxonomies = array();
         foreach ($polylang->model->get_translated_taxonomies() as $taxonomy) {
             if (MLACore::mla_taxonomy_support($taxonomy, 'support')) {
                 $taxonomies[$taxonomy] = $taxonomy;
             }
         }
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $category = ' . var_export( $category, true ), 0 );
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $taxonomies = ' . var_export( $taxonomies, true ), 0 );
         $other_languages = array();
         foreach ($polylang->model->get_languages_list() as $item_language) {
             if ($current_language !== $item_language->slug) {
                 $other_languages[$item_language->slug] = $item_language;
             }
         }
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $other_languages = ' . var_export( $other_languages, true ), 0 );
     }
     if (!empty($new_text) && in_array($setting_key, $taxonomies)) {
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text mapping rule = ' . var_export( self::$current_mapping_rule, true ), 0 );
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $new_text = ' . var_export( $new_text, true ), 0 );
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $setting_key = ' . var_export( $setting_key, true ), 0 );
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $post_id = ' . var_export( $post_id, true ), 0 );
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $attachment_metadata = ' . var_export( $attachment_metadata, true ), 0 );
         $language_details = $polylang->model->get_post_language($post_id);
         $item_language = $language_details->slug;
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $language_details = ' . var_export( $language_details, true ), 0 );
         /*
          * Find the parent term and its translations
          */
         if (isset(self::$current_mapping_rule['parent'])) {
             if ($parent_term = absint(self::$current_mapping_rule['parent'])) {
                 $parent_term = self::_get_relevant_term('id', $parent_term, $setting_key);
             }
         } else {
             $parent_term = 0;
         }
         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent_term = ' . var_export( $parent_term, true ), 0 );
         $new_terms = array();
         foreach ($new_text as $new_name) {
             $relevant_term = self::_get_relevant_term('name', $new_name, $setting_key);
             //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $relevant_term = ' . var_export( $relevant_term, true ), 0 );
             if ($relevant_term) {
                 if (isset($relevant_term['translations'][$item_language])) {
                     $new_terms[] = absint($relevant_term['translations'][$item_language]->element_id);
                 }
             } else {
                 /*
                  * Always create the new term in the current language
                  */
                 if ($parent_term && isset($parent_term['translations'][$current_language])) {
                     $parent = $parent_term['translations'][$current_language]->element_id;
                 } else {
                     $parent = 0;
                 }
                 //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent = ' . var_export( $parent, true ), 0 );
                 $res = wp_insert_term($new_name, $setting_key, array('parent' => $parent));
                 //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $res = ' . var_export( $res, true ), 0 );
                 if (!is_wp_error($res) && isset($res['term_id'])) {
                     $polylang->model->set_term_language($res['term_id'], $current_language);
                 }
                 /*
                  * Add translations in the other languages?
                  */
                 if ($replicate) {
                     $source_term = $res['term_id'];
                     $translations = array();
                     foreach ($other_languages as $language => $language_details) {
                         if ($parent_term && isset($parent_term['translations'][$language])) {
                             $parent = $parent_term['translations'][$language]->element_id;
                         } else {
                             $parent = 0;
                         }
                         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $parent = ' . var_export( $parent, true ), 0 );
                         // save_language() does a check_admin_referer() security test
                         $_REQUEST['_pll_nonce'] = wp_create_nonce('pll_language');
                         $_POST['term_lang_choice'] = $language;
                         $_POST['action'] = 'mla';
                         $res = wp_insert_term($new_name, $setting_key, array('parent' => $parent));
                         //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $res = ' . var_export( $res, true ), 0 );
                         if (!is_wp_error($res) && isset($res['term_id'])) {
                             $polylang->model->set_term_language($res['term_id'], $language);
                             $translations[$language] = $res['term_id'];
                         }
                     }
                     unset($_POST['term_lang_choice']);
                     unset($_POST['action']);
                     if (!empty($translations)) {
                         $polylang->model->save_translations('term', $source_term, $translations);
                     }
                 }
                 // replicate
                 /*
                  * Reload the term with all of its new translations
                  */
                 $relevant_term = self::_get_relevant_term('name', $new_name, $setting_key);
                 //error_log( __LINE__ . ' MLA_Polylang::mla_mapping_new_text $relevant_term = ' . var_export( $relevant_term, true ), 0 );
                 if (isset($relevant_term['translations'][$item_language])) {
                     $new_terms[] = absint($relevant_term['translations'][$item_language]->element_id);
                 }
             }
             // new term
         }
         // foreach new_name
         MLACore::mla_debug_add(__LINE__ . " MLA_Polylang::mla_mapping_new_text( {$setting_key}, {$post_id} ) \$new_terms = " . var_export($new_terms, true), MLACore::MLA_DEBUG_CATEGORY_AJAX);
         return $new_terms;
     }
     // translated taxonomy
     return $new_text;
 }
Ejemplo n.º 8
0
 /**
  * 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
 }
Ejemplo n.º 9
0
    /**
     * Display taxonomy "checklist" form fields
     *
     * Adapted from /wp-admin/includes/ajax-actions.php function _wp_ajax_add_hierarchical_term().
     * Includes the "? Search" area to filter the term checklist by entering part
     * or all of a word/phrase in the term label.
     * Output to the Media/Edit Media screen and to the Media Manager Modal Window.
     *
     * @since 1.71
     *
     * @param object The current post
     * @param array The meta box parameters
     *
     * @return void Echoes HTML for the form fields
     */
    public static function mla_checklist_meta_box($target_post, $box)
    {
        global $post;
        $defaults = array('taxonomy' => 'category', 'in_modal' => false);
        $post_id = $target_post->ID;
        if (!isset($box['args']) || !is_array($box['args'])) {
            $args = array();
        } else {
            $args = $box['args'];
        }
        extract(wp_parse_args($args, $defaults), EXTR_SKIP);
        $tax = get_taxonomy($taxonomy);
        $name = $taxonomy == 'category' ? 'post_category' : 'tax_input[' . $taxonomy . ']';
        /*
         * Id and Name attributes in the popup Modal Window must not conflict with
         * the underlying Edit Post/Page window, so we prefix with "mla-"/"mla_".
         */
        if ($in_modal) {
            if (empty($post)) {
                $post = $target_post;
                // for wp_popular_terms_checklist
            }
            $div_taxonomy_id = "mla-taxonomy-{$taxonomy}";
            $tabs_ul_id = "mla-{$taxonomy}-tabs";
            $tab_all_id = "mla-{$taxonomy}-all";
            $tab_all_ul_id = "mla-{$taxonomy}-checklist";
            $tab_pop_id = "mla-{$taxonomy}-pop";
            $tab_pop_ul_id = "mla-{$taxonomy}-checklist-pop";
            $input_terms_name = "mla_attachments[{$post_id}][{$name}][]";
            $input_terms_id = "mla-{$name}-id";
            $div_adder_id = "mla-{$taxonomy}-adder";
            $div_adder_class = "mla-hidden-children";
            $link_adder_id = "mla-{$taxonomy}-add-toggle";
            $link_adder_p_id = "mla-{$taxonomy}-add";
            $div_search_id = "mla-{$taxonomy}-searcher";
            $div_search_class = "mla-hidden-children";
            $link_search_id = "mla-{$taxonomy}-search-toggle";
            $link_search_p_id = "mla-{$taxonomy}-search";
            $input_new_name = "new{$taxonomy}";
            $input_new_id = "mla-new-{$taxonomy}";
            $input_new_parent_name = "new{$taxonomy}_parent";
            $input_new_submit_id = "mla-{$taxonomy}-add-submit";
            $span_new_ajax_id = "mla-{$taxonomy}-ajax-response";
            $input_search_name = "search-{$taxonomy}";
            $input_search_id = "mla-search-{$taxonomy}";
            $span_search_ajax_id = "mla-{$taxonomy}-search-ajax-response";
        } else {
            $div_taxonomy_id = "taxonomy-{$taxonomy}";
            $tabs_ul_id = "{$taxonomy}-tabs";
            $tab_all_id = "{$taxonomy}-all";
            $tab_all_ul_id = "{$taxonomy}checklist";
            $tab_pop_id = "{$taxonomy}-pop";
            $tab_pop_ul_id = "{$taxonomy}checklist-pop";
            $input_terms_name = "{$name}[]";
            $input_terms_id = "{$name}-id";
            $div_adder_id = "{$taxonomy}-adder";
            $div_adder_class = "wp-hidden-children";
            $link_adder_id = "{$taxonomy}-add-toggle";
            $link_adder_p_id = "{$taxonomy}-add";
            $div_search_id = "{$taxonomy}-searcher";
            $div_search_class = "wp-hidden-children";
            $link_search_id = "{$taxonomy}-search-toggle";
            $link_search_p_id = "{$taxonomy}-search";
            $input_new_name = "new{$taxonomy}";
            $input_new_id = "new{$taxonomy}";
            $input_new_parent_name = "new{$taxonomy}_parent";
            $input_new_submit_id = "{$taxonomy}-add-submit";
            $span_new_ajax_id = "{$taxonomy}-ajax-response";
            $input_search_name = "search-{$taxonomy}";
            $input_search_id = "search-{$taxonomy}";
            $span_search_ajax_id = "{$taxonomy}-search-ajax-response";
        }
        ?>
		<div id="<?php 
        echo $div_taxonomy_id;
        ?>
" class="categorydiv">
			<ul id="<?php 
        echo $tabs_ul_id;
        ?>
" class="category-tabs">
				<li class="tabs"><a href="#<?php 
        echo $tab_all_id;
        ?>
"><?php 
        echo $tax->labels->all_items;
        ?>
</a></li>
				<li class="hide-if-no-js"><a href="#<?php 
        echo $tab_pop_id;
        ?>
"><?php 
        _e('Most Used');
        ?>
</a></li>
			</ul>

			<div id="<?php 
        echo $tab_pop_id;
        ?>
" class="tabs-panel" style="display: none;">
				<ul id="<?php 
        echo $tab_pop_ul_id;
        ?>
" class="categorychecklist form-no-clear" >
					<?php 
        $popular_ids = wp_popular_terms_checklist($taxonomy);
        ?>
				</ul>
			</div>

			<div id="<?php 
        echo $tab_all_id;
        ?>
" class="tabs-panel">
				<?php 
        // Allows for an empty term set to be sent. 0 is an invalid Term ID and will be ignored by empty() checks.
        echo "<input type='hidden' name='{$input_terms_name}' id='{$input_terms_id}' value='0' />";
        ?>
				<ul id="<?php 
        echo $tab_all_ul_id;
        ?>
" data-wp-lists="list:<?php 
        echo $taxonomy;
        ?>
" class="categorychecklist form-no-clear">
					<?php 
        if ($tax->hierarchical) {
            ?>
					<?php 
            wp_terms_checklist($post->ID, array('taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => MLACore::mla_taxonomy_support($taxonomy, 'checked-on-top')));
            ?>
					<?php 
        } else {
            ?>
                    <?php 
            $checklist_walker = new MLA_Checklist_Walker();
            ?>
					<?php 
            wp_terms_checklist($post->ID, array('taxonomy' => $taxonomy, 'popular_cats' => $popular_ids, 'checked_ontop' => MLACore::mla_taxonomy_support($taxonomy, 'checked-on-top'), 'walker' => $checklist_walker));
            ?>
					<?php 
        }
        ?>
				</ul>
			</div>
		<?php 
        if (current_user_can($tax->cap->edit_terms)) {
            ?>
				<div id="<?php 
            echo $div_adder_id;
            ?>
" class="<?php 
            echo $div_adder_class;
            ?>
">
					<h4>
						<a id="<?php 
            echo $link_adder_id;
            ?>
" href="#<?php 
            echo $link_adder_p_id;
            ?>
" class="hide-if-no-js">
							<?php 
            /* translators: %s: add new taxonomy label */
            printf(__('+ %s', 'media-library-assistant'), $tax->labels->add_new_item);
            ?>
						</a>
						&nbsp;&nbsp;
						<a id="<?php 
            echo $link_search_id;
            ?>
" href="#<?php 
            echo $link_search_p_id;
            ?>
" class="hide-if-no-js">
							<?php 
            echo '?&nbsp;' . __('Search', 'media-library-assistant');
            ?>
						</a>
					</h4>
					<p id="<?php 
            echo $link_adder_p_id;
            ?>
" class="category-add wp-hidden-child">
						<label class="screen-reader-text" for="<?php 
            echo $input_new_name;
            ?>
"><?php 
            echo $tax->labels->add_new_item;
            ?>
</label>
						<input type="text" name="<?php 
            echo $input_new_name;
            ?>
" id="<?php 
            echo $input_new_id;
            ?>
" class="form-required form-input-tip" value="<?php 
            echo esc_attr($tax->labels->new_item_name);
            ?>
" aria-required="true"/>

						<?php 
            if ($tax->hierarchical) {
                ?>
						<label class="screen-reader-text" for="<?php 
                echo $input_new_parent_name;
                ?>
">
							<?php 
                echo $tax->labels->parent_item_colon;
                ?>
						</label>
						<?php 
                wp_dropdown_categories(array('taxonomy' => $taxonomy, 'hide_empty' => 0, 'name' => $input_new_parent_name, 'orderby' => 'name', 'hierarchical' => 1, 'show_option_none' => '&mdash; ' . $tax->labels->parent_item . ' &mdash;'));
                ?>
						<?php 
            } else {
                echo "<input type='hidden' name='{$input_new_parent_name}' id='{$input_new_parent_name}' value='-1' />";
            }
            ?>
						<input type="button" id="<?php 
            echo $input_new_submit_id;
            ?>
" data-wp-lists="add:<?php 
            echo $tab_all_ul_id;
            ?>
:<?php 
            echo $link_adder_p_id;
            ?>
" class="button category-add-submit mla-taxonomy-add-submit" value="<?php 
            echo esc_attr($tax->labels->add_new_item);
            ?>
" />
						<?php 
            wp_nonce_field('add-' . $taxonomy, '_ajax_nonce-add-' . $taxonomy, false);
            ?>
						<span id="<?php 
            echo $span_new_ajax_id;
            ?>
"></span>
					</p>
				</div>
				<div id="<?php 
            echo $div_search_id;
            ?>
" class="<?php 
            echo $div_search_class;
            ?>
">
					<p id="<?php 
            echo $link_search_p_id;
            ?>
" class="category-add wp-hidden-child">
						<label class="screen-reader-text" for="<?php 
            echo $input_search_name;
            ?>
"><?php 
            echo $tax->labels->search_items;
            ?>
</label>
						<input type="text" name="<?php 
            echo $input_search_name;
            ?>
" id="<?php 
            echo $input_search_id;
            ?>
" class="form-required form-input-tip" value="<?php 
            echo esc_attr($tax->labels->search_items);
            ?>
" aria-required="true"/>
						<?php 
            wp_nonce_field('search-' . $taxonomy, '_ajax_nonce-search-' . $taxonomy, false);
            ?>
						<span id="<?php 
            echo $span_search_ajax_id;
            ?>
"></span>
					</p>
				</div>
			<?php 
        }
        ?>
		</div>
		<?php 
    }
Ejemplo n.º 10
0
 /**
  * Build the hidden row templates for inline editing (quick and bulk edit)
  *
  * inspired by inline_edit() in wp-admin\includes\class-wp-posts-list-table.php.
  *
  * @since 0.20
  *
  * @param	object	MLA List Table object
  *
  * @return	string	HTML <form> markup for hidden rows
  */
 private static function _build_inline_edit_form($MLAListTable)
 {
     $taxonomies = get_object_taxonomies('attachment', 'objects');
     $hierarchical_taxonomies = array();
     $flat_taxonomies = array();
     foreach ($taxonomies as $tax_name => $tax_object) {
         if ($tax_object->hierarchical && $tax_object->show_ui && MLACore::mla_taxonomy_support($tax_name, 'quick-edit')) {
             $hierarchical_taxonomies[$tax_name] = $tax_object;
         } elseif ($tax_object->show_ui && MLACore::mla_taxonomy_support($tax_name, 'quick-edit')) {
             $flat_taxonomies[$tax_name] = $tax_object;
         }
     }
     $page_template_array = MLAData::mla_load_template('admin-inline-edit-form.tpl');
     if (!is_array($page_template_array)) {
         /* 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'), 'MLA::_build_inline_edit_form', var_export($page_template_array, true)), 0);
         return '';
     }
     if ($authors = self::mla_authors_dropdown()) {
         $authors_dropdown = '              <label class="inline-edit-author">' . "\n";
         $authors_dropdown .= '                <span class="title">' . __('Author', 'media-library-assistant') . '</span>' . "\n";
         $authors_dropdown .= $authors . "\n";
         $authors_dropdown .= '              </label>' . "\n";
     } else {
         $authors_dropdown = '';
     }
     $custom_fields = '';
     foreach (MLACore::mla_custom_field_support('quick_edit') as $slug => $details) {
         $page_values = array('slug' => $slug, 'label' => esc_attr($details['name']));
         $custom_fields .= MLAData::mla_parse_template($page_template_array['custom_field'], $page_values);
     }
     /*
      * The middle column contains the hierarchical taxonomies, e.g., Attachment Category
      */
     $quick_middle_column = '';
     $bulk_middle_column = '';
     if (count($hierarchical_taxonomies)) {
         $quick_category_blocks = '';
         $bulk_category_blocks = '';
         foreach ($hierarchical_taxonomies as $tax_name => $tax_object) {
             if (current_user_can($tax_object->cap->assign_terms)) {
                 ob_start();
                 wp_terms_checklist(NULL, array('taxonomy' => $tax_name));
                 $tax_checklist = ob_get_contents();
                 ob_end_clean();
                 $page_values = array('tax_html' => esc_html($tax_object->labels->name), 'more' => __('more', 'media-library-assistant'), 'less' => __('less', 'media-library-assistant'), 'tax_attr' => esc_attr($tax_name), 'tax_checklist' => $tax_checklist, 'Add' => __('Add', 'media-library-assistant'), 'Remove' => __('Remove', 'media-library-assistant'), 'Replace' => __('Replace', 'media-library-assistant'));
                 $category_block = MLAData::mla_parse_template($page_template_array['category_block'], $page_values);
                 $taxonomy_options = MLAData::mla_parse_template($page_template_array['taxonomy_options'], $page_values);
                 $quick_category_blocks .= $category_block;
                 $bulk_category_blocks .= $category_block . $taxonomy_options;
             }
             // current_user_can
         }
         // foreach $hierarchical_taxonomies
         $page_values = array('category_blocks' => $quick_category_blocks);
         $quick_middle_column = MLAData::mla_parse_template($page_template_array['category_fieldset'], $page_values);
         $page_values = array('category_blocks' => $bulk_category_blocks);
         $bulk_middle_column = MLAData::mla_parse_template($page_template_array['category_fieldset'], $page_values);
     }
     // count( $hierarchical_taxonomies )
     /*
      * The right-hand column contains the flat taxonomies, e.g., Attachment Tag
      */
     $quick_right_column = '';
     $bulk_right_column = '';
     if (count($flat_taxonomies)) {
         $quick_tag_blocks = '';
         $bulk_tag_blocks = '';
         foreach ($flat_taxonomies as $tax_name => $tax_object) {
             if (current_user_can($tax_object->cap->assign_terms)) {
                 $page_values = array('tax_html' => esc_html($tax_object->labels->name), 'tax_attr' => esc_attr($tax_name), 'Add' => __('Add', 'media-library-assistant'), 'Remove' => __('Remove', 'media-library-assistant'), 'Replace' => __('Replace', 'media-library-assistant'));
                 $tag_block = MLAData::mla_parse_template($page_template_array['tag_block'], $page_values);
                 $taxonomy_options = MLAData::mla_parse_template($page_template_array['taxonomy_options'], $page_values);
                 $quick_tag_blocks .= $tag_block;
                 $bulk_tag_blocks .= $tag_block . $taxonomy_options;
             }
             // current_user_can
         }
         // foreach $flat_taxonomies
         $page_values = array('tag_blocks' => $quick_tag_blocks);
         $quick_right_column = MLAData::mla_parse_template($page_template_array['tag_fieldset'], $page_values);
         $page_values = array('tag_blocks' => $bulk_tag_blocks);
         $bulk_right_column = MLAData::mla_parse_template($page_template_array['tag_fieldset'], $page_values);
     }
     // count( $flat_taxonomies )
     if ($authors = self::mla_authors_dropdown(-1)) {
         $bulk_authors_dropdown = '              <label class="inline-edit-author alignright">' . "\n";
         $bulk_authors_dropdown .= '                <span class="title">' . __('Author', 'media-library-assistant') . '</span>' . "\n";
         $bulk_authors_dropdown .= $authors . "\n";
         $bulk_authors_dropdown .= '              </label>' . "\n";
     } else {
         $bulk_authors_dropdown = '';
     }
     $bulk_custom_fields = '';
     foreach (MLACore::mla_custom_field_support('bulk_edit') as $slug => $details) {
         $page_values = array('slug' => $slug, 'label' => esc_attr($details['name']));
         $bulk_custom_fields .= MLAData::mla_parse_template($page_template_array['custom_field'], $page_values);
     }
     $set_parent_form = MLA::mla_set_parent_form();
     $page_values = array('colspan' => $MLAListTable->get_column_count(), 'Quick Edit' => __('Quick Edit', 'media-library-assistant'), 'Title' => __('Title', 'media-library-assistant'), 'Name/Slug' => __('Name/Slug', 'media-library-assistant'), 'Caption' => __('Caption', 'media-library-assistant'), 'Description' => __('Description', 'media-library-assistant'), 'ALT Text' => __('ALT Text', 'media-library-assistant'), 'Parent ID' => __('Parent ID', 'media-library-assistant'), 'Select' => __('Select', 'media-library-assistant'), 'Menu Order' => __('Menu Order', 'media-library-assistant'), 'authors' => $authors_dropdown, 'custom_fields' => $custom_fields, 'quick_middle_column' => $quick_middle_column, 'quick_right_column' => $quick_right_column, 'Cancel' => __('Cancel', 'media-library-assistant'), 'Reset' => __('Reset', 'media-library-assistant'), 'Update' => __('Update', 'media-library-assistant'), 'Bulk Edit' => __('Bulk Edit', 'media-library-assistant'), 'bulk_middle_column' => $bulk_middle_column, 'bulk_right_column' => $bulk_right_column, 'bulk_authors' => $bulk_authors_dropdown, 'Comments' => __('Comments', 'media-library-assistant'), 'Pings' => __('Pings', 'media-library-assistant'), 'No Change' => __('No Change', 'media-library-assistant'), 'Allow' => __('Allow', 'media-library-assistant'), 'Do not allow' => __('Do not allow', 'media-library-assistant'), 'bulk_custom_fields' => $bulk_custom_fields, 'Map IPTC/EXIF metadata' => __('Map IPTC/EXIF metadata', 'media-library-assistant'), 'Map Custom Field metadata' => __('Map Custom Field metadata', 'media-library-assistant'), 'Bulk Waiting' => __('Waiting', 'media-library-assistant'), 'Bulk Running' => __('In-process', 'media-library-assistant'), 'Bulk Complete' => __('Complete', 'media-library-assistant'), 'Refresh' => __('Refresh', 'media-library-assistant'), 'set_parent_form' => $set_parent_form);
     $page_values = apply_filters('mla_list_table_inline_values', $page_values);
     $page_template = apply_filters('mla_list_table_inline_template', $page_template_array['page']);
     $parse_value = MLAData::mla_parse_template($page_template, $page_values);
     return apply_filters('mla_list_table_inline_parse', $parse_value, $page_template, $page_values);
 }
 /**
  * Add hidden fields with the data for use in the inline editor
  *
  * @since 0.20
  * 
  * @param	object	A singular attachment (post) object
  *
  * @return	string	HTML <div> with row data
  */
 protected function _build_inline_data($item)
 {
     $inline_data = "\r\n" . '<div class="hidden" id="inline_' . $item->ID . "\">\r\n";
     $inline_data .= '	<div class="item_thumbnail">' . self::_build_item_thumbnail($item) . "</div>\r\n";
     $inline_data .= '	<div class="post_title">' . esc_attr($item->post_title) . "</div>\r\n";
     $inline_data .= '	<div class="post_name">' . esc_attr($item->post_name) . "</div>\r\n";
     $inline_data .= '	<div class="post_excerpt">' . esc_attr($item->post_excerpt) . "</div>\r\n";
     $inline_data .= '	<div class="post_content">' . esc_attr($item->post_content) . "</div>\r\n";
     if (!empty($item->mla_wp_attachment_metadata)) {
         $inline_data .= '	<div class="image_alt">';
         if (isset($item->mla_wp_attachment_image_alt)) {
             if (is_array($item->mla_wp_attachment_image_alt)) {
                 $inline_data .= esc_attr($item->mla_wp_attachment_image_alt[0]);
             } else {
                 $inline_data .= esc_attr($item->mla_wp_attachment_image_alt);
             }
         }
         $inline_data .= "</div>\r\n";
     }
     $inline_data .= '	<div class="post_parent">' . $item->post_parent . "</div>\r\n";
     if ($item->post_parent) {
         if (isset($item->parent_title)) {
             $parent_title = $item->parent_title;
         } else {
             $parent_title = __('(no title)', 'media-library-assistant');
         }
     } else {
         $parent_title = '';
     }
     $inline_data .= '	<div class="post_parent_title">' . $parent_title . "</div>\r\n";
     $inline_data .= '	<div class="menu_order">' . $item->menu_order . "</div>\r\n";
     $inline_data .= '	<div class="post_author">' . $item->post_author . "</div>\r\n";
     $custom_fields = MLACore::mla_custom_field_support('quick_edit');
     $custom_fields = array_merge($custom_fields, MLACore::mla_custom_field_support('bulk_edit'));
     foreach ($custom_fields as $slug => $details) {
         $value = get_metadata('post', $item->ID, $details['name'], true);
         if (is_array($value)) {
             if ('array' == $details['option']) {
                 $value = implode(',', $value);
             } else {
                 // '(Array)' indicates an existing array value in the field, which we preserve
                 $value = '(Array)';
             }
         }
         $inline_data .= '	<div class="' . $slug . '">' . esc_html($value) . "</div>\r\n";
     }
     $taxonomies = get_object_taxonomies('attachment', 'objects');
     foreach ($taxonomies as $tax_name => $tax_object) {
         if ($tax_object->show_ui && MLACore::mla_taxonomy_support($tax_name, 'quick-edit')) {
             $terms = get_object_term_cache($item->ID, $tax_name);
             if (false === $terms) {
                 $terms = wp_get_object_terms($item->ID, $tax_name);
                 wp_cache_add($item->ID, $terms, $tax_name . '_relationships');
             }
             if (is_wp_error($terms) || empty($terms)) {
                 $terms = array();
             }
             $ids = array();
             if ($tax_object->hierarchical) {
                 foreach ($terms as $term) {
                     $ids[] = $term->term_id;
                 }
                 $inline_data .= '	<div class="mla_category" id="' . $tax_name . '_' . $item->ID . '">' . implode(',', $ids) . "</div>\r\n";
             } else {
                 foreach ($terms as $term) {
                     $ids[] = $term->name;
                 }
                 $inline_data .= '	<div class="mla_tags" id="' . $tax_name . '_' . $item->ID . '">' . esc_attr(implode(', ', $ids)) . "</div>\r\n";
             }
         }
     }
     $inline_data = apply_filters('mla_list_table_build_inline_data', $inline_data, $item);
     $inline_data .= "</div>\r\n";
     return $inline_data;
 }