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')
+
+
+
+
+
+
+ Pregunta |
+ Borrar |
+
+
+
+ @foreach($faqs as $i => $faq)
+
+ {{$faq->titulo}} |
+
+ |
+ @endforeach
+
+
+
+
+
+@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')
+
+
+
+
+
+
+
+ Pregunta |
+ Borrar |
+
+
+
+ @foreach ($avisos->avisos as $i => $aviso)
+
+ {{$aviso->titulo}} |
+ {{$aviso->contenido}} |
+ |
+
+ @endforeach
+
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+@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')
+
+
+
+
+
+
+@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')
+
+
+@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')
+
+@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')
+
+
+@endsection
+
+@push('scripts')
+
+@endpush