function jsonToXML(&$doc, &$el, $data, $dependancyData) { // print PHP_EOL.PHP_EOL."------------".PHP_EOL; // print_r($data); foreach ($data as $key => $val) { $key = dependencyParser($key, $dependancyData); // print PHP_EOL.$key; if (is_scalar($val)) { if ($val === true) { $val = 'true'; } elseif ($val === false) { $val = 'false'; } if ($key != 'pattern') { $val = dependencyParser($val, $dependancyData); } if ($val !== null) { $el->setAttribute($key, $val); } } elseif (is_array($val)) { foreach ($val as $subkey => $subval) { $subel = $doc->createElement($key); if (!is_numeric($subkey)) { $subel->setAttribute('type', $subkey); } jsonToXML($doc, $subel, $subval, $dependancyData); $el->appendChild($subel); } } else { print "2" . $key; $subel = $doc->createElement($key); jsonToXML($doc, $subel, $val, $dependancyData); $el->appendChild($subel); } } }
function createFieldTypeConfig(&$doc, &$el, $fieldType, $fieldTypeInfo, $dependancyArray) { global $foundTypes; global $unusedTypes; foreach ($fieldTypeInfo as $key => $val) { if (substr($key, 0, 2) == '__') { unset($fieldTypeInfo[$key]); } } foreach ($dependancyArray as $pos => $dependancyData) { $currentFieldType = dependencyParser($fieldType, $dependancyData); if (isset($foundTypes[$currentFieldType])) { unset($foundTypes[$currentFieldType]); } else { $unusedTypes[$currentFieldType] = $currentFieldType; } $comment = new DOMComment(" {$currentFieldType} "); $el->appendChild($comment); $field = $doc->createElement('fieldType'); $field->setAttribute('name', $currentFieldType); jsonToXML($doc, $field, $fieldTypeInfo, $dependancyData); $el->appendChild($field); $comment = new DOMComment("NEWLINE"); $el->appendChild($comment); } }
function createQueriesConfig(&$doc, &$el, $fields, $entityQueries, $dependencyVariables) { // select $selectFields = array(); $primaryKeys = array(); $importFields = array(); foreach ($fields as $fieldName => $fieldInfo) { $dependancyArray = createDependencyArray($fieldInfo, $dependencyVariables); foreach ($dependancyArray as $pos => $dependancyData) { // $sourceFieldName = $fieldName; $currentFieldName = dependencyParser($fieldName, $dependancyData); if (isset($fieldInfo['dataSourceEntity'])) { if (isset($fieldInfo['uniqueKey']) && $fieldInfo['uniqueKey']) { $primaryKeys[$fieldInfo['dataSourceEntity']] = $currentFieldName; } if (!isset($selectFields[$fieldInfo['dataSourceEntity']])) { $selectFields[$fieldInfo['dataSourceEntity']] = array(); $importFields[$fieldInfo['dataSourceEntity']] = array(); } $statement = isset($fieldInfo['dataSourceStatement']) ? $fieldInfo['dataSourceStatement'] : "`{$currentFieldName}`"; if (isset($fieldInfo['dataSourceStatementDependencyMapping'])) { $mapping = array(); foreach ($dependancyData as $key => $val) { if (isset($fieldInfo['dataSourceStatementDependencyMapping'][$key]) && isset($fieldInfo['dataSourceStatementDependencyMapping'][$key][$val])) { $mapping[$key . '_map'] = $fieldInfo['dataSourceStatementDependencyMapping'][$key][$val]; } } $statement = dependencyParser($statement, $mapping); } if (isset($fieldInfo['multiValued']) && $fieldInfo['multiValued']) { $statement .= " as `{$currentFieldName}`"; } else { $statement .= " as `{$currentFieldName}`"; } $selectFields[$fieldInfo['dataSourceEntity']][$currentFieldName] = $statement; if (isset($fieldInfo['dataSourceMultivaluedSeperator'])) { $importFields[$fieldInfo['dataSourceEntity']][$currentFieldName] = array('column' => $currentFieldName, 'sourceColName' => $currentFieldName, 'splitBy' => $fieldInfo['dataSourceMultivaluedSeperator']); } else { $importFields[$fieldInfo['dataSourceEntity']][$currentFieldName] = array('column' => $currentFieldName, 'name' => $currentFieldName); } } } } // from $entitiesXML = array(); $tabs = str_repeat("\t", 15); $tabs2 = str_repeat("\t", 14); $tabs3 = str_repeat("\t", 13); foreach ($entityQueries as $entityName => $queryInfo) { $entity = $doc->createElement('entity'); $entity->setAttribute('name', $entityName); if (isset($queryInfo['dataSource'])) { $entity->setAttribute('dataSource', $queryInfo['dataSource']); } if (isset($queryInfo['transformers'])) { $entity->setAttribute('transformer', implode(",", $queryInfo['transformers'])); } if (isset($queryInfo['pk'])) { $entity->setAttribute('pk', $queryInfo['pk']); } elseif (isset($primaryKeys[$entityName])) { $entity->setAttribute('pk', $primaryKeys[$entityName]); } foreach ($queryInfo['queries'] as $queryType => $queryTypeData) { $query = "SELECT "; $select = array(); if (isset($queryTypeData['fields'])) { foreach ($queryTypeData['fields'] as $fieldName) { $select[] = $selectFields[$entityName][$fieldName]; } } else { $select = $selectFields[$entityName]; } $query .= "\n{$tabs}" . implode(",\n{$tabs}", $select); foreach ($queryTypeData['tables'] as $tableGroup) { $query .= " \n{$tabs2}" . implode(" \n{$tabs}", $queryInfo['tables'][$tableGroup]); } $query .= " \n{$tabs2}" . $queryTypeData['filter'] . ";\n{$tabs3}"; $entity->setAttribute($queryType, $query); } $entitiesXML[$entityName] = array('element' => $entity); if (isset($queryInfo['parentEntity'])) { $entitiesXML[$entityName]['parent'] = $queryInfo['parentEntity']; } } // fields foreach ($importFields as $entityName => $data) { $parentEl = $entitiesXML[$entityName]['element']; foreach ($data as $fieldName => $attributes) { $field = $doc->createElement('field'); foreach ($attributes as $attr => $val) { $field->setAttribute($attr, $val); } $parentEl->appendChild($field); } } foreach ($entitiesXML as $entityName => $entityData) { if (!isset($entityData['parent'])) { $el->appendChild($entityData['element']); } else { $entitiesXML[$entityData['parent']]['element']->appendChild($entityData['element']); } } }
function createAPIConfig(&$conf, $fieldName, $fieldInfo, $dependancyArray) { global $config; if (isset($fieldInfo['searchOptions'])) { foreach ($dependancyArray as $pos => $dependancyData) { $searchActions = $fieldInfo['searchOptions']['searchActions']; $returnActions = $fieldInfo['searchOptions']['returnActions']; $combinedActions = array_unique(array_merge($searchActions, $returnActions)); foreach ($fieldInfo['types'] as $fieldNamePostfix => $fieldType) { foreach ($combinedActions as $action) { $isSourceField = false; $currentFieldName = $fieldName; if ($fieldNamePostfix == '_') { $isSourceField = true; } else { $currentFieldName .= '_' . $fieldNamePostfix; } $currentFieldName = dependencyParser($currentFieldName, $dependancyData); $currentFieldType = dependencyParser($fieldType, $dependancyData); $dependancyConf = false; if (isset($fieldInfo['__dependency'])) { $dependancyConf = array(); $idxa = array(); foreach ($fieldInfo['__dependency'] as $key => $dep) { $dependancyConf[$key] = $dependancyData[$key]; $idxa[] = $key . '_' . $dependancyData[$key]; } sort($idxa); $conf[$action]['dependencies'][implode('_', $idxa)] = $dependancyData; } // $apiConfig[$action]['dependencyVariables'] = $config['dependencyVariables']; $defaults = array('search' => false, 'return' => false, 'facet' => false, 'boost' => 0, 'fuzzy' => false, 'additional' => array(), 'phraseField' => false, 'phraseFieldBiGram' => false, 'phraseFieldTriGram' => false); $fieldData = array_merge($defaults, $fieldInfo['searchOptions'], $dependancyData); $setSearch = array_search($action, $searchActions) !== false && $fieldData['search']; $setReturn = array_search($action, $returnActions) !== false && $fieldData['return']; $fieldTypeData = $config['fieldTypes'][$fieldType]; if (isset($fieldTypeData['__searchPhraseField'])) { $fieldData['phraseField'] = min($fieldData['phraseField'], $fieldTypeData['__searchPhraseField']); $fieldData['phraseFieldBiGram'] = min($fieldData['phraseFieldBiGram'], $fieldTypeData['__searchPhraseField']); $fieldData['phraseFieldTriGram'] = min($fieldData['phraseFieldTriGram'], $fieldTypeData['__searchPhraseField']); } if (isset($fieldTypeData['__searchBoostFactor'])) { $fieldData['boost'] = ceil($fieldData['boost'] * $fieldTypeData['__searchBoostFactor']); } if (isset($fieldTypeData['__searchBoostValue'])) { $fieldData['boost'] = $fieldTypeData['__searchBoostValue']; } if (isset($fieldTypeData['__searchFuzzyFactor'])) { $fieldData['fuzzy'] = ceil($fieldData['fuzzy'] * $fieldTypeData['__searchFuzzyFactor']); } if (isset($fieldTypeData['__searchFuzzyValue'])) { $fieldData['fuzzy'] = $fieldTypeData['__searchFuzzyValue']; } $fieldData['wildcard'] = true; if (isset($fieldTypeData["__searchWildcard"])) { $fieldData['wildcard'] = $fieldTypeData["__searchWildcard"]; } // set fields if ($setReturn && isset($conf[$action]['fields'])) { $conf[$action]['fields'][$currentFieldName] = array('field' => $currentFieldName, 'fuzzy' => $fieldData['fuzzy'], 'main' => $isSourceField); } if ($isSourceField && $fieldData['columnPosition'] !== false) { $columnData = array('field' => $currentFieldName, 'columnShow' => $fieldData['columnShow'], 'columnPosition' => $fieldData['columnPosition'], 'category' => $fieldData['category']); if (isset($fieldInfo['multiValued'])) { $columnData['multiValued'] = true; } if ($dependancyConf && isset($conf[$action]['dependencyFields'])) { $columnData['dependency'] = $dependancyConf; } if (isset($fieldData['columnName'])) { $columnData['columnName'] = $fieldData['columnName']; } else { $columnData['columnName'] = $currentFieldName; } $conf[$action]['columns'][] = $columnData; } if ($setSearch && $fieldData['boost'] && isset($conf[$action]['queryFields'])) { $statement = $currentFieldName . (is_numeric($fieldData['boost']) && $fieldData['boost'] != 1 ? "^" . ceil($fieldData['boost']) : ""); $conf[$action]['queryFields'][$currentFieldName] = array('field' => $currentFieldName, 'boost' => $fieldData['boost'], 'statement' => $statement, 'wildcard' => $fieldData['wildcard']); } if ($setSearch && $fieldData['phraseField'] && isset($conf[$action]['phraseFields'])) { $phraseBoost = isset($fieldData['boost']) ? $fieldData['boost'] : 1; $phraseBoost *= is_numeric($fieldData['phraseField']) ? intval($fieldData['phraseField']) : 1; $phraseBoost = ceil($phraseBoost); $statement = $currentFieldName . "^" . $phraseBoost; $conf[$action]['phraseFields'][$currentFieldName] = array('field' => $currentFieldName, 'boost' => $phraseBoost, 'statement' => $statement); } if ($setSearch && $fieldData['phraseFieldBiGram'] && isset($conf[$action]['phraseBiGramFields'])) { $phraseBoost = isset($fieldData['boost']) ? $fieldData['boost'] : 1; $phraseBoost *= is_numeric($fieldData['phraseFieldBiGram']) ? intval($fieldData['phraseFieldBiGram']) : 1; $phraseBoost = ceil($phraseBoost); $statement = $currentFieldName . "^" . $phraseBoost; $conf[$action]['phraseBiGramFields'][$currentFieldName] = array('field' => $currentFieldName, 'boost' => $phraseBoost, 'statement' => $statement); } if ($setSearch && $fieldData['phraseFieldTriGram'] && isset($conf[$action]['phraseTriGramFields'])) { $phraseBoost = isset($fieldData['boost']) ? $fieldData['boost'] : 1; $phraseBoost *= is_numeric($fieldData['phraseFieldTriGram']) ? intval($fieldData['phraseFieldTriGram']) : 1; $phraseBoost = ceil($phraseBoost); $statement = $currentFieldName . "^" . $phraseBoost; $conf[$action]['phraseTriGramFields'][$currentFieldName] = array('field' => $currentFieldName, 'boost' => $phraseBoost, 'statement' => $statement); } if ($setSearch && $isSourceField && $fieldData['facet'] && $conf[$action]['facets'] && isset($conf[$action]['facetFields'])) { $conf[$action]['facetFields'][$currentFieldName] = array('field' => $currentFieldName); } if ($dependancyConf && isset($conf[$action]['dependencyFields'])) { $conf[$action]['dependencyFields'][$currentFieldName] = $dependancyConf; } foreach ($fieldData['additional'] as $key => $opt) { if (($opt == "stats.field" || $opt == "stats.facet") && isset($conf[$action]['options']['stats']) && $conf[$action]['options']['stats']) { if (!isset($conf[$action]['options'][$opt])) { $conf[$action]['options'][$opt] = array(); } $conf[$action]['options'][$opt][] = $currentFieldName; } if ($opt == "facet.heatmap" && isset($conf[$action]['custom']['heatmap'])) { $conf[$action]['custom']['heatmap'][$opt] = $currentFieldName; } } } } } } }