Ejemplo n.º 1
0
/**
 * Creates form elements.
 *
 * Core function. Works and stable. Do not move or change.
 * If required, add hooks only.
 *
 * @param type $post
 * @param type $fields
 * @return type
 */
function wpcf_admin_post_process_fields($post = false, $fields = array(), $use_cache = true, $add_to_editor = true, $context = 'group')
{
    global $wpcf;
    $wpcf->field->use_cache = $use_cache;
    $wpcf->field->add_to_editor = $add_to_editor;
    $wpcf->repeater->use_cache = $use_cache;
    $wpcf->repeater->add_to_editor = $add_to_editor;
    // Get cached
    static $cache = array();
    $cache_key = !empty($post->ID) ? $post->ID . md5(serialize($fields)) : false;
    if ($use_cache && $cache_key && isset($cache[$cache_key])) {
        return $cache[$cache_key];
    }
    $fields_processed = array();
    // Get invalid fields (if submitted)
    $invalid_fields = array();
    if (!empty($post->ID)) {
        $invalid_fields = get_post_meta($post->ID, 'wpcf-invalid-fields', true);
        delete_post_meta($post->ID, 'wpcf-invalid-fields');
        /*
         *
         * Add it to global $wpcf
         * From now on take it there.
         */
        $wpcf->field->invalid_fields = $invalid_fields;
    }
    // TODO WPML Get WPML original fields
    $original_cf = array();
    if (function_exists('wpml_get_copied_fields_for_post_edit') && !wpcf_wpml_post_is_original($post)) {
        $__fields_slugs = array();
        foreach ($fields as $_f) {
            $__fields_slugs[] = $_f['meta_key'];
        }
        $original_cf = wpml_get_copied_fields_for_post_edit($__fields_slugs);
    }
    foreach ($fields as $field) {
        // Repetitive fields
        if (wpcf_admin_is_repetitive($field) && $context != 'post_relationship') {
            // First check if repetitive fields are copied using WPML
            /*
             * TODO All WPML specific code needs moving to
             * /embedded/includes/wpml.php
             *
             * @since Types 1.2
             */
            // TODO WPML move
            if (!empty($original_cf['fields']) && in_array(wpcf_types_get_meta_prefix($field) . $field['slug'], $original_cf['fields'])) {
                /*
                 * See if repeater can handle copied fields
                 */
                $wpcf->repeater->set(get_post($original_cf['original_post_id']), $field);
                $fields_processed = $fields_processed + $wpcf->repeater->get_fields_form();
            } else {
                // Set repeater
                /*
                 *
                 *
                 * @since Types 1.2
                 * Now we're using repeater class to handle repetitive forms.
                 * Main change is - use form from $field_meta_box_form() without
                 * re-processing form elements.
                 *
                 * Field should pass form as array:
                 * 'my_checkbox' => array('#type' => 'checkbox' ...),
                 * 'my_textfield' => array('#type' => 'textfield' ...),
                 *
                 * In form it should set values to be stored.
                 * Use hooks to adjust saved data.
                 */
                $wpcf->repeater->set($post, $field);
                $fields_processed = $fields_processed + $wpcf->repeater->get_fields_form();
            }
            /*
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             *
             * Non-repetitive fields
             */
        } else {
            /*
             * meta_form will be treated as normal form.
             * See if any obstacles prevent us from using completed
             * form from config files.
             *
             * Main change is - use form from $field_meta_box_form() without
             * re-processing form elements.
             *
             * Field should pass form as array:
             * 'my_checkbox' => array('#type' => 'checkbox' ...),
             * 'my_textfield' => array('#type' => 'textfield' ...),
             *
             * In form it should set values to be stored.
             * Use hooks to adjust saved data.
             */
            $wpcf->field->set($post, $field);
            // TODO WPML move Check if repetitive field is copied using WPML
            if (!empty($original_cf['fields'])) {
                if (in_array($wpcf->field->slug, $original_cf['fields'])) {
                    // Switch to parent post
                    $wpcf->field->set(get_post($original_cf['original_post_id']), $field);
                }
            }
            /*
             * From Types 1.2 use complete form setup
             */
            $fields_processed = $fields_processed + $wpcf->field->_get_meta_form();
        }
    }
    // Cache results
    if ($cache_key) {
        $cache[$cache_key] = $fields_processed;
    }
    return $fields_processed;
}
Ejemplo n.º 2
0
/**
 * Creates form elements.
 * 
 * @param type $post
 * @param type $fields
 * @return type 
 */
