\Drupal::currentUser()->id(),
);
}
/**
* {@inheritdoc}
*/
public function preSave(EntityStorageInterface $storage) {
parent::preSave($storage);
foreach (array_keys($this->getTranslationLanguages()) as $langcode) {
$translation = $this->getTranslation($langcode);
// If no owner has been set explicitly, make the anonymous user the owner.
if (!$translation->getOwner()) {
$translation->setOwnerId(0);
}
}
// If no revision author has been set explicitly, make the heartbeat owner the
// revision author.
if (!$this->getRevisionUser()) {
$this->setRevisionUserId($this->getOwnerId());
}
}
/**
* {@inheritdoc}
*/
public function getType() {
return $this->bundle();
}
/**
* {@inheritdoc}
*/
public function getName() {
return $this->get('name')->value;
}
/**
* {@inheritdoc}
*/
public function setName($name) {
$this->set('name', $name);
return $this;
}
/**
* {@inheritdoc}
*/
public function getCreatedTime() {
return $this->get('created')->value;
}
/**
* {@inheritdoc}
*/
public function setCreatedTime($timestamp) {
$this->set('created', $timestamp);
return $this;
}
/**
* {@inheritdoc}
*/
public function getOwner() {
return $this->get('user_id')->entity;
}
/**
* {@inheritdoc}
*/
public function getOwnerId() {
return $this->get('user_id')->target_id;
}
/**
* {@inheritdoc}
*/
public function setOwnerId($uid) {
$this->set('user_id', $uid);
return $this;
}
/**
* {@inheritdoc}
*/
public function setOwner(UserInterface $account) {
$this->set('user_id', $account->id());
return $this;
}
/**
* {@inheritdoc}
*/
public function isPublished() {
return (bool) $this->getEntityKey('status');
}
/**
* {@inheritdoc}
*/
public function setPublished($published) {
$this->set('status', $published ? TRUE : FALSE);
return $this;
}
/**
* {@inheritdoc}
*/
public function getRevisionCreationTime() {
return $this->get('revision_timestamp')->value;
}
/**
* {@inheritdoc}
*/
public function setRevisionCreationTime($timestamp) {
$this->set('revision_timestamp', $timestamp);
return $this;
}
/**
* {@inheritdoc}
*/
public function getRevisionUser() {
return $this->get('revision_uid')->entity;
}
/**
* {@inheritdoc}
*/
public function setRevisionUserId($uid) {
$this->set('revision_uid', $uid);
return $this;
}
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields = parent::baseFieldDefinitions($entity_type);
$fields['user_id'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Authored by'))
->setDescription(t('The user ID of author of the Heartbeat entity.'))
->setRevisionable(TRUE)
->setSetting('target_type', 'user')
->setSetting('handler', 'default')
->setTranslatable(TRUE)
->setDisplayOptions('view', array(
'label' => 'hidden',
'type' => 'author',
'weight' => 0,
))
->setDisplayOptions('form', array(
'type' => 'entity_reference_autocomplete',
'weight' => 5,
'settings' => array(
'match_operator' => 'CONTAINS',
'size' => '60',
'autocomplete_type' => 'tags',
'placeholder' => '',
),
))
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['name'] = BaseFieldDefinition::create('string')
->setLabel(t('Name'))
->setDescription(t('The name of the Heartbeat entity.'))
->setRevisionable(TRUE)
->setSettings(array(
'max_length' => 50,
'text_processing' => 0,
))
->setDefaultValue('')
->setDisplayOptions('view', array(
'label' => 'above',
'type' => 'string',
'weight' => -4,
))
->setDisplayOptions('form', array(
'type' => 'string_textfield',
'weight' => -4,
))
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['status'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Publishing status'))
->setDescription(t('A boolean indicating whether the Heartbeat is published.'))
->setRevisionable(TRUE)
->setDefaultValue(TRUE);
$fields['created'] = BaseFieldDefinition::create('created')
->setLabel(t('Created'))
->setDescription(t('The time that the entity was created.'));
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the entity was last edited.'));
$fields['revision_timestamp'] = BaseFieldDefinition::create('created')
->setLabel(t('Revision timestamp'))
->setDescription(t('The time that the current revision was created.'))
->setQueryable(FALSE)
->setRevisionable(TRUE);
$fields['revision_uid'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Revision user ID'))
->setDescription(t('The user ID of the author of the current revision.'))
->setSetting('target_type', 'user')
->setQueryable(FALSE)
->setRevisionable(TRUE);
$fields['revision_translation_affected'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Revision translation affected'))
->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
->setReadOnly(TRUE)
->setRevisionable(TRUE)
->setTranslatable(TRUE);
return $fields;
}
/**
* Returns the node type label for the passed node.
*
* @param \Drupal\heartbeat\Entity\HeartbeatInterface $heartbeat
* A heartbeat entity to return the heartbeat type's label for.
*
* @return string|false
* The heartbeat type label or FALSE if the heartbeat type is not found.
*
* @todo Add this as generic helper method for config entities representing
* entity bundles.
*/
public function heartbeat_get_type(HeartbeatInterface $heartbeat) {
$type = HeartbeatType::load($heartbeat->bundle());
return $type ? $type->label() : FALSE;
}
/**
* Updates all heartbeat activities of one type to be of another type.
*
* @param string $old_id
* The current heartbeat type of the activities.
* @param string $new_id
* The new heartbeat type of the activities.
*
* @return
* The number of activities whose heartbeat type field was modified.
*/
public function heartbeat_type_update_nodes($old_id, $new_id) {
return \Drupal::entityManager()->getStorage('heartbeat')->updateType($old_id, $new_id);
}
/**
* Builds a message template for a given HeartbeatType
*
* @param HeartbeatType $heartbeatType
* @param null $mediaData
* @return null|string
*/
public static function buildMessage(HeartbeatType $heartbeatType, $mediaData = NULL) {
//!username has added !node_type !node_title.
/** @noinspection NestedTernaryOperatorInspection */
$message = $heartbeatType->get('message') . '';
$message .= $mediaData ? self::buildMediaMarkup($mediaData) : '';
$message .= '';
return $message;
}
private static function buildMediaMarkup($mediaData) {
$markup = '';
foreach ($mediaData as $media) {
$markup .= self::mediaTag($media->type, $media->path);
}
return $markup;
}
private static function mediaTag($type, $filePath) {
return '<'. $type . ' src="' . $filePath . '" / >';
}
/**
* Returns class of argument
*
* @param $field
* @return string
*/
public static function findClass($field) {
return get_class($field);
}
/**
* Returns an array of classes for array argument
* @param $fields
* @return array
*/
public static function findAllMedia($fields) {
return array_map(array(get_called_class(), 'findClass'), $fields);
}
/**
* Returns all media types for an array of fields
*
* @param $fields
* @return array
*/
public static function mediaFieldTypes($fields) {
$types = array();
foreach ($fields as $field) {
if ($field instanceof \Drupal\file\Plugin\Field\FieldType\FileFieldItemList) {
if ($field->getFieldDefinition()->getType() === 'image' ||
$field->getFieldDefinition()->getType() === 'video' ||
$field->getFieldDefinition()->getType() === 'audio') {
$fieldValue = $field->getValue();
$fileId = $fieldValue[0]['target_id'];
$file = \Drupal::entityTypeManager()->getStorage('file')->load($fileId);
if ($file !== NULL && is_object($file)) {
$mediaObject = self::createHeartbeatMedia($field->getFieldDefinition()->getType(), $file->url());
$types[] = $mediaObject;
} else {
continue;
}
}
}
}
return $types;
}
/**
* Parses a HeartbeatType message template and maps
* variable values onto matching keywords
*
* @param $translatedMessage
* @param $variables
* @return string
*/
public static function parseMessage($translatedMessage, $variables) {
return strtr($translatedMessage, $variables);
}
public static function createHeartbeatMedia($type, $path) {
$mediaObject = new \stdClass();
$mediaObject->type = $type;
$mediaObject->path = $path;
return $mediaObject;
}
public static function getEntityNames($entityTypes) {
$names = array();
foreach ($entityTypes as $type) {
if (($type->getBaseTable() === 'node') ||
($type->getBaseTable() === 'user')
||
($type->getStorageClass() !== NULL &&
strpos($type->getStorageClass(), $type->getLabel()->getUntranslatedString())
)
) {
$names[] = $type->id();
}
}
sort($names);
return $names;
}
}