/**
  * description
  *
  * @return string
  */
 public function getScheme()
 {
     $scheme = VocabularyPeer::retrieveByPK($this->getSchemeId());
     if ($scheme) {
         return $scheme->getName();
     }
 }
 /**
 * Set defaults
 *
 * @param  Concept $concept
 */
 public function setDefaults($concept)
 {
     $vocabObj = $this->getCurrentVocabulary();
     $vocabId = $vocabObj->getId();
     $concept->setVocabularyId($vocabId);
     $conceptParam = $this->getContext()->getRequest()->getParameter('concept');
     if (!$this->getContext()->getRequest()->getErrors() and !isset($conceptParam['uri'])) {
         $vocabDomain = $vocabObj->getBaseDomain();
         $vocabToken = $vocabObj->getToken();
         //get the next id
         $nextUriId = VocabularyPeer::getNextConceptId($vocabId);
         //URI looks like: agent(base_domain) / vocabulary(token) / vocabulary(next_concept_id) / skos_property_id # concept(next_property_id)
         $vSlash = preg_match('@(/$)@i', $vocabDomain) ? '' : '/';
         $tSlash = preg_match('@(/$)@i', $vocabToken) ? '' : '/';
         //to support hash URIs just a wee bit better...
         $tSlash = preg_match('/#$/', $vocabToken) ? '' : $tSlash;
         $newURI = $vocabDomain . $vSlash . $vocabToken . $tSlash . $nextUriId;
         //registry base domain is http://metadataregistry.org/uri/
         //next_concept_id is always initialized to 100000, allowing for 999,999 concepts
         //vocabulary carries denormalized base_domain from agent
         $concept->setUri($newURI);
         $concept->setprefLabel('');
         //set to the vocabulary defaults
         $concept->setLanguage($vocabObj->getLanguage());
         $concept->setStatusId($vocabObj->getStatusId());
     }
     parent::setDefaults($concept);
 }
 /**
  * description
  *
  * @return return_type
  * @param  var_type $var
  */
 public static function retrieveByUri($uri)
 {
     $con = Propel::getConnection(self::DATABASE_NAME);
     $criteria = new Criteria(VocabularyPeer::DATABASE_NAME);
     $criteria->add(self::URI, $uri);
     $criteria->addOr(self::URI, $uri . "#");
     $criteria->addOr(self::URI, $uri . "/");
     $v = VocabularyPeer::doSelect($criteria, $con);
     return !empty($v) > 0 ? $v[0] : null;
 }
 /**
  * Set the defaults
  *
  * @param  ConceptProperty $concept_property
  */
 public function setDefaults($discuss)
 {
     $action = $this->getRequest()->getParameter('action');
     if ('create' == strtolower($action)) {
         $filter = $this->getUser()->getAttributeHolder()->getAll('sf_admin/discuss/filters');
         //we need to get all the numbers
         if ($filter && is_array($filter)) {
             $filterKey = array_keys($filter);
             try {
                 switch ($filterKey[0]) {
                     case "property":
                         $property = ConceptPropertyPeer::retrieveByPK($filter[$filterKey[0]]);
                         $concept = $property->getConceptRelatedByConceptId();
                         $vocabId = $concept->getVocabularyId();
                         $vocabulary = myActionTools::findCurrentVocabulary();
                         /** @var Discuss **/
                         $discuss->setConceptProperty($property);
                         $discuss->setConcept($concept);
                         $discuss->setVocabularyId($vocabId);
                         break;
                     case "concept_id":
                         $concept = ConceptPeer::retrieveByPK($filter[$filterKey[0]]);
                         $vocabId = $concept->getVocabularyId();
                         /** @var Discuss **/
                         $discuss->setConcept($concept);
                         $discuss->setVocabularyId($vocabId);
                     case "vocabulary_id":
                         $vocabId = VocabularyPeer::retrieveByPK($filter[$filterKey[0]]);
                         /** @var Discuss **/
                         $discuss->setVocabularyId($vocabId);
                         break;
                     default:
                 }
             } catch (Exception $e) {
             }
         }
     } else {
     }
     parent::setDefaults($discuss);
 }
 /**
  * Selects a collection of FileImportHistory objects pre-filled with all related objects except Batch.
  *
  * @return array Array of FileImportHistory objects.
  * @throws PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function doSelectJoinAllExceptBatch(Criteria $c, $con = null)
 {
     $c = clone $c;
     // Set the correct dbName if it has not been overridden
     // $c->getDbName() will return the same object if not set to another value
     // so == check is okay and faster
     if ($c->getDbName() == Propel::getDefaultDB()) {
         $c->setDbName(self::DATABASE_NAME);
     }
     FileImportHistoryPeer::addSelectColumns($c);
     $startcol2 = FileImportHistoryPeer::NUM_COLUMNS - FileImportHistoryPeer::NUM_LAZY_LOAD_COLUMNS + 1;
     UserPeer::addSelectColumns($c);
     $startcol3 = $startcol2 + UserPeer::NUM_COLUMNS;
     VocabularyPeer::addSelectColumns($c);
     $startcol4 = $startcol3 + VocabularyPeer::NUM_COLUMNS;
     SchemaPeer::addSelectColumns($c);
     $startcol5 = $startcol4 + SchemaPeer::NUM_COLUMNS;
     $c->addJoin(FileImportHistoryPeer::USER_ID, UserPeer::ID);
     $c->addJoin(FileImportHistoryPeer::VOCABULARY_ID, VocabularyPeer::ID);
     $c->addJoin(FileImportHistoryPeer::SCHEMA_ID, SchemaPeer::ID);
     $rs = BasePeer::doSelect($c, $con);
     $results = array();
     while ($rs->next()) {
         $omClass = FileImportHistoryPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj1 = new $cls();
         $obj1->hydrate($rs);
         $omClass = UserPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj2 = new $cls();
         $obj2->hydrate($rs, $startcol2);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj2 = $temp_obj1->getUser();
             //CHECKME
             if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj2->addFileImportHistory($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj2->initFileImportHistorys();
             $obj2->addFileImportHistory($obj1);
         }
         $omClass = VocabularyPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj3 = new $cls();
         $obj3->hydrate($rs, $startcol3);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj3 = $temp_obj1->getVocabulary();
             //CHECKME
             if ($temp_obj3->getPrimaryKey() === $obj3->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj3->addFileImportHistory($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj3->initFileImportHistorys();
             $obj3->addFileImportHistory($obj1);
         }
         $omClass = SchemaPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj4 = new $cls();
         $obj4->hydrate($rs, $startcol4);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj4 = $temp_obj1->getSchema();
             //CHECKME
             if ($temp_obj4->getPrimaryKey() === $obj4->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj4->addFileImportHistory($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj4->initFileImportHistorys();
             $obj4->addFileImportHistory($obj1);
         }
         $results[] = $obj1;
     }
     return $results;
 }
 /**
  * Selects a collection of Concept objects pre-filled with all related objects except Status.
  *
  * @return array Array of Concept objects.
  * @throws PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function doSelectJoinAllExceptStatus(Criteria $c, $con = null)
 {
     $c = clone $c;
     // Set the correct dbName if it has not been overridden
     // $c->getDbName() will return the same object if not set to another value
     // so == check is okay and faster
     if ($c->getDbName() == Propel::getDefaultDB()) {
         $c->setDbName(self::DATABASE_NAME);
     }
     ConceptPeer::addSelectColumns($c);
     $startcol2 = ConceptPeer::NUM_COLUMNS - ConceptPeer::NUM_LAZY_LOAD_COLUMNS + 1;
     UserPeer::addSelectColumns($c);
     $startcol3 = $startcol2 + UserPeer::NUM_COLUMNS;
     UserPeer::addSelectColumns($c);
     $startcol4 = $startcol3 + UserPeer::NUM_COLUMNS;
     VocabularyPeer::addSelectColumns($c);
     $startcol5 = $startcol4 + VocabularyPeer::NUM_COLUMNS;
     ConceptPropertyPeer::addSelectColumns($c);
     $startcol6 = $startcol5 + ConceptPropertyPeer::NUM_COLUMNS;
     $c->addJoin(ConceptPeer::CREATED_USER_ID, UserPeer::ID);
     $c->addJoin(ConceptPeer::UPDATED_USER_ID, UserPeer::ID);
     $c->addJoin(ConceptPeer::VOCABULARY_ID, VocabularyPeer::ID);
     $c->addJoin(ConceptPeer::PREF_LABEL_ID, ConceptPropertyPeer::ID);
     $rs = BasePeer::doSelect($c, $con);
     $results = array();
     while ($rs->next()) {
         $omClass = ConceptPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj1 = new $cls();
         $obj1->hydrate($rs);
         $omClass = UserPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj2 = new $cls();
         $obj2->hydrate($rs, $startcol2);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj2 = $temp_obj1->getUserRelatedByCreatedUserId();
             //CHECKME
             if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj2->addConceptRelatedByCreatedUserId($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj2->initConceptsRelatedByCreatedUserId();
             $obj2->addConceptRelatedByCreatedUserId($obj1);
         }
         $omClass = UserPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj3 = new $cls();
         $obj3->hydrate($rs, $startcol3);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj3 = $temp_obj1->getUserRelatedByUpdatedUserId();
             //CHECKME
             if ($temp_obj3->getPrimaryKey() === $obj3->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj3->addConceptRelatedByUpdatedUserId($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj3->initConceptsRelatedByUpdatedUserId();
             $obj3->addConceptRelatedByUpdatedUserId($obj1);
         }
         $omClass = VocabularyPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj4 = new $cls();
         $obj4->hydrate($rs, $startcol4);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj4 = $temp_obj1->getVocabulary();
             //CHECKME
             if ($temp_obj4->getPrimaryKey() === $obj4->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj4->addConcept($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj4->initConcepts();
             $obj4->addConcept($obj1);
         }
         $omClass = ConceptPropertyPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj5 = new $cls();
         $obj5->hydrate($rs, $startcol5);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj5 = $temp_obj1->getConceptProperty();
             //CHECKME
             if ($temp_obj5->getPrimaryKey() === $obj5->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj5->addConcept($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj5->initConcepts();
             $obj5->addConcept($obj1);
         }
         $results[] = $obj1;
     }
     return $results;
 }
 /**
  * @return string
  * @throws sfError404Exception
  */
 public function executeGet()
 {
     /** @var myWebRequest $request **/
     $request = $this->getRequest();
     $redir = $this->getRequestParameter('redir', false);
     $uri = $this->getRequestParameter('uri');
     if (!$uri) {
         $uri = "http://" . $request->getPathInfoParam('HTTP_HOST') . $request->getPathInfoParam('REQUEST_URI');
         //strip trailing type
         $uri = preg_replace('/\\.\\w+$/U', '', $uri);
         //strip _dev script if it's part of the URI'
         $uri = preg_replace('%\\w+\\_dev.php/%', '', $uri);
     }
     $module = $this->getRequestParameter('type');
     if ('unknown' == $module) {
         $accept = $request->getPathInfoParam('HTTP_ACCEPT');
         $agent = $request->getPathInfoParam('HTTP_USER_AGENT');
         //any of these will return html
         /*RewriteCond %{HTTP_ACCEPT} !application/rdf\+xml.*(text/html|application/xhtml\+xml)
             RewriteCond %{HTTP_ACCEPT} text/html [OR]
             RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml [OR]
             RewriteCond %{HTTP_USER_AGENT} ^Mozilla/.*
             RewriteRule ^(.*)$ rdtest.php?type=html&uri=$1 [QSA,L]
           */
         if (!preg_match('%application/rdf\\+xml.*(text/html|application/xhtml\\+xml)%im', $accept) && (preg_match('%text/html%im', $accept) || preg_match('%application/xhtml\\+xml%im', $accept) || preg_match('%^Mozilla/.*%im', $agent) && preg_match('%\\*/\\*%im', $accept))) {
             $module = 'html';
         } elseif (preg_match('%application/rdf\\+xml%im', $accept)) {
             $module = 'rdf';
         } elseif (preg_match('%text/rdf+n3%im', $accept)) {
             $module = 'n3';
         } else {
             $module = sfConfig::get('default_conneg_type');
         }
     }
     $class = strtolower($this->getRequestParameter('class'));
     switch ($class) {
         case 'concept':
             switch ($module) {
                 case 'html':
                     /** @var Concept $concept **/
                     $concept = ConceptPeer::getConceptByUri($uri);
                     $this->forward404Unless($concept);
                     $uri = $request->getUriPrefix() . "/concept/show/id/" . $concept->getId() . ".html";
                     //redirect
                     $this->redirectIf($redir, $uri, 303);
                     //return the url
                     return $this->renderText($uri);
                     //forward
                     //$request->setParameter('vocabulary_id', $vocabulary->getId());
                     //$this->forward('concept','list');
                     break;
                 case 'rdf':
                     //redirect
                     $this->redirectIf($redir, $uri . '.rdf', 303);
                     //forward
                     $request->setParameter('type', 'api_uri');
                     $this->forwardIf($uri, 'rdf', 'showConcept');
                     break;
             }
             break;
         case 'concept_scheme':
         case 'conceptscheme':
             switch ($module) {
                 case 'html':
                     /** @var Vocabulary $vocabulary **/
                     $vocabulary = VocabularyPeer::retrieveByUri($uri);
                     $this->forward404Unless($vocabulary);
                     $uri = $request->getUriPrefix() . "/vocabulary/show/id/" . $vocabulary->getId() . ".html";
                     //redirect
                     $this->redirectIf($redir, $uri, 303);
                     //return the url
                     return $this->renderText($uri);
                     //forward
                     //$request->setParameter('vocabulary_id', $vocabulary->getId());
                     //$this->forward('concept','list');
                     break;
                 case 'rdf':
                     //redirect
                     $this->redirectIf($redir, $uri . '.rdf', 303);
                     //forward
                     $request->setParameter('type', 'api_uri');
                     $this->forwardIf($uri, 'rdf', 'showScheme');
                     break;
                 case 'xsd':
                     //reset the type
                     $request->setParameter('type', 'api_uri');
                     $this->forwardIf($uri, 'xml', 'showScheme');
                     break;
             }
             break;
         case 'schema':
             /** @var Schema $schema **/
             $schema = SchemaPeer::retrieveByUri($uri);
             $this->forward404Unless($schema);
             switch ($module) {
                 case 'html':
                     $uri = $request->getUriPrefix() . "/schema/show/id/" . $schema->getId() . ".html";
                     //redirect
                     $this->redirectIf($redir, $uri, 303);
                     //return the url
                     return $this->renderText($uri);
                     break;
                 case 'rdf':
                     //redirect
                     $this->redirectIf($redir, $uri . '.rdf', 303);
                     //forward
                     $request->setParameter('id', $schema->getId());
                     $this->forwardIf($uri, 'schema', 'showRdf');
                     break;
             }
             break;
         case 'schema_property':
         case 'schemaproperty':
             /** @var SchemaProperty $property **/
             $property = SchemaPropertyPeer::retrieveByUri($uri);
             $this->forward404Unless($property);
             switch ($module) {
                 case 'html':
                     $uri = $request->getUriPrefix() . "/schemaprop/show/id/" . $property->getId() . ".html";
                     //redirect
                     $this->redirectIf($redir, $uri, 303);
                     //return the url
                     return $this->renderText($uri);
                     break;
                 case 'rdf':
                     //redirect
                     $this->redirectIf($redir, $uri . '.rdf', 303);
                     //forward
                     $request->setParameter('id', $property->getId());
                     $this->forwardIf($uri, 'schemaprop', 'showRdf');
                     break;
             }
             break;
         default:
             $this->forward404();
     }
     return sfView::NONE;
 }
 /**
  * Executes show action
  *
  */
 public function executeShowScheme()
 {
     //build the complete URI
     $rootUri = $this->getRequest()->getUriPrefix() . '/';
     $schemeUri = $rootUri . 'uri/' . $this->getRequestParameter('scheme', '');
     $type = $this->getRequestParameter('type');
     $ts = strtotime($this->getRequestParameter('ts'));
     $this->timestamp = $ts;
     $version = $this->getRequestParameter('version');
     //$_SERVER['HTTP_ACCEPT'] = '';
     //$_SERVER['HTTP_USER_AGENT'] = '';
     switch ($type) {
         case 'xmlschema':
             //this URI HAS an 'id', HAS an 'rdf' suffix, and does NOT have a 'uri' action
             $id = $this->getRequestParameter('id');
             $vocabulary = VocabularyPeer::retrieveByPK($id);
             $this->getContext()->getResponse()->setStatusCode(200);
             break;
         case 'html':
             //this URI does NOT have an 'id', HAS an 'html' suffix, and HAS a 'uri' action
             //redirect to the base registry using the correct id for the scheme:
             //   http://metadataregistry.org/concept/list/vocabulary_id/16.html
             $vocabulary = VocabularyPeer::retrieveByUri($schemeUri);
             $this->forward404Unless($vocabulary);
             //redirect
             $this->getContext()->getResponse()->setStatusCode(303);
             $this->redirect($this->getRequest()->getUriPrefix() . '/concept/list/vocabulary_id/' . $vocabulary->getId() . '.html');
             break;
         case 'uri':
             //this URI does NOT have an 'id', HAS an 'rdf' suffix, and HAS a 'uri' action
             //$this->getContext()->getResponse()->setStatusCode(303);
             $vocabulary = VocabularyPeer::retrieveByUri($schemeUri);
             break;
         case 'api_uri':
             //this URI does NOT have an 'id', does NOT have an 'html' suffix, and comes from the API
             $uri = $this->getRequestParameter('uri', '');
             $vocabulary = VocabularyPeer::retrieveByUri($uri);
             break;
         default:
             //covers case of 'unknown' too
             //this URI does NOT have an 'id', does NOT have a suffix, and HAS a 'uri' action
             //do content negotiation
             if (true === strpos($_SERVER['HTTP_ACCEPT'], 'text/html') || true === strpos($_SERVER['HTTP_ACCEPT'], 'application/xhtml+xml') || 0 === strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla')) {
                 //we redirect to html
                 $vocabulary = VocabularyPeer::retrieveByUri($schemeUri);
                 $this->forward404Unless($vocabulary);
                 //redirect
                 $this->redirect($this->getRequest()->getUriPrefix() . '/concept/list/vocabulary_id/' . $vocabulary->getId() . '.html');
             } else {
                 $vocabulary = VocabularyPeer::retrieveByUri($schemeUri);
             }
             break;
     }
     $this->forward404Unless($vocabulary);
     $this->vocabulary = $vocabulary;
     //forward to the timeslice if there's a version
     if ($version && !$ts) {
         $c = new Criteria();
         $c->add(VocabularyHasVersionPeer::NAME, $version);
         $version = VocabularyHasVersionPeer::doSelectOne($c);
         $this->forward404Unless($version, 'Unknown version!');
         $ts = $version->getTimeslice('YmdHis');
         $this->getRequest()->getParameterHolder()->set('ts', $ts);
         $this->forward('xml', 'showScheme');
     }
     if (!$ts) {
         $this->concepts = $vocabulary->getConcepts();
     } else {
         $this->concepts = ConceptPeer::doSelectConceptByHistoryTimestamp($vocabulary->getid(), $ts);
     }
 }
 /**
  * Get the associated Vocabulary object
  *
  * @param      Connection Optional Connection object.
  * @return     Vocabulary The associated Vocabulary object.
  * @throws     PropelException
  */
 public function getVocabulary($con = null)
 {
     if ($this->aVocabulary === null && $this->scheme_id !== null) {
         // include the related Peer class
         include_once 'lib/model/om/BaseVocabularyPeer.php';
         $this->aVocabulary = VocabularyPeer::retrieveByPK($this->scheme_id, $con);
         /* The following can be used instead of the line above to
         		   guarantee the related object contains a reference
         		   to this object, but this level of coupling
         		   may be undesirable in many circumstances.
         		   As it can lead to a db query with many results that may
         		   never be used.
         		   $obj = VocabularyPeer::retrieveByPK($this->scheme_id, $con);
         		   $obj->addVocabularys($this);
         		 */
     }
     return $this->aVocabulary;
 }
