/** * Run module modification files. Return version of last applied upgrade (false if no upgrades applied) * * @param string $actionType install|upgrade|uninstall * @param string $fromVersion * @param string $toVersion * @return string | false */ protected function _modifyResourceDb($actionType, $fromVersion, $toVersion) { $resModel = (string) $this->_connectionConfig->model; $modName = (string) $this->_moduleConfig[0]->getName(); $sqlFilesDir = Mage::getModuleDir('sql', $modName) . DS . $this->_resourceName; if (!is_dir($sqlFilesDir) || !is_readable($sqlFilesDir)) { return false; } // Read resource files $arrAvailableFiles = array(); $sqlDir = dir($sqlFilesDir); while (false !== ($sqlFile = $sqlDir->read())) { $matches = array(); if (preg_match('#^' . $resModel . '-' . $actionType . '-(.*)\\.(sql|php)$#i', $sqlFile, $matches)) { $arrAvailableFiles[$matches[1]] = $sqlFile; } } $sqlDir->close(); if (empty($arrAvailableFiles)) { return false; } // Get SQL files name $arrModifyFiles = $this->_getModifySqlFiles($actionType, $fromVersion, $toVersion, $arrAvailableFiles); if (empty($arrModifyFiles)) { return false; } $modifyVersion = false; foreach ($arrModifyFiles as $resourceFile) { $sqlFile = $sqlFilesDir . DS . $resourceFile['fileName']; $fileType = pathinfo($resourceFile['fileName'], PATHINFO_EXTENSION); // Execute SQL if ($this->_conn) { $this->_conn->disallowDdlCache(); try { switch ($fileType) { case 'sql': $sql = file_get_contents($sqlFile); if ($sql != '') { $result = $this->run($sql); } else { $result = true; } break; case 'php': $conn = $this->_conn; $result = (include $sqlFile); break; default: $result = false; } if ($result) { if (strpos($actionType, 'data-') !== false) { $this->_getResource()->setDataVersion($this->_resourceName, $resourceFile['toVersion']); } else { $this->_getResource()->setDbVersion($this->_resourceName, $resourceFile['toVersion']); } } } catch (Exception $e) { echo "<pre>" . print_r($e, 1) . "</pre>"; throw Mage::exception('Mage_Core', Mage::helper('core')->__('Error in file: "%s" - %s', $sqlFile, $e->getMessage())); } $this->_conn->allowDdlCache(); } $modifyVersion = $resourceFile['toVersion']; } self::$_hadUpdates = true; return $modifyVersion; }