summaryrefslogtreecommitdiff
path: root/modules/rdf
diff options
context:
space:
mode:
authorDries Buytaert <dries@buytaert.net>2010-01-22 22:55:03 +0000
committerDries Buytaert <dries@buytaert.net>2010-01-22 22:55:03 +0000
commit5c057dfe6dcae6cdf29a22124264342122f99c58 (patch)
tree5162761f89cf47071bf212d0f93e4b2929a39c08 /modules/rdf
parent9e2b5880c5861a77fe733c87378e74283d19277d (diff)
downloadbrdo-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.module21
-rw-r--r--modules/rdf/rdf.test58
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 {