function run_import_marc_vocabulary($task, $args)
{


    //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.');
    }

    if (count($args) < 3) {
        throw new Exception('You must provide a vocabulary id.');
    }

    //set the arguments
    $type          = strtolower($args[0]);
    $filePath      = $args[1];
    $id            = $args[2];
    $deleteMissing = (isset($args[3]) && ("-d" == $args[3]));

    //do some basic validity checks

    if (! in_array($type, array("schema", "vocab", "vocabulary"))) {
        throw new Exception('You must import into a schema or a vocab');
    }

    if ("vocabulary" == $type) {
        $type = "vocab";
    }

    if (! is_numeric($id)) {
        throw new Exception('You must provide a valid ID');
    }

    //does the file exist?
    if (! file_exists($filePath)) {
        throw new Exception('You must supply a valid file to import: ' . $filePath);
    }

    //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");
    }

    $fileType = $matches[1];

    //is the object a valid object?
    if ('vocab' == $type) {
        $vocabObj = VocabularyPeer::retrieveByPK($id);
        if (is_null($vocabObj)) {
            throw new Exception('Invalid vocabulary ID');
        }

        //set some defaults
        $baseDomain = $vocabObj->getBaseDomain();
        $language   = $vocabObj->getLanguage();
        $statusId   = $vocabObj->getStatusId();

        //get a skos property id map
        $skosMap = SkosPropertyPeer::getPropertyNames();

        //there has to be a hash or a slash
        $tSlash = preg_match('@(/$)@i', $vocabObj->getUri()) ? '' : '/';
        $tSlash = preg_match('/#$/', $vocabObj->getUri()) ? '' : $tSlash;
    } else {
        $schemaObj = SchemaPeer::retrieveByPK($id);
        if (is_null($schemaObj)) {
            throw new Exception('Invalid schema ID');
        }

        //set some defaults
        $baseDomain = $schemaObj->getUri();
        $language   = $schemaObj->getLanguage();
        $statusId   = $schemaObj->getStatusId();

        //get a element set property id map
        $profileId  = 1;
        $profile    = ProfilePeer::retrieveByPK($profileId);
        $elementMap = $profile->getAllProperties();

        //there has to be a hash or a slash
        $tSlash = preg_match('@(/$)@i', $baseDomain) ? '' : '/';
        $tSlash = preg_match('/#$/', $baseDomain) ? '' : $tSlash;
    }

    //     insert jon's user id
    $userId = 36;

    /* From here on the process is the same regardless of UI */

    //execute
    //     parse file to get the fields/columns and data
    $file = fopen($filePath, "r");
    if (! $file) {
        throw new Exception("Can't read supplied file");
    }

    //     check to see if file has been uploaded before
    //          check import history for file name
    $importHistory = FileImportHistoryPeer::retrieveByLastFilePath($filePath);
    //          if reimport
    //               get last import history for filename
    //               unserialize column map
    //               match column names to AP based on map
    //     look for matches in unmatched field/column names to AP (ideal)
    //     csv table of data --
    //          row1: parsed field names/column headers
    //          row2: select dropdown with available fields from object AP (pre-select known matches)
    //                each select identified by column number
    //          row3: display datatype of selected field (updated dynamically when field selected)
    //          row4-13: first 10 rows of parsed data from file
    //     require a column that can match to 'URI' (maybe we'll allow an algorithm later)
    //     require columns that are required by AP
    //     on reimport there should be a flag to 'delete missing properties' from the current data
    //     note: at some point there will be a reimport process that allows URI changing
    //          this will require that there be an OMR identifier embedded in the incoming data

    switch ($fileType) {
        case "csv":
            try {
                $reader = new aCsvReader($filePath);
            } catch(Exception $e) {
                throw new Exception("Not a happy CSV file!");
            }

            if ('vocab' == $type) {
                // Get array of heading names found
                $headings = $reader->getHeadings();
                $fields   = ConceptPeer::getFieldNames();

                //set the map
                //      $map[] = array("property" => "Uri", "column" => "URILocal");
                //      $map[] = array("property" => "prefLabel", "column" => "skos:prefLabel");
                //      $map[] = array("property" => "definition", "column" => "skos:definition");
                //      $map[] = array("property" => "notation", "column" => "skos:notation");
                //      $map[] = array("property" => "scopeNote", "column" => "skos:scopeNote");

                $map = array(
                  "uri"        => "URILocal",
                  "prefLabel"  => "skos:prefLabel",
                  "definition" => "skos:definition",
                  "notation"   => "skos:notation",
                  "scopeNote"  => "skos:scopeNote"
                );

                $rows = 0;

                //executeImport:

                //    serialize the column map
                try {
                    while ($row = $reader->getRow()) {
                        $rows ++;
                        //        lookup the URI (or the OMR ID if available) for a match
                        $uri        = $baseDomain . $row[$map["uri"]];
                        $concept    = ConceptPeer::getConceptByUri($uri);
                        $updateTime = time();
                        $language   = (isset($map['language'])) ? $row[$map['language']] : $vocabObj->getLanguage();

                        if (! $concept) {
                            //          create a new concept or element
                            $concept = new Concept();
                            $concept->setVocabulary($vocabObj);
                            $concept->setUri($uri);
                            /**
                             * @todo Need to handle updates for topconcept here, just like language
                             **/
                            $concept->setIsTopConcept(false);
                            $concept->updateFromRequest(
                                    $userId,
                                      fixMarcEncoding(rtrim($row[$map['prefLabel']])),
                                      $language,
                                      $statusId
                            );
                        } //don't update the concept if the preflabel matches
                        else if ($row[$map['prefLabel']] != $concept->getPrefLabel()) {
                            $concept->updateFromRequest($userId, fixMarcEncoding(rtrim($row[$map['prefLabel']])));
                        }

                        //there needs to be a language to lookup the properties unless it's an objectProperty
                        $rowLanguage = (isset($map['language'])) ? $row[$map['language']] : $concept->getLanguage();

                        foreach ($map as $key => $value) {
                            //we skip because we already did them
                            if (! in_array($key, array('uri', 'prefLabel', 'language'))) {
                                $skosId = $skosMap[$key];
                                //check to see if the property already exists
                                $property =
                                  ConceptPropertyPeer::lookupProperty($concept->getId(), $skosId, $rowLanguage);

                                //create a new property for each unmatched column
                                if (! empty($row[$value])) {
                                    if (! $property) {
                                        $property = new ConceptProperty();
                                        $property->setCreatedUserId($userId);
                                        $property->setConceptId($concept->getId());
                                        $property->setCreatedAt($updateTime);
                                        $property->setSkosPropertyId($skosId);
                                    }

                                    if (($row[$value] != $property->getObject()) ||
                                        ($rowLanguage != $property->getLanguage())
                                    ) {
                                        /**
                                         * @todo We need a check here for skos objectproperties and handle differently
                                         **/
                                        if ($rowLanguage != $property->getLanguage()) {
                                            $property->setLanguage($rowLanguage);
                                        }
                                        if ($row[$value] != $property->getObject()) {
                                            $property->setObject(fixMarcEncoding(rtrim($row[$value])));
                                        }
                                        $property->setUpdatedUserId($userId);
                                        $property->setUpdatedAt($updateTime);
                                        $property->save();
                                    }
                                } //the row value is empty
                                else if ($deleteMissing && $property) {
                                    $property->delete();
                                }
                            }
                        }

                        //          else
                        //               lookup and update concept or element
                        //               lookup and update each property
                        //          update the history for each property, action is 'import', should be a single timestamp for all (this should be automatic)
                        //          if 'delete missing properties' is true
                        //               delete each existing, non-required property that wasn't updated by the import
                    }
                } catch(Exception $e) {
                    //          catch
                    //            if there's an error of any kind, write to error log and continue
                    echo "Error on row: " . $rows . ", " . $uri . "\n" . $e . "\n";
                    continue;
                }
                $objects = $vocabObj->countConcepts();
            } else //it's an element set
            {
                $map  = array(
                  "uri"        => "uriLocalPart",
                  "name"       => "reg:name",
                  "definition" => "skos:definition",
                  "label"      => "rdfs:label",
                  "note"       => array("tag" => "tagCap", "ind1" => "ind1Cap", "ind2" => "ind2Cap", "sub" => "subCap")
                );
                $rows = 0;

                //executeImport:
                //    serialize the column map
                try {
                    while ($row = $reader->getRow()) {
                        //        lookup the URI (or the OMR ID if available) for a match

                        //There always has to be a URI on either update or create
                        if (! isset($row[$map["uri"]])) {
                            throw new Exception('Missing URI for row: ' . $reader->getRowCount());
                            continue;
                        }

                        $rows ++;
                        $uri         = $baseDomain . $tSlash . $row[$map["uri"]];
                        $property    = SchemaPropertyPeer::retrieveByUri($uri);
                        $updateTime  = time();
                        $rowLanguage = (isset($map['language'])) ? $row[$map['language']] : $language;
                        $rowStatusId = (isset($map['status'])) ? $row[$map['status']] : $statusId;

                        if (! $property) {
                            //          create a new property
                            /** @var SchemaProperty * */
                            $property = new SchemaProperty();
                            $property->setSchema($schemaObj);
                            $property->setUri($uri);
                            $property->setCreatedUserId($userId);
                            $property->setCreatedAt($updateTime);
                        }

                        $property->setLanguage($rowLanguage);
                        $property->setStatusId($rowStatusId);
                        $property->setUpdatedUserId($userId);
                        $property->setUpdatedAt($updateTime);

                        if (isset($row[$map["label"]])) {
                            $property->setLabel($row[$map["label"]]);
                        }

                        if (isset($row[$map["name"]])) {
                            $property->setName($row[$map["name"]]);
                        }

                        if (isset($row[$map["definition"]])) {
                            $property->setDefinition($row[$map["definition"]]);
                        }

                        if (is_array($map["note"])) {
                            $note = '';
                            foreach ($map["note"] as $key => $value) {
                                $caption = ! empty($row[$value]) ? " (" . $row[$value] . ")" : ' (no caption)';
                                $note .= ! empty($row[$key]) ? $key . ": " . $row[$key] . $caption . "<br />" : "";
                            }
                            $property->setNote($note);
                        } else {
                            if (isset($row[$map["note"]])) {
                                $property->setNote($row[$map["note"]]);
                            }
                        }
                        $property->saveSchemaProperty($userId);

                        /**
                         * @todo Need to handle domain and range
                         **/

                        foreach ($map as $key => $value) {
                            //we skip because we already did them
                            if (! in_array(
                              $key,
                              array('uri', 'status', 'language', 'label', 'name', 'definition', 'comment', 'note')
                            )
                            ) {
                                $elementId = $elementMap[$key];
                                //check to see if the property already exists
                                //note that this also checks the object value as well, so there's no way to update or delete an existing triple
                                //the sheet would have to conatin the identifier for the triple
                                $element = SchemaPropertyElementPeer::lookupElement(
                                                                    $schemaObj->getId(),
                                                                      $elementId,
                                                                      $map[$value]
                                );

                                //create a new property for each unmatched column
                                if (! empty($row[$value])) {
                                    if (! $element) {
                                        $element = new SchemaPropertyElement();
                                        $element->setCreatedUserId($userId);
                                        $element->setCreatedAt($updateTime);
                                        $element->setProfilePropertyId($elementId);
                                    }

                                    if (($row[$value] != $element->getObject()) ||
                                        ($rowLanguage != $element->getLanguage())
                                    ) {
                                        /**
                                         * @todo We need a check here for objectproperties and handle differently
                                         **/
                                        if ($rowLanguage != $element->getLanguage()) {
                                            $element->setLanguage($rowLanguage);
                                        }
                                        if ($row[$value] != $element->getObject()) {
                                            $element->setObject($row[$value]);
                                        }
                                        $element->setUpdatedUserId($userId);
                                        $element->setUpdatedAt($updateTime);
                                        $element->save();
                                    }
                                } //the row value is empty
                                else if ($deleteMissing && $element) {
                                    $element->delete();
                                }
                            }
                        }

                        //          else
                        //               lookup and update concept or element
                        //               lookup and update each property
                        //          update the history for each property, action is 'import', should be a single timestamp for all (this should be automatic)
                        //          if 'delete missing properties' is true
                        //               delete each existing, non-required property that wasn't updated by the import
                    }
                } catch(Exception $e) {
                    //          catch
                    //            if there's an error of any kind, write to error log and continue
                    echo "Error on row: " . $rows . ", " . $uri . "\n" . $e . "\n";
                    continue;
                }
                $objects = $schemaObj->countSchemaPropertys();
            }
            //     save the import history file (match timestamp to history entries)
            break;
        case "json":
            break;
        case "rdf":
            break;
        case "xml":
            break;
        default:
    }

    /* output to stdout*/
    //          number of objects imported (link to history, filtered on timestamp of import)
    echo "File:" . $filePath . ";\n     Objects imported: " . $objects . "; Rows read: " . $rows . "\n";
    //          number of errors (link to error log)

}
示例#11
0
    public function setVocabularyParams()
    {
        //use the prolog to look up correct resources in the database
        if ('schema' == $this->type) {
            $vocabulary = \SchemaPeer::retrieveByPK($this->vocabId);
        } else {
            /** @var $vocabulary \Vocabulary */
            $vocabulary = \VocabularyPeer::retrieveByPK($this->vocabId);
        }
        if ( ! $vocabulary) {
            //TODO: turn this into a real error message and exit gracefully
            exit( "No vocab!!!!!" );
        }
        $this->vocabulary = $vocabulary;

        //if we didn't set it from the constructor we set default status from the vocab
        if ( ! $this->status) {
            $this->prolog['defaults']['statusId'] = $this->getStatusId($vocabulary->getStatusId());
        } else {
            $this->prolog['defaults']['statusId'] = $this->status;
        }

        //if the prolog never set the default language from the spreadsheet, set it here
        if ( ! isset( $this->prolog['defaults']['lang'] )) {
            $this->prolog['defaults']['lang'] = $vocabulary->getLanguage();
        }

        //if it hasn't been set already, set the userId from the vocabulary (which does a little bit more work)
        if ( ! $this->userId) {
            $this->setUserId();
        }
    }
