Skip to content

Commit

Permalink
Sync
Browse files Browse the repository at this point in the history
  • Loading branch information
acacha committed Jun 14, 2017
1 parent 2ff1970 commit 58043bf
Show file tree
Hide file tree
Showing 9 changed files with 336 additions and 7 deletions.
1 change: 1 addition & 0 deletions composer.json
Expand Up @@ -22,6 +22,7 @@
"php": "~5.6|~7.0",
"acacha/stateful-eloquent": "^0.1.3",
"laravel/passport": "^2.0",
"scool/ebre_escool_model": "dev-master",
"spatie/laravel-permission": "^2.1",
"venturecraft/revisionable": "^1.28"
},
Expand Down
11 changes: 11 additions & 0 deletions resources/views/users-migration.blade.php
@@ -0,0 +1,11 @@
@extends('adminlte::page')

@section('htmlheader_title')
Users migration
@endsection


@section('main-content')
<users-migration-dashboard></users-migration-dashboard>
<users-migration></users-migration>
@endsection
54 changes: 54 additions & 0 deletions src/Events/UserMigrationStatusUpdated.php
@@ -0,0 +1,54 @@
<?php

namespace Acacha\Users\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

/**
* Class UserMigrationStatusUpdated
*
* @package Acacha\Users\Events
*/
class UserMigrationStatusUpdated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;

/**
* Migrated user.
*
* @var
*/
public $user;

/**
* Progress status value.
*
* @var
*/
public $progress;

/**
* Create a new event instance.
*
* @param $user
*/
public function __construct($user, $progress)
{
$this->user = $user;
$this->progress = $progress;
}

/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new Channel('users-migration');
}
}
84 changes: 78 additions & 6 deletions src/Http/Controllers/UsersManagementController.php
Expand Up @@ -4,9 +4,12 @@

use Acacha\Users\Events\UserCreated;
use Acacha\Users\Http\Requests\CreateUserRequest;
use Acacha\Users\Http\Requests\MassiveDestroyRequest;
use Acacha\Users\Http\Requests\UpdateUserRequest;
use App\User;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Password;
use Response;

/**
Expand Down Expand Up @@ -58,17 +61,26 @@ public function store(CreateUserRequest $request)
return Response::json(['created' => true ]);
}


/**
* Remove the specified resource from storage.
* Massive destroy.
*
* @param int $id
* @param MassiveDestroyRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function destroy($id)
public function massiveDestroy(MassiveDestroyRequest $request)
{
$this->authorize('delete-users');
User::destroy($id);
$this->authorize('massive-delete-users');
return $this->executeDestroy($request->input('ids'));
}

/**
* Execute destroy.
*
* @param $ids
* @return \Illuminate\Http\JsonResponse
*/
private function executeDestroy($ids){
User::destroy($ids);

//TODO
// NOTE : this method trigger method "created" in UserObserver. Fire also and event to enable hooking.
Expand All @@ -77,6 +89,19 @@ public function destroy($id)
return Response::json(['deleted' => true ]);
}

/**
* Remove the specified resource from storage.
*
* @param int|array $id
* @return \Illuminate\Http\JsonResponse
*/
public function destroy($id)
{
$this->authorize('delete-users');

return $this->executeDestroy($id);
}

/**
* Display the specified resource.
*
Expand Down Expand Up @@ -115,4 +140,51 @@ public function registerByEmail(Request $request)
return view('acacha_users::register-by-email',$data);
}

/**
* Send a reset link to the given user.
*
* @param Request $request
* @return JsonResponse
*/
public function sendResetLinkEmail(Request $request)
{
$this->validate($request, ['email' => 'required|email']);

$response = Password::broker()->sendResetLink(
$request->only('email')
);

if (Password::RESET_LINK_SENT) {
return new JsonResponse(['status' => trans($response) ], 200);
}

return new JsonResponse(['email' => trans($response) ], 422);

}

