faustbrian / laravel-leaderboard
Points and Ranks for Eloquent models.
Requires
- php: ^7.2
- illuminate/database: ^5.8|^6.0
- illuminate/support: ^5.8|^6.0
Requires (Dev)
- graham-campbell/testbench: ^5.0
- mockery/mockery: ^1.0
- phpunit/phpunit: ^8.2
README
This package offers to reward entities with points and to create a ranking based on these points.
It is possible to reward, penalize, multiply, redeem and reset points and entities can be blacklisted/whitelisted which makes it possible to prevent certain entities to receive points.
Each entity will receive a rank based on its points which could be used to display a listing of the users with the most points or something like that.
Installation
Require this package, with Composer, in the root directory of your project.
$ composer require artisanry/leaderboard
At last you need to publish the migration and run the migration:
php artisan vendor:publish --provider="Artisanry\Leaderboard\LeaderboardServiceProvider" && php artisan migrate
Usage
Trait
<?php namespace App; use Artisanry\Leaderboard\Traits\Boardable; class User { use Boardable; }
Example
$user = App\User::find(1); $events = [ 'CompletedProfile' => 10, 'SocialLoginFacebook' => 5, 'SocialLoginTwitter' => 5, 'SocialLoginGoogleplus' => 5, ]; // User filled out address, phone, email, etc. if($user->completedProfile()) { $user->reward($events['CompletedProfile']); } // User added his Facebook profile if($user->hasSocialProfile('facebook')) { $user->reward($events['SocialLoginFacebook']); } // User removed his Facebook profile if($user->removedSocialProfile('facebook')) { $user->penalize($events['SocialLoginFacebook']); } // User purchased a premium package $plan = App\Plan::findByTitle('Premium'); if($user->purchased($plan)) { $user->reward($plan->points); } // User wants to purchase something $product = App\Product::find(1); try { if($user->redeem($product->price)) { event(new ProductWasPurchased($product, $user)); } } catch(\Artisanry\Leaderboard\Exceptions\InsufficientFundsException $e) { // Not enough points dd($e); }
Functions
Reward the given amount of points.
$user->reward(10);
Remove the given amount of points.
$user->penalize(5);
Multiply all points by the given factor.
$user->multiply(2);
Redeem the given amount of points.
$user->redeem(15);
Reset all points to zero.
$user->reset();
Blacklist the user. This will disable all functions except for blacklist/whitelist.
$user->blacklist();
Whitelist the user.
$user->whitelist();
Testing
$ phpunit
Security
If you discover a security vulnerability within this package, please send an e-mail to hello@basecode.sh. All security vulnerabilities will be promptly addressed.
Credits
This project exists thanks to all the people who contribute.
License
Mozilla Public License Version 2.0 (MPL-2.0).