get('exposed')) { if (isset($this->options['expose']['label'])) { $label = $this->options['expose']['label']; } else { $label = $this->t('Has new content'); } $form['value'] = [ '#type' => 'checkbox', '#title' => $label, '#default_value' => $this->value, ]; } } /** * {@inheritdoc} */ public function query() { // This can only work if we're authenticated in. if (!\Drupal::currentUser()->isAuthenticated()) { return; } // Don't filter if we're exposed and the checkbox isn't selected. if ((!empty($this->options['exposed'])) && empty($this->value)) { return; } // Hey, Drupal kills old history, so nodes that haven't been updated // since HISTORY_READ_LIMIT are bzzzzzzzt outta here! $limit = REQUEST_TIME - HISTORY_READ_LIMIT; $this->ensureMyTable(); $field = "$this->tableAlias.$this->realField"; $node = $this->query->ensureTable('node_field_data', $this->relationship); $clause = ''; $clause2 = ''; if ($alias = $this->query->ensureTable('comment_entity_statistics', $this->relationship)) { $clause = "OR $alias.last_comment_timestamp > (***CURRENT_TIME*** - $limit)"; $clause2 = "OR $field < $alias.last_comment_timestamp"; } // NULL means a history record doesn't exist. That's clearly new content. // Unless it's very very old content. Everything in the query is already // type safe cause none of it is coming from outside here. $this->query->addWhereExpression($this->options['group'], "($field IS NULL AND ($node.changed > (***CURRENT_TIME*** - $limit) $clause)) OR $field < $node.changed $clause2"); } /** * {@inheritdoc} */ public function adminSummary() { if (!empty($this->options['exposed'])) { return $this->t('exposed'); } } }