*/ class SchemaParser { /** * Parse the solr stopwords response from an json string to an array. * * @param string $jsonString * @return Schema */ public function parseJson($jsonString) { $decodedResponse = json_decode($jsonString); $schemaResponse = $decodedResponse->schema; $schema = GeneralUtility::makeInstance(Schema::class); if ($schemaResponse === null) { return $schema; } $language = $this->parseLanguage($schemaResponse); $schema->setLanguage($language); $name = $this->parseName($schemaResponse); $schema->setName($name); return $schema; } /** * Extracts the language from a solr schema response. * * @param \stdClass $schema * @return string */ protected function parseLanguage(\stdClass $schema) { $language = 'english'; if (!is_object($schema) || !isset($schema->fieldTypes)) { return $language; } foreach ($schema->fieldTypes as $fieldType) { if ($fieldType->name !== 'text') { continue; } // we have a text field foreach ($fieldType->queryAnalyzer->filters as $filter) { if ($filter->class === 'solr.ManagedSynonymGraphFilterFactory') { $language = $filter->managed; } } } return $language; } /** * Extracts the schema name from the response. * * @param \stdClass $schemaResponse * @return string */ protected function parseName(\stdClass $schemaResponse) { return isset($schemaResponse->name) ? $schemaResponse->name : ''; } }