Exemplo n.º 1
0
 /**
  * Assume all data is now valid, and only FK values remain to be translated.
  * 
  * @param DB\Table $table The table into which to import data.
  * @param array $column_map array of DB names to import names.
  * @return integer The number of rows imported.
  */
 public function import_data($table, $column_map)
 {
     global $wpdb;
     $change_tracker = new \WordPress\Tabulate\DB\ChangeTracker($wpdb);
     $change_tracker->open_changeset('CSV import.', true);
     $count = 0;
     $headers = $this->remap($column_map);
     for ($row_num = 1; $row_num <= $this->row_count(); $row_num++) {
         $row = array();
         foreach ($this->data[$row_num] as $col_num => $value) {
             if (!isset($headers[$col_num])) {
                 continue;
             }
             $db_column_name = $headers[$col_num];
             $column = $table->get_column($db_column_name);
             // Get actual foreign key value
             if ($column->is_foreign_key()) {
                 if (empty($value)) {
                     // Ignore empty-string FKs.
                     continue;
                 } else {
                     $fk_rows = $this->get_fk_rows($column->get_referenced_table(), $value);
                     $foreign_row = array_shift($fk_rows);
                     $value = $foreign_row->get_primary_key();
                 }
             }
             // All other values are used as they are
             $row[$db_column_name] = $value;
         }
         $pk_name = $table->get_pk_column()->get_name();
         $pk_value = isset($row[$pk_name]) ? $row[$pk_name] : null;
         $table->save_record($row, $pk_value);
         $count++;
     }
     $change_tracker->close_changeset();
     return $count;
 }