| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- <?php
- /**
- * FormDataProcessor
- * PHP version 7.4
- *
- * @category Class
- * @package WikipaliApi
- * @author OpenAPI Generator team
- * @link https://openapi-generator.tech
- */
- /**
- * MINT API
- *
- * International Academy Of Pali Tipitaka(国际巴利三藏学院) 由 `php openapi/scripts/generate.php` 依据 api-v13 的路由与控制器源码生成。 响应统一封装为 `{ok, message, data}`;`ok=false` 时 `message` 为错误信息。
- *
- * The version of the OpenAPI document: 2026.10.8
- * Generated by: https://openapi-generator.tech
- * Generator version: 7.25.0
- */
- /**
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
- namespace WikipaliApi;
- use ArrayAccess;
- use DateTime;
- use GuzzleHttp\Psr7\Utils;
- use Psr\Http\Message\StreamInterface;
- use SplFileObject;
- use WikipaliApi\Model\ModelInterface;
- /**
- * FormDataProcessor Class Doc Comment
- *
- * @category Class
- * @package WikipaliApi
- * @author OpenAPI Generator team
- * @link https://openapi-generator.tech
- */
- class FormDataProcessor
- {
- /**
- * Tags whether payload passed to ::prepare() contains one or more
- * SplFileObject or stream values.
- */
- public bool $has_file = false;
- /**
- * Take value and turn it into an array suitable for inclusion in
- * the http body (form parameter). If it's a string, pass through unchanged
- * If it's a datetime object, format it in ISO8601
- *
- * @param array<string|bool|array|DateTime|ArrayAccess|SplFileObject> $values the value of the form parameter
- *
- * @return array [key => value] of formdata
- */
- public function prepare(array $values): array
- {
- $this->has_file = false;
- $result = [];
- foreach ($values as $k => $v) {
- if ($v === null) {
- continue;
- }
- $result[$k] = $this->makeFormSafe($v);
- }
- return $result;
- }
- /**
- * Flattens a multi-level array of data and generates a single-level array
- * compatible with formdata - a single-level array where the keys use bracket
- * notation to signify nested data.
- *
- * credit: https://github.com/FranBar1966/FlatPHP
- */
- public static function flatten(array $source, string $start = ''): array
- {
- $opt = [
- 'prefix' => '[',
- 'suffix' => ']',
- 'suffix-end' => true,
- 'prefix-list' => '[',
- 'suffix-list' => ']',
- 'suffix-list-end' => true,
- ];
- if ($start === '') {
- $currentPrefix = '';
- $currentSuffix = '';
- $currentSuffixEnd = false;
- } elseif (array_is_list($source)) {
- $currentPrefix = $opt['prefix-list'];
- $currentSuffix = $opt['suffix-list'];
- $currentSuffixEnd = $opt['suffix-list-end'];
- } else {
- $currentPrefix = $opt['prefix'];
- $currentSuffix = $opt['suffix'];
- $currentSuffixEnd = $opt['suffix-end'];
- }
- $currentName = $start;
- $result = [];
- foreach ($source as $key => $val) {
- $currentName .= $currentPrefix.$key;
- if (is_array($val) && !empty($val)) {
- $currentName .= $currentSuffix;
- $result += self::flatten($val, $currentName);
- } else {
- if ($currentSuffixEnd) {
- $currentName .= $currentSuffix;
- }
- if (is_resource($val)) {
- $result[$currentName] = $val;
- } else {
- $result[$currentName] = ObjectSerializer::toString($val);
- }
- }
- $currentName = $start;
- }
- return $result;
- }
- /**
- * formdata must be limited to scalars or arrays of scalar values,
- * or a resource for a file upload. Here we iterate through all available
- * data and identify how to handle each scenario
- */
- protected function makeFormSafe($value)
- {
- if ($value instanceof SplFileObject) {
- return $this->processFiles([$value])[0];
- }
- if (is_resource($value)) {
- $this->has_file = true;
- return $value;
- }
- if ($value instanceof ModelInterface) {
- return $this->processModel($value);
- }
- if (is_array($value) || (is_object($value) && !$value instanceof \DateTimeInterface)) {
- $data = [];
- foreach ($value as $k => $v) {
- $data[$k] = $this->makeFormSafe($v);
- }
- return $data;
- }
- return ObjectSerializer::toString($value);
- }
- /**
- * We are able to handle nested ModelInterface. We do not simply call
- * json_decode(json_encode()) because any given model may have binary data
- * or other data that cannot be serialized to a JSON string
- */
- protected function processModel(ModelInterface $model): array
- {
- $result = [];
- foreach ($model::openAPITypes() as $name => $type) {
- $value = $model->offsetGet($name);
- if ($value === null) {
- continue;
- }
- if (strpos($type, '\SplFileObject') !== false) {
- $file = is_array($value) ? $value : [$value];
- $result[$name] = $this->processFiles($file);
- continue;
- }
- if ($value instanceof ModelInterface) {
- $result[$name] = $this->processModel($value);
- continue;
- }
- if (is_array($value) || is_object($value)) {
- $result[$name] = $this->makeFormSafe($value);
- continue;
- }
- $result[$name] = ObjectSerializer::toString($value);
- }
- return $result;
- }
- /**
- * Handle file data
- */
- protected function processFiles(array $files): array
- {
- $this->has_file = true;
- $result = [];
- foreach ($files as $i => $file) {
- if (is_array($file)) {
- $result[$i] = $this->processFiles($file);
- continue;
- }
- if ($file instanceof StreamInterface) {
- $result[$i] = $file;
- continue;
- }
- if ($file instanceof SplFileObject) {
- $result[$i] = $this->tryFopen($file);
- }
- }
- return $result;
- }
- private function tryFopen(SplFileObject $file)
- {
- return Utils::tryFopen($file->getRealPath(), 'rb');
- }
- }
|