Mejora de productos
This commit is contained in:
@ -6,24 +6,27 @@ use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Slim\Views\Blade as View;
|
||||
use Carbon\Carbon;
|
||||
use ProVM\Common\Factory\Model as ModelFactory;
|
||||
use ProVM\KI\Producto;
|
||||
|
||||
class Productos {
|
||||
public function __invoke(Request $request, Response $response, View $view, Container $container): Response {
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
public function __invoke(Request $request, Response $response, View $view, ModelFactory $factory): Response {
|
||||
/*$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'productos.json'
|
||||
]);
|
||||
$productos = json_decode(trim(file_get_contents($filename)));
|
||||
$productos = json_decode(trim(file_get_contents($filename)));*/
|
||||
$productos = $factory->find(Producto::class)->many();
|
||||
return $view->render($response, 'admin.productos', compact('productos'));
|
||||
}
|
||||
public function edit(Request $request, Response $response, View $view, Container $container, $producto): Response {
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
public function edit(Request $request, Response $response, View $view, Container $container, ModelFactory $factory, $producto): Response {
|
||||
/*$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'productos.json'
|
||||
]);
|
||||
$id = $producto;
|
||||
$productos = json_decode(trim(file_get_contents($filename)));
|
||||
$producto = $productos[$producto];
|
||||
$producto = $productos[$id];
|
||||
$producto->id = $id;
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
@ -50,7 +53,8 @@ class Productos {
|
||||
}
|
||||
$producto->images []= $file->getFilename();
|
||||
}
|
||||
}
|
||||
}*/
|
||||
$producto = $factory->find(Producto::class)->where([['id', $producto]])->one();
|
||||
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
@ -59,18 +63,18 @@ class Productos {
|
||||
$segmentos = json_decode(trim(file_get_contents($filename)));
|
||||
return $view->render($response, 'admin.producto', compact('producto', 'segmentos'));
|
||||
}
|
||||
public function do_edit(Request $request, Response $response, Container $container, $producto): Response {
|
||||
public function do_edit(Request $request, Response $response, ModelFactory $factory, $producto): Response {
|
||||
$post = $request->getParsedBody();
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
/*$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;
|
||||
$producto = $productos[$producto];*/
|
||||
$producto = $factory->find(Producto::class)->where([['id', $producto]])->one();
|
||||
|
||||
$fields = ['nombre', 'segmento', 'direccion', 'comuna', 'ciudad', 'bono', 'rentabilidad', 'estado',
|
||||
/*$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) {
|
||||
@ -87,28 +91,39 @@ class Productos {
|
||||
if (!isset($producto->tamaño) or $producto->tamaño != $tamaño) {
|
||||
$producto->tamaño = $tamaño;
|
||||
$changed = true;
|
||||
}*/
|
||||
if (isset($post['destacado']) and $post['destacado'] == 'on') {
|
||||
$producto->destacado(true);
|
||||
}
|
||||
$post['tamaños'] = implode(' ', [
|
||||
$post['tamaño_min'],
|
||||
'-',
|
||||
$post['tamaño_max'],
|
||||
'm²'
|
||||
]);
|
||||
$producto->map((object) $post);
|
||||
|
||||
$status1 = false;
|
||||
/*$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);
|
||||
}
|
||||
}*/
|
||||
$producto->save();
|
||||
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
/*$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;
|
||||
if (array_search($producto->id, $destacados) === false) {
|
||||
$destacados []= $producto->id;
|
||||
sort($destacados);
|
||||
$changed = true;
|
||||
}
|
||||
} else {
|
||||
if (($i = array_search($id, $destacados)) !== false) {
|
||||
if (($i = array_search($producto->id, $destacados)) !== false) {
|
||||
unset($destacados[$i]);
|
||||
$destacados = array_values($destacados);
|
||||
$changed = true;
|
||||
@ -117,7 +132,7 @@ class Productos {
|
||||
$status2 = false;
|
||||
if ($changed) {
|
||||
$status2 = (file_put_contents($filename, json_encode($destacados)) !== false);
|
||||
}
|
||||
}*/
|
||||
|
||||
return $response
|
||||
->withHeader('Location', implode('/', [$container->get('urls')->admin, 'productos']));
|
||||
@ -130,10 +145,10 @@ class Productos {
|
||||
$segmentos = json_decode(trim(file_get_contents($filename)));
|
||||
return $view->render($response, 'admin.productos.add', compact('segmentos'));
|
||||
}
|
||||
public function do_add(Request $request, Response $response, Container $container): Response {
|
||||
public function do_add(Request $request, Response $response, ModelFactory $factory): Response {
|
||||
$post = $request->getParsedBody();
|
||||
|
||||
$producto = (object) [];
|
||||
/*$producto = (object) [];
|
||||
$fields = ['nombre', 'segmento', 'direccion', 'comuna', 'ciudad', 'bono', 'rentabilidad', 'estado',
|
||||
'cuota', 'unidades', 'modelos', 'descripcion', 'entrega'];
|
||||
foreach ($fields as $field) {
|
||||
@ -158,26 +173,32 @@ class Productos {
|
||||
]);
|
||||
$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));
|
||||
|
||||
file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES));*/
|
||||
$producto = $factory->create(Producto::class, (object) $post);
|
||||
if (isset($post['destacado']) and $post['destacado'] == 'on') {
|
||||
$id = count($productos) - 1;
|
||||
$producto->destacado(true);
|
||||
}
|
||||
$producto->save();
|
||||
|
||||
/*if (isset($post['destacado']) and $post['destacado'] == 'on') {
|
||||
//$id = count($productos) - 1;
|
||||
$id = $producto->id;
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'destacados.json'
|
||||
]);
|
||||
$destacados = json_decode(trim(file_get_contents($filename)));
|
||||
$destacados []= $id;
|
||||
$destacados []= $proyecto->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 {
|
||||
public function delete(Request $request, Response $response, ModelFactory $factory): Response {
|
||||
$post = $request->getParsedBody();
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
/*$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'productos.json'
|
||||
]);
|
||||
@ -191,6 +212,7 @@ class Productos {
|
||||
mb_strtolower($producto->nombre)
|
||||
]);
|
||||
unset($productos[$id]);
|
||||
$productos = array_values($productos);
|
||||
$status = false;
|
||||
$status |= (file_put_contents($filename, json_encode($productos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false);
|
||||
if (file_exists($folder)) {
|
||||
@ -205,7 +227,10 @@ class Productos {
|
||||
unset($destacados[$i]);
|
||||
$destacados = array_values($destacados);
|
||||
$status |= (file_put_contents($filename, json_encode($destacados)) !== false);
|
||||
}
|
||||
}*/
|
||||
$producto = $factory->find(Producto::class)->where([['id', $post['id']]])->one();
|
||||
$status = $producto->delete();
|
||||
|
||||
$output = [
|
||||
'information' => $post,
|
||||
'estado' => $status
|
||||
@ -215,11 +240,11 @@ class Productos {
|
||||
->withHeader('Content-Type', 'application/json')
|
||||
->withStatus(201);
|
||||
}
|
||||
public function add_image(Request $request, Response $response, Container $container, $producto): Response {
|
||||
public function add_image(Request $request, Response $response, ModelFactory $factory, $producto): Response {
|
||||
$post = $request->getParsedBody();
|
||||
$files = $request->getUploadedFiles();
|
||||
$file = $files['imagen'];
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
/*$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'productos.json'
|
||||
]);
|
||||
@ -239,11 +264,13 @@ class Productos {
|
||||
$folder,
|
||||
$file->getClientFilename()
|
||||
]);
|
||||
$file->moveTo($filename);
|
||||
$file->moveTo($filename);*/
|
||||
$producto = $factory->find(Producto::class)->where([['id', $producto]])->one();
|
||||
$status = $producto->addImagen($file);
|
||||
|
||||
$output = [
|
||||
'informacion' => $id,
|
||||
'estado' => file_exists($filename)
|
||||
'estado' => $status
|
||||
];
|
||||
$response->getBody()->write(json_encode($output));
|
||||
return $response
|
||||
@ -262,9 +289,9 @@ class Productos {
|
||||
mb_strtolower($producto->nombre)
|
||||
]);
|
||||
}
|
||||
public function delete_image(Request $request, Response $response, Container $container, $producto): Response {
|
||||
public function delete_image(Request $request, Response $response, ModelFactory $factory, $producto): Response {
|
||||
$post = $request->getParsedBody();
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
/*$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'productos.json'
|
||||
]);
|
||||
@ -281,7 +308,9 @@ class Productos {
|
||||
$folder,
|
||||
$post['imagen']
|
||||
]);
|
||||
$status = unlink($filename);
|
||||
$status = unlink($filename);*/
|
||||
$producto = $factory->find(Producto::class)->where([['id', $producto]])->one();
|
||||
$status = $producto->deleteImagen($post['imagen']);
|
||||
|
||||
$output = [
|
||||
'estado' => $status
|
||||
@ -299,5 +328,6 @@ class Productos {
|
||||
'images',
|
||||
mb_strtolower($producto->nombre)
|
||||
]);
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ 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 ProVM\Common\Factory\Model as ModelFactory;
|
||||
use ProVM\KI\Producto;
|
||||
|
||||
class Productos {
|
||||
public function __invoke(Request $request, Response $response, Container $container, View $view): Response {
|
||||
@ -15,59 +17,23 @@ class Productos {
|
||||
$segmentos = json_decode(trim(file_get_contents($filename)));
|
||||
return $view->render($response, 'productos.list', compact('segmentos'));
|
||||
}
|
||||
public function show(Request $request, Response $response, Container $container, View $view, $producto): Response {
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'productos.json'
|
||||
]);
|
||||
$productos = json_decode(trim(file_get_contents($filename)));
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'destacados.json'
|
||||
]);
|
||||
$destacados = json_decode(trim(file_get_contents($filename)));
|
||||
$destacado = false;
|
||||
if (array_search($producto, $destacados) !== false) {
|
||||
$destacado = true;
|
||||
}
|
||||
$id = $producto;
|
||||
$producto = $productos[$producto];
|
||||
$producto->destacado = $destacado;
|
||||
$producto->id = $id;
|
||||
$folder = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.public'),
|
||||
'assets',
|
||||
'images',
|
||||
mb_strtolower($producto->nombre)
|
||||
]);
|
||||
$producto->images = [];
|
||||
if (file_exists($folder)) {
|
||||
$files = new \DirectoryIterator($folder);
|
||||
foreach ($files as $file) {
|
||||
if ($file->isDir()) {
|
||||
continue;
|
||||
}
|
||||
$producto->images []= $file->getFilename();
|
||||
}
|
||||
}
|
||||
public function show(Request $request, Response $response, View $view, ModelFactory $factory, $producto): Response {
|
||||
$producto = $factory->find(Producto::class)->where([['id', $producto]])->one();
|
||||
return $view->render($response, 'productos.show', compact('producto'));
|
||||
}
|
||||
public function segmento(Request $request, Response $response, Container $container, $segmento): Response {
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'productos.json'
|
||||
]);
|
||||
$productos = json_decode(trim(file_get_contents($filename)));
|
||||
public function segmento(Request $request, Response $response, ModelFactory $factory, $segmento): Response {
|
||||
$productos = $factory->find(Producto::class);
|
||||
if ($segmento != 'todo') {
|
||||
$productos = array_filter($productos, function($item) use ($segmento) {
|
||||
return (str_replace(' ', '_', mb_strtolower($item->segmento)) == $segmento);
|
||||
});
|
||||
$productos = $productos->where([['segmento', ucwords($segmento)]]);
|
||||
}
|
||||
$productos = $productos->many();
|
||||
$output = [
|
||||
'information' => [
|
||||
'segmento' => $segmento
|
||||
],
|
||||
'productos' => array_keys($productos)
|
||||
'productos' => array_map(function($item) {
|
||||
return $item->id;
|
||||
}, $productos)
|
||||
];
|
||||
$response->getBody()->write(json_encode($output));
|
||||
return $response
|
||||
@ -87,7 +53,8 @@ class Productos {
|
||||
],
|
||||
'destacados' => []
|
||||
];
|
||||
for ($i = ($page - 1) * 4; $i < $page * 4; $i ++) {
|
||||
$n = min(4, count($destacados));
|
||||
for ($i = ($page - 1) * $n; $i < $page * $n; $i ++) {
|
||||
$output['destacados'] []= $destacados[$i];
|
||||
}
|
||||
$response->getBody()->write(json_encode($output));
|
||||
@ -95,42 +62,8 @@ class Productos {
|
||||
->withHeader('Content-Type', 'application/json')
|
||||
->withStatus(201);
|
||||
}
|
||||
public function ficha(Request $request, Response $response, Container $container, View $view, $producto): Response {
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'productos.json'
|
||||
]);
|
||||
$productos = json_decode(trim(file_get_contents($filename)));
|
||||
$filename = implode(DIRECTORY_SEPARATOR, [
|
||||
$container->get('folders.data'),
|
||||
'destacados.json'
|
||||
]);
|
||||
$destacados = json_decode(trim(file_get_contents($filename)));
|
||||
$destacado = false;
|
||||
if (array_search($producto, $destacados) !== false) {
|
||||
$destacado = true;
|
||||
}
|
||||
$id = $producto;
|
||||
$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;
|
||||
}
|
||||
}
|
||||
public function ficha(Request $request, Response $response, View $view, ModelFactory $factory, $producto): Response {
|
||||
$producto = $factory->find(Producto::class)->where([['id', $producto]])->one();
|
||||
return $view->render($response, 'productos.ficha', compact('producto'));
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user