74                                                                : array
   75    {
   76        $this->warnings = [];
   77        try {
   79            $excel->loadFromFile($file);
   80        } 
catch (Exception 
$e) {
 
   81            $this->warnings[] = $this->
lng->txt(
"dcl_file_not_readable");
 
   82        }
   83 
   84        $sheet_count = $excel->getSheetCount();
   85        $excel->setActiveSheet(0);
   86 
   87        if ($sheet_count != count($this->tables)) {
   88            $this->warnings[] = $this->
lng->txt(
'dcl_file_not_readable');
 
   89        }
   90 
   91        if (count($this->warnings)) {
   93        }
   94 
   95        for ($sheet = 0; $sheet < $sheet_count; $sheet++) {
   96            $excel->setActiveSheet($sheet);
   97            $table = $this->tables[$sheet];
   98 
   99            
  100            $sheet_title = substr($table->getTitle(), 0, 31);
  101            if ($excel->getSheetTitle() != $sheet_title) {
  102                $this->warnings[] = $this->
lng->txt(
'dcl_table_title_not_matching');
 
  103                continue;
  104            }
  105 
  106            $field_names = [];
  107            $sheet_data = $excel->getSheetAsArray();
  108 
  109            foreach ($sheet_data[0] as $column) {
  110                $field_names[] = $column;
  111            }
  113 
  114            $records_failed = 0;
  115            for (
$i = 2; 
$i <= count($sheet_data); 
$i++) {
 
  117                $record->setOwner($this->
user->getId());
 
  119                $record->setCreateDate($date_obj);
  120                $record->setLastUpdate($date_obj);
  121                $record->setLastEditBy($this->
user->getId());
 
  122                $record->setTableId($table->getId());
  123                if (!$simulate) {
  124                    $record->doCreate();
  125                }
  126                $fields_failed = 0;
  127                foreach ($fields as $col => $field) {
  128                    try {
  129                        if ($field->isStandardField()) {
  130                            $record->setStandardFieldValueFromExcel($excel, 
$i, $col, $field);
 
  131                        } else {
  132                            $value = $record->getRecordFieldValueFromExcel($excel, 
$i, $col, $field);
 
  133 
  134                            if (is_array($value) && isset($value['warning'])) {
  135                                $this->warnings[] = $value['warning'];
  136                                $value = '';
  137                            }
  138 
  139                            $field->checkValidity($value, $record->getId());
  140                            if (!$simulate) {
  141                                $record->setRecordFieldValue($field->getId(), $value);
  142                            }
  143                        }
  145                        $fields_failed++;
  147                    }
  148                }
  149 
  150                if ($fields_failed < count($fields)) {
  151                    $record_imported = true;
  152                } else {
  153                    $records_failed++;
  154                    $record_imported = false;
  155                }
  156 
  157                if (!$simulate) {
  158                    if (!$record_imported) { 
  159                        $record->doDelete(true); 
  160                    } else {
  161                        $record->doUpdate();
  162                    }
  163                }
  164                if ((
$i - 1) - $records_failed > $this->max_imports) {
 
  165                    $this->warnings[] = $this->
lng->txt(
"dcl_max_import") . (count($sheet_data) - 1) . 
" > " . $this->max_imports;
 
  166                    break;
  167                }
  168            }
  169        }
  170 
  171        return array(
'line' => ((
$i ?? 2) - 2), 
'warnings' => $this->warnings);
 
  172    }
@classDescription Date and time handling
 
getImportFieldsFromTitles(ilDclTable $table, array $titles)