Beispiel #1
0
 /**
  * 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;
 }