Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 96 |
| V4IntimationLogService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 2 |
1056.00 | |
0.00% |
0 / 96 |
| saveV4IntimationLog | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 42 |
|||
| validateIntimationLog | |
0.00% |
0 / 1 |
870.00 | |
0.00% |
0 / 54 |
|||
| <?php | |
| namespace com\linways\core\ams\professional\service; | |
| use com\linways\base\constant\UserType; | |
| use com\linways\base\util\MakeSingletonTrait; | |
| use com\linways\core\ams\professional\constant\V4IntimationLogModuleConstants; | |
| use com\linways\core\ams\professional\constant\V4IntimationLogReceiverTypeContext; | |
| use com\linways\core\ams\professional\constant\V4IntimationLogStatusConstants; | |
| use com\linways\core\ams\professional\constant\V4IntimationTypeConstants; | |
| use com\linways\core\ams\professional\dto\V4IntimationLog; | |
| use com\linways\core\ams\professional\dto\V4IntimationLogExtraDetails; | |
| use com\linways\core\ams\professional\exception\ProfessionalException; | |
| class V4IntimationLogService extends BaseService | |
| { | |
| use MakeSingletonTrait; | |
| /** | |
| * @param SaveV4IntimationLogRequest $request | |
| * @return String $id | |
| * @throws ProfessionalException | |
| */ | |
| /** | |
| * Save v4 intimation log | |
| * | |
| * This method inserts logs to v4 intimation log table | |
| * | |
| * @param V4IntimationLog $v4IntimationLog | |
| * @return String $id | |
| * @throws ProfessionalException | |
| **/ | |
| public function saveV4IntimationLog(V4IntimationLog $v4IntimationLog) | |
| { | |
| try { | |
| $this->validateIntimationLog($v4IntimationLog); | |
| $isScheduledIntimation = $v4IntimationLog->isScheduledIntimation == true ? 1 : 0; | |
| $v4IntimationLog = $this->realEscapeObject($v4IntimationLog); | |
| $extraDetails = json_encode($v4IntimationLog->extraDetails); | |
| $insertSql = "INSERT | |
| INTO | |
| v4_intimation_log (user_id, | |
| user_type, | |
| receiver_type_context, | |
| type, | |
| content, | |
| status, | |
| module, | |
| context, | |
| sender_user_id, | |
| sender_user_type, | |
| send_time, | |
| extra_details, | |
| is_scheduled_intimation, | |
| created_by) | |
| VALUES ('$v4IntimationLog->userId', | |
| '$v4IntimationLog->userType', | |
| '$v4IntimationLog->receiverTypeContext', | |
| '$v4IntimationLog->type', | |
| '$v4IntimationLog->content', | |
| '$v4IntimationLog->status', | |
| '$v4IntimationLog->module', | |
| '$v4IntimationLog->context', | |
| '$v4IntimationLog->senderUserId', | |
| '$v4IntimationLog->senderUserType', | |
| '$v4IntimationLog->sendTime', | |
| '$extraDetails', | |
| '$isScheduledIntimation', | |
| '$v4IntimationLog->createdBy')"; | |
| $result = $this->executeQuery($insertSql,true); | |
| return $result->id; | |
| } catch (\Exception $e) { | |
| throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
| } | |
| } | |
| /** | |
| * Validate intimation log | |
| * | |
| * This method validate the intimation log object | |
| * | |
| * @param V4IntimationLog $v4IntimationLog | |
| * @return null | |
| * @throws ProfessionalException | |
| **/ | |
| protected function validateIntimationLog(V4IntimationLog $v4IntimationLog) | |
| { | |
| // IF ANY NEW SUPPORTED TYPES ARE ADDED IN FUTURE, ADD THEM HERE | |
| $currentSupportedUserTypes = [UserType::STAFF, UserType::STUDENT]; | |
| $currentSupportedIntimationTypes = [V4IntimationTypeConstants::EMAIL, V4IntimationTypeConstants::SMS]; | |
| $currentSupportedStatuses = [V4IntimationLogStatusConstants::SUCCESS, V4IntimationLogStatusConstants::FAILED]; | |
| $currentSupportedSenderUserTypes = [UserType::STAFF, UserType::STUDENT]; | |
| $currentSupportedModules = [V4IntimationLogModuleConstants::ACADEMICS]; | |
| $currentSupportedReceiverTypeConstants = [V4IntimationLogReceiverTypeContext::STAFF, V4IntimationLogReceiverTypeContext::STUDENT, V4IntimationLogReceiverTypeContext::FATHER, V4IntimationLogReceiverTypeContext::MOTHER]; | |
| if (empty($v4IntimationLog->userId) | |
| || empty($v4IntimationLog->userType) | |
| || empty($v4IntimationLog->type) | |
| || empty($v4IntimationLog->status) | |
| || empty($v4IntimationLog->module) | |
| || empty($v4IntimationLog->context) | |
| || (empty($v4IntimationLog->senderUserId) && $v4IntimationLog->isScheduledIntimation != true) | |
| || empty($v4IntimationLog->senderUserType) | |
| || empty($v4IntimationLog->receiverTypeContext) | |
| || (empty($v4IntimationLog->createdBy) && $v4IntimationLog->isScheduledIntimation != true) | |
| ) { | |
| throw new ProfessionalException(ProfessionalException::EMPTY_PARAMETERS, 'Cannot save log. Empty parameter(s).'); | |
| } | |
| // VALIDATING USER TYPE | |
| if (!in_array($v4IntimationLog->userType, $currentSupportedUserTypes)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "User type should be either of ".implode(" or ", $currentSupportedUserTypes).""); | |
| } | |
| // VALIDATE CONTEXT LENGTH SHOULD BE LESS THAN 200 | |
| if (strlen($v4IntimationLog->context) > 200) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Context should be less than 200 characters"); | |
| } | |
| // Check if the context is a constant defined in V4IntimationLogContextConstants class | |
| if (!defined('com\linways\core\ams\professional\constant\V4IntimationLogContextConstants::' . $v4IntimationLog->context)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Context should be a constant defined in V4IntimationLogContextConstants class"); | |
| } | |
| // VALIDATING INTIMATION TYPE | |
| if (!in_array($v4IntimationLog->type, $currentSupportedIntimationTypes)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Intimation type should be either of ".implode(" or ", $currentSupportedIntimationTypes).""); | |
| } | |
| // VALIDATING STATUS | |
| if (!in_array($v4IntimationLog->status, $currentSupportedStatuses)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Status type should be either of ".implode(" or ", $currentSupportedStatuses).""); | |
| } | |
| // VALIDATING SENDER USER TYPE | |
| if (!in_array($v4IntimationLog->senderUserType, $currentSupportedSenderUserTypes)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Sender user type should be either of ".implode(" or ", $currentSupportedSenderUserTypes).""); | |
| } | |
| // VALIDATING RECEIVER TYPE CONTEXT | |
| if (!in_array($v4IntimationLog->receiverTypeContext, $currentSupportedReceiverTypeConstants)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Receiver type context should be either of ".implode(" or ", $currentSupportedReceiverTypeConstants).""); | |
| } | |
| // VALIDATING MODULE | |
| if (!in_array($v4IntimationLog->module, $currentSupportedModules)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Sender user type should be either of ".implode(" or ", $currentSupportedModules).""); | |
| } | |
| // VALIDATE EXTRA DETAILS | |
| if (!($v4IntimationLog->extraDetails instanceof V4IntimationLogExtraDetails)) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Extra details should be an instance of V4IntimationLogExtraDetails"); | |
| } | |
| // VALIDATE isAttachmentIncluded is set either as '0 or '1' if the intimation type is email | |
| if ($v4IntimationLog->type == V4IntimationTypeConstants::EMAIL && (!is_string($v4IntimationLog->extraDetails->isAttachmentIncluded) || ($v4IntimationLog->extraDetails->isAttachmentIncluded !== '0' && $v4IntimationLog->extraDetails->isAttachmentIncluded !== '1'))) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "isAttachmentIncluded should be set for email intimation type and it should be either string '0' or '1' value"); | |
| } | |
| // VALIDATE errorCode if status is failed | |
| if ($v4IntimationLog->status == V4IntimationLogStatusConstants::FAILED && (empty($v4IntimationLog->extraDetails->errorCode) || empty($v4IntimationLog->extraDetails->errorMessage))) { | |
| throw new ProfessionalException(ProfessionalException::INVALID_PARAMETERS, "Error code and error message should be included in the extra details for failed status"); | |
| } | |
| } | |
| } |