/** * Callback to validate module database records. * * @param \yii\base\Event $event */ public static function onIntegrityCheck($event) { $integrityController = $event->sender; $integrityController->showTestHeadline("User Module - Users (" . User::find()->count() . " entries)"); foreach (User::find()->joinWith(['profile'])->all() as $user) { if ($user->profile == null) { $integrityController->showWarning("User with id " . $user->id . " has no profile record!"); } } foreach (GroupUser::find()->joinWith(['user'])->all() as $groupUser) { if ($groupUser->user == null) { if ($integrityController->showFix("Deleting group admin " . $groupUser->id . " without existing user!")) { $groupUser->delete(); } } } $integrityController->showTestHeadline("User Module - Password (" . Password::find()->count() . " entries)"); foreach (Password::find()->joinWith(['user'])->all() as $password) { if ($password->user == null) { if ($integrityController->showFix("Deleting password " . $password->id . " without existing user!")) { $password->delete(); } } } $integrityController->showTestHeadline("User Module - Profile (" . Profile::find()->count() . " entries)"); foreach (Profile::find()->joinWith(['user'])->all() as $profile) { if ($profile->user == null) { if ($integrityController->showFix("Deleting profile " . $profile->user_id . " without existing user!")) { $profile->delete(); } } } $integrityController->showTestHeadline("User Module - Mentioning (" . Mentioning::find()->count() . " entries)"); foreach (Mentioning::find()->joinWith(['user'])->all() as $mentioning) { if ($mentioning->user == null) { if ($integrityController->showFix("Deleting mentioning " . $mentioning->id . " of non existing user!")) { $mentioning->delete(); } } if ($mentioning->getPolymorphicRelation() == null) { if ($integrityController->showFix("Deleting mentioning " . $mentioning->id . " of non target!")) { $mentioning->delete(); } } } $integrityController->showTestHeadline("User Module - Follow (" . Follow::find()->count() . " entries)"); foreach (Follow::find()->joinWith(['user'])->all() as $follow) { if ($follow->user == null) { if ($integrityController->showFix("Deleting follow " . $follow->id . " of non existing user!")) { $follow->delete(); } } if ($follow->getTarget() == null) { if ($integrityController->showFix("Deleting follow " . $follow->id . " of non target!")) { $follow->delete(); } } } $integrityController->showTestHeadline("User Module - Modules (" . models\Module::find()->count() . " entries)"); foreach (models\Module::find()->joinWith(['user'])->all() as $module) { if ($module->user == null) { if ($integrityController->showFix("Deleting user-module " . $module->id . " of non existing user!")) { $module->delete(); } } } }
/** * Disables a Module */ public function disableModule($moduleId) { // Not enabled globally if (!array_key_exists($moduleId, $this->getAvailableModules())) { return false; } // Already enabled module if (!$this->isModuleEnabled($moduleId)) { Yii::error("User->disableModule(" . $moduleId . ") module is not enabled"); return false; } // New Way: Handle it directly in module class $module = Yii::$app->moduleManager->getModule($moduleId); $module->disableContentContainer($this->owner); $userModule = \humhub\modules\user\models\Module::findOne(['user_id' => $this->owner->id, 'module_id' => $moduleId]); if ($userModule == null) { $userModule = new \humhub\modules\user\models\Module(); $userModule->user_id = $this->owner->id; $userModule->module_id = $moduleId; } $userModule->state = \humhub\modules\user\models\Module::STATE_DISABLED; $userModule->save(); return true; }
/** * Sets default enabled/disabled on User or/and Space Modules * * @throws CHttpException */ public function actionSetAsDefault() { $moduleId = Yii::$app->request->get('moduleId'); $module = Yii::$app->moduleManager->getModule($moduleId); if ($module == null) { throw new HttpException(500, Yii::t('AdminModule.controllers_ModuleController', 'Could not find requested module!')); } if (!$module instanceof ContentContainerModule) { throw new HttpException(500, 'Invalid module type!'); } $model = new \humhub\modules\admin\models\forms\ModuleSetAsDefaultForm(); $spaceDefaultModule = null; if ($module->hasContentContainerType(Space::className())) { $spaceDefaultModule = \humhub\modules\space\models\Module::findOne(['space_id' => 0, 'module_id' => $moduleId]); if ($spaceDefaultModule === null) { $spaceDefaultModule = new \humhub\modules\space\models\Module(); $spaceDefaultModule->module_id = $moduleId; $spaceDefaultModule->space_id = 0; $spaceDefaultModule->state = \humhub\modules\space\models\Module::STATE_DISABLED; } $model->spaceDefaultState = $spaceDefaultModule->state; } $userDefaultModule = null; if ($module->hasContentContainerType(User::className())) { $userDefaultModule = \humhub\modules\user\models\Module::findOne(['user_id' => 0, 'module_id' => $moduleId]); if ($userDefaultModule === null) { $userDefaultModule = new \humhub\modules\user\models\Module(); $userDefaultModule->module_id = $moduleId; $userDefaultModule->user_id = 0; $userDefaultModule->state = \humhub\modules\user\models\Module::STATE_DISABLED; } $model->userDefaultState = $userDefaultModule->state; } if ($model->load(Yii::$app->request->post()) && $model->validate()) { if ($module->hasContentContainerType(Space::className())) { $spaceDefaultModule->state = $model->spaceDefaultState; $spaceDefaultModule->save(); } if ($module->hasContentContainerType(User::className())) { $userDefaultModule->state = $model->userDefaultState; $userDefaultModule->save(); } return $this->renderModalClose(); } return $this->renderAjax('setAsDefault', array('module' => $module, 'model' => $model)); }
/** * Disables a module * * This should delete all data created by this module. * When override this method make sure to invoke the parent implementation AFTER your implementation. */ public function disable() { /** * Remove database tables */ $migrationPath = $this->getBasePath() . '/migrations'; $uninstallMigration = $migrationPath . '/uninstall.php'; if (file_exists($uninstallMigration)) { /** * Execute Uninstall Migration */ ob_start(); require_once $uninstallMigration; $migration = new \uninstall(); try { $migration->up(); } catch (\yii\db\Exception $ex) { } ob_get_clean(); /** * Delete all Migration Table Entries */ $migrations = opendir($migrationPath); while (false !== ($migration = readdir($migrations))) { if ($migration == '.' || $migration == '..' || $migration == 'uninstall.php') { continue; } Yii::$app->db->createCommand()->delete('migration', ['version' => str_replace('.php', '', $migration)])->execute(); } } foreach (\humhub\modules\content\models\ContentContainerSetting::findAll(['module_id' => $this->id]) as $containerSetting) { $containerSetting->delete(); } foreach (\humhub\models\Setting::findAll(['module_id' => $this->id]) as $containerSetting) { $containerSetting->delete(); } foreach (\humhub\modules\user\models\Module::findAll(['module_id' => $this->id]) as $userModule) { $userModule->delete(); } foreach (\humhub\modules\space\models\Module::findAll(['module_id' => $this->id]) as $spaceModule) { $spaceModule->delete(); } Yii::$app->moduleManager->disable($this); }