diff --git a/Controller/ApiController.php b/Controller/ApiController.php index d373664..60bd4ce 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -17,11 +17,14 @@ namespace Modules\ContractManagement\Controller; use Modules\Admin\Models\NullAccount; use Modules\ContractManagement\Models\Contract; use Modules\ContractManagement\Models\ContractMapper; +use Modules\ContractManagement\Models\PermissionCategory; use Modules\Media\Models\MediaMapper; use Modules\Media\Models\PathSettings; use Modules\Organization\Models\NullUnit; +use phpOMS\Account\PermissionType; use phpOMS\Localization\NullBaseStringL11nType; use phpOMS\Message\Http\RequestStatusCode; +use phpOMS\Message\NotificationLevel; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; @@ -323,4 +326,118 @@ final class ApiController extends Controller return []; } + + /** + * Api method to create item files + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateNoteCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $request->setData('virtualpath', '/Modules/ContractManagement/Contracts/' . $request->getData('id'), true); + $this->app->moduleManager->get('Editor', 'Api')->apiEditorCreate($request, $response, $data); + + if ($response->header->status !== RequestStatusCode::R_200) { + return; + } + + $responseData = $response->getDataArray($request->uri->__toString()); + if (!\is_array($responseData)) { + return; + } + + $model = $responseData['response']; + $this->createModelRelation($request->header->account, (int) $request->getData('id'), $model->id, ContractMapper::class, 'notes', '', $request->getOrigin()); + } + + /** + * Validate item note create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateNoteCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['id'] = !$request->hasData('id')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to update Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteUpdate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + $accountId = $request->header->account; + if (!$this->app->accountManager->get($accountId)->hasPermission( + PermissionType::MODIFY, $this->app->unitId, $this->app->appId, self::NAME, PermissionCategory::NOTE, $request->getDataInt('id')) + ) { + $this->fillJsonResponse($request, $response, NotificationLevel::HIDDEN, '', '', []); + $response->header->status = RequestStatusCode::R_403; + + return; + } + + $this->app->moduleManager->get('Editor', 'Api')->apiEditorUpdate($request, $response, $data); + } + + /** + * Api method to delete Note + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiNoteDelete(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + $accountId = $request->header->account; + if (!$this->app->accountManager->get($accountId)->hasPermission( + PermissionType::DELETE, $this->app->unitId, $this->app->appId, self::NAME, PermissionCategory::NOTE, $request->getDataInt('id')) + ) { + $this->fillJsonResponse($request, $response, NotificationLevel::HIDDEN, '', '', []); + $response->header->status = RequestStatusCode::R_403; + + return; + } + + $this->app->moduleManager->get('Editor', 'Api')->apiEditorDelete($request, $response, $data); + } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 79bf26c..43c2f74 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -36,7 +36,7 @@ use phpOMS\Views\View; final class BackendController extends Controller { /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -70,7 +70,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -105,7 +105,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -135,7 +135,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -156,6 +156,7 @@ final class BackendController extends Controller $contract = ContractMapper::get() ->with('account') ->with('files') + ->with('notes') ->where('id', (int) $request->getData('id')) ->sort('files/id', 'DESC') ->execute(); @@ -176,6 +177,7 @@ final class BackendController extends Controller $view->data['editor'] = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app->l11nManager, $request, $response); $view->data['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response); + $view->data['note'] = new \Modules\Editor\Theme\Backend\Components\Note\BaseView($this->app->l11nManager, $request, $response); return $view; } diff --git a/Models/PermissionCategory.php b/Models/PermissionCategory.php index 11245fa..69220fb 100755 --- a/Models/PermissionCategory.php +++ b/Models/PermissionCategory.php @@ -17,7 +17,7 @@ namespace Modules\ContractManagement\Models; use phpOMS\Stdlib\Base\Enum; /** - * Permision state enum. + * Permission category enum. * * @package Modules\ContractManagement\Models * @license OMS License 2.0 @@ -29,4 +29,6 @@ abstract class PermissionCategory extends Enum public const CONTRACT = 1; public const CONTRACT_TYPE = 2; + + public const NOTE = 3; } diff --git a/Theme/Backend/contract-single.tpl.php b/Theme/Backend/contract-single.tpl.php index 8a80485..580f07d 100755 --- a/Theme/Backend/contract-single.tpl.php +++ b/Theme/Backend/contract-single.tpl.php @@ -16,19 +16,18 @@ declare(strict_types=1); * @var \phpOMS\Views\View $this * @var \Modules\ContractManagement\Models\Contract $contract */ -$contract = $this->data['contract']; -$contractFile = $contract->files; +$contract = $this->data['contract']; echo $this->data['nav']->render(); ?>
@@ -116,5 +115,10 @@ echo $this->data['nav']->render(); ?>
data['media-upload']->render('contract-file', 'files', '', $contract->files); ?>
+ + request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>> +
+ data['note']->render('contract-note', 'notes', $contract->notes); ?> +