77 lines
2.8 KiB
PHP
77 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace humhub\modules\space_profiles\controllers;
|
|
|
|
use humhub\modules\content\components\ContentContainerController;
|
|
use humhub\modules\content\components\ContentContainerControllerAccess;
|
|
use humhub\modules\rescue_foundation\widgets\RescueSettingsMenu;
|
|
use humhub\modules\space\models\Space;
|
|
use humhub\modules\space_profiles\models\forms\SpaceProfileForm;
|
|
use humhub\modules\space_profiles\services\ModuleSetupService;
|
|
use Yii;
|
|
use yii\web\UploadedFile;
|
|
use yii\web\BadRequestHttpException;
|
|
|
|
class SettingsController extends ContentContainerController
|
|
{
|
|
protected function getAccessRules()
|
|
{
|
|
return [[ContentContainerControllerAccess::RULE_USER_GROUP_ONLY => [Space::USERGROUP_OWNER, Space::USERGROUP_ADMIN]]];
|
|
}
|
|
|
|
public function actionIndex()
|
|
{
|
|
$model = new SpaceProfileForm(['contentContainer' => $this->contentContainer]);
|
|
|
|
if ($model->load(Yii::$app->request->post())) {
|
|
$model->iconFile = UploadedFile::getInstance($model, 'iconFile');
|
|
$model->backgroundImageFile = UploadedFile::getInstance($model, 'backgroundImageFile');
|
|
|
|
if ($model->save()) {
|
|
$this->view->saved();
|
|
return $this->refresh();
|
|
}
|
|
}
|
|
|
|
$subNav = null;
|
|
if (class_exists(RescueSettingsMenu::class)) {
|
|
$subNav = RescueSettingsMenu::widget(['space' => $this->contentContainer]);
|
|
}
|
|
|
|
return $this->render('index', [
|
|
'model' => $model,
|
|
'subNav' => $subNav,
|
|
]);
|
|
}
|
|
|
|
public function actionSetup()
|
|
{
|
|
if (!Yii::$app->request->isPost) {
|
|
throw new BadRequestHttpException('Invalid request method.');
|
|
}
|
|
|
|
if (!$this->contentContainer instanceof Space) {
|
|
$this->view->error(Yii::t('SpaceProfilesModule.base', 'Setup can only be run inside a space.'));
|
|
return $this->redirect($this->contentContainer->createUrl('/space_profiles/settings'));
|
|
}
|
|
|
|
try {
|
|
$result = ModuleSetupService::runForSpace($this->contentContainer);
|
|
$appliedCount = count($result['applied'] ?? []);
|
|
|
|
if ($appliedCount > 0) {
|
|
$this->view->success(Yii::t('SpaceProfilesModule.base', 'Setup completed. Applied {count} migration(s).', [
|
|
'count' => $appliedCount,
|
|
]));
|
|
} else {
|
|
$this->view->success(Yii::t('SpaceProfilesModule.base', 'Setup completed. No pending migrations were found.'));
|
|
}
|
|
} catch (\Throwable $e) {
|
|
Yii::error($e, 'space_profiles.setup');
|
|
$this->view->error(Yii::t('SpaceProfilesModule.base', 'Setup failed. Please check logs and try again.'));
|
|
}
|
|
|
|
return $this->redirect($this->contentContainer->createUrl('/space_profiles/settings'));
|
|
}
|
|
}
|