protected function create_experiment() { $group = group::read($this->ID); if (!empty($group['variants'])) { $variants = helpers::make_array_values_numeric($group['variants'], true); $creator = new CreateExperiment($variants, $this->ID, $this->bandit); $this->experiment = $creator->get_experiment(); } }
/** * Validate item config * * @since 0.4.0 * * @access protected * * @param array $data Item config * * @return array|\WP_Error Item config array if valid, WP_Error if not */ protected static function validate_config($data) { foreach (self::required() as $key) { if (!isset($data[$key])) { return new \WP_Error('ingot-invalid-config', __(sprintf('Groups require the field: %s', $key), 'ingot'), $data); } } if (false == self::validate_type($data)) { return new \WP_Error('ingot-invalid-group-type', __('Invalid group type', 'ingot'), $data); } if ('click' == $data['type'] && false == self::validate_click_type($data)) { return new \WP_Error('ingot-invalid-click-group-type', __('Invalid click group type', 'ingot'), $data); } //@todo this validation for price group subtypes if ('price' == $data['type'] && 1 == 3) { return new \WP_Error('ingot-invalid-click-group-type', __('Invalid price group type', 'ingot'), $data); } foreach (self::get_all_fields() as $field) { if (!in_array($field, array('variants', 'meta', 'levers'))) { $data[$field] = (string) $data[$field]; } else { if (!is_array($data[$field])) { $data[$field] = array(); } } } $data = self::prepare_meta($data); if (is_wp_error($data)) { return $data; } $data['variants'] == helpers::make_array_values_numeric($data['variants'], true); return $data; }
/** * Validate and sanitize meta array * * @since 0.4.0 * * @param array $data * * @return array|\WP_Error Prepared array or WP_Error if invalid */ protected static function prepare_meta($data) { if (!isset($data['meta']) || empty($data['meta'] || !is_array($data['meta']))) { $data['meta'] = []; return $data; } if ('click' == $data['type']) { if ('destination' == $data['sub_type']) { return destination::prepare_meta($data); } foreach (['color', 'background_color', 'color_test_text', 'link'] as $field) { if (isset($data['meta'][$field]) && !empty($data['meta'][$field]) && is_string($data['meta'][$field])) { if ('link' == $field) { if (filter_var($data['meta'][$field], FILTER_VALIDATE_URL)) { $data['meta'][$field] = esc_url_raw($data['meta'][$field]); } else { return new \WP_Error('ingot-invalid-config-click-link', __('Click groups must have a valid link.', 'ingot')); } } else { $data['meta'][$field] = strip_tags($data['meta'][$field]); } } else { $data['meta'][$field] = ''; } } } if ('price' == $data['type']) { if (!isset($data['meta']['product_ID'])) { return new \WP_Error('ingot-invalid-config-no-product-id', __('Ingot price tests must set product ID in meta.product_ID', 'ingot')); } if (isset($data['meta']['variable_prices']) && is_array($data['meta']['variable_prices'])) { $data['meta']['variable_prices'] = helpers::make_array_values_numeric($data['meta']['variable_prices']); } else { $data['meta']['variable_prices'] = []; } } return $data; }
/** * Utility function to make all keys of an array integers (recursively) * * @since 0.0.6 * * @param $array * * @return array */ public function make_array_values_numeric($array) { return \ingot\testing\utility\helpers::make_array_values_numeric($array); }
/** * @return array */ private function current_meta() { return helpers::make_array_values_numeric(get_post_meta($this->post->ID, $this->meta_key, false)); }