/** * @param array $prefixes */ public function setPrefixes($prefixes) { if ($prefixes) { $this->prefixes = $prefixes; $this->schema->setPrefixes($prefixes); $this->schema->save(); } }
/** * Stores the object in the database. * * If the object is new, it inserts it; otherwise an update is performed. * All related objects are also updated in this method. * * @param Connection $con * @return int The number of rows affected by this insert/update and any referring fk objects' save() operations. * @throws PropelException * @see save() */ protected function doSave($con) { $affectedRows = 0; // initialize var to track total num of affected rows if (!$this->alreadyInSave) { $this->alreadyInSave = true; // We call the save method on the following object(s) if they // were passed to this object by their coresponding set // method. This object relates to these object(s) by a // foreign key reference. if ($this->aUser !== null) { if ($this->aUser->isModified()) { $affectedRows += $this->aUser->save($con); } $this->setUser($this->aUser); } if ($this->aSchema !== null) { if ($this->aSchema->isModified()) { $affectedRows += $this->aSchema->save($con); } $this->setSchema($this->aSchema); } // If this object has been modified, then save it to the database. if ($this->isModified()) { if ($this->isNew()) { $pk = SchemaHasVersionPeer::doInsert($this, $con); $affectedRows += 1; // we are assuming that there is only 1 row per doInsert() which // should always be true here (even though technically // BasePeer::doInsert() can insert multiple rows). $this->setId($pk); //[IMV] update autoincrement primary key $this->setNew(false); } else { $affectedRows += SchemaHasVersionPeer::doUpdate($this, $con); } $this->resetModified(); // [HL] After being saved an object is no longer 'modified' } $this->alreadyInSave = false; } return $affectedRows; }
/** * this is for importing a list of value vocabulary files. * * it's designed specifically to import the list of marc21 VES files, * but may be modified and expanded to support more things * * @param $task * @param $args * * @throws Exception */ function run_import_list($task, $args) { xdebug_break(); //check the argument counts //check the argument counts if (count($args) < 1) { throw new Exception('You must provide a vocabulary type.'); } if (count($args) < 2) { throw new Exception('You must provide a file name.'); } //set the arguments $type = strtolower($args[0]); $filePath = $args[1]; $batchId = $args[3]; //does the file exist? if (! file_exists($filePath)) { throw new Exception('You must supply a valid file to import'); } //is the file a valid type? if (preg_match('/^.+\.([[:alpha:]]{2,4})$/', $filePath, $matches)) { if (! in_array( strtolower($matches[1]), array( "json", "rdf", "csv", "xml" ) ) ) { throw new Exception('You must provide a valid file type based on the extension'); } } else { throw new Exception("File type cannot be determined from the file extension"); } /************************************************************ * Set Defaults Here * *************************************************************/ $fileType = $matches[1]; //todo: need to figure out a way to pass defaults dynamically $importTask = new pakeTask('import-vocabulary'); // parse file to get the fields/columns and data $file = fopen($filePath, "r"); if (! $file) { throw new Exception("Can't read supplied file"); } switch ($fileType) { case "csv": try { $reader = new aCsvReader($filePath); } catch(Exception $e) { throw new Exception("Not a happy CSV file! Error: " . $e); } $uploadPath = $GLOBALS['uploadPath']; ; if ('vocab' == $type) { // Get array of heading names found $headings = $reader->getHeadings(); $fields = VocabularyPeer::getFieldNames(); try { while ($row = $reader->getRow()) { // lookup the URI (or the OMR ID if available) for a match if (empty($row["VES"])) { //skip this one break; } $uri = $baseDomain . $row["VES"] . "#"; $vocab = VocabularyPeer::getVocabularyByUri($uri); $updateTime = time(); if (! $vocab) { // create a new concept or element $vocab = new Vocabulary(); $vocab->setUri($uri); $vocab->setCreatedAt($updateTime); $vocab->setCreatedUserId($userId); $vocab->setAgentId($agentID); $vocab->setBaseDomain($baseDomain); $vocab->setCommunity("Libraries, MARC21"); $vocab->setLanguage("en"); $vocab->setStatusId(1); } else { $vocab->setLastUpdated($updateTime); $vocab->setUpdatedUserId($userId); } $vocab->setName(fixEncoding(rtrim($row['Name']))); $vocab->setNote(fixEncoding(rtrim($row['Note']))); $vocab->setToken($row['VES']); $vocab->save(); //type $args[0] = "vocab"; //vocabid $args[2] = $vocab->getId(); //filepath $args[1] = $GLOBALS['uploadPath'] . $row['VES'] . ".csv"; $args[3] = $batchId; $args[4] = "-d"; run_import_vocabulary($importTask, $args); $foo = $vocab->countConcepts(); } } catch(Exception $e) { throw new Exception($e); } } else //it's a schema { try { while ($row = $reader->getRow()) { //NOTE: this is explicitly tuned to a particular import file //TODO: generalize this import mapping // lookup the URI (or the OMR ID if available) for a match if (empty($row["URI"])) { //skip this one break; } $uri = $row["URI"]; $schema = SchemaPeer::getschemaByUri($uri); $updateTime = time(); if (! $schema) { // create a new vocabulary $schema = new Schema(); $schema->setUri($uri); $schema->setCreatedAt($updateTime); $schema->setCreatedUserId($userId); $schema->setAgentId($agentID); $schema->setBaseDomain($baseDomain); $schema->setProfileId(1); } else { $schema->setUpdatedAt($updateTime); $schema->setUpdatedUserId($userId); } $schema->setCommunity($row['Tags']); $schema->setLanguage($row['Language']); $schema->setNsType("slash"); $schema->setName($row['Label']); $schema->setNote($row['Note']); $schema->setStatusId(1); $schema->setToken($row['Name']); $schema->setUrl($row['URL']); $schema->save(); //todo: create a new import batch here and pass it to the import args //see importVocabulary->saveresults() //$batchId = //type $args[0] = "schema"; //filepath $args[1] = $GLOBALS['uploadPath'] . $row['File Name']; //vocabid $args[2] = $schema->getId(); $args[3] = $batchId; $args[4] = "-d"; run_import_vocabulary($importTask, $args); $foo = $schema->countSchemaPropertys(); } } catch(Exception $e) { throw new Exception($e); } } break; default: } }
/** * Tests to fail updating. */ public function testUpdateFails() { // Create new schema $schema = new Schema(array('SCHEMA_NAME' => 'schematest1')); // Save schema $schema->save(); // Change schema charset to something non-existing $schema->DEFAULT_COLLATION_NAME = md5(microtime()); // Try to save $schema->save(); // Schema should have errors $this->assertEquals(true, $schema->hasErrors()); }
/** * Create a new schema. */ public function actionCreate() { $schema = new Schema(); if (isset($_POST['Schema'])) { $schema->attributes = $_POST['Schema']; if ($sql = $schema->save()) { $response = new AjaxResponse(); $response->addNotification('success', Yii::t('core', 'successAddSchema', array('{schema}' => $schema->SCHEMA_NAME)), null, $sql); $response->refresh = true; $response->executeJavaScript('sideBar.loadSchemata()'); $this->sendJSON($response); } } $collations = Collation::model()->findAll(array('order' => 'COLLATION_NAME', 'select' => 'COLLATION_NAME, CHARACTER_SET_NAME AS collationGroup')); $this->render('form', array('schema' => $schema, 'collations' => $collations)); }
/** * Stores the object in the database. * * If the object is new, it inserts it; otherwise an update is performed. * All related objects are also updated in this method. * * @param Connection $con * @return int The number of rows affected by this insert/update and any referring fk objects' save() operations. * @throws PropelException * @see save() */ protected function doSave($con) { $affectedRows = 0; // initialize var to track total num of affected rows if (!$this->alreadyInSave) { $this->alreadyInSave = true; // We call the save method on the following object(s) if they // were passed to this object by their coresponding set // method. This object relates to these object(s) by a // foreign key reference. if ($this->aUserRelatedByCreatedUserId !== null) { if ($this->aUserRelatedByCreatedUserId->isModified()) { $affectedRows += $this->aUserRelatedByCreatedUserId->save($con); } $this->setUserRelatedByCreatedUserId($this->aUserRelatedByCreatedUserId); } if ($this->aUserRelatedByUpdatedUserId !== null) { if ($this->aUserRelatedByUpdatedUserId->isModified()) { $affectedRows += $this->aUserRelatedByUpdatedUserId->save($con); } $this->setUserRelatedByUpdatedUserId($this->aUserRelatedByUpdatedUserId); } if ($this->aSchema !== null) { if ($this->aSchema->isModified()) { $affectedRows += $this->aSchema->save($con); } $this->setSchema($this->aSchema); } if ($this->aSchemaPropertyRelatedByIsSubpropertyOf !== null) { if ($this->aSchemaPropertyRelatedByIsSubpropertyOf->isModified()) { $affectedRows += $this->aSchemaPropertyRelatedByIsSubpropertyOf->save($con); } $this->setSchemaPropertyRelatedByIsSubpropertyOf($this->aSchemaPropertyRelatedByIsSubpropertyOf); } if ($this->aStatus !== null) { if ($this->aStatus->isModified()) { $affectedRows += $this->aStatus->save($con); } $this->setStatus($this->aStatus); } // If this object has been modified, then save it to the database. if ($this->isModified()) { if ($this->isNew()) { $pk = SchemaPropertyPeer::doInsert($this, $con); $affectedRows += 1; // we are assuming that there is only 1 row per doInsert() which // should always be true here (even though technically // BasePeer::doInsert() can insert multiple rows). $this->setId($pk); //[IMV] update autoincrement primary key $this->setNew(false); } else { $affectedRows += SchemaPropertyPeer::doUpdate($this, $con); } $this->resetModified(); // [HL] After being saved an object is no longer 'modified' } if ($this->collDiscusss !== null) { foreach ($this->collDiscusss as $referrerFK) { if (!$referrerFK->isDeleted()) { $affectedRows += $referrerFK->save($con); } } } if ($this->collSchemaPropertysRelatedByIsSubpropertyOf !== null) { foreach ($this->collSchemaPropertysRelatedByIsSubpropertyOf as $referrerFK) { if (!$referrerFK->isDeleted()) { $affectedRows += $referrerFK->save($con); } } } if ($this->collSchemaPropertyElementsRelatedBySchemaPropertyId !== null) { foreach ($this->collSchemaPropertyElementsRelatedBySchemaPropertyId as $referrerFK) { if (!$referrerFK->isDeleted()) { $affectedRows += $referrerFK->save($con); } } } if ($this->collSchemaPropertyElementsRelatedByRelatedSchemaPropertyId !== null) { foreach ($this->collSchemaPropertyElementsRelatedByRelatedSchemaPropertyId as $referrerFK) { if (!$referrerFK->isDeleted()) { $affectedRows += $referrerFK->save($con); } } } if ($this->collSchemaPropertyElementHistorysRelatedBySchemaPropertyId !== null) { foreach ($this->collSchemaPropertyElementHistorysRelatedBySchemaPropertyId as $referrerFK) { if (!$referrerFK->isDeleted()) { $affectedRows += $referrerFK->save($con); } } } if ($this->collSchemaPropertyElementHistorysRelatedByRelatedSchemaPropertyId !== null) { foreach ($this->collSchemaPropertyElementHistorysRelatedByRelatedSchemaPropertyId as $referrerFK) { if (!$referrerFK->isDeleted()) { $affectedRows += $referrerFK->save($con); } } } $this->alreadyInSave = false; } return $affectedRows; }