PhoneNumberSettingsListBuilder.php in SMS Framework 8
File
src/Lists/PhoneNumberSettingsListBuilder.php
View source
<?php
namespace Drupal\sms\Lists;
use Drupal\Core\Config\Entity\ConfigEntityListBuilder;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Drupal\sms\Provider\PhoneNumberVerificationInterface;
use Drupal\Core\Entity\EntityInterface;
class PhoneNumberSettingsListBuilder extends ConfigEntityListBuilder {
protected $phoneNumberVerificationStorage;
protected $phoneNumberVerificationProvider;
protected $requestTime;
public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
return new static($entity_type, $container
->get('entity.manager')
->getStorage($entity_type
->id()), $container
->get('entity_type.manager')
->getStorage('sms_phone_number_verification'), $container
->get('request_stack'), $container
->get('sms.phone_number.verification'));
}
public function __construct(EntityTypeInterface $entity_type, EntityStorageInterface $storage, EntityStorageInterface $phone_number_verification_storage, RequestStack $request_stack, PhoneNumberVerificationInterface $phone_number_verification_provider) {
parent::__construct($entity_type, $storage);
$this->phoneNumberVerificationStorage = $phone_number_verification_storage;
$this->phoneNumberVerificationProvider = $phone_number_verification_provider;
$this->requestTime = $request_stack
->getCurrentRequest()->server
->get('REQUEST_TIME');
}
public function buildHeader() {
$header['entity_type'] = $this
->t('Entity type');
$header['bundle'] = $this
->t('Bundle');
$header['count_expired'] = $this
->t('Expired');
$header['count_verified'] = $this
->t('Verified');
$header['count_unverified'] = $this
->t('Unverified');
$header['count_total'] = $this
->t('Total');
return $header + parent::buildHeader();
}
public function buildRow(EntityInterface $entity) {
$entity_type_id = $entity
->getPhoneNumberEntityTypeId();
$bundle = $entity
->getPhoneNumberBundle();
$row['entity_type'] = $entity_type_id;
$row['bundle'] = $bundle;
$phone_number_settings = $this->phoneNumberVerificationProvider
->getPhoneNumberSettings($entity_type_id, $bundle);
$lifetime = $phone_number_settings
->getVerificationCodeLifetime() ?: 0;
$row['count_expired'] = $this
->buildPhoneNumberVerificationQuery($entity_type_id, $bundle)
->condition('status', 0)
->condition('created', $this->requestTime - $lifetime, '<')
->count()
->execute();
$row['count_verified'] = $this
->buildPhoneNumberVerificationQuery($entity_type_id, $bundle)
->condition('status', 1)
->count()
->execute();
$row['count_unverified'] = $this
->buildPhoneNumberVerificationQuery($entity_type_id, $bundle)
->condition('status', 0)
->count()
->execute();
$row['count_total'] = $this
->buildPhoneNumberVerificationQuery($entity_type_id, $bundle)
->count()
->execute();
return $row + parent::buildRow($entity);
}
public function render() {
$render = parent::render();
$render['table']['#empty'] = t('No phone number settings found.');
return $render;
}
protected function buildPhoneNumberVerificationQuery($entity_type_id, $bundle) {
return $this->phoneNumberVerificationStorage
->getQuery()
->condition('entity__target_type', $entity_type_id)
->condition('bundle', $bundle);
}
}