smsHelper = new SendSMSHelper(); } ################################################################ # Custom Notification ################################################################ public function custom_notifications() { $data['page_name'] = 'Custom Notifications'; if ($this->request->is('post')) { session()->setFlashdata('reset', true); $records = $this->request->getVar(); if ($records['mode'] == 'Email') { helper('notification'); $notification = new NotificationHelper(); $records['description'] = $records['maildescription']; $data = $notification->sendEmail($records); $parents_status = 0; $receiving_status = 0; if (isset($data['error'])) { session()->setFlashdata('error', 'Message: ' . $data['error']); $history_msg = $data; } if (isset($data['success'])) { session()->setFlashdata('success', 'Message: ' . $data['success']); $parents_status = 1; $receiving_status = 1; $history_msg = 'Email sent successfully'; } $history_msg = (strtolower(gettype($history_msg)) == "string" ? $history_msg : json_encode($history_msg)); $NotificationModel = new NotificationModel(); $history_parents_data = ['campaign_id' => 0, 'status' => $parents_status]; $history_parent_id = $NotificationModel->save_notification_history_parents($history_parents_data); $history_child_data = [ 'fkid' => $history_parent_id, 'customer_id' => 0, 'receiving_entity' => $records['recipient_email'], 'receiving_status' => $receiving_status, 'message' => $records['description'], 'result' => strtolower(gettype($history_msg)) == "string" ? $history_msg : json_encode($history_msg) ]; $history_child_id = $NotificationModel->save_notification_history_child($history_child_data); $this->logger->error('Custom Notifications Email : historychildid = ' . $history_child_id); } else { $records = $this->request->getVar(); $doc_details = $this->request->getFile('media_doc'); $params = (object) Null; $parents_status = 0; $receiving_status = 0; $doc_path = APPPATH . '../public/uploads/'; $doc_name = ''; $errorMessages = []; $this->logger->error("Whatsapp : sending message instance id = " . $_ENV['WAAI_INSTANCE'] . " - " . $_ENV['WAAI_TOKEN']); if ($records['mobile'] != "") { $string = $records['mobile']; $mobile_no_arr = explode(',', $string); $total_number_count = count($mobile_no_arr); $sended_number_count = 0; $not_sended_number_count = 0; // Step 1 Categories Check if ($records['categories'] == 'SEND_WAAI_GROUP_URL') { if ($records['group_id'] != "") { $params->group_id = $records['group_id']; } else { session()->setFlashdata('error', 'Group Id Missing Please Try again..'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } } else if ($records['categories'] == 'SEND_WAAI_URL') { if ($records['mobile'] == "") { session()->setFlashdata('error', 'Mobile Number Missing Please Try again..'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } } else { session()->setFlashdata('error', 'Please Choose your Category..'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } // Step 2 Media Check, Document Also Convert into Media Here. if ($records['type'] == 'media') { if ($records['media_url'] != "") { $params->media_url = $records['media_url']; $params->type = "media"; } else { session()->setFlashdata('error', 'Media Url Missing Please Try again..'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } } elseif ($records['type'] == 'document') { $doc_details = $this->request->getFile('media_doc'); $doc_path = APPPATH . '../public/uploads/'; if (empty($doc_details)) { session()->setFlashdata('error', 'Please select a file to upload.'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } if (!$doc_details->isValid() || $doc_details->getClientMimeType() !== 'image/jpeg') { session()->setFlashdata('error', 'Please upload a valid JPEG image.'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } $doc_name = $doc_details->getName(); if ($doc_name === '') { $this->logger->error("Err on upload: name not found"); session()->setFlashdata('error', 'Document name not found. Please try again.'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } $doc_details->move($doc_path, $doc_name); $params->media_url = base_url() . 'public/uploads/' . $doc_name; $params->type = "media"; $this->logger->error("Name After Upload: " . $doc_name); } else { $params->type = "text"; } $NotificationModel = new NotificationModel(); $history_parents_data = ['campaign_id' => 0, 'status' => 0, 'field_value' => $records['mobile']]; $history_parent_id = $NotificationModel->save_notification_history_parents($history_parents_data); // print_r($mobile_no_arr); if (!empty($mobile_no_arr)) { foreach ($mobile_no_arr as $mobile) { // try { $exceptionOccurred = false; // echo "----$mobile"; if (trim(strlen($mobile)) == 10) { if (ctype_digit($mobile)) { if ($mobile != "") { $params->number = (int)'91' . $mobile; $url = constant($records['categories']); $params->instance_id = $_ENV['WAAI_INSTANCE']; $params->access_token = $_ENV['WAAI_TOKEN']; $params->message = strip_tags(ltrim($records['description'])); $this->logger->error("Whatsapp : Request Type ==> Mobile Number = " . $mobile . " - " . gettype($params)); helper('notification'); $notification = new NotificationHelper(); $success = $notification->sendWhatsAppMessage($url, "POST", $params); // echo "
";print_r($success);echo "
"; $receiving_status = $success['receiving_status']; $parents_status = $success['receiving_status']; $this->logger->error("Whatsapp : Reponse ==> Mobile Number = " . $mobile . " Waai Reponse = " . json_encode($success['reponse'])); $history_msg = strtolower(gettype($success)) == "string" ? $success : json_encode($success['reponse']); // $tag = (int)$receiving_status === 1 ? 'success' : 'error' ; // session()->setFlashdata($tag, 'Message : ' . $success['message']); (int)$receiving_status === 1 ? $sended_number_count++ : $not_sended_number_count++; } else { $receiving_status = 0; $parents_status = 0; $history_msg = "Mobile Number = " . $mobile . " is invalid."; $this->logger->error("Whatsapp : Reponse ==> " . $history_msg); $not_sended_number_count++; $errorMessages[] = $history_msg; } } elseif (ctype_alpha($mobile)) { $receiving_status = 0; $parents_status = 0; $history_msg = "Mobile Number = " . $mobile . " is a character."; $this->logger->error("Whatsapp : Reponse ==> " . $history_msg); $not_sended_number_count++; $errorMessages[] = $history_msg; } else { $receiving_status = 0; $parents_status = 0; $history_msg = "Mobile Number = " . $mobile . " is a combination of characters and numbers."; $this->logger->error("Whatsapp : Reponse ==> " . $history_msg); $not_sended_number_count++; $errorMessages[] = $history_msg; } } else { $history_msg = "Mobile Number = " . $mobile . " does not have 10 digits."; $this->logger->error("Whatsapp : Reponse ==> " . $history_msg); $not_sended_number_count++; $errorMessages[] = $history_msg; } $history_child_data = [ 'fkid' => $history_parent_id, 'customer_id' => 0, 'receiving_entity' => $mobile, 'receiving_status' => $receiving_status, 'message' => $records['description'], 'result' => $history_msg ]; $NotificationModel = new NotificationModel(); $history_child_id = $NotificationModel->save_custom_notification_history_child($history_child_data); $this->logger->error('Custom Notifications Whatsapp : historychildid = ' . $history_child_id); } if (!empty($errorMessages)) { $this->logger->error(implode("\n", $errorMessages)); session()->setFlashdata('error', implode('
', $errorMessages)); $errorMessages = []; } if ($sended_number_count > 0) { $NotificationModel = new NotificationModel(); $history_parent_statement = $NotificationModel->update_notification_history_parent_status(['status' => 1], $history_parent_id, 0); $this->logger->error($history_parent_statement); session()->setFlashdata("success", "Message : Sent Success (" . $sended_number_count . " / " . $total_number_count . " )"); $this->logger->error("Whatsapp : Final ==> " . $sended_number_count . " Sended out of " . $total_number_count . " ( Not sended numbers count " . $not_sended_number_count . " ) "); } $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } else { session()->setFlashdata('error', 'Message : Mobile Not Founded'); $this->logger->error('Message : Mobile Not Founded'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } } else { session()->setFlashdata('error', 'Message : Mobile Field Empty'); $this->logger->error('Message : Mobile Field Empty'); $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); return; } } } $data['page_name'] = 'Custom Notifications'; $this->render_page('notifications_form', $data); } public function due_date_notifications() { $date = $this->request->getGet('date'); $model = new NotificationModel(); $details = $model->getSubscriptionDueDetail($date); // echo "
";
        // print_r($details);
        // echo "
