/**
  * Database altering method
  * @return true - All went well.
  * @return false - Something went wrong.
  */
 protected function _updateDataBase()
 {
     $dbAdapter = Zend_Db_Table::getDefaultAdapter();
     if ($this->_storeVersion) {
         $select = $dbAdapter->select()->from('shopping_config', array('value'))->where('name = ?', 'version');
         $dbVersion = $dbAdapter->fetchRow($select);
         $storeAlters = $this->_getFileContent($this->_newToasterPath . '_install/store-alters.sql', '-- version: ' . $dbVersion['value']);
         $revertStoreAlters = $this->_getFileContent($this->_newToasterPath . '_install/revert-store-alters.sql', '-- version: ' . $dbVersion['value']);
     }
     $select = $dbAdapter->select()->from('config', array('value'))->where('name = ?', 'version');
     $dbVersion = $dbAdapter->fetchRow($select);
     $alters = $this->_getFileContent($this->_newToasterPath . '_install/alters.sql', '-- version: ' . $dbVersion['value']);
     $revertAlters = $this->_getFileContent($this->_newToasterPath . '_install/revert-alters.sql', '-- version: ' . $dbVersion['value']);
     if (!empty($storeAlters)) {
         $alters = $alters . ' ' . $storeAlters;
     }
     if (!empty($revertStoreAlters)) {
         $revertAlters = $revertAlters . ' ' . $revertStoreAlters;
     }
     $sqlAlters = Tools_System_SqlSplitter::split($alters);
     $revertSqlAlters = Tools_System_SqlSplitter::split($revertAlters);
     $cnt = 0;
     try {
         foreach ($sqlAlters as $alter) {
             $dbAdapter->query($alter);
             $cnt++;
         }
         return true;
     } catch (Exception $ex) {
         for ($i = 0; $i < $cnt; $i++) {
             $dbAdapter->query($revertSqlAlters[$i]);
         }
         error_log($ex->getMessage());
         return false;
     }
     return false;
 }
 public function deleteAction()
 {
     if ($this->getRequest()->isPost()) {
         $plugin = Tools_Plugins_Tools::findPluginByName($this->getRequest()->getParam('id'));
         $plugin->registerObserver(new Tools_Plugins_GarbageCollector(array('action' => Tools_System_GarbageCollector::CLEAN_ONDELETE)));
         $miscData = Zend_Registry::get('misc');
         $sqlFilePath = $this->_helper->website->getPath() . $miscData['pluginsPath'] . $plugin->getName() . '/system/' . Application_Model_Models_Plugin::UNINSTALL_FILE_NAME;
         if (file_exists($sqlFilePath)) {
             $sqlFileContent = Tools_Filesystem_Tools::getFile($sqlFilePath);
             if (strlen($sqlFileContent)) {
                 $queries = Tools_System_SqlSplitter::split($sqlFileContent);
             }
         }
         $delete = Tools_Filesystem_Tools::deleteDir($this->_helper->website->getPath() . 'plugins/' . $plugin->getName());
         if (!$delete) {
             $this->_helper->response->fail('Can\'t remove plugin\'s directory (not enough permissions). Plugin was uninstalled.');
             exit;
         }
         if (is_array($queries) && !empty($queries)) {
             $dbAdapter = Zend_Registry::get('dbAdapter');
             try {
                 array_walk($queries, function ($query, $key, $adapter) {
                     if (strlen(trim($query))) {
                         $adapter->query($query);
                     }
                 }, $dbAdapter);
                 Application_Model_Mappers_PluginMapper::getInstance()->delete($plugin);
             } catch (Exception $e) {
                 error_log($e->getMessage());
                 $this->_helper->response->fail($e->getMessage());
             }
         }
         $this->_helper->cache->clean(null, null, array('plugins'));
         $this->_helper->cache->clean('admin_addmenu', $this->_helper->session->getCurrentUser()->getRoleId());
         $this->_helper->response->success('Removed');
     }
 }