Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
project
drupal
Commits
b55880f8
Commit
b55880f8
authored
Sep 09, 2014
by
alexpott
Browse files
Issue
#2149257
by lokapujya, krlucas, kay_v | scor: Support RDFa output in number field formatter.
parent
7fc47f35
Changes
3
Hide whitespace changes
Inline
Side-by-side
core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/NumericFormatterBase.php
View file @
b55880f8
...
...
@@ -78,6 +78,11 @@ public function viewElements(FieldItemListInterface $items) {
$suffix
=
(
count
(
$suffixes
)
>
1
)
?
format_plural
(
$item
->
value
,
$suffixes
[
0
],
$suffixes
[
1
])
:
$suffixes
[
0
];
$output
=
$prefix
.
$output
.
$suffix
;
}
// Output the raw value in a content attribute if the text of the HTML
// element differs from the raw value (for example when a prefix is used).
if
(
!
empty
(
$item
->
_attributes
)
&&
$item
->
value
!=
$output
)
{
$item
->
_attributes
+=
array
(
'content'
=>
$item
->
value
);
}
$elements
[
$delta
]
=
array
(
'#markup'
=>
$output
);
}
...
...
core/modules/rdf/src/Tests/Field/FieldRdfaTestBase.php
View file @
b55880f8
...
...
@@ -96,6 +96,7 @@ protected function assertFormatterRdfa($formatter, $property, $expected_rdf_valu
$build
=
entity_view
(
$this
->
entity
,
'default'
);
$output
=
drupal_render
(
$build
);
$graph
=
new
\
EasyRdf_Graph
(
$this
->
uri
,
$output
,
'rdfa'
);
$this
->
setRawContent
(
$output
);
// If verbose debugging is turned on, display the HTML and parsed RDF
// in the results.
...
...
@@ -109,8 +110,11 @@ protected function assertFormatterRdfa($formatter, $property, $expected_rdf_valu
/**
* Creates the field for testing.
*
* @param array $field_settings
* (optional) An array of field settings.
*/
protected
function
createTestField
()
{
protected
function
createTestField
(
$field_settings
=
array
()
)
{
entity_create
(
'field_storage_config'
,
array
(
'name'
=>
$this
->
fieldName
,
'entity_type'
=>
'entity_test'
,
...
...
@@ -120,6 +124,7 @@ protected function createTestField() {
'entity_type'
=>
'entity_test'
,
'field_name'
=>
$this
->
fieldName
,
'bundle'
=>
'entity_test'
,
'settings'
=>
$field_settings
,
))
->
save
();
}
...
...
@@ -136,4 +141,52 @@ protected function getAbsoluteUri($entity) {
return
$entity
->
url
(
'canonical'
,
array
(
'absolute'
=>
TRUE
));
}
/**
* Parses a content and return the html element.
*
* @param string $content
* The html to parse.
*
* @return array
* An array containing simplexml objects.
*/
protected
function
parseContent
(
$content
)
{
$htmlDom
=
new
\
DOMDocument
();
@
$htmlDom
->
loadHTML
(
'<?xml encoding="UTF-8">'
.
$content
);
$elements
=
simplexml_import_dom
(
$htmlDom
);
return
$elements
;
}
/**
* Performs an xpath search on a certain content.
*
* The search is relative to the root element of the $content variable.
*
* @param string $content
* The html to parse.
* @param string $xpath
* The xpath string to use in the search.
* @param array $arguments
* Some arguments for the xpath.
*
* @return array|FALSE
* The return value of the xpath search. For details on the xpath string
* format and return values see the SimpleXML documentation,
* http://php.net/manual/function.simplexml-element-xpath.php.
*/
protected
function
xpathContent
(
$content
,
$xpath
,
array
$arguments
=
array
())
{
if
(
$elements
=
$this
->
parseContent
(
$content
))
{
$xpath
=
$this
->
buildXPathQuery
(
$xpath
,
$arguments
);
$result
=
$elements
->
xpath
(
$xpath
);
// Some combinations of PHP / libxml versions return an empty array
// instead of the documented FALSE. Forcefully convert any falsish values
// to an empty array to allow foreach(...) constructions.
return
$result
?
$result
:
array
();
}
else
{
return
FALSE
;
}
}
}
core/modules/rdf/src/Tests/Field/NumberFieldRdfaTest.php
0 → 100644
View file @
b55880f8
<?php
/**
* @file
* Contains \Drupal\rdf\Tests\Field\NumberFieldRdfaTest.
*/
namespace
Drupal\rdf\Tests\Field
;
/**
* Tests RDFa output by number field formatters.
*
* @group rdf
*/
class
NumberFieldRdfaTest
extends
FieldRdfaTestBase
{
/**
* Tests the integer formatter.
*/
public
function
testIntegerFormatter
()
{
$this
->
fieldType
=
'integer'
;
$testValue
=
3
;
$this
->
createTestField
();
$this
->
createTestEntity
(
$testValue
);
$this
->
assertFormatterRdfa
(
array
(
'type'
=>
$this
->
fieldType
),
'http://schema.org/baseSalary'
,
array
(
'value'
=>
$testValue
));
// Test that the content attribute is not created.
$result
=
$this
->
xpathContent
(
$this
->
getRawContent
(),
'//div[contains(@class, "field-item") and @content]'
);
$this
->
assertFalse
(
$result
);
}
/**
* Tests the integer formatter with settings.
*/
public
function
testIntegerFormatterWithSettings
()
{
$this
->
fieldType
=
'integer'
;
$formatter
=
array
(
'type'
=>
$this
->
fieldType
,
'settings'
=>
array
(
'thousand_separator'
=>
'.'
,
'prefix_suffix'
=>
TRUE
,
),
);
$testValue
=
3333333.33
;
$field_instance_settings
=
array
(
'prefix'
=>
'#'
,
'suffix'
=>
' llamas.'
,
);
$this
->
createTestField
(
$field_instance_settings
);
$this
->
createTestEntity
(
$testValue
);
$this
->
assertFormatterRdfa
(
$formatter
,
'http://schema.org/baseSalary'
,
array
(
'value'
=>
$testValue
));
// Test that the content attribute is created.
$result
=
$this
->
xpathContent
(
$this
->
getRawContent
(),
'//div[contains(@class, "field-item") and @content=:testValue]'
,
array
(
':testValue'
=>
$testValue
));
$this
->
assertTrue
(
$result
);
}
/**
* Tests the float formatter.
*/
public
function
testFloatFormatter
()
{
$this
->
fieldType
=
'float'
;
$testValue
=
3.33
;
$this
->
createTestField
();
$this
->
createTestEntity
(
$testValue
);
$this
->
assertFormatterRdfa
(
array
(
'type'
=>
$this
->
fieldType
),
'http://schema.org/baseSalary'
,
array
(
'value'
=>
$testValue
));
// Test that the content attribute is not created.
$result
=
$this
->
xpathContent
(
$this
->
getRawContent
(),
'//div[contains(@class, "field-item") and @content]'
);
$this
->
assertFalse
(
$result
);
}
/**
* Tests the float formatter with settings.
*/
public
function
testFloatFormatterWithSettings
()
{
$this
->
fieldType
=
'float'
;
$formatter
=
array
(
'type'
=>
$this
->
fieldType
,
'settings'
=>
array
(
'thousand_separator'
=>
'.'
,
'decimal_separator'
=>
','
,
'prefix_suffix'
=>
TRUE
,
),
);
$testValue
=
3333333.33
;
$field_instance_settings
=
array
(
'prefix'
=>
'$'
,
'suffix'
=>
' more.'
,
);
$this
->
createTestField
(
$field_instance_settings
);
$this
->
createTestEntity
(
$testValue
);
$this
->
assertFormatterRdfa
(
$formatter
,
'http://schema.org/baseSalary'
,
array
(
'value'
=>
$testValue
));
// Test that the content attribute is created.
$result
=
$this
->
xpathContent
(
$this
->
getRawContent
(),
'//div[contains(@class, "field-item") and @content=:testValue]'
,
array
(
':testValue'
=>
$testValue
));
$this
->
assertTrue
(
$result
);
}
/**
* Tests the float formatter with a scale. Scale is not exercised.
*/
public
function
testFloatFormatterWithScale
()
{
$this
->
fieldType
=
'float'
;
$formatter
=
array
(
'type'
=>
$this
->
fieldType
,
'settings'
=>
array
(
'scale'
=>
5
,
),
);
$testValue
=
3.33
;
$this
->
createTestField
();
$this
->
createTestEntity
(
$testValue
);
$this
->
assertFormatterRdfa
(
$formatter
,
'http://schema.org/baseSalary'
,
array
(
'value'
=>
$testValue
));
// Test that the content attribute is not created.
$result
=
$this
->
xpathContent
(
$this
->
getRawContent
(),
'//div[contains(@class, "field-item") and @content]'
);
$this
->
assertFalse
(
$result
);
}
/**
* Tests the float formatter with a scale. Scale is exercised.
*/
public
function
testFloatFormatterWithScaleExercised
()
{
$this
->
fieldType
=
'float'
;
$formatter
=
array
(
'type'
=>
$this
->
fieldType
,
'settings'
=>
array
(
'scale'
=>
5
,
),
);
$testValue
=
3.1234567
;
$this
->
createTestField
();
$this
->
createTestEntity
(
$testValue
);
$this
->
assertFormatterRdfa
(
$formatter
,
'http://schema.org/baseSalary'
,
array
(
'value'
=>
$testValue
));
// Test that the content attribute is created.
$result
=
$this
->
xpathContent
(
$this
->
getRawContent
(),
'//div[contains(@class, "field-item") and @content=:testValue]'
,
array
(
':testValue'
=>
$testValue
));
$this
->
assertTrue
(
$result
);
}
/**
* Tests the decimal formatter.
*/
public
function
testDecimalFormatter
()
{
$this
->
fieldType
=
'decimal'
;
$testValue
=
3.33
;
$this
->
createTestField
();
$this
->
createTestEntity
(
$testValue
);
$this
->
assertFormatterRdfa
(
array
(
'type'
=>
$this
->
fieldType
),
'http://schema.org/baseSalary'
,
array
(
'value'
=>
$testValue
));
// Test that the content attribute is not created.
$result
=
$this
->
xpathContent
(
$this
->
getRawContent
(),
'//div[contains(@class, "field-item") and @content]'
);
$this
->
assertFalse
(
$result
);
}
/**
* Tests the decimal formatter with settings.
*/
public
function
testDecimalFormatterWithSettings
()
{
$this
->
fieldType
=
'decimal'
;
$formatter
=
array
(
'type'
=>
$this
->
fieldType
,
'settings'
=>
array
(
'thousand_separator'
=>
't'
,
'decimal_separator'
=>
'#'
,
'prefix_suffix'
=>
TRUE
,
),
);
$testValue
=
3333333.33
;
$field_instance_settings
=
array
(
'prefix'
=>
'$'
,
'suffix'
=>
' more.'
,
);
$this
->
createTestField
(
$field_instance_settings
);
$this
->
createTestEntity
(
$testValue
);
$this
->
assertFormatterRdfa
(
$formatter
,
'http://schema.org/baseSalary'
,
array
(
'value'
=>
$testValue
));
// Test that the content attribute is created.
$result
=
$this
->
xpathContent
(
$this
->
getRawContent
(),
'//div[contains(@class, "field-item") and @content=:testValue]'
,
array
(
':testValue'
=>
$testValue
));
$this
->
assertTrue
(
$result
);
}
/**
* Creates the RDF mapping for the field.
*/
protected
function
createTestEntity
(
$testValue
)
{
// Add the mapping.
$mapping
=
rdf_get_mapping
(
'entity_test'
,
'entity_test'
);
$mapping
->
setFieldMapping
(
$this
->
fieldName
,
array
(
'properties'
=>
array
(
'schema:baseSalary'
),
))
->
save
();
// Set up test entity.
$this
->
entity
=
entity_create
(
'entity_test'
,
array
());
$this
->
entity
->
{
$this
->
fieldName
}
->
value
=
$testValue
;
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment