Как выполнить ресолвер только при обновлении с 3 на 4 версию компонента?

Добрый день! В моем компоненте планируются большие правки базы и нужно при обновлении на новую версию компонента внести изменения в базу (скопировать данные из одной таблицы в другую), но нужно выполнить это только 1 раз, при обновлении с 3 на 4 версию, не выполнять при новой установке и не выполнять при деинсталляции и установки заново. Как это сделать? Или может можно как нибудь в ресолвере получить номер обновляемой( предыдущей) версии и номер устанавливаемой?
Александр Туниеков
01 марта 2019, 19:45
modx.pro
1
600
0
Поблагодарить автора Отправить деньги

Комментарии: 5

Александр Туниеков
01 марта 2019, 21:16
0
Посмотрел код установщика пакетов. Похоже никак нельзя предыдущею версию нельзя получить :(
    Илья Уткин
    01 марта 2019, 21:52
    +1
    Проверяй не версию пакета, а существование новой таблицы и данных в ней.
    Сергей Шлоков
    02 марта 2019, 07:50
    +1
    Можно так
    $c = $modx->newQuery('transport.modTransportPackage');
    $c->select('version_major')
        ->where(array(
        'package_name' => 'ИМЯ ПАКЕТА',
    ))
        ->sortby('version_major','DESC')
        ->limit(1);
    $version = (int) $modx->getValue($c->prepare());
    
    if ($version == 3)  {
        ...
    }
      Александр Туниеков
      02 марта 2019, 09:22
      0
      Кажется немного не верно. Здесь https://github.com/modxcms/revolution/blob/769b4f498bfc486b6417835f01443666178abc72/core/model/modx/transport/modtransportpackage.class.php#L233 Происходит сохранение пакета в таблицу до его установки. То есть ваш запрос вернет версию, которая ставиться. Надо добавить фильтр по installed не null.
      Наверно так
      $c = $modx->newQuery('transport.modTransportPackage');
      $c->select('version_major')
          ->where(array(
          'package_name' => 'ИМЯ ПАКЕТА',
          'installed:!=' => null,
      ))
          ->sortby('version_major','DESC')
          ->limit(1);
      $version = (int) $modx->getValue($c->prepare());
      
      if ($version == 3)  {
          ...
      }
      Проверять надо. Но проверка на пустое содержимое таблицы мне подходит. Надеюсь никто не додумается поставить пакет и потом сразу же обновить.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5