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;
 }
 /**
  * Run module modification files. Return version of last applied upgrade (false if no upgrades applied)
  *
  * @param string $actionType self::TYPE_*
  * @param string $fromVersion
  * @param string $toVersion
  * @return string|false
  * @throws Mage_Core_Exception
  */
 protected function _modifyResourceDb($actionType, $fromVersion, $toVersion)
 {
     switch ($actionType) {
         case self::TYPE_DB_INSTALL:
         case self::TYPE_DB_UPGRADE:
             $files = $this->_getAvailableDbFiles($actionType, $fromVersion, $toVersion);
             break;
         case self::TYPE_DATA_INSTALL:
         case self::TYPE_DATA_UPGRADE:
             $files = $this->_getAvailableDataFiles($actionType, $fromVersion, $toVersion);
             break;
         default:
             $files = array();
             break;
     }
     if (empty($files) || !$this->getConnection()) {
         return false;
     }
     $version = false;
     foreach ($files as $file) {
         $fileName = $file['fileName'];
         $fileType = pathinfo($fileName, PATHINFO_EXTENSION);
         $this->getConnection()->disallowDdlCache();
         try {
             switch ($fileType) {
                 case 'php':
                     $conn = $this->getConnection();
                     $result = (include $fileName);
                     break;
                 case 'sql':
                     $sql = file_get_contents($fileName);
                     if (!empty($sql)) {
                         $result = $this->run($sql);
                     } else {
                         $result = true;
                     }
                     break;
                 default:
                     $result = false;
                     break;
             }
             if ($result) {
                 $this->_setResourceVersion($actionType, $file['toVersion']);
             }
         } catch (Exception $e) {
             throw Mage::exception('Mage_Core', Mage::helper('core')->__('Error in file: "%s" - %s', $fileName, $e->getMessage()));
         }
         $version = $file['toVersion'];
         $this->getConnection()->allowDdlCache();
     }
     self::$_hadUpdates = true;
     return $version;
 }
Beispiel #3
0
 /**
  * Run module modification sql
  *
  * @param     string $actionType install|upgrade|uninstall
  * @param     string $fromVersion
  * @param     string $toVersion
  * @return    bool
  */
 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())) {
         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;
     }
     foreach ($arrModifyFiles as $resourceFile) {
         $sqlFile = $sqlFilesDir . DS . $resourceFile['fileName'];
         $fileType = pathinfo($resourceFile['fileName'], PATHINFO_EXTENSION);
         // Execute SQL
         if ($this->_conn) {
             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;
                         /**
                          * useful variables:
                          * - $conn: setup db connection
                          * - $sqlFilesDir: root dir for sql update files
                          */
                         try {
                             #$conn->beginTransaction();
                             $result = (include $sqlFile);
                             #$conn->commit();
                         } catch (Exception $e) {
                             #$conn->rollback();
                             throw $e;
                         }
                         break;
                     default:
                         $result = false;
                 }
                 if ($result) {
                     $this->run("replace into " . $this->getTable('core/resource') . " (code, version) values ('" . $this->_resourceName . "', '" . $resourceFile['toVersion'] . "')");
                     #Mage::getResourceModel('core/resource')->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()));
             }
         }
         $toVersion = $resourceFile['toVersion'];
     }
     self::$_hadUpdates = true;
     return $toVersion;
 }