/** * Handle the edit requests * GET: the edit form * POST: the result view * * @param Request $request * @param Response $response * @param integer $productId * @return Response */ protected function handleEdit(Request $request, Response $response, $productId) { $logger = LoggerSingleton::getInstance()->getLogger(); switch ($request->getMethod()) { case 'GET': $model = new ProductCreationModel(); $product = null; try { $product = $this->service->read($productId); $model->setProduct($product); } catch (NotFoundException $ex) { $logger->notice(__METHOD__ . " (" . __LINE__ . "): " . $ex->getMessage()); return $response->withStatus(302)->withAddedHeader("Location", $this->container->get('router')->pathFor('productList')); } return TwigUtil::render($this->container, $response, 'product/edit_form.twig', $model->jsonSerialize()); case 'POST': $product = $this->productFromCreateEditForm($request); $files = $request->getUploadedFiles(); /** @var UploadedFile $file */ $file = null; if (array_key_exists('image', $files)) { $file = $files['image']; } $model = new ProductCreationModel(); $this->validateProduct($product, $file, $model); if (!$model->isSuccess()) { $model->setProduct($product); return TwigUtil::render($this->container, $response, 'product/edit_form.twig', $model->jsonSerialize()); } $model->setIsSuccess($this->service->update($product)); // default: success $template = 'product/edit_success.twig'; if ($model->isSuccess()) { try { // delete previous image if ($file->getSize()) { foreach (glob(getenv('PRODUCT_IMAGES_DIRECTORY') . '*') as $entry) { if (preg_match("/.*\\/{$productId}\\.[a-z]+\$/", $entry)) { unlink($entry); } } } Utils::writeUploadedFileToPath($file, getenv(PRODUCT_IMAGES_DIRECTORY), $product->getId()); } catch (\RuntimeException $ex) { $model->setIsSuccess(false); $message = "Can't write image file to the upload directory"; $model->appendMessage("{$message}. Please retry again later."); $logger->error(__FILE__ . "(" . __LINE__ . "): {$message} :: " . $ex->getMessage()); $template = 'product/edit_form.twig'; } } else { // error: back to the form $template = 'product/edit_form.twig'; } return TwigUtil::render($this->container, $response, $template, $model->jsonSerialize()); $model->setIsSuccess($this->service->create($product)); return $response->withStatus(501); // Not implemented yet // Not implemented yet default: return $response->withStatus(404); // Should never happen } }
})->setName('login'); // Logout (fake) $app->map(['POST', 'GET'], '/logout', function (Request $request, Response $response) { $_SESSION['user'] = '******'; /** @var RouterInterface $router */ $router = $this->get('router'); return $response->withStatus(302)->withAddedHeader("Location", $router->pathFor('home')); })->setName('logout'); // Index (redirect/login) $app->get('/', function (Request $request, Response $response) { $isAdmin = Utils::isAdmin(); if ($isAdmin) { /** @var RouterInterface $router */ $router = $this->get('router'); return $response->withStatus(302)->withAddedHeader("Location", $router->pathFor('productList')); } return \name\giacomofurlan\TwigUtil::render($this, $response, "home.twig"); })->setName('home'); // 404, silent redirect (home / products list) $app->getContainer()['notFoundHandler'] = function (Container $container) { return function (Request $request, Response $response) use($container) { $isAdmin = Utils::isAdmin(); /** @var RouterInterface $router */ $router = $container->get('router'); $response = $response->withStatus(302); if ($isAdmin) { return $response->withAddedHeader("Location", $router->pathFor('productList')); } return $response->withAddedHeader("Location", $router->pathFor('home')); }; };