Issue #2074255 by cilefen, wiifm, almul0, amunir, Gábor Hojtsy, Jalandhar, JeroenT, vegantriathlete: Add changed time tracking to users.

8.0.x
Alex Pott 2014-08-12 10:34:34 -07:00
parent f9c1ff235b
commit 2acb1fd6f0
7 changed files with 188 additions and 1 deletions

View File

@ -428,6 +428,13 @@ class User extends ContentEntityBase implements UserInterface {
return $this;
}
/**
* {@inheritdoc}
*/
public function getChangedTime() {
return $this->get('changed')->value;
}
/**
* {@inheritdoc}
*/
@ -500,6 +507,10 @@ class User extends ContentEntityBase implements UserInterface {
->setLabel(t('Created'))
->setDescription(t('The time that the user was created.'));
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the user was last edited.'));
$fields['access'] = BaseFieldDefinition::create('timestamp')
->setLabel(t('Last access'))
->setDescription(t('The time that the user last accessed the site.'))

View File

@ -31,6 +31,9 @@ class UserCreateTest extends WebTestBase {
$user = $this->drupalCreateUser(array('administer users'));
$this->drupalLogin($user);
$this->assertEqual($user->getCreatedTime(), REQUEST_TIME, 'Creating a user sets default "created" timestamp.');
$this->assertEqual($user->getChangedTime(), REQUEST_TIME, 'Creating a user sets default "changed" timestamp.');
// Create a field and an instance.
$field_name = 'test_field';
entity_create('field_storage_config', array(

View File

@ -65,6 +65,9 @@ class UserEditTest extends WebTestBase {
$this->drupalPostForm("user/" . $user1->id() . "/edit", $edit, t('Save'));
$this->assertRaw(t("The changes have been saved."));
// Make sure the changed timestamp is updated.
$this->assertEqual($user1->getChangedTime(), REQUEST_TIME, 'Changing a user sets "changed" timestamp.');
// Make sure the user can log in with their new password.
$this->drupalLogout();
$user1->pass_raw = $new_pass;

View File

@ -0,0 +1,55 @@
<?php
/**
* @file
* Contains \Drupal\user\Tests\Views\UserChangedTest.
*/
namespace Drupal\user\Tests\Views;
use Drupal\views\Tests\ViewTestBase;
use Drupal\views\Tests\ViewTestData;
/**
* Tests the changed field.
*
* @group user
*/
class UserChangedTest extends ViewTestBase {
/**
* Modules to enable.
*
* @var array
*/
public static $modules = array('views_ui', 'user_test_views');
/**
* Views used by this test.
*
* @var array
*/
public static $testViews = array('test_user_changed');
protected function setUp() {
parent::setUp();
ViewTestData::createTestViews(get_class($this), array('user_test_views'));
$this->enableViewsTestModule();
}
/**
* Tests changed field.
*/
public function testChangedField() {
$path = 'test_user_changed';
$options = array();
$this->drupalGet($path, $options);
$this->assertText(t('Updated date') . ': ' . date('Y-m-d', REQUEST_TIME));
}
}

View File

@ -7,6 +7,7 @@
namespace Drupal\user;
use Drupal\Core\Entity\EntityChangedInterface;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Session\AccountInterface;
@ -15,7 +16,7 @@ use Drupal\Core\Session\AccountInterface;
*
* @ingroup user_api
*/
interface UserInterface extends ContentEntityInterface, AccountInterface {
interface UserInterface extends ContentEntityInterface, EntityChangedInterface, AccountInterface {
/**
* Whether a user has a certain role.

View File

@ -0,0 +1,46 @@
base_table: users
core: '8'
description: ''
status: '1'
display:
default:
display_options:
access:
type: none
cache:
type: none
exposed_form:
type: basic
pager:
type: full
row:
type: fields
style:
type: default
fields:
name:
id: uid
table: users
field: uid
provider: user
changed:
id: changed
table: users
field: changed
provider: user
date_format: html_date
filters: { }
display_plugin: default
display_title: Master
id: default
position: 0
page_1:
display_options:
path: test_user_changed
display_plugin: page
display_title: Page
id: page_1
position: 0
label: ''
id: test_user_changed
tag: ''

View File

@ -267,6 +267,74 @@ function user_views_data() {
),
);
$data['users']['changed'] = array(
'title' => t('Updated date'),
'help' => t('The date the user was last updated.'),
'field' => array(
'id' => 'date',
),
'sort' => array(
'id' => 'date'
),
'filter' => array(
'id' => 'date',
),
);
$data['users']['changed_fulldate'] = array(
'title' => t('Updated date'),
'help' => t('Date in the form of CCYYMMDD.'),
'argument' => array(
'field' => 'changed',
'id' => 'date_fulldate',
),
);
$data['users']['changed_year_month'] = array(
'title' => t('Updated year + month'),
'help' => t('Date in the form of YYYYMM.'),
'argument' => array(
'field' => 'changed',
'id' => 'date_year_month',
),
);
$data['users']['changed_year'] = array(
'title' => t('Updated year'),
'help' => t('Date in the form of YYYY.'),
'argument' => array(
'field' => 'changed',
'id' => 'date_year',
),
);
$data['users']['changed_month'] = array(
'title' => t('Updated month'),
'help' => t('Date in the form of MM (01 - 12).'),
'argument' => array(
'field' => 'changed',
'id' => 'date_month',
),
);
$data['users']['changed_day'] = array(
'title' => t('Updated day'),
'help' => t('Date in the form of DD (01 - 31).'),
'argument' => array(
'field' => 'changed',
'id' => 'date_day',
),
);
$data['users']['changed_week'] = array(
'title' => t('Updated week'),
'help' => t('Date in the form of WW (01 - 53).'),
'argument' => array(
'field' => 'changed',
'id' => 'date_week',
),
);
if (\Drupal::moduleHandler()->moduleExists('filter')) {
$data['users']['signature'] = array(
'title' => t('Signature'),