Exemple #1
0
 /**
  * Method adds related "parent/ancestor" records recursively.
  *
  * It should be used only to create records which have only one primary key.
  *
  * Note: in theory it should work for ancestor records with multiple primary keys
  * but this behaviour is undefined.
  *
  * @param string $table       Table name
  * @param string $primaryKey  Used as primary key for ancestor
  * @return int  New ID
  * @access package private
  */
 function addAncestor($table, $primaryKey = null)
 {
     $doAncestor = OA_Dal::factoryDO($table);
     if ($primaryKey && ($primaryKeyField = $doAncestor->getFirstPrimaryKey())) {
         // it's possible to preset parent id's (only one level up so far)
         $doAncestor->{$primaryKeyField} = $primaryKey;
     }
     if (!empty($this) && is_a($this, 'DataGenerator')) {
         $this->setDefaultValues($doAncestor);
     } else {
         DataGenerator::setDefaultValues($doAncestor);
     }
     $links = $doAncestor->links();
     foreach ($links as $foreignKey => $linkedTableField) {
         list($ancestorTableWithPrefix, $link) = explode(':', $linkedTableField);
         $ancestorTable = $doAncestor->getTableWithoutPrefix($ancestorTableWithPrefix);
         if (isset($this) && is_a($this, 'DataGenerator')) {
             $fieldValue = $this->getFieldValueFromDataContainer($table, $foreignKey);
         } else {
             $fieldValue = DataGenerator::getFieldValueFromDataContainer($table, $foreignKey);
         }
         if (isset($fieldValue) && !isset($GLOBALS['dataGeneratorDontOptimize'])) {
             //hack for quick test fix
             $doAncestor->{$foreignKey} = $fieldValue;
         } else {
             if (isset($this) && is_a($this, 'DataGenerator')) {
                 $doAncestor->{$foreignKey} = $this->addAncestor($ancestorTable);
             } else {
                 $doAncestor->{$foreignKey} = DataGenerator::addAncestor($ancestorTable);
             }
         }
     }
     DataGenerator::trackData($table);
     $id = $doAncestor->insert();
     DataGenerator::getReferenceId($table, $id);
     // store the id
     return $id;
 }