HistoryUserTimestamp.php

Same filename in this branch
  1. 11.x core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php
Same filename and directory in other branches
  1. 9 core/modules/history/src/Plugin/views/field/HistoryUserTimestamp.php
  2. 9 core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php
  3. 8.9.x core/modules/history/src/Plugin/views/field/HistoryUserTimestamp.php
  4. 8.9.x core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php
  5. 10 core/modules/history/src/Plugin/views/field/HistoryUserTimestamp.php
  6. 10 core/modules/history/src/Plugin/views/filter/HistoryUserTimestamp.php

Namespace

Drupal\history\Plugin\views\field

File

core/modules/history/src/Plugin/views/field/HistoryUserTimestamp.php

View source
<?php

namespace Drupal\history\Plugin\views\field;

use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Attribute\ViewsField;
use Drupal\views\ResultRow;
use Drupal\views\ViewExecutable;
use Drupal\views\Plugin\views\display\DisplayPluginBase;
use Drupal\node\Plugin\views\field\Node;

/**
 * Field handler to display the marker for new content.
 *
 * The handler is named history_user, because of compatibility reasons, the
 * table is history.
 *
 * @ingroup views_field_handlers
 */
class HistoryUserTimestamp extends Node {
    
    /**
     * {@inheritdoc}
     */
    public function usesGroupBy() {
        return FALSE;
    }
    
    /**
     * {@inheritdoc}
     */
    public function init(ViewExecutable $view, DisplayPluginBase $display, ?array &$options = NULL) {
        parent::init($view, $display, $options);
        if (\Drupal::currentUser()->isAuthenticated()) {
            $this->additional_fields['created'] = [
                'table' => 'node_field_data',
                'field' => 'created',
            ];
            $this->additional_fields['changed'] = [
                'table' => 'node_field_data',
                'field' => 'changed',
            ];
            if (\Drupal::moduleHandler()->moduleExists('comment') && !empty($this->options['comments'])) {
                $this->additional_fields['last_comment'] = [
                    'table' => 'comment_entity_statistics',
                    'field' => 'last_comment_timestamp',
                ];
            }
        }
    }
    
    /**
     * {@inheritdoc}
     */
    protected function defineOptions() {
        $options = parent::defineOptions();
        $options['comments'] = [
            'default' => FALSE,
        ];
        return $options;
    }
    
    /**
     * {@inheritdoc}
     */
    public function buildOptionsForm(&$form, FormStateInterface $form_state) {
        parent::buildOptionsForm($form, $form_state);
        if (\Drupal::moduleHandler()->moduleExists('comment')) {
            $form['comments'] = [
                '#type' => 'checkbox',
                '#title' => $this->t('Check for new comments as well'),
                '#default_value' => !empty($this->options['comments']),
            ];
        }
    }
    
    /**
     * {@inheritdoc}
     */
    public function query() {
        // Only add ourselves to the query if logged in.
        if (\Drupal::currentUser()->isAnonymous()) {
            return;
        }
        parent::query();
    }
    
    /**
     * {@inheritdoc}
     */
    public function render(ResultRow $values) {
        // Let's default to 'read' state.
        // This code shadows node_mark, but it reads from the db directly and
        // we already have that info.
        $mark = MARK_READ;
        if (\Drupal::currentUser()->isAuthenticated()) {
            $last_read = $this->getValue($values);
            $changed = $this->getValue($values, 'changed');
            $last_comment = \Drupal::moduleHandler()->moduleExists('comment') && !empty($this->options['comments']) ? $this->getValue($values, 'last_comment') : 0;
            if (!$last_read && $changed > HISTORY_READ_LIMIT) {
                $mark = MARK_NEW;
            }
            elseif ($changed > $last_read && $changed > HISTORY_READ_LIMIT) {
                $mark = MARK_UPDATED;
            }
            elseif ($last_comment > $last_read && $last_comment > HISTORY_READ_LIMIT) {
                $mark = MARK_UPDATED;
            }
            $build = [
                '#theme' => 'mark',
                '#status' => $mark,
            ];
            return $this->renderLink(\Drupal::service('renderer')->render($build), $values);
        }
    }

}

Classes

Title Deprecated Summary
HistoryUserTimestamp Field handler to display the marker for new content.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.