cleanup, media fixes, news fixes

This commit is contained in:
Dennis Eichhorn 2019-07-30 20:23:16 +02:00
parent 02da68fcb9
commit 9a9efe4ab0
5 changed files with 100 additions and 16 deletions

View File

@ -9,7 +9,7 @@ return [
'^.*/media(\?+.*|$)' => [ '^.*/media(\?+.*|$)' => [
[ [
'dest' => '\Modules\Media\Controller\ApiController:apiMediaUpload', 'dest' => '\Modules\Media\Controller\ApiController:apiMediaUpload',
'verb' => RouteVerb::SET, 'verb' => RouteVerb::PUT,
'permission' => [ 'permission' => [
'module' => ApiController::MODULE_NAME, 'module' => ApiController::MODULE_NAME,
'type' => PermissionType::CREATE, 'type' => PermissionType::CREATE,
@ -21,6 +21,15 @@ return [
], ],
], ],
], ],
[
'dest' => '\Modules\Media\Controller\ApiController:apiMediaUpdate',
'verb' => RouteVerb::PUT,
'permission' => [
'module' => ApiController::MODULE_NAME,
'type' => PermissionType::CREATE,
'state' => PermissionState::MEDIA,
],
],
], ],
// todo: the order of find is bad but needed for now. // todo: the order of find is bad but needed for now.
'^.*/media/find.*$' => [ '^.*/media/find.*$' => [

View File

@ -63,7 +63,7 @@ final class ApiController extends Controller
} }
/** /**
* Shows api content. * Api method to upload media file.
* *
* @param RequestAbstract $request Request * @param RequestAbstract $request Request
* @param ResponseAbstract $response Response * @param ResponseAbstract $response Response
@ -209,4 +209,52 @@ final class ApiController extends Controller
) )
); );
} }
/**
* Api method to update media.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiMediaUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{
$old = clone MediaMapper::get((int) $request->getData('id'));
$new = $this->updateMediaFromRequest($request);
$this->updateModel($request, $old, $new, MediaMapper::class, 'media');
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Media', 'Media successfully updated', $new);
}
/**
* Method to update media from request.
*
* @param RequestAbstract $request Request
*
* @return Media
*
* @since 1.0.0
*/
private function updateMediaFromRequest(RequestAbstract $request) : Media
{
$media = MediaMapper::get((int) $request->getData('id'));
$media->setName((string) ($request->getData('name') ?? $media->getName()));
$media->setVirtualPath((string) ($request->getData('virtualpath') ?? $media->getVirtualPath()));
if ($request->getData('content') !== null) {
\file_put_contents(
$media->isAbsolute() ? $media->getPath() : __DIR__ . '/../../../../' . \ltrim($media->getPath(), '/'),
$request->getData('content')
);
$media->setSize(\strlen($request->getData('content')));
}
return $media;
}
} }

View File