"; // die; $records = []; $recipient_name = ""; $recipient_email = ""; $recipient_mobile = ""; $subscription_name = ""; $business_name = ""; $to_subscription = ""; if (isset($details)) { $this->logger->error("Notification : Duedate notification Request data type = " . gettype($details)); } helper('notification'); $notification = new NotificationHelper(); foreach ($details as $rec) { $recipient_name = $rec['customer_name']; $recipient_email = $rec['customer_email']; $recipient_mobile = $rec['customer_mobile']; // $recipient_email = "sanjeev.p@venbainfotech.com"; // $recipient_mobile = 6369084112; $business_name = $rec['business_name']; $subscription_name = $rec['title']; $to_subscription = $rec['to_subscription']; } $records['template_name'] = ''; $records['recipient_name'] = $recipient_name; $records['recipient_email'] = $recipient_email ? $recipient_email : "sanjeev.p@venbainfotech.com"; $records['subject'] = $business_name . " - Due Date Reminder"; $records['description'] = " Due Date Reminder

Hello " . $recipient_name . ",

This is a reminder that the following subscription is due soon:

Subscription Name:" . $subscription_name . "

Due Date: " . $to_subscription . "

Please make sure to complete this subscription on time.

Thank you.

"; $template = "Hello " . $recipient_name . ",\r\r\n\nThis is a reminder that the following subscription is due soon:\r\n- Subscription Name: " . $subscription_name . "\r\n Due Date: " . $to_subscription . "\r\n\nPlease make sure to complete this subscription on time.\n Thank you."; $params = (object) Null; $params->number = (int)'91' . $recipient_mobile; $params->type = "text"; $params->message = $template; $params->instance_id = $_ENV['WAAI_INSTANCE']; $params->access_token = $_ENV['WAAI_TOKEN']; $this->logger->error("Notification : Duedate notification Email Request data = " . json_encode($records)); $email_result = $notification->sendEmail($records); $this->logger->error("Notification : Duedate notification Email Response = " . json_encode($email_result)); $this->logger->error("Notification : Duedate notification Whatsapp Request data = " . json_encode($params)); $whatsapp_result = $notification->sendWhatsAppMessage(SEND_WAAI_URL, "POST", $params); $this->logger->error("Notification : Duedate notification Whatsapp Response = " . json_encode($whatsapp_result)); } public function template_creation() { $data['page_name'] = 'Template Details'; $model = new NotificationModel(); $data['template'] = $model->getTemplateDetails(); $this->render_page('template_creation', $data); // echo "templates";die; } ################################################################## # Template Creation Insertion/updation Process ReferWith : Sanjeev ################################################################## public function template_creation_form($id) { $data['group_details'] = $this->get_group_details(); $model = new NotificationModel(); if ($id === '0') { $this->logger->error("Template Creation: In Add Page"); $data['page_name'] = 'Add Template'; $data['template_id'] = (int)$id; $data['template_details'] = []; } elseif ($id !== '0') { $this->logger->error("Template Creation: In Edit Page ID =" . $id); $data['page_name'] = 'Edit Template'; $model->setTable('templates'); $where = ['template_id' => (int)$id]; $result = $model->where($where)->findAll(); $data['template_id'] = (int)$id; $data['template_details'] = !empty($result[0]) ? $result[0] : []; } // print_r($data['template_details']);die(); $this->render_page('template_creation_form', $data); } ############################################################################## # Template Creation Delection which means inactive Process ReferWith : Sanjeev ############################################################################## public function template_creation_delete($id) { try { helper('session'); $session_uid = get_logged_user_id(); $model = new NotificationModel(); $model->setTable('templates'); $where = ['template_id' => (int)$id]; $result = $model->where($where)->findAll(); if ($result) { $this->logger->error("Template: Going to Inactive ID = " . $id); $data = ['isactive' => 0, 'updated_by' => $session_uid, 'template_id' => (int)$id]; $statement = $model->saveDetails($data, 'template_id', 'templates'); // just updating Inactive status only. if ($statement['success']) { session()->setFlashdata('success', $statement['success'] ? 'Deleted successfully.' : ""); $this->logger->error($statement['log']); } else if ($statement['error']) { session()->setFlashdata('error', $statement['error']); $this->logger->error($statement['log']); } else { throw new \Exception("Template: Err Occur on data the Template Inactive"); } } } catch (\Exception $e) { $this->logger->error("Template: Err Occur = " . $e->getMessage() . " File = " . $e->getFile() . " Line = " . $e->getLine()); session()->setFlashdata('error', 'Message: ' . $e->getMessage()); } return redirect()->route('template_creation'); } public function get_group_details() { $model = new NotificationModel(); $model->setTable('customer_groups'); // $details = $model->where('isactive',1)->orderBy('group_id', 'ASC')->findAll(); $where = ['isactive' => 1, 'group_name != ' => 'EXPIRYDATE']; $details = $model->where($where)->orderBy('group_id', 'ASC')->findAll(); return $details; } public function get_template_details() { $model = new NotificationModel(); $model->setTable('templates'); $details = $model ->where(['templates.isactive' => 1]) ->whereNotIn('templates.template_name', array('EXPIRY NOTIFY TEMPLATE EMAIL', 'EXPIRY NOTIFY TEMPLATE WHATSAPP')) ->orderBy('templates.template_id', 'ASC')->findAll(); return $details; } public function template_creation_insert() { $this->logger->error("Template: Inserting/Updating Details"); try { ## Declarions helper('session'); $model = new NotificationModel(); $session_uid = get_logged_user_id(); $id = $this->request->getPost('template_id'); $subject = $this->request->getPost('subject') ? $this->request->getPost('subject') : NULL; $isactive = $id != "" ? $this->request->getPost('isactive') : 'on'; $templatemessage = ""; if ($this->request->getPost('mode') === "Email") { $templatemessage = $this->request->getPost('templatemessage'); } else if ($this->request->getPost('mode') === "Whatsapp") { $templatemessage = $this->request->getPost('whatsapptemplatemessage'); } $data = [ 'template_id' => $id, 'template_name' => $this->request->getPost('templatename'), 'subject' => $subject, 'message' => $templatemessage, 'mode' => $this->request->getPost('mode'), 'isactive' => (($isactive == 'on') ? 1 : 0), 'created_by' => $session_uid, 'updated_by' => $session_uid ]; $statement = $model->saveDetails($data, 'template_id', 'templates'); if ($statement['success']) { session()->setFlashdata('success', $statement['success']); $this->logger->error($statement['log']); } else if ($statement['error']) { session()->setFlashdata('error', $statement['error']); $this->logger->error($statement['log']); } else { throw new \Exception("Template: Err Occur"); } } catch (\Exception $e) { $this->logger->error("Template: Err Occur =" . $e->getMessage()); session()->setFlashdata('error', 'Message: ' . $e->getMessage()); } return redirect()->route('template_creation'); } public function campaign_creation() { $data['page_name'] = 'Campaign Details'; $model = new NotificationModel(); $data['campaign'] = $model->getCampaignDetails(); $this->render_page('campaign_creation', $data); // echo "templates";die; } public function campaign_creation_form($id) { $data['group_details'] = $this->get_group_details(); $data['template_details'] = $this->get_template_details(); $model = new NotificationModel(); if ($id === '0') { $this->logger->error("Campaign Creation: In Add Page"); $data['page_name'] = 'Add Campaign'; $data['campaign_details'] = []; } elseif ($id !== '0') { $this->logger->error("Campaign Creation: In Edit Page ID =" . $id); $data['page_name'] = 'Edit Campaign'; $model->setTable('notification_campaign'); $where = ['campaign_id' => (int)$id]; $result = $model->where($where)->findAll(); if (!empty($result)) { foreach ($result as $i => $item) { $result[$i]['group_id'] = unserialize($item['group_id']); } } $data['campaign_details'] = !empty($result[0]) ? $result[0] : []; } $this->render_page('campaign_creation_form', $data); } public function campaign_creation_delete($id) { try { helper('session'); $session_uid = get_logged_user_id(); $model = new NotificationModel(); $model->setTable('notification_campaign'); $where = ['campaign_id' => (int)$id]; $result = $model->where($where)->findAll(); if ($result) { $this->logger->error("Campaign: Going to Inactive ID = " . $id); $data = ['isactive' => 0, 'updated_by' => $session_uid, 'campaign_id' => (int)$id]; $statement = $model->saveDetails($data, 'campaign_id', 'notification_campaign'); // just updating Inactive status only. if ($statement['success']) { session()->setFlashdata('success', $statement['success'] ? 'Deleted successfully.' : ""); $this->logger->error($statement['log']); } else if ($statement['error']) { session()->setFlashdata('error', $statement['error']); $this->logger->error($statement['log']); } else { throw new \Exception("Campaign: Err Occur on data the Template Inactive"); } } } catch (\Exception $e) { $this->logger->error("Campaign: Err Occur = " . $e->getMessage() . " File = " . $e->getFile() . " Line = " . $e->getLine()); session()->setFlashdata('error', 'Message: ' . $e->getMessage()); } return redirect()->route('campaign_creation'); } public function campaign_creation_insert() { $this->logger->error("Campaign: Inserting/Updating Details"); try { ## Declarions helper('session'); $model = new NotificationModel(); $session_uid = get_logged_user_id(); $id = $this->request->getPost('campaign_id'); $request_data = $this->request->getPost(); $isactive = $id == "" ? 1 : (isset($request_data['isactive']) && $request_data['isactive'] == 'on' ? 1 : 0); $data = [ 'campaign_id' => $id, 'campaign_name' => $this->request->getPost('campaign_name'), 'template_id' => $this->request->getPost('template_id'), // 'scheduled_date' => $this->request->getPost('scheduled_date'), // 'scheduled_time' => $this->request->getPost('scheduled_time') != "" ? $this->request->getPost('scheduled_time') : NULL, 'mode' => $this->request->getPost('mode'), 'group_id' => serialize($this->request->getPost('group_id')), 'isactive' => $isactive, 'created_by' => $session_uid, 'updated_by' => $session_uid ]; if ($id != "") { // id has value means updation process. $notify_mod = new NotificationModel(); $notify_mod->setTable('notification_campaign'); $where = ['campaign_id' => (int)$id]; $isactive_check = $notify_mod->where($where)->select('isactive')->first(); if ((int)$isactive_check['isactive'] === 0 && $isactive === 0) { $statement['success'] = ''; $statement['error'] = 'Notification Campaign already In-Active. can`t able to update.'; $statement['log'] = "Notification Campaign: already inactive status.Can`t able to update, Notification Campaign Group ID = " . $id; } else { $statement = $model->saveDetails($data, 'campaign_id', 'notification_campaign'); } } else { // id has no value means insertion process. $statement = $model->saveDetails($data, 'campaign_id', 'notification_campaign'); } if ($statement['success']) { $tid = $data['template_id']; $cid = $data['campaign_id'] ? $data['campaign_id'] : $statement['insert_id']; $this->scheduledNotifications($tid, $cid, 1); session()->setFlashdata('success', $statement['success']); $this->logger->error($statement['log']); } else if ($statement['error']) { session()->setFlashdata('error', $statement['error']); $this->logger->error($statement['log']); } else { throw new \Exception("Campaign: Err Occur"); } } catch (\Exception $e) { $this->logger->error("Campaign: Err Occur =" . $e->getMessage()); session()->setFlashdata('error', 'Message: ' . $e->getMessage()); } return redirect()->route('campaign_creation'); } ################################################################ # Expiry Notification ReferWith : Hema ################################################################ public function getExpCustomerDetail($window_time = null, $to_time = null) { // dd($window_time); // $valid_dates = [0,1,7,15,30]; // if(!in_array($window_time,$valid_dates) ){ // return "Please enter a valid notification period. Accepted values are 0, 7, 15, or 30 days."; // } $NotificationModel = new NotificationModel(); $this->update_expired_members(); $response = "
"; // $response = "
 Hi, Started. 
"; # Step 1: add the days to retrive the data// $providedDate = date('Y-m-d'); // if ($this->request->getmethod() == 'post') { // $window_time = $this->request->getGet('params'); // } // dd($window_time); if ($window_time != '') { if ($window_time >= 0) { $newDate = date('Y-m-d', strtotime("$providedDate + $window_time days")); } else { $newDate = date('Y-m-d', strtotime("$providedDate $window_time days")); } $ExpCustomerDetail = $NotificationModel->getExpDate(); // Retrieve the stored query // echo("Inside If"); // print_r(''.$ExpCustomerDetail);die(); } else { $dateData = $this->request->getGet('to_date'); $newDate = date('Y-m-d', strtotime($dateData)); $ExpCustomerDetail = $NotificationModel->getExpDate2(); } # Step 2 :Get the customer detail// if (empty($ExpCustomerDetail)) { $this->logger->error('No customer group found by the name of EXPIRYDATE'); return; } if ($window_time != '') { $modifiedQuery = str_replace('WINDOW_TIME', $window_time, $ExpCustomerDetail); //print_r($modifiedQuery);die; } else { $from_date2 = $this->request->getGet('from_date'); $to_date2 = $this->request->getGet('to_date'); $from_date = DateTime::createFromFormat('d/m/Y', $from_date2)->format('Y-m-d'); $to_date = DateTime::createFromFormat('d/m/Y', $to_date2)->format('Y-m-d'); // Add single quotes around the date values during the replacement $modifiedQuery = str_replace('FROM_DATE', "'$from_date'", $ExpCustomerDetail); $modifiedQuery = str_replace('TO_DATE', "'$to_date'", $modifiedQuery); } if (empty($modifiedQuery)) { $this->logger->error('There is no sub query'); return; } # Step 3: Replace the placeholder WINDOW_TIME with the user-provided value $db = \Config\Database::connect(); $queryResult = $db->query($modifiedQuery)->getResultArray(); $notification = new NotificationHelper(); if (empty($queryResult)) { $this->logger->error("There is no customer expiring on date:{$newDate}"); $response .= "There is no customer expiring. Date = " . date('d/m/Y', strtotime($newDate)) . "
"; return $this->response->setBody($response); } $emailTemplateName = $NotificationModel->getTempName('EXPIRY NOTIFY TEMPLATE EMAIL'); $this->logger->error("Customer expiring. till {$newDate} There are " . count($queryResult) . " persons"); $response .= "Customer expiring list. ( Date = " . date('d/m/Y', strtotime($newDate)) . " )
There are " . count($queryResult) . " persons
"; if (!empty($queryResult)) { usort($queryResult, function ($a, $b) { return $a['to_subscription'] <=> $b['to_subscription']; //Asc order }); } foreach ($queryResult as $inx => $row) { $subscription_id = $row['sub_id']; $status = $row['status']; $fullName = trim($row['first_name'] . ' ' . $row['last_name']); $userMobileNumber = $row['mobile_no']; $email = $row['email']; $schemename = $row['title']; $expirydate = $row['to_subscription']; $customerId = $row['customer_id']; $membership_id = $row['membership_id']; $countdays = $row['countdays']; if (empty($fullName)) { $this->logger->error('No subscription name found for record #' . $inx); continue; } $response .= ($inx + 1) . ") #{$customerId} - Person Name = {$fullName} / {$membership_id} --- (Expiry on " . date('d/m/Y', strtotime($expirydate)) . ")
"; // Skip records with non-approved status if ($status !== 'Approved') { $response .= ($inx + 1) . ") Status = {$status}
"; $this->logger->error("Record #{$inx}: status is not Approved"); continue; } // Email Notification $emailTemplateName = $NotificationModel->getTempName('EXPIRY NOTIFY TEMPLATE EMAIL'); if (!empty($emailTemplateName)) { $existingEmailCheck = $NotificationModel->checkAlreadyExistingInHistory($email, $customerId, $subscription_id); if (empty($existingEmailCheck)) { $campaign_id = 1; # Insertion on History Email Means Campaign ID 1 Hardcoded $history_parents_data = ['campaign_id' => $campaign_id, 'status' => 0]; $history_parent_id = $NotificationModel->save_notification_history_parents($history_parents_data); $emailContent = $emailTemplateName[0]['message']; $emailContent = str_replace( ['{USER_NAME}', '{SCHEME_NAME}', '{EXPIRY_DATE}', '{RENEWAL_LINK}'], [ $fullName, $schemename, date('d-m-Y', strtotime($expirydate)), '' . getenv("SMS_SUB_URL") . $membership_id . '', ], $emailContent ); $emailData = [ 'template_name' => 'EXPIRY NOTIFY TEMPLATE EMAIL', 'recipient_email' => $email, 'subject' => 'Your Subscription Expiry Notification', 'description' => $emailContent, ]; $history_child_data = [ 'fkid' => $history_parent_id, 'customer_id' => $customerId, 'receiving_entity' => $email, 'receiving_status' => 0, 'subscription_id' => $subscription_id, 'message' => $emailContent ]; $history_child_id = $NotificationModel->save_notification_history_child($history_child_data); $emailResult = $notification->sendEmail($emailData); if (isset($emailResult['success']) && !empty($emailResult['success'])) { $history_msg = 'Email sent successfully'; $history_child_updatedata = ['receiving_status' => 1, 'result' => $history_msg]; $history_child_where = ['fkid' => $history_parent_id, 'id' => (int)$history_child_id]; $history_child_statement = $NotificationModel->update_notification_history_child($history_child_updatedata, $history_child_where); $this->logger->error($history_child_statement); $history_parent_statement = $NotificationModel->update_notification_history_parent_status(['status' => 1], $history_parent_id, $campaign_id); $this->logger->error($history_parent_statement); $response .= ($inx + 1) . ") " . $history_msg . "
"; } else { $history_msg = (strtolower(gettype($emailResult)) == "string" ? $emailResult : json_encode($emailResult)); $history_child_updatedata = ['receiving_status' => 0, 'result' => $history_msg]; $history_child_where = ['fkid' => $history_parent_id, 'id' => (int)$history_child_id]; $history_child_statement = $NotificationModel->update_notification_history_child($history_child_updatedata, $history_child_where); $this->logger->error($history_child_statement); $history_parent_statement = $NotificationModel->update_notification_history_parent_status(['status' => 1], $history_parent_id, $campaign_id); $this->logger->error($history_parent_statement); $response .= ($inx + 1) . ") Failed to send email
"; } } else { $check_existing = 0; $check_email_date = ""; if (!empty($existingEmailCheck)) { foreach ($existingEmailCheck as $i => $r) { $check_email_date = ($r['receiving_status'] == 1) ? $r['sent_time'] : ""; } } if ($check_email_date) { $response .= ($inx + 1) . ") Email already send on - " . date('d/m/Y h:i A', strtotime($check_email_date)) . "
"; $this->logger->error(($inx + 1) . ") Email already sent to {$email}"); $this->logger->error(($inx + 1) . ") Email already sent on {$check_email_date}"); } } } else { $response .= ($inx + 1) . ") No email template found
"; $this->logger->error(($inx + 1) . ") No email template found
"); } // WhatsApp Notification // $whatsappTemplateName = $NotificationModel->getTempName('EXPIRY NOTIFY TEMPLATE WHATSAPP'); // if (!empty($whatsappTemplateName)) { // $existingWhatsAppCheck = $NotificationModel->checkAlreadyExistingInHistory($userMobileNumber, $customerId, $subscription_id); // if (empty($existingWhatsAppCheck)) { // $campaign_id = 2; // $history_parents_data = ['campaign_id' => $campaign_id, 'status' => 0]; // $history_parent_id = $NotificationModel->save_notification_history_parents($history_parents_data); // $whatsappContent = $whatsappTemplateName[0]['message']; // $whatsappContent = str_replace( // ['{USER_NAME}', '{SCHEME_NAME}', '{EXPIRY_DATE}', '{RENEWAL_LINK}'], // [ // $fullName, // $schemename, // date('d-m-Y', strtotime($expirydate)), // base_url() . 'subscription_renewal/' . $customerId, // ], // $whatsappContent // ); // $params = (object)[ // 'number' => '91' . $userMobileNumber, // 'type' => 'text', // 'message' => $whatsappContent, // 'instance_id' => $_ENV['WAAI_INSTANCE'], // 'access_token' => $_ENV['WAAI_TOKEN'], // ]; // $whatsappResult = $notification->sendWhatsAppMessage(SEND_WAAI_URL, "POST", $params); // $history_child_data = [ // 'fkid' => $history_parent_id, // 'customer_id' => $customerId, // 'receiving_entity' => $userMobileNumber, // 'receiving_status' => 0, // 'subscription_id' => $subscription_id, // 'message' => strip_tags(ltrim($whatsappContent)) // ]; // $history_child_id = $NotificationModel->save_notification_history_child($history_child_data); // $receiving_status = $whatsappResult['receiving_status']; // $history_msg = strtolower(gettype($whatsappResult)) == "string" ? $whatsappResult : json_encode($whatsappResult['reponse']); // $history_child_updatedata = ['receiving_status' => $receiving_status, 'result' => $history_msg]; // $history_child_where = ['fkid' => $history_parent_id, 'id' => (int)$history_child_id]; // $history_child_statement = $NotificationModel->update_notification_history_child($history_child_updatedata, $history_child_where); // $this->logger->error($history_child_statement); // $history_parent_statement = $NotificationModel->update_notification_history_parent_status(['status' => 1], $history_parent_id, $campaign_id); // $this->logger->error($history_parent_statement); // if (strtolower(gettype($whatsappResult)) == "string") { // $response .= ($inx + 1) . ") " . $whatsappResult . "
"; // } else { // $result = json_encode($whatsappResult['reponse']); // $decodedResult = json_decode($result, true); // if ($decodedResult && isset($decodedResult['message']['key']['remoteJid'])) { // $remoteJid = $decodedResult['message']['key']['remoteJid']; // $this->logger->error("EXPIRAY NOTIFY TEMPLATE WHATSAPP Remote Jid = " . $remoteJid); // $response .= ($inx + 1) . ") Whatsapp sent successfully
"; // } else { // // echo "Failed to extract remoteJid"; // $this->logger->error("EXPIRAY NOTIFY TEMPLATE WHATSAPP Failed to extract remoteJid "); // $response .= ($inx + 1) . ") Failed to send Whatsapp
"; // } // } // } else { // $check_whatsapp_date = ""; // if (!empty($existingWhatsAppCheck)) { // foreach ($existingWhatsAppCheck as $i => $r) { // $check_whatsapp_date = ($r['receiving_status'] == 1) ? $r['sent_time'] : ""; // } // } // if ($check_whatsapp_date) { // $response .= ($inx + 1) . ") WhatsApp already send on - " . date('d/m/Y h:i A', strtotime($check_whatsapp_date)) . "
"; // $this->logger->error(($inx + 1) . ") WhatsApp already sent to {$userMobileNumber}"); // $this->logger->error(($inx + 1) . ") WhatsApp already sent on {$check_whatsapp_date}"); // } // } // } else { // $response .= ($inx + 1) . ") No WhatsApp template found
"; // } // SMS Notification $smsTemplateName = $NotificationModel->getTempName('EXPIRY NOTIFY TEMPLATE SMS'); $this->logger->error("SMS Template Name : " . json_encode($smsTemplateName)); if (!empty($smsTemplateName)) { $this->logger->error("Found SMS Template"); $existingSMSCheck = $NotificationModel->checkAlreadyExistingInHistory($userMobileNumber, $customerId, $subscription_id); $this->logger->error("Existing SMS Check : " . json_encode($existingSMSCheck)); if (empty($existingSMSCheck)) { try { $template_message = $smsTemplateName[0]['message']; $message = str_replace( ["{#USERNAME#}", "{#EXPIRY#}", "{#LINK#}"], [$fullName, date('d-m-Y', strtotime($expirydate)), getenv("SMS_SUB_URL") . $membership_id], $template_message ); $campaign_id = $NotificationModel->getCampaignID($smsTemplateName[0]['template_id']); $userMobileNumber = $userMobileNumber != null && $userMobileNumber != "" ?"91" . $userMobileNumber : ""; $sent_status = $this->smsHelper->sendSMS($message, $userMobileNumber, $campaign_id,$membership_id); $this->logger->error("Sent Status : ".json_encode($sent_status)); $history_msg = $sent_status; $response .= ($inx + 1) . ") " . $history_msg . "
"; } catch (Exception $e) { $this->logger->error("Error while sending SMS: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine()); } } else { $check_sms_date = ""; foreach ($existingSMSCheck as $i => $r) { $check_sms_date = ($r['receiving_status'] == 1) ? $r['sent_time'] : ""; } if ($check_sms_date) { $response .= ($inx + 1) . ") SMS already send on - " . date('d/m/Y h:i A', strtotime($check_sms_date)) . "
"; $this->logger->error(($inx + 1) . ") SMS already sent to {$userMobileNumber}"); $this->logger->error(($inx + 1) . ") SMS already sent on {$check_sms_date}"); } } } else { $response .= ($inx + 1) . ") No SMS template found
"; } # Loop Closed } $response .= "Process Completed
"; if ($this->request->getmethod() == 'get') { return $response; } else { return $this->response->setBody($response); } } public function update_expired_members() { $model = new SubscriptionModel(); $currentDate = date('Y-m-d'); $model->where('to_subscription <', $currentDate) ->set(['status' => 0]) ->update(); log_message('error', 'inside the update function'); } # getExpCustomerDetail fns Closed ################################################################ # Auto Scheduled Notification ################################################################ ## notification campaign details public function processScheduledNotifications() { $this->scheduledNotifications(0, 0, 0); // parameter are template_id is zero , campaign_id is zero , dummy is zero } public function scheduledNotifications($tid, $cid, $dummyvariable) { $this->logger->error("Auto Scheduled Notification Started"); $model = new NotificationModel(); #step 1 get scheduled notification details $notification_campaign_result = $this->getScheduledNotificationDetails($tid, $cid); $this->logger->error("Auto Scheduled Campaign Details Count = " . count($notification_campaign_result)); if (!count($notification_campaign_result)) { $this->logger->error("No Auto Scheduled Notification in DB,exiting...!"); $this->logger->error("Auto Scheduled Notification Ends"); if ($dummyvariable == 0) { echo "No Scheduled Data Founded" . "
"; exit(); } } // echo "Notification campaign Result Array in count = ".count($notification_campaign_result)."
"; //looping multiple notification campaign if (count($notification_campaign_result)) { foreach ($notification_campaign_result as $index => $single_campaign) { if ($dummyvariable == 0) { echo "Notification Campaign Name = " . $single_campaign['campaign_name'] . "
"; } #step 2 get template details $template = $this->getTemplateDetails($single_campaign['template_id']); $customer_details = $this->getCustomerDetails($single_campaign['group_id']); $this->logger->error("Auto Scheduled Template Details TID = " . $single_campaign['template_id']); if (count($template) && count($customer_details)) { #step 3 execute the customer group query and return customer details $sent_customer_details = []; if (count($customer_details)) { #step 2.1 $history_parents_data = ['campaign_id' => $single_campaign['campaign_id'], 'status' => 0]; $history_parent_id = $model->save_notification_history_parents($history_parents_data); $single_campaign['history_parent_id'] = $history_parent_id; foreach ($customer_details as $customer) { $customer['customer_name'] = isset($customer['customer_name']) ? $customer['customer_name'] : (isset($customer['first_name']) && isset($customer['last_name']) ? $customer['first_name'] . ' ' . $customer['last_name'] : ''); $customer['scheme_name'] = isset($customer['scheme_name']) ? $customer['scheme_name'] : (isset($customer['title']) ? $customer['title'] : ""); $formatted_due_date = ""; if (isset($customer['to_subscription'])) { $dateObj = date_create($customer['to_subscription']); $formatted_due_date = date_format($dateObj, 'd-m-Y'); } else { $formatted_due_date = $customer['formatted_due_date']; } $customer['formatted_due_date'] = $formatted_due_date; #step 4 replace templates palceholders with data points $notificationContent = $this->replaceTemplateWithDataPoints($template['message'], $customer); $history_child_data = [ 'fkid' => $single_campaign['history_parent_id'], 'customer_id' => $customer['customer_id'], 'receiving_entity' => $single_campaign['mode'] == 'Email' ? $customer['email'] : $customer['mobile_no'], 'receiving_status' => 0, 'message' => $notificationContent ]; $history_child_id = $model->save_notification_history_child($history_child_data); //check wheather if notification send to the current customer already if (!in_array($customer['customer_id'], $sent_customer_details)) { $this->logger->error("Auto Scheduled Customer CID = " . $customer['customer_id'] . ", CN = " . $customer['customer_name']); #step 5 send notification $notification = new NotificationHelper(); if ($single_campaign['mode'] == 'Email') { $email_response = $notification->sendEmail(array('recipient_email' => $customer['email'], 'subject' => $template['subject'], 'template_name' => $template['template_name'], 'description' => $notificationContent)); $mail_log = isset($email_response['success']) ? 'Email sent successfully' : 'Failed to send email'; $receiving_status = isset($email_response['success']) ? 1 : 0; $this->logger->error("Auto Scheduled Email CID = " . $customer['customer_id'] . " " . $mail_log); $history_child_where = ['fkid' => $single_campaign['history_parent_id'], 'id' => (int)$history_child_id]; $history_child_updatedata = ['receiving_status' => $receiving_status, 'result' => isset($email_response['success']) ? $mail_log : (strtolower(gettype($email_response)) == "string" ? $email_response : json_encode($email_response))]; $history_child_statement = $model->update_notification_history_child($history_child_updatedata, $history_child_where); $this->logger->error($history_child_statement); } if ($single_campaign['mode'] == 'Whatsapp') { $params = (object) Null; $url = SEND_WAAI_URL; $params->type = "text"; $params->instance_id = $_ENV['WAAI_INSTANCE']; $params->access_token = $_ENV['WAAI_TOKEN']; $params->message = strip_tags(ltrim($notificationContent)); $params->number = (int)'91' . $customer['mobile_no']; $whatsapp_reponse = $notification->sendWhatsAppMessage($url, "POST", $params); $whatsapp_reponse_msg = strtolower(gettype($whatsapp_reponse)) == "string" ? $whatsapp_reponse : json_encode($whatsapp_reponse['reponse']); // echo "Whatsapp Response = ".$whatsapp_reponse_msg."
"; $this->logger->error("Auto Scheduled Whatsapp CID = " . $customer['customer_id'] . " " . $whatsapp_reponse_msg); $history_child_where = ['fkid' => $single_campaign['history_parent_id'], 'id' => (int)$history_child_id]; $history_child_updatedata = ['receiving_status' => $whatsapp_reponse['receiving_status'], 'result' => $whatsapp_reponse_msg]; $history_child_statement = $model->update_notification_history_child($history_child_updatedata, $history_child_where); $this->logger->error($history_child_statement); } array_push($sent_customer_details, $customer['customer_id']); } } } // #step 6 update campaign status to 1 $statement = $model->update_notification_campaign_status(['status' => 1], $single_campaign['campaign_id']); if ($dummyvariable == 0) { echo "Final Campaign Status = " . $statement . "
"; } $this->logger->error($statement); #step 7 update history parent status to 1 $history_parent_statement = $model->update_notification_history_parent_status(['status' => 1], $history_parent_id, $single_campaign['campaign_id']); if ($dummyvariable == 0) { echo "Final Acknowlegdement = " . $history_parent_statement . "
"; } $this->logger->error($history_parent_statement); } } } } #step 1 get scheduled notification details function getScheduledNotificationDetails($tid, $cid) { $model = new NotificationModel(); if ($tid == 0 && $cid == 0) { $templateIds = [1, 2]; $model->setTable('notification_campaign'); $notification_campaign_result = $model->whereIn('template_id', $templateIds)->where('isactive', 1)->findAll(); } else { $templateIds = [$tid]; $model->setTable('notification_campaign'); $notification_campaign_result = $model->whereIn('template_id', $templateIds)->where(['isactive' => 1, 'campaign_id' => $cid])->findAll(); } // $today = date('Y-m-d'); // $currentTime = date('H:i:s'); // $endTime = date('H:i:s', strtotime('+30 minutes')); // $where = ['scheduled_date' => $today,'isactive' => 1, // 'scheduled_time >=' => $currentTime, // 'scheduled_time <=' => $endTime // ]; // $model->setTable('notification_campaign'); // $notification_campaign_result = $model->where($where)->findAll(); // echo $model->getLastQuery(); return $notification_campaign_result; } #step 2 get template details function getTemplateDetails($template_id) { $model = new NotificationModel(); $model->setTable('templates'); $where = ['template_id' => $template_id, 'isactive' => 1]; $result = $model->where($where)->first(); return $result; } #step 3 execute the customer group query and return customer details function getCustomerDetails($group_ids) { $group_id_arr = unserialize($group_ids); $this->logger->error("Auto Scheduled Customer Group CGID = " . implode(", ", $group_id_arr)); $customer_details = []; if (count($group_id_arr)) { foreach ($group_id_arr as $group_id) { // echo "gid".$group_id; $model = new NotificationModel(); $model->setTable('customer_groups'); $customer_group_result = $model->where(['group_id' => $group_id, 'isactive' => 1])->findAll(); $db = \Config\Database::connect(); if (count($customer_group_result)) { $sql = (string)$customer_group_result[0]['group_query']; $query = $db->query($sql); $sql_group_results = $query->getResultArray(); // print_r($sql_group_results); $customer_details = array_merge($customer_details, $sql_group_results); } } } return $customer_details; } #step 4 function replaceTemplateWithDataPoints($originalTemplate, $dataPointsArray) { // print_r($dataPointsArray['customer_name']); // echo $originalTemplate; $notificationContent = $originalTemplate; if (isset($dataPointsArray["customer_name"])) { $notificationContent = str_replace("{USER_NAME}", $dataPointsArray["customer_name"], $notificationContent); } if (isset($dataPointsArray["scheme_name"])) { $notificationContent = str_replace("{SCHEME_NAME}", $dataPointsArray["scheme_name"], $notificationContent); } if (isset($dataPointsArray["formatted_due_date"])) { $expiryon = $dataPointsArray["formatted_due_date"] ? date('d-m-Y', strtotime($dataPointsArray["formatted_due_date"])) : ''; $notificationContent = str_replace("{EXPIRY_DATE}", $expiryon, $notificationContent); } if (isset($dataPointsArray["customer_id"])) { $notificationContent = str_replace("{RENEWAL_LINK}", base_url() . 'subscription_renewal/' . $dataPointsArray["customer_id"], $notificationContent); } return $notificationContent; } ############## Auto Scheduled Notification Ends ################ ################################################################ # Notification Acknowlegdement ################################################################ ## notification acknowlegdement public function noifications_acknowlegdement() { $model = new NotificationModel(); $data['noifications_acknowlegdement'] = $model->get_noifications_acknowlegdement_data(); $data['page_name'] = 'Notifications Status'; $this->render_page('noifications_acknowlegdement', $data); } ############## Notification Acknowlegdement Ends ################ }