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(\?+.*|$)' => [
[
'dest' => '\Modules\Media\Controller\ApiController:apiMediaUpload',
'verb' => RouteVerb::SET,
'verb' => RouteVerb::PUT,
'permission' => [
'module' => ApiController::MODULE_NAME,
'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.
'^.*/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 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 { 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.
@ -157,7 +157,7 @@ export class Upload {
request.setData(formData);
request.setType(RequestType.FILE);
request.setUri(this.uri);
request.setMethod(RequestMethod.POST);
request.setMethod(RequestMethod.PUT);
request.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest');
request.setSuccess(function (xhr)
{

View File

@ -93,26 +93,36 @@ echo $this->getData('nav')->render();
</div>
<?php else: ?>
<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">
<?php
$path = $this->filePathFunction($media, $this->request->getData('sub') ?? '');
if ($this->isImageFunction($media, $path)) : ?>
if ($this->isImageFile($media, $path)) : ?>
<div class="h-overflow centerText">
<img src="<?= $media->isAbsolute() ? $this->printHtml($path) : $this->printHtml($this->request->getUri()->getBase() . $path); ?>">
</div>
<?php else : ?>
<button class="floatRight">Edit</button>
<?php elseif ($this->isTextFile($media, $path)) : ?>
<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, '/'))) : ?>
<div class="centerText"><i class="fa fa-question fa-5x"></i></div>
<?php else : ?>
<pre>
<?php
$output = $this->lineContentFunction($media->isAbsolute() ? $path : __DIR__ . '/../../../../' . \ltrim($path, '/'));
foreach ($output as $line) : ?><span><?= $this->printHtml($line); ?></span><?php endforeach; ?>
</pre>
<template></template><!-- todo: this is required because of selectorLength + i in Form.js = first element = add template, second element = edit element. Fix -->
<template>
<textarea class="textContent" data-tpl-text="/media/content" data-tpl-value="/media/content" name="content"></textarea>
</template>
<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; ?>
</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
{
$output = \file_get_contents($path);
@ -77,9 +85,18 @@ class MediaView extends View
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
|| 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;
}
}