BrokenLink.php in Broken Link 8.3
File
src/Entity/BrokenLink.php
View source
<?php
namespace Drupal\broken_link\Entity;
use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
class BrokenLink extends ContentEntityBase implements ContentEntityInterface {
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields['id'] = BaseFieldDefinition::create('integer')
->setLabel(t('Entity ID'))
->setDescription(t('The entity ID for this broken link content entity.'))
->setReadOnly(TRUE)
->setSetting('unsigned', TRUE);
$fields['uuid'] = BaseFieldDefinition::create('uuid')
->setLabel(t('UUID'))
->setDescription(t('The content broken link UUID.'))
->setReadOnly(TRUE);
$fields['link'] = BaseFieldDefinition::create('string')
->setLabel(t('Link'))
->setSettings([
'default_value' => '',
'max_length' => 2000,
])
->setDescription(t('Broken link.'));
$fields['hits'] = BaseFieldDefinition::create('integer')
->setLabel(t('Hits'))
->setDescription(t('Number of times broken link is been hit.'))
->setSettings([
'default_value' => 1,
])
->setSetting('unsigned', TRUE);
$fields['query_string'] = BaseFieldDefinition::create('string')
->setLabel(t('Request parameters'))
->setDescription(t('Request query string.'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setConstraints([
'type' => 'varchar',
'length' => 2000,
]);
$fields['created'] = BaseFieldDefinition::create('timestamp')
->setLabel(t('First access time'))
->setDescription(t('First time this entity was created.'));
$fields['updated'] = BaseFieldDefinition::create('timestamp')
->setLabel(t('Last access time'))
->setDescription(t('Last time this entity was updated.'));
$fields['referers'] = BaseFieldDefinition::create('string')
->setLabel(t('Referers'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setConstraints([
'type' => 'varchar',
'length' => 2000,
])
->setDescription(t('All http referers for one broken link url.'));
return $fields;
}
public function loadByLink($link) {
$broken_link_storage = $this
->entityTypeManager()
->getStorage('broken_link');
$brokenLink = $broken_link_storage
->loadByProperties([
'link' => $link,
]);
return array_shift($brokenLink);
}
public function merge($request_path, $request_args = NULL) {
$broken_link = $this
->loadByLink($request_path);
if ($broken_link === NULL) {
$broken_link = $this
->create();
$broken_link->link = $request_path;
$broken_link->hits = 1;
$broken_link->created = time();
}
else {
$hits = (int) $broken_link
->get('hits')
->get(0)
->getValue()['value'];
$broken_link->hits = ++$hits;
$broken_link->updated = time();
}
$recorded_query_string = explode(', ', $broken_link
->get('query_string')
->getString());
if (!empty($request_args) && !in_array($request_args, $recorded_query_string)) {
$broken_link->query_string[] = $request_args;
}
$referer = \Drupal::request()->server
->get('HTTP_REFERER');
$recorded_referers = explode(', ', $broken_link
->get('referers')
->getString());
if (!empty($referer) && !in_array($referer, $recorded_referers)) {
$broken_link->referers[] = $referer;
}
$broken_link
->save();
}
}