siip-whatsapp-notifications.../src/Service/SmsNumberProvider.php

158 lines
5.5 KiB
PHP
Executable File

<?php
/*
* @copyright Copyright (c) 2018 Ubiquiti Networks, Inc.
* @see https://www.ubnt.com/
*/
declare(strict_types=1);
namespace SmsNotifier\Service;
use SmsNotifier\Data\NotificationData;
use Ubnt\UcrmPluginSdk\Service\PluginLogManager;
class SmsNumberProvider
{
/*
* go through client's contacts and find an applicable one, if any
*/
public function getUcrmClientNumber(NotificationData $notificationData): ?string
{
$contacts = $notificationData->clientData['contacts'] ?? [];
foreach ($contacts as $contact) {
if ($this->isContactApplicable($notificationData->entity, $contact)) {
return $contact['phone'];
}
}
return null;
}
/*
* go through client's contacts and find an applicable one, if any
*/
public function getUcrmClientNumbers(NotificationData $notificationData = null, $arrayClientCRM = null)
{
$log = PluginLogManager::create(); //Initialize Logger
$arrayPhones = [];
if ($arrayClientCRM != null) {
foreach ($arrayClientCRM['contacts'] as $contact) {
if (!empty($contact['phone'])) {
if (isset($contact['types']) && is_array($contact['types'])) {
foreach ($contact['types'] as $type) {
if (in_array($type['name'], ['WhatsApp', 'WhatsNotifica'])) {
// Almacena varios números bajo el mismo tipo
$arrayPhones[$type['name']][] = $contact['phone'];
}
}
}
}
}
} else {
foreach ($notificationData->clientData['contacts'] as $contact) {
if (!empty($contact['phone'])) {
if (isset($contact['types']) && is_array($contact['types'])) {
foreach ($contact['types'] as $type) {
if (in_array($type['name'], ['WhatsApp', 'WhatsNotifica', 'WhatsActualiza'])) {
// Almacena varios números bajo el mismo tipo
$arrayPhones[$type['name']][] = $contact['phone'];
}
}
}
}
}
}
return $arrayPhones; // Devolver el arreglo de teléfonos por tipo
}
/*
* go through client's contacts and find an applicable one, if any
*/
public function getAllUcrmClientNumbers($arrayClientCRM = null)
{
$log = PluginLogManager::create(); //Initialize Logger
//$log->appendLog("Ejecutando metodo getUcrmClientNumbers: " . json_encode($arrayClientCRM) . PHP_EOL);
// Array asociativo donde almacenarás los números de teléfono con sus tipos correspondientes
$arrayPhones = [];
//$log->appendLog("Entrando al if del método getUcrmClientNumbers: " . $arrayClientCRM . PHP_EOL);
//$jsonNotificationData = json_decode($jsonNotificationData, true);
// Recorrer los contactos del cliente para encontrar los teléfonos con sus tipos
foreach ($arrayClientCRM['contacts'] as $contact) {
if (!empty($contact['phone'])) { // Verificar que el teléfono no esté vacío
// agregamos al array asociativo
$arrayPhones[] = $contact['phone'];
}
}
return $arrayPhones; // Devolver el arreglo de teléfonos por tipo
}
/*
* not every contact has a phone; also check if the type of notification is applicable to contact
*/
protected function isContactApplicable(string $entity, array $contact = null): bool
{
$log = PluginLogManager::create(); //Initialize Logger
//$log->appendLog("Ejecutando metodo isContactApplicable: " . json_encode($contact) . PHP_EOL);
//$entity_export = var_export($entity, true);
//$log->appendLog("Valor de Entity: " . $entity_export . PHP_EOL);
if (!$contact || empty($contact['phone'])) {
$log->appendLog("contac vacio");
return false;
}
//$log->appendLog("Entrando al switch del método isContactApplicable : " . json_encode($entity));
switch ($entity) {
case 'invoice':
return false;
case 'payment': {
$types = $contact['types'] ?? [];
foreach ($types as $type) {
//$log->appendLog("Entrando al case client del switch: " . json_encode($type));
if ($type['name'] == 'WhatsApp') {
return true;
}
}
return false;
}
//return $contact['isBilling'] ?? false;
case 'client': {
$types = $contact['types'] ?? [];
foreach ($types as $type) {
//$log->appendLog("Entrando al case client del switch: " . json_encode($type));
if ($type['name'] == 'WhatsApp') {
return true;
}
}
return false;
}
case 'service': {
$types = $contact['types'] ?? [];
foreach ($types as $type) {
//$log->appendLog("Entrando al case client del switch: " . json_encode($type));
if ($type['name'] == 'WhatsApp') {
return true;
}
}
return false;
}
default:
return $contact['isContact'] ?? false;
}
}
}