ajaxAction = 'publicator_action';
$this->isUnionAllowed = false;
return true;
}
/**
* Генерация основного контента поля
* @param array $data @ref данные
* @return string HTML
*/
public function view(array &$data = [])
{
$data['wrapper'] = ['colspan' => 2];
return '' .
$this->form($data['name'], $this->value());
}
/**
* Инициализация компонента публикатор
* @return \bff\db\Publicator
*/
public function publicatorInit()
{
if (! is_null($this->objectPublicator)) {
return $this->objectPublicator;
}
$settings = $this->settings;
$settings = array_merge([
'photo_sz_view' =>['width' => 800],
'gallery_sz_view' => [
'width' => 800,
'height' => false,
'vertical' => ['width' => false, 'height' => 400],
'quality' => 95,
'sharp' => [],
],
'video_width' => 560,
'video_height' => 315,
'use_wysiwyg' => true,
], $settings);
if (empty($settings['controls'])) {
$settings['controls'] = [
BasePublicator::blockTypeText,
BasePublicator::blockTypePhoto,
BasePublicator::blockTypeGallery,
BasePublicator::blockTypeVideo,
BasePublicator::blockTypeSubtitle,
BasePublicator::blockTypeQuote,
];
}
$folder = $this->form->folder();
$settings['images_path'] = \bff::path($folder, 'images');
$settings['images_url'] = \bff::url($folder, 'images');
$settings['images_path_tmp'] = \bff::path('tmp', 'images');
$settings['images_url_tmp'] = \bff::url('tmp', 'images');
$settings['admin_ajax_url'] = $this->ajaxUrl();
$settings['admin_ajax_act'] = $this->ajaxAction;
$controller = $this->form->getController();
$this->objectPublicator = $controller->attachComponent(
$this->name(),
new BasePublicator($controller->module_name, $settings, false)
);
return $this->objectPublicator;
}
/**
* Вызов формы публикатора
* @param string $name имя поля
* @param array $content массив с данными о содержании
* @return string HTML
*/
public function form($name, $content)
{
$id = $this->id();
$jsObj = 'j' . $this->form->jsObjectName('publicator' . $id);
$this->form->contentJavascript('onReady', function() use ($jsObj, $id) { ?>publicatorInit()->form($content, $this->form->recordID(), $name, $jsObj);
}
/**
* Проверка значения поля
* @param array $data ['value' => &$value], 'value' - ссылка на значение поля
* @return bool true - значение корректно, false - значение некорректно, пропустить (не сохраняется в БД)
*/
public function validate($data)
{
unset($data['value']['__empty__']);
$prepare = $this->publicatorInit()->dataPrepare($data['value'], $this->form->recordID());
if (! isset($prepare['content'])) {
return false;
}
$data['value'] = $prepare['content'];
if (! parent::validate($data)) {
return false;
}
if ($this->search && isset($prepare['content_search']) && isset($data['result'])) {
$search = $prepare['content_search'];
if (is_array($search) && $this->form->_toJSON()) {
$search = json_encode($search, JSON_UNESCAPED_UNICODE);
}
$data['result'][ $this->search ] = $search;
}
return true;
}
/**
* Проверка значения или выполнение действий после сохранения (точно есть recordID)
* @param bool $isInserted - была добавленна новая запись false - редактирование существующей
* @param array $data ['saved' => &$saved], 'saved' - сохраненные данные
*/
public function validateAfter($isInserted, $data)
{
if (! $isInserted) {
return;
}
$name = $this->name();
if (! isset($data['saved'][$name])) {
return;
}
# перенос изображений в постояный каталог
$this->publicatorInit()->dataUpdate($data['saved'][$name], $this->form->recordID());
}
/**
* Обработка ajax запросов
* @return array данные для ajax ответа
*/
public function ajax()
{
# прокидываем ajax запросы в публикатор
$response = $this->publicatorInit()->ajax();
if ($response instanceof Response) {
return $this->response($response);
}
return parent::ajax();
}
/**
* Обработка события удаления записи формой
* @param int $recordID ID записи
*/
public function recordDelete($recordID)
{
$content = $this->form->_ajaxData($this->id());
$this->publicatorInit()->dataDelete($content, $this->form->recordID());
}
}