typemill/system/Models/ProcessAssets.php
2020-04-20 19:21:56 +02:00

251 lines
No EOL
5.7 KiB
PHP

<?php
namespace Typemill\Models;
use \URLify;
class ProcessAssets
{
# holds the path to the baseFolder
protected $baseFolder;
# holds the path to the mediaFolder
protected $mediaFolder;
# holds the path to the temporary image folder
protected $tmpFolder;
# holds the path where original images are stored
protected $originalFolder;
# holds the path where images for frontend use are stored
protected $liveFolder;
# holds the folder where the thumbs for the media library are stored
protected $thumbFolder;
# holds the folder where the thumbs for the media library are stored
public $fileFolder;
# holds the desired sizes for image resizing
protected $desiredSizes;
public function __construct($desiredSizes = NULL)
{
$this->baseFolder = getcwd() . DIRECTORY_SEPARATOR;
$this->mediaFolder = $this->baseFolder . 'media' . DIRECTORY_SEPARATOR;
$this->tmpFolder = $this->mediaFolder . 'tmp' . DIRECTORY_SEPARATOR;
$this->originalFolder = $this->mediaFolder . 'original' . DIRECTORY_SEPARATOR;
$this->liveFolder = $this->mediaFolder . 'live' . DIRECTORY_SEPARATOR;
$this->thumbFolder = $this->mediaFolder . 'thumbs' . DIRECTORY_SEPARATOR;
$this->fileFolder = $this->mediaFolder . 'files' . DIRECTORY_SEPARATOR;
$this->desiredSizes = $desiredSizes;
}
public function checkFolders($forassets = null)
{
$folders = [$this->mediaFolder, $this->tmpFolder, $this->fileFolder];
if($forassets == 'images')
{
$folders = [$this->mediaFolder, $this->tmpFolder, $this->originalFolder, $this->liveFolder, $this->thumbFolder];
}
foreach($folders as $folder)
{
if(!file_exists($folder) && !is_dir( $folder ))
{
if(!mkdir($folder, 0755, true))
{
return false;
}
if($folder == $this->thumbFolder)
{
# cleanup old systems
$this->cleanupLiveFolder();
# generate thumbnails from live folder
$this->generateThumbs();
}
}
elseif(!is_writeable($folder) OR !is_readable($folder))
{
return false;
}
# check if thumb-folder is empty, then generate thumbs from live folder
if($folder == $this->thumbFolder && $this->is_dir_empty($folder))
{
# cleanup old systems
$this->cleanupLiveFolder();
# generate thumbnails from live folder
$this->generateThumbs();
}
}
return true;
}
public function is_dir_empty($dir)
{
return (count(scandir($dir)) == 2);
}
public function setFileName($originalname, $type, $overwrite = NULL)
{
$pathinfo = pathinfo($originalname);
$this->extension = strtolower($pathinfo['extension']);
$this->filename = URLify::filter(iconv(mb_detect_encoding($pathinfo['filename'], mb_detect_order(), true), "UTF-8", $pathinfo['filename']));
$filename = $this->filename;
# check if file name is
if(!$overwrite)
{
$suffix = 1;
$destination = $this->liveFolder;
if($type == 'file')
{
$destination = $this->fileFolder;
}
while(file_exists($destination . $filename . '.' . $this->extension))
{
$filename = $this->filename . '-' . $suffix;
$suffix++;
}
}
$this->filename = $filename;
return true;
}
public function getName()
{
return $this->filename;
}
public function setExtension($extension)
{
$this->extension = $extension;
}
public function getExtension()
{
return $this->extension;
}
public function getFullName()
{
return $this->filename . '.' . $this->extension;
}
public function clearTempFolder()
{
$files = scandir($this->tmpFolder);
$result = true;
foreach($files as $file)
{
if (!in_array($file, array(".","..")))
{
$filelink = $this->tmpFolder . $file;
if(!unlink($filelink))
{
$success = false;
}
}
}
return $result;
}
public function cleanupLiveFolder()
{
# delete all old thumbs mlibrary in live folder
foreach(glob($this->liveFolder . '*mlibrary*') as $filename)
{
unlink($filename);
}
return true;
}
public function findPagesWithUrl($structure, $url, $result)
{
foreach ($structure as $key => $item)
{
if($item->elementType == 'folder')
{
$result = $this->findPagesWithUrl($item->folderContent, $url, $result);
}
else
{
$live = getcwd() . DIRECTORY_SEPARATOR . 'content' . $item->pathWithoutType . '.md';
$draft = getcwd() . DIRECTORY_SEPARATOR . 'content' . $item->pathWithoutType . '.txt';
# check live first
if(file_exists($live))
{
$content = file_get_contents($live);
if (stripos($content, $url) !== false)
{
$result[] = $item->urlRelWoF;
}
# if not in live, check in draft
elseif(file_exists($draft))
{
$content = file_get_contents($draft);
if (stripos($content, $url) !== false)
{
$result[] = $item->urlRelWoF;
}
}
}
}
}
return $result;
}
public function formatSizeUnits($bytes)
{
if ($bytes >= 1073741824)
{
$bytes = number_format($bytes / 1073741824, 2) . ' GB';
}
elseif ($bytes >= 1048576)
{
$bytes = number_format($bytes / 1048576, 2) . ' MB';
}
elseif ($bytes >= 1024)
{
$bytes = number_format($bytes / 1024, 2) . ' KB';
}
elseif ($bytes > 1)
{
$bytes = $bytes . ' bytes';
}
elseif ($bytes == 1)
{
$bytes = $bytes . ' byte';
}
else
{
$bytes = '0 bytes';
}
return $bytes;
}
}