function wpcf_admin_post_process_fields($post = false, $fields = array())
{
    global $pagenow;
    // Get cached
    static $cache = array();
    $cache_key = $post ? $post->ID : false;
    if ($cache_key && isset($cache[$cache_key])) {
        return $cache[$cache_key];
    }
    $fields_processed = array();
    // Get invalid fields (if submitted)
    if ($post) {
        $invalid_fields = get_post_meta($post->ID, 'wpcf-invalid-fields', true);
        delete_post_meta($post->ID, 'wpcf-invalid-fields');
    }
    $original_cf = array();
    if (function_exists('wpml_get_copied_fields_for_post_edit')) {
        $original_cf = wpml_get_copied_fields_for_post_edit();
    }
    foreach ($fields as $field) {
        $field = wpcf_admin_fields_get_field($field['id']);
        if (!empty($field)) {
            $field_id = 'wpcf-' . $field['type'] . '-' . $field['slug'];
            $field_init_data = wpcf_fields_type_action($field['type']);
            // Get inherited field
            $inherited_field_data = false;
            if (isset($field_init_data['inherited_field_type'])) {
                $inherited_field_data = wpcf_fields_type_action($field_init_data['inherited_field_type']);
            }
            // Set value
            $field['value'] = '';
            if ($post) {
                $field['value'] = get_post_meta($post->ID, wpcf_types_get_meta_prefix($field) . $field['slug'], true);
            } else {
                // see if it's in the original custom fields to copy.
                if (!empty($original_cf['fields'])) {
                    foreach ($original_cf['fields'] as $cf_id) {
                        if (wpcf_types_get_meta_prefix($field) . $field['slug'] == $cf_id) {
                            $field['wpml_action'] = 'copy';
                            $field['value'] = get_post_meta($original_cf['original_post_id'], wpcf_types_get_meta_prefix($field) . $field['slug'], true);
                            break;
                        }
                    }
                }
            }
            // Mark any field that is going to be copied.
            if (!empty($original_cf['fields'])) {
                foreach ($original_cf['fields'] as $cf_id) {
                    if (wpcf_types_get_meta_prefix($field) . $field['slug'] == $cf_id) {
                        //                        $field['description_extra'] = $original_cf['copy_message'];
                        $field['readonly'] = true;
                        $field['wpml_action'] = 'copy';
                        break;
                    }
                }
            }
            // Apply filters
            $field['value'] = apply_filters('wpcf_fields_value_get', $field['value'], $field, $field_init_data);
            $field['value'] = apply_filters('wpcf_fields_slug_' . $field['slug'] . '_value_get', $field['value'], $field, $field_init_data);
            $field['value'] = apply_filters('wpcf_fields_type_' . $field['type'] . '_value_get', $field['value'], $field, $field_init_data);
            // Process JS
            if (!empty($field_init_data['meta_box_js'])) {
                foreach ($field_init_data['meta_box_js'] as $handle => $data) {
                    if (isset($data['inline'])) {
                        add_action('admin_footer', $data['inline']);
                        continue;
                    }
                    $deps = !empty($data['deps']) ? $data['deps'] : array();
                    $in_footer = !empty($data['in_footer']) ? $data['in_footer'] : false;
                    wp_register_script($handle, $data['src'], $deps, WPCF_VERSION, $in_footer);
                    wp_enqueue_script($handle);
                }
            }
            // Process CSS
            if (!empty($field_init_data['meta_box_css'])) {
                foreach ($field_init_data['meta_box_css'] as $handle => $data) {
                    if (isset($data['src'])) {
                        $deps = !empty($data['deps']) ? $data['deps'] : array();
                        wp_enqueue_style($handle, $data['src'], $deps, WPCF_VERSION);
                    } else {
                        if (isset($data['inline'])) {
                            add_action('admin_head', $data['inline']);
                        }
                    }
                }
            }
            $element = array();
            // Set inherited values
            if ($inherited_field_data) {
                if (function_exists('wpcf_fields_' . $field_init_data['inherited_field_type'] . '_meta_box_form')) {
                    $element = call_user_func('wpcf_fields_' . $field_init_data['inherited_field_type'] . '_meta_box_form', $field);
                }
            }
            // Set generic values
            $element = array_merge(array('#type' => isset($field_init_data['inherited_field_type']) ? $field_init_data['inherited_field_type'] : $field['type'], '#id' => $field_id, '#title' => wpcf_translate('field ' . $field['id'] . ' name', $field['name']), '#description' => wpautop(wpcf_translate('field ' . $field['id'] . ' description', $field['description'])), '#name' => 'wpcf[' . $field['slug'] . ']', '#value' => isset($field['value']) ? $field['value'] : '', 'wpcf-id' => $field['id'], 'wpcf-slug' => $field['slug'], 'wpcf-type' => $field['type']), $element);
            if (isset($field['description_extra'])) {
                $element['#description'] .= wpautop($field['description_extra']);
            }
            // Set atributes #1
            if (isset($field['disable'])) {
                $field['#disable'] = $field['disable'];
            }
            if (!empty($field['disable'])) {
                $field['#attributes']['disabled'] = 'disabled';
            }
            if (!empty($field['readonly'])) {
                $field['#attributes']['readonly'] = 'readonly';
            }
            // Set specific values
            if (defined('WPCF_INC_ABSPATH') && file_exists(WPCF_INC_ABSPATH . '/fields/' . $field['type'] . '.php')) {
                require_once WPCF_INC_ABSPATH . '/fields/' . $field['type'] . '.php';
            }
            // Load field
            // TODO remove
            //            wpcf_fields_type_action($field['type']);
            //            require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields/' . $field['type']
            //                    . '.php';
            if (function_exists('wpcf_fields_' . $field['type'] . '_meta_box_form')) {
                $element_specific = call_user_func('wpcf_fields_' . $field['type'] . '_meta_box_form', $field);
                // Check if it's single
                if (isset($element_specific['#type'])) {
                    // Format description
                    if (!empty($element_specific['#description'])) {
                        $element_specific['#description'] = wpautop($element_specific['#description']);
                    }
                    $element = array_merge($element, $element_specific);
                } else {
                    // More fields, loop all
                    foreach ($element_specific as $element_specific_fields_key => $element_specific_fields_value) {
                        // Format description
                        if (!empty($element_specific_fields_value['#description'])) {
                            $element_specific_fields_value['#description'] = wpautop($element_specific_fields_value['#description']);
                        }
                        // If no ID
                        if (!isset($element_specific_fields_value['#id'])) {
                            $element_specific_fields_value['#id'] = 'wpcf-' . $field['slug'] . '-' . mt_rand();
                        }
                        // If no name, name = #ignore or id = #ignore - IGNORE
                        if (!isset($element_specific_fields_value['#name']) || $element_specific_fields_value['#name'] == '#ignore' || $element_specific_fields_value['#id'] == '#ignore') {
                            $element_specific_fields_value['#id'] = 'wpcf-' . $field['slug'] . '-' . mt_rand();
                            $element_specific_fields_value['#name'] = 'wpcf[ignore][' . mt_rand() . ']';
                            $fields_processed[$element_specific_fields_value['#id']] = $element_specific_fields_value;
                            continue;
                        }
                        // This one is actually value and keep it (#name is required)
                        $element = array_merge($element, $element_specific_fields_value);
                        // Add it here to keep order
                        $fields_processed[$element['#id']] = $element;
                    }
                }
            }
            // Set atributes #2 (override)
            if (isset($field['disable'])) {
                $element['#disable'] = $field['disable'];
            }
            if (!empty($field['disable'])) {
                $element['#attributes']['disabled'] = 'disabled';
            }
            if (!empty($field['readonly'])) {
                $element['#attributes']['readonly'] = 'readonly';
                if (!empty($element['#options'])) {
                    foreach ($element['#options'] as $key => $option) {
                        if (!is_array($option)) {
                            $element['#options'][$key] = array('#title' => $key, '#value' => $option);
                        }
                        $element['#options'][$key]['#attributes']['readonly'] = 'readonly';
                        if ($element['#type'] == 'select') {
                            $element['#options'][$key]['#attributes']['disabled'] = 'disabled';
                        }
                    }
                }
                if ($element['#type'] == 'select') {
                    $element['#attributes']['disabled'] = 'disabled';
                }
            }
            // Set validation element
            if (isset($field['data']['validate'])) {
                $element['#validate'] = $field['data']['validate'];
            }
            // Check if it was invalid no submit and add error message
            if ($post && !empty($invalid_fields)) {
                if (isset($invalid_fields[$element['#id']]['#error'])) {
                    $element['#error'] = $invalid_fields[$element['#id']]['#error'];
                }
            }
            // Set WPML locked icon
            if (isset($field['wpml_action']) && $field['wpml_action'] == 'copy') {
                $element['#title'] .= '<img src="' . WPCF_EMBEDDED_RES_RELPATH . '/images/locked.png" alt="' . __('This field is locked for editing because WPML will copy its value from the original language.', 'wpcf') . '" title="' . __('This field is locked for editing because WPML will copy its value from the original language.', 'wpcf') . '" style="position:relative;left:2px;top:2px;" />';
            }
            // Add to editor
            wpcf_admin_post_add_to_editor($field);
            // Add shortcode info
            //            $shortcode = '<div class="wpcf-shortcode">'
            //                    . __('Shortcode:', 'wpcf') . ' '
            //                    . '<span class="code">' . wpcf_fields_get_shortcode($field)
            //                    . '</span></div>';
            //            if (isset($element['#after']) && strpos($element['#after'],
            //                            'class="wpcf-shortcode"') === FALSE) {
            //                $element['#after'] .= $shortcode;
            //            } else {
            //                $element['#after'] = $shortcode;
            //            }
            $fields_processed[$element['#id']] = $element;
        }
    }
    if ($cache_key && isset($cache[$cache_key])) {
        $cache[$cache_key] = $fields_processed;
    }
    return $fields_processed;
}
Ejemplo n.º 3
0
/**
 * Creates form elements.
 * 
 * @param type $post
 * @param type $fields
 * @return type 
 */
