diff --git a/Module.php b/Module.php index c9af1231..e7fef5e9 100644 --- a/Module.php +++ b/Module.php @@ -137,6 +137,16 @@ public function getHideNavigationEntryDefault(): bool return $this->settings->get('hideNavigationEntryDefault', false); } + public function getWikiNumberingEnabledDefault(): bool + { + return $this->settings->get('wikiNumberingEnabledDefault', false); + } + + public function getOverviewNumberingEnabledDefault(): bool + { + return $this->settings->get('overviewNumberingEnabledDefault', false); + } + public function getContentHiddenDefault(ContentContainerActiveRecord $contentContainer): bool { return (new DefaultSettings(['contentContainer' => $contentContainer]))->contentHiddenDefault; diff --git a/messages/de/base.php b/messages/de/base.php index b7c00dad..5f32e3e5 100644 --- a/messages/de/base.php +++ b/messages/de/base.php @@ -86,4 +86,10 @@ 'Hide Navigation Entries of this module globally by default' => '', 'Hide Navigation Entry' => '', 'No wiki pages found.' => '', + 'Enable Numbering' => 'Nummerierung aktivieren', + 'Disable Numbering' => 'Nummerierung deaktivieren', + 'Enable Default wiki page numbering for current spaces' => 'Standard-Wikiseitennummerierung für aktuelle Bereiche aktivieren', + 'Enable Default overview numbering for current spaces' => 'Standard-übersichtsnummerierung für aktuelle Bereiche aktivieren', + 'Enable wiki page header numbering for all spaces by default' => 'Nummerierung der Überschriften standardmäßig für alle Bereiche aktivieren', + 'Enable overview numbering for all spaces by default' => 'Nummerierung der Seitentitel für alle Bereiche standardmäßig aktivieren', ]; diff --git a/models/ConfigForm.php b/models/ConfigForm.php index ccf0e412..37c657fb 100644 --- a/models/ConfigForm.php +++ b/models/ConfigForm.php @@ -17,6 +17,10 @@ class ConfigForm extends Model public bool $hideNavigationEntryDefault = false; + public bool $wikiNumberingEnabledDefault = false; + + public bool $overviewNumberingEnabledDefault = false; + /** * @inheritdoc */ @@ -25,6 +29,8 @@ public function init() parent::init(); $this->contentHiddenDefault = $this->getModule()->contentHiddenGlobalDefault; $this->hideNavigationEntryDefault = $this->getModule()->hideNavigationEntryDefault; + $this->wikiNumberingEnabledDefault = $this->getModule()->wikiNumberingEnabledDefault; + $this->overviewNumberingEnabledDefault = $this->getModule()->overviewNumberingEnabledDefault; } public function getModule(): Module @@ -38,7 +44,7 @@ public function getModule(): Module public function rules() { return [ - [['contentHiddenDefault', 'hideNavigationEntryDefault'], 'boolean'], + [['contentHiddenDefault', 'hideNavigationEntryDefault','wikiNumberingEnabledDefault','overviewNumberingEnabledDefault'], 'boolean'], ]; } @@ -46,6 +52,8 @@ public function attributeLabels() { return [ 'hideNavigationEntryDefault' => Yii::t('WikiModule.base', 'Hide Navigation Entries of this module globally by default'), + 'wikiNumberingEnabledDefault'=> Yii::t('WikiModule.base', 'Enable wiki page header numbering for all spaces by default'), + 'overviewNumberingEnabledDefault'=> Yii::t('WikiModule.base', 'Enable overview numbering for all spaces by default'), ]; } @@ -57,6 +65,8 @@ public function save(): bool $this->getModule()->settings->set('contentHiddenGlobalDefault', $this->contentHiddenDefault); $this->getModule()->settings->set('hideNavigationEntryDefault', $this->hideNavigationEntryDefault); + $this->getModule()->settings->set('wikiNumberingEnabledDefault', $this->wikiNumberingEnabledDefault); + $this->getModule()->settings->set('overviewNumberingEnabledDefault', $this->overviewNumberingEnabledDefault); return true; } diff --git a/models/DefaultSettings.php b/models/DefaultSettings.php index 8d2c179f..8ec86bf8 100644 --- a/models/DefaultSettings.php +++ b/models/DefaultSettings.php @@ -25,6 +25,8 @@ class DefaultSettings extends Model public const SETTING_MODULE_LABEL = 'defaults.moduleLabel'; public const SETTING_CONTENT_HIDDEN_DEFAULT = 'contentHiddenDefault'; public const SETTING_HIDE_NAVIGATION_ENTRY = 'hideNavigationEntry'; + public const SETTING_WIKI_NUMBERING_ENABLED = 'wikiNumberingEnabled'; + public const SETTING_OVERVIEW_NUMBERING_ENABLED = 'overviewNumberingEnabled'; /** * @var ContentContainerActiveRecord @@ -43,6 +45,10 @@ class DefaultSettings extends Model public bool $hideNavigationEntry = false; + public bool $wikiNumberingEnabled = false; + + public bool $overviewNumberingEnabled = false; + /** * @var Module */ @@ -67,6 +73,16 @@ public function init() $this->module->hideNavigationEntryDefault, ); + $this->wikiNumberingEnabled = $this->getSettings()->get( + self::SETTING_WIKI_NUMBERING_ENABLED, + $this->module->wikiNumberingEnabledDefault, + ); + + $this->overviewNumberingEnabled = $this->getSettings()->get( + self::SETTING_OVERVIEW_NUMBERING_ENABLED, + $this->module->overviewNumberingEnabledDefault, + ); + } private function getSettings(): ContentContainerSettingsManager @@ -81,7 +97,7 @@ public function rules() { return [ [['module_label'], 'string'], - [['contentHiddenDefault', 'hideNavigationEntry'], 'boolean'], + [['contentHiddenDefault', 'hideNavigationEntry','wikiNumberingEnabled','overviewNumberingEnabled'], 'boolean'], ]; } @@ -90,6 +106,8 @@ public function attributeLabels() return [ 'module_label' => Yii::t('WikiModule.base', 'Module name'), 'hideNavigationEntry' => Yii::t('WikiModule.base', 'Hide Navigation Entry'), + 'wikiNumberingEnabled'=> Yii::t('WikiModule.base', 'Enable Default wiki page numbering for current spaces'), + 'overviewNumberingEnabled'=> Yii::t('WikiModule.base', 'Enable Default overview numbering for current spaces'), ]; } public function save(): bool @@ -101,6 +119,8 @@ public function save(): bool $this->getSettings()->set(self::SETTING_MODULE_LABEL, $this->module_label); $this->getSettings()->set(self::SETTING_CONTENT_HIDDEN_DEFAULT, $this->contentHiddenDefault); $this->getSettings()->set(self::SETTING_HIDE_NAVIGATION_ENTRY, $this->hideNavigationEntry); + $this->getSettings()->set(self::SETTING_WIKI_NUMBERING_ENABLED, $this->wikiNumberingEnabled); + $this->getSettings()->set(self::SETTING_OVERVIEW_NUMBERING_ENABLED, $this->overviewNumberingEnabled); return true; } diff --git a/models/WikiPage.php b/models/WikiPage.php index ea6ce769..237a2532 100644 --- a/models/WikiPage.php +++ b/models/WikiPage.php @@ -540,4 +540,34 @@ public function getIsCategory(): bool return $this->_isCategory; } + + public function getNumbering() { + if (is_null($this->parent_page_id)) { + return $this->getPositionInHierarchy() + 1; + } + + return $this->categoryPage->getNumbering() . '.' . ($this->getPositionInHierarchy() + 1); + } + + protected function getPositionInHierarchy() { + $parentCondition = is_null($this->parent_page_id) ? ['parent_page_id' => null] : ['parent_page_id' => $this->parent_page_id]; + + $query = static::find() + ->contentContainer($this->content->container) + ->andWhere($parentCondition) + ->orderBy([ + static::tableName() . '.sort_order' => SORT_ASC, + static::tableName() . '.title' => SORT_ASC, + ]); + + $pages = $query->all(); + + foreach ($pages as $index => $page) { + if ($page->id == $this->id) { + return $index; + } + } + return 0; + } + } diff --git a/resources/js/humhub.wiki.CategoryListView.js b/resources/js/humhub.wiki.CategoryListView.js index 74417c14..a614a5f9 100644 --- a/resources/js/humhub.wiki.CategoryListView.js +++ b/resources/js/humhub.wiki.CategoryListView.js @@ -259,6 +259,9 @@ humhub.module('wiki.CategoryListView', function(module, require, $) { $item.closest('.category_list_view, .wiki-page-list').sortable('cancel'); } pageTitle.removeClass('wiki-page-dropped'); + if(document.querySelector('.numbered') !== null){ + client.reload(); + } }).catch(function (e) { module.log.error(e, true); $item.closest('.category_list_view, .wiki-page-list').sortable('cancel'); diff --git a/resources/js/humhub.wiki.Page.js b/resources/js/humhub.wiki.Page.js index 9eb19f2a..03cee028 100644 --- a/resources/js/humhub.wiki.Page.js +++ b/resources/js/humhub.wiki.Page.js @@ -134,6 +134,11 @@ humhub.module('wiki.Page', function (module, require, $) { }); $li.append($anchor); $list.append($li); + + // Added numbering to content + if(document.querySelector('.numbered') !== null){ + $(this).prepend('' + numberString + '. '); + } }); if (hasHeadLine) { diff --git a/tests/codeception/functional/NumberingButtonCest.php b/tests/codeception/functional/NumberingButtonCest.php new file mode 100644 index 00000000..d9c9114e --- /dev/null +++ b/tests/codeception/functional/NumberingButtonCest.php @@ -0,0 +1,48 @@ +wantTo('check if the numbering toggles between enabled and disabled'); + $space = $I->loginBySpaceUserGroup(Space::USERGROUP_MEMBER); + $I->amAdmin(true); + $I->enableModule($space->guid, 'wiki'); + $category = $I->createWiki($space, 'Test Wiki Page', 'Test Wiki Page content'); + + $I->amOnSpace($space->guid, '/wiki/container-config', ['id' => $category->id]); + $I->seeElement('input#defaultsettings-wikinumberingenabled'); + $I->checkOption('input#defaultsettings-wikinumberingenabled'); + $I->seeElement('input#defaultsettings-overviewnumberingenabled'); + $I->checkOption('input#defaultsettings-overviewnumberingenabled'); + $I->click('Save', 'button'); + + $I->amOnSpace($space->guid, '/wiki/overview/list-categories'); + $I->seeElement('div.numbered'); + $I->amOnSpace($space->guid, '/wiki/page/view', ['id' => $category->id, 'title'=> $category->title]); + $I->seeElement('div.numbered'); + + $I->amOnSpace($space->guid, '/wiki/container-config', ['id' => $category->id]); + $I->seeElement('input#defaultsettings-wikinumberingenabled'); + $I->uncheckOption('input#defaultsettings-wikinumberingenabled'); + $I->seeElement('input#defaultsettings-overviewnumberingenabled'); + $I->uncheckOption('input#defaultsettings-overviewnumberingenabled'); + $I->click('Save', 'button'); + + $I->amOnSpace($space->guid, '/wiki/overview/list-categories'); + $I->dontSeeElement('div.numbered'); + $I->amOnSpace($space->guid, '/wiki/page/view', ['id' => $category->id, 'title'=> $category->title]); + $I->dontSeeElement('div.numbered'); + + } +} \ No newline at end of file diff --git a/views/common/defaultConfig.php b/views/common/defaultConfig.php index fa37ec99..5dc28bf6 100644 --- a/views/common/defaultConfig.php +++ b/views/common/defaultConfig.php @@ -37,6 +37,10 @@ = $form->field($model, 'hideNavigationEntry')->checkbox() ?> + = $form->field($model, 'wikiNumberingEnabled')->checkbox() ?> + + = $form->field($model, 'overviewNumberingEnabled')->checkbox() ?> + = Button::primary(Yii::t('base', 'Save'))->submit() ?> diff --git a/views/config/index.php b/views/config/index.php index 07a29fe3..4eb6f817 100644 --- a/views/config/index.php +++ b/views/config/index.php @@ -23,6 +23,10 @@ = $form->field($model, 'hideNavigationEntryDefault')->checkbox() ?> + = $form->field($model, 'wikiNumberingEnabledDefault')->checkbox() ?> + + = $form->field($model, 'overviewNumberingEnabledDefault')->checkbox() ?> + = Button::save()->submit() ?> diff --git a/views/overview/list-categories.php b/views/overview/list-categories.php index cfb43355..1c0b37bf 100644 --- a/views/overview/list-categories.php +++ b/views/overview/list-categories.php @@ -29,8 +29,10 @@ } $settings = new DefaultSettings(['contentContainer' => $contentContainer]); +$module = Yii::$app->getModule('wiki'); +$numberingEnabled = $module->settings->space()->get('overviewNumberingEnabled'); ?> -