bambolee-digital/event-user-manager

Laravel 和 FilamentPhp 的用户事件管理系统

1.0.1 2024-09-15 15:30 UTC

This package is auto-updated.

Last update: 2024-09-19 17:39:09 UTC


README

葡萄牙语

Event User Manager 是一个 Laravel 扩展包,用于管理用户事件,支持重复事件、附件以及与 Filament 的集成以进行管理。

安装

您可以通过 composer 安装此包

composer require bambolee-digital/event-user-manager

此包依赖于 spatie/laravel-translatable。如果您尚未安装它,可以通过运行以下命令进行安装:

composer require spatie/laravel-translatable

配置

使用以下命令发布配置文件:

php artisan vendor:publish --provider="BamboleeDigital\EventUserManager\EventUserManagerServiceProvider" --tag="config"

这将创建一个 config/event-user-manager.php 文件。您可以根据需要修改设置。

您需要在您的 Filament 配置文件中注册以下资源:

    use BamboleeDigital\EventUserManager\Filament\Resources\EventResource;
    use BamboleeDigital\EventUserManager\Filament\Resources\EventTypeResource;
    use BamboleeDigital\OnboardingPackage\Filament\Resources\QuestionResource;

    ->resources([
        EventResource::class,
        EventTypeResource::class,
        RecurrencePatternResource::class,
    ])

使用方法

API

该包提供了用于管理事件、笔记、附件和图片的 API 端点。主要端点包括:

事件

  • GET /api/events:列出事件
  • POST /api/events:创建新事件
  • GET /api/events/{id}:获取事件详情
  • PUT /api/events/{id}:更新事件
  • DELETE /api/events/{id}:删除事件
  • GET /api/events/past:获取过去的事件
  • GET /api/events/future:获取未来的事件
  • GET /api/events/status/{status}:按状态获取事件

笔记

  • POST /api/events/{event}/notes:向事件添加笔记
  • PUT /api/events/{event}/notes/{note}:更新笔记
  • DELETE /api/events/{event}/notes/{note}:删除笔记

附件和图片

  • POST /api/events/{event}/attachments:向事件添加附件
  • DELETE /api/events/{event}/attachments/{attachment}:从事件中移除附件
  • POST /api/events/{event}/images:向事件添加图片
  • DELETE /api/events/{event}/images/{image}:从事件中移除图片

API 使用示例

这里是 Event User Manager API 的全面示例。这些示例使用 Guzzle HTTP 客户端,但您可以将它们修改为您的首选 HTTP 客户端。

设置

首先,设置 HTTP 客户端

use GuzzleHttp\Client;

$client = new Client([
    'base_uri' => 'http://your-api-base-url/',
    'headers' => [
        'Authorization' => 'Bearer YOUR_API_TOKEN',
        'Accept' => 'application/json',
    ],
]);

事件

列出事件

$response = $client->get('api/events');
$events = json_decode($response->getBody(), true);

创建完整事件

$multipart = [
    ['name' => 'name', 'contents' => 'Annual Company Retreat'],
    ['name' => 'description', 'contents' => 'Our yearly company-wide retreat for team building and strategy planning.'],
    ['name' => 'event_type_id', 'contents' => '1'],
    ['name' => 'start_date', 'contents' => '2024-07-15 09:00:00'],
    ['name' => 'end_date', 'contents' => '2024-07-17 17:00:00'],
    ['name' => 'status', 'contents' => 'active'],
    ['name' => 'recurrence_pattern_id', 'contents' => '2'],
    ['name' => 'frequency_type', 'contents' => 'yearly'],
    ['name' => 'frequency_count', 'contents' => '5'],
    ['name' => 'metadata[location]', 'contents' => 'Mountain Resort'],
    ['name' => 'metadata[expected_attendees]', 'contents' => '150'],
    [
        'name' => 'attachments[]',
        'contents' => fopen('path/to/schedule.pdf', 'r'),
        'filename' => 'retreat_schedule.pdf',
    ],
    [
        'name' => 'images[]',
        'contents' => fopen('path/to/venue.jpg', 'r'),
        'filename' => 'retreat_venue.jpg',
    ],
    ['name' => 'notes[0][content]', 'contents' => 'Remember to book flight tickets for overseas participants.'],
    [
        'name' => 'notes[0][attachments][]',
        'contents' => fopen('path/to/flight_details.pdf', 'r'),
        'filename' => 'flight_details.pdf',
    ],
];

$response = $client->post('api/events', [
    'multipart' => $multipart,
]);

