# memberships **Repository Path**: izqutcn/memberships ## Basic Information - **Project Name**: memberships - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-20 - **Last Updated**: 2025-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Izqut Membership A simple and powerful membership management package for Laravel. ## Features - ✅ Simple and easy-to-use API - ✅ Check VIP membership with `$user->isVip()` - ✅ Support for multiple membership plans - ✅ Lifetime (perpetual) membership support - ✅ Time-based membership management - ✅ Blade directives (@vip, @membership) - ✅ Helper functions - ✅ Flexible user model configuration - ✅ Compatible with PHP 7.3+ and Laravel 8-11 ## Installation ```bash composer require izqut/membership ``` ## Setup ### 1. Run Migrations ```bash php artisan migrate ``` ### 2. Publish Config (Optional) ```bash php artisan vendor:publish --tag=membership-config ``` ### 3. Add Trait to User Model ```php use Izqut\Membership\Traits\HasMembership; class User extends Authenticatable { use HasMembership; // ... } ``` ### 4. Custom User Model (Optional) If your user model is not named `User` (e.g., `UserAccount`, `Member`), configure it in the config file: ```php // config/membership.php 'user_model' => App\Models\UserAccount::class, ``` Or in `.env`: ```env MEMBERSHIP_USER_MODEL=App\Models\UserAccount ``` ## Usage ### Creating Membership Plans ```php use Izqut\Membership\Models\Membership; // Create VIP membership (slug='vip' is automatically recognized as VIP) Membership::create([ 'name' => 'VIP Membership', 'slug' => 'vip', 'price' => 99.99, 'duration_days' => 30, // 30 days 'is_active' => true, ]); // Create Premium membership Membership::create([ 'name' => 'Premium Membership', 'slug' => 'premium', 'price' => 49.99, 'duration_days' => 30, 'is_active' => true, ]); // Create Lifetime membership Membership::create([ 'name' => 'Lifetime Membership', 'slug' => 'lifetime', 'price' => 299.99, 'duration_days' => null, // null = lifetime 'is_active' => true, ]); ``` ### Subscribing Users ```php $user = User::find(1); $plan = Membership::where('slug', 'vip')->first(); // Subscribe to membership $user->subscribe($plan); // Or by ID $user->subscribe(1); ``` ### Checking VIP Status ```php // In controller if ($user->isVip()) { // VIP features } // Or using helper function if (is_vip()) { // Current user is VIP } ``` ### Checking Membership ```php // Has active membership? if ($user->hasMembership()) { // User has membership } // Has specific membership plan? if ($user->hasMembershipPlan('vip')) { // User has VIP membership } // Get current membership plan $plan = $user->currentMembershipPlan(); // Get remaining days $daysLeft = $user->membershipDaysRemaining(); ``` ### Using in Blade Templates ```blade {{-- Show to VIP members only --}} @vip
VIP Exclusive Content
@endvip {{-- Show to members --}} @membership
Members Only Content
@else
Get membership now!
@endmembership {{-- Show to specific membership plan --}} @membershipPlan('premium')
Premium Content
@endmembershipPlan ``` ### Helper Functions ```php // Get current user's membership $membership = membership(); // Check if VIP if (is_vip()) { // VIP user } // Check if has membership if (has_membership()) { // Has membership } // Check specific membership if (has_membership('vip')) { // Has VIP membership } // Get all active membership plans $plans = membership_plans(); ``` ### Canceling Membership ```php $user->cancelMembership(); ``` ### Advanced Usage ```php // Membership details $membership = $user->membership; if ($membership) { // Is active? $isActive = $membership->isActive(); // Is expired? $isExpired = $membership->isExpired(); // Days remaining $daysLeft = $membership->daysRemaining(); // Membership plan $plan = $membership->membership; // Activate/Deactivate $membership->activate(); $membership->deactivate(); } ``` ### Eloquent Scopes ```php use Izqut\Membership\Models\UserMembership; // Active memberships $activeMemberships = UserMembership::active()->get(); // Expired memberships $expiredMemberships = UserMembership::expired()->get(); // Expiring soon (within 7 days) $expiringSoon = UserMembership::expiringSoon(7)->get(); ``` ## Database Structure ### memberships table - `id` - Primary key - `name` - Membership name - `slug` - URL-friendly identifier (slug='vip' is recognized as VIP) - `description` - Description - `price` - Price - `duration_days` - Duration in days (null = lifetime) - `is_active` - Is active? - `features` - Features (JSON) - `sort_order` - Sort order ### user_memberships table - `id` - Primary key - `user_id` - User ID - `membership_id` - Membership plan ID - `starts_at` - Start date - `expires_at` - Expiration date - `is_active` - Is active? ## Configuration You can customize the following settings in `config/membership.php`: ```php return [ 'currency' => 'USD', 'default_duration' => 30, 'vip_slug' => 'vip', 'user_model' => 'App\\Models\\User', // User model class 'grace_period_days' => 0, 'auto_deactivate_expired' => true, ]; ``` ### Configuration Options - **currency**: Currency code (USD, EUR, etc.) - **default_duration**: Default membership duration in days - **vip_slug**: VIP membership slug identifier (default: 'vip') - **user_model**: Fully qualified user model class name - **grace_period_days**: Grace period after expiration - **auto_deactivate_expired**: Auto-deactivate expired memberships ## Examples ### Simple Example ```php // 1. Create membership plan (slug='vip' is automatically VIP) $vipPlan = Membership::create([ 'name' => 'VIP', 'slug' => 'vip', 'price' => 49.99, 'duration_days' => 30, 'is_active' => true, ]); // 2. Subscribe user $user = User::find(1); $user->subscribe($vipPlan); // 3. Check status if ($user->isVip()) { echo "You are a VIP member!"; } ``` ### Blade Usage Example ```blade
@vip
Welcome VIP member! You have access to exclusive features.
VIP Downloads @else
Become a VIP and unlock more features!
@endvip
``` ## Requirements - PHP 7.3 or higher - Laravel 8.0 or higher ## License MIT License ## About This package provides: 1. **Simple API** - Easy-to-use methods like `$user->isVip()` 2. **Flexible** - Easy to extend and customize 3. **Laravel Standard** - Follows Laravel conventions 4. **Multiple Plans** - Support for VIP, Premium, Basic, and custom membership types 5. **Composer Installation** - Install with `composer require izqut/membership`