RedirectSourceItem.php in Redirect 8
File
src/Plugin/Field/FieldType/RedirectSourceItem.php
View source
<?php
namespace Drupal\redirect\Plugin\Field\FieldType;
use Drupal\Component\Utility\Random;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FieldItemBase;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\TypedData\DataDefinition;
use Drupal\Core\TypedData\MapDataDefinition;
use Drupal\Core\Url;
class RedirectSourceItem extends FieldItemBase {
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
$properties['path'] = DataDefinition::create('string')
->setLabel(t('Path'));
$properties['query'] = MapDataDefinition::create()
->setLabel(t('Query'));
return $properties;
}
public static function schema(FieldStorageDefinitionInterface $field_definition) {
return [
'columns' => [
'path' => [
'description' => 'The source path',
'type' => 'varchar',
'length' => 2048,
],
'query' => [
'description' => 'Serialized array of path queries',
'type' => 'blob',
'size' => 'big',
'serialize' => TRUE,
],
],
'indexes' => [
'path' => [
[
'path',
50,
],
],
],
];
}
public static function generateSampleValue(FieldDefinitionInterface $field_definition) {
$domain_length = mt_rand(7, 15);
$random = new Random();
$values['path'] = 'http://www.' . $random
->word($domain_length);
return $values;
}
public function isEmpty() {
return $this->path === NULL || $this->path === '';
}
public static function mainPropertyName() {
return 'path';
}
public function setValue($values, $notify = TRUE) {
if (isset($values['query']) && is_string($values['query'])) {
$values['query'] = unserialize($values['query']);
}
parent::setValue($values, $notify);
}
public function getUrl() {
return Url::fromUri('base:' . $this->path, [
'query' => $this->query,
]);
}
}