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;
 }
Esempio n. 2
0
 /**
  * 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;
 }