function wpcf_admin_post_process_fields($post = false, $fields = array(), $use_cache = true, $add_to_editor = true, $context = 'group')
{
    global $pagenow;
    static $count = array();
    //Need this to count if there are more than one same field on page
    // Get cached
    static $cache = array();
    $cache_key = !empty($post->ID) ? $post->ID . md5(serialize($fields)) : false;
    if ($use_cache && $cache_key && isset($cache[$cache_key])) {
        return $cache[$cache_key];
    }
    $fields_processed = array();
    // Get invalid fields (if submitted)
    $invalid_fields = array();
    if ($post) {
        $invalid_fields = get_post_meta($post->ID, 'wpcf-invalid-fields', true);
        delete_post_meta($post->ID, 'wpcf-invalid-fields');
    }
    $original_cf = array();
    if (function_exists('wpml_get_copied_fields_for_post_edit')) {
        $original_cf = wpml_get_copied_fields_for_post_edit();
    }
    foreach ($fields as $field) {
        // Repetitive fields
        if (wpcf_admin_is_repetitive($field) && $context != 'post_relationship') {
            $temp_flag = false;
            if (!empty($post->ID)) {
                $temp_fields = get_post_meta($post->ID, wpcf_types_get_meta_prefix($field) . $field['slug'], false);
                if (!empty($temp_fields)) {
                    $temp_start = true;
                    $fields_processed[$field['id'] . '_repetitive_wrapper_open'] = array('#type' => 'markup', '#markup' => '<div id="wpcf_' . $field['id'] . '_repetitive_wrapper_' . mt_rand() . '" class="wpcf-repetitive-wrapper">', '#id' => $field['id'] . '_repetitive_wrapper_open');
                    foreach ($temp_fields as $temp_key => $temp_field) {
                        $single_field = $field;
                        $single_field['value'] = $temp_field;
                        $temp_processed = wpcf_admin_post_process_field($post, $single_field, $use_cache, $add_to_editor, $context);
                        if ($temp_processed) {
                            $single_field = $temp_processed['field'];
                            $element = $temp_processed['element'];
                            if ($field['type'] == 'skype') {
                                foreach ($element as $temp_element_key => $temp_element_value) {
                                    if (!$temp_start && !in_array($field['type'], array('checkbox'))) {
                                        unset($temp_element_value['#title']);
                                    }
                                    $temp_start = false;
                                    $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                                }
                            } else {
                                if (!$temp_start && !in_array($field['type'], array('checkbox'))) {
                                    unset($element['#title']);
                                }
                                $temp_start = false;
                                $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $single_field, $post, $context, $original_cf, $invalid_fields);
                            }
                        }
                    }
                    $fields_processed[$field['id'] . '_repetitive_wrapper_close'] = array('#type' => 'markup', '#markup' => '</div>', '#id' => $field['id'] . '_repetitive_wrapper_close');
                } else {
                    $temp_flag = true;
                }
            } else {
                if (!empty($original_cf['fields'])) {
                    foreach ($original_cf['fields'] as $cf_id) {
                        if (wpcf_types_get_meta_prefix($field) . $field['slug'] == $cf_id) {
                            $temp_fields = get_post_meta($original_cf['original_post_id'], wpcf_types_get_meta_prefix($field) . $field['slug'], false);
                            if (!empty($temp_fields)) {
                                foreach ($temp_fields as $temp_key => $temp_field) {
                                    $single_field = $field;
                                    $single_field['wpml_action'] = 'copy';
                                    $single_field['value'] = $temp_field;
                                    $temp_processed = wpcf_admin_post_process_field($post, $single_field, $use_cache, $add_to_editor, $context);
                                    if ($temp_processed) {
                                        $single_field = $temp_processed['field'];
                                        $element = $temp_processed['element'];
                                        if ($field['type'] == 'skype') {
                                            foreach ($element as $temp_element_key => $temp_element_value) {
                                                $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                                            }
                                        } else {
                                            $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $single_field, $post, $context, $original_cf, $invalid_fields);
                                        }
                                    }
                                }
                            } else {
                                $temp_flag = true;
                            }
                            break;
                        }
                    }
                } else {
                    $temp_flag = true;
                }
            }
            if ($temp_flag == true) {
                $temp_processed = wpcf_admin_post_process_field($post, $field, $use_cache, $add_to_editor, $context);
                if ($temp_processed) {
                    $fields_processed[$field['id'] . '_repetitive_wrapper_open'] = array('#type' => 'markup', '#markup' => '<div id="wpcf_' . $field['id'] . '_repetitive_wrapper_' . mt_rand() . '" class="wpcf-repetitive-wrapper">', '#id' => $field['id'] . '_repetitive_wrapper_open');
                    $field = $temp_processed['field'];
                    $element = $temp_processed['element'];
                    if ($field['type'] == 'skype') {
                        foreach ($element as $temp_element_key => $temp_element_value) {
                            $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                        }
                    } else {
                        $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $field, $post, $context, $original_cf, $invalid_fields);
                    }
                    $fields_processed[$field['id'] . '_repetitive_wrapper_close'] = array('#type' => 'markup', '#markup' => '</div>', '#id' => $field['id'] . '_repetitive_wrapper_close');
                }
            }
        } else {
            if ($post) {
                $field['value'] = get_post_meta($post->ID, wpcf_types_get_meta_prefix($field) . $field['slug'], true);
            } else {
                // see if it's in the original custom fields to copy.
                if (!empty($original_cf['fields'])) {
                    foreach ($original_cf['fields'] as $cf_id) {
                        if (wpcf_types_get_meta_prefix($field) . $field['slug'] == $cf_id) {
                            $field['wpml_action'] = 'copy';
                            $field['value'] = get_post_meta($original_cf['original_post_id'], wpcf_types_get_meta_prefix($field) . $field['slug'], true);
                            break;
                        }
                    }
                }
            }
            $temp_processed = wpcf_admin_post_process_field($post, $field, $use_cache, $add_to_editor, $context);
            if ($temp_processed) {
                $field = $temp_processed['field'];
                $element = $temp_processed['element'];
                if ($field['type'] == 'skype') {
                    foreach ($element as $temp_element_key => $temp_element_value) {
                        $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                    }
                } else {
                    $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $field, $post, $context, $original_cf, $invalid_fields);
                }
            }
        }
    }
    if ($cache_key) {
        $cache[$cache_key] = $fields_processed;
    }
    return $fields_processed;
}
Ejemplo n.º 4
0
/**
 * Creates form elements.
 * 
 * @param type $post
 * @param type $fields
 * @return type 
 */
