/** * Summary. * * Description. * * @since x.x.x * @access (for functions: only use if private) * * @see Function/method/class relied on * @link URL * @global type $varname Description. * @global type $varname Description. * * @param type $var Description. * @param type $var Optional. Description. * @return type Description. */ public function save_child_fields() { /** * check nonce */ if (0 || !isset($_REQUEST['_wpnonce']) || !isset($_REQUEST['current']) || !isset($_REQUEST['parent']) || !isset($_REQUEST['child']) || !wp_verify_nonce($_REQUEST['_wpnonce'], $this->get_nonce('child-post-fields-save', $_REQUEST['parent'], $_REQUEST['child']))) { $this->verification_failed_and_die(); } $parent = $_REQUEST['parent']; $child = $_REQUEST['child']; $fields = array(); parse_str($_REQUEST['current'], $fields); $relationships = get_option('wpcf_post_relationship', array()); $relationships[$parent][$child]['fields_setting'] = sanitize_text_field($fields['fields_setting']); /** * sanitize */ require_once WPCF_INC_ABSPATH . '/post-relationship.php'; $relationships[$parent][$child]['fields'] = array(); if (isset($fields['fields']) && is_array($fields['fields'])) { $allowed_keys = wpcf_post_relationship_get_specific_fields_keys($child); foreach ($fields['fields'] as $key => $value) { // other parent cpts if ('_wpcf_pr_parents' == $key) { $relationships[$parent][$child]['fields'][$key] = array(); foreach (array_keys($value) as $parents) { $relationships[$parent][$child]['fields'][$key][$parents] = 1; } } /** * sanitize Taxonomy */ if ('_wpcf_pr_taxonomies' == $key) { if (is_array($value)) { $relationships[$parent][$child]['fields'][$key] = array(); foreach (array_keys($value) as $taxonomy) { $taxonomy = get_taxonomy($taxonomy); if (is_object($taxonomy)) { $relationships[$parent][$child]['fields'][$key][$taxonomy->name] = 1; } } } continue; } if (array_key_exists($key, $allowed_keys)) { $relationships[$parent][$child]['fields'][$key] = 1; } } } update_option('wpcf_post_relationship', $relationships); die; }
/** * Edit fields form. * * @param type $parent * @param type $child */ function wpcf_pr_admin_edit_fields($parent, $child) { $post_type_parent = get_post_type_object($parent); $post_type_child = get_post_type_object($child); if (null == $post_type_parent || null == $post_type_child) { die(__('Wrong post types', 'wpcf')); } $relationships = get_option('wpcf_post_relationship', array()); if (!isset($relationships[$parent][$child])) { die(__('Relationship do not exist', 'wpcf')); } $data = $relationships[$parent][$child]; wp_enqueue_script('jquery'); wp_enqueue_style('types'); wpcf_admin_ajax_head('Edit fields', 'wpcf'); // Process submit if (isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'pt_edit_fields')) { $relationships[$parent][$child]['fields_setting'] = sanitize_text_field($_POST['fields_setting']); /** * sanitize */ $relationships[$parent][$child]['fields'] = array(); if (isset($_POST['fields']) && is_array($_POST['fields'])) { $allowed_keys = wpcf_post_relationship_get_specific_fields_keys($child); foreach ($_POST['fields'] as $key => $value) { /** * sanitize Taxonomy */ if ('_wpcf_pr_taxonomies' == $key) { if (is_array($value)) { $relationships[$parent][$child]['fields'][$key] = array(); foreach (array_keys($value) as $taxonomy) { $taxonomy = get_taxonomy($taxonomy); if (is_object($taxonomy)) { $relationships[$parent][$child]['fields'][$key][$taxonomy->name] = 1; } } } continue; } if (array_key_exists($key, $allowed_keys)) { $relationships[$parent][$child]['fields'][$key] = 1; } } } update_option('wpcf_post_relationship', $relationships); ?> <script type="text/javascript"> window.parent.jQuery('#TB_closeWindowButton').trigger('click'); window.parent.location.reload(); </script> <?php die; } $groups = wpcf_admin_get_groups_by_post_type($child); $options_cf = array(); $repetitive_warning = false; $repetitive_warning_markup = array(); $repetitive_warning_txt = __('Repeating fields should not be used in child posts. Types will update all field values.', 'wpcf'); foreach ($groups as $group) { $fields = wpcf_admin_fields_get_fields_by_group($group['id']); foreach ($fields as $key => $cf) { $__key = wpcf_types_cf_under_control('check_outsider', $key) ? $key : WPCF_META_PREFIX . $key; $options_cf[$__key] = array(); $options_cf[$__key]['#title'] = $cf['name']; $options_cf[$__key]['#name'] = 'fields[' . $__key . ']'; $options_cf[$__key]['#default_value'] = isset($data['fields'][$__key]) ? 1 : 0; // Repetitive warning if (wpcf_admin_is_repetitive($cf)) { if (!$repetitive_warning) { $repetitive_warning_markup = array('#type' => 'markup', '#markup' => '<div class="message error" style="display:none;" id="wpcf-repetitive-warning"><p>' . $repetitive_warning_txt . '</p></div>'); } $repetitive_warning = true; $options_cf[$__key]['#after'] = !isset($data['fields'][$__key]) ? '<div class="message error" style="display:none;"><p>' : '<div class="message error"><p>'; $options_cf[$__key]['#after'] .= $repetitive_warning_txt; $options_cf[$__key]['#after'] .= '</p></div>'; $options_cf[$__key]['#attributes'] = array('onclick' => 'jQuery(this).parent().find(\'.message\').toggle();', 'disabled' => 'disabled'); } } } $form = array(); $form['repetitive_warning_markup'] = $repetitive_warning_markup; $form['select'] = array('#type' => 'radios', '#name' => 'fields_setting', '#options' => array(__('Title, all custom fields and parents', 'wpcf') => 'all_cf', __('Do not show management options for this post type', 'wpcf') => 'only_list', __('All fields, including the standard post fields', 'wpcf') => 'all_cf_standard', __('Specific fields', 'wpcf') => 'specific'), '#default_value' => empty($data['fields_setting']) ? 'all_cf' : $data['fields_setting']); /** * check default, to avoid missing configuration */ if (!in_array($form['select']['#default_value'], $form['select']['#options'])) { $form['select']['#default_value'] = 'all_cf'; } /** * build options for "Specific fields" */ $options = array(); /** * check and add built-in properites */ $supports = wpcf_post_relationship_get_supported_fields_by_post_type($child); foreach ($supports as $child_field_key => $child_field_data) { $options[$child_field_data['name']] = array('#title' => $child_field_data['title'], '#name' => sprintf('fields[%s]', $child_field_data['name']), '#default_value' => isset($data['fields'][$child_field_data['name']]) ? 1 : 0); } /** * add custom fields */ $options = $options + $options_cf; $temp_belongs = wpcf_pr_admin_get_belongs($child); foreach ($temp_belongs as $temp_parent => $temp_data) { if ($temp_parent == $parent) { continue; } $temp_parent_type = get_post_type_object($temp_parent); $options[$temp_parent] = array(); $options[$temp_parent]['#title'] = $temp_parent_type->label; $options[$temp_parent]['#name'] = 'fields[_wpcf_pr_parents][' . $temp_parent . ']'; $options[$temp_parent]['#default_value'] = isset($data['fields']['_wpcf_pr_parents'][$temp_parent]) ? 1 : 0; } /** * remove "Specific fields" if there is no fields */ if (empty($options)) { unset($form['select']['#options'][__('Specific fields', 'wpcf')]); if ('specific' == $form['select']['#default_value']) { $form['select']['#default_value'] = 'all_cf'; } } // Taxonomies $taxonomies = get_object_taxonomies($post_type_child->name, 'objects'); if (!empty($taxonomies)) { foreach ($taxonomies as $tax_id => $taxonomy) { $options[$tax_id] = array(); $options[$tax_id]['#title'] = sprintf(__('Taxonomy - %s', 'wpcf'), $taxonomy->label); $options[$tax_id]['#name'] = 'fields[_wpcf_pr_taxonomies][' . $tax_id . ']'; $options[$tax_id]['#default_value'] = isset($data['fields']['_wpcf_pr_taxonomies'][$tax_id]) ? 1 : 0; } } $form['specific'] = array('#type' => 'checkboxes', '#name' => 'fields', '#options' => $options, '#default_value' => isset($data['fields']), '#before' => '<div id="wpcf-specific" style="display:none;margin:10px 0 0 20px;">', '#after' => '</div>'); $form['submit'] = array('#type' => 'submit', '#name' => 'submit', '#value' => __('Save', 'wpcf'), '#attributes' => array('class' => 'button-primary')); echo '<form method="post" action="" class="types-select-child-fields">'; echo wpcf_form_simple($form); echo wp_nonce_field('pt_edit_fields'); echo '</form>'; ?> <script type="text/javascript"> jQuery(document).ready(function(){ if (jQuery('input[name="fields_setting"]:checked').val() == 'specific') { jQuery('#wpcf-specific').show(); } else { <?php if ($repetitive_warning && 'only_list' != $form['select']['#default_value']) { ?> jQuery('#wpcf-repetitive-warning').show(); <?php } ?> } jQuery('input[name="fields_setting"]').change(function(){ if (jQuery(this).val() == 'specific') { jQuery('#wpcf-specific').slideDown(); } else { jQuery('#wpcf-specific').slideUp(); <?php if ($repetitive_warning) { ?> if ( 'only_list' != jQuery('input[name="fields_setting"]:checked').val()) { jQuery('#wpcf-repetitive-warning').show(); } <?php } ?> } }); }); </script> <?php wpcf_admin_ajax_footer(); }