preload($v); } return; } $this->preload[] = $data; } /** * Загрузка предзагруженных изображений * @return array */ public function preloadImages() { do { if (empty($this->preload)) { break; } $preload = $this->preload; $this->preload = false; foreach ($preload as $v) { if (! file_exists($v)) { continue; } $this->uploader()->uploadFromFile($v); } return $this->loadRecordData(); } while (false); return []; } /** * Загрузка данных для аплоадера * @return array */ public function loadRecordData() { $data = parent::loadRecordData(); if (! empty($this->preload) && empty($data)) { $data = $this->preloadImages(); } unset($data['empty']); return $data; } /** * Сохранение данных аплоадером * @param array $data */ public function saveRecordData(array $data) { if (empty($data)) { $data = ['empty' => 1]; } parent::saveRecordData($data); } /** * Установка значения поля при загрузке данных из БД * @param array $data */ public function setValue($data) { # если поле в составе группы подменим предзагруженные данные настоящими if ($this->unionID() && $this->group) { $value = $this->uploader()->getData(); $preload = Group::PRELOAD; foreach ($data as & $v) { if (is_array($v)) { continue; } if (strpos($v, $preload) !== false) { $i = (int)substr($v, strlen($preload)); if (isset($value[$i]['filename'])) { $v = $value[$i]['filename']; } } } unset($v); } parent::setValue($data); } /** * Действия после завершения отрисовки групы * @return string HTML */ public function afterGroupRender() { if (! $this->unionID()) { return ''; } $preload = Group::PRELOAD; $name = $this->name(); $value = $this->union->value(); foreach ($value as $v) { if (empty($v[$name])) { continue; } if (! is_array($v[$name])) { continue; } foreach ($v[$name] as $vv) { if (is_array($vv)) { continue; } if (strpos($vv, $preload) !== false) { return ''; # если есть предзагруженные данные - ничего не удаляем } } } return parent::afterGroupRender(); } }