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)