oms-OnlineResourceWatcher/Controller/ApiController.php
2022-12-26 13:35:10 +01:00

135 lines
3.8 KiB
PHP
Executable File

<?php
/**
* Karaka
*
* PHP Version 8.1
*
* @package Modules\OnlineResourceWatcher
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\OnlineResourceWatcher\Controller;
use Modules\Admin\Models\NullAccount;
use Modules\OnlineResourceWatcher\Models\Resource;
use Modules\OnlineResourceWatcher\Models\ResourceMapper;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\NotificationLevel;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Model\Message\FormValidation;
use phpOMS\System\SystemUtils;
/**
* OnlineResourceWatcher controller class.
*
* @package Modules\OnlineResourceWatcher
* @license OMS License 1.0
* @link https://jingga.app
* @since 1.0.0
*/
final class ApiController extends Controller
{
/**
* Validate resource create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateResourceCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['title'] = empty($request->getData('title')))
|| ($val['uri'] = empty($request->getData('uri')))
) {
return $val;
}
return [];
}
/**
* Api method to create resource
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiResourceCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
if (!empty($val = $this->validateResourceCreate($request))) {
$response->set('resource_create', new FormValidation($val));
$response->header->status = RequestStatusCode::R_400;
return;
}
$resource = $this->createResourceFromRequest($request);
$this->createModel($request->header->account, $resource, ResourceMapper::class, 'resource', $request->getOrigin());
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Resource', 'Resource successfully created', $resource);
}
/**
* Method to create news article from request.
*
* @param RequestAbstract $request Request
*
* @return Resource
*
* @since 1.0.0
*/
private function createResourceFromRequest(RequestAbstract $request) : Resource
{
$resource = new Resource();
$resource->owner = new NullAccount($request->header->account);
$resource->title = (string) ($request->getData('title') ?? '');
$resource->uri = $request->getData('uri') ?? '';
$resource->owner = new NullAccount($request->header->account);
// @todo: check if user is part of organization below AND has free resources to add!!!
$resource->organization = new NullAccount(
empty($request->getData('organization'))
? $request->header->account
: (int) ($request->getData('organization'))
);
return $resource;
}
/**
* Api method to create resource
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiCheckResources(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
SystemUtils::runProc(
__DIR__ . '/server/bin/OnlineResourceWatcherServerApp', ''
);
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Resources', 'Resources are getting checked.', null);
}
}