mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-03 07:24:34 -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\ShowUserRequest;
|
||||||
use App\Http\Requests\User\StoreUserRequest;
|
use App\Http\Requests\User\StoreUserRequest;
|
||||||
use App\Http\Requests\User\UpdateUserRequest;
|
use App\Http\Requests\User\UpdateUserRequest;
|
||||||
|
use App\Jobs\Company\CreateCompanyToken;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Repositories\UserRepository;
|
use App\Repositories\UserRepository;
|
||||||
use App\Transformers\UserTransformer;
|
use App\Transformers\UserTransformer;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class UserController
|
* Class UserController
|
||||||
@ -63,9 +65,11 @@ class UserController extends BaseController
|
|||||||
*/
|
*/
|
||||||
public function index(UserFilters $filters)
|
public function index(UserFilters $filters)
|
||||||
{
|
{
|
||||||
|
|
||||||
$users = User::filter($filters);
|
$users = User::filter($filters);
|
||||||
|
|
||||||
return $this->listResponse($users);
|
return $this->listResponse($users);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,9 +79,11 @@ class UserController extends BaseController
|
|||||||
*/
|
*/
|
||||||
public function create(CreateUserRequest $request)
|
public function create(CreateUserRequest $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
$user = UserFactory::create();
|
$user = UserFactory::create();
|
||||||
|
|
||||||
return $this->itemResponse($user);
|
return $this->itemResponse($user);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,8 +94,10 @@ class UserController extends BaseController
|
|||||||
*/
|
*/
|
||||||
public function store(StoreUserRequest $request)
|
public function store(StoreUserRequest $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
$company = auth()->user()->company();
|
$company = auth()->user()->company();
|
||||||
//save user
|
//save user
|
||||||
|
|
||||||
$user = $this->user_repo->save($request->all(), UserFactory::create($company->id, auth()->user()->id));
|
$user = $this->user_repo->save($request->all(), UserFactory::create($company->id, auth()->user()->id));
|
||||||
|
|
||||||
$user->companies()->attach($company->id, [
|
$user->companies()->attach($company->id, [
|
||||||
@ -101,6 +109,8 @@ class UserController extends BaseController
|
|||||||
'settings' => $request->input('settings'),
|
'settings' => $request->input('settings'),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
CreateCompanyToken::dispatchNow($company, $user);
|
||||||
|
|
||||||
$user->load('companies');
|
$user->load('companies');
|
||||||
|
|
||||||
return $this->itemResponse($user);
|
return $this->itemResponse($user);
|
||||||
@ -142,6 +152,7 @@ class UserController extends BaseController
|
|||||||
*/
|
*/
|
||||||
public function update(UpdateUserRequest $request, User $user)
|
public function update(UpdateUserRequest $request, User $user)
|
||||||
{
|
{
|
||||||
|
|
||||||
$user = $this->user_repo->save($request->all(), $user);
|
$user = $this->user_repo->save($request->all(), $user);
|
||||||
|
|
||||||
return $this->itemResponse($user);
|
return $this->itemResponse($user);
|
||||||
@ -156,10 +167,39 @@ class UserController extends BaseController
|
|||||||
*/
|
*/
|
||||||
public function destroy(DestroyUserRequest $request, User $user)
|
public function destroy(DestroyUserRequest $request, User $user)
|
||||||
{
|
{
|
||||||
|
|
||||||
$user->delete();
|
$user->delete();
|
||||||
$user->tokens->delete();
|
|
||||||
|
|
||||||
return response()->json([], 200);
|
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;
|
namespace App\Http\Requests\User;
|
||||||
|
|
||||||
|
use App\DataMapper\DefaultSettings;
|
||||||
use App\Http\Requests\Request;
|
use App\Http\Requests\Request;
|
||||||
use App\Http\ValidationRules\NewUniqueUserRule;
|
use App\Http\ValidationRules\NewUniqueUserRule;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
@ -25,27 +26,39 @@ class StoreUserRequest extends Request
|
|||||||
|
|
||||||
public function authorize() : bool
|
public function authorize() : bool
|
||||||
{
|
{
|
||||||
|
|
||||||
return auth()->user()->can('create', User::class);
|
return auth()->user()->can('create', User::class);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function rules()
|
public function rules()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
$this->sanitize();
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'first_name' => 'required|string|max:100',
|
'first_name' => 'required|string|max:100',
|
||||||
'last_name' => 'required|string:max:100',
|
'last_name' => 'required|string:max:100',
|
||||||
'email' => new NewUniqueUserRule(),
|
'email' => new NewUniqueUserRule(),
|
||||||
|
'is_admin' => 'required',
|
||||||
];
|
];
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public function sanitize()
|
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 = [
|
protected $casts = [
|
||||||
'settings' => 'collection',
|
'settings' => 'collection',
|
||||||
|
'permissions' => 'object',
|
||||||
];
|
];
|
||||||
|
|
||||||
public function account()
|
public function account()
|
||||||
|
@ -16,8 +16,8 @@ use App\Events\Invoice\InvoiceWasCreated;
|
|||||||
use App\Events\Invoice\InvoiceWasMarkedSent;
|
use App\Events\Invoice\InvoiceWasMarkedSent;
|
||||||
use App\Events\Invoice\InvoiceWasUpdated;
|
use App\Events\Invoice\InvoiceWasUpdated;
|
||||||
use App\Events\Payment\PaymentWasCreated;
|
use App\Events\Payment\PaymentWasCreated;
|
||||||
use App\Events\User\UserCreated;
|
|
||||||
use App\Events\User\UserLoggedIn;
|
use App\Events\User\UserLoggedIn;
|
||||||
|
use App\Events\User\UserWasCreated;
|
||||||
use App\Listeners\Activity\CreatedClientActivity;
|
use App\Listeners\Activity\CreatedClientActivity;
|
||||||
use App\Listeners\Activity\PaymentCreatedActivity;
|
use App\Listeners\Activity\PaymentCreatedActivity;
|
||||||
use App\Listeners\Invoice\CreateInvoiceActivity;
|
use App\Listeners\Invoice\CreateInvoiceActivity;
|
||||||
@ -35,7 +35,7 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $listen = [
|
protected $listen = [
|
||||||
UserCreated::class => [
|
UserWasCreated::class => [
|
||||||
SendVerificationNotification::class,
|
SendVerificationNotification::class,
|
||||||
],
|
],
|
||||||
UserLoggedIn::class => [
|
UserLoggedIn::class => [
|
||||||
|
@ -11,12 +11,14 @@
|
|||||||
|
|
||||||
namespace App\Repositories;
|
namespace App\Repositories;
|
||||||
|
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class BaseRepository
|
class BaseRepository
|
||||||
{
|
{
|
||||||
|
use MakesHash;
|
||||||
/**
|
/**
|
||||||
* @return null
|
* @return null
|
||||||
*/
|
*/
|
||||||
@ -122,6 +124,8 @@ class BaseRepository
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$ids = $this->transformKeys($ids);
|
||||||
|
|
||||||
$entities = $this->findByPublicIdsWithTrashed($ids);
|
$entities = $this->findByPublicIdsWithTrashed($ids);
|
||||||
|
|
||||||
foreach ($entities as $entity) {
|
foreach ($entities as $entity) {
|
||||||
|
@ -84,10 +84,10 @@ class UserTransformer extends EntityTransformer
|
|||||||
|
|
||||||
public function includeUserCompany(User $user)
|
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);
|
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::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
|
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