function wpcf_admin_post_process_fields($post = false, $fields = array(), $use_cache = true, $add_to_editor = true, $context = 'group')
{
    global $pagenow;
    static $count = array();
    //Need this to count if there are more than one same field on page
    // Get cached
    static $cache = array();
    $cache_key = $post ? $post->ID : false;
    if ($use_cache && $cache_key && isset($cache[$cache_key])) {
        return $cache[$cache_key];
    }
    $fields_processed = array();
    // Get invalid fields (if submitted)
    if ($post) {
        $invalid_fields = get_post_meta($post->ID, 'wpcf-invalid-fields', true);
        delete_post_meta($post->ID, 'wpcf-invalid-fields');
    }
    $original_cf = array();
    if (function_exists('wpml_get_copied_fields_for_post_edit')) {
        $original_cf = wpml_get_copied_fields_for_post_edit();
    }
    foreach ($fields as $field) {
        $field = wpcf_admin_fields_get_field($field['id']);
        if (!empty($field)) {
            // TODO Monitor added rand suffix
            if (isset($count[$field['type'] . '-' . $field['slug']])) {
                $field_id = 'wpcf-' . $field['type'] . '-' . $field['slug'] . '-' . $count[$field['type'] . '-' . $field['slug']] . '-' . mt_rand();
                $count[$field['type'] . '-' . $field['slug']] += 1;
            } else {
                $field_id = 'wpcf-' . $field['type'] . '-' . $field['slug'] . '-' . mt_rand();
                $count[$field['type'] . '-' . $field['slug']] = 1;
            }
            $field_init_data = wpcf_fields_type_action($field['type']);
            // Get inherited field
            $inherited_field_data = false;
            if (isset($field_init_data['inherited_field_type'])) {
                $inherited_field_data = wpcf_fields_type_action($field_init_data['inherited_field_type']);
            }
            // Set value
            $field['value'] = '';
            if ($post) {
                $field['value'] = get_post_meta($post->ID, wpcf_types_get_meta_prefix($field) . $field['slug'], true);
            } else {
                // see if it's in the original custom fields to copy.
                if (!empty($original_cf['fields'])) {
                    foreach ($original_cf['fields'] as $cf_id) {
                        if (wpcf_types_get_meta_prefix($field) . $field['slug'] == $cf_id) {
                            $field['wpml_action'] = 'copy';
                            $field['value'] = get_post_meta($original_cf['original_post_id'], wpcf_types_get_meta_prefix($field) . $field['slug'], true);
                            break;
                        }
                    }
                }
            }
            // Mark any field that is going to be copied.
            if (!empty($original_cf['fields'])) {
                foreach ($original_cf['fields'] as $cf_id) {
                    if (wpcf_types_get_meta_prefix($field) . $field['slug'] == $cf_id) {
                        //                        $field['description_extra'] = $original_cf['copy_message'];
                        $field['readonly'] = true;
                        $field['wpml_action'] = 'copy';
                        break;
                    }
                }
            }
            // Apply filters
            $field['value'] = apply_filters('wpcf_fields_value_get', $field['value'], $field, $field_init_data);
            $field['value'] = apply_filters('wpcf_fields_slug_' . $field['slug'] . '_value_get', $field['value'], $field, $field_init_data);
            $field['value'] = apply_filters('wpcf_fields_type_' . $field['type'] . '_value_get', $field['value'], $field, $field_init_data);
            wpcf_admin_post_field_load_js_css($field_init_data);
            $element = array();
            // Set generic values
            $element = array('#type' => isset($field_init_data['inherited_field_type']) ? $field_init_data['inherited_field_type'] : $field['type'], '#id' => $field_id, '#title' => wpcf_translate('field ' . $field['id'] . ' name', $field['name']), '#description' => wpautop(wpcf_translate('field ' . $field['id'] . ' description', $field['description'])), '#name' => 'wpcf[' . $field['slug'] . ']', '#value' => isset($field['value']) ? $field['value'] : '', 'wpcf-id' => $field['id'], 'wpcf-slug' => $field['slug'], 'wpcf-type' => $field['type']);
            // Set inherited values
            $element_inherited = array();
            if ($inherited_field_data) {
                if (function_exists('wpcf_fields_' . $field_init_data['inherited_field_type'] . '_meta_box_form')) {
                    $element_inherited = call_user_func_array('wpcf_fields_' . $field_init_data['inherited_field_type'] . '_meta_box_form', array($field, $element));
                }
            }
            $element = array_merge($element, $element_inherited);
            if (isset($field['description_extra'])) {
                $element['#description'] .= wpautop($field['description_extra']);
            }
            // Set atributes #1
            if (isset($field['disable'])) {
                $field['#disable'] = $field['disable'];
            }
            if (!empty($field['disable'])) {
                $field['#attributes']['disabled'] = 'disabled';
            }
            if (!empty($field['readonly'])) {
                $field['#attributes']['readonly'] = 'readonly';
            }
            // Set specific values
            if (defined('WPCF_INC_ABSPATH') && file_exists(WPCF_INC_ABSPATH . '/fields/' . $field['type'] . '.php')) {
                require_once WPCF_INC_ABSPATH . '/fields/' . $field['type'] . '.php';
            }
            // Load field
            // TODO remove
            //            wpcf_fields_type_action($field['type']);
            //            require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields/' . $field['type']
            //                    . '.php';
            if (function_exists('wpcf_fields_' . $field['type'] . '_meta_box_form')) {
                $element_specific = call_user_func_array('wpcf_fields_' . $field['type'] . '_meta_box_form', array($field, $element));
                // Check if it's single
                if (isset($element_specific['#type'])) {
                    // Format description
                    if (!empty($element_specific['#description'])) {
                        $element_specific['#description'] = wpautop($element_specific['#description']);
                    }
                    $element = array_merge($element, $element_specific);
                    // Set validation element
                    if (isset($field['data']['validate'])) {
                        $element['#validate'] = $field['data']['validate'];
                    }
                } else {
                    // More fields, loop all
                    foreach ($element_specific as $element_specific_fields_key => $element_specific_fields_value) {
                        // Format description
                        if (!empty($element_specific_fields_value['#description'])) {
                            $element_specific_fields_value['#description'] = wpautop($element_specific_fields_value['#description']);
                        }
                        // If no ID
                        if (!isset($element_specific_fields_value['#id'])) {
                            $element_specific_fields_value['#id'] = 'wpcf-' . $field['slug'] . '-' . mt_rand();
                        }
                        // Set validation element
                        if (!empty($element_specific_fields_value['#_validate_this']) && isset($field['data']['validate'])) {
                            $element_specific_fields_value['#validate'] = $field['data']['validate'];
                        }
                        // If no name, name = #ignore or id = #ignore - IGNORE
                        if (!isset($element_specific_fields_value['#name']) || $element_specific_fields_value['#name'] == '#ignore' || $element_specific_fields_value['#id'] == '#ignore') {
                            $element_specific_fields_value['#id'] = 'wpcf-' . $field['slug'] . '-' . mt_rand();
                            $element_specific_fields_value['#name'] = 'wpcf[ignore][' . mt_rand() . ']';
                            $fields_processed[$element_specific_fields_value['#id']] = $element_specific_fields_value;
                            continue;
                        }
                        //                        if ($field['type'] == 'skype' && strpos($element_specific_fields_value['#name'], '[skypename]') === false) {
                        //                            continue;
                        //                        }
                        // This one is actually value and keep it (#name is required)
                        $element = array_merge($element, $element_specific_fields_value);
                        // Add it here to keep order
                        $fields_processed[$element['#id']] = $element;
                    }
                }
            }
            // Set atributes #2 (override)
            if (isset($field['disable'])) {
                $element['#disable'] = $field['disable'];
            }
            if (!empty($field['disable'])) {
                $element['#attributes']['disabled'] = 'disabled';
            }
            if (!empty($field['readonly'])) {
                $element['#attributes']['readonly'] = 'readonly';
                if (!empty($element['#options'])) {
                    foreach ($element['#options'] as $key => $option) {
                        if (!is_array($option)) {
                            $element['#options'][$key] = array('#title' => $key, '#value' => $option);
                        }
                        $element['#options'][$key]['#attributes']['readonly'] = 'readonly';
                        if ($element['#type'] == 'select') {
                            $element['#options'][$key]['#attributes']['disabled'] = 'disabled';
                        }
                    }
                }
                if ($element['#type'] == 'select') {
                    $element['#attributes']['disabled'] = 'disabled';
                }
            }
            // Set validation element
            if ($field['type'] != 'skype' && empty($element['#validate']) && isset($field['data']['validate'])) {
                $element['#validate'] = $field['data']['validate'];
            }
            // Check if it was invalid no submit and add error message
            if ($post && !empty($invalid_fields)) {
                if (isset($invalid_fields[$element['#id']]['#error'])) {
                    $element['#error'] = $invalid_fields[$element['#id']]['#error'];
                }
            }
            // Set WPML locked icon
            if (isset($field['wpml_action']) && $field['wpml_action'] == 'copy') {
                $element['#title'] .= '<img src="' . WPCF_EMBEDDED_RES_RELPATH . '/images/locked.png" alt="' . __('This field is locked for editing because WPML will copy its value from the original language.', 'wpcf') . '" title="' . __('This field is locked for editing because WPML will copy its value from the original language.', 'wpcf') . '" style="position:relative;left:2px;top:2px;" />';
            }
            // Add to editor
            if ($add_to_editor) {
                wpcf_admin_post_add_to_editor($field);
            }
            $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $field, $post, $context);
        }
    }
    if ($cache_key && isset($cache[$cache_key])) {
        $cache[$cache_key] = $fields_processed;
    }
    return $fields_processed;
}
Ejemplo n.º 5
0
/**
 * Creates form elements.
 * 
 * @param type $post
 * @param type $fields
 * @return type 
 */
