public function RateWidgetField::render in Rate 8.2
Renders the field.
Parameters
\Drupal\views\ResultRow $values: The values retrieved from a single row of a view's query result.
Return value
string|\Drupal\Component\Render\MarkupInterface The rendered output. If the output is safe it will be wrapped in an object that implements MarkupInterface. If it is empty or unsafe it will be a string.
Overrides FieldPluginBase::render
File
- src/
Plugin/ views/ field/ RateWidgetField.php, line 132
Class
- RateWidgetField
- Views field handler for the rate widget.
Namespace
Drupal\rate\Plugin\views\fieldCode
public function render(ResultRow $row) {
$column = $this->options['id_column'];
$widgets = $this->options['widgets'];
$display_overrides = $this->options['display_overrides'];
$widget_display = $this->options['widget_display'];
$widget_storage = \Drupal::service('entity_type.manager')
->getStorage('rate_widget');
$rate_widget_base_service = \Drupal::service('rate.vote_widget_base');
// Check, if the field is in _entity (base table)
if (isset($row->_entity->{$column})) {
$entity_id = $row->_entity
->id();
$entity_type_id = $row->_entity
->getEntityTypeId();
if ($entity_type_id == 'user' || $entity_type_id == 'comment' || $entity_type_id == 'file') {
$bundle = $entity_type_id;
}
elseif ($entity_type_id == 'group') {
$bundle = $row->_entity
->getGroupType()
->id();
}
elseif ($entity_type_id == 'group_content') {
$bundle = $row->_entity
->getGroupContentType()
->id();
}
elseif ($entity_type_id == 'taxonomy_term') {
$bundle = $row->_entity
->getVocabularyId();
}
else {
$bundle = $row->_entity
->getType();
}
}
elseif (isset($row->_relationship_entities)) {
$relationship_entity = array_keys($row->_relationship_entities);
foreach ($relationship_entity as $rel) {
if (isset($row->_relationship_entities[$rel]->{$column})) {
$entity_id = $row->_relationship_entities[$rel]
->id();
$entity_type_id = $row->_relationship_entities[$rel]
->getEntityTypeId();
if ($entity_type_id == 'user' || $entity_type_id == 'comment') {
$bundle = $entity_type_id;
}
elseif ($entity_type_id == 'group') {
$bundle = $row->_relationship_entities[$rel]
->getGroupType()
->id();
}
elseif ($entity_type_id == 'group_content') {
$bundle = $row->_relationship_entities[$rel]
->getGroupContentType()
->id();
}
elseif ($entity_type_id == 'taxonomy_term') {
$bundle = $row->_relationship_entities[$rel]
->getVocabularyId();
}
else {
$bundle = $row->_relationship_entities[$rel]
->getType();
}
}
}
}
if (!isset($entity_id) || !isset($entity_type_id) || !isset($bundle)) {
return;
}
else {
// Get the widgets assigned to this entity.
$query = \Drupal::entityQuery('rate_widget');
$query
->condition('entity_types.*', [
$entity_type_id . '.' . $bundle,
], 'IN');
$widget_ids = $query
->execute();
// Exit if this entity:bundle has no rate widgets attached.
if (!isset($widget_ids) || count($widget_ids) == 0) {
return;
}
if (isset($widget_ids)) {
if (count($widget_ids) > 1) {
// Check if we have a widget selected in view field settings.
$selected_widget = $widgets[$entity_type_id . ':' . $bundle]['widget'];
if (isset($selected_widget) && in_array($selected_widget, $widget_ids)) {
$widget = $selected_widget;
}
else {
// Get the first widget.
$widget = array_shift($widget_ids);
}
}
else {
// Get the first widget.
$widget = array_shift($widget_ids);
}
}
if (!isset($widget)) {
return;
}
$widget_name = $widget;
$widget = $widget_storage
->load($widget);
$widget_template = $widget
->get('template');
$value_type = $widget
->get('value_type');
// Apply overrides from the view field settings.
$display_settings = $widget
->get('display');
$results_settings = $widget
->get('results');
$display_settings['label_position'] = $display_overrides['hide_label'] === 'hide_label' ? 'hidden' : $display_settings['label_position'];
$display_settings['description_position'] = $display_overrides['hide_description'] === 'hide_description' ? 'hidden' : $display_settings['description_position'];
$results_settings['result_position'] = $display_overrides['hide_summary'] === 'hide_summary' ? 'hidden' : $results_settings['result_position'];
$display_settings['readonly'] = $widget_display == 'readonly' ? 1 : 0;
$widget
->set('display', $display_settings);
$widget
->set('results', $results_settings);
// Currently using only two vote types - change, if more needed/used.
$vote_type = $widget_template == 'fivestar' ? $widget_template : 'updown';
// Get the rate widget rating form.
$form = $rate_widget_base_service
->getForm($entity_type_id, $bundle, $entity_id, $vote_type, $value_type, $widget_name, $widget);
$form = $widget_display === 'summary' ? $form['#results'] : $form;
$form_container = [
'rating' => [
'#theme' => 'container',
'#attributes' => [
'class' => [
'rate-widget',
$widget_template,
],
],
'#children' => [
'form' => $form,
],
],
'#attached' => [
'library' => [
'rate/w-' . $widget_template,
],
],
];
$build[$widget_name] = $form_container;
return $build;
}
}