diff --git a/src/app/email/controllers/EmailController.php b/src/app/email/controllers/EmailController.php index b94571805d69c45ddf4b1be3dfd52dcfb1fdd968..5ead851acb1f370e171f811d7e0483471f68c6ec 100644 --- a/src/app/email/controllers/EmailController.php +++ b/src/app/email/controllers/EmailController.php @@ -336,67 +336,13 @@ class EmailController return $response->withJson(['emails' => $emails]); } - public static function getAvailableEmails(Request $request, Response $response) + public function getAvailableEmails(Request $request, Response $response) { - $emails = []; + $availableEmails = EmailController::getAvailableEmailsByUserId(['userId' => $GLOBALS['id']]); - $currentUser = UserModel::getById(['select' => ['firstname', 'lastname', 'mail'], 'id' => $GLOBALS['id']]); - - $emails[] = [ - 'entityId' => null, - 'label' => $currentUser['firstname'] . ' ' . $currentUser['lastname'], - 'email' => $currentUser['mail'] - ]; - - if (PrivilegeController::hasPrivilege(['privilegeId' => 'use_mail_services', 'userId' => $GLOBALS['id']])) { - $entities = EntityModel::getWithUserEntities([ - 'select' => ['entities.entity_label', 'entities.email', 'entities.entity_id', 'entities.id'], - 'where' => ['users_entities.user_id = ?'], - 'data' => [$GLOBALS['userId']] - ]); - - foreach ($entities as $entity) { - if (!empty($entity['email'])) { - $emails[] = [ - 'entityId' => $entity['id'], - 'label' => $entity['entity_label'], - 'email' => $entity['email'] - ]; - } - } - - $emailsEntities = CoreConfigModel::getXmlLoaded(['path' => 'modules/sendmail/xml/externalMailsEntities.xml']); - if (!empty($emailsEntities)) { - $userEntities = array_column($entities, 'entity_id'); - foreach ($emailsEntities->externalEntityMail as $entityMail) { - $entityId = (string)$entityMail->targetEntityId; - - if (empty($entityId)) { - $emails[] = [ - 'entityId' => null, - 'label' => (string)$entityMail->defaultName, - 'email' => (string)$entityMail->EntityMail - ]; - } elseif (in_array($entityId, $userEntities)) { - $entity = EntityModel::getByEntityId([ - 'select' => ['entity_label', 'id'], - 'entityId' => $entityId - ]); - - if (!empty($entity)) { - $emails[] = [ - 'entityId' => $entity['id'], - 'label' => $entity['entity_label'], - 'email' => (string)$entityMail->EntityMail - ]; - } - } - } - } - } - - return $response->withJson(['emails' => $emails]); + return $response->withJson(['emails' => $availableEmails]); } + public static function getInitializationByResId(Request $request, Response $response, array $args) { if (!Validator::intVal()->validate($args['resId']) || !ResController::hasRightByResId(['resId' => [$args['resId']], 'userId' => $GLOBALS['id']])) { @@ -716,6 +662,68 @@ class EmailController return ['success' => 'success']; } + private static function getAvailableEmailsByUserId(array $args) + { + $currentUser = UserModel::getById(['select' => ['firstname', 'lastname', 'mail', 'user_id'], 'id' => $args['userId']]); + + $availableEmails = [ + [ + 'entityId' => null, + 'label' => $currentUser['firstname'] . ' ' . $currentUser['lastname'], + 'email' => $currentUser['mail'] + ] + ]; + + if (PrivilegeController::hasPrivilege(['privilegeId' => 'use_mail_services', 'userId' => $args['userId']])) { + $entities = EntityModel::getWithUserEntities([ + 'select' => ['entities.entity_label', 'entities.email', 'entities.entity_id', 'entities.id'], + 'where' => ['users_entities.user_id = ?'], + 'data' => [$currentUser['user_id']] + ]); + + foreach ($entities as $entity) { + if (!empty($entity['email'])) { + $availableEmails[] = [ + 'entityId' => $entity['id'], + 'label' => $entity['entity_label'], + 'email' => $entity['email'] + ]; + } + } + + $emailsEntities = CoreConfigModel::getXmlLoaded(['path' => 'modules/sendmail/xml/externalMailsEntities.xml']); + if (!empty($emailsEntities)) { + $userEntities = array_column($entities, 'entity_id'); + foreach ($emailsEntities->externalEntityMail as $entityMail) { + $entityId = (string)$entityMail->targetEntityId; + + if (empty($entityId)) { + $availableEmails[] = [ + 'entityId' => null, + 'label' => (string)$entityMail->defaultName, + 'email' => trim((string)$entityMail->EntityMail) + ]; + } elseif (in_array($entityId, $userEntities)) { + $entity = EntityModel::getByEntityId([ + 'select' => ['entity_label', 'id'], + 'entityId' => $entityId + ]); + + if (!empty($entity)) { + $availableEmails[] = [ + 'entityId' => $entity['id'], + 'label' => $entity['entity_label'], + 'email' => trim((string)$entityMail->EntityMail) + ]; + } + } + } + } + } + + return $availableEmails; + } + private static function controlCreateEmail(array $args) { ValidatorModel::notEmpty($args, ['userId']); @@ -732,6 +740,21 @@ class EmailController return ['errors' => 'Data isHtml is not a boolean or empty', 'code' => 400]; } + if (!empty($args['data']['sender']['email'])) { + $availableEmails = EmailController::getAvailableEmailsByUserId(['userId' => $args['userId']]); + + $emails = array_column($availableEmails, 'email'); + if (!in_array($args['data']['sender']['email'], $emails)) { + return ['errors' => 'Data sender email is not allowed', 'code' => 400]; + } + if (!empty($args['data']['sender']['entityId'])) { + $entities = array_column($availableEmails, 'entityId'); + if (!in_array($args['data']['sender']['entityId'], $entities)) { + return ['errors' => 'Data sender entityId is not allowed', 'code' => 400]; + } + } + } + $user = UserModel::getById(['id' => $args['userId'], 'select' => ['user_id']]); if (!empty($args['data']['document'] && !empty($args['data']['document']['id']))) {