# 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
@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`