Issue #2074475 by benjy, Gábor Hojtsy: Rename {file_managed}.timestamp to 'changed' and add a created timestamp.

8.0.x
Nathaniel Catchpole 2014-01-07 10:09:22 +00:00
parent 261fb6483f
commit e948f79c4c
21 changed files with 170 additions and 43 deletions

View File

@ -71,7 +71,8 @@ display:
filemime: filemime
filesize: filesize
status: status
timestamp: timestamp
created: created
changed: changed
count: count
info:
fid:
@ -109,7 +110,14 @@ display:
separator: ''
empty_column: false
responsive: priority-low
timestamp:
created:
sortable: true
default_sort_order: desc
align: ''
separator: ''
empty_column: false
responsive: ''
changed:
sortable: true
default_sort_order: desc
align: ''
@ -123,7 +131,7 @@ display:
separator: ''
empty_column: false
responsive: priority-medium
default: timestamp
default: changed
empty_table: true
row:
type: fields
@ -340,10 +348,10 @@ display:
empty_zero: false
hide_alter_empty: true
plugin_id: file_status
timestamp:
id: timestamp
created:
id: created
table: file_managed
field: timestamp
field: created
relationship: none
group_type: group
admin_label: ''
@ -392,6 +400,58 @@ display:
custom_date_format: ''
timezone: ''
plugin_id: date
changed:
id: changed
table: file_managed
field: changed
relationship: none
group_type: group
admin_label: ''
label: 'Changed date'
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: ''
word_boundary: true
ellipsis: true
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: true
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
date_format: medium
custom_date_format: ''
timezone: ''
plugin_id: date
count:
id: count
table: file_usage

View File

@ -81,8 +81,8 @@ function hook_file_validate(Drupal\file\FileInterface $file) {
* The file entity that is about to be created or updated.
*/
function hook_file_presave(Drupal\file\FileInterface $file) {
// Change the file timestamp to an hour prior.
$file->timestamp -= 3600;
// Change the owner of the file.
$file->uid->value = 1;
}
/**

View File

@ -78,8 +78,15 @@ function file_schema() {
'default' => 0,
'size' => 'tiny',
),
'timestamp' => array(
'description' => 'UNIX timestamp for when the file was added.',
'created' => array(
'description' => 'UNIX timestamp for when the file added.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
'default' => 0,
),
'changed' => array(
'description' => 'UNIX timestamp for when the file was last changed.',
'type' => 'int',
'unsigned' => TRUE,
'not null' => TRUE,
@ -89,7 +96,7 @@ function file_schema() {
'indexes' => array(
'uid' => array('uid'),
'status' => array('status'),
'timestamp' => array('timestamp'),
'changed' => array('changed'),
),
'unique keys' => array(
'uuid' => array('uuid'),
@ -320,4 +327,3 @@ function file_update_8004() {
);
db_change_field('file_managed', 'filesize', 'filesize', $spec);
}

View File

@ -1036,7 +1036,11 @@ function file_tokens($type, $tokens, array $data = array(), array $options = arr
break;
// These tokens are default variations on the chained tokens handled below.
case 'timestamp':
case 'created':
$replacements[$original] = format_date($file->getCreatedTime(), 'medium', '', NULL, $langcode);
break;
case 'changed':
$replacements[$original] = format_date($file->getChangedTime(), 'medium', '', NULL, $langcode);
break;
@ -1047,7 +1051,11 @@ function file_tokens($type, $tokens, array $data = array(), array $options = arr
}
}
if ($date_tokens = $token_service->findWithPrefix($tokens, 'timestamp')) {
if ($date_tokens = $token_service->findWithPrefix($tokens, 'created')) {
$replacements += $token_service->generate('date', $date_tokens, array('date' => $file->getCreatedTime()), $options);
}
if ($date_tokens = $token_service->findWithPrefix($tokens, 'changed')) {
$replacements += $token_service->generate('date', $date_tokens, array('date' => $file->getChangedTime()), $options);
}
@ -1094,8 +1102,13 @@ function file_token_info() {
'name' => t("URL"),
'description' => t("The web-accessible URL for the file."),
);
$file['timestamp'] = array(
'name' => t("Timestamp"),
$file['created'] = array(
'name' => t("Created"),
'description' => t("The date the file created."),
'type' => 'date',
);
$file['changed'] = array(
'name' => t("Changed"),
'description' => t("The date the file was most recently changed."),
'type' => 'date',
);

View File

@ -154,15 +154,30 @@ function file_views_data() {
),
);
// timestamp field
$data['file_managed']['timestamp'] = array(
// The created field.
$data['file_managed']['created'] = array(
'title' => t('Upload date'),
'help' => t('The date the file was uploaded.'),
'field' => array(
'id' => 'date',
),
'sort' => array(
'id' => 'date'
'id' => 'date',
),
'filter' => array(
'id' => 'date',
),
);
// The changed field.
$data['file_managed']['changed'] = array(
'title' => t('Modified date'),
'help' => t('The date the file was last changed.'),
'field' => array(
'id' => 'date',
),
'sort' => array(
'id' => 'date',
),
'filter' => array(
'id' => 'date',

View File

@ -108,11 +108,18 @@ class File extends ContentEntityBase implements FileInterface {
$this->get('filesize')->value = $size;
}
/**
* {@inheritdoc}
*/
public function getCreatedTime() {
return $this->get('created')->value;
}
/**
* {@inheritdoc}
*/
public function getChangedTime() {
return $this->get('timestamp')->value;
return $this->get('changed')->value;
}
/**
@ -178,7 +185,11 @@ class File extends ContentEntityBase implements FileInterface {
public function preSave(EntityStorageControllerInterface $storage_controller) {
parent::preSave($storage_controller);
$this->timestamp = REQUEST_TIME;
$this->changed->value = REQUEST_TIME;
if (empty($this->created->value)) {
$this->created->value = REQUEST_TIME;
}
$this->setSize(filesize($this->getFileUri()));
if (!isset($this->langcode->value)) {
// Default the file's language code to none, because files are language
@ -253,9 +264,13 @@ class File extends ContentEntityBase implements FileInterface {
->setLabel(t('Status'))
->setDescription(t('The status of the file, temporary (0) and permanent (1).'));
$fields['timestamp'] = FieldDefinition::create('integer')
$fields['created'] = FieldDefinition::create('integer')
->setLabel(t('Created'))
->setDescription(t('The time that the node was created.'));
->setDescription(t('The timestamp that the file was created.'));
$fields['changed'] = FieldDefinition::create('integer')
->setLabel(t('Changed'))
->setDescription(t('The timestamp that the file was last changed.'));
return $fields;
}

View File

@ -127,4 +127,11 @@ interface FileInterface extends ContentEntityInterface, EntityChangedInterface {
*/
public function setOwner(UserInterface $user);
/**
* Returns the node creation timestamp.
*
* @return int
* Creation timestamp of the node.
*/
public function getCreatedTime();
}

