Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 18 |
CRAP | |
0.00% |
0 / 270 |
NotificationUtilityService | |
0.00% |
0 / 1 |
|
0.00% |
0 / 18 |
2550.00 | |
0.00% |
0 / 270 |
__construct | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
__clone | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
getInstance | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 5 |
|||
getReceiverListForAssignmentPublishedNotification | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 22 |
|||
getStudentIdsByBatchId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
getStudentIdsBySubbatchId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
getParentPhoneNumbersOfAbsentStudents | |
0.00% |
0 / 1 |
20.00 | |
0.00% |
0 / 16 |
|||
getNotificationTypeIdFromNotificationTypeCode | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
getTemplateNameFromNotificationTypeId | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 9 |
|||
replaceNotificationTemplatesWithParameters | |
0.00% |
0 / 1 |
42.00 | |
0.00% |
0 / 24 |
|||
getMessageForNotification | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 14 |
|||
getSmsSenderList | |
0.00% |
0 / 1 |
30.00 | |
0.00% |
0 / 20 |
|||
getStudentListForSendingSms | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 10 |
|||
getStaffListForSendingSms | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 15 |
|||
getNotificationType | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 12 |
|||
updateNotifyParentOnStudentAttendanceSpecifiedTime | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 44 |
|||
getNotificationGlobalSettings | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 13 |
|||
updateEmailNotificationStudentAbsenteesList | |
0.00% |
0 / 1 |
12.00 | |
0.00% |
0 / 33 |
<?php | |
namespace com\linways\core\ams\professional\service\notification; | |
use com\linways\base\util\StringUtil; | |
use com\linways\base\util\SecurityUtils; | |
use com\linways\core\ams\professional\constant\UserType; | |
use com\linways\core\ams\professional\service\BaseService; | |
use com\linways\core\ams\professional\exception\ProfessionalException; | |
use com\linways\core\ams\professional\dto\notification\NotificationRecipient; | |
use com\linways\core\ams\professional\exception\notification\NotificationException; | |
use com\linways\core\ams\professional\constant\notification\NotificationTemplateConstant; | |
use com\linways\core\ams\professional\request\GetParentPhoneNumbersOfAbsentStudentsRequest; | |
use com\linways\core\ams\professional\request\notification\GetReceiverListForAssignmentPublishedNotificationRequest; | |
use com\linways\core\ams\professional\constant\SchedulerCodesConstant; | |
use com\linways\nucleus\core\service\SchedulerService; | |
use com\linways\core\ams\professional\request\notification\UpdateNotifyParentOnStudentAttendance; | |
class NotificationUtilityService extends BaseService | |
{ | |
// /Condition 1 - Presence of a static member variable | |
private static $_instance = null; | |
private $mapper = []; | |
// /Condition 2 - Locked down the constructor | |
private function __construct() | |
{ | |
// $this->mapper = NotificationServiceMapper::getInstance ()->getMapper (); | |
} | |
// Prevent any oustide instantiation of this class | |
// /Condition 3 - Prevent any object or instance of that class to be cloned | |
private function __clone() | |
{} | |
// Prevent any copy of this object | |
// /Condition 4 - Have a single globally accessible static method | |
public static function getInstance() | |
{ | |
if (! is_object(self::$_instance)) // or if( is_null(self::$_instance) ) or if( self::$_instance == null ) | |
self::$_instance = new self(); | |
return self::$_instance; | |
} | |
public function getReceiverListForAssignmentPublishedNotification(GetReceiverListForAssignmentPublishedNotificationRequest $request){ | |
$recipientList = []; | |
$studentIds = []; | |
if(!$request->batchId && !$request->subbatchId){ | |
throw new NotificationException(NotificationException::EMPTY_ARGUMENTS, $e->getMessage()); | |
} | |
if($request->subbatchId){ | |
$studentIds = $this->getStudentIdsBySubbatchId($request->subbatchId); | |
}else{ | |
$studentIds = $this->getStudentIdsByBatchId($request->batchId); | |
} | |
if(empty($studentIds)){ | |
return $studentIds; | |
} | |
foreach ($studentIds as $studentId) { | |
$recipient = NULL; | |
$recipient = new NotificationRecipient(); | |
$recipient->recipientId = $studentId->id; | |
$recipient->recipientType = UserType::STUDENT; | |
$recipientList[] = $recipient; | |
} | |
return $recipientList; | |
} | |
/** | |
* | |
* @param unknown $batchId | |
* @throws ProfessionalException | |
* @return object|array|\com\linways\base\util\$objectList[] | |
* @author gadheyan | |
*/ | |
private function getStudentIdsByBatchId($batchId){ | |
$sql = ""; | |
$studentIds = []; | |
$sql = "SELECT studentID as id FROM studentaccount WHERE batchID = '$batchId'"; | |
try { | |
$studentIds = $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $studentIds; | |
} | |
/** | |
* | |
* @param integer $subbatchId | |
* @throws ProfessionalException | |
* @return object|array|\com\linways\base\util\$objectList[] | |
* @author gadheyan | |
*/ | |
private function getStudentIdsBySubbatchId($subbatchId){ | |
$sql = ""; | |
$studentIds = []; | |
$sql = "SELECT studentID as id FROM subbatch_student WHERE subbatchID = '$subbatchId'"; | |
try { | |
$studentIds = $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $studentIds; | |
} | |
/** | |
* [getParentPhoneNumbersOfAbsentStudents description] | |
* @param GetParentPhoneNumbersOfAbsentStudentsRequest $request [description] | |
* @return [type] [description] | |
*/ | |
public function getParentPhoneNumbersOfAbsentStudents( GetParentPhoneNumbersOfAbsentStudentsRequest $request){ | |
if($request->attendanceDate != date("Y-m-d")){ | |
return null; | |
} | |
$response = []; | |
if(!$request->subbatchId){ | |
$sql = "SELECT DISTINCT stu.parentPhone as parentPhoneNo, stu.studentID as studentId FROM attendance att INNER JOIN studentaccount stu ON att.studentID = stu.studentID AND att.attendanceDate = '$request->attendanceDate' AND att.hour = '$request->hour' AND att.batchID = '$request->batchId' AND att.isAbsent = 1"; | |
}else{ | |
$sql = "SELECT DISTINCT stu.parentPhone as parentPhoneNo, stu.studentID as studentId FROM attendance att INNER JOIN studentaccount stu ON att.studentID = stu.studentID AND att.attendanceDate = '$request->attendanceDate' AND att.hour = '$request->hour' AND att.batchID = '$request->batchId' AND att.isAbsent = 1 INNER JOIN subbatch_student sbt ON sbt.studentID = stu.studentID AND sbt.subbatchID = '$request->subbatchId'"; | |
} | |
try { | |
$response = $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $response; | |
} | |
/** | |
* | |
* @param unknown $context | |
* @param unknown $feature | |
* @throws ProfessionalException | |
* @return unknown | |
* @author gadheyan | |
*/ | |
public function getNotificationTypeIdFromNotificationTypeCode($context, $feature){ | |
$context = $this->realEscapeString($context); | |
$feature = $this->realEscapeString($feature); | |
$sql = "SELECT id FROM notification_type WHERE context = '$context' AND feature = '$feature'"; | |
try { | |
$id = $this->executeQueryForObject($sql)->id; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $id; | |
} | |
/** | |
* | |
* @param unknown $notificationTypeId | |
* @throws ProfessionalException | |
* @return unknown | |
* @author gadheyan | |
*/ | |
public function getTemplateNameFromNotificationTypeId($notificationTypeId){ | |
$notificationTypeId = $this->realEscapeString($notificationTypeId); | |
$sql = "SELECT template_name as templateName FROM notification_type WHERE id = '$notificationTypeId'"; | |
try { | |
$templateName = $this->executeQueryForObject($sql)->templateName; | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $templateName; | |
} | |
/** | |
* | |
* @param unknown $notificationList | |
* @throws NotificationException | |
* @return unknown | |
* @author gadheyan | |
*/ | |
public function replaceNotificationTemplatesWithParameters($notificationList){ | |
// print_r($notificationList);die(); | |
$templateForNotification = null; | |
foreach ($notificationList as $key => $notification) { | |
$refClass = new \ReflectionClass('com\linways\core\ams\professional\constant\notification\NotificationTemplateConstant'); | |
$templateForNotification = $refClass->getConstant($notification->notificationType->templateName); | |
try { | |
$parameters = stripslashes($notification->recipient->templateParameters); | |
$parameters = json_decode($parameters); | |
} catch (\Exception $e) { | |
continue; | |
} | |
if(!$templateForNotification || !$parameters){ | |
throw new NotificationException(NotificationException::JSON_DECODE_ERROR, "error decoding parameters and template"); | |
} | |
try { | |
$templateForNotification = json_decode(StringUtil::replace_tags($templateForNotification,(array)$parameters)); | |
} catch (\Exception $e) { | |
} | |
$notification->content = $templateForNotification; | |
$notification->title = $templateForNotification->message_template->native->title; | |
$notification->body = $templateForNotification->message_template->native->body; | |
$notification->url = $templateForNotification->url_template; | |
} | |
return $notificationList; | |
} | |
/** | |
* [getMessageForNotification - replace the template with template parameters and return the actual message] | |
* @param [type] $template [description] | |
* @param [type] $templateParameters [description] | |
* @return [type] [description] | |
*/ | |
public function getMessageForNotification($template, $templateParameters, $isHtmlContent = 0){ | |
$template = json_encode($template); | |
$templateParameters = stripslashes($templateParameters); | |
if($isHtmlContent){ | |
$templateParameters = SecurityUtils::prepareSafeHTML($templateParameters); | |
$templateParameters = str_replace('\n','<br>',$templateParameters); | |
} | |
try { | |
$templateParameters = json_decode($templateParameters); | |
} catch (\xception $e) { | |
} | |
$template = StringUtil::replace_tags($template, (array)$templateParameters); | |
$template = json_decode($template); | |
return $template; | |
} | |
public function getSmsSenderList($notification){ | |
$smsSenderList = null; | |
if(!$notification->recipientType){ | |
error_log("\nRecipientType for notification not given. Cannot send sms"); | |
return null; | |
} | |
switch ($notification->recipientType) { | |
case UserType::STUDENT: | |
$smsSenderList = $this->getStudentListForSendingSms($notification); | |
break; | |
case UserType::STAFF: | |
$smsSenderList = $this->getStaffListForSendingSms($notification); | |
break; | |
case UserType::PARENT: | |
// code... | |
break; | |
default: | |
error_log("\nInvalid UserType. Cannot get sms sender list!"); | |
break; | |
} | |
return $smsSenderList; | |
} | |
public function getStudentListForSendingSms($notification){ | |
$sql = ""; | |
$smsSenderList = null; | |
$sql = "SELECT nr.id, sa.studentID as recipientId, sa.studentPhone as phone FROM notification_recipient nr INNER JOIN studentaccount sa ON nr.recipient_id = sa.studentID AND nr.is_read = 0 AND nr.notification_id = '".$notification->id."'"; | |
try { | |
$smsSenderList = $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $smsSenderList; | |
} | |
public function getStaffListForSendingSms($notification){ | |
$sql = ""; | |
$smsSenderList = null; | |
$sql = "SELECT | |
nr.id, sa.staffID AS recipientId, sa.staffPhone AS phone | |
FROM | |
notification_recipient nr | |
INNER JOIN | |
staffaccounts sa ON nr.recipient_id = sa.staffID AND sa.isResigned = 0 AND nr.is_read = 0 AND nr.notification_id = '".$notification->id."'"; | |
try { | |
$smsSenderList = $this->executeQueryForList($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $smsSenderList; | |
} | |
/** | |
* Method for getting notification type | |
* @param string $context | |
* @param string $feature | |
* @throws ProfessionalException | |
* @return object|NULL|\com\linways\base\util\$objectList[] | |
*/ | |
public function getNotificationType($context,$feature) | |
{ | |
$notificationType = null; | |
$context = $this->realEscapeString($context); | |
$feature = $this->realEscapeString($feature); | |
$sql = "select id, name, context, feature, template_name as templateName, custom_template as customTemplate, created_by as createdBy, created_date as createdDate, updated_by as updatedBy, updated_date as updatedDate from notification_type WHERE context = '$context' AND feature = '$feature'"; | |
try { | |
$notificationType = $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
return $notificationType; | |
} | |
/** | |
* Method for updating notify parent on student attendance at specified time | |
* @param UpdateNotifyParentOnStudentAttendance $updateNotifyParentOnStudentAttendance | |
* @throws ProfessionalException | |
*/ | |
public function updateNotifyParentOnStudentAttendanceSpecifiedTime($updateNotifyParentOnStudentAttendance) | |
{ | |
$sqlUpdateGlobalSettings = null; | |
$sqlUpdateNotificationType = null; | |
$smsEnabled = 0; | |
$userId = $_SESSION['adminID']; | |
$updateNotifyParentOnStudentAttendance = $this->realEscapeObject($updateNotifyParentOnStudentAttendance); | |
try { | |
//Update Global notification settings | |
$smsEnabled = $updateNotifyParentOnStudentAttendance->enableSMSNotification; | |
$customSettingsValue = new \stdClass(); | |
$customSettingsValue->previousDayAttendance = $updateNotifyParentOnStudentAttendance->previousDayAttendance; | |
$customSettingsValue->includeOnlyAbsentHours = $updateNotifyParentOnStudentAttendance->includeOnlyAbsentHours; | |
$customSettingsValue->time = $updateNotifyParentOnStudentAttendance->notifyTime; | |
$sqlUpdateGlobalSettings = "UPDATE notification_settings_global set sms_enabled = $smsEnabled,custom_settings_value = '".json_encode($customSettingsValue)."',updated_by='$userId',updated_date=utc_timestamp() where id = $updateNotifyParentOnStudentAttendance->globalSettingsId"; | |
$this->executeQuery($sqlUpdateGlobalSettings); | |
//Update notification type | |
$sqlUpdateNotificationType = "UPDATE notification_type set | |
custom_template = '$updateNotifyParentOnStudentAttendance->smsContent', | |
updated_by='$userId', | |
updated_date=utc_timestamp() | |
where context = '$updateNotifyParentOnStudentAttendance->context' and feature = '$updateNotifyParentOnStudentAttendance->feature'"; | |
$this->executeQuery($sqlUpdateNotificationType); | |
//Add or update Scheduler | |
$scheduleCode = SchedulerCodesConstant::NOTIFY_PARENTS_ON_STUDENT_ATTENDANCE_SPECIFIED_TIME."_".$GLOBALS['COLLEGE_CODE']; | |
//delete existing task | |
SchedulerService::getInstance()->deleteScheduledTaskByCode($scheduleCode); | |
//add task if sms enabled | |
if($smsEnabled) | |
{ | |
$schedule = new \stdClass(); | |
$schedule->params = []; | |
$schedule->method = "com\\linways\\core\\ams\\professional\\service\\notification\\ScheduledNotifications::notifyParentOnStudentAttendanceOnSpecifiedTime"; | |
$schedule->params["command"] = 'EXECUTE SERVICE'; | |
$schedule->params["taskParams"] = []; | |
$schedule->params["taskParams"]["className"] = "com\\\\linways\\\\core\\\\ams\\\\professional\\\\service\\\\notification\\\\ScheduledNotifications"; | |
$schedule->params["taskParams"]["methodName"] = "notifyParentOnStudentAttendanceOnSpecifiedTime"; | |
$schedule->params["taskParams"]["methodParams"] = []; | |
$timeForSchedule = explode(':', $updateNotifyParentOnStudentAttendance->notifyTime); | |
$hour = $timeForSchedule[0]; | |
$minute = $timeForSchedule[1]; | |
$schedule->frequency = "$minute $hour"." * * *"; | |
$schedule->code = $scheduleCode; | |
$schedule->id = SchedulerService::getInstance()->addTask($schedule); | |
SchedulerService::getInstance()->updateNextExecution($schedule); | |
} | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Method for getting notification settings | |
* @param $context,$feature | |
* @throws ProfessionalException | |
* @return object|NULL | |
*/ | |
public function getNotificationGlobalSettings($context,$feature) | |
{ | |
$context = $this->realEscapeString($context); | |
$feature = $this->realEscapeString($feature); | |
$sql = "SELECT nsg.id, nsg.name, nsg.notification_type_id, nsg.custom_settings_value,nsg.feature_enabled,nsg.email_enabled | |
from notification_type nt | |
inner join notification_settings_global nsg on nsg.notification_type_id = nt.id | |
where nt.feature = 'EMAIL_NOTIFICATION_TO_FACULTYS_OF_ABSENTEES_STUDENT_REPORT'"; | |
try { | |
return $this->executeQueryForObject($sql); | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
/** | |
* Method for update emailNotificationStudentAbsenteesList | |
* @param $context,$feature | |
* @throws ProfessionalException | |
* @return object|NULL | |
*/ | |
public function updateEmailNotificationStudentAbsenteesList($request) | |
{ | |
$sql = "UPDATE notification_settings_global SET | |
custom_settings_value = '$request->customSettingsValue', | |
feature_enabled = $request->isEnabled | |
WHERE id = $request->globalSettingsId "; | |
try { | |
$this->executeQuery($sql); | |
$notificationDetails = $this->getNotificationGlobalSettings($request->context,$request->feature); | |
//Add or update Scheduler | |
$scheduleCode = SchedulerCodesConstant::EMAIL_NOTIFICATION_TO_FACULTEES_ABSENTEES_STUDENT_LIST."_".$GLOBALS['COLLEGE_CODE']; | |
//delete existing task | |
SchedulerService::getInstance()->deleteScheduledTaskByCode($scheduleCode); | |
//add task if email enabled | |
if($notificationDetails->email_enabled == '1') | |
{ | |
$schedule = new \stdClass(); | |
$schedule->params = []; | |
$schedule->method = "com\\linways\\core\\ams\\professional\\service\\notification\\ScheduledNotifications::sendEmailNotificationToFaculteesAbsenteesStudentList"; | |
$schedule->params["command"] = 'EXECUTE SERVICE'; | |
$schedule->params["taskParams"] = []; | |
$schedule->params["taskParams"]["className"] = "com\\\\linways\\\\core\\\\ams\\\\professional\\\\service\\\\notification\\\\ScheduledNotifications"; | |
$schedule->params["taskParams"]["methodName"] = "sendEmailNotificationToFaculteesAbsenteesStudentList"; | |
$schedule->params["taskParams"]["methodParams"] = []; | |
$timeForSchedule = explode(':', $request->time); | |
$hour = $timeForSchedule[0]; | |
$minute = str_replace("AM","",$timeForSchedule[1]); | |
+ $minute = str_replace("PM","",$minute); | |
$schedule->frequency = "$minute $hour"." * * *"; | |
$schedule->code = $scheduleCode; | |
$schedule->id = SchedulerService::getInstance()->addTask($schedule); | |
SchedulerService::getInstance()->updateNextExecution($schedule); | |
} | |
} catch (\Exception $e) { | |
throw new ProfessionalException($e->getCode(), $e->getMessage()); | |
} | |
} | |
} |