From 6845f17cf642526f613c1c2a510abef9b1892908 Mon Sep 17 00:00:00 2001 From: Yuriy Bakhtin Date: Wed, 25 Feb 2026 11:41:07 +0300 Subject: [PATCH] Migration to Bootstrap 5 for HumHub 1.18 --- Events.php | 17 ++-- assets/GiiAsset.php | 2 +- controllers/ClientController.php | 4 - controllers/FormController.php | 8 +- controllers/IndexController.php | 2 - controllers/RichtextController.php | 53 ++++++------ controllers/ShowcaseController.php | 11 ++- controllers/StatusController.php | 5 +- docs/CHANGELOG.md | 1 + gii/templates/modules/simple/Events.php | 35 +++++--- .../modules/simple/views/index/index.php | 2 +- gii/views/module/form.php | 7 +- views/client/index.php | 2 +- views/form/result.php | 80 +++++++++---------- views/index/index.php | 4 +- views/showcase/remoteModal.php | 19 +++-- views/showcase/tabs/client_get/try.php | 6 +- views/showcase/tabs/client_get/view.php | 12 ++- views/showcase/tabs/forms_acknowledge/php.php | 18 ++--- views/showcase/tabs/forms_acknowledge/try.php | 7 +- .../showcase/tabs/forms_acknowledge/view.php | 6 +- views/showcase/tabs/forms_simple/php.php | 18 ++--- views/showcase/tabs/forms_simple/try.php | 9 +-- views/showcase/tabs/forms_simple/view.php | 6 +- views/showcase/tabs/loader_button/php.php | 4 +- views/showcase/tabs/loader_button/try.php | 11 ++- .../tabs/loader_button_remote/php.php | 2 +- .../tabs/loader_button_remote/try.php | 5 +- views/showcase/tabs/loader_content/php.php | 4 +- views/showcase/tabs/loader_content/try.php | 11 ++- .../tabs/loader_content_extended/php.php | 4 +- .../tabs/loader_content_extended/try.php | 11 ++- views/showcase/tabs/modal_confirm/php.php | 2 +- views/showcase/tabs/modal_confirm/try.php | 16 +++- .../tabs/modal_confirm_extended/php.php | 2 +- .../tabs/modal_confirm_extended/try.php | 15 +++- .../tabs/modal_remote_extended/php.php | 16 ++-- .../tabs/modal_remote_extended/try.php | 13 +-- views/showcase/tabs/modal_simple/php.php | 29 +++---- views/showcase/tabs/modal_simple/try.php | 37 +++++---- .../showcase/tabs/modal_simple_remote/php.php | 8 +- .../showcase/tabs/modal_simple_remote/try.php | 2 +- .../tabs/richtext_custom_preset/php.php | 12 +-- .../tabs/richtext_custom_preset/try.php | 13 +-- .../tabs/richtext_custom_preset/view.php | 2 +- views/showcase/tabs/richtext_exclude/php.php | 12 +-- views/showcase/tabs/richtext_exclude/try.php | 10 +-- views/showcase/tabs/richtext_exclude/view.php | 2 +- views/showcase/tabs/richtext_preset/php.php | 12 +-- views/showcase/tabs/richtext_preset/try.php | 13 ++- views/showcase/tabs/richtext_preset/view.php | 2 +- views/showcase/tabs/richtext_simple/php.php | 12 +-- views/showcase/tabs/richtext_simple/try.php | 8 +- views/showcase/tabs/richtext_simple/view.php | 2 +- views/showcase/tabs/status_modal/php.php | 2 +- views/showcase/tabs/status_modal/try.php | 5 +- views/showcase/tabs/status_modal/view.php | 26 +++--- views/showcase/tabs/status_simple/try.php | 7 +- views/showcase/tabs/status_simple/view.php | 4 +- views/showcase/tabs/status_view/try.php | 2 +- views/showcase/tabs/status_view/view.php | 4 +- .../tabs/stream_custom/filter_view.phps | 2 +- .../tabs/stream_custom/streamEntry.php | 7 +- .../tabs/stream_custom/streamEntry_view.phps | 7 +- .../showcase/tabs/upload_simple_model/try.php | 12 +-- .../tabs/userpicker_select_self/try.php | 2 +- .../tabs/userpicker_select_self/view.php | 2 +- .../userpicker_simple_form/controller.php | 6 +- .../tabs/userpicker_simple_form/try.php | 2 +- .../tabs/userpicker_simple_form/view.php | 2 +- views/status/modal.php | 24 +++--- widgets/CodeView.php | 10 +-- widgets/SimpleJsWidget.php | 8 +- widgets/views/contentInfoWallStreamEntry.php | 2 +- widgets/views/filterNavigation.php | 4 +- widgets/views/iconSelect.php | 8 +- widgets/views/showcase.php | 6 +- widgets/views/showcasePage.php | 4 +- 78 files changed, 412 insertions(+), 372 deletions(-) diff --git a/Events.php b/Events.php index f5fcc25..dde6865 100644 --- a/Events.php +++ b/Events.php @@ -8,8 +8,10 @@ namespace humhub\modules\devtools; +use humhub\helpers\ControllerHelper; +use humhub\modules\ui\menu\MenuLink; +use humhub\widgets\TopMenu; use Yii; -use yii\helpers\Url; class Events { @@ -19,14 +21,17 @@ public static function onTopMenuInit($event) return true; } - $event->sender->addItem([ + /* @var TopMenu $menu */ + $menu = $event->sender; + + $menu->addEntry(new MenuLink([ 'label' => Yii::t('DevtoolsModule.base', 'Devtools'), 'id' => 'devtools', - 'icon' => '', - 'url' => Url::toRoute('/devtools/index'), + 'icon' => 'code', + 'url' => ['/devtools/index'], 'sortOrder' => 100, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'devtools'), - ]); + 'isActive' => ControllerHelper::isActivePath('devtools'), + ])); } public static function onConsoleApplicationInit($event) diff --git a/assets/GiiAsset.php b/assets/GiiAsset.php index 8d3ca96..befdcb8 100644 --- a/assets/GiiAsset.php +++ b/assets/GiiAsset.php @@ -12,7 +12,7 @@ use humhub\assets\FontAwesomeAsset; use humhub\assets\Select2Asset; use humhub\components\assets\AssetBundle; -use yii\bootstrap\BootstrapAsset; +use yii\bootstrap5\BootstrapAsset; use yii\web\JqueryAsset; class GiiAsset extends AssetBundle diff --git a/controllers/ClientController.php b/controllers/ClientController.php index 188528b..07e2eb6 100644 --- a/controllers/ClientController.php +++ b/controllers/ClientController.php @@ -8,10 +8,6 @@ namespace humhub\modules\devtools\controllers; -use humhub\components\Controller; -use humhub\modules\devtools\models\forms\RichtextModel; -use humhub\widgets\ModalDialog; -use humhub\widgets\RichText; use Yii; /** diff --git a/controllers/FormController.php b/controllers/FormController.php index 2823e77..9273e87 100644 --- a/controllers/FormController.php +++ b/controllers/FormController.php @@ -8,12 +8,8 @@ namespace humhub\modules\devtools\controllers; -use humhub\components\Controller; -use humhub\modules\devtools\models\forms\RichtextModel; use humhub\modules\devtools\models\TestModel; -use humhub\widgets\ModalClose; -use humhub\widgets\ModalDialog; -use humhub\widgets\RichText; +use humhub\widgets\modal\ModalClose; use Yii; /** @@ -32,6 +28,6 @@ public function actionIndex() return $this->renderAjax('result', ['model' => $model]); } - return ModalClose::widget(['error', 'Could not load form data!']); + return ModalClose::widget(['error' => 'Could not load form data!']); } } diff --git a/controllers/IndexController.php b/controllers/IndexController.php index 84d4f22..6cdb11a 100644 --- a/controllers/IndexController.php +++ b/controllers/IndexController.php @@ -8,8 +8,6 @@ namespace humhub\modules\devtools\controllers; -use Yii; - /** * Defines the configure actions. * diff --git a/controllers/RichtextController.php b/controllers/RichtextController.php index 98f404f..b0dfc2d 100644 --- a/controllers/RichtextController.php +++ b/controllers/RichtextController.php @@ -9,9 +9,10 @@ namespace humhub\modules\devtools\controllers; use humhub\components\Controller; -use humhub\modules\devtools\models\forms\RichtextModel; -use humhub\widgets\ModalDialog; use humhub\modules\content\widgets\richtext\RichText; +use humhub\modules\devtools\models\forms\RichtextModel; +use humhub\widgets\modal\Modal; +use humhub\widgets\modal\ModalButton; use Yii; /** @@ -29,17 +30,17 @@ public function actionModal() $model = new RichtextModel(); if ($model->load(Yii::$app->request->post())) { - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), 'body' => RichText::output($model->richtext), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), 'body' => RichText::widget(['text' => 'Richtext could not be loaded']), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } @@ -48,17 +49,17 @@ public function actionPreset() $model = new RichtextModel(); if ($model->load(Yii::$app->request->post())) { - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), 'body' => RichText::output($model->richtext, ['preset' => 'markdown']), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), 'body' => RichText::widget(['text' => 'Richtext could not be loaded']), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } @@ -67,17 +68,17 @@ public function actionCustomPreset() $model = new RichtextModel(); if ($model->load(Yii::$app->request->post())) { - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), 'body' => RichText::output($model->richtext, ['preset' => 'demo']), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), 'body' => RichText::widget(['text' => 'Richtext could not be loaded']), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } @@ -86,17 +87,17 @@ public function actionExclude() $model = new RichtextModel(); if ($model->load(Yii::$app->request->post())) { - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), 'body' => RichText::output($model->richtext, ['exclude' => ['emoji', 'mention', 'table']]), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Richtext result'), 'body' => RichText::widget(['text' => 'Richtext could not be loaded']), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } } diff --git a/controllers/ShowcaseController.php b/controllers/ShowcaseController.php index d077a55..195f474 100644 --- a/controllers/ShowcaseController.php +++ b/controllers/ShowcaseController.php @@ -8,9 +8,8 @@ namespace humhub\modules\devtools\controllers; -use humhub\modules\devtools\models\forms\RichtextModel; -use humhub\widgets\ModalDialog; -use humhub\widgets\RichText; +use humhub\widgets\modal\Modal; +use humhub\widgets\modal\ModalButton; use Yii; /** @@ -55,10 +54,10 @@ public function actionUserpickerRemote() $model = new \humhub\modules\devtools\models\forms\UserpickerForm(); if ($model->load(Yii::$app->request->post())) { - return ModalDialog::widget([ - 'header' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Userpicker guid selection'), + return Modal::widget([ + 'title' => Yii::t('DevtoolsModule.controllers_ShowcaseController', 'Userpicker guid selection'), 'body' => $model->getSelectionString(), - 'footer' => '', + 'footer' => ModalButton::cancel(Yii::t('base', 'Close')), ]); } } diff --git a/controllers/StatusController.php b/controllers/StatusController.php index a0baa8b..dd09c73 100644 --- a/controllers/StatusController.php +++ b/controllers/StatusController.php @@ -8,10 +8,9 @@ namespace humhub\modules\devtools\controllers; -use humhub\widgets\ModalClose; -use Yii; -use humhub\components\Controller; +use humhub\widgets\modal\ModalClose; use yii\helpers\Url; +use Yii; class StatusController extends DevtoolsController { diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index f51ec20..d440b8f 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -4,6 +4,7 @@ Changelog 0.5.0 (unreleased) --------------------- - Enh #33: Changes for HumHub version 1.18 by rector +- Enh #36: Migration to Bootstrap 5 for HumHub 1.18 0.4.1 (unreleased) --------------------- diff --git a/gii/templates/modules/simple/Events.php b/gii/templates/modules/simple/Events.php index 4b62695..f9e51fe 100644 --- a/gii/templates/modules/simple/Events.php +++ b/gii/templates/modules/simple/Events.php @@ -1,7 +1,11 @@ -namespace getClassNamespace() ?>; +namespace getClassNamespace() ?>; +use humhub\helpers\ControllerHelper; +use humhub\modules\admin\widgets\AdminMenu; +use humhub\modules\ui\menu\MenuLink; +use humhub\widgets\TopMenu; use Yii; use yii\helpers\Url; @@ -14,13 +18,16 @@ class Events */ public static function onTopMenuInit($event) { - $event->sender->addItem([ + /* @var TopMenu $menu */ + $menu = $event->sender; + + $menu->addEntry(new MenuLink([ 'label' => 'moduleID) ?>', - 'icon' => '', - 'url' => Url::to(['/moduleID ?>/index']), + 'icon' => 'icon ?>', + 'url' => ['/moduleID ?>/index'], 'sortOrder' => 99999, - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'moduleID ?>' && Yii::$app->controller->id == 'index'), - ]); + 'isActive' => ControllerHelper::isActivePath('moduleID ?>', 'index'), + ])); } /** @@ -30,13 +37,15 @@ public static function onTopMenuInit($event) */ public static function onAdminMenuInit($event) { - $event->sender->addItem([ - 'label' => 'moduleID); ?>', - 'url' => Url::to(['/moduleID; ?>/admin']), - 'group' => 'manage', - 'icon' => '', - 'isActive' => (Yii::$app->controller->module && Yii::$app->controller->module->id == 'moduleID; ?>' && Yii::$app->controller->id == 'admin'), + /* @var AdminMenu $menu */ + $menu = $event->sender; + + $menu->addEntry(new MenuLink([ + 'label' => 'moduleID) ?>', + 'url' => ['/moduleID; ?>/admin'], + 'icon' => 'icon ?>', + 'isActive' => ControllerHelper::isActivePath('moduleID ?>', 'admin'), 'sortOrder' => 99999, - ]); + ])); } } diff --git a/gii/templates/modules/simple/views/index/index.php b/gii/templates/modules/simple/views/index/index.php index 1a9d379..6a6e017 100644 --- a/gii/templates/modules/simple/views/index/index.php +++ b/gii/templates/modules/simple/views/index/index.php @@ -1,6 +1,6 @@ -use humhub\widgets\Button; +use humhub\widgets\bootstrap\Button; // Register our module assets, this could also be done within the controller \getClassNamespace('assets\Assets::register($this);'); ?> diff --git a/gii/views/module/form.php b/gii/views/module/form.php index 60fcfd5..b1ffa11 100644 --- a/gii/views/module/form.php +++ b/gii/views/module/form.php @@ -6,6 +6,7 @@ * */ +use humhub\helpers\Html; use humhub\modules\devtools\widgets\IconSelect; /* @var $this yii\web\View */ @@ -29,8 +30,8 @@
-
- +
+

field($generator, 'isSpaceModule')->checkbox(['class' => 'isContainerModule']) ?> field($generator, 'isUserModule')->checkbox(['class' => 'isContainerModule']) ?> @@ -46,7 +47,7 @@ field($generator, 'outputPath'); ?>
-