folder = $media_folder;
$this->media_url = $media_assets_url;
}
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('', [
''
]);
}
}
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->media === null) {
$item->media = $item->original;
}
if ($item->thumb === null) {
$item->thumb = $item->media;
}
});
sort($medias);
return $medias;
}
public function add($event, $file) {
$folder = $this->getFolder($event);
if (!file_exists($folder)) {
mkdir($folder);
chmod($folder, 0777);
}
$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);
try {
gd_info();
} catch(\Exception $e) {
return file_exists($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, $crop = false) {
$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'
])
]);
$image = imagecreatetruecolor(300, 300);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $black);
$pfile = implode(DIRECTORY_SEPARATOR, [
dirname($this->folder, 3),
'resources',
'data',
'play.png'
]);
$play = imagecreatefrompng($pfile);
list($w, $h) = getimagesize($pfile);
$r = $w / $h;
$w = 100;
$h = $r * $w;
$play = imagescale($play, $w, $h);
$x = (300 - $w) / 2;
$y = (300 - $h) / 2;
$x2 = (300 + $w) / 2 - $x;
$y2 = (300 + $h) / 2 - $y;
imagecopyresampled($image, $play, $x, $y, 0, 0, $x2, $y2, $w, $h);
imagejpeg($image, $thumb, 50);
return file_exists($filename);
}
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);
}
}