@ -1,7 +1,7 @@
import { Request } from '../../../jsOMS/Message/Request/Request.js';
import { RequestType } from '../../../jsOMS/Message/Request/RequestType.js';
import { RequestMethod } from '../../../jsOMS/Message/Request/RequestMethod.js';
import { Logger } from '../../../jsOMS/Log/Logger.js'; import { Logger } from '../../../jsOMS/Log/Logger.js';
import { Request } from '../../../jsOMS/Message/Request/Request.js';
import { RequestMethod } from '../../../jsOMS/Message/Request/RequestMethod.js';
import { RequestType } from '../../../jsOMS/Message/Request/RequestType.js';
/** /**
* Media uploader. * Media uploader.
@ -157,7 +157,7 @@ export class Upload {
request.setData(formData); request.setData(formData);
request.setType(RequestType.FILE); request.setType(RequestType.FILE);
request.setUri(this.uri); request.setUri(this.uri);
request.setMethod(RequestMethod.POST); request.setMethod(RequestMethod.PUT);
request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest'); request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest');
request.setSuccess(function (xhr) request.setSuccess(function (xhr)
{ {

View File

@ -93,26 +93,36 @@ echo $this->getData('nav')->render();
</div> </div>
<?php else: ?> <?php else: ?>
<div class="col-xs-12"> <div class="col-xs-12">
<section class="box wf-100"> <section id="mediaFile" class="box wf-100"
data-ui-content=".inner"
data-ui-element="#mediaFile .textContent"
data-tag="form"
data-method="POST"
data-uri="<?= \phpOMS\Uri\UriFactory::build('{/api}media?{?}&csrf={$CSRF}'); ?>">
<div class="inner"> <div class="inner">
<?php <?php
$path = $this->filePathFunction($media, $this->request->getData('sub') ?? ''); $path = $this->filePathFunction($media, $this->request->getData('sub') ?? '');
if ($this->isImageFunction($media, $path)) : ?> if ($this->isImageFile($media, $path)) : ?>
<div class="h-overflow centerText"> <div class="h-overflow centerText">
<img src="<?= $media->isAbsolute() ? $this->printHtml($path) : $this->printHtml($this->request->getUri()->getBase() . $path); ?>"> <img src="<?= $media->isAbsolute() ? $this->printHtml($path) : $this->printHtml($this->request->getUri()->getBase() . $path); ?>">
</div> </div>
<?php else : ?> <?php elseif ($this->isTextFile($media, $path)) : ?>
<button class="floatRight">Edit</button> <div class="vC">
<button class="save hidden"><?= $this->getHtml('Save', '0', '0') ?></button>
<button class="cancel hidden"><?= $this->getHtml('Cancel', '0', '0') ?></button>
<button class="update"><?= $this->getHtml('Edit', '0', '0') ?></button>
</div>
<!-- if markdown show markdown editor, if image show image editor, if text file show textarea only on edit -->
<?php if (!\file_exists($media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/'))) : ?> <?php if (!\file_exists($media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/'))) : ?>
<div class="centerText"><i class="fa fa-question fa-5x"></i></div> <div class="centerText"><i class="fa fa-question fa-5x"></i></div>
<?php else : ?> <?php else : ?>
<pre> <template></template><!-- todo: this is required because of selectorLength + i in Form.js = first element = add template, second element = edit element. Fix -->
<?php <template>
$output = $this->lineContentFunction($media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/')); <textarea class="textContent" data-tpl-text="/media/content" data-tpl-value="/media/content" name="content"></textarea>
foreach ($output as $line) : ?><span><?= $this->printHtml($line); ?></span><?php endforeach; ?> </template>
</pre> <pre class="textContent" data-tpl-text="/media/content" data-tpl-value="/media/content"><?= $this->getFileContent($media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/')); ?></pre>
<?php endif; ?> <?php endif; ?>
<?php endif; ?> <?php endif; ?>
</div> </div>

View File

@ -69,6 +69,14 @@ class MediaView extends View
); );
} }
protected function getFileContent(string $path) : string
{
$output = \file_get_contents($path);
$output = \str_replace(["\r\n", "\r"], "\n", $output);
return $output;
}
protected function lineContentFunction(string $path) : array protected function lineContentFunction(string $path) : array
{ {
$output = \file_get_contents($path); $output = \file_get_contents($path);
@ -77,9 +85,18 @@ class MediaView extends View
return \explode("\n", $output); return \explode("\n", $output);
} }
protected function isImageFunction(Media $media, string $path) : bool protected function isImageFile(Media $media, string $path) : bool
{ {
return FileUtils::getExtensionType($media->getExtension()) === ExtensionType::IMAGE return FileUtils::getExtensionType($media->getExtension()) === ExtensionType::IMAGE
|| FileUtils::getExtensionType(File::extension($path)) === ExtensionType::IMAGE; || FileUtils::getExtensionType(File::extension($path)) === ExtensionType::IMAGE;
} }
protected function isTextFile(Media $media, string $path) : bool
{
$mediaExtension = FileUtils::getExtensionType($media->getExtension());
$pathExtension = FileUtils::getExtensionType(File::extension($path));
return $mediaExtension === ExtensionType::TEXT || $pathExtension === ExtensionType::TEXT
|| $mediaExtension === ExtensionType::CODE || $pathExtension === ExtensionType::CODE;
}
} }