text('title', _t('@', 'Name'), '', true)
->required()
->text('keyword', _t('@', 'Keyword'), '', false)
->required()
->hidden($visibleFordev)
->onValidate(function($data) use ($form){
$data['value'] = Banners::model()->positionKeywordValidate($data['value'], $data['result']['title'], $form->recordID());
return true;
})
->text('width', _t('@banners', 'Width'), '', false)
->stretch(false)
->rule(TYPE_UINT)
->label('px')
->tip('0 - 100%')
->text('height', _t('@banners', 'Height'), '', false)
->stretch(false)
->rule(TYPE_UINT)
->label('px')
->tip('0 - 100%')
->onValidate(function ($data) {
if (empty($data['value']) && empty($data['result']['width'])) {
Errors::set(_t('@banners', 'Please specify at least one of the sizes, width or height'));
return false;
}
return true;
})
->text('width_mobile', _t('@banners', 'Width'), '', false)
->titleRender(function ($html) { ?>= $html ?>
= (bff::devices() ?? [])[bff::DEVICE_PHONE]['t'] ?? '' ?>stretch(false)
->rule(TYPE_UINT)
->label('px')
->tip('0 - 100%')
->text('height_mobile', _t('@banners', 'Height'), '', false)
->titleRender(function ($html) { ?>= $html ?>
= (bff::devices() ?? [])[bff::DEVICE_PHONE]['t'] ?? '' ?>stretch(false)
->rule(TYPE_UINT)
->label('px')
->tip('0 - 100%')
->onValidate(function ($data) {
if (empty($data['value']) && empty($data['result']['width_mobile'])) {
Errors::set(_t('@banners', 'Please specify at least one of the sizes, width or height'));
return false;
}
return true;
})
;
$form
->radio('_type', _t('@site', 'Type'))
->option(0, _t('@banners', 'Standard'))
->option(1, _t('@banners', 'Slider'))
->option(2, _t('@banners', 'Rotation'))
->noFieldsList()
->onValidate(static function($p) {
switch ($p['value']) {
case 1:
$p['result']['slider'] = 1;
$p['result']['rotation'] = 0;
break;
case 2:
$p['result']['slider'] = 0;
$p['result']['rotation'] = 1;
break;
default:
$p['result']['slider'] = 0;
$p['result']['rotation'] = 0;
break;
}
return false;
})
->onValue(static function($v) use ($form) {
$d = $form->_data();
if (! empty($d['slider'])) {
return 1;
}
if (! empty($d['rotation'])) {
return 2;
}
return 0;
})
->number('rotation_visible', _t('@banners', 'Display Banners Simultaneously'), 1, 0, 1, 1)
->visibleIf('_type', 2)
;
$form
->checkbox('filter_pages', _t('@banners', 'Filters'))
->label(_t('@banners', 'Website Section'))
->hidden($visibleFordev)
->checkbox('filter_region')
->label(_t('@banners', 'Region'))
->hidden(function () use ($fordev) {
if (! $fordev) return true;
if (method_exists('Geo', 'filterDisabled')) {
return Geo::filterDisabled();
}
return ! $fordev;
})
->checkbox('filter_list_pos')
->label(_t('@banners', 'Position Number In the List'))
->hidden($visibleFordev)
->checkbox('filter_auth_users', _t('@', 'Users'))
->label(_t('@banners', 'Hide for Logged Users'))
->hidden(function () use ($fordev) { return ! Banners::FILTER_AUTH_USERS || ! $fordev; })
->checkbox('enabled', _t('@', 'Enabled'))
;
$form
->buttonSubmit()
->whenEdit(static function () use ($form, $list, &$fordev) {
$form->buttonSubmitReturn();
if ($fordev) { $form
->buttonHref(_t('@', 'Delete'), function() use ($form, $list) {
$href = $list->urlAjax('position_delete', ['position_id' => $form->recordID()])
?> ['class' => 'btn-danger']]
);
}
})
->when(true, static function () use ($form) {
$form->buttonCancel();
})
->contentWrapper(function($html) use ($form, $fordev) {
if ( ! $fordev && ! $form->recordID()) {
Errors::impossible();
return '';
}
?>
= $html ?>
_fieldActivate('width')
->htmlAfter('