public static function pre_update_option($new, $old = false) { if (false !== ($field_data = piklist_validate::check($new))) { $setting = $_REQUEST['option_page']; $_old = $old; foreach ($field_data[$setting] as $field => &$data) { if (!isset($data['display']) || isset($data['display']) && !$data['display']) { if (!isset($new[$field]) && isset($_old[$field])) { unset($_old[$field]); } if ((isset($data['add_more']) && !$data['add_more'] || !isset($data['add_more'])) && (isset($new[$field]) && isset($new[$field][0]) && count($new[$field]) == 1)) { $new[$field] = is_array($new[$field][0]) && count($new[$field][0]) == 1 ? $new[$field][0][0] : $new[$field][0]; } if (isset($new[$field]) && is_array($new[$field]) && count($new[$field]) > 1 && empty($new[$field][0]) && isset($new[$field][0])) { unset($new[$field][0]); $new[$field] = array_values($new[$field]); } if (isset($data['field'])) { $path = array_merge(array($setting, 'name'), strstr($data['field'], ':') ? explode(':', $data['field']) : array($data['field'])); if (piklist::array_path_get($_FILES, $path) && $data['type'] == 'file') { $data['request_value'] = piklist_form::save_upload($path, $data['request_value'], true); $path = explode(':', $data['field']); $parent_field = $path[0]; unset($path[0]); piklist::array_path_set($new[$parent_field], $path, $data['request_value']); } } } } $settings = wp_parse_args($new, $_old); $settings = apply_filters('piklist_pre_update_option', $settings, $setting, $new, $old); $settings = apply_filters('piklist_pre_update_option_' . $setting, $settings, $new, $old); } else { $settings = $old; } return $settings; }
/** * pre_update_option * Handle saving the setting. * * @param array $new The new setting object. * @param array $old The old setting object. * * @return public * * @access public * @static * @since 1.0 */ public static function pre_update_option($new, $old = false) { $check = piklist_validate::check($new); if (false !== $check['valid'] && $check['type'] == 'POST') { $fields_data = $check['fields_data']; $setting = $_REQUEST['option_page']; $_old = $old; foreach ($fields_data[$setting] as $field => &$data) { if (!isset($data['display']) || isset($data['display']) && !$data['display']) { if (isset($new[$field])) { $new[$field] = $data['request_value']; } if (!isset($new[$field]) && isset($_old[$field])) { unset($_old[$field]); } if (isset($new[$field]) && is_array($new[$field]) && $data['multiple'] && is_array($data['choices']) && count($data['choices']) == 1) { $new[$field] = current($new[$field]); } if (isset($data['field']) && !$data['display'] && array_key_exists($setting, $_FILES) && array_key_exists($data['field'], $_FILES[$setting]['name'])) { $paths = piklist::array_paths($_FILES[$setting]['name'][$data['field']]); if (!empty($paths)) { if (strstr($paths[0], ':')) { foreach ($paths as $path) { $files_path = explode(':', $path); unset($files_path[count($files_path) - 1]); $files_path = array_merge(array($setting, 'name'), explode(':', $data['field'] . ':' . implode(':', $files_path))); $field_name = explode(':', $path); $field_name = $field_name[1]; $options = $data['options']; foreach ($data['fields'] as $_field) { if ($_field['field'] == $field_name) { $options = $_field['options']; break; } } $storage = array(); $storage_type = isset($options['save']) && $options['save'] == 'url'; $upload = piklist_form::save_upload($files_path, $storage, $storage_type); if ($upload) { piklist::array_path_set($new[$data['field']], explode(':', $path), current($upload)); } } } else { $path = array_merge(array($setting, 'name'), array($data['field'])); $storage = is_array($data['request_value']) ? array_filter($data['request_value']) : $data['request_value']; $storage_type = isset($data['options']['save']) && $data['options']['save'] == 'url'; $upload = piklist_form::save_upload($path, $storage, $storage_type); if ($upload) { $new[$data['field']] = $upload; } } } } } } $settings = wp_parse_args($new, $_old); /** * piklist_pre_update_option * Filter settings before they update. * * @param array $settings All settings fields that are getting saved. * @param $setting The setting. * @param array $new The new data in the form (what is currently being saved) * @param array $old The old data in the form (what is currently in the database) * * @since 1.0 */ $settings = apply_filters('piklist_pre_update_option', $settings, $setting, $new, $old); /** * piklist_pre_update_option_$setting * Filter a particular setting before it's update. * * @param $setting The setting to filter. * @param array $settings All settings fields that are getting saved. * @param array $new The new data in the form (what is currently being saved) * @param array $old The old data in the form (what is currently in the database) * * @since 1.0 */ $settings = apply_filters('piklist_pre_update_option_' . $setting, $settings, $new, $old); } else { $settings = $old; } return $settings; }