diff --git a/src/app/basket/controllers/BasketController.php b/src/app/basket/controllers/BasketController.php index 6fb297459c18f6b0486f898cc1220d6a378d37d4..06976ea57b67d6b84274ce31f75460a7e8db5a05 100755 --- a/src/app/basket/controllers/BasketController.php +++ b/src/app/basket/controllers/BasketController.php @@ -494,8 +494,9 @@ class BasketController $data['list_display'] = json_encode($data['list_display']); if ($data['list_event'] == 'processDocument') { $listEventData = [ - 'canUpdate' => !empty($data['list_event_data']['canUpdate']), - 'defaultTab' => $data['list_event_data']['defaultTab'] ?? 'dashboard' + 'canUpdate' => !empty($data['list_event_data']['canUpdate']), + 'canUpdateModel' => !empty($data['list_event_data']['canUpdateModel']), + 'defaultTab' => $data['list_event_data']['defaultTab'] ?? 'dashboard' ]; } diff --git a/src/app/group/controllers/PrivilegeController.php b/src/app/group/controllers/PrivilegeController.php index 73caa642b926de379806a8481fc5ee65130bc89f..03057730d69ce62342ba8d31964c521d9aac4c63 100644 --- a/src/app/group/controllers/PrivilegeController.php +++ b/src/app/group/controllers/PrivilegeController.php @@ -299,6 +299,10 @@ class PrivilegeController $where[] = "list_event_data->>'canUpdate' = ?"; $data[] = 'true'; } + if (!empty($args['canUpdateModel'])) { + $where[] = "list_event_data->>'canUpdateModel' = ?"; + $data[] = 'true'; + } $baskets = GroupBasketModel::get(['select' => ['basket_id'], 'where' => $where, 'data' => $data]); $baskets = array_column($baskets, 'basket_id'); if (!empty($baskets)) { @@ -322,6 +326,10 @@ class PrivilegeController $where[] = "list_event_data->>'canUpdate' = ?"; $data[] = 'true'; } + if (!empty($args['canUpdateModel'])) { + $where[] = "list_event_data->>'canUpdateModel' = ?"; + $data[] = 'true'; + } $hasSB = GroupBasketModel::get(['select' => [1], 'where' => $where, 'data' => $data]); if (!empty($hasSB)) { $basketOwner = UserModel::getById(['id' => $basket['owner_user_id'], 'select' => ['user_id']]); diff --git a/src/app/resource/controllers/ResourceControlController.php b/src/app/resource/controllers/ResourceControlController.php index fee22e77f3ba9c21353272160d1539999daf42b2..4ac16788699620c1df6a8756e0bff2b79f4b2c07 100644 --- a/src/app/resource/controllers/ResourceControlController.php +++ b/src/app/resource/controllers/ResourceControlController.php @@ -21,6 +21,7 @@ use CustomField\models\CustomFieldModel; use Doctype\models\DoctypeModel; use Entity\models\EntityModel; use Folder\controllers\FolderController; +use Group\controllers\PrivilegeController; use IndexingModel\models\IndexingModelFieldModel; use IndexingModel\models\IndexingModelModel; use Priority\models\PriorityModel; @@ -133,6 +134,20 @@ class ResourceControlController return ['errors' => 'Resource can not be modified because of status']; } + if (!empty($body['modelId'])) { + if (!PrivilegeController::isResourceInProcess(['userId' => $GLOBALS['id'], 'resId' => $args['resId'], 'canUpdate' => true, 'canUpdateModel' => true])) { + return ['errors' => 'Model can not be modified']; + } + $indexingModel = IndexingModelModel::getById(['id' => $body['modelId'], 'select' => ['master', 'enabled']]); + if (empty($indexingModel)) { + return ['errors' => 'Body modelId does not exist']; + } elseif (!$indexingModel['enabled']) { + return ['errors' => 'Body modelId is disabled']; + } elseif (!empty($indexingModel['master'])) { + return ['errors' => 'Body modelId is not public']; + } + } + if ($args['onlyDocument'] && empty($body['encodedFile'])) { return ['errors' => 'Body encodedFile is not set or empty']; } elseif (!empty($body['encodedFile'])) { @@ -165,7 +180,9 @@ class ResourceControlController return ['errors' => $control['errors']]; } - $body['modelId'] = $resource['model_id']; + if (empty($body['modelId'])) { + $body['modelId'] = $resource['model_id']; + } $control = ResourceControlController::controlIndexingModelFields(['body' => $body, 'isUpdating' => true]); if (!empty($control['errors'])) { return ['errors' => $control['errors']]; diff --git a/src/app/resource/controllers/StoreController.php b/src/app/resource/controllers/StoreController.php index 5682d6bc61270a181ce99ba555c5e3016722e3a6..8a308f9fe488dc38c383560247b3fdb1f6937f5f 100755 --- a/src/app/resource/controllers/StoreController.php +++ b/src/app/resource/controllers/StoreController.php @@ -229,6 +229,9 @@ class StoreController $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['version', 'alt_identifier', 'external_id', 'category_id', 'type_id', 'destination']]); + if (!empty($args['modelId'])) { + $preparedData['model_id'] = $args['modelId']; + } if (empty($resource['alt_identifier'])) { $chrono = ChronoModel::getChrono(['id' => $resource['category_id'], 'entityId' => $resource['destination'], 'typeId' => $resource['type_id'], 'resId' => $args['resId']]); $preparedData['alt_identifier'] = $chrono;