LaravelPackages.net
Acme Inc.
Toggle sidebar
wanmigs/laravel-status

Extending status on model with enabling/disabling function and bulk update of status for any model

4
0
v1.0.0
About wanmigs/laravel-status

wanmigs/laravel-status is a Laravel package for extending status on model with enabling/disabling function and bulk update of status for any model. It currently has 0 GitHub stars and 4 downloads on Packagist (latest version v1.0.0). Install it with composer require wanmigs/laravel-status. Discover more Laravel packages by wanmigs or browse all Laravel packages to compare alternatives.

Last updated

User Status

To enable status for a model, use the Fligno\User\Traits\HasStatus trait on the model:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Fligno\User\Traits\HasStatus

class Flight extends Model
{
    use HasStatus;
}

You should also add the is_active column to your database table.

Schema::table('users', function (Blueprint $table) {
    $table->boolean('is_active')->default(0);
});

Now, you can call the activate method on the model, the is_active column will be set to 1. deactivate method on model for deactivation and toggleStatus to toggle is_active column to true/false.

To determine if a given model instance has been activated use the isActive() method:

if ($user->isActive()) {
    //
}

Extending methods to your Controller

To enable status for a controller, use the Fligno\User\Traits\ManageStatus trait on the controller and create a variable protected $model = 'App\User'

<?php

namespace App\Http\Controllers;

use Fligno\User\Traits\ManageStatus;

class UserController extends Controller
{
	use  ManageStatus;

	protected $model = 'App\User';
}

Available methods in controller:

Methods | Parameter | set is_active | Request Params --- | --- | --- | --- activate| {id} | true deactivate| {id} | false toggleStatus| {id} | true/false bulkStatusUpdate| N/A | true/false | Array ids, Boolean status

Now you can add this to your routes/web.php:

<?php

Route::post('/user/active/{id}', 'UserController@activate')->name('user.activation');

Route::post('/user/deactivate/{id}', 'UserController@deactivate')->name('user.deactivation');

Route::post('/user/toggle/{id}', 'UserController@toggleStatus')->name('user.toggle');

Route::post("/user/bulk/update", "UserController@bulkStatusUpdate")->name("user.bulkUpdate");

Or you can simply add this function to you routes/web.php:

<?php

use Fligno\User\UserStatus;

UserStatus::routes(['UserController']);

For multiple controller.

UserStatus::routes(['UserController', 'MemberController']);

This will generate the routes above as kebab case:

Controller | Link | Route Name --- | --- | --- UserController| /user/../{id} | user.* MemberController| /member/../{id} | member.* UserAdminController| /user-admin/../{id} | user-admin.*

... = active, deactivate and toggle * = activation, deactivation and toggle

You can also define the custom base link for route:

UserStatus::routes(['UserController' => 'custom-user']);

This will generate the routes above as kebab case:

/custom-user/../{id}

route name: custom-user.*

Unit Testing

/** @test */
public  function  a_user_can_activate_user()
{
	$user  =  factory('App\User')->create();
	$this->postJson(route('user.activation',  $user->id));

	tap($user->fresh(),  function  ($user)  {
		$this->assertTrue($user->isActive());
	});
}

/** @test */
public  function  a_user_can_deactivate_user()
{
	$user  =  factory('App\User')->create(['is_active'  =>  true]);
	$this->postJson(route('user.deactivation',  $user->id));

	tap($user->fresh(),  function  ($user)  {
		$this->assertFalse($user->isActive());
	});
}

/** @test */
public  function  a_user_can_toggle_user_status()
{
	$user  =  factory('App\User')->create(['is_active'  =>  true]);

	$this->postJson(route('user.toggle',  $user->id));

	tap($user->fresh(),  function  ($user)  {
		$this->assertFalse($user->isActive());
	});
}

/** @test */
public  function  a_user_can_update_mulitple_user_status()
{

	$users  =  factory('App\User',  5)->create(['is_active'  =>  false]);
	$ids  =  $users->pluck('id')->all();

	$this->postJson(route('user.bulkUpdate'), [
		'ids'  =>  $ids,
		'status'  =>  true
	]);

	tap($users->fresh(),  function  ($users)  {
		foreach  ($users  as  $user)  {
			$this->assertTrue($user->isActive());
		}
	});
}

Star History Chart