diff --git a/sql/structure.sql b/sql/structure.sql index 4ece2f8a647390a357fa0b3023530d99b3dc90df..ba4efe2d2f0903a8c99153b6382769101cc5dc05 100755 --- a/sql/structure.sql +++ b/sql/structure.sql @@ -1619,3 +1619,25 @@ CREATE TABLE indexing_models_fields CONSTRAINT indexing_models_fields_pkey PRIMARY KEY (id) ) WITH (OIDS=FALSE); + +CREATE TABLE contacts_custom_fields_list +( + id serial NOT NULL, + label character varying(256) NOT NULL, + type character varying(256) NOT NULL, + values jsonb, + CONSTRAINT contacts_custom_fields_list_pkey PRIMARY KEY (id), + CONSTRAINT contacts_custom_fields_list_unique_key UNIQUE (label) +) +WITH (OIDS=FALSE); + +CREATE TABLE contacts_custom_fields +( + id serial NOT NULL, + contact_id INTEGER NOT NULL, + custom_field_id INTEGER NOT NULL, + value jsonb NOT NULL, + CONSTRAINT contacts_custom_fields_pkey PRIMARY KEY (id), + CONSTRAINT contacts_custom_fields_unique_key UNIQUE (contact_id, custom_field_id) +) +WITH (OIDS=FALSE); diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php index 48bcc7dbeec741b7ecec58c7d81d09776bf31227..52d3054b4f2182d63ba4104e8f4ff63fc0831d94 100755 --- a/src/app/resource/controllers/ResController.php +++ b/src/app/resource/controllers/ResController.php @@ -18,6 +18,7 @@ use AcknowledgementReceipt\models\AcknowledgementReceiptModel; use Basket\models\BasketModel; use Basket\models\GroupBasketModel; use Basket\models\RedirectBasketModel; +use Contact\models\ContactModel; use Convert\controllers\ConvertPdfController; use Convert\controllers\ConvertThumbnailController; use Convert\models\AdrModel; @@ -41,6 +42,7 @@ use IndexingModel\models\IndexingModelModel; use Note\models\NoteModel; use Priority\models\PriorityModel; use Resource\models\ResModel; +use Resource\models\ResourceContactModel; use Respect\Validation\Validator; use setasign\Fpdi\Tcpdf\Fpdi; use Slim\Http\Request; @@ -870,6 +872,16 @@ class ResController TagResModel::create(['res_id' => $args['resId'], 'tag_id' => $tag]); } } + if (!empty($body['senders'])) { + foreach ($body['senders'] as $sender) { + ResourceContactModel::create(['res_id' => $args['resId'], 'item_id' => $sender['id'], 'type' => $sender['type'], 'mode' => 'sender']); + } + } + if (!empty($body['recipients'])) { + foreach ($body['recipients'] as $recipient) { + ResourceContactModel::create(['res_id' => $args['resId'], 'item_id' => $recipient['id'], 'type' => $recipient['type'], 'mode' => 'recipient']); + } + } return true; } @@ -932,6 +944,17 @@ class ResController TagResModel::create(['res_id' => $args['resId'], 'tag_id' => $tag]); } } + ResourceContactModel::delete(['where' => ['res_id = ?'], 'data' => [$args['resId']]]); + if (!empty($body['senders'])) { + foreach ($body['senders'] as $sender) { + ResourceContactModel::create(['res_id' => $args['resId'], 'item_id' => $sender['id'], 'type' => $sender['type'], 'mode' => 'sender']); + } + } + if (!empty($body['recipients'])) { + foreach ($body['recipients'] as $recipient) { + ResourceContactModel::create(['res_id' => $args['resId'], 'item_id' => $recipient['id'], 'type' => $recipient['type'], 'mode' => 'recipient']); + } + } return true; } @@ -1121,6 +1144,50 @@ class ResController return ['errors' => 'Body tags : One or more tags do not exist']; } } + if (!empty($body['senders'])) { + if (!Validator::arrayType()->notEmpty()->validate($body['senders'])) { + return ['errors' => 'Body senders is not an array']; + } + foreach ($body['senders'] as $key => $sender) { + if (!Validator::arrayType()->notEmpty()->validate($sender)) { + return ['errors' => "Body senders[{$key}] is not an array"]; + } + if ($sender['type'] == 'contact') { + $senderItem = ContactModel::getById(['id' => $sender['id'], 'select' => [1]]); + } elseif ($sender['type'] == 'user') { + $senderItem = UserModel::getById(['id' => $sender['id'], 'select' => [1]]); + } elseif ($sender['type'] == 'entity') { + $senderItem = EntityModel::getById(['id' => $sender['id'], 'select' => [1]]); + } else { + return ['errors' => "Body senders[{$key}] type is not valid"]; + } + if (empty($senderItem)) { + return ['errors' => "Body senders[{$key}] id does not exist"]; + } + } + } + if (!empty($body['recipients'])) { + if (!Validator::arrayType()->notEmpty()->validate($body['recipients'])) { + return ['errors' => 'Body recipients is not an array']; + } + foreach ($body['recipients'] as $key => $recipient) { + if (!Validator::arrayType()->notEmpty()->validate($recipient)) { + return ['errors' => "Body recipients[{$key}] is not an array"]; + } + if ($recipient['type'] == 'contact') { + $recipientItem = ContactModel::getById(['id' => $recipient['id'], 'select' => [1]]); + } elseif ($recipient['type'] == 'user') { + $recipientItem = UserModel::getById(['id' => $recipient['id'], 'select' => [1]]); + } elseif ($recipient['type'] == 'entity') { + $recipientItem = EntityModel::getById(['id' => $recipient['id'], 'select' => [1]]); + } else { + return ['errors' => "Body recipients[{$key}] type is not valid"]; + } + if (empty($recipientItem)) { + return ['errors' => "Body recipients[{$key}] id does not exist"]; + } + } + } if (!empty($body['diffusionList'])) { if (!Validator::arrayType()->notEmpty()->validate($body['diffusionList'])) { return ['errors' => 'Body diffusionList is not an array']; diff --git a/src/app/resource/models/ResourceContactModel.php b/src/app/resource/models/ResourceContactModel.php index 6e3af9fe1734f2e67f3de332d722d474f71c8281..5732d2c701f230dcbb108f8db887328e195f6d96 100755 --- a/src/app/resource/models/ResourceContactModel.php +++ b/src/app/resource/models/ResourceContactModel.php @@ -96,34 +96,34 @@ class ResourceContactModel return $aContacts; } - public static function create(array $aArgs) + public static function create(array $args) { - ValidatorModel::notEmpty($aArgs, ['res_id', 'item_id', 'type', 'mode']); - ValidatorModel::intVal($aArgs, ['res_id', 'item_id']); - ValidatorModel::stringType($aArgs, ['type', 'mode']); + ValidatorModel::notEmpty($args, ['res_id', 'item_id', 'type', 'mode']); + ValidatorModel::intVal($args, ['res_id', 'item_id']); + ValidatorModel::stringType($args, ['type', 'mode']); DatabaseModel::insert([ 'table' => 'resource_contacts', 'columnsValues' => [ - 'res_id' => $aArgs['res_id'], - 'item_id' => $aArgs['item_id'], - 'type' => $aArgs['type'], - 'mode' => $aArgs['mode'] + 'res_id' => $args['res_id'], + 'item_id' => $args['item_id'], + 'type' => $args['type'], + 'mode' => $args['mode'] ] ]); return true; } - public static function delete(array $aArgs) + public static function delete(array $args) { - ValidatorModel::notEmpty($aArgs, ['where', 'data']); - ValidatorModel::arrayType($aArgs, ['where', 'data']); + ValidatorModel::notEmpty($args, ['where', 'data']); + ValidatorModel::arrayType($args, ['where', 'data']); DatabaseModel::delete([ 'table' => 'resource_contacts', - 'where' => $aArgs['where'], - 'data' => $aArgs['data'] + 'where' => $args['where'], + 'data' => $args['data'] ]); return true;