- Patch #122098 by Damien Tournoud, catch, mdixoncm: split comment.timestamp into 'created' and 'changed' columns, just like for nodes.

merge-requests/26/head
Dries Buytaert 2009-10-10 13:37:11 +00:00
parent db53d99659
commit 15b24127b5
8 changed files with 89 additions and 38 deletions

View File

@ -62,7 +62,7 @@ function comment_admin_overview($form, &$form_state, $arg) {
'subject' => array('data' => t('Subject'), 'field' => 'subject'),
'author' => array('data' => t('Author'), 'field' => 'name'),
'posted_in' => array('data' => t('Posted in'), 'field' => 'node_title'),
'time' => array('data' => t('Time'), 'field' => 'timestamp', 'sort' => 'desc'),
'changed' => array('data' => t('Updated'), 'field' => 'changed', 'sort' => 'desc'),
'operations' => array('data' => t('Operations')),
);
@ -72,7 +72,7 @@ function comment_admin_overview($form, &$form_state, $arg) {
$query->addField('u', 'name', 'registered_name');
$query->addField('n', 'title', 'node_title');
$result = $query
->fields('c', array('subject', 'nid', 'cid', 'comment', 'timestamp', 'status', 'name', 'homepage'))
->fields('c', array('subject', 'nid', 'cid', 'comment', 'changed', 'status', 'name', 'homepage'))
->fields('u', array('uid'))
->condition('c.status', $status)
->limit(50)
@ -89,7 +89,7 @@ function comment_admin_overview($form, &$form_state, $arg) {
'subject' => l($comment->subject, 'comment/' . $comment->cid, array('attributes' => array('title' => truncate_utf8($comment->comment, 128)), 'fragment' => 'comment-' . $comment->cid)),
'author' => theme('username', array('account' => $comment)),
'posted_in' => l($comment->node_title, 'node/' . $comment->nid),
'time' => format_date($comment->timestamp, 'short'),
'changed' => format_date($comment->changed, 'short'),
'operations' => l(t('edit'), 'comment/edit/' . $comment->cid, array('query' => $destination)),
);
}

View File

