'tag', 'key' => 'iChamba_ID', 'relation' => '=', 'value' => (string) $userId] ], null, null, null, null, $heading, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, $data ); } /** * Send notification to multiple users * * @param array $userIds * @param string $message * @param string $heading * @param array $data * @return array */ public function sendToUsers(array $userIds, string $message, string $heading = 'JobHero', array $data = []) { $results = []; foreach ($userIds as $userId) { $results[$userId] = $this->sendToUser($userId, $message, $heading, $data); } return $results; } /** * Send scheduled notification to a user * * @param int $userId * @param string $message * @param string $sendAt UTC datetime string * @param string $heading * @param array $data * @return mixed */ public function sendScheduledToUser(int $userId, string $message, string $sendAt, string $heading = 'JobHero', array $data = []) { return OneSignal::sendNotificationUsingTags( $message, [ ['field' => 'tag', 'key' => 'iChamba_ID', 'relation' => '=', 'value' => (string) $userId] ], null, null, null, null, $heading, null, null, null, null, null, null, null, $sendAt, null, null, null, null, null, null, null, null, $data ); } /** * Send notification to all users with a specific role * * @param int $roleId * @param string $message * @param string $heading * @param array $data * @return mixed */ public function sendToRole(int $roleId, string $message, string $heading = 'JobHero', array $data = []) { return OneSignal::sendNotificationUsingTags( $message, [ ['field' => 'tag', 'key' => 'iChamba_Role', 'relation' => '=', 'value' => (string) $roleId] ], null, null, null, null, $heading, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, $data ); } /** * Notification types for contracts */ public function notifyContractHired(int $supplierId, string $address) { return $this->sendToUser( $supplierId, "Has sido contratado para un servicio. Dirígete a la sección de postulaciones contratadas para más detalles.", "¡Nuevo Contrato!" ); } public function notifyContractStarted(int $userId, string $address, string $date) { return $this->sendToUser( $userId, "El servicio en {$address} el día {$date} ha sido iniciado. Dirígete a la sección de servicios contratados para más detalles.", "Servicio Iniciado" ); } public function notifyContractCancelled(int $supplierId, string $address, string $date) { return $this->sendToUser( $supplierId, "El servicio en {$address} el día {$date} ha sido cancelado. Dirígete a la sección de servicios contratados para más detalles.", "Servicio Cancelado" ); } public function notifySupplierArrived(int $clientId, string $address) { return $this->sendToUser( $clientId, "El proveedor para el servicio en {$address} ha llegado. Dirígete a la sección de contratos confirmados para más detalles.", "Proveedor ha llegado" ); } public function notifyAppointmentReminder(int $userId, string $address, int $minutesBefore = 30) { return $this->sendToUser( $userId, "Tienes un servicio agendado hoy en {$address} en {$minutesBefore} minutos. Dirígete a la sección de contratos confirmados para más detalles.", "Recordatorio de Cita" ); } public function notifyNewPostulation(int $supplierId) { return $this->sendToUser( $supplierId, "Hay una nueva postulación disponible en tu área. Dirígete a la sección de postulaciones para ver más detalles.", "Nueva Postulación" ); } }