From f914a92df7f0ad3be5b3b9811b89cc1e355673c2 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Mon, 19 Apr 2021 09:23:20 +0200 Subject: [PATCH] wip #4406 @8 --- .gitignore | 3 + app/Http/Controllers/Controller.php | 20 +- app/Models/FeedbackProcess.php | 128 ++++++++ composer.json | 3 +- public/images/logoGV.png | Bin 0 -> 4786 bytes resources/css/app.less | 64 +++- resources/css/dropzone.css | 468 ++++++++++++++++++++++++++++ resources/js/app.js | 43 ++- resources/views/welcome.blade.php | 27 +- routes/web.php | 1 + 10 files changed, 734 insertions(+), 23 deletions(-) create mode 100644 app/Models/FeedbackProcess.php create mode 100644 public/images/logoGV.png create mode 100644 resources/css/dropzone.css diff --git a/.gitignore b/.gitignore index 0ae59f0..17e6805 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ Homestead.json Homestead.yaml npm-debug.log yarn-error.log +yarn.lock +/resources/css/app.css +/resources/css/app.css.map diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index e78f884..615dfe1 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -2,16 +2,32 @@ namespace App\Http\Controllers; +use App\Models\FeedbackProcess; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; +use Symfony\Component\HttpFoundation\FileBag; class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; - public function process(){ - dd($_POST,$_FILES); + public function process() + { + $process = new FeedbackProcess(request()->get('_session')); + $process->process(); + + } + + public function upload() + { + /** @var FileBag $files */ + $files = request()->files; + + $process = new FeedbackProcess(request()->get('_session')); + foreach ($files as $name => $file) { + $process->addFile($name, $file); + } } } diff --git a/app/Models/FeedbackProcess.php b/app/Models/FeedbackProcess.php new file mode 100644 index 0000000..7b88d32 --- /dev/null +++ b/app/Models/FeedbackProcess.php @@ -0,0 +1,128 @@ +setPath($path); + if (!file_exists($path)) { + if (!mkdir($path, 0777, true) && !is_dir($path)) { + throw new \RuntimeException(sprintf('Directory "%s" was not created', $path)); + } + } else { + $this->loadSession(); + } + } + + public function loadSession() + { + $jsonFile = $this->_getSessionFile(); + if (file_exists($jsonFile)) { + $json = json_decode(file_get_contents($jsonFile), true); + $this->setTemplate($json['template']); + $this->setFeedbacks($json['feedbacks']); + } + + } + + protected function _getSessionFile() + { + return $this->getPath() . '/session.json'; + } + + /** + * @param $name + * @param $uploadedFile UploadedFile + */ + public function addFile($name, $uploadedFile) + { + $target = $uploadedFile->move($this->getPath()); + + if ($name === 'template') { + $this->setTemplate($target->getPathname()); + } else if ($name === 'feedbacks') { + $this->addFeedback($target->getPathname()); + } + } + + /** + * @param mixed $path + */ + public function setPath($path): void + { + $this->_path = $path; + } + + /** + * @return mixed + */ + public function getPath() + { + return $this->_path; + } + + /** + * @return mixed + */ + public function getTemplate() + { + return $this->_template; + } + + /** + * @param mixed $template + */ + public function setTemplate($template): void + { + $this->_template = $template; + } + + /** + * @return array + */ + public function getFeedbacks(): array + { + return $this->_feedbacks; + } + + /** + * @param array $feedbacks + */ + public function setFeedbacks(array $feedbacks): void + { + $this->_feedbacks = $feedbacks; + } + + public function addFeedback($feedback): void + { + $this->_feedbacks[] = $feedback; + } + + public function __destruct() + { + $this->saveSession(); + } + + /** + * @throws \JsonException + */ + public function saveSession() + { + file_put_contents($this->_getSessionFile(), json_encode(['template' => $this->getTemplate(), 'feedbacks' => $this->getFeedbacks()], JSON_THROW_ON_ERROR)); + } + + public function process() + { + dd($this); + } +} diff --git a/composer.json b/composer.json index b5cbe09..c9a7482 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,8 @@ "guzzlehttp/guzzle": "^7.0.1", "laravel/framework": "^8.12", "laravel/tinker": "^2.5", - "phpoffice/phpspreadsheet": "^1.17" + "phpoffice/phpspreadsheet": "^1.17", + "ext-json": "*" }, "require-dev": { "facade/ignition": "^2.5", diff --git a/public/images/logoGV.png b/public/images/logoGV.png new file mode 100644 index 0000000000000000000000000000000000000000..1775e9d47bedd9dfc973e2478ef3d5839c1b1e91 GIT binary patch literal 4786 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 Ranking App - +