/**
  * Initialize the optionlists in a project
  */
 public function initializeNewProject()
 {
     // setup default option lists
     $optionList = new LexOptionListModel($this);
     $listCode = LexiconConfigObj::flexOptionlistCode(LexiconConfigObj::POS);
     if (!$optionList->readByProperty('code', $listCode)) {
         $optionList->name = LexiconConfigObj::flexOptionlistName($listCode);
         $optionList->code = $listCode;
         $optionList->canDelete = false;
         $optionList->readFromJson(APPPATH . 'json/languageforge/lexicon/partOfSpeech.json');
         $optionList->write();
     }
     /*
     $optionList = new LexOptionListModel($this);
     $optionList->name = 'Semantic Domains';
     $optionList->code = 'semdom';
     $optionList->canDelete = false;
     $optionList->readFromJson(APPPATH . 'json/languageforge/lexicon/semdom.json');
     $optionList->write();
     
     // we should have a default list for every delivered field that is an option list type
     $optionList = new LexOptionListModel($this);
     $optionList->name = 'Environments';
     $optionList->code = 'environments';
     $optionList->canDelete = false;
     $optionList->readFromJson($environmentsFilePath);
     $optionList->write();
     */
     // repeat for other delivered option list types
 }
 /**
  * @param LexProjectModel $projectModel
  * @param string $fieldName
  * @param string $jsonFilePath
  * @return bool true on success, false otherwise
  * @throws \Exception
  */
 public static function CreateFromJson($projectModel, $fieldName, $jsonFilePath)
 {
     $optionList = new LexOptionListModel($projectModel);
     $listCode = LexConfig::flexOptionlistCode($fieldName);
     if (!$optionList->readByProperty('code', $listCode)) {
         $optionList->name = LexConfig::flexOptionlistName($listCode);
         $optionList->code = $listCode;
         $optionList->canDelete = false;
         $optionList->readFromJson($jsonFilePath);
         $optionList->write();
         return true;
     }
     return false;
 }
 public function run($userId, $mode = 'test')
 {
     $testMode = $mode != 'run';
     $message = "Ensure DB Indexes\n";
     $numberOfIndexesCreated = 0;
     $website = Website::get();
     $onDevMachine = strpos($website->domain, 'dev.') !== false;
     $onLocalMachine = strrpos($website->domain, '.local') !== false;
     $message .= "\n-------------  Main Database:\n";
     $mainCollectionName = ProjectModelMongoMapper::instance()->getCollectionName();
     $mainIndexes = ProjectModelMongoMapper::instance()->INDEXES_REQUIRED;
     $mainIndexesToCreate = MongoStore::getIndexesNotSetInCollection(SF_DATABASE, $mainCollectionName, $mainIndexes);
     $numberOfIndexesCreated += count($mainIndexesToCreate);
     $message .= count($mainIndexesToCreate) . " main indexes created.\n";
     if (($onDevMachine || $onLocalMachine) && MongoStore::hasDB(SF_TEST_DATABASE)) {
         $message .= "\n-------------  Test Database:\n";
         $mainIndexesToCreate = MongoStore::getIndexesNotSetInCollection(SF_TEST_DATABASE, $mainCollectionName, $mainIndexes);
         $numberOfIndexesCreated += count($mainIndexesToCreate);
         $message .= count($mainIndexesToCreate) . " test indexes created.\n";
     }
     if (!$testMode) {
         MongoStore::ensureIndexesInCollection(SF_DATABASE, $mainCollectionName, $mainIndexes);
         if (($onDevMachine || $onLocalMachine) && MongoStore::hasDB(SF_TEST_DATABASE)) {
             MongoStore::ensureIndexesInCollection(SF_TEST_DATABASE, $mainCollectionName, $mainIndexes);
         }
     }
     // loop over every project
     $projectList = new ProjectListModel();
     $projectList->read();
     foreach ($projectList->entries as $projectParams) {
         $project = ProjectModel::getById($projectParams['id']);
         if ($project->appName == 'lexicon') {
             $message .= "\n-------------  {$project->projectName} project:\n";
             $lexiconCollectionName = LexEntryModel::mapper($project->databaseName())->getCollectionName();
             $lexiconIndexes = LexEntryModel::mapper($project->databaseName())->INDEXES_REQUIRED;
             $lexiconIndexesToCreate = MongoStore::getIndexesNotSetInCollection($project->databaseName(), $lexiconCollectionName, $lexiconIndexes);
             $numberOfIndexesCreated += count($lexiconIndexesToCreate);
             $optionListCollectionName = LexOptionListModel::mapper($project->databaseName())->getCollectionName();
             $optionListIndexes = LexOptionListModel::mapper($project->databaseName())->INDEXES_REQUIRED;
             $optionListIndexesToCreate = MongoStore::getIndexesNotSetInCollection($project->databaseName(), $optionListCollectionName, $optionListIndexes);
             $numberOfIndexesCreated += count($optionListIndexesToCreate);
             if (count($lexiconIndexesToCreate) + count($optionListIndexesToCreate) > 0) {
                 $message .= count($lexiconIndexesToCreate) . " lexicon indexes created.\n";
                 $message .= count($optionListIndexesToCreate) . " option list indexes created.\n";
             } else {
                 $message .= "No indexes needed creating.\n";
             }
             if (!$testMode) {
                 MongoStore::ensureIndexesInCollection($project->databaseName(), $lexiconCollectionName, $lexiconIndexes);
                 MongoStore::ensureIndexesInCollection($project->databaseName(), $optionListCollectionName, $optionListIndexes);
             }
         }
     }
     if ($numberOfIndexesCreated > 0) {
         $message .= "\nCreated {$numberOfIndexesCreated} DB Indexes.\n\n";
     } else {
         $message .= "\nAll indexes were present.\n\n";
     }
     return $message;
 }
 public function createDatabaseIndexes()
 {
     $collectionName = LexEntryModel::mapper($this->databaseName())->getCollectionName();
     $indexes = LexEntryModel::mapper($this->databaseName())->INDEXES_REQUIRED;
     MongoStore::addIndexesToCollection($this->databaseName(), $collectionName, $indexes);
     $collectionName = LexOptionListModel::mapper($this->databaseName())->getCollectionName();
     $indexes = LexOptionListModel::mapper($this->databaseName())->INDEXES_REQUIRED;
     MongoStore::addIndexesToCollection($this->databaseName(), $collectionName, $indexes);
 }
