From 8ee21dd13240614a65c3742e3439e7281de55dda Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Wed, 16 Dec 2009 19:53:53 +0000
Subject: [PATCH] - Patch #632092 by scor, linclark: number of replies of a
 node in RDFa.

---
 modules/comment/comment.test | 26 ++++++++++++++++++++++++--
 modules/node/node.module     |  3 +++
 modules/rdf/rdf.module       | 25 ++++++++++++++++++++++++-
 3 files changed, 51 insertions(+), 3 deletions(-)

diff --git a/modules/comment/comment.test b/modules/comment/comment.test
index 8a4373ef1765..68e9fa70c093 100644
--- a/modules/comment/comment.test
+++ b/modules/comment/comment.test
@@ -1087,11 +1087,33 @@ class CommentRdfaTestCase extends CommentHelperCase {
     $this->drupalLogout();
   }
 
+  /**
+   * Tests the presence of the RDFa markup for the number of comments.
+   */
+  function testNumberOfCommentsRdfaMarkup() {
+    // Posts 2 comments as a registered user.
+    $this->drupalLogin($this->web_user);
+    $this->postComment($this->node1, $this->randomName(), $this->randomName());
+    $this->postComment($this->node1, $this->randomName(), $this->randomName());
+
+    // Tests number of comments in teaser view.
+    $this->drupalGet('node');
+    $comment_count_teaser = $this->xpath("//div[contains(@typeof, 'sioc:Item')]//li[contains(@class, 'comment_comments')]/a[contains(@property, 'sioc:num_replies') and contains(@content, '2')]");
+    $this->assertTrue(!empty($comment_count_teaser), t('RDFa markup for the number of comments found on teaser view.'));
+
+    // Tests number of comments in full node view.
+    $this->drupalGet('node/' . $this->node1->nid);
+    $node_url = url('node/' . $this->node1->nid);
+    $comment_count_teaser = $this->xpath("/html/head/meta[@about='$node_url' and @property='sioc:num_replies' and @content='2']");
+    $this->assertTrue(!empty($comment_count_teaser), t('RDFa markup for the number of comments found on full node view.'));
+  }
+
+
   /**
    * Tests the presence of the RDFa markup for the title, date and author and
    * homepage on registered users and anonymous comments.
    */
-  function testAttributesInRdfaMarkup() {
+  function testCommentRdfaMarkup() {
 
     // Posts comment #1 as a registered user.
     $this->drupalLogin($this->web_user);
@@ -1141,7 +1163,7 @@ class CommentRdfaTestCase extends CommentHelperCase {
   }
 
   /**
-   * Helper function for testAttributesInRdfaMarkup().
+   * Helper function for testCommentRdfaMarkup().
    *
    * Tests the current page for basic comment RDFa markup.
    *
diff --git a/modules/node/node.module b/modules/node/node.module
index 95ee56612404..a55fd039a94f 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -810,6 +810,9 @@ function node_rdf_mapping() {
         'name' => array(
           'predicates' => array('foaf:name'),
         ),
+        'comment_count' => array(
+          'predicates' => array('sioc:num_replies'),
+        ),
       ),
     ),
   );
diff --git a/modules/rdf/rdf.module b/modules/rdf/rdf.module
index 7993b24c7667..73a2ec03aad0 100644
--- a/modules/rdf/rdf.module
+++ b/modules/rdf/rdf.module
@@ -405,7 +405,7 @@ function rdf_preprocess_node(&$variables) {
     if (!empty($variables['node']->rdf_mapping['title']['predicates'])) {
       $element['#attributes']['property'] = $variables['node']->rdf_mapping['title']['predicates'];
     }
-    drupal_add_html_head($element, 'rdf_node');
+    drupal_add_html_head($element, 'rdf_node_title');
   }
 
   // Adds RDFa markup for the date.
@@ -417,6 +417,29 @@ function rdf_preprocess_node(&$variables) {
   if (!empty($variables['rdf_mapping']['uid'])) {
     $variables['rdf_template_variable_attributes_array']['name']['rel'] = $variables['rdf_mapping']['uid']['predicates'];
   }
+
+  // Adds RDFa markup annotating the number of comments a node has.
+  if (isset($variables['node']->comment_count) && !empty($variables['node']->rdf_mapping['comment_count']['predicates'])) {
+    // Annotates the 'x comments' link in teaser view.
+    if (isset($variables['content']['links']['comment']['#links']['comment_comments'])) {
+      $comment_count_attributes['property'] = $variables['node']->rdf_mapping['comment_count']['predicates'];
+      $comment_count_attributes['content'] = $variables['node']->comment_count;
+      $variables['content']['links']['comment']['#links']['comment_comments']['attributes'] += $comment_count_attributes;
+    }
+    // In full node view, the number of comments is not displayed by
+    // node.tpl.php so it is expressed in RDFa in the <head> tag.
+    if ($variables['page'] && user_access('access comments')) {
+      $element = array(
+        '#tag' => 'meta',
+        '#attributes' => array(
+          'about' => $variables['node_url'],
+          'property' => $variables['node']->rdf_mapping['comment_count']['predicates'],
+          'content' => $variables['node']->comment_count,
+        ),
+      );
+      drupal_add_html_head($element, 'rdf_node_comment_count');
+    }
+  }
 }
 
 /**
-- 
GitLab