24 $xpath = new \DOMXPath(
$source);
25 $indexers = $xpath->evaluate(
'/config/indexer');
27 foreach ($indexers as $indexerNode) {
30 $data[
'indexer_id'] = $indexerId;
36 $data[
'description'] =
'';
37 $data[
'dependencies'] = [];
40 foreach ($indexerNode->childNodes as $childNode) {
41 if ($childNode->nodeType != XML_ELEMENT_NODE) {
64 $node = $input->attributes->getNamedItem($attributeName);
65 return $node ? $node->nodeValue : $default;
77 $data[
'fieldsets'] = isset(
$data[
'fieldsets']) ?
$data[
'fieldsets'] : [];
78 switch ($childNode->nodeName) {
80 $data[
'title'] = $childNode->nodeValue;
83 $data[
'description'] = $childNode->nodeValue;
95 $data = $this->convertDependencies($childNode,
$data);
111 $data[
'fieldsets'] = isset(
$data[
'fieldsets']) ?
$data[
'fieldsets'] : [];
119 foreach ($node->childNodes as $childNode) {
120 if ($childNode->nodeType != XML_ELEMENT_NODE) {
123 switch ($childNode->nodeName) {
173 private function convertDependencies(\DOMElement $node, array
$data): array
175 $data[
'dependencies'] =
$data[
'dependencies'] ?? [];
178 foreach ($node->childNodes as $childNode) {
179 switch ($childNode->nodeName) {
182 $data[
'dependencies'][] = $indexerId;
199 if (!isset(
$data[
'fieldsets'][$fieldset][
'fields'][$field])) {
200 $data[
'fieldsets'][$fieldset][
'fields'][$field] = [
214 protected function convertField(\DOMElement $node,
$data)
221 'type' => $node->getAttributeNS(
'http://www.w3.org/2001/XMLSchema-instance',
'type'),
226 foreach ($node->childNodes as $childNode) {
227 if ($childNode->nodeType != XML_ELEMENT_NODE) {
245 $value = $node->nodeValue;
260 usort(
$data[
'fieldsets'],
function ($current, $parent) use (
$data) {
261 if (!isset($current[
'references']) &&
$data[
'primary'] == $current[
'name']
262 || isset($parent[
'references'][$current[
'name']])
265 }
elseif (!isset($parent[
'references']) || isset($current[
'references'][$parent[
'name']])) {
282 private function sortByDependencies(array $indexers): array
285 foreach (array_keys($indexers) as $indexerId) {
287 'indexerId' => $indexerId,
288 'dependencies' => $this->expandDependencies($indexers, $indexerId),
295 $maxIndex = count($expanded) - 1;
296 for (
$i = 0;
$i < $maxIndex;
$i++) {
297 for ($j =
$i + 1; $j <= $maxIndex; $j++) {
298 if (in_array($expanded[$j][
'indexerId'], $expanded[
$i][
'dependencies'],
true)) {
299 $temp = $expanded[
$i];
300 $expanded[
$i] = $expanded[$j];
301 $expanded[$j] = $temp;
306 $orderedIndexerIds = array_map(
308 return $item[
'indexerId'];
314 foreach ($orderedIndexerIds as $indexerId) {
315 $result[$indexerId] = $indexers[$indexerId];
316 $result[$indexerId][
'dependencies'] = array_values(
317 array_intersect($orderedIndexerIds,
$result[$indexerId][
'dependencies'] ?? [])
333 private function expandDependencies(array $list,
string $indexerId, array $accumulated = []): array
335 $accumulated[] = $indexerId;
336 $result = $list[$indexerId][
'dependencies'] ?? [];
337 foreach (
$result as $relatedIndexerId) {
338 if (in_array($relatedIndexerId, $accumulated)) {
339 throw new ConfigurationMismatchException(
341 "Circular dependency references from '%indexerId' to '%relatedIndexerId'.",
343 'indexerId' => $indexerId,
344 'relatedIndexerId' => $relatedIndexerId,
349 if (!isset($list[$relatedIndexerId])) {
350 throw new ConfigurationMismatchException(
352 "Dependency declaration '%relatedIndexerId' in " 353 .
"'%indexerId' to the non-existing indexer.",
355 'indexerId' => $indexerId,
356 'relatedIndexerId' => $relatedIndexerId,
361 $relatedResult = $this->expandDependencies($list, $relatedIndexerId, $accumulated);
addVirtualField($fieldset, $field, $data)
convertChild(\DOMElement $childNode, $data)
elseif(isset( $params[ 'redirect_parent']))
getAttributeValue(\DOMNode $input, $attributeName, $default=null)
getTranslatedNodeValue(\DOMNode $node)
convertFieldset(\DOMElement $node, $data)