user edit form
This commit is contained in:
@@ -49,16 +49,14 @@ class RegisterController extends Controller
|
||||
*/
|
||||
protected function validator(array $data)
|
||||
{
|
||||
return Validator::make($data, [
|
||||
return $this->makeValidator($data, [
|
||||
'name' => [
|
||||
'regex:/^[a-zA-Z0-9_.-]+$/',
|
||||
'required',
|
||||
'string',
|
||||
'max:255',
|
||||
VALI_NAME,
|
||||
'unique:users'
|
||||
],
|
||||
'email' => 'required|string|email|max:255|unique:users',
|
||||
'password' => 'required|string|min:6|max:1000|confirmed', // max len to foil DOS attempts
|
||||
'email' => ['required', 'unique:users', VALI_EMAIL],
|
||||
'password' => ['required', 'confirmed', VALI_PASSWORD],
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -3,13 +3,39 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
|
||||
class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
use AuthorizesRequests,
|
||||
DispatchesJobs,
|
||||
ValidatesRequests {
|
||||
ValidatesRequests::validate as validate_orig;
|
||||
ValidatesRequests::validateWithBag as validateWithBag_orig;
|
||||
}
|
||||
|
||||
// Hacks to allow recursive nesting of validations in string and array format
|
||||
|
||||
public function makeValidator($data, $rules, $messages = array(), $customAttributes = array())
|
||||
{
|
||||
return \Validator::make($data, vali($rules), $messages, $customAttributes);
|
||||
}
|
||||
|
||||
public function validate(Request $request, array $rules,
|
||||
array $messages = [], array $customAttributes = [])
|
||||
{
|
||||
return objBag($this->validate_orig($request, vali($rules), $messages, $customAttributes));
|
||||
}
|
||||
|
||||
public function validateWithBag($errorBag, Request $request, array $rules,
|
||||
array $messages = [], array $customAttributes = [])
|
||||
{
|
||||
return objBag($this->validateWithBag_orig($errorBag, $request, vali($rules),
|
||||
$messages, $customAttributes));
|
||||
}
|
||||
|
||||
protected function backWithErrors($errors)
|
||||
{
|
||||
|
||||
@@ -54,21 +54,24 @@ class TableController extends Controller
|
||||
/** @var User $u */
|
||||
$u = \Auth::user();
|
||||
|
||||
$this->validate($request, [
|
||||
'name' => 'required|string|max:255',
|
||||
'title' => 'string|string|max:255',
|
||||
'description' => 'string|nullable|max:4000',
|
||||
'license' => 'string|nullable|max:4000',
|
||||
'origin' => 'string|nullable|max:4000',
|
||||
$input = $this->validate($request, [
|
||||
'name' => [
|
||||
'required',
|
||||
VALI_NAME,
|
||||
Rule::unique('tables'),
|
||||
],
|
||||
'title' => ['required', VALI_LINE],
|
||||
'description' => ['nullable', VALI_TEXT],
|
||||
'license' => ['nullable', VALI_TEXT],
|
||||
'origin' => ['nullable', VALI_TEXT],
|
||||
'columns' => 'required|string',
|
||||
'data' => 'string|nullable',
|
||||
]);
|
||||
|
||||
// Check if table name is unique for user
|
||||
$tabName = $request->get('name');
|
||||
if ($u->tables()->where('name', $tabName)->exists()) {
|
||||
if ($u->tables()->where('name', $input->name)->exists()) {
|
||||
return $this->backWithErrors([
|
||||
'name' => "A table called \"$tabName\" already exists in your account.",
|
||||
'name' => "A table called \"$input->name\" already exists in your account.",
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -76,7 +79,7 @@ class TableController extends Controller
|
||||
/** @var Column[] $columns */
|
||||
$columns = [];
|
||||
$column_keys = []; // for checking duplicates
|
||||
$colTable = array_map('str_getcsv', explode("\n", $request->get('columns')));
|
||||
$colTable = array_map('str_getcsv', explode("\n", $input->columns));
|
||||
|
||||
// prevent griefing via long list of columns
|
||||
if (count($colTable) > 100) return $this->backWithErrors(['columns' => "Too many columns"]);
|
||||
@@ -104,7 +107,7 @@ class TableController extends Controller
|
||||
}
|
||||
if (count($columns) == 0) return $this->backWithErrors(['columns' => "Define at least one column"]);
|
||||
|
||||
$rowTable = array_map('str_getcsv', explode("\n", $request->get('data')));
|
||||
$rowTable = array_map('str_getcsv', explode("\n", $input->data));
|
||||
|
||||
// Preparing data to insert into the Rows table
|
||||
$rowsData = null;
|
||||
@@ -116,6 +119,10 @@ class TableController extends Controller
|
||||
$parsed = [];
|
||||
foreach ($row as $i => $val) {
|
||||
$key = $columns[$i]->name;
|
||||
if (strlen($val) > 255) {
|
||||
// try to stop people inserting unstructured crap / malformed CSV
|
||||
throw new NotApplicableException("Value for column $key too long.");
|
||||
}
|
||||
$parsed[$key] = $columns[$i]->cast($val);
|
||||
}
|
||||
return [
|
||||
@@ -127,7 +134,7 @@ class TableController extends Controller
|
||||
}
|
||||
|
||||
$revisionFields = [
|
||||
'note' => "Initial revision of table $u->name/$tabName",
|
||||
'note' => "Initial revision of table $u->name/$input->name",
|
||||
'columns' => json_encode($columns),
|
||||
'row_count' => count($rowsData),
|
||||
];
|
||||
@@ -135,11 +142,11 @@ class TableController extends Controller
|
||||
$tableFields = [
|
||||
'owner_id' => $u->id,
|
||||
'revision_id' => 0,
|
||||
'name' => $tabName,
|
||||
'title' => $request->get('title'),
|
||||
'description' => $request->get('description'),
|
||||
'license' => $request->get('license'),
|
||||
'origin' => $request->get('origin'),
|
||||
'name' => $input->name,
|
||||
'title' => $input->title,
|
||||
'description' => $input->description,
|
||||
'license' => $input->license,
|
||||
'origin' => $input->origin,
|
||||
];
|
||||
|
||||
\DB::transaction(function () use ($revisionFields, $tableFields, $rowsData) {
|
||||
@@ -156,6 +163,6 @@ class TableController extends Controller
|
||||
$revision->rows()->createMany($rowsData);
|
||||
});
|
||||
|
||||
return redirect(route('table.view', ['user' => $u, 'table' => $tabName]));
|
||||
return redirect(route('table.view', ['user' => $u, 'table' => $input->name]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,12 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\EmailConfirmation;
|
||||
use App\Models\User;
|
||||
use Hash;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\Rule;
|
||||
use MightyPork\Utils\Str;
|
||||
|
||||
class UserController extends Controller
|
||||
{
|
||||
@@ -22,18 +27,66 @@ class UserController extends Controller
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit user profile
|
||||
* Edit own profile
|
||||
*
|
||||
* @param User $user
|
||||
* @return \Illuminate\View\View
|
||||
*/
|
||||
public function edit()
|
||||
{
|
||||
return view('user.edit')->with('user', \Auth::user());
|
||||
return view('user.edit')->with('user', \user());
|
||||
}
|
||||
|
||||
public function store()
|
||||
/**
|
||||
* Store changed profile
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
echo "Not impl";
|
||||
$input = $this->validate($request, [
|
||||
'name' => [
|
||||
'required',
|
||||
VALI_NAME,
|
||||
Rule::unique('users')->ignoreModel(\user()),
|
||||
],
|
||||
'email' => [
|
||||
'required',
|
||||
VALI_EMAIL,
|
||||
Rule::unique('users')->ignoreModel(\user()),
|
||||
],
|
||||
'bio' => ['nullable', VALI_TEXT],
|
||||
'title' => ['required', VALI_LINE],
|
||||
'website' => ['required', VALI_LINE],
|
||||
'new_password' => ['nullable', 'confirmed', VALI_PASSWORD],
|
||||
]);
|
||||
|
||||
$user = user();
|
||||
|
||||
if ($input->email != $user->email) {
|
||||
$confirmation = EmailConfirmation::create([
|
||||
'user_id' => $user->id,
|
||||
'email' => $input->email,
|
||||
'token' => Str::random(60),
|
||||
]);
|
||||
|
||||
flash()->warning("New e-mail confirmation sent to $input->email.")->important();
|
||||
|
||||
// TODO send the e-mail
|
||||
|
||||
unset($input->email);
|
||||
}
|
||||
|
||||
$user->fill($input->all());
|
||||
|
||||
if ($input->has('new_password')) {
|
||||
$user->password = Hash::make($input->new_password);
|
||||
|
||||
flash()->warning('Password changed');
|
||||
}
|
||||
|
||||
$user->save();
|
||||
|
||||
flash()->success('Settings saved');
|
||||
|
||||
return back();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user