Implement mime type specific rendering

This commit is contained in:
Dennis Eichhorn 2020-12-19 20:25:28 +01:00
parent a162214ef6
commit 2989ba7f10
3 changed files with 71 additions and 7 deletions

View File

@ -15,6 +15,8 @@ declare(strict_types=1);
use \phpOMS\System\File\FileUtils;
use \phpOMS\System\File\Local\File;
use \phpOMS\Uri\UriFactory;
use phpOMS\Utils\IO\Csv\CsvSettings;
use phpOMS\Utils\Parser\Markdown\Markdown;
include __DIR__ . '/template-functions.php';
@ -139,10 +141,40 @@ echo $this->getData('nav')->render();
<template id="iMediaUpdateTpl">
<textarea class="textContent" form="iMediaFileUpdate" data-tpl-text="/media/content" data-tpl-value="/media/content" data-marker="tpl" name="content"></textarea>
</template>
<pre class="textContent" data-tpl-text="/media/content" data-tpl-value="/media/content"><?= $this->printHtml(
$this->getFileContent(($media->isAbsolute ? '' : __DIR__ . '/../../../../') . $media->getPath())
); ?></pre>
<?php if ($media->extension === 'csv') :
$f = \fopen(($media->isAbsolute ? '' : __DIR__ . '/../../../../') . $media->getPath(), 'r');
echo '<table class="default">';
$delim = CsvSettings::getFileDelimiter($f, 3);
while (($line = \fgetcsv($f, 0, $delim)) !== false) {
echo '<tr>';
foreach ($line as $cell) {
echo '<td>' . \htmlspecialchars($cell);
}
}
\fclose($f);
echo '</table>';
elseif ($media->extension === 'md') : ?>
<article><?= Markdown::parse(
$this->getFileContent(($media->isAbsolute ? '' : __DIR__ . '/../../../../') . $media->getPath())
); ?></article>
<?php else : ?>
<pre class="textContent" data-tpl-text="/media/content" data-tpl-value="/media/content"><?= $this->printHtml(
$this->getFileContent(($media->isAbsolute ? '' : __DIR__ . '/../../../../') . $media->getPath())
); ?></pre>
<?php endif; ?>
<?php endif; ?>
<?php elseif ($this->isVideoFile($media, $path)) : ?>
<video width="100%" controls>
<source src="<?= $media->getPath(); ?>" type="video/<?= $media->extension; ?>">
Your browser does not support HTML video.
</video>
<?php elseif ($this->isAudioFile($media, $path)) : ?>
<audio width="100%" controls>
<source src="<?= $media->getPath(); ?>" type="audio/<?= $media->extension; ?>">
Your browser does not support HTML audio.
</audio>
<?php endif; ?>
</div>
</section>

View File

@ -18,18 +18,18 @@ $fileIconFunction = function (int $extensionType) : string
{
if ($extensionType === ExtensionType::CODE) {
return 'file-code';
} elseif ($extensionType === ExtensionType::TEXT) {
} elseif ($extensionType === ExtensionType::TEXT || $extensionType === ExtensionType::WORD) {
return 'file-text';
} elseif ($extensionType === ExtensionType::PRESENTATION) {
return 'file-powerpoint';
} elseif ($extensionType === ExtensionType::PDF) {
return 'file-pdf';
return 'file-pdf-o';
} elseif ($extensionType === ExtensionType::ARCHIVE) {
return 'file-zip';
} elseif ($extensionType === ExtensionType::AUDIO) {
return 'file-audio';
return 'file-audio-o';
} elseif ($extensionType === ExtensionType::VIDEO) {
return 'file-video';
return 'file-video-o';
} elseif ($extensionType === ExtensionType::IMAGE) {
return 'file-image-o';
} elseif ($extensionType === ExtensionType::SPREADSHEET) {

View File

@ -160,6 +160,38 @@ class MediaView extends View
|| FileUtils::getExtensionType(File::extension($path)) === ExtensionType::IMAGE;
}
/**
* Check if media file is video file
*
* @param Media $media Media file
* @param string $path File path
*
* @return bool
*
* @since 1.0.0
*/
protected function isVideoFile(Media $media, string $path = '') : bool
{
return FileUtils::getExtensionType($media->extension) === ExtensionType::VIDEO
|| FileUtils::getExtensionType(File::extension($path)) === ExtensionType::VIDEO;
}
/**
* Check if media file is audio file
*
* @param Media $media Media file
* @param string $path File path
*
* @return bool
*
* @since 1.0.0
*/
protected function isAudioFile(Media $media, string $path = '') : bool
{
return FileUtils::getExtensionType($media->extension) === ExtensionType::AUDIO
|| FileUtils::getExtensionType(File::extension($path)) === ExtensionType::AUDIO;
}
/**
* Check if media file is text file
*