Files
animal_management/Events.php
2026-04-04 13:13:00 -04:00

183 lines
5.6 KiB
PHP

<?php
namespace humhub\modules\animal_management;
use humhub\modules\animal_management\models\Animal;
use humhub\modules\animal_management\models\AnimalGalleryItem;
use humhub\modules\animal_management\services\GalleryIntegrationService;
use humhub\modules\file\models\File;
use humhub\modules\post\models\Post;
use humhub\modules\space\models\Space;
use Yii;
class Events
{
public static function onSpaceMenuInit($event): void
{
$space = $event->sender->space ?? null;
if ($space === null || !$space->moduleManager->isEnabled('animal_management')) {
return;
}
$event->sender->addItem([
'label' => Yii::t('AnimalManagementModule.base', 'Animals'),
'group' => 'modules',
'url' => $space->createUrl('/animal_management/animals/index'),
'icon' => '<i class="fa fa-paw"></i>',
'sortOrder' => 110,
'isActive' => (
Yii::$app->controller
&& Yii::$app->controller->module
&& Yii::$app->controller->module->id === 'animal_management'
&& Yii::$app->controller->id === 'animals'
),
]);
}
public static function onRescueSettingsMenuInit($event): void
{
$space = $event->sender->space ?? null;
if ($space === null || !$space->moduleManager->isEnabled('animal_management')) {
return;
}
$event->sender->addItem([
'label' => Yii::t('AnimalManagementModule.base', 'Animal Management'),
'url' => $space->createUrl('/animal_management/settings'),
'sortOrder' => 300,
'isActive' => (
Yii::$app->controller
&& Yii::$app->controller->module
&& Yii::$app->controller->module->id === 'animal_management'
&& Yii::$app->controller->id === 'settings'
),
]);
}
public static function onSpaceAdminMenuInitFallback($event): void
{
$space = $event->sender->space ?? null;
if ($space === null || !$space->moduleManager->isEnabled('animal_management')) {
return;
}
if ($space->moduleManager->isEnabled('rescue_foundation') || !$space->isAdmin()) {
return;
}
$event->sender->addItem([
'label' => Yii::t('AnimalManagementModule.base', 'Animal Management'),
'group' => 'admin',
'url' => $space->createUrl('/animal_management/settings'),
'icon' => '<i class="fa fa-paw"></i>',
'sortOrder' => 600,
'isActive' => (
Yii::$app->controller
&& Yii::$app->controller->module
&& Yii::$app->controller->module->id === 'animal_management'
&& Yii::$app->controller->id === 'settings'
),
]);
}
public static function onPostAfterSave($event): void
{
$post = $event->sender ?? null;
if (!$post instanceof Post) {
return;
}
if (Yii::$app->db->schema->getTableSchema('rescue_animal_gallery_item', true) === null) {
return;
}
$message = trim((string)$post->message);
if ($message === '' || stripos($message, '#gallery') === false) {
return;
}
$content = $post->content;
$container = $content->container ?? null;
if (!$container instanceof Space) {
return;
}
if (!$container->moduleManager->isEnabled('animal_management')) {
return;
}
$attachedFiles = File::findByRecord($post);
if (empty($attachedFiles)) {
return;
}
$imageFiles = [];
foreach ($attachedFiles as $file) {
if (!$file instanceof File) {
continue;
}
if (strpos((string)$file->mime_type, 'image/') !== 0) {
continue;
}
$imageFiles[] = $file;
}
if (empty($imageFiles)) {
return;
}
$animals = Animal::find()
->where(['contentcontainer_id' => $container->contentcontainer_id])
->all();
if (empty($animals)) {
return;
}
$matchedAnimals = [];
$searchableMessage = strtolower(strip_tags($message));
foreach ($animals as $animal) {
$uid = strtolower(trim((string)$animal->animal_uid));
if ($uid === '') {
continue;
}
if (strpos($searchableMessage, $uid) !== false) {
$matchedAnimals[] = $animal;
}
}
if (empty($matchedAnimals)) {
return;
}
$createdBy = Yii::$app->user->isGuest ? null : (int)Yii::$app->user->id;
foreach ($matchedAnimals as $animal) {
foreach ($imageFiles as $file) {
$exists = AnimalGalleryItem::findOne([
'animal_id' => (int)$animal->id,
'file_id' => (int)$file->id,
]);
if ($exists instanceof AnimalGalleryItem) {
continue;
}
$item = new AnimalGalleryItem();
$item->animal_id = (int)$animal->id;
$item->file_id = (int)$file->id;
$item->source_post_id = (int)$post->id;
$item->source_type = 'post';
$item->created_by = $createdBy;
$item->save();
}
if ($container instanceof Space) {
GalleryIntegrationService::ensureAnimalGallery($animal, $container);
}
}
}
}