Пример #1
0
 /**
  * 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();
             }
         }
     }
 }
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * 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));
 }
Пример #4
0
 /**
  * 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);
 }