mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-24 02:14:21 -04:00
Transform id keys from Bulk routes
This commit is contained in:
parent
3ca2c26e90
commit
544e59bbba
@ -20,11 +20,13 @@ use App\Http\Requests\User\EditUserRequest;
|
||||
use App\Http\Requests\User\ShowUserRequest;
|
||||
use App\Http\Requests\User\StoreUserRequest;
|
||||
use App\Http\Requests\User\UpdateUserRequest;
|
||||
use App\Jobs\Company\CreateCompanyToken;
|
||||
use App\Models\User;
|
||||
use App\Repositories\UserRepository;
|
||||
use App\Transformers\UserTransformer;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
/**
|
||||
* Class UserController
|
||||
@ -63,9 +65,11 @@ class UserController extends BaseController
|
||||
*/
|
||||
public function index(UserFilters $filters)
|
||||
{
|
||||
|
||||
$users = User::filter($filters);
|
||||
|
||||
return $this->listResponse($users);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -75,9 +79,11 @@ class UserController extends BaseController
|
||||
*/
|
||||
public function create(CreateUserRequest $request)
|
||||
{
|
||||
|
||||
$user = UserFactory::create();
|
||||
|
||||
return $this->itemResponse($user);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -88,8 +94,10 @@ class UserController extends BaseController
|
||||
*/
|
||||
public function store(StoreUserRequest $request)
|
||||
{
|
||||
|
||||
$company = auth()->user()->company();
|
||||
//save user
|
||||
|
||||
$user = $this->user_repo->save($request->all(), UserFactory::create($company->id, auth()->user()->id));
|
||||
|
||||
$user->companies()->attach($company->id, [
|
||||
@ -101,6 +109,8 @@ class UserController extends BaseController
|
||||
'settings' => $request->input('settings'),
|
||||
]);
|
||||
|
||||
CreateCompanyToken::dispatchNow($company, $user);
|
||||
|
||||
$user->load('companies');
|
||||
|
||||
return $this->itemResponse($user);
|
||||
@ -142,6 +152,7 @@ class UserController extends BaseController
|
||||
*/
|
||||
public function update(UpdateUserRequest $request, User $user)
|
||||
{
|
||||
|
||||
$user = $this->user_repo->save($request->all(), $user);
|
||||
|
||||
return $this->itemResponse($user);
|
||||
@ -156,10 +167,39 @@ class UserController extends BaseController
|
||||
*/
|
||||
public function destroy(DestroyUserRequest $request, User $user)
|
||||
{
|
||||
|
||||
$user->delete();
|
||||
$user->tokens->delete();
|
||||
|
||||
return response()->json([], 200);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform bulk actions on the list view
|
||||
*
|
||||
* @return Collection
|
||||
*/
|
||||
public function bulk()
|
||||
{
|
||||
|
||||
$action = request()->input('action');
|
||||
|
||||
$ids = request()->input('ids');
|
||||
|
||||
$ids = $this->transformKeys($ids);
|
||||
|
||||
$users = User::withTrashed()->find($ids);
|
||||
|
||||
$users->each(function ($user, $key) use($action){
|
||||
|
||||
if(auth()->user()->can('edit', $user))
|
||||
$this->user_repo->{$action}($user);
|
||||
|
||||
});
|
||||
|
||||
//todo need to return the updated dataset
|
||||
return $this->listResponse(User::withTrashed()->whereIn('id', $ids));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
namespace App\Http\Requests\User;
|
||||
|
||||
use App\DataMapper\DefaultSettings;
|
||||
use App\Http\Requests\Request;
|
||||
use App\Http\ValidationRules\NewUniqueUserRule;
|
||||
use App\Models\User;
|
||||
@ -25,27 +26,39 @@ class StoreUserRequest extends Request
|
||||
|
||||
public function authorize() : bool
|
||||
{
|
||||
|
||||
return auth()->user()->can('create', User::class);
|
||||
|
||||
}
|
||||
|
||||
public function rules()
|
||||
{
|
||||
|
||||
$this->sanitize();
|
||||
|
||||
return [
|
||||
'first_name' => 'required|string|max:100',
|
||||
'last_name' => 'required|string:max:100',
|
||||
'email' => new NewUniqueUserRule(),
|
||||
'is_admin' => 'required',
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public function sanitize()
|
||||
{
|
||||
//do post processing of user request
|
||||
}
|
||||
$input = $this->all();
|
||||
|
||||
public function messages()
|
||||
{
|
||||
if(!isset($input['is_admin']))
|
||||
$input['is_admin'] = null;
|
||||
|
||||
if(!isset($input['permissions']))
|
||||
$input['permissions'] = json_encode([]);
|
||||
|
||||
if(!isset($input['settings']))
|
||||
$input['settings'] = json_encode(DefaultSettings::userSettings());
|
||||
|
||||
$this->replace($input);
|
||||
}
|
||||
|
||||
|
||||
|
@ -25,6 +25,7 @@ class CompanyUser extends Pivot
|
||||
*/
|
||||
protected $casts = [
|
||||
'settings' => 'collection',
|
||||
'permissions' => 'object',
|
||||
];
|
||||
|
||||
public function account()
|
||||
|
@ -16,8 +16,8 @@ use App\Events\Invoice\InvoiceWasCreated;
|
||||
use App\Events\Invoice\InvoiceWasMarkedSent;
|
||||
use App\Events\Invoice\InvoiceWasUpdated;
|
||||
use App\Events\Payment\PaymentWasCreated;
|
||||
use App\Events\User\UserCreated;
|
||||
use App\Events\User\UserLoggedIn;
|
||||
use App\Events\User\UserWasCreated;
|
||||
use App\Listeners\Activity\CreatedClientActivity;
|
||||
use App\Listeners\Activity\PaymentCreatedActivity;
|
||||
use App\Listeners\Invoice\CreateInvoiceActivity;
|
||||
@ -35,7 +35,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
* @var array
|
||||
*/
|
||||
protected $listen = [
|
||||
UserCreated::class => [
|
||||
UserWasCreated::class => [
|
||||
SendVerificationNotification::class,
|
||||
],
|
||||
UserLoggedIn::class => [
|
||||
|
@ -11,12 +11,14 @@
|
||||
|
||||
namespace App\Repositories;
|
||||
|
||||
use App\Utils\Traits\MakesHash;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
class BaseRepository
|
||||
{
|
||||
|
||||
use MakesHash;
|
||||
/**
|
||||
* @return null
|
||||
*/
|
||||
@ -122,6 +124,8 @@ class BaseRepository
|
||||
return 0;
|
||||
}
|
||||
|
||||
$ids = $this->transformKeys($ids);
|
||||
|
||||
$entities = $this->findByPublicIdsWithTrashed($ids);
|
||||
|
||||
foreach ($entities as $entity) {
|
||||
|
@ -84,10 +84,10 @@ class UserTransformer extends EntityTransformer
|
||||
|
||||
public function includeUserCompany(User $user)
|
||||
{
|
||||
//cannot use this here as it will fail retrieving the company as we depend on the token in the header which may not be present for this request
|
||||
//$transformer = new CompanyUserTransformer($this->serializer);
|
||||
|
||||
$transformer = new CompanyUserTransformer($this->serializer);
|
||||
|
||||
//return $this->includeItem($user->user_company(), $transformer, CompanyUser::class);
|
||||
return $this->includeItem($user->user_company(), $transformer, CompanyUser::class);
|
||||
|
||||
}
|
||||
|
||||
|
@ -72,4 +72,21 @@ trait MakesHash
|
||||
return response()->json(['error'=>'Invalid primary key'],400);
|
||||
}
|
||||
}
|
||||
|
||||
public function transformKeys($keys)
|
||||
{
|
||||
|
||||
if(is_array($keys))
|
||||
{
|
||||
foreach($keys as &$value)
|
||||
{
|
||||
$value = $this->decodePrimaryKey($value);
|
||||
}
|
||||
|
||||
return $keys;
|
||||
}
|
||||
else
|
||||
return $this->decodePrimaryKey($keys);
|
||||
|
||||
}
|
||||
}
|
@ -63,6 +63,8 @@ Route::group(['middleware' => ['db','api_secret_check','token_auth'], 'prefix' =
|
||||
|
||||
Route::resource('users', 'UserController'); // name = (users. index / create / show / update / destroy / edit
|
||||
|
||||
Route::post('users/bulk', 'UserController@bulk')->name('users.bulk');
|
||||
|
||||
/*
|
||||
Route::resource('tasks', 'TaskController'); // name = (tasks. index / create / show / update / destroy / edit
|
||||
|
||||
|
49
tests/Unit/PrimaryKeyTransformationTest.php
Normal file
49
tests/Unit/PrimaryKeyTransformationTest.php
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Unit;
|
||||
|
||||
use App\DataMapper\ClientSettings;
|
||||
use App\DataMapper\CompanySettings;
|
||||
use App\Utils\Traits\MakesHash;
|
||||
use Illuminate\Foundation\Testing\DatabaseTransactions;
|
||||
use Tests\TestCase;
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @covers App\Utils\Traits\MakesHash;
|
||||
*/
|
||||
class PrimaryKeyTransformationTest extends TestCase
|
||||
{
|
||||
use MakesHash;
|
||||
|
||||
public function setUp() :void
|
||||
{
|
||||
|
||||
parent::setUp();
|
||||
|
||||
}
|
||||
|
||||
public function testTransformationArray()
|
||||
{
|
||||
|
||||
$keys = [
|
||||
'gl9avZgaG1', '7LDdwrmb1Y'
|
||||
];
|
||||
|
||||
$transformed_keys = $this->transformKeys($keys);
|
||||
|
||||
$this->assertEquals(310, $transformed_keys[0]);
|
||||
|
||||
$this->assertEquals(311, $transformed_keys[1]);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function testTransformation()
|
||||
{
|
||||
$keys = 'gl9avZgaG1';
|
||||
|
||||
$this->assertEquals(310, $this->transformKeys($keys));
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user