diff --git a/composer.json b/composer.json
index ea205ca..e91ed29 100644
--- a/composer.json
+++ b/composer.json
@@ -10,10 +10,10 @@
],
"minimum-stability": "dev",
"require": {
- "php": ">=5.3.3"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "phpunit/phpunit": "~11.3"
},
"autoload": {
"psr-0": { "ConfigToken\\": "lib/" }
diff --git a/composer.phar b/composer.phar
new file mode 100755
index 0000000..15c4a20
Binary files /dev/null and b/composer.phar differ
diff --git a/lib/ConfigToken/LoggerInterface.php b/lib/ConfigToken/LoggerInterface.php
new file mode 100644
index 0000000..35ada92
--- /dev/null
+++ b/lib/ConfigToken/LoggerInterface.php
@@ -0,0 +1,14 @@
+Iterator or Traversable
*/
- public function getIterator()
+ public function getIterator(): \Traversable
{
return new \ArrayIterator($this->tokens);
}
@@ -342,6 +342,7 @@ public function findWithUnresolvedFilters()
* @param TokenResolverInterface $tokenResolver
* @param boolean|null $ignoreUnknownTokens Null to use token resolver option.
* @param boolean|null $ignoreUnknownFilters Null to use collection option.
+ * @param LoggerInterface|null $logger
* @throws UnknownFilterException
*
* If using RegisteredTokenResolver:
@@ -355,7 +356,7 @@ public function findWithUnresolvedFilters()
* @return $this
*/
public function resolve(TokenResolverInterface $tokenResolver,
- $ignoreUnknownTokens = null, $ignoreUnknownFilters = null)
+ $ignoreUnknownTokens = null, $ignoreUnknownFilters = null, LoggerInterface $logger=null)
{
if (is_null($ignoreUnknownTokens)) {
$ignoreUnknownTokens = $tokenResolver->getIgnoreUnknownTokens();
@@ -377,4 +378,4 @@ public function resolve(TokenResolverInterface $tokenResolver,
return $this;
}
-}
\ No newline at end of file
+}
diff --git a/lib/ConfigToken/TokenInjector.php b/lib/ConfigToken/TokenInjector.php
index 5aab138..e9f0a85 100644
--- a/lib/ConfigToken/TokenInjector.php
+++ b/lib/ConfigToken/TokenInjector.php
@@ -15,10 +15,11 @@ class TokenInjector
* @param string $string The string where to inject the resolved token values.
* @param TokenCollection $tokens The tokens.
* @param boolean $checkHash If true, the hash of the string must match the source hash of the tokens.
+ * @param LoggerInterface|null $logger
* @throws UnknownTokenSourceException
* @return string
*/
- public static function injectString($string, TokenCollection $tokens, $checkHash = False) {
+ public static function injectString($string, TokenCollection $tokens, $checkHash = False, LoggerInterface $logger=null) {
if ($checkHash) {
$hash = md5($string);
if ($tokens->hasSourceHash() && ($tokens->getSourceHash() !== $hash)) {
@@ -52,6 +53,15 @@ public static function injectString($string, TokenCollection $tokens, $checkHash
$blocks[] = $tokenValue;
$lastOffset = $offset + strlen($tokenString);
$offsetDelta += strlen($tokenValue) - strlen($tokenString);
+ if (isset($logger) && (!isset($injected[$tokenString]))) {
+ $logger->addRecord(
+ LoggerInterface::DEBUG,
+ sprintf(
+ 'Replaced token "%s" with value "%s".',
+ $token
+ )
+ );
+ }
$injected[$tokenString] = $token;
}
}
diff --git a/lib/ConfigToken/TreeCompiler.php b/lib/ConfigToken/TreeCompiler.php
index d68ae2c..6ce1c89 100644
--- a/lib/ConfigToken/TreeCompiler.php
+++ b/lib/ConfigToken/TreeCompiler.php
@@ -71,6 +71,8 @@ class TreeCompiler
protected $xrefTokenResolverRequiredOptionKeys = array();
/** @var string[] */
protected $xrefTokenResolverOptionSetterMapping = array();
+ /** @var array $headers */
+ protected $headers = array();
/** @var string */
protected $removeKey = 'remove';
@@ -85,8 +87,9 @@ class TreeCompiler
const INCLUDE_TYPE_GROUP = 'group';
const INCLUDE_TYPE_XREF = 'xref';
- public function __construct(XrefCollection $xrefs = null)
+ public function __construct(XrefCollection $xrefs = null, $headers=array())
{
+ $this->headers = $headers;
if (!isset($xrefs)) {
$xrefs = new XrefCollection();
}
@@ -341,11 +344,14 @@ protected function validateXrefTokenResolverOptions($xrefKey, $tokenResolverDefi
* @param string|array $xrefInfo
* @param XrefTokenResolverCollection $xrefTokenResolvers
* @param Xref[] $xrefPath
+ * @param Xref $currentXref
+ * @param LoggerInterface|null $logger
* @return Xref|mixed
* @throws TreeCompilerFormatException
* @throws \Exception
*/
- protected function parseXrefInfo($xrefKey, $xrefInfo, XrefTokenResolverCollection $xrefTokenResolvers = null, $xrefPath)
+ protected function parseXrefInfo($xrefKey, $xrefInfo, XrefTokenResolverCollection $xrefTokenResolvers = null,
+ $xrefPath, Xref $currentXref, LoggerInterface $logger=null)
{
$xrefData = null;
if (gettype($xrefInfo) == 'string') {
@@ -390,11 +396,33 @@ protected function parseXrefInfo($xrefKey, $xrefInfo, XrefTokenResolverCollectio
if (isset($xrefData)) {
if (isset($xrefTokenResolvers)) {
- $xrefTokenResolvers->applyToArray($xrefData);
+ $xrefTokenResolvers->applyToArray($xrefData, $logger);
}
} else {
if (isset($xrefTokenResolvers)) {
- $xrefLocation = $xrefTokenResolvers->applyToString($xrefLocation);
+ if (isset($logger)) {
+ $logger->addRecord(
+ LoggerInterface::DEBUG,
+ sprintf(
+ 'Resolving tokens in xref location "%s" included by "%s"',
+ $xrefLocation,
+ $currentXref->getLocation()
+ )
+ );
+ }
+ $newXrefLocation = $xrefTokenResolvers->applyToString($xrefLocation, $logger);
+ if (isset($logger)) {
+ $logger->addRecord(
+ LoggerInterface::DEBUG,
+ sprintf(
+ 'Xref location "%s" changed to "%s"',
+ $xrefLocation,
+ $newXrefLocation,
+ $currentXref->getLocation()
+ )
+ );
+ }
+ $xrefLocation = $newXrefLocation;
}
$xrefLocation = Xref::computeAbsoluteLocation($xrefType, $xrefLocation, $xrefPath);
}
@@ -418,10 +446,14 @@ protected function parseXrefInfo($xrefKey, $xrefInfo, XrefTokenResolverCollectio
* @param array $tokenResolversInfo
* @param XrefTokenResolverCollection $tokenResolvers
* @param Xref[] $xrefPath
+ * @param Xref $currentXref
+ * @param LoggerInterface|null $logger
* @return XrefTokenResolverCollection
* @throws \Exception
*/
- protected function parseXrefTokenResolverDefinitions($xrefKey, $tokenResolversInfo, XrefTokenResolverCollection $tokenResolvers = null, $xrefPath)
+ protected function parseXrefTokenResolverDefinitions($xrefKey, $tokenResolversInfo,
+ XrefTokenResolverCollection $tokenResolvers=null, $xrefPath,
+ Xref $currentXref, LoggerInterface $logger=null)
{
$resolverValues = array();
$tokenResolverDefinitionIndex = 0;
@@ -500,10 +532,12 @@ protected function parseXrefTokenResolverDefinitions($xrefKey, $tokenResolversIn
sprintf('%s.%s[%d]', $xrefKey, $this->includeXrefResolversKey, $tokenResolverDefinitionIndex),
$xrefInfo,
$tokenResolvers,
- $xrefPath
+ $xrefPath,
+ $currentXref,
+ $logger
);
// pass down current token resolvers
- $values = $this->recursiveCompileXref($xref, $tokenResolvers, null, null, $xrefPath);
+ $values = $this->recursiveCompileXref($xref, $tokenResolvers, null, null, $xrefPath, $logger);
}
if (!is_array($values)) {
throw new TokenResolverDefinitionException(
@@ -521,6 +555,7 @@ protected function parseXrefTokenResolverDefinitions($xrefKey, $tokenResolversIn
}
$result = new XrefTokenResolverCollection();
+ $tokenResolverPosition = 0;
// parse
foreach ($tokenResolversInfo as $tokenResolverKey => $tokenResolverInfo) {
if (isset($tokenResolverInfo[$this->xrefTokenResolverOptionsKey])) {
@@ -530,6 +565,10 @@ protected function parseXrefTokenResolverDefinitions($xrefKey, $tokenResolversIn
}
$tokenResolver = TokenResolverFactory::get($tokenResolverInfo[$this->xrefTokenResolverTypeKey]);
$xrefTokenResolver = new XrefTokenResolver($tokenResolver);
+ $xrefTokenResolver
+ ->setSourceXrefLocation($currentXref->getLocation())
+ ->setSourceXrefPosition($tokenResolverPosition++)
+ ;
$values = $resolverValues[$tokenResolverKey];
$xrefTokenResolver->setRegisteredTokenValues($values);
if (isset($options)) {
@@ -580,6 +619,7 @@ protected function parseXrefTokenResolverDefinitions($xrefKey, $tokenResolversIn
* @param string|null $includeType
* @param string|array|null $includeTypeValue
* @param array $xrefPath
+ * @param LoggerInterface|null $logger
* @return array
*
* @throws CircularReferenceException
@@ -590,14 +630,19 @@ protected function parseXrefTokenResolverDefinitions($xrefKey, $tokenResolversIn
* @throws \Exception
*/
protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection $tokenResolvers = null,
- $includeType = null, $includeTypeValue = null, &$xrefPath)
+ $includeType = null, $includeTypeValue = null, &$xrefPath = null,
+ LoggerInterface $logger=null)
{
static $XREF_KEY = 0;
static $XREF_RESOLVERS_KEY = 1;
-
+
if (!isset($includeType)) {
$includeType = static::INCLUDE_TYPE_GROUP;
}
+
+ if (isset($logger)) {
+ $logger->addRecord(LoggerInterface::DEBUG, sprintf('Compiling %s', $xref->getLocation()));
+ }
switch ($includeType) {
case static::INCLUDE_TYPE_GROUP:
@@ -627,7 +672,7 @@ protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection
}
$mustIncludeSpecificGroup = $includeTypeValue != $this->includeMainKey;
- $xref->resolve();
+ $xref->resolve(false, $logger, $this->headers);
$xrefData = $xref->getData();
if (empty($xrefData)) {
@@ -663,7 +708,7 @@ protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection
$result = $xrefData;
}
if (isset($tokenResolvers)) {
- $tokenResolvers->applyToArray($result);
+ $tokenResolvers->applyToArray($result, $logger);
}
return $result;
}
@@ -704,7 +749,7 @@ protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection
$result = $xrefData;
}
if (isset($tokenResolvers)) {
- $tokenResolvers->applyToArray($result);
+ $tokenResolvers->applyToArray($result, $logger);
}
return $result;
}
@@ -753,7 +798,9 @@ protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection
$xrefKey,
$xrefInfo,
$tokenResolvers,
- $xrefPath
+ $xrefPath,
+ $xref,
+ $logger
);
if (is_array($xrefInfo) && isset($xrefInfo[$this->includeXrefResolversKey])) {
@@ -761,7 +808,8 @@ protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection
$xrefKey,
$xrefInfo[$this->includeXrefResolversKey],
$tokenResolvers,
- $xrefPath
+ $xrefPath,
+ $xref
);
} else {
$xrefTokenResolvers = null;
@@ -803,7 +851,8 @@ protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection
$downTokenResolvers,
static::INCLUDE_TYPE_GROUP,
$this->includeMainKey,
- $xrefPath
+ $xrefPath,
+ $logger
);
$this->recursiveAddData($includeData, $result);
}
@@ -811,14 +860,34 @@ protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection
if (isset($xrefData[$this->removeKey])) {
if (isset($tokenResolvers)) {
- $tokenResolvers->applyToArray($xrefData[$this->removeKey]);
+ if (isset($logger)) {
+ $logger->addRecord(
+ LoggerInterface::DEBUG,
+ sprintf(
+ 'Applying token resolvers to "%s" key in "%s"',
+ $this->removeKey,
+ $xref->getLocation()
+ )
+ );
+ }
+ $tokenResolvers->applyToArray($xrefData[$this->removeKey], $logger);
}
$this->recursiveRemoveData($xrefData[$this->removeKey], $result);
}
if (isset($xrefData[$this->addKey])) {
if (isset($tokenResolvers)) {
- $tokenResolvers->applyToArray($xrefData[$this->addKey]);
+ if (isset($logger)) {
+ $logger->addRecord(
+ LoggerInterface::DEBUG,
+ sprintf(
+ 'Applying token resolvers to "%s" key in "%s"',
+ $this->addKey,
+ $xref->getLocation()
+ )
+ );
+ }
+ $tokenResolvers->applyToArray($xrefData[$this->addKey], $logger);
}
$this->recursiveAddData($xrefData[$this->addKey], $result);
}
@@ -826,23 +895,23 @@ protected function recursiveCompileXref(Xref $xref, XrefTokenResolverCollection
return $result;
}
- public function compileXref(Xref $xref, $includeType = null, $includeTypeValue = null)
+ public function compileXref(Xref $xref, $includeType = null, $includeTypeValue = null, LoggerInterface $logger=null)
{
$xrefPath = array();
- $compiledData = $this->recursiveCompileXref($xref, null, $includeType, $includeTypeValue, $xrefPath);
+ $compiledData = $this->recursiveCompileXref($xref, null, $includeType, $includeTypeValue, $xrefPath, $logger);
return $compiledData;
}
- public function compileLocalFile($inputFileName, $includeType = null, $includeKeyValue = null)
+ public function compileLocalFile($inputFileName, $includeType = null, $includeKeyValue = null, LoggerInterface $logger=null)
{
$xref = new Xref(LocalFileXrefResolver::getType(), $inputFileName);
- return $this->compileXref($xref, $includeType, $includeKeyValue);
+ return $this->compileXref($xref, $includeType, $includeKeyValue, $logger);
}
- public function compileUrl($inputUrl, $includeType = null, $includeKeyValue = null)
+ public function compileUrl($inputUrl, $includeType = null, $includeKeyValue = null, LoggerInterface $logger=null)
{
$xref = new Xref(UrlXrefResolver::getType(), $inputUrl);
- return $this->compileXref($xref, $includeType, $includeKeyValue);
+ return $this->compileXref($xref, $includeType, $includeKeyValue, $logger);
}
public function save(array $tree, $fileName)
diff --git a/lib/ConfigToken/TreeCompiler/Xref.php b/lib/ConfigToken/TreeCompiler/Xref.php
index bcdd624..812a73f 100644
--- a/lib/ConfigToken/TreeCompiler/Xref.php
+++ b/lib/ConfigToken/TreeCompiler/Xref.php
@@ -2,6 +2,7 @@
namespace ConfigToken\TreeCompiler;
+use ConfigToken\LoggerInterface;
use ConfigToken\TreeCompiler\XrefResolver\XrefResolverFactory;
@@ -92,7 +93,7 @@ public function getResolver()
return XrefResolverFactory::getByType($this->type);
}
- public function resolve($force = false)
+ public function resolve($force = false, LoggerInterface $logger=null, $headers=array())
{
if ($this->isResolved() && (!$force)) {
return;
@@ -101,7 +102,7 @@ public function resolve($force = false)
throw new \Exception('Unable to resolve Xref without type.');
}
$resolver = $this->getResolver();
- $resolver::resolve($this, $force);
+ $resolver::resolve($this, $force, $logger, $headers);
}
public function hasType()
diff --git a/lib/ConfigToken/TreeCompiler/XrefCollection.php b/lib/ConfigToken/TreeCompiler/XrefCollection.php
index 892f5d6..d55c91f 100644
--- a/lib/ConfigToken/TreeCompiler/XrefCollection.php
+++ b/lib/ConfigToken/TreeCompiler/XrefCollection.php
@@ -16,18 +16,18 @@ public function __construct()
}
/**
- * (PHP 5 >= 5.0.0)
+ * (PHP 8 >= 8.3.0)
* Retrieve an external iterator
* @link http://php.net/manual/en/iteratoraggregate.getiterator.php
* @return \Traversable An instance of an object implementing Iterator or Traversable
*/
- public function getIterator()
+ public function getIterator(): \Traversable
{
return new \ArrayIterator($this->collection);
}
/**
- * (PHP 5 >= 5.0.0)
+ * (PHP 8 >= 8.3.0)
* Whether a offset exists
* @link http://php.net/manual/en/arrayaccess.offsetexists.php
* @param mixed $offset
@@ -38,13 +38,13 @@ public function getIterator() *
* The return value will be casted to boolean if non-boolean was returned.
*/
- public function offsetExists($offset)
+ public function offsetExists($offset): bool
{
return $this->hasById($offset);
}
/**
- * (PHP 5 >= 5.0.0)
+ * (PHP 8 >= 8.3.0)
* Offset to retrieve
* @link http://php.net/manual/en/arrayaccess.offsetget.php
* @param mixed $offset
@@ -52,13 +52,13 @@ public function offsetExists($offset) *
* @return mixed Can return all value types. */ - public function offsetGet($offset) + public function offsetGet($offset): mixed { return $this->getById($offset); } /** - * (PHP 5 >= 5.0.0)
@@ -70,7 +70,7 @@ public function offsetGet($offset)
* @return void
* @throws \Exception
*/
- public function offsetSet($offset, $value)
+ public function offsetSet($offset, $value): void
{
if (!$value instanceof Xref) {
throw new \Exception('Value is not an Xref.');
@@ -83,7 +83,7 @@ public function offsetSet($offset, $value)
}
/**
- * (PHP 5 >= 5.0.0)
+ * (PHP 8 >= 8.3.0)
* Offset to unset
* @link http://php.net/manual/en/arrayaccess.offsetunset.php
* @param mixed $offset
@@ -91,7 +91,7 @@ public function offsetSet($offset, $value) *
* @return void */ - public function offsetUnset($offset) + public function offsetUnset($offset): void { if (!isset($offset)) { return; @@ -233,4 +233,4 @@ public function resolve($force = false) $xref->resolve($force); } } -} \ No newline at end of file +} diff --git a/lib/ConfigToken/TreeCompiler/XrefResolver/Types/AbstractXrefResolver.php b/lib/ConfigToken/TreeCompiler/XrefResolver/Types/AbstractXrefResolver.php index fa694fb..da31d4d 100644 --- a/lib/ConfigToken/TreeCompiler/XrefResolver/Types/AbstractXrefResolver.php +++ b/lib/ConfigToken/TreeCompiler/XrefResolver/Types/AbstractXrefResolver.php @@ -2,6 +2,7 @@ namespace ConfigToken\TreeCompiler\XrefResolver\Types; +use ConfigToken\LoggerInterface; use ConfigToken\TreeCompiler\XrefResolver\Exception\InvalidXrefTypeException; use ConfigToken\TreeCompiler\Xref; use ConfigToken\TreeCompiler\XrefResolver\XrefResolverInterface; @@ -37,9 +38,11 @@ public static function getPlatformSpecificLocation($xrefLocation) * * @param Xref $xref * @param boolean $force If true and Xref already fetched, force the resolver to fetch the data again. + * @param LoggerInterface|null $logger + * @param array $headers * @throws \Exception */ - public static function resolve(Xref $xref, $force = false) + public static function resolve(Xref $xref, $force = false, LoggerInterface $logger=null, $headers=array()) { throw new \Exception( sprintf( diff --git a/lib/ConfigToken/TreeCompiler/XrefResolver/Types/InlineXrefResolver.php b/lib/ConfigToken/TreeCompiler/XrefResolver/Types/InlineXrefResolver.php index e7df3ed..9203dbb 100644 --- a/lib/ConfigToken/TreeCompiler/XrefResolver/Types/InlineXrefResolver.php +++ b/lib/ConfigToken/TreeCompiler/XrefResolver/Types/InlineXrefResolver.php @@ -3,6 +3,7 @@ namespace ConfigToken\TreeCompiler\XrefResolver\Types; +use ConfigToken\LoggerInterface; use ConfigToken\TreeCompiler\Xref; class InlineXrefResolver extends AbstractXrefResolver @@ -22,9 +23,11 @@ public static function getType() * * @param Xref $xref * @param boolean $force If true and Xref already fetched, force the resolver to fetch the data again. + * @param LoggerInterface|null $logger + * @param array $headers * @throws \Exception */ - public static function resolve(Xref $xref, $force = false) + public static function resolve(Xref $xref, $force = false, LoggerInterface $logger=null, $headers=array()) { $xref->setResolved(true); } diff --git a/lib/ConfigToken/TreeCompiler/XrefResolver/Types/LocalFileXrefResolver.php b/lib/ConfigToken/TreeCompiler/XrefResolver/Types/LocalFileXrefResolver.php index 5c969d6..0145f5c 100644 --- a/lib/ConfigToken/TreeCompiler/XrefResolver/Types/LocalFileXrefResolver.php +++ b/lib/ConfigToken/TreeCompiler/XrefResolver/Types/LocalFileXrefResolver.php @@ -2,6 +2,7 @@ namespace ConfigToken\TreeCompiler\XrefResolver\Types; +use ConfigToken\LoggerInterface; use ConfigToken\TreeCompiler\XrefResolver\Exception\XrefResolverFetchException; use ConfigToken\TreeCompiler\Xref; use ConfigToken\TreeSerializer\Exception\TreeSerializerSyntaxException; @@ -96,9 +97,11 @@ public static function getPlatformSpecificLocation($xrefLocation) * * @param Xref $xref * @param boolean $force If true and Xref already fetched, force the resolver to fetch the data again. + * @param array $headers + * @param LoggerInterface|null $logger * @throws XrefResolverFetchException */ - public static function resolve(Xref $xref, $force = false) + public static function resolve(Xref $xref, $force = false, LoggerInterface $logger=null, $headers=array()) { if ($xref->isResolved() && (!$force)) { return; diff --git a/lib/ConfigToken/TreeCompiler/XrefResolver/Types/UrlXrefResolver.php b/lib/ConfigToken/TreeCompiler/XrefResolver/Types/UrlXrefResolver.php index a20d18f..1a31c2b 100644 --- a/lib/ConfigToken/TreeCompiler/XrefResolver/Types/UrlXrefResolver.php +++ b/lib/ConfigToken/TreeCompiler/XrefResolver/Types/UrlXrefResolver.php @@ -4,6 +4,7 @@ use ConfigToken\Event; use ConfigToken\EventManager; +use ConfigToken\LoggerInterface; use ConfigToken\TreeCompiler\XrefResolver\Exception\UnknownXrefTypeException; use ConfigToken\TreeCompiler\XrefResolver\Exception\XrefResolverFetchException; use ConfigToken\TreeCompiler\Xref; @@ -32,13 +33,15 @@ public static function getType() * * @param Xref $xref * @param boolean $force If true and Xref already fetched, force the resolver to fetch the data again. + * @param LoggerInterface|null $logger + * @param array $headers * @throws UnknownXrefTypeException * @throws XrefResolverFetchException * @throws \ConfigToken\TreeCompiler\XrefResolver\Exception\InvalidXrefTypeException * @throws \ConfigToken\TreeSerializer\Exception\UnknownContentTypeException * @throws \ConfigToken\TreeSerializer\Exception\UnknownFileExtensionException */ - public static function resolve(Xref $xref, $force = false) + public static function resolve(Xref $xref, $force = false, LoggerInterface $logger=null, $headers=array()) { if ($xref->isResolved() && (!$force)) { return; @@ -80,6 +83,7 @@ public static function resolve(Xref $xref, $force = false) curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $data = curl_exec($ch); $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); diff --git a/lib/ConfigToken/TreeCompiler/XrefResolver/XrefResolverInterface.php b/lib/ConfigToken/TreeCompiler/XrefResolver/XrefResolverInterface.php index 2ea1fb7..2c5d00d 100644 --- a/lib/ConfigToken/TreeCompiler/XrefResolver/XrefResolverInterface.php +++ b/lib/ConfigToken/TreeCompiler/XrefResolver/XrefResolverInterface.php @@ -2,6 +2,7 @@ namespace ConfigToken\TreeCompiler\XrefResolver; +use ConfigToken\LoggerInterface; use ConfigToken\TreeCompiler\Xref; @@ -36,6 +37,7 @@ public static function getPlatformSpecificLocation($xrefLocation); * * @param Xref $xref * @param boolean $force If true and Xref already fetched, force the resolver to fetch the data again. + * @param LoggerInterface|null $logger */ - public static function resolve(Xref $xref, $force = false); + public static function resolve(Xref $xref, $force = false, LoggerInterface $logger=null, $headers=array()); } \ No newline at end of file diff --git a/lib/ConfigToken/TreeCompiler/XrefTokenResolver.php b/lib/ConfigToken/TreeCompiler/XrefTokenResolver.php index d3230c8..8b200a6 100644 --- a/lib/ConfigToken/TreeCompiler/XrefTokenResolver.php +++ b/lib/ConfigToken/TreeCompiler/XrefTokenResolver.php @@ -2,6 +2,7 @@ namespace ConfigToken\TreeCompiler; +use ConfigToken\LoggerInterface; use ConfigToken\TokenCollection; use ConfigToken\TokenParser; use ConfigToken\TokenResolver\TokenResolverInterface; @@ -27,12 +28,80 @@ class XrefTokenResolver protected $tokenFilterDelimiter; /** @var TokenParser */ protected $tokenParser; + /** @var string */ + protected $sourceXrefLocation; + /** @var integer */ + protected $sourceXrefPosition; public function __construct(TokenResolverInterface $tokenResolver = null) { $this->setTokenResolver($tokenResolver); } + /** + * Check if the source Xref location was set. + * + * @return boolean + */ + public function hasSourceXrefLocation() + { + return isset($this->sourceXrefLocation); + } + + /** + * Get the source Xref location. + * + * @return string|null + */ + public function getSourceXrefLocation() + { + return $this->sourceXrefLocation; + } + + /** + * Set the source Xref location. + * + * @param string $value The new value. + * @return $this + */ + public function setSourceXrefLocation($value) + { + $this->sourceXrefLocation = $value; + return $this; + } + + /** + * Check if the source Xref position of this token resolver was set. + * + * @return boolean + */ + public function hasSourceXrefPosition() + { + return isset($this->sourceXrefPosition); + } + + /** + * Get the source Xref position of this token resolver. + * + * @return integer|null + */ + public function getSourceXrefPosition() + { + return $this->sourceXrefPosition; + } + + /** + * Set the source Xref position of this token resolver. + * + * @param integer $value The new value. + * @return $this + */ + public function setSourceXrefPosition($value) + { + $this->sourceXrefPosition = $value; + return $this; + } + /** * Check if token resolver was set. * @@ -343,9 +412,9 @@ public function getTokenParser() return $this->tokenParser; } - public function resolve(TokenCollection $tokens) + public function resolve(TokenCollection $tokens, LoggerInterface $logger=null) { - $tokens->resolve($this->tokenResolver, null, $this->ignoreUnknownFilters); + $tokens->resolve($this->tokenResolver, null, $this->ignoreUnknownFilters, $logger); return $this; } } \ No newline at end of file diff --git a/lib/ConfigToken/TreeCompiler/XrefTokenResolverCollection.php b/lib/ConfigToken/TreeCompiler/XrefTokenResolverCollection.php index 2b346ef..2037ca2 100644 --- a/lib/ConfigToken/TreeCompiler/XrefTokenResolverCollection.php +++ b/lib/ConfigToken/TreeCompiler/XrefTokenResolverCollection.php @@ -3,6 +3,7 @@ namespace ConfigToken\TreeCompiler; +use ConfigToken\LoggerInterface; use ConfigToken\TokenCollection; use ConfigToken\TokenInjector; use ConfigToken\TokenParser; @@ -43,8 +44,21 @@ public function prependCollection(XrefTokenResolverCollection $xrefTokenResolver $this->collection = array_merge($xrefTokenResolverCollection->collection, $this->collection); } - protected function resolveTokens(TokenCollection $tokens, XrefTokenResolver $xrefTokenResolver) + protected function resolveTokens(TokenCollection $tokens, XrefTokenResolver $xrefTokenResolver, + LoggerInterface $logger=null) { + if (isset($logger)) { + $message = sprintf( + 'Applying token resolver #%d from \'%s\'', + $xrefTokenResolver->getSourceXrefPosition(), + $xrefTokenResolver->getSourceXrefLocation(), + $xrefTokenResolver->getIgnoreUnknownFilters() + ); + if (!$xrefTokenResolver->getTokenResolver()->getIgnoreUnknownTokens()) { + $message .= '. WARNING! Unknown tokens will not be ignored!'; + } + $logger->addRecord(LoggerInterface::DEBUG, $message); + } if (!$xrefTokenResolver->hasTokenResolver()) { throw new \Exception('No token resolver found for Xref token resolver.'); } @@ -75,7 +89,7 @@ protected function resolveTokens(TokenCollection $tokens, XrefTokenResolver $xre $tokenResolver->setScope($values); } } - $xrefTokenResolver->resolve($tokens); + $xrefTokenResolver->resolve($tokens, $logger); } protected function getTokensFromArray(&$array, TokenParser $parser, &$result, $level=0) @@ -116,18 +130,18 @@ protected function getTokensFromArray(&$array, TokenParser $parser, &$result, $l } } - public function applyToString($string) + public function applyToString($string, LoggerInterface $logger=null) { foreach ($this->collection as $xrefTokenResolver) { $tokenParser = $xrefTokenResolver->getTokenParser(); $tokens = $tokenParser->parseString($string); - $this->resolveTokens($tokens, $xrefTokenResolver); + $this->resolveTokens($tokens, $xrefTokenResolver, $logger); $string = TokenInjector::injectString($string, $tokens); } return $string; } - public function applyToArray(&$array) + public function applyToArray(&$array, LoggerInterface $logger=null) { foreach ($this->collection as $xrefTokenResolver) { $tokenParser = $xrefTokenResolver->getTokenParser(); @@ -135,10 +149,10 @@ public function applyToArray(&$array) $this->getTokensFromArray($array, $tokenParser, $lookup); foreach ($lookup as $record) { if (isset($record[self::_VALUE_TOKENS])) { - $this->resolveTokens($record[self::_VALUE_TOKENS], $xrefTokenResolver); + $this->resolveTokens($record[self::_VALUE_TOKENS], $xrefTokenResolver, $logger); } if (isset($record[self::_KEY_TOKENS])) { - $this->resolveTokens($record[self::_KEY_TOKENS], $xrefTokenResolver); + $this->resolveTokens($record[self::_KEY_TOKENS], $xrefTokenResolver, $logger); } } foreach ($lookup as &$record) {