Files
animal_management/widgets/stream/views/wall-entry.php
2026-04-04 13:13:00 -04:00

229 lines
9.8 KiB
PHP

<?php
use humhub\modules\animal_management\helpers\DateDisplayHelper;
use humhub\modules\animal_management\models\Animal;
use humhub\modules\animal_management\models\AnimalMedicalVisit;
use humhub\modules\animal_management\models\AnimalProgressUpdate;
use humhub\modules\animal_management\models\AnimalStreamEntry;
use yii\helpers\Html;
/* @var AnimalStreamEntry $entry */
$animal = $entry->animal;
if (!$animal instanceof Animal) {
return;
}
$medicalVisit = $entry->medicalVisit;
$progressUpdate = $entry->progressUpdate;
$isMedical = (string)$entry->entry_type === AnimalStreamEntry::TYPE_MEDICAL && $medicalVisit instanceof AnimalMedicalVisit;
$isProgress = (string)$entry->entry_type === AnimalStreamEntry::TYPE_PROGRESS && $progressUpdate instanceof AnimalProgressUpdate;
if (!$isMedical && !$isProgress) {
return;
}
$animalName = $animal->getDisplayName();
$mediaReference = '';
$chipRows = [];
$dateText = '';
$detailRows = [];
if ($isProgress) {
$customValues = $progressUpdate->getCustomFieldDisplayValues(true);
$additionalFields = [];
foreach ($customValues as $customField) {
if ((string)($customField['field_key'] ?? '') === 'media_reference') {
$mediaReference = trim((string)$customField['value']);
continue;
}
$additionalFields[] = [
'label' => (string)$customField['label'],
'value' => (string)$customField['value'],
];
}
$dateText = DateDisplayHelper::format((string)$progressUpdate->update_at);
if (trim((string)$progressUpdate->weight) !== '') {
$chipRows[] = Yii::t('AnimalManagementModule.base', 'Weight') . ': ' . trim((string)$progressUpdate->weight);
}
if (trim((string)$progressUpdate->vitals) !== '') {
$chipRows[] = Yii::t('AnimalManagementModule.base', 'Vitals');
}
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Animal'), 'value' => $animalName];
if (!empty($progressUpdate->vitals)) {
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Vitals'), 'value' => (string)$progressUpdate->vitals];
}
if (!empty($progressUpdate->behavior_notes)) {
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Behavior'), 'value' => (string)$progressUpdate->behavior_notes];
}
if (!empty($progressUpdate->meal_plan_changes)) {
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Meal Plan'), 'value' => (string)$progressUpdate->meal_plan_changes];
}
if (!empty($progressUpdate->housing_changes)) {
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Housing'), 'value' => (string)$progressUpdate->housing_changes];
}
if (!empty($progressUpdate->medical_concerns)) {
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Medical Concerns'), 'value' => (string)$progressUpdate->medical_concerns];
}
if (!empty($additionalFields)) {
$text = '';
foreach ($additionalFields as $field) {
$text .= $field['label'] . ': ' . $field['value'] . "\n";
}
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Additional Fields'), 'value' => trim($text)];
}
} elseif ($isMedical) {
$hiddenMedicalKeys = [
'second_physician_name',
'second_physician_business_name',
'second_physician_street_address',
'second_physician_city',
'second_physician_state',
'second_physician_zip',
'second_physician_cell_phone',
'second_physician_business_phone',
'second_physician_license_number',
'previous_physicians',
];
$knownMedicalKeys = [
'weight',
'pulse',
'blood_pressure',
'oxygen',
'chronic_conditions',
'acute_conditions',
'special_needs',
'date_of_most_recent_medical_visit',
'physician_name',
'physician_business_name',
'physician_street_address',
'physician_city',
'physician_state',
'physician_zip',
'physician_cell_phone',
'physician_business_phone',
'physician_license_number',
'medical_media_reference',
'media_reference',
];
$vitalLabelOverrides = [
'blood_pressure' => 'BP',
'oxygen' => 'O₂',
];
$fieldsByKey = [];
$additionalFields = [];
foreach ($medicalVisit->getCustomFieldDisplayValues(true) as $customField) {
$fieldKey = (string)($customField['field_key'] ?? '');
if (in_array($fieldKey, $hiddenMedicalKeys, true)) {
continue;
}
$fieldValue = trim((string)($customField['value'] ?? ''));
if ($fieldValue === '') {
continue;
}
if ($fieldKey === 'medical_media_reference' || $fieldKey === 'media_reference') {
$mediaReference = $fieldValue;
continue;
}
if (in_array($fieldKey, $knownMedicalKeys, true)) {
$fieldsByKey[$fieldKey] = [
'label' => (string)($vitalLabelOverrides[$fieldKey] ?? ($customField['label'] ?? $fieldKey)),
'value' => $fieldValue,
];
continue;
}
$additionalFields[] = [
'label' => (string)($customField['label'] ?? $fieldKey),
'value' => $fieldValue,
];
}
$dateText = DateDisplayHelper::format((string)$medicalVisit->visit_at);
foreach (['weight', 'pulse', 'blood_pressure', 'oxygen'] as $vitalKey) {
if (!empty($fieldsByKey[$vitalKey]['value'])) {
$chipRows[] = $fieldsByKey[$vitalKey]['label'] . ': ' . $fieldsByKey[$vitalKey]['value'];
}
}
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Animal'), 'value' => $animalName];
if (!empty($medicalVisit->provider_name)) {
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Provider'), 'value' => (string)$medicalVisit->provider_name];
}
if (!empty($medicalVisit->notes)) {
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Clinical Notes'), 'value' => (string)$medicalVisit->notes];
}
if (!empty($medicalVisit->recommendations)) {
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Recommendations'), 'value' => (string)$medicalVisit->recommendations];
}
foreach (['chronic_conditions', 'acute_conditions', 'special_needs'] as $conditionKey) {
if (empty($fieldsByKey[$conditionKey]['value'])) {
continue;
}
$detailRows[] = [
'label' => (string)$fieldsByKey[$conditionKey]['label'],
'value' => (string)$fieldsByKey[$conditionKey]['value'],
];
}
if (!empty($fieldsByKey['date_of_most_recent_medical_visit']['value'])) {
$detailRows[] = [
'label' => (string)$fieldsByKey['date_of_most_recent_medical_visit']['label'],
'value' => DateDisplayHelper::format((string)$fieldsByKey['date_of_most_recent_medical_visit']['value']),
];
}
if (!empty($additionalFields)) {
$text = '';
foreach ($additionalFields as $field) {
$text .= $field['label'] . ': ' . $field['value'] . "\n";
}
$detailRows[] = ['label' => Yii::t('AnimalManagementModule.base', 'Additional Fields'), 'value' => trim($text)];
}
}
$hasMediaImage = $mediaReference !== '' && (preg_match('/^https?:\/\//i', $mediaReference) || substr($mediaReference, 0, 1) === '/');
?>
<div style="position:relative;overflow:hidden;border:1px solid #d5dfe8;border-radius:12px;background:#223446;margin:6px 0;min-height:240px;box-shadow:0 8px 22px rgba(12,24,36,0.16);">
<?php if ($hasMediaImage): ?>
<img src="<?= Html::encode($mediaReference) ?>" alt="<?= Yii::t('AnimalManagementModule.base', 'Animal stream media') ?>" style="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;">
<?php endif; ?>
<div style="position:absolute;inset:0;background:linear-gradient(110deg,rgba(10,18,28,0.28) 10%,rgba(10,18,28,0.55) 52%,rgba(10,18,28,0.75) 100%);"></div>
<div style="position:relative;z-index:1;min-height:240px;padding:14px;display:flex;flex-direction:column;align-items:flex-end;gap:10px;">
<div style="width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;">
<span style="font-size:15px;font-weight:700;color:#ffffff;margin-right:auto;"><?= Html::encode($dateText) ?></span>
<?php if (!empty($chipRows)): ?>
<div style="display:flex;flex-wrap:wrap;gap:6px;margin-bottom:0;justify-content:flex-end;">
<?php foreach ($chipRows as $chip): ?>
<span style="display:inline-block;border-radius:999px;border:1px solid rgba(255,255,255,0.3);background:rgba(255,255,255,0.16);color:#ffffff;font-size:12px;padding:4px 10px;"><?= Html::encode($chip) ?></span>
<?php endforeach; ?>
</div>
<?php endif; ?>
</div>
<div style="width:55%;max-width:55%;min-width:0;margin-left:auto;border-radius:10px;border:1px solid rgba(255,255,255,0.22);background:rgba(10,18,28,0.5);backdrop-filter:blur(2px);padding:12px;color:#ecf2f8;">
<div style="color:#ffffff;font-size:13px;font-weight:700;margin-bottom:8px;">
<?= Html::encode($isMedical
? Yii::t('AnimalManagementModule.base', 'Medical Visit')
: Yii::t('AnimalManagementModule.base', 'Progress Update')) ?>
</div>
<?php foreach ($detailRows as $row): ?>
<div style="font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:rgba(231,241,249,0.78);margin-bottom:4px;"><?= Html::encode((string)$row['label']) ?></div>
<div style="color:#eff5fb;margin-bottom:10px;"><?= nl2br(Html::encode((string)$row['value'])) ?></div>
<?php endforeach; ?>
</div>
</div>
</div>