コード例 #1
0
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);
        }
    }
}
コード例 #2
0
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;
                        }
                    }
                }
            }
        }
    }
}