id}"; if (Input::has('reset')) { session()->forget($session_key); } /** @var Changeset $changeset */ return session()->remember($session_key, function () use ($table) { $changeset = new Changeset(); $changeset->table = $table; $changeset->revision = $table->revision; return $changeset; }); } private function storeChangeset(Changeset $chs) { $session_key = "proposal_{$chs->table->id}"; session()->put($session_key, $chs); session()->save(); } public function draft(User $user, string $table, $tab = null) { /** @var Table $tableModel */ $tableModel = $user->tables()->where('name', $table)->first(); 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"); $changeset = $this->getChangeset($tableModel); if (Input::has('dump')) { dd($changeset); } return $this->{camel_case($tab)}($changeset); } /** @noinspection PhpUnusedPrivateMethodInspection */ private function editRows(Changeset $changeset) { $revision = $changeset->revision; $columns = $changeset->fetchAndTransformColumns(); $rows = $revision->rowsData($columns, true, false)->paginate(25, []); return view('table.propose.edit-rows', [ 'changeset' => $changeset, 'table' => $changeset->table, 'columns' => collect($columns), 'rows' => $rows, ]); } // TODO other tab handlers public function draftUpdate(User $user, string $table, Request $request) { /** @var Table $tableModel */ $tableModel = $user->tables()->where('name', $table)->first(); if ($tableModel === null) abort(404, "No such table."); $changeset = $this->getChangeset($tableModel); $input = objBag($request->all(), false); $code = 200; switch ($input->action) { case 'row.update': $data = (object)$input->data; $changeset->rowUpdate($data); $resp = $changeset->fetchAndTransformRow($data->_id); break; case 'row.remove': $changeset->rowRemove($input->id); $resp = $changeset->fetchAndTransformRow($input->id); break; case 'row.restore': $changeset->rowRestore($input->id); $resp = $changeset->fetchAndTransformRow($input->id); break; default: $resp = "Bad Action"; $code = 400; break; } $this->storeChangeset($changeset); return $this->jsonResponse($resp, $code); } }