/** * Saves fields and groups. * * If field name is changed in specific group - new one will be created, * otherwise old one will be updated and will appear in that way in other grups. * * @return type */ function wpcf_admin_save_fields_groups_submit($form) { if (!isset($_POST['wpcf']['group']['name'])) { return false; } global $wpdb; $new_group = false; $group_slug = $_POST['wpcf']['group']['slug'] = sanitize_title($_POST['wpcf']['group']['name']); // Basic check if (isset($_REQUEST['group_id'])) { // Check if group exists $post = get_post($_REQUEST['group_id']); if (empty($post) || $post->post_type != 'wp-types-group') { $form->triggerError(); wpcf_admin_message(sprintf(__("Wrong group ID %d", 'wpcf'), intval($_REQUEST['group_id'])), 'error'); return false; } $group_id = $post->ID; } else { $new_group = true; } // Save fields for future use $fields = array(); if (!empty($_POST['wpcf']['fields'])) { // Before anything - search unallowed characters foreach ($_POST['wpcf']['fields'] as $key => $field) { if (empty($field['slug']) && preg_match('#[^a-zA-Z0-9\\s\\_\\-]#', $field['name']) || !empty($field['slug']) && preg_match('#[^a-zA-Z0-9\\s\\_\\-]#', $field['slug'])) { $form->triggerError(); wpcf_admin_message(sprintf(__('Field slugs cannot contain non-English characters. Please edit this field name %s and save again.', 'wpcf'), $field['name']), 'error'); return false; } } foreach ($_POST['wpcf']['fields'] as $key => $field) { if (!empty($field['is_new'])) { if (wpcf_types_cf_under_control('check_exists', sanitize_title($field['name']))) { $form->triggerError(); wpcf_admin_message(sprintf(__('Field with name "%s" already exists', 'wpcf'), $field['name']), 'error'); return false; } } // Field ID and slug are same thing // $slug = $_POST['wpcf']['fields'][$key]['slug'] = sanitize_title($field['name']); $field_id = wpcf_admin_fields_save_field($field); if (!empty($field_id)) { $fields[] = $field_id; } // WPML if (function_exists('wpml_cf_translation_preferences_store')) { $wpml_save_cf = wpml_cf_translation_preferences_store($key, wpcf_types_get_meta_prefix(wpcf_admin_fields_get_field($field_id)) . $field_id); } } } // Save group $post_types = isset($_POST['wpcf']['group']['supports']) ? $_POST['wpcf']['group']['supports'] : array(); $taxonomies_post = isset($_POST['wpcf']['group']['taxonomies']) ? $_POST['wpcf']['group']['taxonomies'] : array(); $terms = array(); foreach ($taxonomies_post as $taxonomy) { foreach ($taxonomy as $tax => $term) { $terms[] = $term; } } // Rename if needed if (isset($_REQUEST['group_id'])) { $_POST['wpcf']['group']['id'] = $_REQUEST['group_id']; } $group_id = wpcf_admin_fields_save_group($_POST['wpcf']['group']); // Set open fieldsets if ($new_group && !empty($group_id)) { $open_fieldsets = get_user_meta(get_current_user_id(), 'wpcf-group-form-toggle', true); if (isset($open_fieldsets[-1])) { $open_fieldsets[$group_id] = $open_fieldsets[-1]; unset($open_fieldsets[-1]); update_user_meta(get_current_user_id(), 'wpcf-group-form-toggle', $open_fieldsets); } } // Rest of processes if (!empty($group_id)) { wpcf_admin_fields_save_group_fields($group_id, $fields); wpcf_admin_fields_save_group_post_types($group_id, $post_types); wpcf_admin_fields_save_group_terms($group_id, $terms); if (!empty($_POST['wpcf']['group']['templates'])) { wpcf_admin_fields_save_group_templates($group_id, $_POST['wpcf']['group']['templates']); } $_POST['wpcf']['group']['fields'] = isset($_POST['wpcf']['fields']) ? $_POST['wpcf']['fields'] : array(); do_action('wpcf_save_group', $_POST['wpcf']['group']); wpcf_admin_message_store(__('Group saved', 'wpcf')); wp_redirect(admin_url('admin.php?page=wpcf-edit&group_id=' . $group_id)); die; } else { wpcf_admin_message_store(__('Error saving group', 'wpcf'), 'error'); } }
/** * 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. */ private function save_group_fields($group_id) { if (empty($_POST['wpcf']['fields'])) { delete_post_meta($group_id, '_wp_types_group_fields'); return; } $fields = array(); // First check all fields foreach ($_POST['wpcf']['fields'] as $key => $field) { $field = wpcf_sanitize_field($field); $field = apply_filters('wpcf_field_pre_save', $field); if (!empty($field['is_new'])) { // Check name and slug if (wpcf_types_cf_under_control('check_exists', sanitize_title($field['name']))) { $this->triggerError(); wpcf_admin_message(sprintf(__('Field with name "%s" already exists', 'wpcf'), $field['name']), 'error'); return $form; } if (isset($field['slug']) && wpcf_types_cf_under_control('check_exists', sanitize_title($field['slug']))) { $this->triggerError(); wpcf_admin_message(sprintf(__('Field with slug "%s" already exists', 'wpcf'), $field['slug']), 'error'); return $form; } } $field['submit-key'] = $key; // Field ID and slug are same thing $field_id = wpcf_admin_fields_save_field($field); if (is_wp_error($field_id)) { $this->triggerError(); wpcf_admin_message($field_id->get_error_message(), 'error'); return; } if (!empty($field_id)) { $fields[] = $field_id; } // WPML /** @var string $field_id */ if (defined('ICL_SITEPRESS_VERSION') && version_compare(ICL_SITEPRESS_VERSION, '3.2', '<')) { if (function_exists('wpml_cf_translation_preferences_store')) { $real_custom_field_name = wpcf_types_get_meta_prefix(wpcf_admin_fields_get_field($field_id)) . $field_id; wpml_cf_translation_preferences_store($key, $real_custom_field_name); } } } wpcf_admin_fields_save_group_fields($group_id, $fields); }
/** * Saves fields and groups. * * If field name is changed in specific group - new one will be created, * otherwise old one will be updated and will appear in that way in other grups. * * @return type */ function wpcf_admin_save_fields_groups_submit($form) { if (!isset($_POST['wpcf']) || !isset($_POST['wpcf']['group']) || !isset($_POST['wpcf']['group']['name'])) { return false; } // @todo maybe sanitize_text_field this too $_POST['wpcf']['group']['name'] = trim(strip_tags($_POST['wpcf']['group']['name'])); $_POST['wpcf']['group'] = apply_filters('wpcf_group_pre_save', $_POST['wpcf']['group']); if (empty($_POST['wpcf']['group']['name'])) { $form->triggerError(); wpcf_admin_message(__('Group name can not be empty.', 'wpcf'), 'error'); return $form; } $new_group = false; $group_slug = $_POST['wpcf']['group']['slug'] = sanitize_title($_POST['wpcf']['group']['name']); // Basic check if (isset($_REQUEST['group_id'])) { // Check if group exists $post = get_post(intval($_REQUEST['group_id'])); // Name changed if (strtolower($_POST['wpcf']['group']['name']) != strtolower($post->post_title)) { // Check if already exists $exists = get_page_by_title($_POST['wpcf']['group']['name'], 'OBJECT', 'wp-types-group'); if (!empty($exists)) { $form->triggerError(); wpcf_admin_message(sprintf(__("A group by name <em>%s</em> already exists. Please use a different name and save again.", 'wpcf'), htmlspecialchars($_POST['wpcf']['group']['name'])), 'error'); return $form; } } if (empty($post) || $post->post_type != 'wp-types-group') { $form->triggerError(); wpcf_admin_message(sprintf(__("Wrong group ID %d", 'wpcf'), intval($_REQUEST['group_id'])), 'error'); return $form; } $group_id = $post->ID; } else { $new_group = true; // Check if already exists $exists = get_page_by_title($_POST['wpcf']['group']['name'], 'OBJECT', 'wp-types-group'); if (!empty($exists)) { $form->triggerError(); wpcf_admin_message(sprintf(__("A group by name <em>%s</em> already exists. Please use a different name and save again.", 'wpcf'), htmlspecialchars($_POST['wpcf']['group']['name'])), 'error'); return $form; } } // Save fields for future use $fields = array(); if (!empty($_POST['wpcf']['fields'])) { // Before anything - search unallowed characters foreach ($_POST['wpcf']['fields'] as $key => $field) { if (empty($field['slug']) && preg_match('#[^a-zA-Z0-9\\s\\_\\-]#', $field['name']) || !empty($field['slug']) && preg_match('#[^a-zA-Z0-9\\s\\_\\-]#', $field['slug'])) { $form->triggerError(); wpcf_admin_message(sprintf(__('Field slugs cannot contain non-English characters. Please edit this field name %s and save again.', 'wpcf'), $field['name']), 'error'); return $form; } if (!empty($field['name']) && is_numeric($field['name']) || !empty($field['slug']) && is_numeric($field['slug'])) { $form->triggerError(); wpcf_admin_message(sprintf(__('Field names or slugs cannot contain only numbers.', 'wpcf'), $field['name']), 'error'); return $form; } } // First check all fields foreach ($_POST['wpcf']['fields'] as $key => $field) { $field = apply_filters('wpcf_field_pre_save', $field); if (!empty($field['is_new'])) { // Check name and slug if (wpcf_types_cf_under_control('check_exists', sanitize_title($field['name']))) { $form->triggerError(); wpcf_admin_message(sprintf(__('Field with name "%s" already exists', 'wpcf'), $field['name']), 'error'); return $form; } if (isset($field['slug']) && wpcf_types_cf_under_control('check_exists', sanitize_title($field['slug']))) { $form->triggerError(); wpcf_admin_message(sprintf(__('Field with slug "%s" already exists', 'wpcf'), $field['slug']), 'error'); return $form; } } // Field ID and slug are same thing $field_id = wpcf_admin_fields_save_field($field); if (is_wp_error($field_id)) { $form->triggerError(); wpcf_admin_message($field_id->get_error_message(), 'error'); return $form; } if (!empty($field_id)) { $fields[] = $field_id; } // WPML if (function_exists('wpml_cf_translation_preferences_store')) { $wpml_save_cf = wpml_cf_translation_preferences_store($key, wpcf_types_get_meta_prefix(wpcf_admin_fields_get_field($field_id)) . $field_id); } } } // Save group $post_types = isset($_POST['wpcf']['group']['supports']) ? $_POST['wpcf']['group']['supports'] : array(); $taxonomies_post = isset($_POST['wpcf']['group']['taxonomies']) ? $_POST['wpcf']['group']['taxonomies'] : array(); $admin_style = $_POST['wpcf']['group']['admin_styles']; $terms = array(); foreach ($taxonomies_post as $taxonomy) { foreach ($taxonomy as $tax => $term) { $terms[] = $term; } } // Rename if needed if (isset($_REQUEST['group_id'])) { $_POST['wpcf']['group']['id'] = intval($_REQUEST['group_id']); } $group_id = wpcf_admin_fields_save_group($_POST['wpcf']['group']); $_POST['wpcf']['group']['id'] = $group_id; // Set open fieldsets if ($new_group && !empty($group_id)) { $open_fieldsets = get_user_meta(get_current_user_id(), 'wpcf-group-form-toggle', true); if (isset($open_fieldsets[-1])) { $open_fieldsets[$group_id] = $open_fieldsets[-1]; unset($open_fieldsets[-1]); update_user_meta(get_current_user_id(), 'wpcf-group-form-toggle', $open_fieldsets); } } // Rest of processes if (!empty($group_id)) { wpcf_admin_fields_save_group_fields($group_id, $fields); wpcf_admin_fields_save_group_post_types($group_id, $post_types); wpcf_admin_fields_save_group_terms($group_id, $terms); wpcf_admin_fields_save_group_admin_styles($group_id, $admin_style); if (empty($_POST['wpcf']['group']['templates'])) { $_POST['wpcf']['group']['templates'] = array(); } wpcf_admin_fields_save_group_templates($group_id, $_POST['wpcf']['group']['templates']); $_POST['wpcf']['group']['fields'] = isset($_POST['wpcf']['fields']) ? $_POST['wpcf']['fields'] : array(); do_action('wpcf_save_group', $_POST['wpcf']['group']); wpcf_admin_message_store(apply_filters('types_message_custom_fields_saved', __('Group saved', 'wpcf'), $_POST['wpcf']['group']['name'], $new_group ? false : true), 'custom'); wp_redirect(admin_url('admin.php?page=wpcf-edit&group_id=' . $group_id)); die; } else { wpcf_admin_message_store(__('Error saving group', 'wpcf'), 'error'); } }
private function save_filter_fields($group_id, $fields_data) { if (empty($fields_data)) { delete_post_meta($group_id, '_wp_types_group_fields'); return; } $fields = array(); // First check all fields foreach ($fields_data as $field_key => $field) { $field = wpcf_sanitize_field($field); $field = apply_filters('wpcf_field_pre_save', $field); if (!empty($field['is_new'])) { // Check name and slug if (wpcf_types_cf_under_control('check_exists', sanitize_title($field['name']), WPCF_Field_Group_Term::POST_TYPE, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION)) { $this->triggerError(); wpcf_admin_message(sprintf(__('Field with name "%s" already exists', 'wpcf'), $field['name']), 'error'); return; } if (isset($field['slug']) && wpcf_types_cf_under_control('check_exists', sanitize_title($field['slug']), WPCF_Field_Group_Term::POST_TYPE, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION)) { $this->triggerError(); wpcf_admin_message(sprintf(__('Field with slug "%s" already exists', 'wpcf'), $field['slug']), 'error'); return; } } $field['submit-key'] = $field_key; // Field ID and slug are same thing $field_slug = wpcf_admin_fields_save_field($field, WPCF_Field_Group_Term::POST_TYPE, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); if (is_wp_error($field_slug)) { $this->triggerError(); wpcf_admin_message($field_slug->get_error_message(), 'error'); return; } if (!empty($field_slug)) { $fields[] = $field_slug; } // WPML if (defined('ICL_SITEPRESS_VERSION') && version_compare(ICL_SITEPRESS_VERSION, '3.2', '<')) { if (function_exists('wpml_cf_translation_preferences_store')) { $real_custom_field_name = wpcf_types_get_meta_prefix(wpcf_admin_fields_get_field($field_slug, false, false, false, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION)) . $field_slug; wpml_cf_translation_preferences_store($field_key, $real_custom_field_name); } } } wpcf_admin_fields_save_group_fields($group_id, $fields, false, WPCF_Field_Group_Term::POST_TYPE, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); }