/**
* Send a reset link to the given users.
*
* @param Request $request
* @return JsonResponse
*/
public function massiveSendResetLinkEmail(Request $request)
{
$this->validate($request, ['ids' => 'required']);

$errors = [];
foreach ($request->input('ids') as $id) {
$user = User::find($id);
$response = Password::broker()->sendResetLink([ 'email' => $user->email ]);
if (! Password::RESET_LINK_SENT) {
dd('ERROR!');
$errors[] = $response;
}
}

if ( count($errors) > 0 ) return new JsonResponse(['status' => 'Error', 'errors' => $errors ], 422);

return new JsonResponse(['status' => 'Done' ], 200);
}

}
97 changes: 97 additions & 0 deletions src/Http/Controllers/UsersMigrationController.php
@@ -0,0 +1,97 @@
<?php

namespace Acacha\Users\Http\Controllers;

use Acacha\Users\Events\UserMigrationStatusUpdated;
use Acacha\Users\Http\Requests\UsersMigrationRequest;

/**
* Class UsersMigrationController.
*
* @package App\Http\Controllers
*/
class UsersMigrationController extends Controller
{
/**
* Show users migration.
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function index()
{
$this->authorize('migrate-users');
$data = [];
return view('acacha_users::users-migration',$data);
}

/**
* Get total number of users in source migration database.
*/
public function totalNumberOfUsers()
{
$this->authorize('migrate-users');
return [ 'data' => 68 ];
}

/**
* Migrate multiple users.
*
*/
public function migrate(UsersMigrationRequest $request)
{
$usersToMigrate = $this->usersToMigrateByRequest($request);
dd($usersToMigrate);
$progress= 0;
foreach ($usersToMigrate as $user ) {
event(new UserMigrationStatusUpdated($user, $progress));
sleep(1);
dump ('User ' . $user . ' migrated!');
$progress = $progress + 50;
}
event(new UserMigrationStatusUpdated('Finish!', $progress));
}


/**
* Get users to migrate.
*
* @param $request
*/
protected function usersToMigrateByRequest($request)
{
if ($users = $request->has('users')) return $this->usersToMigrate($users, $request);
if ($filter = $request->has('filter')) return $this->usersToMigrateByFilter($filter, $request);
return $this->allUsers($request);
}

/**
* Users to migrate by user id list.
*
* @param $users
*/
protected function usersToMigrate($users, $request)
{

}

/**
* Users to migrate by filter.
*
* @param $filter
*/
protected function usersToMigrateByFilter($filter, $request)
{

}

/**
* Get all valid users.
*
* @param $request
* @return \Illuminate\Database\Eloquent\Collection|static[]
*/
protected function allUsers($request)
{
return \Scool\EbreEscoolModel\User::all();
}
}
36 changes: 36 additions & 0 deletions src/Http/Requests/MassiveDestroyRequest.php
@@ -0,0 +1,36 @@
<?php

namespace Acacha\Users\Http\Requests;

use Auth;
use Illuminate\Foundation\Http\FormRequest;

/**
* Class MassiveDestroyRequest.
*
* @package Acacha\Users\Http\Requests
*/
class MassiveDestroyRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::user()->can('massive-delete-users');
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'ids' => 'required'
];
}
}
37 changes: 37 additions & 0 deletions src/Http/Requests/UsersMigrationRequest.php
@@ -0,0 +1,37 @@
<?php

namespace Acacha\Users\Http\Requests;

use Auth;
use Illuminate\Foundation\Http\FormRequest;

/**
* Class UsersMigrationRequest.
*
* @package Acacha\Users\Http\Requests
*/
class UsersMigrationRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return Auth::user()->can('migrate-users');
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'users.*.id' => 'sometimes|numeric',
'filter' => 'sometimes|in:foo,bar'
];
}
}

0 comments on commit 58043bf

Please sign in to comment.