Автоматическая загрузка файлов в настройках плагинов

-1

Новые параметры: 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 комментариев

    Добавление новых комментариев к этой теме отключено.