示例#12
0
    public function perform($args)
    {
        list($schemaId, $filePath, $importId, $environment, $type) = $args;
        // Set up environment for this job
        define('SF_ROOT_DIR', realpath(dirname(__file__) . '/../../../..'));
        define('SF_APP', 'frontend');
        define('SF_ENVIRONMENT', $environment);
        define('SF_DEBUG', false);

//initialize composer
        require_once(SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php');
// initialize symfony
        require_once(SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR
                     . 'config' . DIRECTORY_SEPARATOR . 'config.php');
// initialize database manager
        $databaseManager = new \sfDatabaseManager();
        $databaseManager->initialize();

        $import = new ImportVocab($type, $filePath, $schemaId);
        try {
            $fileImportHistory = \FileImportHistoryPeer::retrieveByPK($importId);
        } catch (\PropelException $e) {
            //exit the job with an error
            throw $e;
        }

        try {
            if ('schema' == $type) {
                $schema = \SchemaPeer::retrieveByPK($schemaId);
            } else {
                $schema = \VocabularyPeer::retrieveByPK($schemaId);
            }
        } catch (\PropelException $e) {
            //exit the job with an error
            throw $e;
        }

        // Perform some job
        $import->importId = $importId;
        //todo update the prefixes table with prefixes
        //todo update the schema table with prefixes
        $schemaPrefixes = $schema->getPrefixes();
        $countSchemaPrefixes = count($schemaPrefixes);
        /** @var string[] $importPrefixes */
        $importPrefixes = $import->prolog['prefix'];
        foreach ($importPrefixes as $prefix => $url) {
            if (trim($prefix)) {
                if ( ! array_key_exists($prefix, $schemaPrefixes)) {
                    $schemaPrefixes[$prefix] = $url;
                }
            }
        }
        if (count($schemaPrefixes) != $countSchemaPrefixes)
        {
            $schema->setPrefixes($schemaPrefixes);
            $schema->save();
        }
        try {

        $prolog = $import->processProlog();
        $import->processData();
        $fileImportHistory->setResults($import->results);
        $fileImportHistory->setMap($import->mapping);
        $fileImportHistory->setTotalProcessedCount( $import->DataWorkflowResults->getTotalProcessedCount());
        $fileImportHistory->setErrorCount($import->DataWorkflowResults->getErrorCount());
        $fileImportHistory->setSuccessCount($import->DataWorkflowResults->getSuccessCount());
        $fileImportHistory->setResults('Your file has been imported. It took us: ' . $import->DataWorkflowResults->getElapsed()->format("%h hours; %i minutes; %s seconds"));
        $fileImportHistory->save();
        } catch (\Exception $e) {
            $fileImportHistory->setResults("There was an error processing the import. Message: " . $e->getMessage());
            $fileImportHistory->save();
            throw $e;
        }
        $agentId = ($fileImportHistory->getSchema()) ? $fileImportHistory->getSchema()->getAgentId() : $fileImportHistory->getVocabulary()->getAgentId();
        $newFilePath = \sfConfig::get( 'sf_repos_dir' ) . DIRECTORY_SEPARATOR .
                       'agents' . DIRECTORY_SEPARATOR .
                       $agentId . DIRECTORY_SEPARATOR .
                       $fileImportHistory->getSourceFileName();
        $request = new \myWebRequest();
        $result = $request->moveToRepo($filePath, $newFilePath);
        $schema = \SchemaPeer::retrieveByPK($schemaId);
        if ($schema) {
            $schema->setUpdatedAt(time());
            $schema->setUpdatedUserId($import->userId);
            $schema->save();
        }

        unset ($import);
        unset ($request);
        unset($databaseManager);

    }
 /**
  * Gets the related vocabulary object
  *
  * @return Vocabulary
  */
 public function getRelatedScheme()
 {
     return VocabularyPeer::retrieveByPK($this->scheme_id);
 }
 /**
  * description
  *
  * @return Vocabulary Current vocabulary object
  * @param  integer $vocabId
  */
 public static function setLatestVocabulary($vocabId)
 {
     $vocabObj = VocabularyPeer::retrieveByPK($vocabId);
     if ($vocabObj) {
         sfContext::getInstance()->getUser()->setCurrentVocabulary($vocabObj);
     }
     return $vocabObj;
 }
 public function executePublish()
 {
     //send the id to the publishing class
     if (!$this->vocabulary) {
         $this->vocabulary = VocabularyPeer::retrieveByPK($this->getRequestParameter('id'));
     }
     $vocabulary = $this->vocabulary;
     //todo: these should be configured by the publish form
     $uselanguageMap = true;
     $useLanguage = "";
     $cLang = null;
     ini_set('memory_limit', '640M');
     ini_set('max_execution_time', 600);
     $repo = $vocabulary->getRepo();
     $mime = "jsonld";
     $vocabDir = parse_url($vocabulary->getNamespace(), PHP_URL_PATH);
     if (!$vocabulary->getRepo() || !$vocabDir) {
         $this->setFlash('error', 'This Vocabulary has NOT been published. We couldn\'t parse the file names from the uri.</br>Make sure that you\'ve set the the Git repository and have a valid namespace');
         $this->redirect($this->getRequest()->getUriPrefix() . '/vocabulary/show/id/' . $vocabulary->getId() . '.html');
     }
     $file = rtrim($vocabDir, "/") . "." . $mime;
     $repoRoot = SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'web' . DIRECTORY_SEPARATOR . 'repos' . DIRECTORY_SEPARATOR . "agents" . DIRECTORY_SEPARATOR . $vocabulary->getAgentId() . DIRECTORY_SEPARATOR . $repo;
     $filesystem = new Filesystem(new Adapter($repoRoot), new Cache());
     $filePath = $repoRoot . DIRECTORY_SEPARATOR . $mime . DIRECTORY_SEPARATOR . $file;
     //TODO: create an alias file
     $aliasPath = "alias" . DIRECTORY_SEPARATOR . $vocabDir;
     //make sure the path is created
     $filesystem->put($mime . DIRECTORY_SEPARATOR . $file, '');
     //open a file for writing the complete vocabulary file
     $vocabFile = fopen($filePath, 'w');
     $jsonLdService = new jsonldService($vocabulary);
     fwrite($vocabFile, $jsonLdService->getJsonLd());
     fclose($vocabFile);
     //TODO: generate RDF/XML and save
     //TODO: generate other flavours of RDF using EasyRDF and save
     //if publish was successful
     $this->setFlash('notice', 'This Vocabulary has been published');
     $this->redirect($this->getRequest()->getUriPrefix() . '/vocabulary/show/id/' . $vocabulary->getId() . '.html');
 }
示例#16
0
if (isset($argv[2])) {
    $_SERVER['SERVER_NAME'] = $argv[2];
}
require_once dirname(__FILE__) . '/../config/arc_config.php';
/* instantiation */
//creates a special registry-extended store, using a custom ARC2::getStore
$store = new Reg_ARC2_Store($arc_config, new stdClass());
if (!$store->isSetup()) {
    $store->setUp();
}
//get the batch log
$batchTime = time();
$batchDescription = "Updating 3store - " . $_SERVER['HTTP_HOST'] . ": " . $_SERVER['SERVER_NAME'];
$batchLog = new BatchPeer();
//get the vocabularies
$foo = new VocabularyPeer();
$selectCriteria = new Criteria(VocabularyPeer::DATABASE_NAME);
$rs = $foo->doSelect($selectCriteria);
$batchObjectType = "vocabulary";
$result = $batchLog->createBatchRecord($batchTime, $batchDescription, $batchObjectType, "Starting Vocabulary run", "init");
//foreach vocabulary
/** @var Vocabulary $vocabulary **/
foreach ($rs as $vocabulary) {
    $query = 'LOAD <http://' . $_SERVER['HTTP_HOST'] . '/vocabulary/show/id/' . $vocabulary->getId() . '.rdf> INTO <' . $vocabulary->getUri() . '>';
    $result = $batchLog->createBatchRecord($batchTime, $batchDescription, $batchObjectType, $query, "query", $vocabulary->getId(), $vocabulary->getUri());
    $store->clearErrors();
    $rs = $store->query($query);
    if ($errs = $store->getErrors()) {
        foreach ($errs as $key => $value) {
            $result = $batchLog->createBatchRecord($batchTime, $batchDescription, $batchObjectType, $value, "error", $vocabulary->getId(), $vocabulary->getUri());
        }
示例#17
0
 /**
  * If this collection has already been initialized with
  * an identical criteria, it returns the collection.
  * Otherwise if this Agent is new, it will return
  * an empty collection; or if this Agent has previously
  * been saved, it will retrieve related Vocabularys from storage.
  *
  * This method is protected by default in order to keep the public
  * api reasonable.  You can provide public methods for those you
  * actually need in Agent.
  */
 public function getVocabularysJoinProfile($criteria = null, $con = null)
 {
     // include the Peer class
     include_once 'lib/model/om/BaseVocabularyPeer.php';
     if ($criteria === null) {
         $criteria = new Criteria();
     } elseif ($criteria instanceof Criteria) {
         $criteria = clone $criteria;
     }
     if ($this->collVocabularys === null) {
         if ($this->isNew()) {
             $this->collVocabularys = array();
         } else {
             $criteria->add(VocabularyPeer::AGENT_ID, $this->getId());
             $this->collVocabularys = VocabularyPeer::doSelectJoinProfile($criteria, $con);
         }
     } else {
         // the following code is to determine if a new query is
         // called for.  If the criteria is the same as the last
         // one, just return the collection.
         $criteria->add(VocabularyPeer::AGENT_ID, $this->getId());
         if (!isset($this->lastVocabularyCriteria) || !$this->lastVocabularyCriteria->equals($criteria)) {
             $this->collVocabularys = VocabularyPeer::doSelectJoinProfile($criteria, $con);
         }
     }
     $this->lastVocabularyCriteria = $criteria;
     return $this->collVocabularys;
 }
 /**
  * Selects a collection of ConceptPropertyHistory objects pre-filled with all related objects except FileImportHistory.
  *
  * @return array Array of ConceptPropertyHistory objects.
  * @throws PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function doSelectJoinAllExceptFileImportHistory(Criteria $c, $con = null)
 {
     $c = clone $c;
     // Set the correct dbName if it has not been overridden
     // $c->getDbName() will return the same object if not set to another value
     // so == check is okay and faster
     if ($c->getDbName() == Propel::getDefaultDB()) {
         $c->setDbName(self::DATABASE_NAME);
     }
     ConceptPropertyHistoryPeer::addSelectColumns($c);
     $startcol2 = ConceptPropertyHistoryPeer::NUM_COLUMNS - ConceptPropertyHistoryPeer::NUM_LAZY_LOAD_COLUMNS + 1;
     ConceptPropertyPeer::addSelectColumns($c);
     $startcol3 = $startcol2 + ConceptPropertyPeer::NUM_COLUMNS;
     ConceptPeer::addSelectColumns($c);
     $startcol4 = $startcol3 + ConceptPeer::NUM_COLUMNS;
     VocabularyPeer::addSelectColumns($c);
     $startcol5 = $startcol4 + VocabularyPeer::NUM_COLUMNS;
     SkosPropertyPeer::addSelectColumns($c);
     $startcol6 = $startcol5 + SkosPropertyPeer::NUM_COLUMNS;
     VocabularyPeer::addSelectColumns($c);
     $startcol7 = $startcol6 + VocabularyPeer::NUM_COLUMNS;
     ConceptPeer::addSelectColumns($c);
     $startcol8 = $startcol7 + ConceptPeer::NUM_COLUMNS;
     StatusPeer::addSelectColumns($c);
     $startcol9 = $startcol8 + StatusPeer::NUM_COLUMNS;
     UserPeer::addSelectColumns($c);
     $startcol10 = $startcol9 + UserPeer::NUM_COLUMNS;
     $c->addJoin(ConceptPropertyHistoryPeer::CONCEPT_PROPERTY_ID, ConceptPropertyPeer::ID);
     $c->addJoin(ConceptPropertyHistoryPeer::CONCEPT_ID, ConceptPeer::ID);
     $c->addJoin(ConceptPropertyHistoryPeer::VOCABULARY_ID, VocabularyPeer::ID);
     $c->addJoin(ConceptPropertyHistoryPeer::SKOS_PROPERTY_ID, SkosPropertyPeer::ID);
     $c->addJoin(ConceptPropertyHistoryPeer::SCHEME_ID, VocabularyPeer::ID);
     $c->addJoin(ConceptPropertyHistoryPeer::RELATED_CONCEPT_ID, ConceptPeer::ID);
     $c->addJoin(ConceptPropertyHistoryPeer::STATUS_ID, StatusPeer::ID);
     $c->addJoin(ConceptPropertyHistoryPeer::CREATED_USER_ID, UserPeer::ID);
     $rs = BasePeer::doSelect($c, $con);
     $results = array();
     while ($rs->next()) {
         $omClass = ConceptPropertyHistoryPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj1 = new $cls();
         $obj1->hydrate($rs);
         $omClass = ConceptPropertyPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj2 = new $cls();
         $obj2->hydrate($rs, $startcol2);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj2 = $temp_obj1->getConceptProperty();
             //CHECKME
             if ($temp_obj2->getPrimaryKey() === $obj2->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj2->addConceptPropertyHistory($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj2->initConceptPropertyHistorys();
             $obj2->addConceptPropertyHistory($obj1);
         }
         $omClass = ConceptPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj3 = new $cls();
         $obj3->hydrate($rs, $startcol3);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj3 = $temp_obj1->getConceptRelatedByConceptId();
             //CHECKME
             if ($temp_obj3->getPrimaryKey() === $obj3->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj3->addConceptPropertyHistoryRelatedByConceptId($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj3->initConceptPropertyHistorysRelatedByConceptId();
             $obj3->addConceptPropertyHistoryRelatedByConceptId($obj1);
         }
         $omClass = VocabularyPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj4 = new $cls();
         $obj4->hydrate($rs, $startcol4);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj4 = $temp_obj1->getVocabularyRelatedByVocabularyId();
             //CHECKME
             if ($temp_obj4->getPrimaryKey() === $obj4->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj4->addConceptPropertyHistoryRelatedByVocabularyId($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj4->initConceptPropertyHistorysRelatedByVocabularyId();
             $obj4->addConceptPropertyHistoryRelatedByVocabularyId($obj1);
         }
         $omClass = SkosPropertyPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj5 = new $cls();
         $obj5->hydrate($rs, $startcol5);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj5 = $temp_obj1->getSkosProperty();
             //CHECKME
             if ($temp_obj5->getPrimaryKey() === $obj5->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj5->addConceptPropertyHistory($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj5->initConceptPropertyHistorys();
             $obj5->addConceptPropertyHistory($obj1);
         }
         $omClass = VocabularyPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj6 = new $cls();
         $obj6->hydrate($rs, $startcol6);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj6 = $temp_obj1->getVocabularyRelatedBySchemeId();
             //CHECKME
             if ($temp_obj6->getPrimaryKey() === $obj6->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj6->addConceptPropertyHistoryRelatedBySchemeId($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj6->initConceptPropertyHistorysRelatedBySchemeId();
             $obj6->addConceptPropertyHistoryRelatedBySchemeId($obj1);
         }
         $omClass = ConceptPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj7 = new $cls();
         $obj7->hydrate($rs, $startcol7);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj7 = $temp_obj1->getConceptRelatedByRelatedConceptId();
             //CHECKME
             if ($temp_obj7->getPrimaryKey() === $obj7->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj7->addConceptPropertyHistoryRelatedByRelatedConceptId($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj7->initConceptPropertyHistorysRelatedByRelatedConceptId();
             $obj7->addConceptPropertyHistoryRelatedByRelatedConceptId($obj1);
         }
         $omClass = StatusPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj8 = new $cls();
         $obj8->hydrate($rs, $startcol8);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj8 = $temp_obj1->getStatus();
             //CHECKME
             if ($temp_obj8->getPrimaryKey() === $obj8->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj8->addConceptPropertyHistory($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj8->initConceptPropertyHistorys();
             $obj8->addConceptPropertyHistory($obj1);
         }
         $omClass = UserPeer::getOMClass();
         $cls = Propel::import($omClass);
         $obj9 = new $cls();
         $obj9->hydrate($rs, $startcol9);
         $newObject = true;
         for ($j = 0, $resCount = count($results); $j < $resCount; $j++) {
             $temp_obj1 = $results[$j];
             $temp_obj9 = $temp_obj1->getUser();
             //CHECKME
             if ($temp_obj9->getPrimaryKey() === $obj9->getPrimaryKey()) {
                 $newObject = false;
                 $temp_obj9->addConceptPropertyHistory($obj1);
                 break;
             }
         }
         if ($newObject) {
             $obj9->initConceptPropertyHistorys();
             $obj9->addConceptPropertyHistory($obj1);
         }
         $results[] = $obj1;
     }
     return $results;
 }
示例#19
0
     $tab = false;
     break;
 case 'vocabulary':
     $showBc = true;
     $showVocabularyBc = true;
     if ('import' == $filter) {
         $import = FileImportHistoryPeer::retrieveByPK($paramId);
         if ($import) {
             $id = $import->getSchemaId();
             $schema = SchemaPeer::retrieveByPK($id);
         }
     }
     if (!isset($vocabulary)) {
         $id = 'show' == $action ? $sf_params->get('id') : $paramId;
         if ($id) {
             $vocabulary = VocabularyPeer::retrieveByPK($id);
         }
     }
     $objectId = $vocabulary->getID();
     break;
 case 'schema':
     $showBc = true;
     $showSchemaBc = true;
     if ('import' == $filter) {
         $import = FileImportHistoryPeer::retrieveByPK($paramId);
         if ($import) {
             $id = $import->getSchemaId();
             $schema = SchemaPeer::retrieveByPK($id);
         }
     }
     if (!isset($schema)) {
 /**
  * Retrieve multiple objects by pkey.
  *
  * @param      array $pks List of primary keys
  * @param      Connection $con the connection to use
  * @throws     PropelException Any exceptions caught during processing will be
  *		 rethrown wrapped into a PropelException.
  */
 public static function retrieveByPKs($pks, $con = null)
 {
     if ($con === null) {
         $con = Propel::getConnection(self::DATABASE_NAME);
     }
     $objs = null;
     if (empty($pks)) {
         $objs = array();
     } else {
         $criteria = new Criteria();
         $criteria->add(VocabularyPeer::ID, $pks, Criteria::IN);
         $objs = VocabularyPeer::doSelect($criteria, $con);
     }
     return $objs;
 }
 /**
  * gets the current schema object
  *
  * @return schema current schema object
  */
 public function getCurrentSchema()
 {
     $schema = false;
     if ($this->getRequestParameter('id')) {
         $this->file_import_history = FileImportHistoryPeer::retrieveByPk($this->getRequestParameter('id'));
         if (isset($this->file_import_history)) {
             $schema = $this->file_import_history->getSchema();
             if ($this->file_import_history->getSchemaId()) {
                 $schema = $this->file_import_history->getSchema();
             }
             if ($this->file_import_history->getVocabularyId()) {
                 $schema = $this->file_import_history->getVocabulary();
             }
         }
     }
     if ($this->getRequestParameter('schema_id')) {
         $schema = SchemaPeer::retrieveByPk($this->getRequestParameter('schema_id'));
         $this->type = 'schema';
     }
     if ($this->getRequestParameter('vocabulary_id')) {
         $schema = VocabularyPeer::retrieveByPk($this->getRequestParameter('vocabulary_id'));
         $this->type = 'vocabulary';
     }
     if ($schema) {
         myActionTools::setLatestSchema($schema->getId());
     }
     $this->forward404Unless($schema, 'No filter has been selected.');
     $this->schema = $schema;
     $this->schemaID = $schema->getId();
     return $schema;
 }
 public function _before(FunctionalTester $I)
 {
     $this->vocab = \VocabularyPeer::retrieveByPK($this->valueVocabularyId);
 }
示例#23
0
    public function retrievePrefixes()
    {
        $prefixes = $this->schema->getPrefixes();
        if ('schema' === $this->type) {
            $namespaces = \SchemaPropertyElementPeer::getNamespaceList($this->schema->getId());
        } else {
            $namespaces = \VocabularyPeer::getNamespaceList($this->schema->getId());
        }
        //check the retrieved namespaces for a match to existing prefixes
        foreach ($namespaces as $uri) {
            //if we find the uri in existing schema prefixes, move on
            if ($prefixes and array_search($uri, $prefixes) !== false) {
                continue;
            }
            //look for it in Prefixes table
            $namespacePrefix = \PrefixPeer::findByUri($uri);
            if ($namespacePrefix) {
                //add it to the prefix array
                $prefixes[ $namespacePrefix->getPrefix() ] = $uri;
            } //check it against the schema token
            elseif (trim($uri, "/#") == trim($this->schema->getUri(), "#/")) {
                $prefixes[ $this->schema->getToken() ] = $uri;
            } else {
                $prefixes[ ] = $uri;
            }
        }
        if (empty($prefixes)) {
            $prefixes = $this->getDefaultPrefix();
        }

        return $prefixes;
    }
示例#24
0
 *
 * @package    registry
 * @subpackage batch
 * @version    $Id$
 */
define('SF_ROOT_DIR', realpath(dirname(__FILE__) . '/..'));
define('SF_APP', 'frontend');
define('SF_ENVIRONMENT', 'dev');
define('SF_DEBUG', 1);
require_once SF_ROOT_DIR . DIRECTORY_SEPARATOR . 'apps' . DIRECTORY_SEPARATOR . SF_APP . DIRECTORY_SEPARATOR . 'config' . DIRECTORY_SEPARATOR . 'config.php';
// initialize database manager
$databaseManager = new sfDatabaseManager();
$databaseManager->initialize();
// batch process here
//get the vocabularies
$foo = new VocabularyPeer();
$selectCriteria = new Criteria(VocabularyPeer::DATABASE_NAME);
$rs = $foo->doSelect($selectCriteria);
$vocabCount = $foo->doCount($selectCriteria);
$vocabCounter = 0;
//foreach vocabulary
/** @var Vocabulary $vocavulary **/
foreach ($rs as $vocabulary) {
    $vocabCounter++;
    //get the vocabulary registrar
    $userCriteria = new Criteria();
    $userCriteria->add(VocabularyHasUserPeer::IS_REGISTRAR_FOR, true);
    $users = $vocabulary->getVocabularyHasUsersJoinUser($userCriteria);
    if (count($users)) {
        /**  @var VocabularyHasUser $user  */
        $user = $users[0]->getUser();
/**
 * @param $task
 * @param $args
 *
 * Arg[0] is one of "schema" (element set), "vocab" or "vocabulary"
 * arg[1] is the vocabulary name.
 *        The file type is determined by the extension and must be one of "json", "rdf", "csv", "xml"
 * arg[2] is the vocabulary id
 * arg[3] is the batch id
 * arg[4] [optional] is -d
 *
 * @throws Exception
 */
function run_import_vocabulary($task, $args)
{
    //xdebug_break();

    //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.');
    }

    if (count($args) < 3) {
        throw new Exception('You must provide a vocabulary id.');
    }

    //set the arguments
    $type          = strtolower($args[0]);
    $filePath      = $args[1];
    $vocabId       = $args[2];
    $batchId       = isset($args[3]) ? $args[3] : "";
    $deleteMissing = (isset($args[4]) && ("-d" == $args[4]));

    //do some basic validity checks

    if (! in_array(
      $type,
      array(
        "schema",
        "vocab",
        "vocabulary"
      )
    )
    ) {
        throw new Exception('You must import into a schema or a vocab');
    }

    if ("vocabulary" == $type) {
        $type = "vocab";
    }

    if (! is_numeric($vocabId)) {
        throw new Exception('You must provide a valid ID');
    }

    //does the file exist?
    if (! file_exists($filePath)) {
        //default to the site upload path
        $filePath = $GLOBALS['uploadPath'] . $filePath;
        if (! file_exists($filePath)) {
        throw new Exception('You must supply a valid file to import: ' . $filePath);
        }
    }

    //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");
    }

    $fileType = $matches[1];

    //is the object a valid object?
    if ('vocab' == $type) {
        $vocabObj = VocabularyPeer::retrieveByPK($vocabId);
        if (is_null($vocabObj)) {
            throw new Exception('Invalid vocabulary ID');
        }

        //set some defaults
        $baseDomain = $vocabObj->getBaseDomain();
        $language   = $vocabObj->getLanguage();
        $statusId   = $vocabObj->getStatusId();
        $userId     = $vocabObj->getCreatedUserId();
        $agentId    = $vocabObj->getAgentId();

        //get a skos property id map
        $skosMap = SkosPropertyPeer::getPropertyNames();

        //there has to be a hash or a slash
        $tSlash = preg_match('@(/$)@i', $vocabObj->getUri()) ? '' : '/';
        $tSlash = preg_match('/#$/', $vocabObj->getUri()) ? '' : $tSlash;
    } else {
        $import               = new ImportVocab($type, $filePath, $vocabId);
    }

    /* From here on the process is the same regardless of UI */
    //     check to see if file has been uploaded before
    //          check import history for file name
    $importHistory = FileImportHistoryPeer::retrieveByLastFilePath($filePath);
    //          if reimport
    //               get last import history for filename
    //               unserialize column map
    //               match column names to AP based on map
    //     look for matches in unmatched field/column names to AP (ideal)
    //     csv table of data --
    //          row1: parsed field names/column headers
    //          row2: select dropdown with available fields from object AP (pre-select known matches)
    //                each select identified by column number
    //          row3: display datatype of selected field (updated dynamically when field selected)
    //          row4-13: first 10 rows of parsed data from file
    //     require a column that can match to 'URI' (maybe we'll allow an algorithm later)
    //     require columns that are required by AP
    //     on reimport there should be a flag to 'delete missing properties' from the current data
    //     note: at some point there will be a reimport process that allows URI changing
    //          this will require that there be an OMR identifier embedded in the incoming data

    switch ($fileType) {
        case "csv":
            if ('vocab' == $type) {
                // Get array of heading names found
                $headings = $reader->getHeadings();
                $fields   = ConceptPeer::getFieldNames();

                //set the map
                //      $map[] = array("property" => "Uri", "column" => "URILocal");
                //      $map[] = array("property" => "prefLabel", "column" => "skos:prefLabel");
                //      $map[] = array("property" => "definition", "column" => "skos:definition");
                //      $map[] = array("property" => "notation", "column" => "skos:notation");
                //      $map[] = array("property" => "scopeNote", "column" => "skos:scopeNote");

                $map = array(
                  "uri"        => "URILocal",
                  "prefLabel"  => "skos:prefLabel",
                  "definition" => "skos:definition",
                  "notation"   => "skos:notation",
                  "scopeNote"  => "skos:scopeNote"
                );

                $rows = 0;

                //executeImport:

                //    serialize the column map
                try {
                    while ($row = $reader->getRow()) {
                        $rows ++;
                        //        lookup the URI (or the OMR ID if available) for a match
                        $uri        = $baseDomain . $row[$map["uri"]];
                        $concept    = ConceptPeer::getConceptByUri($uri);
                        $updateTime = time();
                        $language   = (isset($map['language'])) ? $row[$map['language']] : $vocabObj->getLanguage();

                        if (! $concept) {
                            //          create a new concept or element
                            $concept = new Concept();
                            $concept->setVocabulary($vocabObj);
                            $concept->setUri($uri);
                            /**
                             * @todo Need to handle updates for topconcept here, just like language
                             **/
                            $concept->setIsTopConcept(false);
                            $concept->updateFromRequest(
                                    $userId,
                                      fixEncoding(rtrim($row[$map['prefLabel']])),
                                      $language,
                                      $statusId
                            );
                        } //don't update the concept if the preflabel matches
                        else if ($row[$map['prefLabel']] != $concept->getPrefLabel()) {
                            $concept->updateFromRequest($userId, fixEncoding(rtrim($row[$map['prefLabel']])));
                        }

                        //there needs to be a language to lookup the properties unless it's an objectProperty
                        $rowLanguage = (isset($map['language'])) ? $row[$map['language']] : $concept->getLanguage();

                        foreach ($map as $key => $value) {
                            //we skip because we already did them
                            if (! in_array(
                              $key,
                              array(
                                'uri',
                                'prefLabel',
                                'language'
                              )
                            )
                            ) {
                                $skosId = $skosMap[$key];
                                //check to see if the property already exists
                                $property =
                                  ConceptPropertyPeer::lookupProperty($concept->getId(), $skosId, $rowLanguage);

                                //create a new property for each unmatched column
                                if (! empty($row[$value])) {
                                    if (! $property) {
                                        $property = new ConceptProperty();
                                        $property->setCreatedUserId($userId);
                                        $property->setConceptId($concept->getId());
                                        $property->setCreatedAt($updateTime);
                                        $property->setSkosPropertyId($skosId);
                                    }

                                    if (($row[$value] != $property->getObject()) ||
                                        ($rowLanguage != $property->getLanguage())
                                    ) {
                                        /**
                                         * @todo We need a check here for skos objectproperties and handle differently
                                         **/
                                        if ($rowLanguage != $property->getLanguage()) {
                                            $property->setLanguage($rowLanguage);
                                        }
                                        if ($row[$value] != $property->getObject()) {
                                            $property->setObject(fixEncoding(rtrim($row[$value])));
                                        }
                                        $property->setUpdatedUserId($userId);
                                        $property->setUpdatedAt($updateTime);
                                        $property->save();
                                    }
                                } //the row value is empty
                                else if ($deleteMissing && $property) {
                                    $property->delete();
                                }
                            }
                        }

                        //          else
                        //               lookup and update concept or element
                        //               lookup and update each property
                        //          update the history for each property, action is 'import', should be a single timestamp for all (this should be automatic)
                        //          if 'delete missing properties' is true
                        //               delete each existing, non-required property that wasn't updated by the import
                    }
                } catch(Exception $e) {
                    //          catch
                    //            if there's an error of any kind, write to error log and continue
                    echo "Error on row: " . $rows . ", " . $uri . "\n" . $e . "\n";
                    continue;
                }
                $objects = $vocabObj->countConcepts();
            } else //it's an element set
            {
                $import->setCsvReader($import->file);
                $import->processProlog();
                $import->getDataColumnIds();
                $import->processData();
                //todo: $results should be a class
                $results[$vocabId] = $import->results;
                $bacthId = $import->saveResults($batchId);
            }
            break;
        case "json":
            break;
        case "rdf":
            break;
        case "xml":
            break;
        default:
    }

    /* output to stdout*/
    //          number of objects imported (link to history, filtered on timestamp of import)
    echo " Rows imported: " . count($results[$vocabId]['success']['rows']) . "\n From File:" . $filePath . "\nUse this ID for more in this batch: " . $bacthId;
    //          number of errors (link to error log)

}
 /**
  * Populates the object using an array.
  *
  * This is particularly useful when populating an object from one of the
  * request arrays (e.g. $_POST).  This method goes through the column
  * names, checking to see whether a matching key exists in populated
  * array. If so the setByName() method is called for that column.
  *
  * You can specify the key type of the array by additionally passing one
  * of the class type constants TYPE_PHPNAME, TYPE_COLNAME, TYPE_FIELDNAME,
  * TYPE_NUM. The default key type is the column's phpname (e.g. 'authorId')
  *
  * @param      array  $arr     An array to populate the object from.
  * @param      string $keyType The type of keys the array uses.
  * @return     void
  */
 public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
 {
     $keys = VocabularyPeer::getFieldNames($keyType);
     if (array_key_exists($keys[0], $arr)) {
         $this->setId($arr[$keys[0]]);
     }
     if (array_key_exists($keys[1], $arr)) {
         $this->setAgentId($arr[$keys[1]]);
     }
     if (array_key_exists($keys[2], $arr)) {
         $this->setCreatedAt($arr[$keys[2]]);
     }
     if (array_key_exists($keys[3], $arr)) {
         $this->setDeletedAt($arr[$keys[3]]);
     }
     if (array_key_exists($keys[4], $arr)) {
         $this->setLastUpdated($arr[$keys[4]]);
     }
     if (array_key_exists($keys[5], $arr)) {
         $this->setCreatedUserId($arr[$keys[5]]);
     }
     if (array_key_exists($keys[6], $arr)) {
         $this->setUpdatedUserId($arr[$keys[6]]);
     }
     if (array_key_exists($keys[7], $arr)) {
         $this->setChildUpdatedAt($arr[$keys[7]]);
     }
     if (array_key_exists($keys[8], $arr)) {
         $this->setChildUpdatedUserId($arr[$keys[8]]);
     }
     if (array_key_exists($keys[9], $arr)) {
         $this->setName($arr[$keys[9]]);
     }
     if (array_key_exists($keys[10], $arr)) {
         $this->setNote($arr[$keys[10]]);
     }
     if (array_key_exists($keys[11], $arr)) {
         $this->setUri($arr[$keys[11]]);
     }
     if (array_key_exists($keys[12], $arr)) {
         $this->setUrl($arr[$keys[12]]);
     }
     if (array_key_exists($keys[13], $arr)) {
         $this->setBaseDomain($arr[$keys[13]]);
     }
     if (array_key_exists($keys[14], $arr)) {
         $this->setToken($arr[$keys[14]]);
     }
     if (array_key_exists($keys[15], $arr)) {
         $this->setCommunity($arr[$keys[15]]);
     }
     if (array_key_exists($keys[16], $arr)) {
         $this->setLastUriId($arr[$keys[16]]);
     }
     if (array_key_exists($keys[17], $arr)) {
         $this->setStatusId($arr[$keys[17]]);
     }
     if (array_key_exists($keys[18], $arr)) {
         $this->setLanguage($arr[$keys[18]]);
     }
     if (array_key_exists($keys[19], $arr)) {
         $this->setLanguages($arr[$keys[19]]);
     }
     if (array_key_exists($keys[20], $arr)) {
         $this->setProfileId($arr[$keys[20]]);
     }
     if (array_key_exists($keys[21], $arr)) {
         $this->setNsType($arr[$keys[21]]);
     }
     if (array_key_exists($keys[22], $arr)) {
         $this->setPrefixes($arr[$keys[22]]);
     }
     if (array_key_exists($keys[23], $arr)) {
         $this->setRepo($arr[$keys[23]]);
     }
     if (array_key_exists($keys[24], $arr)) {
         $this->setPrefix($arr[$keys[24]]);
     }
 }