datatable.directory codebase
https://datatable.directory/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.8 KiB
66 lines
1.8 KiB
<?php
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Table;
|
|
use App\Models\User;
|
|
use App\Tables\Changeset;
|
|
use App\Tables\Column;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Input;
|
|
|
|
class TableEditController extends Controller
|
|
{
|
|
/**
|
|
* Initialize the session-stored changeset, if not set yet
|
|
*
|
|
* @param Table $table
|
|
* @return Changeset
|
|
*/
|
|
private function getChangeset(Table $table)
|
|
{
|
|
$session_key = "proposal_{$table->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;
|
|
});
|
|
}
|
|
|
|
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);
|
|
|
|
return $this->{camel_case($tab)}($changeset);
|
|
}
|
|
|
|
private function editRows(Changeset $changeset)
|
|
{
|
|
$revision = $changeset->revision;
|
|
$columns = $changeset->transformColumns();
|
|
$rows = $revision->rowsData($columns, true, false)->paginate(25, []);
|
|
|
|
return view('table.propose.edit-rows', [
|
|
'changeset' => $changeset,
|
|
'table' => $changeset->table,
|
|
'columns' => collect($columns),
|
|
'rows' => $rows,
|
|
]);
|
|
}
|
|
}
|
|
|