1. Go to this page and download the library: Download ansezz/laravel-gamify library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Ansezz\Gamify\Gamify;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable, Gamify;
namespace App\Gamify\Points;
use Ansezz\Gamify\BasePoint;
class PostCreated extends BasePoint
{
public function __invoke($point, $subject)
{
return true;
}
}
$user = auth()->user();
$point = Point::find(1);
// or you can use facade function
Gamify::achievePoint($point);
// or via HasBadge trait method
$user->achievePoint($point);
$user = auth()->user();
$point = Point::find(1);
// or you can use facade function
Gamify::undoPoint($point);
// or via HasPoint trait method
$user->undoPoint($point);
// get integer point
$user->achieved_points; // 20
foreach($user->points as $point) {
// name of the point type
$point->name;
// how many points
$point->point;
}
foreach($user->badges as $badge) {
// name of the point type
$point->name;
// how many points
$point->image;
}
class PointsChanged implements ShouldBroadcast {
...
public function __construct(Model $subject, int $point, bool $increment)
{
$this->subject = $subject;
$this->point = $point;
$this->increment = $increment;
}
}
namespace App\Gamify\Badges;
use Ansezz\Gamify\BaseBadge;
class PostCreated extends BaseBadge
{
/**
* @param $badge
* @param $subject
*
* @return bool
*/
public function beginner($badge, $subject)
{
return $subject->achieved_points >= 100;
}
/**
* @param $badge
* @param $subject
*
* @return bool
*/
public function intermediate($badge, $subject)
{
return $subject->achieved_points >= 200;
}
/**
* @param $badge
* @param $subject
*
* @return bool
*/
public function advanced($badge, $subject)
{
return $subject->achieved_points >= 300;
}
}
// to reset point back to zero
$user->resetPoint();
// sync all badges for current subject using Facade
Gamify::syncBadges($user);
// or via HasBadge trait method
$user->syncBadges();
$badge = Badge::find(1);
// sync all badges for current subject using Facade
Gamify::syncBadge($badge, $user)
// or via HasBadge trait method
$user->syncBadge($badge);
class BadgeAchieved implements ShouldBroadcast {
...
public function __construct($subject, $badge)
{
$this->subject = $subject;
$this->badge = $badge;
}
}
return [
// Reputation model
'point_model' => '\Ansezz\Gamify\Point',
// Broadcast on private channel
'broadcast_on_private_channel' => true,
// Channel name prefix, user id will be suffixed
'channel_name' => 'user.reputation.',
// Badge model
'badge_model' => '\Ansezz\Gamify\Badge',
// Where all badges icon stored
'badge_icon_folder' => 'images/badges/',
// Extention of badge icons
'badge_icon_extension' => '.svg',
// All the levels for badge
'badge_levels' => [
'beginner' => 1,
'intermediate' => 2,
'advanced' => 3,
],
// Default level
'badge_default_level' => 1,
// Badge achieved vy default if check function not exit
'badge_is_archived' => false,
// point achieved vy default if check function not exit
'point_is_archived' => true,
];