Fixed bugs with replacement embeds.
This commit is contained in:
parent
7e65429375
commit
ac210d60e3
41
jsonld.php
41
jsonld.php
|
@ -231,7 +231,7 @@ function jsonld_frame($input, $frame, $options=null)
|
||||||
|
|
||||||
// save frame context
|
// save frame context
|
||||||
$ctx = null;
|
$ctx = null;
|
||||||
if(property_exists($frame, '@context'))
|
if(is_object($frame) and property_exists($frame, '@context'))
|
||||||
{
|
{
|
||||||
$ctx = _clone($frame->{'@context'});
|
$ctx = _clone($frame->{'@context'});
|
||||||
|
|
||||||
|
@ -2649,10 +2649,10 @@ function _subframe(
|
||||||
// 1. The frame OR default option specifies @embed as ON, AND
|
// 1. The frame OR default option specifies @embed as ON, AND
|
||||||
// 2. There is no existing embed OR it is an autoembed, AND
|
// 2. There is no existing embed OR it is an autoembed, AND
|
||||||
// autoembed mode is off.
|
// autoembed mode is off.
|
||||||
$embedOn =
|
$embedOn = (
|
||||||
((property_exists($frame, '@embed') and $frame->{'@embed'}) or
|
((property_exists($frame, '@embed') and $frame->{'@embed'}) or
|
||||||
(!property_exists($frame, '@embed') and $options->defaults->embedOn)) and
|
(!property_exists($frame, '@embed') and $options->defaults->embedOn)) and
|
||||||
($embed === null or ($embed->autoembed and !$autoembed));
|
($embed === null or ($embed->autoembed and !$autoembed)));
|
||||||
|
|
||||||
if(!$embedOn)
|
if(!$embedOn)
|
||||||
{
|
{
|
||||||
|
@ -2668,9 +2668,26 @@ function _subframe(
|
||||||
$embeds->{$iri} = $embed;
|
$embeds->{$iri} = $embed;
|
||||||
}
|
}
|
||||||
// replace the existing embed with a reference
|
// replace the existing embed with a reference
|
||||||
else if($embed->{$parent} !== null)
|
else if($embed->parent !== null)
|
||||||
{
|
{
|
||||||
$embed->{$parent}->{$embed->key} = $value->{'@subject'};
|
if(is_array($embed->parent->{$embed->key}))
|
||||||
|
{
|
||||||
|
$arrLen = count($embed->parent->{$embed->key});
|
||||||
|
for($i = 0; $i < $arrLen; ++$i)
|
||||||
|
{
|
||||||
|
$obj = $embed->parent->{$embed->key}[$i];
|
||||||
|
if(is_object($obj) and property_exists($obj, '@subject') and
|
||||||
|
$obj['@iri'] === $iri)
|
||||||
|
{
|
||||||
|
$embed->parent->{$embed->key}[$i] = $value->{'@subject'};
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$embed->parent->{$embed->key} = $value->{'@subject'};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// update embed entry
|
// update embed entry
|
||||||
|
@ -2695,7 +2712,8 @@ function _subframe(
|
||||||
}
|
}
|
||||||
|
|
||||||
// iterate over keys in value
|
// iterate over keys in value
|
||||||
foreach($value as $key => $v)
|
$vars = get_object_vars($value);
|
||||||
|
foreach($vars as $key => $v)
|
||||||
{
|
{
|
||||||
// skip keywords and type
|
// skip keywords and type
|
||||||
if(strpos($key, '@') !== 0 and $key !== JSONLD_RDF_TYPE)
|
if(strpos($key, '@') !== 0 and $key !== JSONLD_RDF_TYPE)
|
||||||
|
@ -2875,7 +2893,16 @@ function _frame(
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$rval[] = $value;
|
// determine if value is a reference
|
||||||
|
$isRef = ($value !== null and is_object($value) and
|
||||||
|
property_exists($value, '@iri') and
|
||||||
|
property_exists($embeds, $value->{'@iri'}));
|
||||||
|
|
||||||
|
// push any value that isn't a parentless reference
|
||||||
|
if(!($parent === null and $isRef))
|
||||||
|
{
|
||||||
|
$rval[] = $value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue