View source
<?php
namespace Drupal\opigno_module\Entity;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\RevisionableContentEntityBase;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Entity\EntityChangedTrait;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\user\UserInterface;
class OpignoActivity extends RevisionableContentEntityBase implements OpignoActivityInterface {
use EntityChangedTrait;
protected $userAnswers = [];
public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
parent::preCreate($storage_controller, $values);
$values += [
'uid' => \Drupal::currentUser()
->id(),
];
}
public function getType() {
return $this
->bundle();
}
public function getName() {
return $this
->get('name')->value;
}
public function setName($name) {
$this
->set('name', $name);
return $this;
}
public function getCreatedTime() {
return $this
->get('created')->value;
}
public function setCreatedTime($timestamp) {
$this
->set('created', $timestamp);
return $this;
}
public function getOwner() {
return $this
->get('uid')->entity;
}
public function getOwnerId() {
return $this
->get('uid')->target_id;
}
public function setOwnerId($uid) {
$this
->set('uid', $uid);
return $this;
}
public function getSkillId() {
return $this
->get('skills_list')->target_id;
}
public function setSkillId($sid) {
$this
->set('skills_list', $sid);
return $this;
}
public function getSkillLevel() {
return $this
->get('skill_level')->value;
}
public function setOwner(UserInterface $account) {
$this
->set('uid', $account
->id());
return $this;
}
public function isPublished() {
return (bool) $this
->getEntityKey('status');
}
public function setPublished($published) {
$this
->set('status', $published ? TRUE : FALSE);
return $this;
}
public function getModule() {
}
public function getModules() {
$db_connection = \Drupal::service('database');
$query = $db_connection
->select('opigno_module_relationship', 'om');
$query
->fields('om', [
'omr_id',
]);
$query
->condition('om.child_id', $this
->id());
$results = $query
->execute()
->fetchAll();
$om_ids = [];
foreach ($results as $result) {
$om_ids[] = $result->omr_id;
}
$module_storage = static::entityTypeManager()
->getStorage('opigno_module');
$modules = $module_storage
->loadMultiple($om_ids);
return $modules;
}
public function getUserAnswer(OpignoModuleInterface $opigno_module, UserModuleStatusInterface $attempt, AccountInterface $account, $latest_cert_date = NULL) {
$cid = $opigno_module
->id() . '-' . $attempt
->id() . '-' . $account
->id();
$answer_storage = static::entityTypeManager()
->getStorage('opigno_answer');
if (isset($this->userAnswers[$cid])) {
return $this->userAnswers[$cid] ? $answer_storage
->load($this->userAnswers[$cid]) : NULL;
}
$query = $answer_storage
->getQuery();
$query
->condition('user_id', $account
->id())
->condition('user_module_status', $attempt
->id())
->condition('module', $opigno_module
->id())
->condition('activity', $this
->id());
if ($latest_cert_date) {
$query
->condition('created', $latest_cert_date, '>');
}
$aid = $query
->range(0, 1)
->execute();
$id = reset($aid);
$this->userAnswers[$cid] = $id;
return $this->userAnswers[$cid] ? $answer_storage
->load($this->userAnswers[$cid]) : NULL;
}
public function getAnswers($return_entities_array = NULL) {
$answer_storage = static::entityTypeManager()
->getStorage('opigno_answer');
$query = $answer_storage
->getQuery();
$aids = $query
->condition('activity', $this
->id())
->execute();
if ($return_entities_array) {
return $answer_storage
->loadMultiple($aids);
}
return $aids;
}
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields = parent::baseFieldDefinitions($entity_type);
$fields['uid'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Authored by'))
->setDescription(t('The user ID of author of the Activity entity.'))
->setRevisionable(TRUE)
->setSetting('target_type', 'user')
->setSetting('handler', 'default')
->setTranslatable(TRUE)
->setDisplayOptions('view', [
'label' => 'hidden',
'type' => 'author',
'weight' => 0,
])
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'weight' => 5,
'settings' => [
'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 Activity entity plus.'))
->setRequired(TRUE)
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setSettings([
'max_length' => 60,
'text_processing' => 0,
])
->setDefaultValue('')
->setDisplayOptions('view', [
'label' => 'above',
'type' => 'string',
'weight' => -4,
])
->setDisplayOptions('form', [
'type' => 'string_textfield',
'weight' => -4,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
$fields['skills_list'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Skill'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setSetting('target_type', 'taxonomy_term')
->setSetting('handler', 'default:taxonomy_term')
->setSetting('handler_settings', array(
'target_bundles' => array(
'skills' => 'skills',
),
))
->setDisplayOptions('form', [
'type' => 'options_select',
'weight' => 2,
]);
$options = [
1 => t('Level 1'),
2 => t('Level 2'),
3 => t('Level 3'),
4 => t('Level 4'),
5 => t('Level 5'),
6 => t('Level 6'),
7 => t('Level 7'),
8 => t('Level 8'),
9 => t('Level 9'),
10 => t('Level 10'),
];
$fields['skill_level'] = BaseFieldDefinition::create('list_string')
->setLabel(t('Level of skill'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setDefaultValue('local')
->setRequired(FALSE)
->setSetting('allowed_values', $options)
->setDisplayOptions('form', [
'type' => 'options_select',
'weight' => 3,
]);
$options = [
'local' => t('Only in current module'),
'global' => t('In global system of Opigno skills'),
];
$fields['usage_activity'] = BaseFieldDefinition::create('list_string')
->setLabel(t('Usage of activity'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setDefaultValue('local')
->setRequired(TRUE)
->setSetting('allowed_values', $options)
->setDisplayOptions('form', [
'type' => 'options_buttons',
'weight' => 4,
]);
$fields['auto_skills'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Use activity in auto skills management'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setDefaultValue(FALSE)
->setDisplayOptions('form', array(
'type' => 'boolean_checkbox',
'weight' => 1,
));
$fields['status'] = BaseFieldDefinition::create('boolean')
->setLabel(t('Publishing status'))
->setDescription(t('A boolean indicating whether the Activity is published.'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setDefaultValue(TRUE);
$fields['created'] = BaseFieldDefinition::create('created')
->setLabel(t('Authored on'))
->setDescription(t('The time that the Module was created.'))
->setRevisionable(TRUE)
->setTranslatable(TRUE)
->setDisplayOptions('view', [
'label' => 'hidden',
'type' => 'timestamp',
'weight' => 0,
])
->setDisplayOptions('form', [
'type' => 'datetime_timestamp',
'weight' => 10,
])
->setDisplayConfigurable('form', TRUE);
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the Module was last edited.'))
->setRevisionable(TRUE)
->setTranslatable(TRUE);
return $fields;
}
public function preSave(EntityStorageInterface $storage) {
if (!$this
->getRevisionUser()) {
$this
->setRevisionUserId($this
->getOwnerId());
}
parent::preSave($storage);
}
public function preSaveRevision(EntityStorageInterface $storage, \stdClass $record) {
parent::preSaveRevision($storage, $record);
$revision_log_field_name = static::getRevisionMetadataKey($this
->getEntityType(), 'revision_log_message');
$revision_created_field_name = static::getRevisionMetadataKey($this
->getEntityType(), 'revision_created');
$new_revision = $this
->isNewRevision();
if (!$new_revision && isset($this->original) && (!isset($record->{$revision_log_field_name}) || $record->{$revision_log_field_name} === '')) {
$record->{$revision_log_field_name} = $this->original
->getRevisionLogMessage();
}
if ($new_revision && (!isset($record->{$revision_created_field_name}) || empty($record->{$revision_created_field_name}))) {
$record->{$revision_created_field_name} = $record->id == $this
->id() ? $this
->getCreatedTime() : \Drupal::time()
->getRequestTime();
}
}
public function evaluationMethodManual() : bool {
if ($this
->hasField('opigno_evaluation_method') && $this
->get('opigno_evaluation_method')->value) {
return TRUE;
}
return FALSE;
}
public function revisionIds() {
return \Drupal::database()
->query('SELECT vid FROM {opigno_activity_revision} WHERE id=:id ORDER BY revision_created DESC', [
':id' => $this
->id(),
])
->fetchCol();
}
public function getCurrentRevision() {
return $this
->get('vid')->value;
}
}