diff options
author | Dries Buytaert <dries@buytaert.net> | 2010-01-22 22:55:03 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2010-01-22 22:55:03 +0000 |
commit | 5c057dfe6dcae6cdf29a22124264342122f99c58 (patch) | |
tree | 5162761f89cf47071bf212d0f93e4b2929a39c08 /modules/rdf | |
parent | 9e2b5880c5861a77fe733c87378e74283d19277d (diff) | |
download | brdo-5c057dfe6dcae6cdf29a22124264342122f99c58.tar.gz brdo-5c057dfe6dcae6cdf29a22124264342122f99c58.tar.bz2 |
- Patch #678594 by linclark: fixed RDFa markup for file/image formatters.
Diffstat (limited to 'modules/rdf')
-rw-r--r-- | modules/rdf/rdf.module | 21 | ||||
-rw-r--r-- | modules/rdf/rdf.test | 58 |
2 files changed, 78 insertions, 1 deletions
diff --git a/modules/rdf/rdf.module b/modules/rdf/rdf.module index aa7653d18..fb65a19f1 100644 --- a/modules/rdf/rdf.module +++ b/modules/rdf/rdf.module @@ -452,6 +452,19 @@ function rdf_preprocess_field(&$variables) { if (!empty($mapping) && !empty($mapping[$field_name])) { foreach ($element['#items'] as $delta => $item) { $variables['item_attributes_array'][$delta] = rdf_rdfa_attributes($mapping[$field_name], $item); + // If this field is an image, RDFa will not output correctly when the + // image is in a containing 'a' tag. If the field is a file, RDFa will + // not output correctly if the filetype icon comes before the link to + // the file. We correct this by adding a resource attribute to the div if + // this field has a URI. + if (isset($item['uri'])) { + if (isset($element[$delta]['#image_style'])) { + $variables['item_attributes_array'][$delta]['resource'] = image_style_url($element[$delta]['#image_style'], $item['uri']); + } + else { + $variables['item_attributes_array'][$delta]['resource'] = file_create_url($item['uri']); + } + } } } } @@ -595,6 +608,13 @@ function rdf_field_attach_view_alter(&$output, $context) { } /** + * Implements MODULE_preprocess_HOOK(). + */ +function rdf_preprocess_image(&$variables) { + $variables['attributes']['typeof'] = array('foaf:Image'); +} + +/** * Wraps a template variable in an HTML element with the desired attributes. * * This is called by rdf_process() shortly before the theme system renders @@ -695,4 +715,3 @@ function theme_rdf_metadata($variables) { } return $output; } - diff --git a/modules/rdf/rdf.test b/modules/rdf/rdf.test index 4b5ea2f5d..d94421fe7 100644 --- a/modules/rdf/rdf.test +++ b/modules/rdf/rdf.test @@ -116,6 +116,64 @@ class RdfMarkupTestCase extends DrupalWebTestCase { $this->assertEqual($expected_attributes, $attributes); } + /** + * Ensure that file fields have the correct resource as the object in RDFa + * when displayed as a teaser. + */ + function testAttributesInMarkupFile() { + // Create a user to post the image. + $admin_user = $this->drupalCreateUser(array('edit own article content', 'revert revisions', 'administer content types')); + $this->drupalLogin($admin_user); + + $langcode = LANGUAGE_NONE; + $bundle_name = "article"; + + // Create file field. + $file_field = 'file_test'; + $edit = array( + '_add_new_field[label]' => $file_field, + '_add_new_field[field_name]' => $file_field, + '_add_new_field[type]' => 'file', + '_add_new_field[widget_type]' => 'file_generic', + ); + $this->drupalPost('admin/structure/types/manage/' . $bundle_name . '/fields', $edit, t('Save')); + // Set the RDF mapping for the new field. + $rdf_mapping = rdf_mapping_load('node', $bundle_name); + $rdf_mapping += array('field_' . $file_field => array('predicates' => array('rdfs:seeAlso'), 'type' => 'rel')); + $rdf_mapping_save = array('mapping' => $rdf_mapping, 'type' => 'node', 'bundle' => $bundle_name); + rdf_mapping_save($rdf_mapping_save); + + // Get the test file that simpletest provides. + $file = current($this->drupalGetTestFiles('text')); + + // Prepare image variables. + $image_field = "field_image"; + // Get the test image that simpletest provides. + $image = current($this->drupalGetTestFiles('image')); + + // Create an array for drupalPost with the field names as the keys and + // the uris for the test files as the values. + $edit = array("files[field_" . $file_field . "_" . $langcode . "_0]" => drupal_realpath($file->uri), + "files[" . $image_field . "_" . $langcode . "_0]" => drupal_realpath($image->uri)); + + // Create node and save, then edit node to upload files. + $node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1)); + $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save')); + + // Get filenames and nid for comparison with HTML output. + $file_filename = $file->filename; + $image_filename = $image->filename; + $nid = $node->nid; + // Navigate to front page, where node is displayed in teaser form. + $this->drupalGet('node'); + + // We only check to make sure that the resource attribute contains '.txt' + // instead of the full file name because the filename is altered on upload. + $file_rel = $this->xpath("//div[contains(@about, 'node/$nid')]//div[contains(@rel, 'rdfs:seeAlso') and contains(@resource, '.txt')]"); + $this->assertTrue(!empty($file_rel), t('Attribute \'rel\' set on file field. Attribute \'resource\' is also set.')); + $image_rel = $this->xpath("//div[contains(@about, 'node/$nid')]//div[contains(@rel, 'rdfs:seeAlso') and contains(@resource, '$image_filename')]//img[contains(@typeof, 'foaf:Image')]"); + $this->assertTrue(!empty($image_rel), t('Attribute \'rel\' set on image field. Attribute \'resource\' is also set.')); + } } class RdfCrudTestCase extends DrupalWebTestCase { |