Admin producto y mirar mapa

This commit is contained in:
2020-05-27 13:39:14 -04:00
parent 31f308f5c7
commit 24c74d2887
9 changed files with 294 additions and 41 deletions

View File

@ -5,6 +5,7 @@ use Psr\Container\ContainerInterface as Container;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Blade as View;
use Carbon\Carbon;
class Productos {
public function __invoke(Request $request, Response $response, View $view, Container $container): Response {
@ -60,6 +61,66 @@ class Productos {
}
public function do_edit(Request $request, Response $response, Container $container, $producto): Response {
$post = $request->getParsedBody();
$filename = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.data'),
'productos.json'
]);
$id = $producto;
$productos = json_decode(trim(file_get_contents($filename)));
$producto = $productos[$producto];
$changed = false;
$fields = ['nombre', 'segmento', 'direccion', 'comuna', 'ciudad', 'bono', 'rentabilidad', 'estado',
'cuota', 'unidades', 'modelos', 'descripcion', 'entrega'];
foreach ($fields as $field) {
if (!isset($producto->$field) or $post[$field] != $producto->$field) {
$producto->$field = $post[$field];
$changed = true;
}
}
$valor = number_format($post['valor'], 0, ',', '.');
if (!isset($producto->valor) or $producto->valor != $valor) {
$producto->valor = $valor;
$changed = true;
}
$tamaño = $post['tamaño_min'] . ' - ' . $post['tamaño_max'] . ' m²';
if (!isset($producto->tamaño) or $producto->tamaño != $tamaño) {
$producto->tamaño = $tamaño;
$changed = true;
}
$status1 = false;
if ($changed) {
$productos[$id] = $producto;
$status1 = (file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false);
}
$filename = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.data'),
'destacados.json'
]);
$destacados = json_decode(trim(file_get_contents($filename)));
$changed = false;
if (isset($post['destacado']) and $post['destacado'] == 'on') {
if (array_search($id, $destacados) === false) {
$destacados []= $id;
sort($destacados);
$changed = true;
}
} else {
if (($i = array_search($id, $destacados)) !== false) {
unset($destacados[$i]);
$destacados = array_values($destacados);
$changed = true;
}
}
$status2 = false;
if ($changed) {
$status2 = (file_put_contents($filename, json_encode($destacados)) !== false);
}
return $response
->withHeader('Location', implode('/', [$container->get('urls')->admin, 'productos']));
}
public function add(Request $request, Response $response, View $view, Container $container): Response {
$filename = implode(DIRECTORY_SEPARATOR, [
@ -71,17 +132,172 @@ class Productos {
}
public function do_add(Request $request, Response $response, Container $container): Response {
$post = $request->getParsedBody();
$producto = (object) [];
$fields = ['nombre', 'segmento', 'direccion', 'comuna', 'ciudad', 'bono', 'rentabilidad', 'estado',
'cuota', 'unidades', 'modelos', 'descripcion', 'entrega'];
foreach ($fields as $field) {
$producto->$field = $post[$field];
}
$valor = number_format($post['valor'], 0, ',', '.');
$producto->valor = $valor;
$tamaño = $post['tamaño_min'] . ' - ' . $post['tamaño_max'] . ' m²';
$producto->tamaño = $tamaño;
$f = Carbon::today();
$producto->publicacion = implode(' ', [
$f->day,
'de',
ucfirst($f->locale('es')->isoFormat('MMMM')) . ',',
$f->year
]);
$filename = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.data'),
'productos.json'
]);
$productos = json_decode(trim(file_get_contents($filename)));
$productos []= $producto;
file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES));
if (isset($post['destacado']) and $post['destacado'] == 'on') {
$id = count($productos) - 1;
$filename = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.data'),
'destacados.json'
]);
$destacados = json_decode(trim(file_get_contents($filename)));
$destacados []= $id;
sort($destacados);
file_put_contents($filename, json_encode($destacados));
}
return $response
->withHeader('Location', implode('/', [$container->get('urls')->admin, 'productos']));
}
public function delete(Request $request, Response $response, Container $container): Response {
$post = $request->getParsedBody();
$filename = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.data'),
'productos.json'
]);
$id = $post['id'];
$productos = json_decode(trim(file_get_contents($filename)));
$producto = $productos[$id];
$folder = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.public'),
'assets',
'images',
mb_strtolower($producto->nombre)
]);
unset($productos[$id]);
$status = false;
$status |= (file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false);
if (file_exists($folder)) {
$status |= rmdir($folder);
}
$filename = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.data'),
'destacados.json'
]);
$destacados = json_decode(trim(file_get_contents($filename)));
if (($i = array_search($id, $destacados)) !== false) {
unset($destacados[$i]);
$destacados = array_values($destacados);
$status |= (file_put_contents($filename, json_encode($destacados)) !== false);
}
$output = [
'information' => $post,
'estado' => $status
];
$response->getBody()->write(json_encode($output));
return $response
->withHeader('Content-Type', 'application/json')
->withStatus(201);
}
public function add_image(Request $request, Response $response, Container $container, $producto): Response {
$post = $request->getParsedBody();
$files = $request->getUploadedFiles();
$file = $files['imagen'];
$filename = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.data'),
'productos.json'
]);
$id = $producto;
$productos = json_decode(trim(file_get_contents($filename)));
$producto = $productos[$producto];
$folder = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.public'),
'assets',
'images',
mb_strtolower($producto->nombre)
]);
if (!file_exists($folder)) {
mkdir($folder);
}
$filename = implode(DIRECTORY_SEPARATOR, [
$folder,
$file->getClientFilename()
]);
$file->moveTo($filename);
$output = [
'informacion' => $id,
'estado' => file_exists($filename)
];
$response->getBody()->write(json_encode($output));
return $response
->withHeader('Content-Type', 'application/json')
->withStatus(201);
}
public function set_video(Request $request, Response $response, Container $container, $producto): Response {
$post = $request->getParsedBody();
$files = $request->getUploadedFiles();
die();
$file = $files['video'];
$folder = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.public'),
'assets',
'images',
mb_strtolower($producto->nombre)
]);
}
public function delete_image(Request $request, Response $response, Container $container, $producto): Response {
$post = $request->getParsedBody();
$filename = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.data'),
'productos.json'
]);
$id = $producto;
$productos = json_decode(trim(file_get_contents($filename)));
$producto = $productos[$producto];
$folder = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.public'),
'assets',
'images',
mb_strtolower($producto->nombre)
]);
$filename = implode(DIRECTORY_SEPARATOR, [
$folder,
$post['imagen']
]);
$status = unlink($filename);
$output = [
'estado' => $status
];
$response->getBody()->write(json_encode($output));
return $response
->withHeader('Content-Type', 'application/json')
->withStatus(201);
}
public function delete_video(Request $request, Response $response, Container $container, $producto): Response {
$post = $request->getParsedBody();
$folder = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.public'),
'assets',
'images',
mb_strtolower($producto->nombre)
]);
}
}

View File

@ -40,13 +40,15 @@ class Productos {
'images',
mb_strtolower($producto->nombre)
]);
$files = new \DirectoryIterator($folder);
$producto->images = [];
foreach ($files as $file) {
if ($file->isDir()) {
continue;
if (file_exists($folder)) {
$files = new \DirectoryIterator($folder);
foreach ($files as $file) {
if ($file->isDir()) {
continue;
}
$producto->images []= $file->getFilename();
}
$producto->images []= $file->getFilename();
}
return $view->render($response, 'productos.show', compact('producto'));
}
@ -112,6 +114,23 @@ class Productos {
$producto = $productos[$producto];
$producto->destacado = $destacado;
$producto->id = $id;
$folder = implode(DIRECTORY_SEPARATOR, [
$container->get('folders.public'),
'assets',
'images',
mb_strtolower($producto->nombre)
]);
$producto->imagen = 'default.jpg';
if (file_exists($folder)) {
$files = new \DirectoryIterator($folder);
foreach ($files as $file) {
if ($file->isDir()) {
continue;
}
$producto->imagen = implode('/', [mb_strtolower($producto->nombre), $file->getFilename()]);
break;
}
}
return $view->render($response, 'productos.ficha', compact('producto'));
}
}