Новые параметры: array extensions - доступные расширения, bool public - загрузить в публичной директории? по умолчанию используется закрытая (protected), string path - путь по которому сохраняется файл в директории wa-data/(public|protected)/(app)/plugins/(plugin)/:
/**
* @param mixed [string] $settings Array of settings key=>value
* @return void|array
*/
public function saveSettings($settings = array())
{
$settings_config = $this->getSettingsConfig();
foreach ($settings_config as $name => $row) {
if (!isset($settings[$name])) {
if ((ifset($row['control_type']) == waHtmlControl::CHECKBOX) && !empty($row['value'])) {
$settings[$name] = false;
} elseif ((ifset($row['control_type']) == waHtmlControl::GROUPBOX) && !empty($row['value'])) {
$settings[$name] = array();
} elseif (!empty($row['control_type']) || isset($row['value'])) {
$this->settings[$name] = isset($row['value']) ? $row['value'] : null;
self::getSettingsModel()->del($this->getSettingsKey(), $name);
}
}
}
foreach ($settings as $name => $value) {
// upload file
if ($value instanceof waRequestFile) {
$setting = $settings_config[$name];
if (!$value->uploaded() || $value->error || !in_array(strtolower($value->extension), ifset($setting['extensions'], array()))) {
continue;
}
$path = 'plugins/'.$this->id.'/'
$path .= empty($setting['path']) ? '' : trim($setting['path'], '\/').'/';
$path = wa()->getDataPath($path, empty($setting['public']), $this->app_id, true);
// Delete old file
if (!empty($setting['value'])) {
waFiles::delete($path.$setting['value']);
}
$value->transliterateFilename();
$value->moveTo($path, $value->name);
$value = $value->name;
}
$this->settings[$name] = $value;
// save to db
self::getSettingsModel()->set($this->getSettingsKey(), $name, is_array($value) ? json_encode($value) : $value);
}
}
Ну и Plugins.html иправить
data: $form.find('input[type="file"]').length ? new FormData($form[0]) : $form.serialize(),
0 комментариев