diff --git a/bootstrap/web/config.php b/bootstrap/web/config.php
index 8679d76..8c20a7c 100644
--- a/bootstrap/web/config.php
+++ b/bootstrap/web/config.php
@@ -36,6 +36,10 @@ return [
'{urls.base}',
'eventos'
])),
+ 'admin' => DI\string(implode('/', [
+ '{urls.base}',
+ 'admin'
+ ])),
'map' => 'https://maps.google.com/maps?hl=es&q=Avenida%20Nueva%20Providencia%201945,%20Providencia&ie=UTF8&z=16&iwloc=B&output=embed'
],
'assets' => [
diff --git a/bootstrap/web/setup.php b/bootstrap/web/setup.php
index 0a4680c..123fefa 100644
--- a/bootstrap/web/setup.php
+++ b/bootstrap/web/setup.php
@@ -15,5 +15,13 @@ return [
'assets' => (object) $c->get('assets')
]
);
+ },
+ ProVM\TotalSport\Common\Service\MediaLoader::class => function(Container $c) {
+ $obj = new ProVM\TotalSport\Common\Service\MediaLoader($c->get('folders.images'), $c->get('urls')['images']);
+ $obj->setFFMpeg($c->get(FFMpeg\FFMpeg::class));
+ return $obj;
+ },
+ FFMpeg\FFMpeg::class => function(Container $c) {
+ return FFMpeg\FFMpeg::create();
}
];
diff --git a/common/Controller/Web/Admin/Eventos.php b/common/Controller/Web/Admin/Eventos.php
new file mode 100644
index 0000000..7dcfe8e
--- /dev/null
+++ b/common/Controller/Web/Admin/Eventos.php
@@ -0,0 +1,126 @@
+load('eventos');
+ return $view->render($response, 'admin.eventos', compact('eventos'));
+ }
+ public function show(Request $request, Response $response, View $view, DataHandler $handler, MediaLoader $loader, $evento): Response {
+ $eventos = $handler->load('eventos');
+ $e = $eventos[$evento];
+ $e->id = $evento;
+ $imagenes = $loader->load($e);
+ $servicios = $handler->load('servicios');
+ return $view->render($response, 'admin.eventos.show', ['evento' => $e, 'imagenes' => $imagenes, 'servicios' => $servicios]);
+ }
+ public function edit(Request $request, Response $response, Container $container, DataHandler $handler, $evento): Response {
+ $eventos = $handler->load('eventos');
+ $e = $eventos[$evento];
+ $post = $request->getParsedBody();
+ $servicios = $handler->load('servicios');
+ $fields = ['titulo', 'empresa', 'servicio', 'descripcion'];
+ $changed = false;
+ foreach ($fields as $field) {
+ if ($post[$field] != $e->{$field}) {
+ $e->{$field} = $post[$field];
+ $changed = true;
+ }
+ }
+ if ($changed) {
+ $eventos[$evento] = $e;
+ $handler->save('eventos', $eventos);
+ }
+ return $response->withHeader('Location', implode('/', [
+ $container->get('urls')['admin'],
+ 'eventos'
+ ]));
+ }
+ public function add(Request $request, Response $response, View $view, DataHandler $handler): Response {
+ $servicios = $handler->load('servicios');
+ return $view->render($response, 'admin.eventos.add', compact('servicios'));
+ }
+ public function do_add(Request $request, Response $response, Container $container, DataHandler $handler): Response {
+ $post = $request->getParsedBody();
+ $eventos = $handler->load('eventos');
+ $evento = [
+ 'titulo' => $post['titulo'],
+ 'empresa' => $post['empresa'],
+ 'servicio' => $post['servicio'],
+ 'descripcion' => $post['descripcion']
+ ];
+ $eventos []= $evento;
+ $status = $handler->save('eventos', $eventos);
+ return $response->withHeader('Location', implode('/', [
+ $container->get('urls')['admin'],
+ 'eventos'
+ ]));
+ }
+ public function delete(Request $request, Response $response, Container $container, DataHandler $handler, MediaLoader $loader, $evento): Response {
+ $eventos = $handler->load('eventos');
+ unset($eventos[$evento]);
+ $eventos = array_values($eventos);
+ $handler->save('eventos', $eventos);
+ return $response->withHeader('Location', implode('/', [
+ $container->get('urls')['admin'],
+ 'eventos'
+ ]));
+ }
+ public function addImage(Request $request, Response $response, DataHandler $handler, MediaLoader $loader, $evento): Response {
+ $post = $request->getParsedBody();
+ $files = $request->getUploadedFiles();
+ if (count($files) == 0) {
+ $output = [
+ 'informacion' => '',
+ 'evento' => $e,
+ 'estado' => false
+ ];
+ $response->getBody()->write(json_encode($output));
+ return $response
+ ->withHeader('Content-Type', 'application/json')
+ ->withStatus(201);
+ }
+ $file = $files['imagen'];
+ $eventos = $handler->load('eventos');
+ $e = $eventos[$evento];
+ if (is_array($file)) {
+ $status = false;
+ foreach ($file as $f) {
+ $status |= $loader->add($e, $f);
+ }
+ } else {
+ $status = $loader->add($e, $file);
+ }
+ $output = [
+ 'informacion' => $file,
+ 'evento' => $e,
+ 'estado' => $status
+ ];
+ $response->getBody()->write(json_encode($output));
+ return $response
+ ->withHeader('Content-Type', 'application/json')
+ ->withStatus(201);
+ }
+ public function deleteImage(Request $request, Response $response, DataHandler $handler, MediaLoader $loader, $evento): Response {
+ $post = $request->getParsedBody();
+ $eventos = $handler->load('eventos');
+ $e = $eventos[$evento];
+ $status = $loader->delete($e, $post['media']);
+ $output = [
+ 'informacion' => $file,
+ 'evento' => $e,
+ 'estado' => !$status
+ ];
+ $response->getBody()->write(json_encode($output));
+ return $response
+ ->withHeader('Content-Type', 'application/json')
+ ->withStatus(201);
+ }
+}
diff --git a/common/Controller/Web/Eventos.php b/common/Controller/Web/Eventos.php
index 98716c5..83e37c3 100644
--- a/common/Controller/Web/Eventos.php
+++ b/common/Controller/Web/Eventos.php
@@ -6,10 +6,10 @@ use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Blade as View;
use ProVM\TotalSport\Common\Service\DataHandler;
-use ProVM\TotalSport\Common\Service\ImageLoader;
+use ProVM\TotalSport\Common\Service\MediaLoader;
class Eventos {
- public function __invoke(Request $request, Response $response, View $view, DataHandler $handler, ImageLoader $loader, $evento): Response {
+ public function __invoke(Request $request, Response $response, View $view, DataHandler $handler, MediaLoader $loader, $evento): Response {
$eventos = $handler->load('eventos');
$e = $eventos[$evento];
$imagenes = $loader->load($e);
diff --git a/common/Controller/Web/Home.php b/common/Controller/Web/Home.php
index eb22c3d..dfca757 100644
--- a/common/Controller/Web/Home.php
+++ b/common/Controller/Web/Home.php
@@ -6,10 +6,10 @@ use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;
use Slim\Views\Blade as View;
use ProVM\TotalSport\Common\Service\DataHandler;
-use ProVM\TotalSport\Common\Service\ImageLoader;
+use ProVM\TotalSport\Common\Service\MediaLoader;
class Home {
- public function __invoke(Request $request, Response $response, Container $container, View $view, DataHandler $handler, ImageLoader $loader): Response {
+ public function __invoke(Request $request, Response $response, Container $container, View $view, DataHandler $handler, MediaLoader $loader): Response {
$banner = (object) [
'title' => 'BUSCAMOS LA MEJOR EXPERIENCA',
'contenido' => 'Eventos hechos a tu medida'
@@ -28,10 +28,10 @@ class Home {
$eventos = $handler->load('eventos');
foreach ($eventos as &$evento) {
if (!isset($evento->imagen)) {
- $evento->imagen = '#';
+ $evento->imagen = '
';
$imagenes = $loader->load($evento);
if ($imagenes !== false) {
- $evento->imagen = $imagenes[0];
+ $evento->imagen = array_values($imagenes)[0]->thumb->html;
}
}
if (!isset($evento->servicio)) {
diff --git a/common/Service/DataHandler.php b/common/Service/DataHandler.php
index d5bcb05..5cf4197 100644
--- a/common/Service/DataHandler.php
+++ b/common/Service/DataHandler.php
@@ -15,4 +15,11 @@ class DataHandler {
]);
return json_decode(json_encode(Spyc::YAMLLoad($filename)));
}
+ public function save(string $file_name, $data) {
+ $filename = implode(DIRECTORY_SEPARATOR, [
+ $this->folder,
+ $file_name . '.yml'
+ ]);
+ return (file_put_contents($filename, Spyc::YAMLDump($data)) !== false);
+ }
}
diff --git a/common/Service/ImageLoader.php b/common/Service/ImageLoader.php
index 2885233..6121931 100644
--- a/common/Service/ImageLoader.php
+++ b/common/Service/ImageLoader.php
@@ -10,8 +10,8 @@ class ImageLoader {
$this->folder = $images_folder;
$this->assets_folder = $images_assets_folder;
}
- public function load($event) {
- $folder = implode(DIRECTORY_SEPARATOR, [
+ protected function getFolder($event) {
+ return implode(DIRECTORY_SEPARATOR, [
$this->folder,
'eventos',
s($event->servicio)->removeLeft('Eventos '),
@@ -20,6 +20,9 @@ class ImageLoader {
$event->empresa
]), ', ')
]);
+ }
+ public function load($event) {
+ $folder = $this->getFolder($event);
if (!file_exists($folder)) {
return false;
}
@@ -29,6 +32,18 @@ class ImageLoader {
if ($file->isDir()) {
continue;
}
+ $name = $file->getBasename('.' . $file->getExtension());
+ $org = false;
+ $thumb = false;
+ if (strpos($name, '_') !== false) {
+ $name = explode('_', $name)[0];
+ if (strpos($name, '_org') !== false) {
+ $org = true;
+ }
+ if (strpos($name, '_thumb') !== false) {
+ $thumb = true;
+ }
+ }
$images []= implode('/', [
$this->assets_folder,
'eventos',
@@ -42,4 +57,28 @@ class ImageLoader {
}
return $images;
}
+ public function add($event, $file) {
+ $folder = $this->getFolder($event);
+ if (!file_exists($folder)) {
+ mkdir($folder);
+ chmod($folder, 777);
+ }
+ $images = $this->load($event);
+ $base_name = '01';
+ if ($images !== false and count($images) > 0) {
+ $base_name = str_pad(count($images), 2, '0', \STR_PAD_LEFT);
+ }
+ $extension = pathinfo($file->getClientFilename(), PATHINFO_EXTENSION);
+ $filename = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ implode('.', [
+ implode('_', [
+ $base_name,
+ 'org'
+ ]),
+ $extension
+ ])
+ ]);
+ $file->moveTo($filename);
+ }
}
diff --git a/common/Service/MediaLoader.php b/common/Service/MediaLoader.php
new file mode 100644
index 0000000..8b157ad
--- /dev/null
+++ b/common/Service/MediaLoader.php
@@ -0,0 +1,303 @@
+folder = $media_folder;
+ $this->media_url = $media_assets_url;
+ }
+ protected $ffmpeg;
+ public function setFFMpeg(FFMpeg $ffmpeg) {
+ $this->ffmpeg = $ffmpeg;
+ }
+ protected function getFolder($event) {
+ return implode(DIRECTORY_SEPARATOR, [
+ $this->folder,
+ 'eventos',
+ s($event->servicio)->removeLeft('Eventos '),
+ rtrim(implode(', ', [
+ $event->titulo,
+ $event->empresa
+ ]), ', ')
+ ]);
+ }
+ protected function buildHtml($file, $filename) {
+ switch ($file->getExtension()) {
+ default:
+ return implode('', [
+ '
'
+ ]);
+ case 'mkv':
+ case 'mp4':
+ case 'mov':
+ case 'avi':
+ case 'ogg':
+ case 'webm':
+ return implode(PHP_EOL, [
+ ''
+ ]);
+ }
+ }
+ public function load($event) {
+ $folder = $this->getFolder($event);
+ if (!file_exists($folder)) {
+ return false;
+ }
+ $files = new \DirectoryIterator($folder);
+ $medias = [];
+ foreach ($files as $file) {
+ if ($file->isDir()) {
+ continue;
+ }
+ $name = $file->getBasename('.' . $file->getExtension());
+ $type = 'media';
+ if (strpos($name, '_') !== false) {
+ if (strpos($name, '_org') !== false) {
+ $type = 'original';
+ }
+ if (strpos($name, '_thumb') !== false) {
+ $type = 'thumb';
+ }
+ $name = explode('_', $name)[0];
+ }
+ $filename = implode('/', [
+ $this->media_url,
+ 'eventos',
+ s($event->servicio)->removeLeft('Eventos '),
+ ($event->empresa != '') ?
+ rtrim(implode(', ', [
+ $event->titulo,
+ $event->empresa
+ ]), ', ') :
+ $event->titulo,
+ $file->getFilename()
+ ]);
+ $obj = (object) [
+ 'n' => $name,
+ 'filename' => $filename,
+ 'type' => $type,
+ 'html' => $this->buildHtml($file, $filename)
+ ];
+ if (!isset($medias[$name])) {
+ $medias[$name] = (object) [
+ 'media' => null,
+ 'thumb' => null,
+ 'original' => null
+ ];
+ }
+ $medias[$name]->{$type} = $obj;
+ }
+ array_walk($medias, function(&$item) {
+ if ($item->thumb === null) {
+ $item->thumb = $item->media;
+ }
+ });
+ return $medias;
+ }
+ public function add($event, $file) {
+ $folder = $this->getFolder($event);
+ if (!file_exists($folder)) {
+ mkdir($folder);
+ chmod($folder, 777);
+ }
+ $extension = pathinfo($file->getClientFilename(), PATHINFO_EXTENSION);
+ switch ($extension) {
+ default:
+ return $this->addImage($event, $file);
+ case 'mkv':
+ case 'mp4':
+ case 'mov':
+ case 'avi':
+ case 'ogg':
+ case 'webm':
+ return $this->addVideo($event, $file);
+ }
+ }
+ public function addImage($event, $file) {
+ $folder = $this->getFolder($event);
+ $medias = $this->load($event);
+ $base_name = '01';
+ if ($medias !== false and count($medias) > 0) {
+ $base_name = str_pad(count($medias) + 1, 2, '0', \STR_PAD_LEFT);
+ }
+ $extension = pathinfo($file->getClientFilename(), PATHINFO_EXTENSION);
+ $filename = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ implode('.', [
+ implode('_', [
+ $base_name,
+ 'org'
+ ]),
+ $extension
+ ])
+ ]);
+ $file->moveTo($filename);
+
+ $thumb = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ implode('.', [
+ implode('_', [
+ $base_name,
+ 'thumb'
+ ]),
+ 'jpg'
+ ])
+ ]);
+ $this->copyResize($filename, $thumb, 50, 300);
+ $media = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ implode('.', [
+ $base_name,
+ 'jpg'
+ ])
+ ]);
+ $this->copyResize($filename, $media, 75, 1024);
+
+ return file_exists($filename);
+ }
+ protected function resize_image($source, $w, $h, $crop = FALSE) {
+ list($width, $height) = getimagesize($source);
+ $r = $width / $height;
+ if ($crop) {
+ if ($width > $height) {
+ $width = ceil($width-($width*abs($r-$w/$h)));
+ } else {
+ $height = ceil($height-($height*abs($r-$w/$h)));
+ }
+ $newwidth = $w;
+ $newheight = $h;
+ } else {
+ if ($w/$h > $r) {
+ $newwidth = $h*$r;
+ $newheight = $h;
+ } else {
+ $newheight = $w/$r;
+ $newwidth = $w;
+ }
+ }
+ $src = imagecreatefromjpeg($file);
+ $dst = imagecreatetruecolor($newwidth, $newheight);
+ imagecopyresampled($dst, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
+
+ return $dst;
+ }
+ protected function copyResize($source, $destination, $quality, $w, $h = 0) {
+ $info = getimagesize($source);
+ if ($info['mime'] == 'image/jpeg') {
+ $image = imagecreatefromjpeg($source);
+ } elseif ($info['mime'] == 'image/gif') {
+ $image = imagecreatefromgif($source);
+ } elseif ($info['mime'] == 'image/png') {
+ $image = imagecreatefrompng($source);
+ }
+
+ list($width, $height) = getimagesize($source);
+ $r = $width / $height;
+ if ($h == 0) {
+ $h = $w * $r;
+ }
+ if ($crop) {
+ if ($width > $height) {
+ $width = ceil($width-($width*abs($r-$w/$h)));
+ } else {
+ $height = ceil($height-($height*abs($r-$w/$h)));
+ }
+ $newwidth = $w;
+ $newheight = $h;
+ } else {
+ if ($w/$h > $r) {
+ $newwidth = $h*$r;
+ $newheight = $h;
+ } else {
+ $newheight = $w/$r;
+ $newwidth = $w;
+ }
+ }
+ $dst = imagecreatetruecolor($newwidth, $newheight);
+ imagecopyresampled($dst, $image, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
+ imagejpeg($dst, $destination, $quality);
+ }
+ public function addVideo($event, $file) {
+ $folder = $this->getFolder($event);
+ $medias = $this->load($event);
+ $base_name = '01';
+ if ($medias !== false and count($medias) > 0) {
+ $base_name = str_pad(count($medias) + 1, 2, '0', \STR_PAD_LEFT);
+ }
+ $extension = pathinfo($file->getClientFilename(), PATHINFO_EXTENSION);
+ $filename = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ implode('.', [
+ implode('_', [
+ $base_name,
+ 'org'
+ ]),
+ $extension
+ ])
+ ]);
+ $file->moveTo($filename);
+
+ $thumb = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ implode('.', [
+ implode('_', [
+ $base_name,
+ 'thumb'
+ ]),
+ 'jpg'
+ ])
+ ]);
+
+ $video
+ ->filters()
+ ->resize(new FFMpeg\Coordinate\Dimension(320, 240))
+ ->synchronize();
+ $video
+ ->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(1))
+ ->save($thumb);
+ $media = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ implode('.', [
+ $base_name,
+ $extension
+ ])
+ ]);
+ $video
+ ->save(new FFMpeg\Format\Video\X264(), $media);
+ }
+ public function delete($event, $filename) {
+ $folder = $this->getFolder($event);
+ $media = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ $filename . '*.*'
+ ]);
+ $files = glob($media);
+ foreach ($files as $filename) {
+ unlink($filename);
+ }
+ if (count(scandir($folder)) <= 2) {
+ rmdir($folder);
+ }
+ $filename = implode(DIRECTORY_SEPARATOR, [
+ $folder,
+ $filename . '.jpg'
+ ]);
+ return file_exists($filename);
+ }
+}
diff --git a/composer.json b/composer.json
index 35a350e..c6152a5 100644
--- a/composer.json
+++ b/composer.json
@@ -17,7 +17,8 @@
"rubellum/slim-blade-view": "^0.1.1",
"mustangostang/spyc": "^0.6.3",
"voku/stringy": "^6.2",
- "vlucas/phpdotenv": "^4.1"
+ "vlucas/phpdotenv": "^4.1",
+ "php-ffmpeg/php-ffmpeg": "^0.16.0"
},
"require-dev": {
"phpunit/phpunit": "^8.5",
diff --git a/public/assets/styles/home.css b/public/assets/styles/home.css
index 069efd1..4d72ff1 100644
--- a/public/assets/styles/home.css
+++ b/public/assets/styles/home.css
@@ -11,6 +11,7 @@
}
#banner .header {
font-family: inherit;
+ line-height: 2rem;
}
#servicios {
@@ -87,6 +88,19 @@
background-color: white;
padding: 0;
}
+#eventos .segment .image {
+ height: 14rem;
+ overflow: hidden;
+}
+#eventos .segment .image img {
+ height: 100%;
+ max-width: none !important;
+}
+#eventos .segment .header {
+ margin-top: 0;
+ padding-top: 1rem;
+ height: 7rem;
+}
#contacto {
padding-top: 4rem;
diff --git a/resources/data/clientes.yml b/resources/data/clientes.yml
deleted file mode 100644
index e69de29..0000000
diff --git a/resources/data/eventos.yml b/resources/data/eventos.yml
index a8bd1ad..7f27127 100644
--- a/resources/data/eventos.yml
+++ b/resources/data/eventos.yml
@@ -1,68 +1,171 @@
-- titulo: Activación Olimpiadas del Seguro 2019
+---
+-
+ titulo: Activación Olimpiadas del Seguro 2019
empresa: Consorcio
servicio: Eventos Calidad de Vida
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Día del niño 2017
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Día del niño 2017
empresa: Fresenius Kabi
servicio: Eventos Calidad de Vida
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Fiestras patrias 2019
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Fiestras patrias 2019
empresa: Consorcio
servicio: Eventos Calidad de Vida
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Olimpiadas del Seguro 2019
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Olimpiadas del Seguro 2019
empresa: Intervención Chilena Consolidada
servicio: Eventos Calidad de Vida
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Pausas Activas 2018
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Pausas Activas 2018
empresa: Dimeiggs
servicio: Eventos Calidad de Vida
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Campeonato baby Futbol 2018
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Campeonato baby Futbol 2018
empresa: AZA
servicio: Eventos Deportivos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Campeonato Futbol Varones 2019
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Campeonato Futbol Varones 2019
empresa: Chilena Consolidada
servicio: Eventos Deportivos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Campeonato Voleibol 2019
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Campeonato Voleibol 2019
empresa: Dimerc
servicio: Eventos Deportivos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Campeonato Futbolito 2017
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Campeonato Futbolito 2017
empresa: Dimerc
servicio: Eventos Deportivos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Final Nacional Campeonato Futbolito 2012
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Final Nacional Campeonato Futbolito 2012
empresa: Gildemeister
servicio: Eventos Deportivos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Futbol Varones senior 2019
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Futbol Varones senior 2019
empresa: Olimpiadas del Seguro
servicio: Eventos Deportivos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Liga Consumidores
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Liga Consumidores
empresa: ""
servicio: Eventos Deportivos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Liga Futbar
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Liga Futbar
empresa: ""
servicio: Eventos Deportivos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: 2da Corrida Familiar Inclusiva
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: 2da Corrida Familiar Inclusiva
empresa: DIMERC
servicio: Eventos Recreativos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Dia de la Familia
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Dia de la Familia
empresa: BUPA
servicio: Eventos Recreativos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Fiestas Patrias
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Fiestas Patrias
empresa: CONSORCIO
servicio: Eventos Recreativos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
-- titulo: Pausas Activas
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
+-
+ titulo: Pausas Activas
empresa: DIMEIGGS
servicio: Eventos Recreativos
- descripcion: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nos"
+ descripcion: >
+ Lorem ipsum dolor sit amet, consectetur
+ adipiscing elit, sed do eiusmod tempor
+ incididunt ut labore et dolore magna
+ aliqua. Ut enim ad minim veniam, quis
+ nos
diff --git a/resources/data/imagenes.yml b/resources/data/imagenes.yml
new file mode 100644
index 0000000..4f1afba
--- /dev/null
+++ b/resources/data/imagenes.yml
@@ -0,0 +1,9 @@
+- evento: Activación Olimpiadas del Seguro 2019, Consorcio
+ imagenes:
+ - P1040997.JPG
+ - P1040998.JPG
+ - P1040999.JPG
+ - P1050003.JPG
+ - P1050006.JPG
+ - P1050008.JPG
+ - P1050010.JPG
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/eventos.php b/resources/routes/web/admin/eventos.php
new file mode 100644
index 0000000..e1d2085
--- /dev/null
+++ b/resources/routes/web/admin/eventos.php
@@ -0,0 +1,17 @@
+group('/eventos', function($app) {
+ $app->group('/add', function($app) {
+ $app->get('[/]', [Eventos::class, 'add']);
+ $app->post('[/]', [Eventos::class, 'do_add']);
+ });
+ $app->get('[/]', Eventos::class);
+});
+$app->group('/evento/{evento}', function($app) {
+ $app->post('/edit', [Eventos::class, 'edit']);
+ $app->post('/add', [Eventos::class, 'addImage']);
+ $app->get('/delete', [Eventos::class, 'delete']);
+ $app->post('/image/delete', [Eventos::class, 'deleteImage']);
+ $app->get('[/]', [Eventos::class, 'show']);
+});
diff --git a/resources/views/admin/eventos.blade.php b/resources/views/admin/eventos.blade.php
new file mode 100644
index 0000000..ade3ce6
--- /dev/null
+++ b/resources/views/admin/eventos.blade.php
@@ -0,0 +1,46 @@
+@extends('admin.layout.base')
+
+@section('page_content')
+
+
+
+
+
+
+
+
+
+ |
+
+
+ Evento |
+ Editar |
+ Borrar |
+
+
+
+ @foreach ($eventos as $i => $evento)
+
+
+ {{($evento->empresa != '') ? implode(', ', [$evento->titulo, $evento->empresa]) : $evento->titulo}}
+ |
+
+
+
+
+ |
+
+
+
+
+ |
+
+ @endforeach
+
+
+
+@endsection
diff --git a/resources/views/admin/eventos/add.blade.php b/resources/views/admin/eventos/add.blade.php
new file mode 100644
index 0000000..9a236e7
--- /dev/null
+++ b/resources/views/admin/eventos/add.blade.php
@@ -0,0 +1,77 @@
+@extends('admin.layout.base')
+
+@section('page_content')
+
+@endsection
+
+@push('scripts')
+
+@endpush
diff --git a/resources/views/admin/eventos/show.blade.php b/resources/views/admin/eventos/show.blade.php
new file mode 100644
index 0000000..dbbb5c6
--- /dev/null
+++ b/resources/views/admin/eventos/show.blade.php
@@ -0,0 +1,190 @@
+@extends('admin.layout.base')
+
+@section('page_content')
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ Archivo |
+ Borrar |
+
+
+
+ @if ($imagenes)
+ @foreach (array_values($imagenes) as $i => $imagen)
+
+ {{$imagen->media->n}} |
+
+
+ |
+
+ @endforeach
+ @endif
+
+
+
+@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..1fbf83a
--- /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..ad7048e
--- /dev/null
+++ b/resources/views/admin/layout/body.blade.php
@@ -0,0 +1,6 @@
+
+ @include('admin.layout.header')
+ @yield('page_content')
+
+ @include('admin.layout.footer')
+
diff --git a/resources/views/admin/layout/footer.blade.php b/resources/views/admin/layout/footer.blade.php
new file mode 100644
index 0000000..efe56ab
--- /dev/null
+++ b/resources/views/admin/layout/footer.blade.php
@@ -0,0 +1,21 @@
+
+@include('admin.layout.scripts')
diff --git a/resources/views/admin/layout/footer/contacto.blade.php b/resources/views/admin/layout/footer/contacto.blade.php
new file mode 100644
index 0000000..4c618f3
--- /dev/null
+++ b/resources/views/admin/layout/footer/contacto.blade.php
@@ -0,0 +1,15 @@
+
diff --git a/resources/views/admin/layout/footer/menu.blade.php b/resources/views/admin/layout/footer/menu.blade.php
new file mode 100644
index 0000000..92ca4cf
--- /dev/null
+++ b/resources/views/admin/layout/footer/menu.blade.php
@@ -0,0 +1,24 @@
+
+
+
diff --git a/resources/views/admin/layout/footer/redes.blade.php b/resources/views/admin/layout/footer/redes.blade.php
new file mode 100644
index 0000000..4f81745
--- /dev/null
+++ b/resources/views/admin/layout/footer/redes.blade.php
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/views/admin/layout/footer/ubicacion.blade.php b/resources/views/admin/layout/footer/ubicacion.blade.php
new file mode 100644
index 0000000..7a9eec2
--- /dev/null
+++ b/resources/views/admin/layout/footer/ubicacion.blade.php
@@ -0,0 +1,17 @@
+
diff --git a/resources/views/admin/layout/head.blade.php b/resources/views/admin/layout/head.blade.php
new file mode 100644
index 0000000..eb5ac1e
--- /dev/null
+++ b/resources/views/admin/layout/head.blade.php
@@ -0,0 +1,8 @@
+
+
+
+ Total Sport
+ @yield('page_title')
+
+ @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..3b0fcf0
--- /dev/null
+++ b/resources/views/admin/layout/header.blade.php
@@ -0,0 +1,3 @@
+
+ @include('admin.layout.menu')
+
diff --git a/resources/views/admin/layout/menu.blade.php b/resources/views/admin/layout/menu.blade.php
new file mode 100644
index 0000000..7713a3e
--- /dev/null
+++ b/resources/views/admin/layout/menu.blade.php
@@ -0,0 +1,13 @@
+
diff --git a/resources/views/admin/layout/scripts.blade.php b/resources/views/admin/layout/scripts.blade.php
new file mode 100644
index 0000000..da3033c
--- /dev/null
+++ b/resources/views/admin/layout/scripts.blade.php
@@ -0,0 +1,7 @@
+@if (isset($assets->scripts))
+ @foreach ($assets->scripts as $script)
+
+ @endforeach
+@endif
+
+@stack('scripts')
diff --git a/resources/views/admin/layout/styles.blade.php b/resources/views/admin/layout/styles.blade.php
new file mode 100644
index 0000000..819182b
--- /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 => $fs)
+ @foreach ($fs as $font)
+
+ @endforeach
+ @endforeach
+@endif
+
+@stack('styles')
diff --git a/resources/views/evento.blade.php b/resources/views/evento.blade.php
index 117bccd..86898f7 100644
--- a/resources/views/evento.blade.php
+++ b/resources/views/evento.blade.php
@@ -5,8 +5,12 @@
-
-

+
+ @if ($imagenes !== false)
+ {!!array_values($imagenes)[0]->media->html!!}
+ @else
+ Imagen no encontrada.
+ @endif
@@ -25,13 +29,19 @@
{{$evento->descripcion}}
- @foreach ($imagenes as $imagen)
-
-
-

+ @if ($imagenes !== false)
+ @foreach (array_values($imagenes) as $i => $imagen)
+
+
+ {!!$imagen->thumb->html!!}
+
+ @endforeach
+ @else
+
+ No hay imagenes.
- @endforeach
+ @endif
@@ -45,10 +55,16 @@
@push('scripts')
diff --git a/resources/views/home/eventos.blade.php b/resources/views/home/eventos.blade.php
index 9a9ceee..3ea4b00 100644
--- a/resources/views/home/eventos.blade.php
+++ b/resources/views/home/eventos.blade.php
@@ -19,7 +19,7 @@