File "ModelValidator.php"
Full Path: /home/warrior1/public_html/languages/wp-content-20241001222009/plugins/mailpoet/lib/Models/ModelValidator.php
File size: 2.44 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace MailPoet\Models;
if (!defined('ABSPATH')) exit;
use MailPoet\Util\Helpers;
use MailPoet\WP\Functions as WPFunctions;
class ModelValidator extends \MailPoetVendor\Sudzy\Engine {
public $validators;
const EMAIL_MIN_LENGTH = 6;
const EMAIL_MAX_LENGTH = 150;
const ROLE_EMAILS = [
'abuse',
'compliance',
'devnull',
'dns',
'ftp',
'hostmaster',
'inoc',
'ispfeedback',
'ispsupport',
'list-request',
'list',
'maildaemon',
'noc',
'no-reply',
'noreply',
'nospam',
'null',
'phish',
'phishing',
'postmaster',
'privacy',
'registrar',
'root',
'security',
'spam',
'sysadmin',
'undisclosed-recipients',
'unsubscribe',
'usenet',
'uucp',
'webmaster',
'www',
];
public function __construct() {
parent::__construct();
$this->validators = [
'validEmail' => 'validateEmail',
'validRenderedNewsletterBody' => 'validateRenderedNewsletterBody',
];
$this->setupValidators();
}
private function setupValidators() {
$_this = $this;
foreach ($this->validators as $validator => $action) {
$this->addValidator($validator, function($params) use ($action, $_this) {
$callback = [$_this, $action];
if (is_callable($callback)) {
return call_user_func($callback, $params);
}
});
}
}
public function validateEmail($email) {
$permittedLength = (strlen($email) >= self::EMAIL_MIN_LENGTH && strlen($email) <= self::EMAIL_MAX_LENGTH);
$validEmail = WPFunctions::get()->isEmail($email) !== false && parent::_isEmail($email, null);
return ($permittedLength && $validEmail);
}
public function validateNonRoleEmail($email) {
if (!$this->validateEmail($email)) return false;
$firstPart = strtolower(substr($email, 0, (int)strpos($email, '@')));
return array_search($firstPart, self::ROLE_EMAILS) === false;
}
public function validateRenderedNewsletterBody($newsletterBody) {
if (is_serialized($newsletterBody)) {
$newsletterBody = unserialize($newsletterBody);
} else if (Helpers::isJson($newsletterBody)) {
$newsletterBody = json_decode($newsletterBody, true);
}
return (is_null($newsletterBody) || (is_array($newsletterBody) && !empty($newsletterBody['html']) && !empty($newsletterBody['text'])));
}
public function validateIPAddress(string $ip): bool {
return (bool)filter_var($ip, FILTER_VALIDATE_IP);
}
}