. */ namespace App\Library\Notifications\Drivers; use ArrayAccess; use App\Contracts\NotificationHandler; use App\Library\Notifications\RecipientFinder; use App\Models\User; abstract class AbstractDriver implements NotificationHandler { private $recipientFinder; public function __construct() { $notificationDriverClass = get_class($this); switch ($notificationDriverClass) { case EmailDriver::class: case PonyfmDriver::class: $this->recipientFinder = new RecipientFinder(get_class($this)); break; default: throw new \Exception("Invalid notification driver!"); } } /** * Returns an array of users who are to receive the given notification type. * This method is a wrapper around the {@link RecipientFinder} class, which * does the actual processing for all the drivers. * * @param string $notificationType * @param array $notificationData * @return User[] collection of {@link User} objects */ protected function getRecipients(string $notificationType, array $notificationData) { return call_user_func_array([$this->recipientFinder, $notificationType], $notificationData); } }