$this->controllerClasses[$className] = $class;
}
- $rules = collect($class->getValidationRules()[$methodName] ?? [])->map(function($validations) {
- return array_map(function($validation) {
+ $rules = collect($class->getValidationRules()[$methodName] ?? [])->map(function ($validations) {
+ return array_map(function ($validation) {
return $this->getValidationAsString($validation);
}, $validations);
})->toArray();
}
$class = get_class($validation);
+
throw new Exception("Cannot provide string representation of rule for class: {$class}");
}
$filteredQuery = $this->filterQuery($this->query);
$total = $filteredQuery->count();
- $data = $this->fetchData($filteredQuery)->each(function($model) {
+ $data = $this->fetchData($filteredQuery)->each(function ($model) {
foreach ($this->resultModifiers as $modifier) {
$modifier($model);
}
}
/**
- * Add a callback to modify each element of the results
+ * Add a callback to modify each element of the results.
+ *
* @param (callable(Model)) $modifier
*/
public function modifyResults($modifier): void
}
/**
- * Get all users as Builder for API
+ * Get all users as Builder for API.
*/
public function getApiUsersBuilder(): Builder
{
/**
* Create a new basic instance of user with the given pre-validated data.
+ *
* @param array{name: string, email: string, password: ?string, external_auth_id: ?string, language: ?string, roles: ?array} $data
*/
public function createWithoutActivity(array $data, bool $emailConfirmed = false): User
/**
* As per "createWithoutActivity" but records a "create" activity.
+ *
* @param array{name: string, email: string, password: ?string, external_auth_id: ?string, language: ?string, roles: ?array} $data
*/
public function create(array $data, bool $sendInvite = false): User
}
Activity::add(ActivityType::USER_CREATE, $user);
+
return $user;
}
/**
* Update the given user with the given data.
+ *
* @param array{name: ?string, email: ?string, external_auth_id: ?string, password: ?string, roles: ?array<int>, language: ?string} $data
+ *
* @throws UserUpdateException
*/
public function update(User $user, array $data, bool $manageUsersAllowed): User
};
return [
- 'pages' => $query(Page::visible()->where('draft', '=', false)),
+ 'pages' => $query(Page::visible()->where('draft', '=', false)),
'chapters' => $query(Chapter::visible()),
- 'books' => $query(Book::visible()),
- 'shelves' => $query(Bookshelf::visible()),
+ 'books' => $query(Book::visible()),
+ 'shelves' => $query(Bookshelf::visible()),
];
}
$createdBy = ['created_by' => $user->id];
return [
- 'pages' => Page::visible()->where($createdBy)->count(),
+ 'pages' => Page::visible()->where($createdBy)->count(),
'chapters' => Chapter::visible()->where($createdBy)->count(),
- 'books' => Book::visible()->where($createdBy)->count(),
- 'shelves' => Bookshelf::visible()->where($createdBy)->count(),
+ 'books' => Book::visible()->where($createdBy)->count(),
+ 'shelves' => Bookshelf::visible()->where($createdBy)->count(),
];
}
protected $userRepo;
protected $fieldsToExpose = [
- 'email', 'created_at', 'updated_at', 'last_activity_at', 'external_auth_id'
+ 'email', 'created_at', 'updated_at', 'last_activity_at', 'external_auth_id',
];
public function __construct(UserRepo $userRepo)
$this->middleware(function ($request, $next) {
$this->checkPermission('users-manage');
$this->preventAccessInDemoMode();
+
return $next($request);
});
}
{
return [
'create' => [
- 'name' => ['required', 'min:2'],
+ 'name' => ['required', 'min:2'],
'email' => [
- 'required', 'min:2', 'email', new Unique('users', 'email')
+ 'required', 'min:2', 'email', new Unique('users', 'email'),
],
'external_auth_id' => ['string'],
- 'language' => ['string'],
- 'password' => [Password::default()],
- 'roles' => ['array'],
- 'roles.*' => ['integer'],
- 'send_invite' => ['boolean'],
+ 'language' => ['string'],
+ 'password' => [Password::default()],
+ 'roles' => ['array'],
+ 'roles.*' => ['integer'],
+ 'send_invite' => ['boolean'],
],
'update' => [
- 'name' => ['min:2'],
+ 'name' => ['min:2'],
'email' => [
'min:2',
'email',
- (new Unique('users', 'email'))->ignore($userId ?? null)
+ (new Unique('users', 'email'))->ignore($userId ?? null),
],
'external_auth_id' => ['string'],
- 'language' => ['string'],
- 'password' => [Password::default()],
- 'roles' => ['array'],
- 'roles.*' => ['integer'],
+ 'language' => ['string'],
+ 'password' => [Password::default()],
+ 'roles' => ['array'],
+ 'roles.*' => ['integer'],
],
'delete' => [
'migrate_ownership_id' => ['integer', 'exists:users,id'],
/**
* Update an existing user in the system.
* Requires permission to manage users.
+ *
* @throws UserUpdateException
*/
public function update(Request $request, string $id)
protected function showPermissionError()
{
$message = request()->wantsJson() ? trans('errors.permissionJson') : trans('errors.permission');
+
throw new NotifyException($message, '/', 403);
}
$passwordRequired = ($authMethod === 'standard' && !$sendInvite);
$validationRules = [
- 'name' => ['required'],
- 'email' => ['required', 'email', 'unique:users,email'],
- 'language' => ['string'],
+ 'name' => ['required'],
+ 'email' => ['required', 'email', 'unique:users,email'],
+ 'language' => ['string'],
'roles' => ['array'],
'roles.*' => ['integer'],
- 'password' => $passwordRequired ? ['required', Password::default()] : null,
+ 'password' => $passwordRequired ? ['required', Password::default()] : null,
'password-confirm' => $passwordRequired ? ['required', 'same:password'] : null,
'external_auth_id' => $externalAuth ? ['required'] : null,
];
Route::post('users', [UserApiController::class, 'create']);
Route::get('users/{id}', [UserApiController::class, 'read']);
Route::put('users/{id}', [UserApiController::class, 'update']);
-Route::delete('users/{id}', [UserApiController::class, 'delete']);
\ No newline at end of file
+Route::delete('users/{id}', [UserApiController::class, 'delete']);
$resp = $this->getJson($this->baseEndpoint . '?count=1&sort=+id');
$resp->assertJson(['data' => [
[
- 'id' => $firstUser->id,
- 'name' => $firstUser->name,
- 'slug' => $firstUser->slug,
- 'email' => $firstUser->email,
+ 'id' => $firstUser->id,
+ 'name' => $firstUser->name,
+ 'slug' => $firstUser->slug,
+ 'email' => $firstUser->email,
'profile_url' => $firstUser->getProfileUrl(),
- 'edit_url' => $firstUser->getEditUrl(),
- 'avatar_url' => $firstUser->getAvatar(),
+ 'edit_url' => $firstUser->getEditUrl(),
+ 'avatar_url' => $firstUser->getAvatar(),
],
]]);
}
$role = Role::query()->first();
$resp = $this->postJson($this->baseEndpoint, [
- 'name' => 'Benny Boris',
- 'password' => 'mysuperpass',
- 'language' => 'it',
- 'roles' => [$role->id],
+ 'name' => 'Benny Boris',
+ 'password' => 'mysuperpass',
+ 'language' => 'it',
+ 'roles' => [$role->id],
'send_invite' => false,
]);
$resp->assertStatus(200);
$resp->assertJson([
- 'name' => 'Benny Boris',
+ 'name' => 'Benny Boris',
'external_auth_id' => '',
- 'roles' => [
+ 'roles' => [
[
- 'id' => $role->id,
+ 'id' => $role->id,
'display_name' => $role->display_name,
- ]
+ ],
],
]);
Notification::fake();
$resp = $this->postJson($this->baseEndpoint, [
- 'name' => 'Benny Boris',
+ 'name' => 'Benny Boris',
'send_invite' => true,
]);
$resp = $this->postJson($this->baseEndpoint, [
'email' => $existingUser->email,
- 'name' => 'Benny Boris',
+ 'name' => 'Benny Boris',
]);
$resp->assertStatus(422);
$resp->assertJson($this->validationResponse(['email' => ['The email has already been taken.']]));
$resp->assertStatus(200);
$resp->assertJson([
- 'id' => $user->id,
- 'slug' => $user->slug,
- 'email' => $user->email,
+ 'id' => $user->id,
+ 'slug' => $user->slug,
+ 'email' => $user->email,
'external_auth_id' => $user->external_auth_id,
- 'roles' => [
+ 'roles' => [
[
- 'id' => $userRole->id,
+ 'id' => $userRole->id,
'display_name' => $userRole->display_name,
- ]
+ ],
],
]);
}
$user = $this->getAdmin();
$roles = Role::query()->pluck('id');
$resp = $this->putJson($this->baseEndpoint . "/{$user->id}", [
- 'name' => 'My updated user',
- 'roles' => $roles,
+ 'name' => 'My updated user',
+ 'roles' => $roles,
'external_auth_id' => 'btest',
- 'password' => 'barrytester',
- 'language' => 'fr',
+ 'password' => 'barrytester',
+ 'language' => 'fr',
]);
$resp->assertStatus(200);
$resp->assertJson([
- 'id' => $user->id,
- 'name' => 'My updated user',
+ 'id' => $user->id,
+ 'name' => 'My updated user',
'external_auth_id' => 'btest',
]);
$user->refresh();
$resp->assertStatus(200);
$this->assertDatabaseHas('users', [
- 'id' => $user->id,
- 'name' => $user->name,
- 'email' => $user->email,
+ 'id' => $user->id,
+ 'name' => $user->name,
+ 'email' => $user->email,
'password' => $user->password,
]);
$this->assertEquals($roleCount, $user->roles()->count());
class HelpTest extends TestCase
{
-
public function test_wysiwyg_help_shows_tiny_and_tiny_license_link()
{
$resp = $this->get('/help/wysiwyg');
$contents = file_get_contents($expectedPath);
$this->assertStringContainsString('GNU LESSER GENERAL PUBLIC LICENSE', $contents);
}
-
}