contest-8.x-1.0-alpha2/src/Form/ContestValidateTrait.php
src/Form/ContestValidateTrait.php
<?php
namespace Drupal\contest\Form;
use Drupal\contest\ContestUser;
use Drupal\contest\ContestStorage;
/**
* Common validation methods.
*/
trait ContestValidateTrait {
/**
* Determine if the user has a complete profile.
*
* @param int $uid
* The user's ID.
* @param string $role
* The user's role.
*
* @return bool
* True of the profile is complete, otherwise false.
*/
public static function completeProfile($uid, $role = '') {
$usr = new ContestUser($uid);
return $usr->completeProfile($role);
}
/**
* Field validation.
*
* @param string $type
* The type of validation tests to run on the field.
* @param int|string $value
* The value fo the field we're validating.
*
* @return bool
* True if the field is valid.
*/
public static function validField($type, $value) {
if (empty($type) || !isset($value)) {
return FALSE;
}
switch ($type) {
case 'address':
return (bool) preg_match('/[a-zA-Z]{2,' . ContestStorage::ADDR_MAX . '}/', $value);
case 'city':
return (bool) preg_match('/[a-zA-Z\s-.]{2,' . ContestStorage::CITY_MAX . '}/', $value);
case 'complete_profile':
return self::completeProfile($value, 'host');
case 'dob':
return (bool) is_numeric($value);
case 'email':
return (bool) (strlen($value) <= Email::EMAIL_MAX_LENGTH && \Drupal::service('email.validator')->isValid($value));
case 'email_dupe':
return ContestStorage::usrMailExists($value);
case 'filesystem':
return (bool) (preg_match('/^\w+$/', trim($value)) && strlen(trim($value)) <= ContestStorage::STRING_MAX);
case 'int':
return (bool) (is_numeric($value) && intval($value) > 0 && intval($value) <= ContestStorage::INT_MAX);
case 'name':
return (bool) preg_match('/[a-zA-Z]{1,' . ContestStorage::NAME_MAX . '}/', $value);
case 'phone':
return (bool) (strlen(preg_replace('/\D+/', '', $value)) >= 10 && strlen($value) < ContestStorage::PHONE_MAX);
case 'state':
$states = ContestHelper::getStates(\Drupal::config('system.date')->get('country.default'));
return !empty($states[$value]);
case 'string':
return (bool) (preg_match('/[a-zA-z]+/', $value) && strlen(trim($value)) <= ContestStorage::STRING_MAX);
case 'uid':
return self::completeProfile($value);
case 'username':
return (bool) preg_match('/\w{2,' . USERNAME_MAX_LENGTH . '}/', $value);
case 'username_dupe':
return ContestStorage::usrNameExists($value);
case 'zip':
return (bool) (strlen(preg_replace('/\D+/', '', $value)) == ContestStorage::ZIP_MAX);
}
return FALSE;
}
}
