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