diff --git a/bootstrap/web/setup.php b/bootstrap/web/setup.php index dd387e6..e8d9252 100644 --- a/bootstrap/web/setup.php +++ b/bootstrap/web/setup.php @@ -13,7 +13,8 @@ return [ 'assets' => $c->get('urls.assets'), 'images' => implode('/', [$c->get('urls.assets'), 'images']), 'styles' => $c->get('urls.styles'), - 'scripts' => $c->get('urls.scripts') + 'scripts' => $c->get('urls.scripts'), + 'admin' => implode('/', [$c->get('urls.base'), 'admin']) ]; }, 'assets' => function(Container $c) { diff --git a/common/Controller/Web/Admin/Faq.php b/common/Controller/Web/Admin/Faq.php new file mode 100644 index 0000000..a7700a2 --- /dev/null +++ b/common/Controller/Web/Admin/Faq.php @@ -0,0 +1,90 @@ +get('folders.data'), + 'faqs.json' + ]); + $faqs = json_decode(trim(file_get_contents($filename))); + return $view->render($response, 'admin.faq', compact('faqs')); + } + public function add(Request $request, Response $response, Container $container) { + $post = $request->getParsedBody(); + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'faqs.json' + ]); + $faqs = json_decode(trim(file_get_contents($filename))); + + $faq = (object) [ + 'titulo' => '', + 'contenido' => '' + ]; + if (isset($post['id']) and isset($faqs[$post['id']])) { + $faq = $faqs[$post['id']]; + } + + $changed = false; + foreach ($faq as $k => $v) { + if ($v != $post[$k]) { + $faq->$k = $post[$k]; + $changed = true; + } + } + + if (isset($post['id'])) { + $faqs[$post['id']] = $faq; + } else { + $faqs []= $faq; + } + + $status = false; + if ($changed) { + $faqs = array_values($faqs); + $status = (file_put_contents($filename, json_encode($faqs, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false); + } + + $output = [ + 'informacion' => $post, + 'estado' => $status, + 'faqs' => $faqs + ]; + $response->getBody()->write(json_encode($output)); + return $response + ->withHeader('Content-Type', 'application/json') + ->withStatus(201); + } + public function delete(Request $request, Response $response, Container $container) { + $post = $request->getParsedBody(); + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'faqs.json' + ]); + $faqs = json_decode(trim(file_get_contents($filename))); + + $status = false; + if (isset($post['id']) and isset($faqs[$post['id']])) { + unset($faqs[$post['id']]); + + $faqs = array_values($faqs); + $status = (file_put_contents($filename, json_encode($faqs, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false); + } + + $output = [ + 'informacion' => $post, + 'estado' => $status, + 'faqs' => $faqs + ]; + $response->getBody()->write(json_encode($output)); + return $response + ->withHeader('Content-Type', 'application/json') + ->withStatus(201); + } +} diff --git a/common/Controller/Web/Admin/Home.php b/common/Controller/Web/Admin/Home.php new file mode 100644 index 0000000..9ccbbcf --- /dev/null +++ b/common/Controller/Web/Admin/Home.php @@ -0,0 +1,121 @@ +get('folders.data'), + 'avisos.json' + ]); + $avisos = json_decode(trim(file_get_contents($filename))); + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'resumen.json' + ]); + $resumen = json_decode(trim(file_get_contents($filename))); + return $view->render($response, 'admin.home', compact('avisos', 'resumen')); + } + public function add(Request $request, Response $response, Container $container): Response { + $post = $request->getParsedBody(); + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'avisos.json' + ]); + $avisos = json_decode(trim(file_get_contents($filename))); + + if (isset($post['estado'])) { + $avisos->activo = (bool) $post['estado']; + } else { + $aviso = (object) [ + 'titulo' => '', + 'contenido' => '' + ]; + if (isset($post['id'])) { + $aviso = $avisos->avisos[$post['id']]; + } + + foreach ($aviso as $k => $v) { + if ($v != $post[$k]) { + $aviso->$k = $post[$k]; + } + } + + if (isset($post['id'])) { + $avisos->avisos[$post['id']] = $aviso; + } else { + $avisos->avisos []= $aviso; + } + } + + $status = (file_put_contents($filename, json_encode($avisos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false); + + $output = [ + 'informacion' => $post, + 'estado' => $status, + 'avisos' => $avisos + ]; + $response->getBody()->write(json_encode($output)); + return $response + ->withHeader('Content-Type', 'application/json') + ->withStatus(201); + } + public function delete(Request $request, Response $response, Container $container): Response { + $post = $request->getParsedBody(); + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'avisos.json' + ]); + $avisos = json_decode(trim(file_get_contents($filename))); + + if (isset($avisos->avisos[$post['id']])) { + unset($avisos->avisos[$post['id']]); + $avisos->avisos = array_values($avisos->avisos); + } + + $status = (file_put_contents($filename, json_encode($avisos, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false); + + $output = [ + 'informacion' => $post, + 'estado' => $status, + 'avisos' => $avisos + ]; + $response->getBody()->write(json_encode($output)); + return $response + ->withHeader('Content-Type', 'application/json') + ->withStatus(201); + } + public function edit(Request $request, Response $response, Container $container): Response { + $post = $request->getParsedBody(); + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'resumen.json' + ]); + $resumen = json_decode(trim(file_get_contents($filename))); + + $ind = $resumen[$post['id']]; + + foreach ($ind as $k => $v) { + if ($v != $post[$k]) { + $ind->$k = $post[$k]; + } + } + $resumen[$post['id']] = $ind; + + $status = (file_put_contents($filename, json_encode($resumen, \JSON_PRETTY_PRINT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES)) !== false); + + $output = [ + 'informacion' => $post, + 'estado' => $status, + 'resumen' => $resumen + ]; + $response->getBody()->write(json_encode($output)); + return $response + ->withHeader('Content-Type', 'application/json') + ->withStatus(201); + } +} diff --git a/common/Controller/Web/Admin/Nosotros.php b/common/Controller/Web/Admin/Nosotros.php new file mode 100644 index 0000000..c9a8653 --- /dev/null +++ b/common/Controller/Web/Admin/Nosotros.php @@ -0,0 +1,39 @@ +get('folders.data'), + 'nosotros.json' + ]); + $nosotros = trim(json_decode(trim(file_get_contents($filename)))); + return $view->render($response, 'admin.nosotros', compact('nosotros')); + } + public function guardar(Request $request, Response $response, Container $container) { + $post = $request->getParsedBody(); + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'nosotros.json' + ]); + $nosotros = trim(json_decode(trim(file_get_contents($filename)))); + $data = trim(json_decode(json_encode($post['nosotros']))); + + $status = false; + if ($nosotros != $data) { + $status = (file_put_contents($filename, json_encode($post['nosotros'])) !== false); + } + $code = 301; + if ($status) { + $code = 302; + } + return $response + ->withHeader('Location', implode('/', [$container->get('urls')->admin, 'nosotros'])) + ->withStatus($code); + } +} diff --git a/common/Controller/Web/Admin/Productos.php b/common/Controller/Web/Admin/Productos.php new file mode 100644 index 0000000..0a119de --- /dev/null +++ b/common/Controller/Web/Admin/Productos.php @@ -0,0 +1,87 @@ +get('folders.data'), + 'productos.json' + ]); + $productos = json_decode(trim(file_get_contents($filename))); + 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, [ + $container->get('folders.data'), + 'productos.json' + ]); + $id = $producto; + $productos = json_decode(trim(file_get_contents($filename))); + $producto = $productos[$producto]; + $producto->id = $id; + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'destacados.json' + ]); + $destacados = json_decode(trim(file_get_contents($filename))); + $destacado = false; + if (array_search($id, $destacados) !== false) { + $destacado = true; + } + $producto->destacado = $destacado; + $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(); + } + } + + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'segmentos.json' + ]); + $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 { + $post = $request->getParsedBody(); + } + public function add(Request $request, Response $response, View $view, Container $container): Response { + $filename = implode(DIRECTORY_SEPARATOR, [ + $container->get('folders.data'), + 'segmentos.json' + ]); + $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 { + $post = $request->getParsedBody(); + } + public function add_image(Request $request, Response $response, Container $container, $producto): Response { + $post = $request->getParsedBody(); + } + public function set_video(Request $request, Response $response, Container $container, $producto): Response { + $post = $request->getParsedBody(); + } + public function delete_image(Request $request, Response $response, Container $container, $producto): Response { + $post = $request->getParsedBody(); + } + public function delete_video(Request $request, Response $response, Container $container, $producto): Response { + $post = $request->getParsedBody(); + } +} diff --git a/public/assets/styles/admin.css b/public/assets/styles/admin.css new file mode 100644 index 0000000..458d060 --- /dev/null +++ b/public/assets/styles/admin.css @@ -0,0 +1,19 @@ +/* line 3, ../../Workspace/git/provm/capitalinvestments/resources/assets/sass/admin.scss */ +#admin { + background-color: #f4f4f4; + padding-top: 3rem; + padding-bottom: 2rem; +} + +/* line 8, ../../Workspace/git/provm/capitalinvestments/resources/assets/sass/admin.scss */ +#admin .button { + background-color: #429ab7; + color: white; +} + +/* line 13, ../../Workspace/git/provm/capitalinvestments/resources/assets/sass/admin.scss */ +#admin .container > .header, #admin .container > .grid > .column > .header, #admin .container > .grid > .row > .column > .header { + padding-bottom: 2rem; +} + +/*# sourceMappingURL=admin.css.map */ \ No newline at end of file diff --git a/public/assets/styles/admin.map b/public/assets/styles/admin.map new file mode 100644 index 0000000..c0e7bc2 --- /dev/null +++ b/public/assets/styles/admin.map @@ -0,0 +1,14 @@ +{ + "version": 3, + "file": "admin.css", + "sources": [ + "../../../resources/assets/sass/admin.scss", + "../../../resources/assets/sass/_pallete.scss" + ], + "sourcesContent": [ + "@import 'pallete';\r\n\r\n#admin {\r\n background-color: $gris-claro;\r\n padding-top: 3rem;\r\n padding-bottom: 2rem;\r\n\r\n .button {\r\n background-color: $marca;\r\n color: white;\r\n }\r\n\r\n .container>.header, .container>.grid>.column>.header, .container>.grid>.row>.column>.header {\r\n padding-bottom: 2rem;\r\n }\r\n}\r\n", + "$marca: #429ab7;\r\n$gris-oscuro: #808284;\r\n$gris-medio: #a7a9ab;\r\n$gris-claro: #f4f4f4;\r\n$azul-oscuro: #0d103c;\r\n" + ], + "names": [], + "mappings": ";AAEA,AAAA,MAAM,CAAC;EACL,gBAAgB,ECAL,OAAO;EDClB,WAAW,EAAE,IAAI;EACjB,cAAc,EAAE,IAAI;CAUrB;;;AAbD,AAKE,MALI,CAKJ,OAAO,CAAC;EACN,gBAAgB,ECRZ,OAAO;EDSX,KAAK,EAAE,KAAK;CACb;;;AARH,AAUE,MAVI,CAUJ,UAAU,GAAC,OAAO,EAVpB,MAAM,CAUgB,UAAU,GAAC,KAAK,GAAC,OAAO,GAAC,OAAO,EAVtD,MAAM,CAUkD,UAAU,GAAC,KAAK,GAAC,IAAI,GAAC,OAAO,GAAC,OAAO,CAAC;EAC1F,cAAc,EAAE,IAAI;CACrB" +} \ No newline at end of file diff --git a/resources/assets/sass/admin.scss b/resources/assets/sass/admin.scss new file mode 100644 index 0000000..af33bb0 --- /dev/null +++ b/resources/assets/sass/admin.scss @@ -0,0 +1,16 @@ +@import 'pallete'; + +#admin { + background-color: $gris-claro; + padding-top: 3rem; + padding-bottom: 2rem; + + .button { + background-color: $marca; + color: white; + } + + .container>.header, .container>.grid>.column>.header, .container>.grid>.row>.column>.header { + padding-bottom: 2rem; + } +} diff --git a/resources/routes/web/admin.php b/resources/routes/web/admin.php new file mode 100644 index 0000000..517d4e9 --- /dev/null +++ b/resources/routes/web/admin.php @@ -0,0 +1,16 @@ +group('/admin', function($app) { + $folder = implode(DIRECTORY_SEPARATOR, [ + __DIR__, + 'admin' + ]); + if (file_exists($folder)) { + $files = new DirectoryIterator($folder); + foreach ($files as $file) { + if ($file->isDir()) { + continue; + } + include_once $file->getRealPath(); + } + } +}); diff --git a/resources/routes/web/admin/faqs.php b/resources/routes/web/admin/faqs.php new file mode 100644 index 0000000..ee19b13 --- /dev/null +++ b/resources/routes/web/admin/faqs.php @@ -0,0 +1,8 @@ +group('/faqs', function($app) { + $app->post('/add', [Faq::class, 'add']); + $app->post('/delete', [Faq::class, 'delete']); + $app->get('[/]', Faq::class); +}); diff --git a/resources/routes/web/admin/home.php b/resources/routes/web/admin/home.php new file mode 100644 index 0000000..6489285 --- /dev/null +++ b/resources/routes/web/admin/home.php @@ -0,0 +1,13 @@ +group('/home', function($app) { + $app->group('/avisos', function($app) { + $app->post('/add', [Home::class, 'add']); + $app->post('/delete', [Home::class, 'delete']); + }); + $app->group('/resumen', function($app) { + $app->post('/edit', [Home::class, 'edit']); + }); + $app->get('[/]', Home::class); +}); diff --git a/resources/routes/web/admin/nosotros.php b/resources/routes/web/admin/nosotros.php new file mode 100644 index 0000000..11c51af --- /dev/null +++ b/resources/routes/web/admin/nosotros.php @@ -0,0 +1,7 @@ +group('/nosotros', function($app) { + $app->post('[/]', [Nosotros::class, 'guardar']); + $app->get('[/]', Nosotros::class); +}); diff --git a/resources/routes/web/admin/productos.php b/resources/routes/web/admin/productos.php new file mode 100644 index 0000000..2e3390e --- /dev/null +++ b/resources/routes/web/admin/productos.php @@ -0,0 +1,24 @@ +group('/productos', function($app) { + $app->group('/add', function($app) { + $app->get('[/]', [Productos::class, 'add']); + $app->post('[/]', [Productos::class, 'do_add']); + }); + $app->get('[/]', Productos::class); +}); +$app->group('/producto/{producto}', function($app) { + $app->group('/imagen', function($app) { + $app->post('/delete', [Productos::class, 'delete_image']); + }); + $app->group('/imagenes', function($app) { + $app->post('/add', [Productos::class, 'add_image']); + }); + $app->group('/video', function($app) { + $app->post('/set', [Productos::class, 'set_video']); + $app->post('/delete', [Productos::class, 'delete_video']); + }); + $app->post('[/]', [Productos::class, 'do_edit']); + $app->get('[/]', [Productos::class, 'edit']); +}); diff --git a/resources/views/admin/faq.blade.php b/resources/views/admin/faq.blade.php new file mode 100644 index 0000000..aa8fc7c --- /dev/null +++ b/resources/views/admin/faq.blade.php @@ -0,0 +1,97 @@ +@extends('admin.layout.base') + +@section('page_content') +
+
+
+ FAQ's +
+ + + + + + + + + @foreach($faqs as $i => $faq) + + + + @endforeach + +
PreguntaBorrar
{{$faq->titulo}} +
+
+ +
+ + +
+
+ + +
+ + +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/admin/home.blade.php b/resources/views/admin/home.blade.php new file mode 100644 index 0000000..e91d023 --- /dev/null +++ b/resources/views/admin/home.blade.php @@ -0,0 +1,173 @@ +@extends('admin.layout.base') + +@section('page_content') +
+
+
+
+ AVISOS +
+ + + + + + + + + @foreach ($avisos->avisos as $i => $aviso) + + + + + + @endforeach + + + + + + +
PreguntaBorrar
+
+ +
+
+ +
+
+ +
+ + +
+
+
+
+ + +
+
+
+
+
+
+ INDICADORES +
+
+ + + + + + + + + + @foreach ($resumen as $i => $indicador) + + + + + + @endforeach + +
EnunciadoCantidad
+
+
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/admin/layout/base.blade.php b/resources/views/admin/layout/base.blade.php new file mode 100644 index 0000000..3b0257e --- /dev/null +++ b/resources/views/admin/layout/base.blade.php @@ -0,0 +1,5 @@ + + +@include('admin.layout.head') +@include('admin.layout.body') + diff --git a/resources/views/admin/layout/body.blade.php b/resources/views/admin/layout/body.blade.php new file mode 100644 index 0000000..d25c23d --- /dev/null +++ b/resources/views/admin/layout/body.blade.php @@ -0,0 +1,10 @@ + + @include('admin.layout.header') +
+
+ @yield('page_content') +
+
+ @include('admin.layout.footer') + @include('layout.scripts') + diff --git a/resources/views/admin/layout/footer.blade.php b/resources/views/admin/layout/footer.blade.php new file mode 100644 index 0000000..7483f31 --- /dev/null +++ b/resources/views/admin/layout/footer.blade.php @@ -0,0 +1,10 @@ + diff --git a/resources/views/admin/layout/head.blade.php b/resources/views/admin/layout/head.blade.php new file mode 100644 index 0000000..456c061 --- /dev/null +++ b/resources/views/admin/layout/head.blade.php @@ -0,0 +1,7 @@ + + + + Capital Investments + + @include('admin.layout.styles') + diff --git a/resources/views/admin/layout/header.blade.php b/resources/views/admin/layout/header.blade.php new file mode 100644 index 0000000..5ec56f1 --- /dev/null +++ b/resources/views/admin/layout/header.blade.php @@ -0,0 +1,7 @@ +
+ @include('admin.layout.header.menu') +
+ +@push('styles') + +@endpush diff --git a/resources/views/admin/layout/header/menu.blade.php b/resources/views/admin/layout/header/menu.blade.php new file mode 100644 index 0000000..95dea42 --- /dev/null +++ b/resources/views/admin/layout/header/menu.blade.php @@ -0,0 +1,26 @@ +
+ +
diff --git a/resources/views/admin/layout/styles.blade.php b/resources/views/admin/layout/styles.blade.php new file mode 100644 index 0000000..f6fec51 --- /dev/null +++ b/resources/views/admin/layout/styles.blade.php @@ -0,0 +1,14 @@ +@if (isset($assets->styles)) + @foreach ($assets->styles as $style) + + @endforeach +@endif + +@if (isset($assets->fonts)) + @foreach ($assets->fonts as $type => $fonts) + @foreach ($fonts as $font) + + @endforeach + @endforeach +@endif +@stack('styles') diff --git a/resources/views/admin/nosotros.blade.php b/resources/views/admin/nosotros.blade.php new file mode 100644 index 0000000..e143cf3 --- /dev/null +++ b/resources/views/admin/nosotros.blade.php @@ -0,0 +1,18 @@ +@extends('admin.layout.base') + +@section('page_content') +
+
+
+ NOSOTROS +
+
+
+ + +
+ +
+
+
+@endsection diff --git a/resources/views/admin/producto.blade.php b/resources/views/admin/producto.blade.php new file mode 100644 index 0000000..cd52816 --- /dev/null +++ b/resources/views/admin/producto.blade.php @@ -0,0 +1,250 @@ +@extends('admin.layout.base') + +@section('page_content') +
+ PRODUCTO +
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+ @if (isset($producto->video)) +
+ +
+ {{$producto->video}} +
+
+ @endif +
+
+
+
+ +
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/admin/productos.blade.php b/resources/views/admin/productos.blade.php new file mode 100644 index 0000000..698240c --- /dev/null +++ b/resources/views/admin/productos.blade.php @@ -0,0 +1,60 @@ +@extends('admin.layout.base') + +@section('page_content') +
+
+
+ PRODUCTOS +
+ + + + + + + + + + + + + @foreach ($productos as $i => $producto) + + + + + + @endforeach + +
+ + + +
ProductoEditarBorrar
+ + {{$producto->nombre}} + + + + + +
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/admin/productos/add.blade.php b/resources/views/admin/productos/add.blade.php new file mode 100644 index 0000000..d80bea2 --- /dev/null +++ b/resources/views/admin/productos/add.blade.php @@ -0,0 +1,158 @@ +@extends('admin.layout.base') + +@section('page_content') +
+ AGREGAR PRODUCTO +
+
+
+
+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ +
+ +
+
+
+
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ + +
+
+ + +
+
+
+
+
+ + +
+
+
+
+ +
+@endsection + +@push('scripts') + +@endpush