@ -69,7 +69,7 @@ function hook_comment_load($comments) {
*/
function hook_comment_view($comment) {
// how old is the comment
$comment->time_ago = time() - $comment->timestamp;
$comment->time_ago = time() - $comment->changed;
}
/**

View File

@ -129,6 +129,35 @@ function comment_update_7006() {
db_add_index('node_comment_statistics', 'last_comment_uid', array('last_comment_uid'));
}
/**
* Split {comment}.timestamp into {comment}.created and {comment}.changed.
*/
function comment_update_7007() {
// Drop the index associated to timestamp.
db_drop_index('comment', 'comment_num_new');
// Create a created column.
db_add_field('comment', 'created', array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
));
// Rename the timestamp column to changed.
db_change_field('comment', 'timestamp', 'changed', array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
));
// Recreate the index.
db_add_index('comment', 'comment_num_new', array('nid', 'changed', 'status'));
// Migrate the data.
// @todo db_update() should support this.
db_query('UPDATE {comment} SET created = changed');
}
/**
* @} End of "defgroup updates-6.x-to-7.x"
* The next series of updates should start at 8000.
@ -184,11 +213,17 @@ function comment_schema() {
'default' => '',
'description' => "The author's host name.",
),
'timestamp' => array(
'created' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'description' => 'The time that the comment was created, or last edited by its author, as a Unix timestamp.',
'description' => 'The time that the comment was created, as a Unix timestamp.',
),
'changed' => array(
'type' => 'int',
'not null' => TRUE,
'default' => 0,
'description' => 'The time that the comment was last edited, as a Unix timestamp.',
),
'status' => array(
'type' => 'int',
@ -232,7 +267,7 @@ function comment_schema() {
),
'indexes' => array(
'comment_status_pid' => array('pid', 'status'),
'comment_num_new' => array('nid', 'timestamp', 'status'),
'comment_num_new' => array('nid', 'changed', 'status'),
'comment_uid' => array('uid'),
),
'primary key' => array('cid'),
@ -291,4 +326,4 @@ function comment_schema() {
);
return $schema;
}
}

View File

@ -382,9 +382,9 @@ function comment_permalink($comment) {
* @param integer $number
* (optional) The maximum number of comments to find.
* @return
* An array of comment objects each containing a nid,
* subject, cid, and timestamp, or an empty array if there are no recent
* comments visible to the current user.
* An array of comment objects each containing a nid, subject, cid, created
* and changed, or an empty array if there are no recent comments visible
* to the current user.
*/
function comment_get_recent($number = 10) {
// Step 1: Select a $number of nodes which have new comments,
@ -399,7 +399,7 @@ function comment_get_recent($number = 10) {
$query = db_select('comment', 'c');
$query->innerJoin('node', 'n', 'n.nid = c.nid');
return $query
->fields('c', array('nid', 'subject', 'cid', 'timestamp'))
->fields('c', array('nid', 'subject', 'cid', 'created', 'changed'))
->condition('c.nid', $nids, 'IN')
->condition('c.status', COMMENT_PUBLISHED)
->condition('n.status', 1)
@ -445,7 +445,7 @@ function comment_new_page_count($num_comments, $new_replies, $node) {
FROM {comment}
WHERE nid = :nid
AND status = 0
ORDER BY timestamp DESC) AS thread
ORDER BY changed DESC) AS thread
ORDER BY SUBSTRING(thread, 1, (LENGTH(thread) - 1))', 0, $new_replies, array(':nid' => $node->nid))->fetchField();
$thread = substr($result, 0, -1);
$count = db_query('SELECT COUNT(*) FROM {comment} WHERE nid = :nid AND status = 0 AND SUBSTRING(thread, 1, (LENGTH(thread) - 1)) < :thread', array(
@ -473,7 +473,7 @@ function theme_comment_block() {
$items = array();
$number = variable_get('comment_block_count', 10);
foreach (comment_get_recent($number) as $comment) {
$items[] = l($comment->subject, 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)) . '<br />' . t('@time ago', array('@time' => format_interval(REQUEST_TIME - $comment->timestamp)));
$items[] = l($comment->subject, 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)) . '<br />' . t('@time ago', array('@time' => format_interval(REQUEST_TIME - $comment->changed)));
}
if ($items) {
@ -1277,7 +1277,8 @@ function comment_save($comment) {
db_update('comment')
->fields(array(
'status' => $comment->status,
'timestamp' => $comment->timestamp,
'created' => $comment->created,
'changed' => $comment->changed,
'subject' => $comment->subject,
'comment' => $comment->comment,
'format' => $comment->comment_format,
@ -1336,8 +1337,12 @@ function comment_save($comment) {
}
}
if (empty($comment->timestamp)) {
$comment->timestamp = REQUEST_TIME;
if (empty($comment->created)) {
$comment->created = REQUEST_TIME;
}
if (empty($comment->changed)) {
$comment->changed = $comment->created;
}
if ($comment->uid === $user->uid && isset($user->name)) { // '===' Need to modify anonymous users as well.
@ -1353,7 +1358,8 @@ function comment_save($comment) {
'comment' => $comment->comment,
'format' => $comment->comment_format,
'hostname' => ip_address(),
'timestamp' => $comment->timestamp,
'created' => $comment->created,
'changed' => $comment->changed,
'status' => $comment->status,
'thread' => $thread,
'name' => $comment->name,
@ -1501,7 +1507,7 @@ class CommentController extends DrupalDefaultEntityController {
foreach ($comments as $key => $comment) {
$comment = drupal_unpack($comment);
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
$comment->new = node_mark($comment->nid, $comment->timestamp);
$comment->new = node_mark($comment->nid, $comment->changed);
$comment->node_type = 'comment_node_' . $comment->node_type;
$comments[$key] = $comment;
}
@ -1550,9 +1556,9 @@ function comment_num_new($nid, $timestamp = 0) {
$timestamp = ($timestamp > NODE_NEW_LIMIT ? $timestamp : NODE_NEW_LIMIT);
// Use the timestamp to retrieve the number of new comments.
return db_query('SELECT COUNT(cid) FROM {comment} WHERE nid = :nid AND timestamp > :timestamp AND status = :status', array(
return db_query('SELECT COUNT(cid) FROM {comment} WHERE nid = :nid AND changed > :changed AND status = :status', array(
':nid' => $nid,
':timestamp' => $timestamp,
':changed' => $timestamp,
':status' => COMMENT_PUBLISHED,
))->fetchField();
}
@ -1676,7 +1682,7 @@ function comment_form($form, &$form_state, $comment) {
$date = $comment->date;
}
else {
$date = format_date($comment->timestamp, 'custom', 'Y-m-d H:i O');
$date = format_date($comment->changed, 'custom', 'Y-m-d H:i O');
}
$form['admin'] = array(
@ -1921,7 +1927,8 @@ function comment_preview($comment) {
$comment->name = variable_get('anonymous', t('Anonymous'));
}
$comment->timestamp = !empty($comment->timestamp) ? $comment->timestamp : REQUEST_TIME;
$comment->created = !empty($comment->created) ? $comment->created : REQUEST_TIME;
$comment->changed = REQUEST_TIME;
$comment->in_preview = TRUE;
$comment_build = comment_build($comment, $node);
$comment_build += array(
@ -2017,7 +2024,9 @@ function comment_submit($comment) {
$comment['date'] = 'now';
}
$comment['timestamp'] = strtotime($comment['date']);
$comment['created'] = strtotime($comment['date']);
$comment['changed'] = REQUEST_TIME;
if (isset($comment['author'])) {
$account = user_load_by_name($comment['author']);
$comment['uid'] = $account->uid;
@ -2105,7 +2114,9 @@ function template_preprocess_comment(&$variables) {
$variables['comment'] = $comment;
$variables['node'] = $node;
$variables['author'] = theme('username', array('account' => $comment));
$variables['date'] = format_date($comment->timestamp);
$variables['created'] = format_date($comment->created);
$variables['changed'] = format_date($comment->changed);
$variables['new'] = !empty($comment->new) ? t('new') : '';
$variables['picture'] = theme_get_setting('toggle_comment_user_picture') ? theme('user_picture', array('account' => $comment)) : '';
$variables['signature'] = $comment->signature;
@ -2237,14 +2248,14 @@ function _comment_update_node_statistics($nid) {
if ($count > 0) {
// Comments exist.
$last_reply = db_query_range('SELECT cid, name, timestamp, uid FROM {comment} WHERE nid = :nid AND status = :status ORDER BY cid DESC', 0, 1, array(
$last_reply = db_query_range('SELECT cid, name, changed, uid FROM {comment} WHERE nid = :nid AND status = :status ORDER BY cid DESC', 0, 1, array(
':nid' => $nid,
':status' => COMMENT_PUBLISHED,
))->fetchObject();
db_update('node_comment_statistics')
->fields( array(
'comment_count' => $count,
'last_comment_timestamp' => $last_reply->timestamp,
'last_comment_timestamp' => $last_reply->changed,
'last_comment_name' => $last_reply->uid ? '' : $last_reply->name,
'last_comment_uid' => $last_reply->uid,
))

View File

@ -200,7 +200,11 @@ function comment_tokens($type, $tokens, array $data = array(), array $options =
break;
case 'created':
$replacements[$original] = format_date($comment->timestamp, 'medium', '', NULL, $language_code);
$replacements[$original] = format_date($comment->created, 'medium', '', NULL, $language_code);
break;
case 'changed':
$replacements[$original] = format_date($comment->changed, 'medium', '', NULL, $language_code);
break;
case 'node':
@ -217,7 +221,7 @@ function comment_tokens($type, $tokens, array $data = array(), array $options =
}
if ($date_tokens = token_find_with_prefix($tokens, 'created')) {
$replacements += token_generate('date', $date_tokens, array('date' => $comment->timestamp), $options);
$replacements += token_generate('date', $date_tokens, array('date' => $comment->created), $options);
}
if (($parent_tokens = token_find_with_prefix($tokens, 'parent')) && $parent = comment_load($comment->pid)) {

View File

@ -11,7 +11,8 @@
* print a subset such as render($content['field_example']). Use
* hide($content['field_example']) to temporarily suppress the printing of a
* given element.
* - $date: Date and time of posting.
* - $created: Date and time this comment was created.
* - $changed: Date and time this comment was changed.
* - $new: New comment marker.
* - $picture: Authors picture.
* - $signature: Authors signature.
@ -56,7 +57,7 @@
<div class="submitted">
<?php
print t('Submitted by !username on @datetime.',
array('!username' => $author, '@datetime' => $date));
array('!username' => $author, '@datetime' => $created));
?>
</div>

View File

@ -198,21 +198,21 @@ function tracker_comment_update($comment) {
* comment_save() calls hook_comment_publish() for all published comments.
*/
function tracker_comment_publish($comment) {
_tracker_add($comment->nid, $comment->uid, $comment->timestamp);
_tracker_add($comment->nid, $comment->uid, $comment->changed);
}
/**
* Implement hook_comment_unpublish().
*/
function tracker_comment_unpublish($comment) {
_tracker_remove($comment->nid, $comment->uid, $comment->timestamp);
_tracker_remove($comment->nid, $comment->uid, $comment->changed);
}
/**
* Implement hook_comment_delete().
*/
function tracker_comment_delete($comment) {
_tracker_remove($comment->nid, $comment->uid, $comment->timestamp);
_tracker_remove($comment->nid, $comment->uid, $comment->changed);
}
/**
@ -266,12 +266,12 @@ function _tracker_add($nid, $uid, $changed) {
*/
function _tracker_calculate_changed($nid) {
$changed = db_query('SELECT changed FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchField();
$latest_comment = db_query_range('SELECT cid, timestamp FROM {comment} WHERE nid = :nid AND status = :status ORDER BY timestamp DESC', 0, 1, array(
$latest_comment = db_query_range('SELECT cid, changed FROM {comment} WHERE nid = :nid AND status = :status ORDER BY changed DESC', 0, 1, array(
':nid' => $nid,
':status' => COMMENT_PUBLISHED,
))->fetchObject();
if ($latest_comment && $latest_comment->timestamp > $changed) {
$changed = $latest_comment->timestamp;
if ($latest_comment && $latest_comment->changed > $changed) {
$changed = $latest_comment->changed;
}
return $changed;
}

View File

@ -5,7 +5,7 @@
<div class="clearfix">
<span class="submitted"><?php print $date; ?> — <?php print $author; ?></span>
<span class="submitted"><?php print $created; ?> — <?php print $author; ?></span>
<?php if ($new) : ?>
<span class="new"><?php print drupal_ucfirst($new) ?></span>