/** * Analyze a lexicon project and create Sense, Example and Picture guids. Remove id from Sense and Example * @param LexProjectModelForUseWithSenseGuidMigration $project * @param string $projectId * @param string $testMode */ private static function analyzeProject($project, $projectId, $testMode) { $entryModifiedCount = 0; $exampleModifiedCount = 0; $pictureModifiedCount = 0; $entryList = LexEntryCommands::listEntries($projectId); foreach ($entryList->entries as $entryListItem) { $entry = new LexEntryModel($project, $entryListItem['id']); $entryModified = false; if ($entry->hasSenses()) { /** @var LexSense $sense */ foreach ($entry->senses as $sense) { self::createSenseGuids($sense, $entryModified, $exampleModifiedCount, $pictureModifiedCount); } if ($entryModified) { $entryModifiedCount++; } if (!$testMode) { $entry->write(); } } } if (!$testMode) { $project->hasHadSenseGuidsMigrated = true; $project->write(); } print "{$exampleModifiedCount} example and {$pictureModifiedCount} picture guids created.\n"; print "{$entryModifiedCount} of {$entryList->count} entries had sense guids created.\n"; }
/** * Analyze a lexicon project and migrate the semantic domain keys in the senses * @param ProjectModelForUseWithSemanticDomainMigration $project * @param string $projectId * @param string $testMode * @param string $message */ private function analyzeProject($project, $projectId, $testMode, &$message) { $entryModifiedCount = 0; $entryList = LexEntryCommands::listEntries($projectId); foreach ($entryList->entries as $entryListItem) { $entry = new LexEntryModel($project, $entryListItem['id']); $entryModified = false; if ($entry->hasSenses()) { /** @var LexSense $sense */ foreach ($entry->senses as $sense) { $this->migrateSemDomKey($sense, $project->projectName, $message, $entryModified); } } if ($entryModified) { $entryModifiedCount++; if (!$testMode) { $entry->write(); } } } if (!$testMode) { $project->hasMigratedSemanticDomainKeys = true; $project->write(); } if ($entryModifiedCount > 0) { print "{$entryModifiedCount} entries with semantic domains were migrated\n"; } }
/** * Analyze a lexicon project and migrate MultiParagraph data structure and config * @param LexProjectModelForUseWithMultiParagraphMigration $project * @param string $testMode */ private static function analyzeProject($project, $testMode) { $entryModifiedCount = 0; $multiParagraphCount = 0; $senseModifiedCount = 0; $exampleModifiedCount = 0; $entryList = LexEntryCommands::listEntries($project->id->asString()); foreach ($entryList->entries as $entryListItem) { $entryModified = false; $entryConfig = $project->config->entry; $senseConfig = $entryConfig->fields['senses']; $exampleConfig = $senseConfig->fields['examples']; $entry = new LexEntryModel($project, $entryListItem['id']); self::migrateMultiParagraphs($entry, $entryConfig, $multiParagraphCount, $entryModified); if ($entry->hasSenses()) { /** @var LexSense $sense */ foreach ($entry->senses as $sense) { $senseModified = false; self::migrateMultiParagraphs($sense, $senseConfig, $multiParagraphCount, $senseModified); if (isset($sense->examples)) { /** @var LexExample $example */ foreach ($sense->examples as $example) { $exampleModified = false; self::migrateMultiParagraphs($example, $exampleConfig, $multiParagraphCount, $exampleModified); if ($exampleModified) { $entryModified = true; $senseModified = true; $exampleModifiedCount++; } } } if ($senseModified) { $entryModified = true; $senseModifiedCount++; } } } if ($entryModified) { $entryModifiedCount++; if (!$testMode) { $entry->write(); } } } if (!$testMode) { $project->hasHadMultiParagraphsMigrated = true; $project->write(); } print "{$multiParagraphCount} multi paragraphs found.\n"; print "{$senseModifiedCount} senses and {$exampleModifiedCount} examples modified.\n"; print "{$entryModifiedCount} of {$entryList->count} entries had multi paragraphs.\n"; }
public function testListEntries_someEntriesWithNoDefinition_Ok() { $e = new LexiconMongoTestEnvironment(); $e->clean(); $project = $e->createProject(SF_TESTPROJECT, SF_TESTPROJECTCODE); $projectId = $project->id->asString(); for ($i = 0; $i < 10; $i++) { $entry = new LexEntryModel($project); $entry->lexeme->form('th', 'Apfel' . $i); if ($i % 2 == 0) { $sense = new Sense(); $entry->senses[] = $sense; } if ($i % 3 == 0) { $sense = new Sense(); $sense->definition->form('en', 'apple'); $sense->partOfSpeech->value = 'noun'; $entry->senses[] = $sense; } $entry->write(); } $result = LexEntryCommands::listEntries($projectId); $this->assertEqual($result->entries[0]['lexeme']['th']['value'], 'Apfel0'); $this->assertTrue(!array_key_exists('definition', $result->entries[0]['senses'][0])); $this->assertEqual($result->entries[3]['senses'][0]['definition']['en']['value'], 'apple'); }