getParsedBody(); if (empty($data->id)) { throw new BadRequest(); } $id = $data->id; $parentType = $data->parentType ?? null; $field = $data->field ?? null; return $this->getEmailService()->getCopiedAttachments($id, $parentType, null, $field); } /** * @throws Forbidden * @throws NotFound * @throws Error * @throws BadRequest */ public function postActionSendTestEmail(Request $request): bool { if (!$this->acl->checkScope(EmailEntity::ENTITY_TYPE)) { throw new Forbidden(); } $data = get_object_vars($request->getParsedBody()); $allowedParamList = [ 'type', 'id', 'username', 'password', 'auth', 'authMechanism', 'userId', 'fromAddress', 'fromName', 'server', 'port', 'security', 'emailAddress', ]; foreach (array_keys($data) as $key) { if (!in_array($key, $allowedParamList)) { throw new BadRequest("Not allowed parameter `{$key}`."); } } $emailAddress = $data['emailAddress'] ?? null; if (!is_string($emailAddress)) { throw new BadRequest("No email address."); } /** * @var array{ * type?: ?string, * id?: ?string, * username?: ?string, * password?: ?string, * auth?: bool, * authMechanism?: ?string, * userId?: ?string, * fromAddress?: ?string, * fromName?: ?string, * server: string, * port: int, * security: string, * emailAddress: string, * } $data */ $this->getEmailService()->sendTestEmail($data); return true; } /** * @throws BadRequest */ public function postActionMarkAsRead(Request $request): bool { $data = $request->getParsedBody(); if (!empty($data->ids)) { $idList = $data->ids; } else { if (!empty($data->id)) { $idList = [$data->id]; } else { throw new BadRequest(); } } $this->getEmailService()->markAsReadByIdList($idList); return true; } /** * @throws BadRequest */ public function postActionMarkAsNotRead(Request $request): bool { $data = $request->getParsedBody(); if (!empty($data->ids)) { $idList = $data->ids; } else { if (!empty($data->id)) { $idList = [$data->id]; } else { throw new BadRequest(); } } $this->getEmailService()->markAsNotReadByIdList($idList); return true; } public function postActionMarkAllAsRead(): bool { $this->getEmailService()->markAllAsRead(); return true; } /** * @throws BadRequest */ public function postActionMarkAsImportant(Request $request): bool { $data = $request->getParsedBody(); if (!empty($data->ids)) { $idList = $data->ids; } else { if (!empty($data->id)) { $idList = [$data->id]; } else { throw new BadRequest(); } } $this->getEmailService()->markAsImportantByIdList($idList); return true; } /** * @throws BadRequest */ public function postActionMarkAsNotImportant(Request $request): bool { $data = $request->getParsedBody(); if (!empty($data->ids)) { $idList = $data->ids; } else { if (!empty($data->id)) { $idList = [$data->id]; } else { throw new BadRequest(); } } $this->getEmailService()->markAsNotImportantByIdList($idList); return true; } /** * @throws BadRequest */ public function postActionMoveToTrash(Request $request): bool { $data = $request->getParsedBody(); if (!empty($data->ids)) { $idList = $data->ids; } else { if (!empty($data->id)) { $idList = [$data->id]; } else { throw new BadRequest(); } } $this->getEmailService()->moveToTrashByIdList($idList); return true; } /** * @throws BadRequest */ public function postActionRetrieveFromTrash(Request $request): bool { $data = $request->getParsedBody(); if (!empty($data->ids)) { $idList = $data->ids; } else { if (!empty($data->id)) { $idList = [$data->id]; } else { throw new BadRequest(); } } $this->getEmailService()->retrieveFromTrashByIdList($idList); return true; } public function getActionGetFoldersNotReadCounts(): stdClass { return $this->getEmailService()->getFoldersNotReadCounts(); } /** * @throws BadRequest */ public function postActionMoveToFolder(Request $request): bool { $data = $request->getParsedBody(); if (!empty($data->ids)) { $idList = $data->ids; } else if (!empty($data->id)) { $idList = [$data->id]; } else { throw new BadRequest(); } if (empty($data->folderId)) { throw new BadRequest(); } $this->getEmailService()->moveToFolderByIdList($idList, $data->folderId); return true; } /** * @throws Forbidden */ public function getActionGetInsertFieldData(Request $request): stdClass { if (!$this->acl->checkScope(EmailEntity::ENTITY_TYPE, Table::ACTION_CREATE)) { throw new Forbidden(); } return $this->getEmailTemplateService()->getInsertFieldData([ 'parentId' => $request->getQueryParam('parentId'), 'parentType' => $request->getQueryParam('parentType'), 'to' => $request->getQueryParam('to'), ]); } private function getEmailService(): Service { /** @var Service */ return $this->getRecordService(); } private function getEmailTemplateService(): EmailTemplateService { /** @var EmailTemplateService */ return $this->getServiceFactory()->create('EmailTemplate'); } }