/** * Submitted Bulk actions. */ function wpcf_admin_custom_fields_control_bulk_actions($action = '') { if (!isset($_POST['_wpnonce']) || !wp_verify_nonce($_POST['_wpnonce'], 'custom_fields_control_bulk')) { return; } switch ($action) { case 'wpcf-change-type-bulk': if (true && isset($_POST['wpcf-id']) && isset($_POST['fields'])) { wpcf_admin_custom_fields_change_type($_POST['fields'], $_POST['wpcf-id'], TYPES_CUSTOM_FIELD_GROUP_CPT_NAME); } break; case 'wpcf-deactivate-bulk': $fields = wpcf_admin_fields_get_fields(false, true); foreach ($_POST['fields'] as $field_id) { $field_id = sanitize_text_field($field_id); if (isset($fields[$field_id])) { $fields[$field_id]['data']['disabled'] = 1; wpcf_admin_message_store(sprintf(__('Removed from Types control: %s', 'wpcf'), $fields[$field_id]['name'])); } } wpcf_admin_fields_save_fields($fields); break; case 'wpcf-activate-bulk': $fields = wpcf_admin_fields_get_fields(false, true); $fields_bulk = wpcf_types_cf_under_control('add', array('fields' => $_POST['fields'])); foreach ($fields_bulk as $field_id) { if (isset($fields[$field_id])) { $fields[$field_id]['data']['disabled'] = 0; } wpcf_admin_message_store(sprintf(__('Added to Types control: %s', 'wpcf'), $field_id)); } wpcf_admin_fields_save_fields($fields); break; case 'wpcf-delete-bulk': require_once WPCF_INC_ABSPATH . '/fields.php'; $failed = array(); $success = array(); foreach ($_POST['fields'] as $field_id) { $field_id = sanitize_text_field($field_id); $response = wpcf_admin_fields_delete_field($field_id); if (!$response) { $failed[] = str_replace('_' . md5('wpcf_not_controlled'), '', $field_id); } else { $success[] = $field_id; } } if (!empty($success)) { wpcf_admin_message_store(sprintf(__('Fields %s have been deleted.', 'wpcf'), implode(', ', $success))); } if (!empty($failed)) { wpcf_admin_message_store(sprintf(__('Fields %s are not Types fields. Types wont delete these fields.', 'wpcf'), implode(', ', $failed)), 'error'); } break; case 'wpcf-add-to-group-bulk': case 'wpcf-remove-from-group-bulk': if (true && isset($_POST['wpcf-id']) && isset($_POST['fields'])) { $fields = array_values((array) $_POST['fields']); if (!empty($fields)) { $groups = explode(',', $_POST['wpcf-id']); foreach ($groups as $group_id) { switch ($action) { case 'wpcf-add-to-group-bulk': wpcf_admin_fields_save_group_fields($group_id, $fields, true); break; case 'wpcf-remove-from-group-bulk': wpcf_admin_fields_remove_field_from_group_bulk($group_id, $fields); break; } } } } break; } wp_safe_redirect(esc_url_raw(add_query_arg(array('page' => 'wpcf-custom-fields-control'), admin_url('admin.php')))); die; }
/** * AJAX call from Bulk actions. */ function wpcf_admin_custom_fields_control_bulk_ajax() { if (empty($_REQUEST['fields'])) { die(__('Please select fields', 'wpcf')); } if (!empty($_POST)) { if (!empty($_POST['groups']) && !empty($_POST['fields'])) { $action = isset($_POST['wpcf_action_control']) ? sanitize_text_field($_POST['wpcf_action_control']) : 'wpcf-add-to-group-bulk'; foreach ($_POST['groups'] as $group_id) { $group_id = sanitize_text_field($group_id); switch ($action) { case 'wpcf-add-to-group-bulk': wpcf_admin_fields_save_group_fields($group_id, array_values((array) $_POST['fields']), true); break; case 'wpcf-remove-from-group-bulk': wpcf_admin_fields_remove_field_from_group_bulk($group_id, array_values((array) $_POST['fields'])); break; default: break; } } } else { if (!empty($_POST['type']) && !empty($_POST['fields'])) { wpcf_admin_custom_fields_change_type($_POST['fields'], sanitize_text_field($_POST['type'])); } } echo '<script type="text/javascript"> window.parent.jQuery("#TB_closeWindowButton").click(); window.parent.location.href=window.parent.location.href; </script>'; die; } $groups = wpcf_admin_fields_get_groups(); $output = array(); if (in_array($_GET['wpcf_bulk_action'], array('wpcf-add-to-group-bulk', 'wpcf-remove-from-group-bulk'))) { foreach ($groups as $group_id => $group) { $output[$group['id']] = array('#type' => 'checkbox', '#name' => 'groups[]', '#title' => $group['name'], '#value' => $group['id'], '#default_value' => false, '#inline' => true); } } else { if ($_GET['wpcf_bulk_action'] == 'wpcf-change-type-bulk') { $output['types'] = wpcf_admin_custom_fields_control_change_type_dropdown(); } else { die('Not valid action'); } } foreach ($_GET['fields'] as $field_id) { $field_id = sanitize_text_field($field_id); $output[$field_id] = array('#type' => 'hidden', '#name' => 'fields[]', '#value' => $field_id); } $output['submit'] = array('#type' => 'submit', '#name' => 'submit', '#value' => __('Save Changes'), '#attributes' => array('class' => 'button-primary')); echo '<form method="post" action="">'; echo wpcf_form_simple($output); wp_nonce_field('custom_fields_control_bulk'); echo '<input type="hidden" name="action" value="wpcf_ajax" />'; echo '<input type="hidden" name="wpcf_action" value="custom_fields_control_bulk" />'; echo '<input type="hidden" name="wpcf_action_control" value="' . esc_attr($_GET['wpcf_bulk_action']) . '" />'; echo '</form>'; }
private function process_bulk_action() { $action = $this->current_action(); if (false == $action) { return; } if (!wp_verify_nonce(wpcf_getpost('_wpnonce'), WPCF_Page_Control_Termmeta::BULK_ACTION_NONCE)) { wp_die(__('Invalid nonce.', 'wpcf')); } $selected_field_definitions = wpcf_getpost(self::INPUT_SLUGS, array()); if (is_string($selected_field_definitions)) { $selected_field_definitions = array($selected_field_definitions); } if (!is_array($selected_field_definitions) || empty($selected_field_definitions)) { // Nothing to do here return; } $factory = WPCF_Field_Term_Definition_Factory::get_instance(); switch ($action) { case self::BULK_ACTION_ADD_TO_GROUP: $group_ids = $this->read_group_ids(); foreach ($group_ids as $group_id) { wpcf_admin_fields_save_group_fields($group_id, $selected_field_definitions, true, WPCF_Field_Group_Term::POST_TYPE, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); } break; case self::BULK_ACTION_REMOVE_FROM_TO_GROUP: $group_ids = $this->read_group_ids(); foreach ($group_ids as $group_id) { wpcf_admin_fields_remove_field_from_group_bulk($group_id, $selected_field_definitions); } break; case self::BULK_ACTION_CHANGE_TYPE: $field_type_slug = wpcf_getpost('wpcf-id'); if (!empty($field_type_slug)) { wpcf_admin_custom_fields_change_type($selected_field_definitions, $field_type_slug, WPCF_Field_Group_Term::POST_TYPE, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); } break; case self::BULK_ACTION_ACTIVATE: $fields = wpcf_admin_fields_get_fields(false, true, false, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); $fields_bulk = wpcf_types_cf_under_control('add', array('fields' => $selected_field_definitions), WPCF_Field_Group_Term::POST_TYPE, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); foreach ($fields_bulk as $field_id) { if (isset($fields[$field_id])) { $fields[$field_id]['data']['disabled'] = 0; } wpcf_admin_message(sprintf(__('Added to Types control: %s', 'wpcf'), esc_html($field_id)), 'updated', 'echo'); } wpcf_admin_fields_save_fields($fields, false, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); break; case self::BULK_ACTION_DEACTIVATE: $fields = wpcf_admin_fields_get_fields(false, true, false, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); foreach ($selected_field_definitions as $field_id) { $field_id = sanitize_text_field($field_id); if (isset($fields[$field_id])) { $fields[$field_id]['data']['disabled'] = 1; wpcf_admin_message(sprintf(__('Removed from Types control: %s', 'wpcf'), $fields[$field_id]['name']), 'updated', 'echo'); } } wpcf_admin_fields_save_fields($fields, false, WPCF_Field_Term_Definition_Factory::FIELD_DEFINITIONS_OPTION); break; case self::BULK_ACTION_DELETE: $failed = array(); $success = array(); foreach ($selected_field_definitions as $field_id) { $field_id = sanitize_text_field($field_id); // Permanently single field definition and field data. $field_definition = $factory->load_field_definition($field_id); if (null == $field_definition) { $response = false; } else { $response = $factory->delete_definition($field_definition); } if (!$response) { $failed[] = str_replace('_' . md5('wpcf_not_controlled'), '', $field_id); } else { $success[] = $field_id; } } if (!empty($success)) { wpcf_admin_message(sprintf(__('Fields %s have been deleted.', 'wpcf'), esc_html(implode(', ', $success))), 'updated', 'echo'); } if (!empty($failed)) { wpcf_admin_message(sprintf(__('Fields %s are not Types fields. Types wont delete these fields.', 'wpcf'), esc_html(implode(', ', $failed))), 'error', 'echo'); } break; } // We made changes to field definitions and now the listing table is going to be rendered. $factory->clear_definition_storage(); }