Собственно с rollback`ом дела обстоят немного хуже чем с install and upgrade. Разработчики Magento видимо планировали написать rollback и идея заглохла либо эту идею реализовали только в Enterprise версии системы. Но это не беда. Собственно я предлагаю немножко модифицировать файл /app/code/core/Mage/Core/Model/Resource/Setup.php:
Находим функцию "_getModifySqlFiles"
| Код | protected function _getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrFiles) { $arrRes = array();
switch ($actionType) { case 'install': uksort($arrFiles, 'version_compare'); foreach ($arrFiles as $version => $file) { if (version_compare($version, $toVersion)!==self::VERSION_COMPARE_GREATER) { $arrRes[0] = array('toVersion'=>$version, 'fileName'=>$file); } } break;
case 'upgrade': uksort($arrFiles, 'version_compare'); foreach ($arrFiles as $version => $file) { $version_info = explode('-', $version);
// In array must be 2 elements: 0 => version from, 1 => version to if (count($version_info)!=2) { break; } $infoFrom = $version_info[0]; $infoTo = $version_info[1]; if (version_compare($infoFrom, $fromVersion)!==self::VERSION_COMPARE_LOWER && version_compare($infoTo, $toVersion)!==self::VERSION_COMPARE_GREATER) { $arrRes[] = array('toVersion'=>$infoTo, 'fileName'=>$file); } } break; case 'rollback': case 'uninstall': break; } return $arrRes; }
|
И заменяем case 'rollback' на следующее:
| Код | /** * Added case for follback action * @author Awers * @date 05/11/2009 */ case 'rollback': uksort($arrFiles, 'version_compare'); krsort($arrFiles); foreach ($arrFiles as $version => $file) { $version_info = explode('-', $version); if (count($version_info)!=2) { break; } $infoFrom = $version_info[0]; $infoTo = $version_info[1]; if (version_compare($infoFrom, $fromVersion)!==self::VERSION_COMPARE_LOWER && version_compare($infoTo, $toVersion)!==self::VERSION_COMPARE_GREATER) { $arrRes[] = array('toVersion'=>$infoTo, 'fileName'=>$file); } } break;
|
Далее, всё что нам остаётся - юзать файлы mysql4-rollback-major-minor.php где major это версия с какой хотим откатиться и minor это на какую. Rollback работает по аналогии с upgrade, т.е. строит массив файлов и поочерёдно выполняет их. Для того что бы всё это выполнялось в нужном порядке, я добавил krsort($arrFiles);
Добавлено через 10 минут и 55 секунд Список функций можно найти тут: http://forum.vingrad.ru/forum/topic-280106.html |