コード例 #1
0
 public function getTargetTables(\DataContainer $dc)
 {
     $arrTables = \HeimrichHannot\EntityImport\Database::getInstance()->listTables();
     return array_values($arrTables);
 }
コード例 #2
0
 protected function createObjectFromMapping($arrSourceItem)
 {
     $objDatabase = \Database::getInstance();
     \Controller::loadDataContainer($this->dbTargetTable);
     $t = $this->dbTargetTable;
     $arrItem = array();
     foreach (deserialize($this->fileFieldMapping, true) as $arrConfig) {
         if ($arrConfig['type'] == 'source') {
             $varValue = $arrSourceItem[$arrConfig['source'] - 1];
         } else {
             if ($arrConfig['type'] == 'value' && !empty($arrConfig['value'])) {
                 $varValue = $arrConfig['value'];
             }
         }
         if ($varValue) {
             $varValue = $arrConfig['transformToArray'] ? serialize(explode($this->arrayDelimiter, $varValue)) : $varValue;
         }
         $this->setObjectValueFromMapping($arrItem, $varValue, $arrConfig['target']);
         if ($varValue === null) {
             unset($arrItem[$arrConfig['target']]);
             continue;
         }
     }
     if (!$this->dryRun) {
         if (!$this->skipInsertion) {
             $strQuery = "INSERT INTO {$t} (" . implode(',', array_keys($arrItem)) . ") VALUES(" . implode(',', array_map(function ($val) {
                 return "'" . str_replace("'", "''", $val) . "'";
             }, array_values($arrItem))) . ")";
             $arrItem['id'] = $objDatabase->execute($strQuery)->insertId;
         }
         // do after item has been created,
         $this->runAfterSaving($arrItem, $arrSourceItem);
         // save updates
         if (!$this->skipUpdateAfterSave) {
             $arrTargetItemPrepared = array();
             foreach ($arrItem as $strKey => $strVal) {
                 if ($strKey == 'id') {
                     continue;
                 }
                 $strVal = str_replace("'", "''", $strVal);
                 $arrTargetItemPrepared[] = "{$this->dbTargetTable}.{$strKey}='{$strVal}'";
             }
             // update all values to the db
             $strQuery = "UPDATE {$this->dbTargetTable} SET " . implode(',', $arrTargetItemPrepared) . " WHERE id=" . $arrItem['id'];
             \Database::getInstance()->execute($strQuery);
         }
     }
     return $arrItem;
 }