%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/graphicd/public_html/vebto/common/Validation/Validators/
Upload File :
Create Path :
Current File : /home/graphicd/public_html/vebto/common/Validation/Validators/EmailsAreValid.php

<?php

namespace Common\Validation\Validators;

use App\User;
use Illuminate\Contracts\Validation\Rule;
use Illuminate\Validation\Concerns\ValidatesAttributes;

class EmailsAreValid implements Rule
{
    use ValidatesAttributes;

    /**
     * @var int
     */
    private $maxEmails = 5;

    /**
     * @var bool
     */
    private $validateExistence;

    /**
     * @var string
     */
    private $validationMessage;

    public function __construct($validateExistence = true)
    {
        $this->validateExistence = $validateExistence;
    }

    /**
     * @inheritDoc
     */
    public function passes($attribute, $emails)
    {
        $invalidEmails = array_filter($emails, function($email) use($attribute) {
            return !$this->validateEmail($attribute, $email, []);
        });

        if ( ! empty($invalidEmails)) {
            $this->validationMessage = $this->invalidEmailsMessage($invalidEmails);
            return false;
        }

        if ($this->validateExistence) {
            $dbEmails = app(User::class)->whereIn('email', $emails)->pluck('email');
            $nonExistentEmails = array_filter($emails, function($email) use($dbEmails) {
                return !$dbEmails->contains($email);
            });
            if ( ! empty($nonExistentEmails)) {
                $this->validationMessage = $this->emailsDontExistMessage($nonExistentEmails);
                return false;
            }
        }

        return true;
    }

    private function invalidEmailsMessage(array $emails): string
    {
        $emailString = implode(', ', array_slice($emails, 0, $this->maxEmails));
        if (count($emails) > $this->maxEmails) {
            $emailString .= '...';
        }
        return trans("Invalid emails: :emails", ['emails' => $emailString]);
    }

    private function emailsDontExistMessage(array $emails): string
    {
        $emailString = implode(', ', array_slice($emails, 0, $this->maxEmails));
        if (count($emails) > $this->maxEmails) {
            $emailString .= '...';
        }
        return trans("Could not find users for emails: :emails", ['emails' => $emailString]);
    }

    /**
     * @inheritDoc
     */
    public function message()
    {
       return $this->validationMessage;
    }
}

Zerion Mini Shell 1.0