function wpcf_admin_post_process_fields($post = false, $fields = array(), $use_cache = true, $add_to_editor = true, $context = 'group')
{
    // Get cached
    static $cache = array();
    $cache_key = !empty($post->ID) ? $post->ID . md5(serialize($fields)) : false;
    if ($use_cache && $cache_key && isset($cache[$cache_key])) {
        return $cache[$cache_key];
    }
    $fields_processed = array();
    // Get invalid fields (if submitted)
    $invalid_fields = array();
    if (!empty($post->ID)) {
        $invalid_fields = get_post_meta($post->ID, 'wpcf-invalid-fields', true);
        delete_post_meta($post->ID, 'wpcf-invalid-fields');
    }
    $original_cf = array();
    if (function_exists('wpml_get_copied_fields_for_post_edit')) {
        $original_cf = wpml_get_copied_fields_for_post_edit();
    }
    foreach ($fields as $field) {
        // Repetitive fields
        if (wpcf_admin_is_repetitive($field) && $context != 'post_relationship') {
            $temp_flag = false;
            // First check if repetitive fields are copied using WPML
            if (!empty($original_cf['fields'])) {
                // Check if marked
                if (in_array(wpcf_types_get_meta_prefix($field) . $field['slug'], $original_cf['fields'])) {
                    // Get original post field values
                    $temp_fields = get_post_meta($original_cf['original_post_id'], wpcf_types_get_meta_prefix($field) . $field['slug'], false);
                    // If there are original field values stored
                    if (!empty($temp_fields)) {
                        foreach ($temp_fields as $temp_key => $temp_field) {
                            $single_field = $field;
                            $single_field['wpml_action'] = 'copy';
                            $single_field['value'] = $temp_field;
                            $temp_processed = wpcf_admin_post_process_field($post, $single_field, $use_cache, $add_to_editor, $context);
                            if ($temp_processed) {
                                $single_field = $temp_processed['field'];
                                $element = $temp_processed['element'];
                                if ($field['type'] == 'skype') {
                                    foreach ($element as $temp_element_key => $temp_element_value) {
                                        $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                                    }
                                } else {
                                    $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $single_field, $post, $context, $original_cf, $invalid_fields);
                                }
                            }
                        }
                        // If there are no original fields stored
                        // display empty element
                    } else {
                        $single_field = $field;
                        $single_field['wpml_action'] = 'copy';
                        $single_field['value'] = null;
                        $temp_processed = wpcf_admin_post_process_field($post, $single_field, $use_cache, $add_to_editor, $context);
                        if ($temp_processed) {
                            $single_field = $temp_processed['field'];
                            $element = $temp_processed['element'];
                            if ($field['type'] == 'skype') {
                                foreach ($element as $temp_element_key => $temp_element_value) {
                                    $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                                }
                            } else {
                                $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $single_field, $post, $context, $original_cf, $invalid_fields);
                            }
                        }
                    }
                } else {
                    $temp_flag = true;
                }
            } else {
                $temp_flag = true;
            }
            // Get repetitive fields values
            if ($temp_flag && !empty($post->ID)) {
                $temp_flag = false;
                $temp_fields = get_post_meta($post->ID, wpcf_types_get_meta_prefix($field) . $field['slug'], false);
                if (!empty($temp_fields)) {
                    $temp_start = true;
                    $fields_processed[$field['id'] . '_repetitive_wrapper_open'] = array('#type' => 'markup', '#markup' => '<div id="wpcf_' . $field['id'] . '_repetitive_wrapper_' . mt_rand() . '" class="wpcf-repetitive-wrapper">', '#id' => $field['id'] . '_repetitive_wrapper_open');
                    foreach ($temp_fields as $temp_key => $temp_field) {
                        $single_field = $field;
                        $single_field['value'] = $temp_field;
                        $temp_processed = wpcf_admin_post_process_field($post, $single_field, $use_cache, $add_to_editor, $context);
                        if ($temp_processed) {
                            $single_field = $temp_processed['field'];
                            $element = $temp_processed['element'];
                            if ($field['type'] == 'skype') {
                                foreach ($element as $temp_element_key => $temp_element_value) {
                                    if (!$temp_start && !in_array($field['type'], array('checkbox'))) {
                                        unset($temp_element_value['#title']);
                                    }
                                    $temp_start = false;
                                    $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                                }
                            } else {
                                if (!$temp_start && !in_array($field['type'], array('checkbox'))) {
                                    unset($element['#title']);
                                }
                                $temp_start = false;
                                $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $single_field, $post, $context, $original_cf, $invalid_fields);
                            }
                        }
                    }
                    $fields_processed[$field['id'] . '_repetitive_wrapper_close'] = array('#type' => 'markup', '#markup' => '</div>', '#id' => $field['id'] . '_repetitive_wrapper_close');
                } else {
                    $temp_flag = true;
                }
            }
            // Temp flag for repetitive field is triggered if post is new
            // and field is not marked to be copied
            if ($temp_flag == true) {
                $temp_processed = wpcf_admin_post_process_field($post, $field, $use_cache, $add_to_editor, $context);
                if ($temp_processed) {
                    $fields_processed[$field['id'] . '_repetitive_wrapper_open'] = array('#type' => 'markup', '#markup' => '<div id="wpcf_' . $field['id'] . '_repetitive_wrapper_' . mt_rand() . '" class="wpcf-repetitive-wrapper">', '#id' => $field['id'] . '_repetitive_wrapper_open');
                    $field = $temp_processed['field'];
                    $element = $temp_processed['element'];
                    if ($field['type'] == 'skype') {
                        foreach ($element as $temp_element_key => $temp_element_value) {
                            $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                        }
                    } else {
                        $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $field, $post, $context, $original_cf, $invalid_fields);
                    }
                    $fields_processed[$field['id'] . '_repetitive_wrapper_close'] = array('#type' => 'markup', '#markup' => '</div>', '#id' => $field['id'] . '_repetitive_wrapper_close');
                }
            }
            // Non-repetitive fields
        } else {
            if (!empty($post->ID)) {
                $field['value'] = get_post_meta($post->ID, wpcf_types_get_meta_prefix($field) . $field['slug'], true);
            }
            // Check if repetitive field is copied using WPML
            if (!empty($original_cf['fields'])) {
                if (in_array(wpcf_types_get_meta_prefix($field) . $field['slug'], $original_cf['fields'])) {
                    $field['wpml_action'] = 'copy';
                    $field['value'] = get_post_meta($original_cf['original_post_id'], wpcf_types_get_meta_prefix($field) . $field['slug'], true);
                }
            }
            $temp_processed = wpcf_admin_post_process_field($post, $field, $use_cache, $add_to_editor, $context);
            if ($temp_processed) {
                $field = $temp_processed['field'];
                $element = $temp_processed['element'];
                if ($field['type'] == 'skype') {
                    foreach ($element as $temp_element_key => $temp_element_value) {
                        $fields_processed[$temp_element_value['#id']] = apply_filters('wpcf_post_edit_field', $temp_element_value, $field, $post, $context, $original_cf, $invalid_fields);
                    }
                } else {
                    $fields_processed[$element['#id']] = apply_filters('wpcf_post_edit_field', $element, $field, $post, $context, $original_cf, $invalid_fields);
                }
            }
        }
    }
    // Cache results
    if ($cache_key) {
        $cache[$cache_key] = $fields_processed;
    }
    return $fields_processed;
}