View File

@ -33,9 +33,9 @@ class FileStorageController extends FieldableDatabaseStorageController implement
public function retrieveTemporaryFiles() {
// Use separate placeholders for the status to avoid a bug in some versions
// of PHP. See http://drupal.org/node/352956.
return $this->database->query('SELECT fid FROM {' . $this->entityInfo->getBaseTable() . '} WHERE status <> :permanent AND timestamp < :timestamp', array(
return $this->database->query('SELECT fid FROM {' . $this->entityInfo->getBaseTable() . '} WHERE status <> :permanent AND changed < :changed', array(
':permanent' => FILE_STATUS_PERMANENT,
':timestamp' => REQUEST_TIME - DRUPAL_MAXIMUM_TEMP_FILE_AGE
':changed' => REQUEST_TIME - DRUPAL_MAXIMUM_TEMP_FILE_AGE
));
}
}

View File

@ -23,7 +23,7 @@ class File extends WizardPluginBase {
/**
* Set the created column.
*/
protected $createdColumn = 'timestamp';
protected $createdColumn = 'created';
/**
* Set default values for the path field options.

View File

@ -65,7 +65,7 @@ class DeleteTest extends FileManagedTestBase {
// of the file is older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
db_update('file_managed')
->fields(array(
'timestamp' => REQUEST_TIME - (DRUPAL_MAXIMUM_TEMP_FILE_AGE + 1),
'changed' => REQUEST_TIME - (DRUPAL_MAXIMUM_TEMP_FILE_AGE + 1),
))
->condition('fid', $file->id())
->execute();

View File

@ -119,7 +119,7 @@ class FileFieldRevisionTest extends FileFieldTestBase {
// of the file is older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
db_update('file_managed')
->fields(array(
'timestamp' => REQUEST_TIME - (DRUPAL_MAXIMUM_TEMP_FILE_AGE + 1),
'changed' => REQUEST_TIME - (DRUPAL_MAXIMUM_TEMP_FILE_AGE + 1),
))
->condition('fid', $node_file_r3->id())
->execute();
@ -134,7 +134,7 @@ class FileFieldRevisionTest extends FileFieldTestBase {
// of the file is older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
db_update('file_managed')
->fields(array(
'timestamp' => REQUEST_TIME - (DRUPAL_MAXIMUM_TEMP_FILE_AGE + 1),
'changed' => REQUEST_TIME - (DRUPAL_MAXIMUM_TEMP_FILE_AGE + 1),
))
->condition('fid', $node_file_r1->id())
->execute();

View File

@ -158,7 +158,8 @@ class FileListingTest extends FileFieldTestBase {
'filename' => 'druplicon.txt',
'uri' => 'public://druplicon.txt',
'filemime' => 'text/plain',
'timestamp' => 1,
'created' => 1,
'changed' => 1,
'status' => FILE_STATUS_PERMANENT,
));
file_put_contents($file->getFileUri(), 'hello world');

View File

@ -111,7 +111,8 @@ abstract class FileManagedTestBase extends FileTestBase {
$file->filename = drupal_basename($file->uri);
$file->filemime = 'text/plain';
$file->uid = 1;
$file->timestamp = REQUEST_TIME;
$file->created = REQUEST_TIME;
$file->changed = REQUEST_TIME;
$file->filesize = filesize($file->uri);
$file->status = 0;
// Write the record directly rather than using the API so we don't invoke

View File

@ -53,8 +53,10 @@ class FileTokenReplaceTest extends FileFieldTestBase {
$tests['[file:mime]'] = check_plain($file->getMimeType());
$tests['[file:size]'] = format_size($file->getSize());
$tests['[file:url]'] = check_plain(file_create_url($file->getFileUri()));
$tests['[file:timestamp]'] = format_date($file->getChangedTime(), 'medium', '', NULL, $language_interface->id);
$tests['[file:timestamp:short]'] = format_date($file->getChangedTime(), 'short', '', NULL, $language_interface->id);
$tests['[file:created]'] = format_date($file->getCreatedTime(), 'medium', '', NULL, $language_interface->id);
$tests['[file:created:short]'] = format_date($file->getCreatedTime(), 'short', '', NULL, $language_interface->id);
$tests['[file:changed]'] = format_date($file->getChangedTime(), 'medium', '', NULL, $language_interface->id);
$tests['[file:changed:short]'] = format_date($file->getChangedTime(), 'short', '', NULL, $language_interface->id);
$tests['[file:owner]'] = check_plain(user_format_name($this->admin_user));
$tests['[file:owner:uid]'] = $file->getOwner()->id();

View File

@ -28,7 +28,8 @@ class SaveTest extends FileManagedTestBase {
'filename' => 'druplicon.txt',
'uri' => 'public://druplicon.txt',
'filemime' => 'text/plain',
'timestamp' => 1,
'created' => 1,
'changed' => 1,
'status' => FILE_STATUS_PERMANENT,
));
file_put_contents($file->getFileUri(), 'hello world');
@ -70,7 +71,8 @@ class SaveTest extends FileManagedTestBase {
'filename' => 'DRUPLICON.txt',
'uri' => 'public://DRUPLICON.txt',
'filemime' => 'text/plain',
'timestamp' => 1,
'created' => 1,
'changed' => 1,
'status' => FILE_STATUS_PERMANENT,
));
file_put_contents($file->getFileUri(), 'hello world');

View File

@ -134,7 +134,7 @@ class UsageTest extends FileManagedTestBase {
db_update('file_managed')
->fields(array(
'status' => 0,
'timestamp' => 1,
'changed' => 1,
))
->condition('fid', $temp_old->id())
->execute();
@ -151,7 +151,7 @@ class UsageTest extends FileManagedTestBase {
// Permanent file that is older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
$perm_old = file_save_data('');
db_update('file_managed')
->fields(array('timestamp' => 1))
->fields(array('changed' => 1))
->condition('fid', $temp_old->id())
->execute();
$this->assertTrue(file_exists($perm_old->getFileUri()), 'Old permanent file was created correctly.');

View File

@ -224,7 +224,8 @@ class EntityCrudHookTest extends EntityUnitTestBase {
'filemime' => 'text/plain',
'filesize' => filesize($url),
'status' => 1,
'timestamp' => REQUEST_TIME,
'created' => REQUEST_TIME,
'changed' => REQUEST_TIME,
));
$this->assertHookMessageOrder(array(

View File

@ -776,7 +776,8 @@ db_insert('file_managed')->fields(array(
'filemime',
'filesize',
'status',
'timestamp'
'created',
'changed',
))
->values(array(
'fid' => '1',
@ -786,6 +787,7 @@ db_insert('file_managed')->fields(array(
'filemime' => 'text/plain',
'filesize' => 0,
'status' => 1,
'timestamp' => '1314997642',
'created' => '1314997642',
'changed' => '1314997642',
))
->execute();

View File

@ -19,7 +19,8 @@ $fid = db_insert('file_managed')
'filename' => 'faked_image.png',
'filesize' => 1000,
'filemime' => 'image/png',
'timestamp' => 1353542634,
'created' => 1353542634,
'changed' => 1353542634,
))
->execute();

View File

@ -69,7 +69,7 @@ class UserPictureTest extends WebTestBase {
// of the file is older than DRUPAL_MAXIMUM_TEMP_FILE_AGE.
db_update('file_managed')
->fields(array(
'timestamp' => REQUEST_TIME - (DRUPAL_MAXIMUM_TEMP_FILE_AGE + 1),
'changed' => REQUEST_TIME - (DRUPAL_MAXIMUM_TEMP_FILE_AGE + 1),
))
->condition('fid', $file->id())
->execute();

View File

@ -555,7 +555,8 @@ function user_update_8011() {
'langcode' => Language::LANGCODE_NOT_SPECIFIED,
'filesize' => filesize($destination),
'filemime' => file_get_mimetype($destination),
'timestamp' => REQUEST_TIME,
'created' => REQUEST_TIME,
'changed' => REQUEST_TIME,
))
->execute();
$default_image_fid = db_query('SELECT fid FROM {file_managed} WHERE uri = :uri', array(':uri' => $destination))->fetchField();