Initial import of animal_management module

This commit is contained in:
Kelin Rescue Hub
2026-04-04 13:13:00 -04:00
commit 20adb1bd1e
65 changed files with 14004 additions and 0 deletions

View File

@@ -0,0 +1,109 @@
<?php
namespace humhub\modules\animal_management\notifications;
use humhub\libs\Html;
use humhub\modules\notification\components\BaseNotification;
use humhub\modules\space\models\Space;
use Yii;
use yii\helpers\Json;
use yii\helpers\Url;
class TransferRequestedNotification extends BaseNotification
{
public $moduleId = 'animal_management';
public $requireSource = false;
public $requireOriginator = false;
public string $animalName = '';
public string $fromSpaceName = '';
public string $toSpaceGuid = '';
public function category()
{
return new TransferNotificationCategory();
}
public function getUrl()
{
$toSpaceGuid = $this->payloadString('toSpaceGuid', $this->toSpaceGuid);
$space = Space::findOne(['guid' => $toSpaceGuid]);
if ($space instanceof Space) {
return $space->createUrl('/animal_management/animals/index') . '#incoming-transfers';
}
return Url::to(['/animal_management/animals/index', 'sguid' => $toSpaceGuid]) . '#incoming-transfers';
}
public function html()
{
$animalName = $this->payloadString('animalName', $this->animalName);
if ($this->originator) {
return Yii::t('AnimalManagementModule.base', '{displayName} requested to transfer {animalName}.', [
'displayName' => Html::tag('strong', Html::encode($this->originator->displayName)),
'animalName' => Html::tag('strong', Html::encode($animalName)),
]);
}
return Yii::t('AnimalManagementModule.base', 'A transfer was requested for {animalName}.', [
'animalName' => Html::tag('strong', Html::encode($animalName)),
]);
}
public function getMailSubject()
{
$animalName = $this->payloadString('animalName', $this->animalName);
return Yii::t('AnimalManagementModule.base', 'Animal transfer request: {animalName}', [
'animalName' => $animalName,
]);
}
public function __serialize(): array
{
$data = parent::__serialize();
$data['animalName'] = $this->animalName;
$data['fromSpaceName'] = $this->fromSpaceName;
$data['toSpaceGuid'] = $this->toSpaceGuid;
$data['payload'] = $this->payload;
return $data;
}
public function __unserialize($unserializedArr)
{
parent::__unserialize($unserializedArr);
$this->animalName = (string)($unserializedArr['animalName'] ?? '');
$this->fromSpaceName = (string)($unserializedArr['fromSpaceName'] ?? '');
$this->toSpaceGuid = (string)($unserializedArr['toSpaceGuid'] ?? '');
if (isset($unserializedArr['payload']) && is_array($unserializedArr['payload'])) {
$this->payload = $unserializedArr['payload'];
}
}
private function payloadString(string $key, string $fallback = ''): string
{
if (is_array($this->payload) && array_key_exists($key, $this->payload)) {
return trim((string)$this->payload[$key]);
}
if ($this->record !== null && !empty($this->record->payload)) {
try {
$decoded = Json::decode((string)$this->record->payload);
if (is_array($decoded)) {
$this->payload = $decoded;
if (array_key_exists($key, $decoded)) {
return trim((string)$decoded[$key]);
}
}
} catch (\Throwable $e) {
// Fall back to explicit property values when payload is unavailable.
}
}
return trim($fallback);
}
}