Example #5
0
 /**
  * Convert a LIFT range to an option list of the right code
  * Usage example: rangeToOptionList($projectModel, 'grammatical-info', 'Part of Speech', $liftRanges['grammatical-info'])
  * @param LexiconProjectModel $projectModel
  * @param string $optionListCode
  * @param string $optionListName
  * @param LiftRange $liftRange
  * @param string $interfaceLang
  */
 public static function rangeToOptionList($projectModel, $optionListCode, $optionListName, $liftRange, $interfaceLang = 'en')
 {
     $optionList = new LexOptionListModel($projectModel);
     $optionList->readByProperty('code', $optionListCode);
     $optionList->code = $optionListCode;
     $optionList->name = $optionListName;
     $optionList->canDelete = false;
     // start with an empty list
     $optionList->items->exchangeArray(array());
     foreach ($liftRange->rangeElements as $id => $elem) {
         if ($elem->label && array_key_exists($interfaceLang, $elem->label)) {
             $label = $elem->label[$interfaceLang]->value;
             if (isset($elem->abbrev)) {
                 $abbrev = $elem->abbrev[$interfaceLang]->value;
             } else {
                 $abbrev = null;
             }
             $optionListItem = new LexiconOptionListItem($label, $id);
             $optionListItem->abbreviation = $abbrev;
             $optionList->items->append($optionListItem);
         }
     }
     $optionList->write();
 }
 public function testLiftImportMerge_ExistingData_RangesChanged()
 {
     $liftFilePath = self::$environ->createTestLiftFile(self::liftWithRangesV0_13, 'LiftWithRangesV0_13.lift');
     self::$environ->createTestLiftFile(self::liftRangesV0_13, 'TestLangProj.lift-ranges');
     $project = self::$environ->createProject(SF_TESTPROJECT, SF_TESTPROJECTCODE);
     $mergeRule = LiftMergeRule::IMPORT_WINS;
     $skipSameModTime = false;
     LiftImport::get()->merge($liftFilePath, $project, $mergeRule, $skipSameModTime);
     $optionList = new LexOptionListModel($project);
     $optionList->readByProperty('code', LexConfig::flexOptionlistCode(LexConfig::POS));
     $this->assertEquals(3, $optionList->items->count());
     $this->assertEquals('article', $optionList->items[0]->value);
     self::$environ->createTestLiftFile(self::liftRangesAnotherPosV0_13, 'TestLangProj.lift-ranges');
     $importer = LiftImport::get()->merge($liftFilePath, $project, $mergeRule, $skipSameModTime);
     $this->assertEquals(1, $importer->stats->existingEntries);
     $optionList = new LexOptionListModel($project);
     $optionList->readByProperty('code', LexConfig::flexOptionlistCode(LexConfig::ANTHROPOLOGYCATEGORIES));
     $this->assertEquals(0, $optionList->items->count());
     $optionList->readByProperty('code', LexConfig::flexOptionlistCode(LexConfig::STATUS));
     $this->assertEquals(4, $optionList->items->count());
     $optionList->readByProperty('code', LexConfig::flexOptionlistCode(LexConfig::ACADEMICDOMAINS));
     $this->assertEquals(2, $optionList->items->count());
     $optionList->readByProperty('code', LexConfig::flexOptionlistCode(LexConfig::POS));
     $this->assertEquals(1, $optionList->items->count());
     $this->assertEquals('adjunct', $optionList->items[0]->value);
 }
 public function testCreateProject_LexProject_IndexesCreated()
 {
     self::$environ = new LexiconMongoTestEnvironment();
     self::$environ->clean();
     $user1Id = self::$environ->createUser("user1name", "User1 Name", "*****@*****.**");
     $user1 = new UserModel($user1Id);
     $srProject = null;
     $projectId = ProjectCommands::createProject(SF_TESTPROJECT, SF_TESTPROJECTCODE, LexProjectModel::LEXICON_APP, $user1->id->asString(), self::$environ->website, $srProject);
     $project = new LexProjectModel($projectId);
     $databaseName = $project->databaseName();
     $collectionName = LexEntryModel::mapper($databaseName)->getCollectionName();
     $indexCount = iterator_count(MongoStore::getCollectionIndexes($databaseName, $collectionName));
     $this->assertTrue($indexCount >= 3);
     $index = ['key' => ['guid' => 1]];
     $this->assertTrue(MongoStore::isAllIndexFieldNamesInCollection($index, $databaseName, $collectionName));
     $collectionName = LexOptionListModel::mapper($databaseName)->getCollectionName();
     $indexCount = iterator_count(MongoStore::getCollectionIndexes($databaseName, $collectionName));
     $this->assertTrue($indexCount >= 2);
     $index = ['key' => ['code' => 1]];
     $this->assertTrue(MongoStore::isAllIndexFieldNamesInCollection($index, $databaseName, $collectionName));
 }