625 lines
26 KiB
PHP
625 lines
26 KiB
PHP
<?php
|
|
|
|
use humhub\modules\animal_management\models\Animal;
|
|
use humhub\modules\animal_management\models\AnimalGalleryItem;
|
|
use humhub\modules\animal_management\models\forms\AnimalMedicalVisitForm;
|
|
use humhub\modules\space\models\Space;
|
|
use humhub\widgets\Button;
|
|
use yii\bootstrap\ActiveForm;
|
|
use yii\helpers\Html;
|
|
use yii\helpers\Json;
|
|
|
|
/* @var Space $space */
|
|
/* @var Animal $animal */
|
|
/* @var AnimalMedicalVisitForm $model */
|
|
/* @var string $returnTo */
|
|
/* @var AnimalGalleryItem[] $galleryItems */
|
|
/* @var bool $isInline */
|
|
|
|
$isInline = isset($isInline) ? (bool)$isInline : false;
|
|
$showTopCancel = (string)Yii::$app->request->get('showTopCancel', '0') === '1';
|
|
|
|
$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',
|
|
];
|
|
|
|
$renderCustomField = static function (string $fieldKey, AnimalMedicalVisitForm $formModel, array $definitions): string {
|
|
if (!isset($definitions[$fieldKey])) {
|
|
return '';
|
|
}
|
|
|
|
$definition = $definitions[$fieldKey];
|
|
$inputType = (string)$definition['input_type'];
|
|
$vitalLabelOverrides = [
|
|
'blood_pressure' => 'BP',
|
|
'oxygen' => 'O₂',
|
|
];
|
|
$label = (string)($vitalLabelOverrides[$fieldKey] ?? $definition['label']);
|
|
if ((int)$definition['required'] === 1) {
|
|
$label .= ' *';
|
|
}
|
|
|
|
$fieldName = "AnimalMedicalVisitForm[customFields][$fieldKey]";
|
|
$fieldValue = $formModel->customFields[$fieldKey] ?? '';
|
|
|
|
ob_start();
|
|
?>
|
|
<?php if ($inputType === 'textarea'): ?>
|
|
<div class="form-group">
|
|
<label class="control-label" for="animalmedicalvisitform-customfields-<?= Html::encode($fieldKey) ?>"><?= Html::encode($label) ?></label>
|
|
<?= Html::textarea($fieldName, (string)$fieldValue, ['class' => 'form-control', 'rows' => 3, 'id' => "animalmedicalvisitform-customfields-$fieldKey"]) ?>
|
|
</div>
|
|
<?php elseif ($inputType === 'boolean'): ?>
|
|
<div class="checkbox" style="margin-bottom:10px;">
|
|
<label>
|
|
<?= Html::hiddenInput($fieldName, '0') ?>
|
|
<?= Html::checkbox($fieldName, !empty($fieldValue), ['value' => '1']) ?>
|
|
<?= Html::encode($label) ?>
|
|
</label>
|
|
</div>
|
|
<?php elseif ($inputType === 'select'): ?>
|
|
<div class="form-group">
|
|
<label class="control-label" for="animalmedicalvisitform-customfields-<?= Html::encode($fieldKey) ?>"><?= Html::encode($label) ?></label>
|
|
<?= Html::dropDownList(
|
|
$fieldName,
|
|
(string)$fieldValue,
|
|
$formModel->getCustomFieldSelectOptions($fieldKey),
|
|
['class' => 'form-control', 'prompt' => Yii::t('AnimalManagementModule.base', 'Select...'), 'id' => "animalmedicalvisitform-customfields-$fieldKey"]
|
|
) ?>
|
|
</div>
|
|
<?php elseif ($inputType === 'number'): ?>
|
|
<div class="form-group">
|
|
<label class="control-label" for="animalmedicalvisitform-customfields-<?= Html::encode($fieldKey) ?>"><?= Html::encode($label) ?></label>
|
|
<?= Html::input('number', $fieldName, (string)$fieldValue, ['class' => 'form-control', 'step' => 'any', 'id' => "animalmedicalvisitform-customfields-$fieldKey"]) ?>
|
|
</div>
|
|
<?php elseif ($inputType === 'date'): ?>
|
|
<div class="form-group">
|
|
<label class="control-label" for="animalmedicalvisitform-customfields-<?= Html::encode($fieldKey) ?>"><?= Html::encode($label) ?></label>
|
|
<?= Html::input('date', $fieldName, (string)$fieldValue, ['class' => 'form-control', 'id' => "animalmedicalvisitform-customfields-$fieldKey"]) ?>
|
|
</div>
|
|
<?php elseif ($inputType === 'datetime'): ?>
|
|
<div class="form-group">
|
|
<label class="control-label" for="animalmedicalvisitform-customfields-<?= Html::encode($fieldKey) ?>"><?= Html::encode($label) ?></label>
|
|
<?= Html::input('datetime-local', $fieldName, (string)$fieldValue, ['class' => 'form-control', 'id' => "animalmedicalvisitform-customfields-$fieldKey"]) ?>
|
|
</div>
|
|
<?php else: ?>
|
|
<div class="form-group">
|
|
<label class="control-label" for="animalmedicalvisitform-customfields-<?= Html::encode($fieldKey) ?>"><?= Html::encode($label) ?></label>
|
|
<?= Html::textInput($fieldName, (string)$fieldValue, ['class' => 'form-control', 'id' => "animalmedicalvisitform-customfields-$fieldKey"]) ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
<?php
|
|
return (string)ob_get_clean();
|
|
};
|
|
|
|
$customDefinitions = $model->getCustomFieldDefinitions();
|
|
$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',
|
|
];
|
|
|
|
$remainingDefinitions = [];
|
|
foreach ($customDefinitions as $fieldKey => $definition) {
|
|
if (in_array($fieldKey, $knownMedicalKeys, true) || in_array($fieldKey, $hiddenMedicalKeys, true)) {
|
|
continue;
|
|
}
|
|
$remainingDefinitions[$fieldKey] = $definition;
|
|
}
|
|
|
|
$medicalMediaPath = trim((string)($model->customFields['medical_media_reference'] ?? $model->customFields['media_reference'] ?? ''));
|
|
$hasMedicalMedia = $medicalMediaPath !== '' && (preg_match('/^https?:\/\//i', $medicalMediaPath) || substr($medicalMediaPath, 0, 1) === '/');
|
|
$medicalGalleryModalId = 'add-medical-media-gallery-modal';
|
|
$medicalFormId = 'add-medical-visit-inline-form';
|
|
$visitAtInputValue = trim((string)$model->visit_at);
|
|
if ($visitAtInputValue === '') {
|
|
$visitAtInputValue = date('Y-m-d\TH:i');
|
|
} else {
|
|
$visitAtTimestamp = strtotime($visitAtInputValue);
|
|
if ($visitAtTimestamp !== false) {
|
|
$visitAtInputValue = date('Y-m-d\TH:i', $visitAtTimestamp);
|
|
}
|
|
}
|
|
|
|
$this->registerCss(<<<CSS
|
|
.inline-add-shell.panel {
|
|
position: relative;
|
|
overflow: hidden;
|
|
border: 1px solid rgba(255, 255, 255, 0.22);
|
|
border-radius: 12px;
|
|
background: rgba(10, 18, 28, 0.36);
|
|
background-size: cover;
|
|
background-position: center;
|
|
}
|
|
|
|
.inline-add-shell.panel.has-media::before {
|
|
content: '';
|
|
position: absolute;
|
|
inset: 0;
|
|
background: rgba(10, 18, 28, 0.22);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.inline-add-shell > .panel-body {
|
|
position: relative;
|
|
z-index: 1;
|
|
background: rgba(10, 18, 28, 0.2);
|
|
}
|
|
|
|
.inline-add-shell .panel.panel-default {
|
|
border-color: rgba(255, 255, 255, 0.2);
|
|
background: rgba(10, 18, 28, 0.34);
|
|
}
|
|
|
|
.inline-add-shell .panel.panel-default > .panel-heading {
|
|
color: #eef5fb;
|
|
background: rgba(10, 18, 28, 0.42);
|
|
border-color: rgba(255, 255, 255, 0.2);
|
|
}
|
|
|
|
.inline-add-shell .panel.panel-default > .panel-heading a {
|
|
color: inherit;
|
|
display: block;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.inline-add-shell .panel.panel-default > .panel-heading a:hover,
|
|
.inline-add-shell .panel.panel-default > .panel-heading a:focus {
|
|
color: #ffffff;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.inline-add-shell,
|
|
.inline-add-shell .panel-body,
|
|
.inline-add-shell .control-label,
|
|
.inline-add-shell .checkbox label,
|
|
.inline-add-shell .radio label,
|
|
.inline-add-shell .help-block {
|
|
color: #eef5fb;
|
|
}
|
|
|
|
.inline-add-shell .text-muted {
|
|
color: rgba(233, 242, 250, 0.78) !important;
|
|
}
|
|
|
|
.inline-add-shell .form-control {
|
|
background: rgba(10, 18, 28, 0.56);
|
|
border-color: rgba(255, 255, 255, 0.44);
|
|
color: #f3f8ff;
|
|
}
|
|
|
|
.inline-add-shell .form-control::placeholder {
|
|
color: rgba(243, 248, 255, 0.72);
|
|
}
|
|
|
|
.inline-add-shell .form-control[readonly],
|
|
.inline-add-shell .form-control[disabled] {
|
|
background: rgba(10, 18, 28, 0.42);
|
|
color: rgba(243, 248, 255, 0.72);
|
|
}
|
|
|
|
.inline-add-shell select.form-control option {
|
|
color: #0f1b2a;
|
|
}
|
|
|
|
.inline-add-shell .animal-inline-top-save-action {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 26px;
|
|
height: 26px;
|
|
padding: 0;
|
|
border-radius: 999px;
|
|
border: 1px solid rgba(255, 255, 255, 0.36);
|
|
background: rgba(15, 23, 42, 0.72);
|
|
color: #f8fafc;
|
|
cursor: pointer;
|
|
line-height: 1;
|
|
font-size: 12px;
|
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.28);
|
|
}
|
|
|
|
.inline-add-shell .animal-inline-top-save-action:hover,
|
|
.inline-add-shell .animal-inline-top-save-action:focus {
|
|
background: rgba(30, 41, 59, 0.86);
|
|
border-color: rgba(255, 255, 255, 0.5);
|
|
color: #f8fafc;
|
|
outline: none;
|
|
}
|
|
CSS
|
|
);
|
|
|
|
if ($isInline) {
|
|
$this->registerCss(<<<CSS
|
|
html, body {
|
|
margin: 0 !important;
|
|
padding: 0 !important;
|
|
background: transparent !important;
|
|
scrollbar-width: none;
|
|
-ms-overflow-style: none;
|
|
}
|
|
|
|
html::-webkit-scrollbar, body::-webkit-scrollbar {
|
|
width: 0;
|
|
height: 0;
|
|
}
|
|
|
|
body > .panel:first-child {
|
|
margin-top: 0 !important;
|
|
}
|
|
CSS
|
|
);
|
|
}
|
|
?>
|
|
|
|
<style>
|
|
.medical-media-select-thumb.is-selected {
|
|
border-color: #1f8dd6;
|
|
box-shadow: 0 0 0 2px rgba(31, 141, 214, 0.2);
|
|
}
|
|
</style>
|
|
|
|
<div class="panel panel-default inline-add-shell<?= $hasMedicalMedia ? ' has-media' : '' ?>" id="medical-inline-add-shell"<?= $hasMedicalMedia ? ' style="background-image:url(' . Html::encode($medicalMediaPath) . ');"' : '' ?>>
|
|
<div class="panel-body">
|
|
<?php
|
|
$formOptions = ['id' => $medicalFormId, 'enctype' => 'multipart/form-data'];
|
|
if (!$isInline) {
|
|
$formOptions['target'] = '_top';
|
|
}
|
|
$form = ActiveForm::begin(['options' => $formOptions]);
|
|
?>
|
|
<?= Html::hiddenInput('returnTo', (string)($returnTo ?? 'medical-visits')) ?>
|
|
<?= Html::hiddenInput('medicalMediaGalleryPath', $medicalMediaPath, ['id' => 'medical-media-gallery-path']) ?>
|
|
|
|
<?php if ($isInline): ?>
|
|
<div class="animal-inline-top-actions" style="display:flex;justify-content:flex-end;gap:8px;margin:0 38px 10px 0;">
|
|
<?= Html::submitButton('<i class="fa fa-check"></i>', [
|
|
'class' => 'animal-inline-top-save-action',
|
|
'title' => Yii::t('AnimalManagementModule.base', 'Save Medical Visit'),
|
|
'form' => $medicalFormId,
|
|
]) ?>
|
|
<?php if ($showTopCancel): ?>
|
|
<?= Html::button('<i class="fa fa-times"></i>', [
|
|
'id' => 'medical-inline-add-cancel-icon',
|
|
'class' => 'animal-inline-top-save-action',
|
|
'title' => Yii::t('AnimalManagementModule.base', 'Cancel'),
|
|
'type' => 'button',
|
|
]) ?>
|
|
<?php endif; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?= $form->errorSummary($model, ['showAllErrors' => true]) ?>
|
|
|
|
<div class="panel panel-default" style="margin-bottom:12px;">
|
|
<div class="panel-heading"><strong><?= Yii::t('AnimalManagementModule.base', 'Media') ?></strong></div>
|
|
<div class="panel-body" style="padding-bottom:8px;">
|
|
<div class="row">
|
|
<div class="col-sm-4" style="margin-bottom:8px;">
|
|
<div id="medical-media-preview" style="border-radius:8px;overflow:hidden;background:#f2f4f6;height:150px;display:flex;align-items:center;justify-content:center;">
|
|
<?php if ($hasMedicalMedia): ?>
|
|
<img src="<?= Html::encode($medicalMediaPath) ?>" alt="<?= Yii::t('AnimalManagementModule.base', 'Selected medical media') ?>" style="width:100%;height:100%;object-fit:cover;">
|
|
<?php else: ?>
|
|
<i class="fa fa-image fa-2x" style="color:#a7b0b8;"></i>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-8">
|
|
<button type="button" class="btn btn-default" data-toggle="modal" data-target="#<?= Html::encode($medicalGalleryModalId) ?>" style="margin-bottom:8px;">
|
|
<i class="fa fa-photo"></i> <?= Yii::t('AnimalManagementModule.base', 'Choose from Gallery or Upload') ?>
|
|
</button>
|
|
<div class="checkbox" style="margin-top:0;">
|
|
<label>
|
|
<input type="checkbox" name="removeMedicalMedia" value="1">
|
|
<?= Yii::t('AnimalManagementModule.base', 'Remove selected media') ?>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default" style="margin-bottom:12px;">
|
|
<div class="panel-heading">
|
|
<a data-toggle="collapse" class="collapsed" href="#medical-inline-section-visit" aria-expanded="false" aria-controls="medical-inline-section-visit">
|
|
<strong><?= Yii::t('AnimalManagementModule.base', 'Medical Visit') ?></strong>
|
|
</a>
|
|
</div>
|
|
<div id="medical-inline-section-visit" class="panel-collapse collapse" aria-expanded="false">
|
|
<div class="panel-body" style="padding-bottom:8px;">
|
|
<div class="row">
|
|
<div class="col-sm-6"><?= $form->field($model, 'visit_at')->input('datetime-local', ['value' => $visitAtInputValue]) ?></div>
|
|
<div class="col-sm-6"><?= $form->field($model, 'provider_name') ?></div>
|
|
</div>
|
|
<?= $form->field($model, 'notes')->textarea(['rows' => 3]) ?>
|
|
<?= $form->field($model, 'recommendations')->textarea(['rows' => 3]) ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default" style="margin-bottom:12px;">
|
|
<div class="panel-heading">
|
|
<a data-toggle="collapse" class="collapsed" href="#medical-inline-section-vitals" aria-expanded="false" aria-controls="medical-inline-section-vitals">
|
|
<strong><?= Yii::t('AnimalManagementModule.base', 'Vitals') ?></strong>
|
|
</a>
|
|
</div>
|
|
<div id="medical-inline-section-vitals" class="panel-collapse collapse" aria-expanded="false">
|
|
<div class="panel-body" style="padding-bottom:8px;">
|
|
<div class="row">
|
|
<div class="col-sm-3"><?= $renderCustomField('weight', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-3"><?= $renderCustomField('pulse', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-3"><?= $renderCustomField('blood_pressure', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-3"><?= $renderCustomField('oxygen', $model, $customDefinitions) ?></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default" style="margin-bottom:12px;">
|
|
<div class="panel-heading">
|
|
<a data-toggle="collapse" class="collapsed" href="#medical-inline-section-conditions" aria-expanded="false" aria-controls="medical-inline-section-conditions">
|
|
<strong><?= Yii::t('AnimalManagementModule.base', 'Conditions') ?></strong>
|
|
</a>
|
|
</div>
|
|
<div id="medical-inline-section-conditions" class="panel-collapse collapse" aria-expanded="false">
|
|
<div class="panel-body" style="padding-bottom:8px;">
|
|
<?= $renderCustomField('chronic_conditions', $model, $customDefinitions) ?>
|
|
<?= $renderCustomField('acute_conditions', $model, $customDefinitions) ?>
|
|
<?= $renderCustomField('special_needs', $model, $customDefinitions) ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default" style="margin-bottom:12px;">
|
|
<div class="panel-heading">
|
|
<a data-toggle="collapse" class="collapsed" href="#medical-inline-section-detail" aria-expanded="false" aria-controls="medical-inline-section-detail">
|
|
<strong><?= Yii::t('AnimalManagementModule.base', 'Medical Visit Detail') ?></strong>
|
|
</a>
|
|
</div>
|
|
<div id="medical-inline-section-detail" class="panel-collapse collapse" aria-expanded="false">
|
|
<div class="panel-body" style="padding-bottom:8px;">
|
|
<?= $renderCustomField('date_of_most_recent_medical_visit', $model, $customDefinitions) ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default" style="margin-bottom:12px;">
|
|
<div class="panel-heading">
|
|
<a data-toggle="collapse" class="collapsed" href="#medical-inline-section-physician" aria-expanded="false" aria-controls="medical-inline-section-physician">
|
|
<strong><?= Yii::t('AnimalManagementModule.base', 'Physician') ?></strong>
|
|
</a>
|
|
</div>
|
|
<div id="medical-inline-section-physician" class="panel-collapse collapse" aria-expanded="false">
|
|
<div class="panel-body" style="padding-bottom:8px;">
|
|
<div class="row">
|
|
<div class="col-sm-6"><?= $renderCustomField('physician_name', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-6"><?= $renderCustomField('physician_business_name', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-12"><?= $renderCustomField('physician_street_address', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-4"><?= $renderCustomField('physician_city', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-4"><?= $renderCustomField('physician_state', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-4"><?= $renderCustomField('physician_zip', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-4"><?= $renderCustomField('physician_cell_phone', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-4"><?= $renderCustomField('physician_business_phone', $model, $customDefinitions) ?></div>
|
|
<div class="col-sm-4"><?= $renderCustomField('physician_license_number', $model, $customDefinitions) ?></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="panel panel-default" style="margin-bottom:12px;">
|
|
<div class="panel-heading"><strong><?= Yii::t('AnimalManagementModule.base', 'Social Post') ?></strong></div>
|
|
<div class="panel-body" style="padding-bottom:8px;">
|
|
<?= $form->field($model, 'post_to_space_feed')->checkbox() ?>
|
|
<?= $form->field($model, 'post_to_animal_feed')->checkbox() ?>
|
|
</div>
|
|
</div>
|
|
|
|
<?php if (!empty($remainingDefinitions)): ?>
|
|
<div class="panel panel-default" style="margin-bottom:12px;">
|
|
<div class="panel-heading">
|
|
<a data-toggle="collapse" class="collapsed" href="#medical-inline-section-additional" aria-expanded="false" aria-controls="medical-inline-section-additional">
|
|
<strong><?= Yii::t('AnimalManagementModule.base', 'Additional Details') ?></strong>
|
|
</a>
|
|
</div>
|
|
<div id="medical-inline-section-additional" class="panel-collapse collapse" aria-expanded="false">
|
|
<div class="panel-body" style="padding-bottom:8px;">
|
|
<?php foreach ($remainingDefinitions as $fieldKey => $definition): ?>
|
|
<?= $renderCustomField($fieldKey, $model, $remainingDefinitions) ?>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php endif; ?>
|
|
|
|
<?= Button::save(Yii::t('AnimalManagementModule.base', 'Save Medical Visit'))->submit() ?>
|
|
<?php if (!$isInline): ?>
|
|
<?= Button::asLink(Yii::t('AnimalManagementModule.base', 'Cancel'))
|
|
->link(($returnTo ?? 'medical-visits') === 'medical-visits'
|
|
? $space->createUrl('/animal_management/animals/medical-visits', ['id' => $animal->id])
|
|
: $space->createUrl('/animal_management/animals/view', ['id' => $animal->id])) ?>
|
|
<?php endif; ?>
|
|
|
|
<?php ActiveForm::end(); ?>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="modal fade" id="<?= Html::encode($medicalGalleryModalId) ?>" tabindex="-1" role="dialog" aria-hidden="true">
|
|
<div class="modal-dialog modal-lg" role="document">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-label="<?= Yii::t('AnimalManagementModule.base', 'Close') ?>"><span aria-hidden="true">×</span></button>
|
|
<h4 class="modal-title"><?= Yii::t('AnimalManagementModule.base', 'Select Medical Media from Gallery') ?></h4>
|
|
</div>
|
|
<div class="modal-body">
|
|
<?php if (empty($galleryItems)): ?>
|
|
<div class="text-muted" style="margin-bottom:10px;"><?= Yii::t('AnimalManagementModule.base', 'No gallery images available yet.') ?></div>
|
|
<?php else: ?>
|
|
<div class="row" style="max-height:280px;overflow:auto;margin-bottom:10px;">
|
|
<?php foreach ($galleryItems as $galleryItem): ?>
|
|
<?php $galleryUrl = trim((string)$galleryItem->getImageUrl()); ?>
|
|
<?php if ($galleryUrl === '') { continue; } ?>
|
|
<div class="col-xs-6 col-sm-4" style="margin-bottom:8px;">
|
|
<button type="button" class="btn btn-default medical-media-select-thumb<?= $medicalMediaPath === $galleryUrl ? ' is-selected' : '' ?>" data-media-url="<?= Html::encode($galleryUrl) ?>" style="width:100%;padding:3px;">
|
|
<img src="<?= Html::encode($galleryUrl) ?>" alt="<?= Yii::t('AnimalManagementModule.base', 'Gallery image') ?>" style="width:100%;height:120px;object-fit:cover;display:block;">
|
|
</button>
|
|
</div>
|
|
<?php endforeach; ?>
|
|
</div>
|
|
<?php endif; ?>
|
|
<div class="form-group" style="margin-bottom:0;">
|
|
<label class="control-label" for="medicalMediaUpload"><?= Yii::t('AnimalManagementModule.base', 'Upload New Image') ?></label>
|
|
<input type="file" class="form-control" id="medicalMediaUpload" name="medicalMediaUpload" form="<?= Html::encode($medicalFormId) ?>" accept="image/*">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<?php
|
|
$this->registerJs(<<<JS
|
|
(function(){
|
|
function escapeCssUrl(source) {
|
|
return String(source || '').replace(/"/g, '\\"');
|
|
}
|
|
|
|
function setMedicalShellBackground(source) {
|
|
var shell = $('#medical-inline-add-shell');
|
|
if (!shell.length) {
|
|
return;
|
|
}
|
|
|
|
if (source) {
|
|
shell.addClass('has-media').css('background-image', 'url("' + escapeCssUrl(source) + '")');
|
|
} else {
|
|
shell.removeClass('has-media').css('background-image', 'none');
|
|
}
|
|
}
|
|
|
|
function renderMedicalPreview(source) {
|
|
var preview = $('#medical-media-preview');
|
|
if (!preview.length) {
|
|
return;
|
|
}
|
|
|
|
if (source) {
|
|
preview.html('<img src="' + source + '" alt="Selected medical media" style="width:100%;height:100%;object-fit:cover;">');
|
|
} else {
|
|
preview.html('<i class="fa fa-image fa-2x" style="color:#a7b0b8;"></i>');
|
|
}
|
|
|
|
setMedicalShellBackground(source);
|
|
}
|
|
|
|
function markSelectedMedicalThumb(value) {
|
|
$('.medical-media-select-thumb').removeClass('is-selected');
|
|
if (!value) {
|
|
return;
|
|
}
|
|
|
|
$('.medical-media-select-thumb').each(function() {
|
|
if ($(this).data('media-url') === value) {
|
|
$(this).addClass('is-selected');
|
|
}
|
|
});
|
|
}
|
|
|
|
$(document).on('click', '.medical-media-select-thumb', function() {
|
|
var mediaUrl = $(this).data('media-url');
|
|
$('#medical-media-gallery-path').val(mediaUrl);
|
|
markSelectedMedicalThumb(mediaUrl);
|
|
$('#medicalMediaUpload').val('');
|
|
$('input[name="removeMedicalMedia"]').prop('checked', false);
|
|
if (mediaUrl) {
|
|
renderMedicalPreview(mediaUrl);
|
|
}
|
|
$('#{$medicalGalleryModalId}').modal('hide');
|
|
});
|
|
|
|
$('#medicalMediaUpload').on('change', function() {
|
|
var file = this.files && this.files[0] ? this.files[0] : null;
|
|
if (!file) {
|
|
return;
|
|
}
|
|
|
|
$('#medical-media-gallery-path').val('');
|
|
markSelectedMedicalThumb('');
|
|
$('input[name="removeMedicalMedia"]').prop('checked', false);
|
|
|
|
var reader = new FileReader();
|
|
reader.onload = function(e) {
|
|
renderMedicalPreview(e.target.result);
|
|
$('#{$medicalGalleryModalId}').modal('hide');
|
|
};
|
|
reader.readAsDataURL(file);
|
|
});
|
|
|
|
$('#{$medicalGalleryModalId}').on('shown.bs.modal', function() {
|
|
markSelectedMedicalThumb($('#medical-media-gallery-path').val());
|
|
});
|
|
})();
|
|
JS
|
|
, \yii\web\View::POS_END);
|
|
|
|
if ($isInline) {
|
|
$cancelPayload = Json::htmlEncode([
|
|
'source' => 'animal-inline-editor',
|
|
'type' => 'cancel',
|
|
'collapseId' => 'medical-add-inline',
|
|
]);
|
|
|
|
$this->registerJs(<<<JS
|
|
(function() {
|
|
function postInlineCancel() {
|
|
if (window.parent && window.parent !== window) {
|
|
window.parent.postMessage($cancelPayload, '*');
|
|
}
|
|
}
|
|
|
|
if (window.jQuery) {
|
|
window.jQuery(document).on('click', '#medical-inline-add-cancel, #medical-inline-add-cancel-icon', function() {
|
|
postInlineCancel();
|
|
});
|
|
}
|
|
|
|
document.addEventListener('click', function(event) {
|
|
var target = event.target;
|
|
if (!target || !target.closest) {
|
|
return;
|
|
}
|
|
|
|
if (!target.closest('#medical-inline-add-cancel, #medical-inline-add-cancel-icon')) {
|
|
return;
|
|
}
|
|
|
|
postInlineCancel();
|
|
}, false);
|
|
})();
|
|
JS
|
|
, \yii\web\View::POS_END);
|
|
}
|
|
?>
|