function uninstall($aParams, $bDisable = false) { // check if module is already waiting while files are deleting bx_import('BxDolInstallerUtils'); if (BxDolInstallerUtils::isModulePendingUninstall($this->_aConfig['home_uri'])) { return array('message' => _t('_adm_err_modules_pending_uninstall_already'), 'result' => false); } // queue for deletion storage files $bSetModulePendingUninstall = false; foreach ($this->_aStorages as $s) { if (($o = BxDolStorage::getObjectInstance($s)) && $o->queueFilesForDeletionFromObject()) { $bSetModulePendingUninstall = true; } } // delete comments and queue for deletion comments attachments bx_import('BxDolCmts'); $iFiles = 0; BxDolCmts::onModuleUninstall($this->_aConfig['name'], $iFiles); if ($iFiles) { $bSetModulePendingUninstall = true; } // if some files were added to the queue, set module as pending uninstall if ($bSetModulePendingUninstall) { BxDolInstallerUtils::setModulePendingUninstall($this->_aConfig['home_uri']); return array('message' => _t('_adm_err_modules_pending_uninstall'), 'result' => false); } // delete associated connections if ($this->_aConnections) { bx_import('BxDolConnection'); foreach ($this->_aConnections as $sObjectConnections => $a) { $o = BxDolConnection::getObjectInstance($sObjectConnections); if (!$o) { continue; } $sFuncSuffix = 'DeleteInitiatorAndContent'; if (isset($a['conn']) && 'initiator' == $a['conn']) { $sFuncSuffix = 'DeleteInitiator'; } elseif (isset($a['conn']) && 'content' == $a['conn']) { $sFuncSuffix = 'DeleteContent'; } if (isset($a['type']) && 'profiles' == $a['type']) { $sFunc = 'onModuleProfile' . $sFuncSuffix; $o->{$sFunc}($this->_aConfig['name']); } else { $sFunc = 'onModule' . $sFuncSuffix; $o->{$sFunc}($a['table'], $a['field_id']); } } } return parent::uninstall($aParams, $bDisable); }
/** * * Storage objects to automatically delete files from upon module uninstallation. * Note. Don't add storage objects used in transcoder objects. * @param string $sOperation - operation type. */ protected function actionProcessStorages($sOperation) { if (empty($this->_aConfig['storages'])) { return BX_DOL_STUDIO_INSTALLER_FAILED; } // check if module is already waiting while files are deleting if (self::isModulePendingUninstall($this->_aConfig['home_uri'])) { return array('code' => BX_DOL_STUDIO_INSTALLER_FAILED, 'content' => _t('_adm_err_modules_pending_uninstall_already')); } $bSetModulePendingUninstall = false; // queue for deletion storage files foreach ($this->_aConfig['storages'] as $s) { if (($o = BxDolStorage::getObjectInstance($s)) && $o->queueFilesForDeletionFromObject()) { $bSetModulePendingUninstall = true; } } // delete comments and queue for deletion comments attachments $iFiles = 0; BxDolCmts::onModuleUninstall($this->_aConfig['name'], $iFiles); if ($iFiles) { $bSetModulePendingUninstall = true; } // if some files were added to the queue, set module as pending uninstall if ($bSetModulePendingUninstall) { self::setModulePendingUninstall($this->_aConfig['home_uri']); return array('code' => BX_DOL_STUDIO_INSTALLER_FAILED, 'content' => _t('_adm_err_modules_pending_uninstall')); } return BX_DOL_STUDIO_INSTALLER_SUCCESS; }