$eventData = json_decode($response->getBody(), true);
echo "Event created with ID: " . $eventData['id'];

获取事件详情

$eventId = 1;
$response = $client->get("api/events/{$eventId}");
$event = json_decode($response->getBody(), true);

更新事件

$eventId = 1;
$response = $client->put("api/events/{$eventId}", [
    'json' => [
        'name' => 'Updated Event Name',
        'description' => 'This is an updated description',
        'start_date' => '2024-08-01 10:00:00',
    ],
]);
$updatedEvent = json_decode($response->getBody(), true);

删除事件

$eventId = 1;
$response = $client->delete("api/events/{$eventId}");
echo $response->getStatusCode() == 204 ? "Event deleted successfully" : "Failed to delete event";

获取过去的事件

$response = $client->get('api/events/past');
$pastEvents = json_decode($response->getBody(), true);

获取未来的事件

$response = $client->get('api/events/future');
$futureEvents = json_decode($response->getBody(), true);

按状态获取事件

$status = 'active';
$response = $client->get("api/events/status/{$status}");
$activeEvents = json_decode($response->getBody(), true);

笔记

向事件添加笔记

$eventId = 1;
$response = $client->post("api/events/{$eventId}/notes", [
    'json' => [
        'content' => 'This is a new note for the event',
    ],
]);
$note = json_decode($response->getBody(), true);

更新笔记

$eventId = 1;
$noteId = 1;
$response = $client->put("api/events/{$eventId}/notes/{$noteId}", [
    'json' => [
        'content' => 'This is an updated note content',
    ],
]);
$updatedNote = json_decode($response->getBody(), true);

删除笔记

$eventId = 1;
$noteId = 1;
$response = $client->delete("api/events/{$eventId}/notes/{$noteId}");
echo $response->getStatusCode() == 204 ? "Note deleted successfully" : "Failed to delete note";

附件

向事件添加附件

$eventId = 1;
$response = $client->post("api/events/{$eventId}/attachments", [
    'multipart' => [
        [
            'name' => 'attachment',
            'contents' => fopen('path/to/document.pdf', 'r'),
            'filename' => 'important_document.pdf',
        ],
    ],
]);
$attachment = json_decode($response->getBody(), true);

从事件中移除附件

$eventId = 1;
$attachmentId = 1;
$response = $client->delete("api/events/{$eventId}/attachments/{$attachmentId}");
echo $response->getStatusCode() == 204 ? "Attachment removed successfully" : "Failed to remove attachment";

图片

向事件添加图片

$eventId = 1;
$response = $client->post("api/events/{$eventId}/images", [
    'multipart' => [
        [
            'name' => 'image',
            'contents' => fopen('path/to/image.jpg', 'r'),
            'filename' => 'event_image.jpg',
        ],
    ],
]);
$image = json_decode($response->getBody(), true);

从事件中移除图片

$eventId = 1;
$imageId = 1;
$response = $client->delete("api/events/{$eventId}/images/{$imageId}");
echo $response->getStatusCode() == 204 ? "Image removed successfully" : "Failed to remove image";

这些示例涵盖了 Event User Manager API 中所有主要操作。请记住,将 'http://your-api-base-url/' 替换为您的实际 API URL,并将 'YOUR_API_TOKEN' 替换为有效的认证令牌。同时,调整示例中的文件路径以匹配您的本地文件结构。

此示例演示了使用以下内容创建事件:

  • 基本事件详情(名称、描述、日期、状态)
  • 事件类型和重复模式
  • 元数据(位置和预期参与者)
  • 主要事件附件和图片
  • 带有自己附件和图片的笔记

请记住,将 'http://your-api-base-url/' 替换为您的实际 API URL,并将 'YOUR_API_TOKEN' 替换为有效的认证令牌。

Filament Admin

该包包括用于管理事件、事件类型和重复模式的 Filament 资源。这些将在您的 Filament 面板中自动可用。

通知

该包包括一个可配置的通知系统。您可以通过编辑配置文件添加自定义通知渠道。

定制

您可以扩展或覆盖软件包的任何功能。请参考配置文件以获取自定义选项。

测试

composer test

变更日志

请参阅变更日志获取最近更改的详细信息。

贡献

欢迎贡献!请参阅贡献指南以获取详细信息。

安全性

如果您发现任何安全问题,请通过电子邮件your-email@example.com联系,而不是使用问题跟踪器。

致谢

许可证

事件用户管理器是开源软件,遵循MIT许可证