286 lines
7.9 KiB
Markdown
286 lines
7.9 KiB
Markdown
# SocialBase Messaging System
|
|
|
|
The SocialBase extension includes a comprehensive messaging system that allows:
|
|
- User-to-user direct messaging
|
|
- System messages from extensions
|
|
- Admin moderation tools
|
|
- Message flagging and review
|
|
|
|
## For Extension Developers
|
|
|
|
### Sending System Messages
|
|
|
|
Other extensions can easily send system messages to users using the `MessagingHelper` class.
|
|
|
|
```php
|
|
use Paymenter\Extensions\Others\SocialBase\Helpers\MessagingHelper;
|
|
|
|
// Send a system message to a single user
|
|
MessagingHelper::sendSystemMessage(
|
|
userId: 1,
|
|
content: 'Your order #12345 has been completed',
|
|
systemType: 'order_update',
|
|
metadata: ['order_id' => 12345]
|
|
);
|
|
|
|
// Send a system message to multiple users
|
|
MessagingHelper::sendSystemMessageToUsers(
|
|
userIds: [1, 2, 3],
|
|
content: 'System maintenance scheduled for tomorrow',
|
|
systemType: 'system_announcement'
|
|
);
|
|
|
|
// Send a direct message from one user to another
|
|
MessagingHelper::sendDirectMessage(
|
|
senderId: 1,
|
|
recipientId: 2,
|
|
content: 'Hello! I have a question about my order.',
|
|
metadata: []
|
|
);
|
|
|
|
// Check if messaging system is available
|
|
if (MessagingHelper::isAvailable()) {
|
|
// Send messages
|
|
}
|
|
|
|
// Get unread message count for a user
|
|
$unreadCount = MessagingHelper::getUnreadCount($userId);
|
|
```
|
|
|
|
### System Message Types
|
|
|
|
When sending system messages, use appropriate `systemType` values to categorize them:
|
|
|
|
- `general` - General system notifications
|
|
- `order_update` - Order status changes
|
|
- `payment_received` - Payment confirmations
|
|
- `account_notification` - Account-related notifications
|
|
- `ticket_update` - Support ticket updates
|
|
- `service_activation` - Service activation notifications
|
|
- `invoice_generated` - New invoice notifications
|
|
- Custom types specific to your extension
|
|
|
|
### Listening for Message Events
|
|
|
|
You can listen for messaging events in your extension:
|
|
|
|
```php
|
|
use Illuminate\Support\Facades\Event;
|
|
|
|
Event::listen('socialbase.message.sent', function ($message) {
|
|
// Handle when a user message is sent
|
|
});
|
|
|
|
Event::listen('socialbase.system_message.sent', function ($message, $userId) {
|
|
// Handle when a system message is sent
|
|
});
|
|
|
|
Event::listen('socialbase.message.flagged', function ($message, $flaggedBy) {
|
|
// Handle when a message is flagged for moderation
|
|
});
|
|
|
|
Event::listen('socialbase.message.approved', function ($message, $moderatorId) {
|
|
// Handle when a message is approved by a moderator
|
|
});
|
|
|
|
Event::listen('socialbase.message.deleted', function ($message, $moderatorId) {
|
|
// Handle when a message is deleted by a moderator
|
|
});
|
|
```
|
|
|
|
### Using the MessagingService Directly
|
|
|
|
For advanced use cases, you can use the `MessagingService` class directly:
|
|
|
|
```php
|
|
use Paymenter\Extensions\Others\SocialBase\Services\MessagingService;
|
|
|
|
$service = new MessagingService();
|
|
|
|
// Send a direct message
|
|
$message = $service->sendDirectMessage($senderId, $recipientId, $content);
|
|
|
|
// Send a message to an existing conversation
|
|
$message = $service->sendMessage($conversationId, $senderId, $content);
|
|
|
|
// Send system message
|
|
$message = $service->sendSystemMessage($userId, $content, 'order_update', ['order_id' => 123]);
|
|
|
|
// Get user's conversations
|
|
$conversations = $service->getUserConversations($userId, $includeArchived = false);
|
|
|
|
// Get unread count
|
|
$unreadCount = $service->getUnreadCount($userId);
|
|
|
|
// Moderation actions
|
|
$service->flagMessage($messageId, $flaggedBy, $reason);
|
|
$service->approveMessage($messageId, $moderatorId);
|
|
$service->deleteMessage($messageId, $moderatorId, $reason);
|
|
```
|
|
|
|
## For Users
|
|
|
|
### Accessing Messages
|
|
|
|
- Navigate to the Messages page from the main navigation menu
|
|
- Unread message counts are displayed in the navigation
|
|
- Click on any conversation to view and reply to messages
|
|
|
|
### Sending Messages
|
|
|
|
1. Visit a user's profile
|
|
2. Click the "Send Message" button
|
|
3. Type your message and click Send
|
|
|
|
### Message Notifications
|
|
|
|
- Unread messages are highlighted in the conversation list
|
|
- System messages appear with a special icon
|
|
- Message counts update in real-time
|
|
|
|
## For Administrators
|
|
|
|
### Message Moderation
|
|
|
|
Access the Message Moderation panel from the admin dashboard:
|
|
|
|
1. Navigate to **Message Moderation** in the admin sidebar
|
|
2. View all flagged messages
|
|
3. Filter by moderation status, system messages, etc.
|
|
|
|
### Moderation Actions
|
|
|
|
- **Approve**: Mark a message as reviewed and appropriate
|
|
- **Flag**: Mark a message for review (with reason)
|
|
- **Delete**: Remove a message (with reason for deletion)
|
|
|
|
### Bulk Actions
|
|
|
|
Select multiple messages to:
|
|
- Approve multiple messages at once
|
|
- Delete multiple messages
|
|
|
|
### Viewing Message Details
|
|
|
|
Click "View" on any message to see:
|
|
- Full message content
|
|
- Sender information
|
|
- Conversation context
|
|
- Metadata (for system messages)
|
|
- Moderation history
|
|
|
|
## Database Schema
|
|
|
|
### Tables
|
|
|
|
- `ext_social_conversations` - Conversation threads
|
|
- `ext_social_conversation_participants` - Users in conversations
|
|
- `ext_social_messages` - Individual messages
|
|
- `ext_social_message_reads` - Read receipts
|
|
|
|
### Conversation Types
|
|
|
|
- `direct` - One-on-one user conversations
|
|
- `group` - Group conversations (future feature)
|
|
- `system` - System message conversations
|
|
|
|
## Example Use Cases
|
|
|
|
### Order Update Notification
|
|
|
|
```php
|
|
// In your order processing extension
|
|
use Paymenter\Extensions\Others\SocialBase\Helpers\MessagingHelper;
|
|
|
|
public function notifyOrderComplete($order)
|
|
{
|
|
MessagingHelper::sendSystemMessage(
|
|
userId: $order->user_id,
|
|
content: "Your order #{$order->id} has been completed successfully!",
|
|
systemType: 'order_update',
|
|
metadata: [
|
|
'order_id' => $order->id,
|
|
'status' => 'completed',
|
|
]
|
|
);
|
|
}
|
|
```
|
|
|
|
### Payment Confirmation
|
|
|
|
```php
|
|
public function notifyPaymentReceived($invoice)
|
|
{
|
|
MessagingHelper::sendSystemMessage(
|
|
userId: $invoice->user_id,
|
|
content: "Payment of {$invoice->total} received for invoice #{$invoice->id}",
|
|
systemType: 'payment_received',
|
|
metadata: [
|
|
'invoice_id' => $invoice->id,
|
|
'amount' => $invoice->total,
|
|
]
|
|
);
|
|
}
|
|
```
|
|
|
|
### Broadcast System Announcement
|
|
|
|
```php
|
|
public function sendMaintenanceNotification()
|
|
{
|
|
$allUserIds = User::pluck('id')->toArray();
|
|
|
|
MessagingHelper::sendSystemMessageToUsers(
|
|
userIds: $allUserIds,
|
|
content: 'Scheduled maintenance will occur tomorrow at 2 AM UTC for approximately 2 hours.',
|
|
systemType: 'system_announcement'
|
|
);
|
|
}
|
|
```
|
|
|
|
## API Reference
|
|
|
|
### MessagingHelper
|
|
|
|
| Method | Parameters | Returns | Description |
|
|
|--------|------------|---------|-------------|
|
|
| `sendSystemMessage` | `$userId`, `$content`, `$systemType`, `$metadata` | `Message` | Send system message to one user |
|
|
| `sendSystemMessageToUsers` | `$userIds`, `$content`, `$systemType`, `$metadata` | `Message[]` | Send system message to multiple users |
|
|
| `sendDirectMessage` | `$senderId`, `$recipientId`, `$content`, `$metadata` | `Message` | Send direct message between users |
|
|
| `getUnreadCount` | `$userId` | `int` | Get unread message count |
|
|
| `isAvailable` | - | `bool` | Check if messaging system is enabled |
|
|
|
|
### MessagingService
|
|
|
|
See "Using the MessagingService Directly" section above for full API reference.
|
|
|
|
## Configuration
|
|
|
|
The messaging system works out of the box with no additional configuration required. Messages are stored in the database and managed through Livewire components.
|
|
|
|
## Security
|
|
|
|
- Users can only send messages to other users
|
|
- Users can only read their own conversations
|
|
- Admins can moderate all messages
|
|
- System messages can only be sent by extensions (not directly by users)
|
|
- Message content is sanitized to prevent XSS attacks
|
|
|
|
## Performance Considerations
|
|
|
|
- Conversations are paginated
|
|
- Messages load on-demand
|
|
- Indexes on key columns ensure fast queries
|
|
- Soft deletes allow message recovery
|
|
|
|
## Future Features
|
|
|
|
- Group conversations
|
|
- File attachments
|
|
- Voice messages
|
|
- Read receipts UI
|
|
- Typing indicators
|
|
- Push notifications
|
|
- Email notifications for messages
|
|
|