Exemplo n.º 1
0
 /**
  * Apply module sql file of appropriate type
  *
  * @param string $processType self::TYPE_AITOC_DB_STATE_*
  * @param string $moduleName like [Aitoc|AdjustWare]_[AitModuleName]
  * 
  * @return bool 
  */
 protected function _processStateSql($processType, $moduleName)
 {
     $localDir = Aitoc_Aitsys_Abstract_Service::get()->filesystem()->getLocalDir();
     $moduleDir = $localDir . str_replace('_', '/', $moduleName);
     // Attempt to locate and load module's main config file or its .data version
     $configFile = $moduleDir . DS . 'etc' . DS . 'config.data.xml';
     if (file_exists($configFile)) {
         $config = simplexml_load_file($configFile);
     } else {
         $configFile = $moduleDir . DS . 'etc' . DS . 'config.xml';
         if (file_exists($configFile)) {
             $config = simplexml_load_file($configFile);
         }
     }
     // Module config file not found
     if (!isset($config)) {
         return false;
     }
     if (isset($config->global) && isset($config->global->resources)) {
         foreach ($config->global->resources->children() as $key => $object) {
             if ($object->setup) {
                 $resourceName = $key;
                 break;
             }
         }
     }
     // There's no resource setup entities in the config file
     if (!isset($resourceName)) {
         return false;
     }
     $sqlFilesDir = $moduleDir . DS . 'sql' . DS . $resourceName;
     // Resource setup directory is empty
     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('#^mysql4-' . $processType . '-(.*)\\.(sql|php)$#i', $sqlFile, $matches)) {
             $arrAvailableFiles[$matches[1]] = $sqlFile;
         }
     }
     $sqlDir->close();
     // There are no appropriate state sql files in the resource directory
     if (empty($arrAvailableFiles)) {
         return false;
     }
     $dbVersion = Mage::getResourceModel('core/resource')->getDBVersion($resourceName);
     foreach ($arrAvailableFiles as $version => $resourceFile) {
         // Stop processing if state script is for the higher version of the module
         if (version_compare($version, $dbVersion) > 0) {
             break;
         }
         $sqlFile = $sqlFilesDir . DS . $resourceFile;
         $fileType = pathinfo($resourceFile, PATHINFO_EXTENSION);
         // Execute SQL
         if ($this->_conn) {
             if (method_exists($this->_conn, 'disallowDdlCache')) {
                 $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;
                 }
             } 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()));
             }
             if (method_exists($this->_conn, 'allowDdlCache')) {
                 $this->_conn->allowDdlCache();
             }
         }
     }
     self::$_hadUpdates = true;
     return true;
 }
Exemplo n.º 2
0
 public function applyAitocModuleActivate($moduleName)
 {
     $localDir = Aitoc_Aitsys_Abstract_Service::get()->filesystem()->getLocalDir();
     $moduleDir = $localDir . str_replace('_', '/', $moduleName);
     $configFile = $moduleDir . DS . 'etc' . DS . 'config.data.xml';
     if (file_exists($configFile)) {
         $config = simplexml_load_file($configFile);
     } else {
         $configFile = $moduleDir . DS . 'etc' . DS . 'config.xml';
         if (file_exists($configFile)) {
             $config = simplexml_load_file($configFile);
         }
     }
     if (!isset($config)) {
         return false;
     }
     //list($curVersion) = (array)$config->modules->$moduleName->version;
     if (isset($config->global) && isset($config->global->resources)) {
         foreach ($config->global->resources->children() as $key => $object) {
             if ($object->setup) {
                 $resourceName = $key;
                 break;
             }
         }
     }
     if (!isset($resourceName)) {
         return false;
     }
     $dbVersion = Mage::getResourceModel('core/resource')->getDBVersion($resourceName);
     $sqlFilesDir = $moduleDir . DS . 'sql' . DS . $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('#^mysql4-activate-(.*)\\.(sql|php)$#i', $sqlFile, $matches)) {
             $arrAvailableFiles[$matches[1]] = $sqlFile;
         }
     }
     if (empty($arrAvailableFiles)) {
         return false;
     }
     foreach ($arrAvailableFiles as $version => $resourceFile) {
         if (version_compare($version, $dbVersion) > 0) {
             break;
         }
         $sqlFile = $sqlFilesDir . DS . $resourceFile;
         $fileType = pathinfo($resourceFile, PATHINFO_EXTENSION);
         // Execute SQL
         if ($this->_conn) {
             if (method_exists($this->_conn, 'disallowDdlCache')) {
                 $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;
                 }
             } 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()));
             }
             if (method_exists($this->_conn, 'allowDdlCache')) {
                 $this->_conn->allowDdlCache();
             }
         }
     }
     self::$_hadUpdates = true;
     return true;
 }