CSV import, also from file, and more UX improvements
This commit is contained in:
@@ -60,8 +60,9 @@ class TableEditController extends Controller
|
||||
if ($tableModel === null) abort(404, "No such table.");
|
||||
|
||||
if ($tab == null) $tab = 'edit-rows';
|
||||
$tabs = ['edit-rows', 'add-rows', 'manage-columns', 'review'];
|
||||
if (!in_array($tab, $tabs)) abort(404, "No such tab: $tab");
|
||||
|
||||
$method = camel_case($tab);
|
||||
if (!method_exists($this, $method)) abort(404, "No such tab: $tab");
|
||||
|
||||
$changeset = $this->getChangeset($tableModel);
|
||||
|
||||
@@ -69,7 +70,7 @@ class TableEditController extends Controller
|
||||
dd($changeset);
|
||||
}
|
||||
|
||||
return $this->{camel_case($tab)}($changeset);
|
||||
return $this->$method($changeset);
|
||||
}
|
||||
|
||||
/** @noinspection PhpUnusedPrivateMethodInspection */
|
||||
@@ -101,6 +102,18 @@ class TableEditController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
/** @noinspection PhpUnusedPrivateMethodInspection */
|
||||
private function addRowsCsv(Changeset $changeset)
|
||||
{
|
||||
$columns = $changeset->fetchAndTransformColumns();
|
||||
|
||||
return view('table.propose.add-rows-csv', [
|
||||
'changeset' => $changeset,
|
||||
'table' => $changeset->table,
|
||||
'columns' => collect($columns),
|
||||
]);
|
||||
}
|
||||
|
||||
/** @noinspection PhpUnusedPrivateMethodInspection */
|
||||
private function manageColumns(Changeset $changeset)
|
||||
{
|
||||
@@ -143,13 +156,43 @@ class TableEditController extends Controller
|
||||
$resp = $updated;
|
||||
break;
|
||||
|
||||
case 'row.add-csv':
|
||||
$fname = 'csv-file';
|
||||
if ($request->hasFile($fname)) {
|
||||
try {
|
||||
$file = $request->file($fname);
|
||||
if ($file->isValid() && $file->isReadable()) {
|
||||
$handle = $file->openFile();
|
||||
$csv = Utils::csvToArray($handle);
|
||||
if (empty($csv)) throw new \Exception("Failed to parse CSV file.");
|
||||
|
||||
$changeset->addFilledRows($csv);
|
||||
$handle = null;
|
||||
} else {
|
||||
throw new \Exception("File not valid.");
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
return $this->backWithErrors(['csv-file' => $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
try {
|
||||
$text = trim($input->data);
|
||||
if (empty($text)) throw new \Exception("Empty CSV field and no file uploaded.");
|
||||
$changeset->addFilledRows(Utils::csvToArray($text));
|
||||
} catch (\Exception $e) {
|
||||
return $this->backWithErrors(['data' => $e->getMessage()]);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'row.remove':
|
||||
$isNew = $changeset->isNewRow($input->id);
|
||||
$changeset->rowRemove($input->id);
|
||||
$resp = $isNew ? null : $changeset->fetchAndTransformRow($input->id);
|
||||
break;
|
||||
|
||||
case 'rows.remove-empty-new':
|
||||
case 'row.remove-empty-new':
|
||||
$changeset->removeEmptyNewRows();
|
||||
break;
|
||||
|
||||
@@ -162,14 +205,6 @@ class TableEditController extends Controller
|
||||
$changeset->addBlankRows($input->count);
|
||||
break;
|
||||
|
||||
case 'rows.add-csv':
|
||||
try {
|
||||
$changeset->addFilledRows(Utils::csvToArray($input->data));
|
||||
} catch (\Exception $e) {
|
||||
return $this->backWithErrors(['data' => $e->getMessage()]);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'col.update':
|
||||
$data = (object)$input->data;
|
||||
$resp = $changeset->columnUpdate($data);
|
||||
|
||||
Reference in New Issue
Block a user