From 4eeda371cffc456ac5d8bf9470a45de70b4130cb Mon Sep 17 00:00:00 2001 From: Nathaniel Catchpole <catch@35733.no-reply.drupal.org> Date: Thu, 22 May 2014 15:18:02 +0100 Subject: [PATCH] Issue #2100369 by joelpittet, ashepherd, alexpott, Xano: Don't support RDFa in tracker listings. --- .../rdf/Tests/TrackerAttributesTest.php | 199 ------------------ core/modules/tracker/tracker.pages.inc | 39 ---- 2 files changed, 238 deletions(-) delete mode 100644 core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php deleted file mode 100644 index fa7f67321edc..000000000000 --- a/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php +++ /dev/null @@ -1,199 +0,0 @@ -<?php - -/** - * @file - * Contains \Drupal\rdf\Tests\TrackerAttributesTest. - */ - -namespace Drupal\rdf\Tests; - -use Drupal\Core\Entity\EntityInterface; -use Drupal\node\NodeInterface; -use Drupal\simpletest\WebTestBase; - -/** - * Tests the RDF tracker page mapping. - */ -class TrackerAttributesTest extends WebTestBase { - - /** - * Modules to enable. - * - * @var array - */ - public static $modules = array('rdf', 'tracker'); - - public static function getInfo() { - return array( - 'name' => 'RDFa markup for tracker page', - 'description' => 'Test the mapping for the tracker page and ensure the proper RDFa markup in included.', - 'group' => 'RDF', - ); - } - - function setUp() { - parent::setUp(); - - // Creates article content type. - $this->drupalCreateContentType(array('type' => 'article', 'name' => t('Article'))); - - // Set bundle RDF mapping config for article. - $mapping = rdf_get_mapping('node', 'article'); - // Set fields RDF mapping config for article. - $node_shared_field_mappings = array( - 'title' => array( - 'properties' => array('dc:title'), - ), - 'created' => array( - 'properties' => array('dc:date', 'dc:created'), - 'datatype' => 'xsd:dateTime', - 'datatype_callback' => array('callable' => 'date_iso8601'), - ), - 'changed' => array( - 'properties' => array('dc:modified'), - 'datatype' => 'xsd:dateTime', - 'datatype_callback' => array('callable' => 'date_iso8601'), - ), - 'body' => array( - 'properties' => array('content:encoded'), - ), - 'uid' => array( - 'properties' => array('sioc:has_creator'), - 'mapping_type' => 'rel', - ), - 'name' => array( - 'properties' => array('foaf:name'), - ), - 'comment_count' => array( - 'properties' => array('sioc:num_replies'), - 'datatype' => 'xsd:integer', - ), - 'last_activity' => array( - 'properties' => array('sioc:last_activity_date'), - 'datatype' => 'xsd:dateTime', - 'datatype_callback' => array('callable' => 'date_iso8601'), - ), - ); - // Iterate over field mappings and save. - foreach ($node_shared_field_mappings as $field_name => $field_mapping) { - $mapping->setFieldMapping($field_name, $field_mapping)->save(); - } - - // Enables anonymous posting of content. - user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array( - 'create article content' => TRUE, - 'access comments' => TRUE, - 'post comments' => TRUE, - 'skip comment approval' => TRUE, - )); - - // Create comment field on article. - $this->container->get('comment.manager')->addDefaultField('node', 'article'); - - // Sets base URI of the site used by the RDFa parser. - $this->base_uri = url('<front>', array('absolute' => TRUE)); - } - - /** - * Tests for correct attributes on tracker page. - * - * Creates nodes as both admin and anonymous user and tests for correct RDFa - * markup on the tracker page for those nodes and their comments. - */ - function testAttributesInTracker() { - // Creates node as anonymous user. - $node_anon = $this->drupalCreateNode(array('type' => 'article', 'uid' => 0)); - // Creates node as admin user. - $node_admin = $this->drupalCreateNode(array('type' => 'article', 'uid' => 1)); - - // Passes both the anonymously posted node and the administrator posted node - // through to test for the RDF attributes. - $this->_testBasicTrackerRdfaMarkup($node_anon); - $this->_testBasicTrackerRdfaMarkup($node_admin); - } - - /** - * Helper function for testAttributesInTracker(). - * - * Tests the tracker page for RDFa markup. - * - * @param \Drupal\Core\Entity\EntityInterface $node - * The node just created. - */ - function _testBasicTrackerRdfaMarkup(NodeInterface $node) { - $node_uri = url('node/' . $node->id(), array('absolute' => TRUE)); - $user_uri = url('user/' . $node->getOwnerId(), array('absolute' => TRUE)); - - // Parses tracker page where the nodes are displayed in a table. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('tracker'), 'rdfa', $this->base_uri); - - // Inspects RDF graph output. - // Node title. - $expected_value = array( - 'type' => 'literal', - // The theme layer adds a space after the title a element, and the RDFa - // attribute is on the wrapping td. Adds a space to match this. - 'value' => $node->getTitle() . ' ', - 'lang' => 'en', - ); - $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/title', $expected_value), 'Title found in RDF output (dc:title).'); - // Number of comments. - $expected_value = array( - 'type' => 'literal', - 'value' => '0', - 'datatype' => 'http://www.w3.org/2001/XMLSchema#integer', - ); - $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output (sioc:num_replies).'); - // Node relation to author. - $expected_value = array( - 'type' => 'uri', - 'value' => $user_uri, - ); - if ($node->getOwnerId() == 0) { - $this->assertFalse($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#has_creator', $expected_value), 'No relation to author found in RDF output (sioc:has_creator).'); - } - elseif ($node->getOwnerId() > 0) { - $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#has_creator', $expected_value), 'Relation to author found in RDF output (sioc:has_creator).'); - } - // Last updated. - $expected_value = array( - 'type' => 'literal', - 'value' => date('c', $node->getChangedTime()), - 'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime', - ); - $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#last_activity_date', $expected_value), 'Last activity date found in RDF output (sioc:last_activity_date).'); - - - // Adds new comment to ensure the tracker is updated accordingly. - $comment = array( - 'subject' => $this->randomName(), - 'comment_body[0][value]' => $this->randomName(), - ); - $this->drupalPostForm('comment/reply/node/' . $node->id() .'/comment', $comment, t('Save')); - - // Parses tracker page where the nodes are displayed in a table. - $parser = new \EasyRdf_Parser_Rdfa(); - $graph = new \EasyRdf_Graph(); - $parser->parse($graph, $this->drupalGet('tracker'), 'rdfa', $this->base_uri); - - // Number of comments. - $expected_value = array( - 'type' => 'literal', - 'value' => '1', - 'datatype' => 'http://www.w3.org/2001/XMLSchema#integer', - ); - $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output (sioc:num_replies).'); - // Last updated due to new comment. - // last_activity_date needs to be queried from the database directly because - // it cannot be accessed via node_load(). - $expected_last_activity_date = db_query('SELECT t.changed FROM {tracker_node} t WHERE t.nid = (:nid)', array(':nid' => $node->id()))->fetchField(); - $expected_value = array( - 'type' => 'literal', - 'value' => date('c', $expected_last_activity_date), - 'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime', - ); - $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#last_activity_date', $expected_value), 'Last activity date after new comment has been posted found in RDF output (sioc:last_activity_date).'); - } -} diff --git a/core/modules/tracker/tracker.pages.inc b/core/modules/tracker/tracker.pages.inc index 85fa119cae70..30c791545c00 100644 --- a/core/modules/tracker/tracker.pages.inc +++ b/core/modules/tracker/tracker.pages.inc @@ -93,45 +93,6 @@ function tracker_page($account = NULL) { 'last updated' => array('data' => t('!time ago', array('!time' => format_interval(REQUEST_TIME - $node->last_activity)))), ); - // Adds extra RDFa markup to the $row array if the RDF module is enabled. - if (\Drupal::moduleHandler()->moduleExists('rdf')) { - $mapping = rdf_get_mapping('node', $node->getType()); - // Adds RDFa markup to the title of the node. Because the RDFa markup is - // added to the td tag which might contain HTML code, we specify an - // empty datatype to ensure the value of the title read by the RDFa - // parsers is a plain literal. - $title_mapping = $mapping->getPreparedFieldMapping('title'); - $row['title'] += rdf_rdfa_attributes($title_mapping) + array('datatype' => ''); - // Annotates the td tag containing the author of the node. - $uid_mapping = $mapping->getPreparedFieldMapping('uid'); - $row['author'] += rdf_rdfa_attributes($uid_mapping); - // Annotates the td tag containing the number of replies. We add the - // content attribute to ensure that only the comment count is used as - // the value for 'num_replies'. Otherwise, other text such as a link - // to the number of new comments could be included in the 'num_replies' - // value. - $comment_count_mapping = $mapping->getPreparedFieldMapping('comment_count'); - $row['replies'] += rdf_rdfa_attributes($comment_count_mapping); - $row['replies'] += array('content' => $node->comment_count); - // If the node has no comments, we assume the node itself was modified - // and apply 'changed' in addition to 'last_activity'. If there are - // comments present, we cannot infer whether the node itself was - // modified or a comment was posted, so we use only 'last_activity'. - $last_activity_mapping = $mapping->getPreparedFieldMapping('last_activity'); - $last_activity_attributes = rdf_rdfa_attributes($last_activity_mapping, $node->last_activity); - if ($node->comment_count == 0) { - $changed_mapping = $mapping->getPreparedFieldMapping('changed'); - $changed_attributes = rdf_rdfa_attributes($changed_mapping, $node->last_activity); - $last_activity_attributes['property'] = array_merge($last_activity_attributes['property'], $changed_attributes['property']); - } - $row['last updated'] += $last_activity_attributes; - - // We need to add the about attribute on the tr tag to specify which - // node the RDFa annotations above apply to. We move the content of - // $row to a 'data' sub array so we can specify attributes for the row. - $row = array('data' => $row); - $row['about'] = url('node/' . $node->id()); - } $rows[] = $row; } } -- GitLab