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 @@ field($model, 'hideNavigationEntry')->checkbox() ?> + field($model, 'wikiNumberingEnabled')->checkbox() ?> + + field($model, 'overviewNumberingEnabled')->checkbox() ?> + 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 @@ field($model, 'hideNavigationEntryDefault')->checkbox() ?> + field($model, 'wikiNumberingEnabledDefault')->checkbox() ?> + + field($model, 'overviewNumberingEnabledDefault')->checkbox() ?> + 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'); ?> -
+
'wiki-page-content']) ?> diff --git a/views/page/_view_body.php b/views/page/_view_body.php index 055c5106..d02f10bb 100644 --- a/views/page/_view_body.php +++ b/views/page/_view_body.php @@ -11,6 +11,7 @@ use humhub\modules\wiki\assets\Assets; use humhub\modules\wiki\models\WikiPage; use humhub\modules\wiki\models\WikiPageRevision; +use humhub\modules\wiki\helpers\Url; /* @var $this View */ /* @var $page WikiPage */ @@ -19,10 +20,13 @@ /* @var $canEdit bool */ Assets::register($this); +$module = Yii::$app->getModule('wiki'); +$numberingEnabled = $module->settings->space()->get('wikiNumberingEnabled'); ?> render('_view_header', ['page' => $page, 'revision' => $revision, 'displayTitle' => false]) ?> -
+ +
render('_view_content', ['page' => $page, 'canEdit' => $canEdit, 'content' => $content]) ?>
@@ -35,4 +39,4 @@ ]) ?>
- $page]) ?> \ No newline at end of file + $page]) ?> diff --git a/views/page/_view_content.php b/views/page/_view_content.php index 9e9277aa..db4b704d 100644 --- a/views/page/_view_content.php +++ b/views/page/_view_content.php @@ -6,11 +6,14 @@ use humhub\modules\wiki\widgets\WikiRichText; use humhub\widgets\Button; use humhub\modules\wiki\helpers\Url; +use Yii; /* @var $this \humhub\modules\ui\view\components\View */ /* @var $page \humhub\modules\wiki\models\WikiPage */ /* @var $canEdit bool */ /* @var $content string */ +$module = Yii::$app->getModule('wiki'); +$numberingEnabled = $module->settings->space()->get('wikiNumberingEnabled'); ?>
content->getTags(Topic::class)->all() as $topic) : ?> @@ -18,7 +21,7 @@
-

title) ?>

+

getNumbering().'.'.$page->title : $page->title) ?>

render('_view_category_index', ['page' => $page]) ?> diff --git a/widgets/PageListItemTitle.php b/widgets/PageListItemTitle.php index fa8ead57..66e7c73b 100644 --- a/widgets/PageListItemTitle.php +++ b/widgets/PageListItemTitle.php @@ -66,6 +66,8 @@ class PageListItemTitle extends Widget */ public $maxLevel; + public $numberingString; + /** * @inheritdoc */ @@ -81,6 +83,7 @@ public function run() } else { $icon = $this->iconPage; } + $this->numberingString = $this->page->getNumbering(); } if ($this->titleInfo === null && @@ -90,9 +93,12 @@ public function run() $this->titleInfo = Yii::t('WikiModule.base', '({n,plural,=1{+1 subpage}other{+{count} subpages}})', ['n' => $this->page->childrenCount, 'count' => $this->page->childrenCount]); } + $module = Yii::$app->getModule('wiki'); + $numberingEnabled = $module->settings->space()->get('overviewNumberingEnabled'); + return $this->render('pageListItemTitle', [ 'page' => $this->page, - 'title' => $this->title, + 'title' => $numberingEnabled ? ($this->numberingString . ' ' . $this->title) : $this->title, 'titleIcon' => $this->getVisibilityIcon(), 'titleInfo' => $this->titleInfo, 'url' => $this->page ? $this->page->getUrl() : null, diff --git a/widgets/views/wikiPath.php b/widgets/views/wikiPath.php index 27aecdf4..79df2172 100644 --- a/widgets/views/wikiPath.php +++ b/widgets/views/wikiPath.php @@ -9,11 +9,14 @@ use humhub\modules\wiki\helpers\Url; use humhub\modules\wiki\models\WikiPage; use humhub\widgets\Link; +use Yii; /* @var $page WikiPage */ /* @var $path WikiPage[]|string[] */ $pathLength = count($path); +$module = Yii::$app->getModule('wiki'); +$numberingEnabled = $module->settings->space()->get('wikiNumberingEnabled'); ?>
content->container))->icon('home')->id('wiki_index') ?> @@ -30,8 +33,8 @@ / title - : Helpers::truncateText($categoryPage->title, 25), + ? $numberingEnabled? $categoryPage->getNumbering().'.'.$categoryPage->title : $categoryPage->title + : Helpers::truncateText($numberingEnabled? $categoryPage->getNumbering().'.'.$categoryPage->title : $categoryPage->title, 25), Url::toWiki($categoryPage)) : '' . $categoryPage . '' ?>