summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/block/block.test6
-rw-r--r--modules/blog/blog.test2
-rw-r--r--modules/comment/comment.admin.inc47
-rw-r--r--modules/comment/comment.install12
-rw-r--r--modules/comment/comment.module154
-rw-r--r--modules/comment/comment.pages.inc2
-rw-r--r--modules/comment/comment.test2
-rw-r--r--modules/forum/forum.test2
-rw-r--r--modules/help/help.test2
9 files changed, 152 insertions, 77 deletions
diff --git a/modules/block/block.test b/modules/block/block.test
index d32f7f2aa..ca2d771e4 100644
--- a/modules/block/block.test
+++ b/modules/block/block.test
@@ -244,12 +244,12 @@ class NewDefaultThemeBlocks extends DrupalWebTestCase {
$this->drupalLogin($admin_user);
// Ensure no other theme's blocks are in the block table yet.
- $count = db_query_range("SELECT 1 FROM {block} WHERE theme != 'garland'", 0, 1)->fetchField();
- $this->assertFalse($count, t('Only Garland has blocks.'));
+ $count = db_query_range("SELECT 1 FROM {block} WHERE theme NOT IN ('garland', 'seven')", 0, 1)->fetchField();
+ $this->assertFalse($count, t('Only Garland and Seven have blocks.'));
// Populate list of all blocks for matching against new theme.
$blocks = array();
- $result = db_query('SELECT * FROM {block}');
+ $result = db_query("SELECT * FROM {block} WHERE theme = 'garland'");
foreach ($result as $block) {
// $block->theme and $block->bid will not match, so remove them.
unset($block->theme, $block->bid);
diff --git a/modules/blog/blog.test b/modules/blog/blog.test
index 9bb73cc2b..70a43ea3f 100644
--- a/modules/blog/blog.test
+++ b/modules/blog/blog.test
@@ -128,7 +128,6 @@ class BlogTestCase extends DrupalWebTestCase {
if ($response2 == 200) {
$this->assertTitle(t('Blog | Drupal'), t('Blog help node was displayed'));
$this->assertText(t('Blog'), t('Blog help node was displayed'));
- $this->assertText(t('Home ' . $crumb . ' Administer ' . $crumb . ' Help'), t('Breadcrumbs were displayed'));
}
// Verify the blog block was displayed.
@@ -147,7 +146,6 @@ class BlogTestCase extends DrupalWebTestCase {
$this->assertResponse($response);
if ($response == 200) {
$this->assertTitle('Edit Blog entry ' . $node->title . ' | Drupal', t('Blog edit node was displayed'));
- $this->assertText(t('Home ' . $crumb . ' @title', array('@title' => $node->title)), t('Breadcrumbs were displayed'));
}
if ($response == 200) {
diff --git a/modules/comment/comment.admin.inc b/modules/comment/comment.admin.inc
index 3ea0b5d7c..dbb8f16c0 100644
--- a/modules/comment/comment.admin.inc
+++ b/modules/comment/comment.admin.inc
@@ -196,14 +196,11 @@ function comment_multiple_delete_confirm(&$form_state) {
*/
function comment_multiple_delete_confirm_submit($form, &$form_state) {
if ($form_state['values']['confirm']) {
- foreach ($form_state['values']['comments'] as $cid => $value) {
- $comment = comment_load($cid);
- // Perform the actual comment deletion.
- _comment_delete_thread($comment);
- _comment_update_node_statistics($comment->nid);
- }
+ comment_delete_multiple(array_keys($form_state['values']['comments']));
cache_clear_all();
- drupal_set_message(t('The comments have been deleted.'));
+ $count = count($form_state['values']['comments']);
+ watchdog('content', 'Deleted @count comments.', array('@count' => $count));
+ drupal_set_message(t('Deleted @count comments.', array('@count' => $count)));
}
$form_state['redirect'] = 'admin/content/comment';
}
@@ -214,7 +211,7 @@ function comment_multiple_delete_confirm_submit($form, &$form_state) {
* @param $cid
* The comment to be deleted.
*/
-function comment_delete($cid = NULL) {
+function comment_delete_page($cid = NULL) {
$comment = db_query('SELECT c.*, u.name AS registered_name, u.uid FROM {comment} c INNER JOIN {users} u ON u.uid = c.uid WHERE c.cid = :cid', array(':cid' => $cid))->fetch();
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
$output = '';
@@ -252,41 +249,13 @@ function comment_confirm_delete(&$form_state, $comment) {
* Process comment_confirm_delete form submissions.
*/
function comment_confirm_delete_submit($form, &$form_state) {
- drupal_set_message(t('The comment and all its replies have been deleted.'));
$comment = $form['#comment'];
// Delete the comment and its replies.
- _comment_delete_thread($comment);
- _comment_update_node_statistics($comment->nid);
+ comment_delete($comment->cid);
+ drupal_set_message(t('The comment and all its replies have been deleted.'));
+ watchdog('content', t('Deleted comment @cid and its replies.', array('@cid' => $comment->cid)));
// Clear the cache so an anonymous user sees that his comment was deleted.
cache_clear_all();
$form_state['redirect'] = "node/$comment->nid";
}
-
-/**
- * Perform the actual deletion of a comment and all its replies.
- *
- * @param $comment
- * An associative array describing the comment to be deleted.
- */
-function _comment_delete_thread($comment) {
- if (!is_object($comment) || !is_numeric($comment->cid)) {
- watchdog('content', 'Cannot delete non-existent comment.', array(), WATCHDOG_WARNING);
-
- return;
- }
-
- // Delete the comment.
- db_delete('comment')
- ->condition('cid', $comment->cid)
- ->execute();
- watchdog('content', 'Comment: deleted %subject.', array('%subject' => $comment->subject));
- module_invoke_all('comment_delete', $comment);
-
- // Delete the comment's replies.
- $result = db_query('SELECT c.*, u.name AS registered_name, u.uid FROM {comment} c INNER JOIN {users} u ON u.uid = c.uid WHERE pid = :cid', array(':cid' => $comment->cid));
- foreach ($result as $comment) {
- $comment->name = $comment->uid ? $comment->registered_name : $comment->name;
- _comment_delete_thread($comment);
- }
-}
diff --git a/modules/comment/comment.install b/modules/comment/comment.install
index 780753c75..61ca2d14a 100644
--- a/modules/comment/comment.install
+++ b/modules/comment/comment.install
@@ -296,3 +296,15 @@ function comment_schema() {
return $schema;
}
+
+/**
+ * Create comment Field API bundles.
+ */
+function comment_update_7005() {
+ $ret = array();
+
+ foreach (node_type_get_types() as $info) {
+ field_attach_create_bundle('comment_node_' . $info->type);
+ }
+ return $ret;
+} \ No newline at end of file
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index f7b4e9234..f09a32980 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -148,7 +148,7 @@ function comment_menu() {
);
$items['comment/delete'] = array(
'title' => 'Delete comment',
- 'page callback' => 'comment_delete',
+ 'page callback' => 'comment_delete_page',
'access arguments' => array('administer comments'),
'type' => MENU_CALLBACK,
);
@@ -187,21 +187,58 @@ function comment_menu() {
}
/**
- * Implement hook_node_type().
+ * Implement hook_fieldable_info().
*/
-function comment_node_type($op, $info) {
- $settings = array(
- 'comment',
- 'comment_default_mode',
- 'comment_default_per_page',
- 'comment_anonymous',
- 'comment_subject_field',
- 'comment_preview',
- 'comment_form_location',
+function comment_fieldable_info() {
+ $return = array(
+ 'comment' => array(
+ 'label' => t('Comment'),
+ 'object keys' => array(
+ 'id' => 'cid',
+ 'bundle' => 'node_type',
+ ),
+ 'bundle keys' => array(
+ 'bundle' => 'type',
+ ),
+ 'bundles' => array(),
+ ),
);
+ foreach (node_type_get_names() as $type => $name) {
+ $return['comment']['bundles']['comment_node_' . $type] = array(
+ 'label' => $name,
+ );
+ }
+ return $return;
+}
+
+/**
+ * Implement hook_node_type().
+ */
+function comment_node_type($op, $info) {
switch ($op) {
+ case 'insert':
+ field_attach_create_bundle('comment_node_' . $info->type);
+ break;
+
+ case 'update':
+ if (!empty($info->old_type) && $info->type != $info->old_type) {
+ field_attach_rename_bundle('comment_node_' . $info->old_type, 'comment_node_' . $info->type);
+ }
+ break;
+
case 'delete':
+ field_attach_delete_bundle('comment_node_' . $info->type);
+
+ $settings = array(
+ 'comment',
+ 'comment_default_mode',
+ 'comment_default_per_page',
+ 'comment_anonymous',
+ 'comment_subject_field',
+ 'comment_preview',
+ 'comment_form_location',
+ );
foreach ($settings as $setting) {
variable_del($setting . '_' . $info->type);
}
@@ -782,6 +819,8 @@ function comment_build_content($comment, $build_mode = 'full') {
'#markup' => check_markup($comment->comment, $comment->format, '', FALSE),
);
+ $comment->content += field_attach_view('comment', $comment, $build_mode);
+
if (empty($comment->in_preview)) {
$comment->content['links']['comment'] = array(
'#theme' => 'links',
@@ -1009,9 +1048,8 @@ function comment_node_insert($node) {
* Implement hook_node_delete().
*/
function comment_node_delete($node) {
- db_delete('comment')
- ->condition('nid', $node->nid)
- ->execute();
+ $cids = db_query('SELECT cid FROM {comment} WHERE nid = :nid', array(':nid' => $node->nid))->fetchCol();
+ comment_delete_multiple($cids);
db_delete('node_comment_statistics')
->condition('nid', $node->nid)
->execute();
@@ -1082,13 +1120,8 @@ function comment_user_cancel($edit, $account, $method) {
case 'user_cancel_delete':
module_load_include('inc', 'comment', 'comment.admin');
- $result = db_query('SELECT c.cid FROM {comment} c WHERE uid = :uid', array(':uid' => $account->uid))->fetchCol();
- foreach ($result as $cid) {
- $comment = comment_load($cid);
- // Delete the comment and its replies.
- _comment_delete_thread($comment);
- _comment_update_node_statistics($comment->nid);
- }
+ $cids = db_query('SELECT c.cid FROM {comment} c WHERE uid = :uid', array(':uid' => $account->uid))->fetchCol();
+ comment_delete_multiple($cids);
break;
}
}
@@ -1136,6 +1169,14 @@ function comment_save($comment) {
$comment->$key = $default;
}
}
+ // Make sure we have a bundle name.
+ if (!isset($comment->node_type)) {
+ $node = node_load($comment->nid);
+ $comment->node_type = 'comment_node_' . $node->type;
+ }
+
+ field_attach_presave('comment', $comment);
+
if ($comment->cid) {
// Update the comment in the database.
db_update('comment')
@@ -1152,6 +1193,7 @@ function comment_save($comment) {
))
->condition('cid', $comment->cid)
->execute();
+ field_attach_update('comment', $comment);
// Allow modules to respond to the updating of a comment.
module_invoke_all('comment_update', $comment);
// Add an entry to the watchdog log.
@@ -1229,6 +1271,8 @@ function comment_save($comment) {
// saved node to be propagated to the slave.
db_ignore_slave();
+ field_attach_insert('comment', $comment);
+
// Tell the other modules a new comment has been submitted.
module_invoke_all('comment_insert', $comment);
// Add an entry to the watchdog log.
@@ -1244,6 +1288,42 @@ function comment_save($comment) {
}
/**
+ * Delete a comment and all its replies.
+ *
+ * @param $cid
+ * The comment to delete.
+ */
+function comment_delete($cid) {
+ comment_delete_multiple(array($cid));
+}
+
+/**
+ * Delete comments and all their replies.
+ *
+ * @param $cids
+ * The comment to delete.
+ */
+function comment_delete_multiple($cids) {
+ $comments = comment_load_multiple($cids);
+ if ($comments) {
+
+ // Delete the comments.
+ db_delete('comment')
+ ->condition('cid', array_keys($comments), 'IN')
+ ->execute();
+ foreach ($comments as $comment) {
+ field_attach_delete('comment', $comment);
+ module_invoke_all('comment_delete', $comment);
+
+ // Delete the comment's replies.
+ $child_cids = db_query('SELECT cid FROM {comment} WHERE pid = :cid', array(':cid' => $comment->cid))->fetchCol();
+ comment_delete_multiple($child_cids);
+ _comment_update_node_statistics($comment->nid);
+ }
+ }
+}
+
+/**
* Implement hook_link().
*/
function comment_link($type, $object, $build_mode) {
@@ -1366,7 +1446,9 @@ function comment_load_multiple($cids = array(), $conditions = array()) {
if ($cids || $conditions) {
$query = db_select('comment', 'c');
$query->innerJoin('users', 'u', 'c.uid = u.uid');
+ $query->innerJoin('node', 'n', 'c.nid = n.nid');
$query->addField('u', 'name', 'registered_name');
+ $query->addField('n', 'type', 'node_type');
$query
->fields('c', array('cid', 'nid', 'pid', 'comment', 'subject', 'format', 'timestamp', 'name', 'mail', 'homepage', 'status', 'thread'))
->fields('u', array( 'uid', 'signature', 'picture', 'data', 'status'));
@@ -1390,11 +1472,14 @@ function comment_load_multiple($cids = array(), $conditions = array()) {
$comment = drupal_unpack($comment);
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
$comment->new = node_mark($comment->nid, $comment->timestamp);
+ $comment->node_type = 'comment_node_' . $comment->node_type;
$comments[$key] = $comment;
}
- // Invoke hook_comment_load().
if (!empty($comments)) {
+ // Attach fields.
+ field_attach_load('comment', $comments);
+ // Invoke hook_comment_load().
module_invoke_all('comment_load', $comments);
}
return $comments;
@@ -1752,6 +1837,10 @@ function comment_form(&$form_state, $edit = array()) {
'#type' => 'value',
'#value' => !empty($edit['uid']) ? $edit['uid'] : 0,
);
+ $form['node_type'] = array(
+ '#type' => 'value',
+ '#value' => 'comment_node_' . $node->type,
+ );
// Only show the save button if comment previews are optional or if we are
// already previewing the submission. However, if there are form errors,
@@ -1776,6 +1865,11 @@ function comment_form(&$form_state, $edit = array()) {
$form['#action'] = url('comment/reply/' . $edit['nid']);
}
+ $comment = (object) $edit;
+ $comment->node_type = 'comment_node_' . $node->type;
+ $form['#builder_function'] = 'comment_form_submit_build_comment';
+ field_attach_form('comment', $comment, $form, $form_state);
+
return $form;
}
@@ -1829,12 +1923,11 @@ function comment_preview($comment) {
}
if ($comment->pid) {
- $parent_comment = db_query('SELECT c.*, u.uid, u.name AS registered_name, u.signature, u.picture, u.data FROM {comment} c INNER JOIN {users} u ON c.uid = u.uid WHERE c.cid = :cid AND c.status = :status', array(
- ':cid' => $comment->pid,
- ':status' => COMMENT_PUBLISHED,
- ))->fetchObject();
-
- $build = comment_build($parent_comment);
+ $build = array();
+ if ($comments = comment_load_multiple(array($comment->pid), array('status' => COMMENT_PUBLISHED))) {
+ $parent_comment = $comments[$comment->pid];
+ $build = comment_build($parent_comment);
+ }
}
else {
$build = node_build($node);
@@ -1851,6 +1944,9 @@ function comment_preview($comment) {
*/
function comment_form_validate($form, &$form_state) {
global $user;
+ $comment = (object) $form_state['values'];
+ field_attach_form_validate('comment', $comment, $form, $form_state);
+
if ($user->uid === 0) {
foreach (array('name', 'homepage', 'mail') as $field) {
// Set cookie for 365 days.
@@ -1949,6 +2045,8 @@ function comment_submit($comment) {
function comment_form_submit_build_comment($form, &$form_state) {
$comment = comment_submit($form_state['values']);
+ field_attach_submit('comment', $comment, $form, $form_state);
+
$form_state['comment'] = (array)$comment;
$form_state['rebuild'] = TRUE;
return $comment;
diff --git a/modules/comment/comment.pages.inc b/modules/comment/comment.pages.inc
index dc18f8035..e575460cf 100644
--- a/modules/comment/comment.pages.inc
+++ b/modules/comment/comment.pages.inc
@@ -73,6 +73,8 @@ function comment_reply($node, $pid = NULL) {
}
// Display the parent comment
$comment = drupal_unpack($comment);
+ $comment->node_type = 'comment_node_' . $node->type;
+ field_attach_load('comment', array($comment->cid => $comment));
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
$build['comment_parent'] = comment_build($comment);
}
diff --git a/modules/comment/comment.test b/modules/comment/comment.test
index baadc2f03..d5de02a28 100644
--- a/modules/comment/comment.test
+++ b/modules/comment/comment.test
@@ -207,7 +207,7 @@ class CommentHelperCase extends DrupalWebTestCase {
if ($operation == 'delete') {
$this->drupalPost(NULL, array(), t('Delete comments'));
- $this->assertText(t('The comments have been deleted.'), t('Operation "' . $operation . '" was performed on comment.'));
+ $this->assertRaw(t('Deleted @count comments.', array('@count' => 1)), t('Operation "' . $operation . '" was performed on comment.'));
}
else {
$this->assertText(t('The update has been performed.'), t('Operation "' . $operation . '" was performed on comment.'));
diff --git a/modules/forum/forum.test b/modules/forum/forum.test
index 142f076eb..9abfc5f23 100644
--- a/modules/forum/forum.test
+++ b/modules/forum/forum.test
@@ -288,7 +288,6 @@ class ForumTestCase extends DrupalWebTestCase {
if ($response2 == 200) {
$this->assertTitle(t('Forum | Drupal'), t('Forum help title was displayed'));
$this->assertText(t('Forum'), t('Forum help node was displayed'));
- $this->assertText(t('Home ' . $crumb . ' Administer ' . $crumb . ' Help'), t('Breadcrumbs were displayed'));
}
// Verify the forum blocks were displayed.
@@ -316,7 +315,6 @@ class ForumTestCase extends DrupalWebTestCase {
$this->assertResponse($response);
if ($response == 200) {
$this->assertTitle('Edit Forum topic ' . $node->title . ' | Drupal', t('Forum edit node was displayed'));
- $this->assertText(t('Home ' . $crumb . ' @title', array('@title' => $node->title)), t('Breadcrumbs were displayed'));
}
if ($response == 200) {
diff --git a/modules/help/help.test b/modules/help/help.test
index de0ddfa6c..770901185 100644
--- a/modules/help/help.test
+++ b/modules/help/help.test
@@ -64,8 +64,6 @@ class HelpTestCase extends DrupalWebTestCase {
// continue;
// }
$this->assertTitle($name . ' | Drupal', t('[' . $module . '] Title was displayed'));
- $this->assertRaw('<h2>' . t($name) . '</h2>', t('[' . $module . '] Heading was displayed'));
- $this->assertText(t('Home ' . $crumb . ' Administer ' . $crumb . ' Help'), t('[' . $module . '] Breadcrumbs were displayed'));
}
}
}