Compolomus/BinaryFileStorage

View on GitHub
src/Upload.php

Summary

Maintainability
A
35 mins
Test Coverage
<?php declare(strict_types=1);

namespace Compolomus\BinaryFileStorage;

class Upload
{
    protected $tmpDir;

    public function __construct(string $dir)
    {
        $this->tmpDir = $dir . DIRECTORY_SEPARATOR . 'tmp';
    }

    public function process(array $files): array
    {
        $files = $this->buildFilesArray($files);
        return $this->addtemp($files);
    }

    private function addTemp(array $array): array
    {
        $result = [];
        foreach ($array as $file) {
            if (!empty($file['tmp_name'])) {
                $data = [
                    'tmp' => $file['tmp_name'],
                    'name' => $file['name'],
                    'type' => $file['type'],
                    'size' => $file['size']
                ];
                $obj = new File($data);
                $fileName = $this->tmpDir . DIRECTORY_SEPARATOR . $obj->getMd5();
                $obj->setPath($fileName);
                rename($file['tmp_name'], $fileName);
                $result[] = $obj;
            }
        }
        return $result;
    }

    /**
     * $inputArray => $_FILES
     * rebuild Files array
     * @param array $inputArray
     * @return array
     */

    private function buildFilesArray(array $inputArray): array
    {
        $result = [];
        foreach ($inputArray as $fieldName => $file) {
            foreach ($file as $key => $value) {
                if (!is_array($value)) {
                    $result[$fieldName][$key] = $value;
                } else {
                    array_walk($value, function($v, $k) use (&$result, $key) {
                        $result[$k][$key] = $v;
                    });
                }
            }
        }
        return $result;
    }
}