HistoryUserTimestamp.php in Views (for Drupal 7) 8.3
Definition of Views\node\Plugin\views\filter\HistoryUserTimestamp.
Namespace
Views\node\Plugin\views\filterFile
lib/Views/node/Plugin/views/filter/HistoryUserTimestamp.phpView source
<?php
/**
* @file
* Definition of Views\node\Plugin\views\filter\HistoryUserTimestamp.
*/
namespace Views\node\Plugin\views\filter;
use Drupal\views\Plugin\views\filter\FilterPluginBase;
use Drupal\Core\Annotation\Plugin;
/**
* Filter for new content.
*
* The handler is named history_user, because of compability reasons, the table
* is history.
*
* @ingroup views_filter_handlers
*
* @Plugin(
* id = "node_history_user_timestamp",
* module = "node"
* )
*/
class HistoryUserTimestamp extends FilterPluginBase {
// Don't display empty space where the operator would be.
var $no_operator = TRUE;
public function buildExposeForm(&$form, &$form_state) {
parent::buildExposeForm($form, $form_state);
// @todo There are better ways of excluding required and multiple (object flags)
unset($form['expose']['required']);
unset($form['expose']['multiple']);
unset($form['expose']['remember']);
}
function value_form(&$form, &$form_state) {
// Only present a checkbox for the exposed filter itself. There's no way
// to tell the difference between not checked and the default value, so
// specifying the default value via the views UI is meaningless.
if (!empty($form_state['exposed'])) {
if (isset($this->options['expose']['label'])) {
$label = $this->options['expose']['label'];
}
else {
$label = t('Has new content');
}
$form['value'] = array(
'#type' => 'checkbox',
'#title' => $label,
'#default_value' => $this->value,
);
}
}
public function query() {
global $user;
// This can only work if we're logged in.
if (!$user || !$user->uid) {
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 NODE_NEW_LIMIT are bzzzzzzzt outta here!
$limit = REQUEST_TIME - NODE_NEW_LIMIT;
$this
->ensureMyTable();
$field = "{$this->tableAlias}.{$this->realField}";
$node = $this->query
->ensure_table('node', $this->relationship);
$clause = '';
$clause2 = '';
if (module_exists('comment')) {
$ncs = $this->query
->ensure_table('node_comment_statistics', $this->relationship);
$clause = "OR {$ncs}.last_comment_timestamp > (***CURRENT_TIME*** - {$limit})";
$clause2 = "OR {$field} < {$ncs}.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
->add_where_expression($this->options['group'], "({$field} IS NULL AND ({$node}.changed > (***CURRENT_TIME*** - {$limit}) {$clause})) OR {$field} < {$node}.changed {$clause2}");
}
public function adminSummary() {
if (!empty($this->options['exposed'])) {
return t('exposed');
}
}
}
Classes
Name | Description |
---|---|
HistoryUserTimestamp | Filter for new content. |