From cfbae3fd31b68ae0862c918717cedce3cb69054f Mon Sep 17 00:00:00 2001 From: William Jacoby Date: Thu, 15 Oct 2026 01:10:23 -0500 Subject: [PATCH 1/3] Let admins make their own BBCodes wiki-only A list of the board's custom BBCodes under Extensions > Wiki > Settings. A ticked one is read only while a wiki article is saved or previewed, and its button shows only in the wiki editor; posts, private messages and signatures using it get phpBB's "You cannot use certain BBCodes". Kept by BBCode id in the new config value wiki_only_bbcodes, empty by default so nothing changes until an admin ticks one. Co-Authored-By: Claude Opus 5.5 --- README.md | 1 + acp/main_module.php | 17 ++- adm/style/acp_wiki_settings.html | 13 +++ config/services.yml | 8 ++ docs/TODO/todo-wiki-markup.md | 14 ++- event/wikilink_listener.php | 40 ++++++- language/en/acp_wiki.php | 5 + migrations/add_wiki_only_bbcodes.php | 37 +++++++ tests/unit/files_test.php | 3 +- tests/unit/markup_test.php | 6 +- tests/unit/wiki_only_bbcodes_test.php | 132 ++++++++++++++++++++++++ wiki/functions.php | 11 +- wiki/wiki_only_bbcodes.php | 143 ++++++++++++++++++++++++++ 13 files changed, 416 insertions(+), 14 deletions(-) create mode 100644 migrations/add_wiki_only_bbcodes.php create mode 100644 tests/unit/wiki_only_bbcodes_test.php create mode 100644 wiki/wiki_only_bbcodes.php diff --git a/README.md b/README.md index 756045d..9baada0 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ A wiki for phpBB with version history, side-by-side compare, and a moderation qu - Search: `/wiki/search` and a search box on the overview find articles by their title, description and text, with highlighted snippets. It has its own index, kept current as articles are saved, approved, set offline and deleted, and three backends to choose from in the ACP (native, MySQL fulltext, PostgreSQL fulltext). The board's own search can show the matching articles in a block of their own, with an "Also search the Wiki" option. See [Search](#search). - The Wiki link in the board header shows the Wikipedia icon by default. Under **Extensions > Wiki > Settings** in the ACP the icon can be changed to any [Font Awesome](https://fontawesome.com/v4.7.0/icons/) icon name, or left blank for no icon. - A **Start discussion** button on each article creates its discussion topic in a forum chosen under **Extensions > Wiki > Settings** in the ACP, and links the topic to the article. It shows to members who hold the "Can change the discussion topic for an article" permission and may post in that forum, and stays hidden until a forum is chosen. +- BBCodes the admin added under **Posting > BBCodes** can be made wiki-only under **Extensions > Wiki > Settings**: a ticked one works in wiki articles and nowhere else, and its button shows only in the wiki editor. A forum post, private message or signature using it is refused with phpBB's usual "You cannot use certain BBCodes" message. Text saved before keeps its formatting. - Separate permissions for viewing, editing, version history, deleting and moderating. ## Screenshots diff --git a/acp/main_module.php b/acp/main_module.php index ef8e08e..a1ca519 100644 --- a/acp/main_module.php +++ b/acp/main_module.php @@ -11,7 +11,8 @@ namespace phpbbmodders\wiki\acp; /** - * The Wiki settings page: the header link's icon, and which forum "Start discussion" creates topics in. + * The Wiki settings page: the header link's icon, edit conflicts, the feed, which forum "Start discussion" + * creates topics in, and which of the admin's own BBCodes work only in the wiki. */ class main_module { @@ -39,6 +40,7 @@ public function main($id, $mode) } $language->add_lang('acp_wiki', 'phpbbmodders/wiki'); + $wiki_only_bbcodes = $phpbb_container->get('phpbbmodders.wiki.wiki_only_bbcodes'); $this->tpl_name = 'acp_wiki_settings'; $this->page_title = $language->lang('ACP_WIKI_SETTINGS'); @@ -57,6 +59,7 @@ public function main($id, $mode) $auto_watch = $request->variable('wiki_auto_watch', 0) ? 1 : 0; $edit_conflict = $request->variable('wiki_edit_conflict', ''); $lock_minutes = $request->variable('wiki_edit_lock_minutes', 0); + $wiki_only = $request->variable('wiki_only_bbcodes', array(0)); if (!\phpbbmodders\wiki\wiki\edit_lock::valid_mode($edit_conflict)) { @@ -100,6 +103,7 @@ public function main($id, $mode) $config->set('wiki_auto_watch', $auto_watch); $config->set('wiki_edit_conflict', $edit_conflict); $config->set('wiki_edit_lock_minutes', $lock_minutes); + $wiki_only_bbcodes->save($wiki_only); trigger_error($language->lang('CONFIG_UPDATED') . adm_back_link($this->u_action)); } @@ -118,6 +122,17 @@ public function main($id, $mode) $edit_conflict_options .= ''; } + $wiki_only = $wiki_only_bbcodes->ids(); + foreach ($wiki_only_bbcodes->custom_bbcodes() as $row) + { + $template->assign_block_vars('wiki_only_bbcodes', array( + 'ID' => (int) $row['bbcode_id'], + 'TAG' => rtrim($row['bbcode_tag'], '='), + 'HELPLINE' => $language->is_set($row['bbcode_helpline']) ? $language->lang($row['bbcode_helpline']) : $row['bbcode_helpline'], + 'S_CHECKED' => in_array((int) $row['bbcode_id'], $wiki_only, true), + )); + } + $template->assign_vars(array( 'S_WIKI_EDIT_CONFLICT_OPTIONS' => $edit_conflict_options, 'WIKI_EDIT_LOCK_MINUTES' => $edit_lock->minutes(), diff --git a/adm/style/acp_wiki_settings.html b/adm/style/acp_wiki_settings.html index 4846926..7164280 100644 --- a/adm/style/acp_wiki_settings.html +++ b/adm/style/acp_wiki_settings.html @@ -37,6 +37,19 @@

{L_ACP_WIKI_SETTINGS}

+
+ {L_WIKI_ONLY_BBCODES} +

{L_WIKI_ONLY_BBCODES_EXPLAIN}

+ +
+

{wiki_only_bbcodes.HELPLINE}
+
+
+ +

{L_WIKI_ONLY_BBCODES_NONE}

+ +
+
{L_SUBMIT} diff --git a/config/services.yml b/config/services.yml index a57c590..0f7a49f 100644 --- a/config/services.yml +++ b/config/services.yml @@ -318,6 +318,13 @@ services: - '@language' - '%tables.wiki.article%' - '@user' + # The custom BBCodes an admin has made wiki-only + phpbbmodders.wiki.wiki_only_bbcodes: + class: phpbbmodders\wiki\wiki\wiki_only_bbcodes + arguments: + - '@config' + - '@dbal.conn' + - '%tables.bbcodes%' phpbbmodders.wiki.wikilink_listener: class: phpbbmodders\wiki\event\wikilink_listener arguments: @@ -326,6 +333,7 @@ services: - '@phpbbmodders.wiki.links' - '@phpbbmodders.wiki.files' - '@phpbbmodders.wiki.templates' + - '@phpbbmodders.wiki.wiki_only_bbcodes' tags: - { name: event.listener } diff --git a/docs/TODO/todo-wiki-markup.md b/docs/TODO/todo-wiki-markup.md index fcc2916..757afe5 100644 --- a/docs/TODO/todo-wiki-markup.md +++ b/docs/TODO/todo-wiki-markup.md @@ -16,9 +16,9 @@ and `WIKIMAGIC` tags and the `html:` table tags on in `core.text_formatter_s9e_p `php bin/phpbbcli.php reparser:reparse phpbbmodders_wiki_article`. Templates are built too, in their first form: `{{Name}}`, `{{Name|a|b}}`, `{{Name|key=value}}`, `{{{param}}}` and `{{{param|default}}}`, `` and ``, expanded when an article is shown (see `wiki/templates.php`), nested ten deep with a loop check, with the parser functions (`#if`, -`#switch`, `#expr`, `#time`, string functions and others) and categories (`[[Category:Name]]`) on top. What is -left is listed under "Still to do" in "Templates and infoboxes" below, and in "Scope" (making admins' own -BBCodes wiki-only). +`#switch`, `#expr`, `#time`, string functions and others) and categories (`[[Category:Name]]`) on top. Admins can +make their own BBCodes wiki-only too (see "Scope"). What is left is listed under "Still to do" in +"Templates and infoboxes" below. ## Scope: wiki articles only @@ -57,8 +57,12 @@ Limits: Built, in a slightly different form: the wiki-only tags are switched on in `core.text_formatter_s9e_parse_before` only while an article is saved or -previewed (see "Built so far"). The ACP setting for making admins' own BBCodes -wiki-only is not built. +previewed (see "Built so far"). Admins' own BBCodes are ticked under +**Extensions > Wiki > Settings** and kept by id, so renaming one keeps the +choice (see `wiki/wiki_only_bbcodes.php`). Their buttons are left off every +editor but the wiki's, and a forum post that uses one is refused with +phpBB's own "You cannot use certain BBCodes" message rather than shown as +plain text. ## Syntax to add diff --git a/event/wikilink_listener.php b/event/wikilink_listener.php index 3bec75a..6ead3b5 100644 --- a/event/wikilink_listener.php +++ b/event/wikilink_listener.php @@ -58,15 +58,20 @@ class wikilink_listener implements EventSubscriberInterface /** @var \phpbbmodders\wiki\wiki\templates */ protected $templates; + /** @var \phpbbmodders\wiki\wiki\wiki_only_bbcodes */ + protected $wiki_only_bbcodes; + /** * @param \phpbb\controller\helper $helper Controller helper object * @param \phpbb\language\language $language Language object * @param \phpbbmodders\wiki\wiki\links $links Wiki links service * @param \phpbbmodders\wiki\wiki\files $files Wiki files service * @param \phpbbmodders\wiki\wiki\templates $templates Wiki templates service + * @param \phpbbmodders\wiki\wiki\wiki_only_bbcodes $wiki_only_bbcodes The admin's BBCodes kept to the wiki */ - public function __construct(\phpbb\controller\helper $helper, \phpbb\language\language $language, \phpbbmodders\wiki\wiki\links $links, \phpbbmodders\wiki\wiki\files $files, \phpbbmodders\wiki\wiki\templates $templates) + public function __construct(\phpbb\controller\helper $helper, \phpbb\language\language $language, \phpbbmodders\wiki\wiki\links $links, \phpbbmodders\wiki\wiki\files $files, \phpbbmodders\wiki\wiki\templates $templates, \phpbbmodders\wiki\wiki\wiki_only_bbcodes $wiki_only_bbcodes) { + $this->wiki_only_bbcodes = $wiki_only_bbcodes; $this->templates = $templates; $this->files = $files; $this->helper = $helper; @@ -83,6 +88,7 @@ public static function getSubscribedEvents() 'core.text_formatter_s9e_configure_after' => 'configure_wikilink', 'core.text_formatter_s9e_parse_before' => 'toggle_wiki_markup', 'core.text_formatter_s9e_render_after' => 'link_wikilinks', + 'core.display_custom_bbcodes_modify_sql' => 'hide_wiki_only_buttons', ); } @@ -264,8 +270,8 @@ public static function wiki_tags() } /** - * Point rendered wiki links at their articles, and mark the ones whose - * article doesn't exist yet. + * Let the parser read the wiki's own tags, and the BBCodes the admin made wiki-only, only + * while a wiki article is saved. * * @param \phpbb\event\data $event The event object * @return void @@ -274,7 +280,7 @@ public function toggle_wiki_markup($event) { $parser = $event['parser']->get_parser(); - foreach (self::wiki_tags() as $tag) + foreach (array_merge(self::wiki_tags(), $this->wiki_only_bbcodes->tag_names()) as $tag) { if (\phpbbmodders\wiki\wiki\markup::is_active()) { @@ -297,6 +303,32 @@ public function toggle_wiki_markup($event) } } + /** + * Leave the wiki-only BBCodes' buttons off every editor but the wiki's. + * + * @param \phpbb\event\data $event The event object + * @return void + */ + public function hide_wiki_only_buttons($event) + { + $ids = $this->wiki_only_bbcodes->ids(); + if (!$ids || \phpbbmodders\wiki\wiki\markup::is_active()) + { + return; + } + + $sql_ary = $event['sql_ary']; + $sql_ary['WHERE'] = '(' . $sql_ary['WHERE'] . ') AND b.bbcode_id NOT IN (' . implode(', ', $ids) . ')'; + $event['sql_ary'] = $sql_ary; + } + + /** + * Point rendered wiki links at their articles, and mark the ones whose + * article doesn't exist yet. + * + * @param \phpbb\event\data $event The event object + * @return void + */ public function link_wikilinks($event) { $html = $event['html']; diff --git a/language/en/acp_wiki.php b/language/en/acp_wiki.php index f6ade35..6b6d25a 100644 --- a/language/en/acp_wiki.php +++ b/language/en/acp_wiki.php @@ -57,6 +57,11 @@ 'WIKI_EDIT_CONFLICT_INVALID' => 'The choice for when two people edit an article is not one of the choices.', 'WIKI_EDIT_LOCK_MINUTES' => 'Minutes an editor holds an article', 'WIKI_EDIT_LOCK_MINUTES_EXPLAIN' => 'How long the notice names an editor, or the lock lasts, after their last sign of work. It is extended every few minutes while their edit form is open, and when they preview, so it only runs out once they have left.', + + 'WIKI_ONLY_BBCODES' => 'BBCodes only for the wiki', + 'WIKI_ONLY_BBCODES_EXPLAIN' => 'BBCodes you have added under Posting, BBCodes. A ticked one works only in wiki articles: it is turned off in posts, private messages and signatures, and its button shows only in the wiki editor. Text already saved with it stays as it is until it is edited.', + 'WIKI_ONLY_BBCODE' => 'Only in wiki articles', + 'WIKI_ONLY_BBCODES_NONE' => 'This board has no BBCodes of its own yet.', 'WIKI_EDIT_LOCK_MINUTES_INVALID' => 'Minutes an editor holds an article must be a number from %1$d to %2$d.', 'ACP_WIKI_STARTER_TEMPLATES_EXPLAIN' => 'Starter templates are ready-made templates for the wiki, adapted from Wikipedia and other wikis, from the phpbbmodders/wiki-templates repository. They are shared under the CC BY-SA 4.0 licence; each one says where it comes from at the top of its page. Get the templates first, then choose which to install. Nothing is installed until you press Install.', diff --git a/migrations/add_wiki_only_bbcodes.php b/migrations/add_wiki_only_bbcodes.php new file mode 100644 index 0000000..2ce4033 --- /dev/null +++ b/migrations/add_wiki_only_bbcodes.php @@ -0,0 +1,37 @@ +config['wiki_only_bbcodes']); + } + + public static function depends_on() + { + return array( + '\phpbbmodders\wiki\migrations\add_category_members', + ); + } + + public function update_data() + { + return array( + array('config.add', array('wiki_only_bbcodes', '')), + ); + } +} diff --git a/tests/unit/files_test.php b/tests/unit/files_test.php index a3a95d3..d13bf46 100644 --- a/tests/unit/files_test.php +++ b/tests/unit/files_test.php @@ -69,7 +69,8 @@ private function parse(string $text): string $this->createMock(\phpbb\language\language::class), $this->createMock(\phpbbmodders\wiki\wiki\links::class), $this->createMock(files::class), - $this->createMock(\phpbbmodders\wiki\wiki\templates::class) + $this->createMock(\phpbbmodders\wiki\wiki\templates::class), + $this->createMock(\phpbbmodders\wiki\wiki\wiki_only_bbcodes::class) ); $configurator = new \s9e\TextFormatter\Configurator; diff --git a/tests/unit/markup_test.php b/tests/unit/markup_test.php index 5034651..cb740dd 100644 --- a/tests/unit/markup_test.php +++ b/tests/unit/markup_test.php @@ -142,7 +142,8 @@ private function parse(string $text, bool $wiki_markup = true): string $this->createMock(\phpbb\language\language::class), $this->createMock(\phpbbmodders\wiki\wiki\links::class), $this->createMock(\phpbbmodders\wiki\wiki\files::class), - $this->createMock(\phpbbmodders\wiki\wiki\templates::class) + $this->createMock(\phpbbmodders\wiki\wiki\templates::class), + $this->createMock(\phpbbmodders\wiki\wiki\wiki_only_bbcodes::class) ); $configurator = new \s9e\TextFormatter\Configurator; @@ -406,7 +407,8 @@ private function render(string $text): string $this->createMock(\phpbb\language\language::class), $this->createMock(\phpbbmodders\wiki\wiki\links::class), $this->createMock(\phpbbmodders\wiki\wiki\files::class), - $this->createMock(\phpbbmodders\wiki\wiki\templates::class) + $this->createMock(\phpbbmodders\wiki\wiki\templates::class), + $this->createMock(\phpbbmodders\wiki\wiki\wiki_only_bbcodes::class) ); $configurator = new \s9e\TextFormatter\Configurator; diff --git a/tests/unit/wiki_only_bbcodes_test.php b/tests/unit/wiki_only_bbcodes_test.php new file mode 100644 index 0000000..dde81f2 --- /dev/null +++ b/tests/unit/wiki_only_bbcodes_test.php @@ -0,0 +1,132 @@ +assertSame(array(13, 15), wiki_only_bbcodes::parse_ids('13,15')); + $this->assertSame(array(13, 15), wiki_only_bbcodes::parse_ids(' 13 , 15,13,0,-2,x')); + $this->assertSame(array(), wiki_only_bbcodes::parse_ids('')); + } + + public function test_tag_names_match_the_parser() + { + $this->assertSame('YOUTUBE', wiki_only_bbcodes::tag_name('youtube')); + $this->assertSame('FONT', wiki_only_bbcodes::tag_name('font=')); + } + + public function test_save_keeps_only_custom_bbcodes() + { + $config = new \phpbb\config\config(array('wiki_only_bbcodes' => '')); + $bbcodes = new class($config, $this->createMock(\phpbb\db\driver\driver_interface::class), 'phpbb_bbcodes') extends wiki_only_bbcodes { + public function custom_bbcodes() + { + return array( + array('bbcode_id' => '13', 'bbcode_tag' => 'youtube', 'bbcode_helpline' => ''), + array('bbcode_id' => '15', 'bbcode_tag' => 'font=', 'bbcode_helpline' => ''), + ); + } + }; + + $bbcodes->save(array(15, 99, 13, 15)); + $this->assertSame('13,15', $config['wiki_only_bbcodes']); + $this->assertSame(array(13, 15), $bbcodes->ids()); + + $bbcodes->save(array()); + $this->assertSame('', $config['wiki_only_bbcodes']); + $this->assertSame(array(), $bbcodes->tag_names(), 'no query when nothing is wiki-only'); + } + + public function test_a_wiki_only_bbcode_is_read_only_in_wiki_articles() + { + $bbcodes = $this->createMock(wiki_only_bbcodes::class); + $bbcodes->method('tag_names')->willReturn(array('YOUTUBE')); + $listener = new \phpbbmodders\wiki\event\wikilink_listener( + $this->createMock(\phpbb\controller\helper::class), + $this->createMock(\phpbb\language\language::class), + $this->createMock(\phpbbmodders\wiki\wiki\links::class), + $this->createMock(\phpbbmodders\wiki\wiki\files::class), + $this->createMock(\phpbbmodders\wiki\wiki\templates::class), + $bbcodes + ); + + $configurator = new \s9e\TextFormatter\Configurator; + $configurator->BBCodes->addCustom('[youtube]{URL}[/youtube]', '{URL}'); + $configurator->BBCodes->addCustom('[note]{TEXT}[/note]', '{TEXT}'); + $listener->configure_wikilink(array('configurator' => $configurator)); + extract($configurator->finalize()); + $wrapper = new class($parser) { + private $parser; + public function __construct($parser) + { + $this->parser = $parser; + } + public function get_parser() + { + return $this->parser; + } + }; + $text = '[youtube]https://example.com/v[/youtube] [note]n[/note]'; + + $listener->toggle_wiki_markup(array('parser' => $wrapper)); + $xml = $parser->parse($text); + $this->assertStringNotContainsString('assertStringContainsString('toggle_wiki_markup(array('parser' => $wrapper)); + $this->assertStringContainsString('parse($text), 'on in a wiki article'); + } + finally + { + \phpbbmodders\wiki\wiki\markup::set_active(false); + } + } + + public function test_wiki_only_buttons_are_left_out_of_other_editors() + { + $bbcodes = $this->createMock(wiki_only_bbcodes::class); + $bbcodes->method('ids')->willReturn(array(13, 15)); + $listener = new \phpbbmodders\wiki\event\wikilink_listener( + $this->createMock(\phpbb\controller\helper::class), + $this->createMock(\phpbb\language\language::class), + $this->createMock(\phpbbmodders\wiki\wiki\links::class), + $this->createMock(\phpbbmodders\wiki\wiki\files::class), + $this->createMock(\phpbbmodders\wiki\wiki\templates::class), + $bbcodes + ); + + $event = new \phpbb\event\data(array('sql_ary' => array('WHERE' => 'b.display_on_posting = 1'))); + $listener->hide_wiki_only_buttons($event); + $this->assertSame('(b.display_on_posting = 1) AND b.bbcode_id NOT IN (13, 15)', $event['sql_ary']['WHERE']); + + \phpbbmodders\wiki\wiki\markup::set_active(true); + try + { + $event = new \phpbb\event\data(array('sql_ary' => array('WHERE' => 'b.display_on_posting = 1'))); + $listener->hide_wiki_only_buttons($event); + $this->assertSame('b.display_on_posting = 1', $event['sql_ary']['WHERE'], 'the wiki editor keeps them'); + } + finally + { + \phpbbmodders\wiki\wiki\markup::set_active(false); + } + } +} diff --git a/wiki/functions.php b/wiki/functions.php index 35efcaf..88a2634 100644 --- a/wiki/functions.php +++ b/wiki/functions.php @@ -147,7 +147,16 @@ protected function set_active_version($id) protected function display_edit_form($preview = false) { generate_smilies('inline', 0); - display_custom_bbcodes(); + // With wiki markup on, the BBCodes the admin made wiki-only keep their buttons here + \phpbbmodders\wiki\wiki\markup::set_active(true); + try + { + display_custom_bbcodes(); + } + finally + { + \phpbbmodders\wiki\wiki\markup::set_active(false); + } add_form_key('article'); $this->template->assign_vars(array( diff --git a/wiki/wiki_only_bbcodes.php b/wiki/wiki_only_bbcodes.php new file mode 100644 index 0000000..d406b01 --- /dev/null +++ b/wiki/wiki_only_bbcodes.php @@ -0,0 +1,143 @@ +config = $config; + $this->db = $db; + $this->bbcodes_table = $bbcodes_table; + } + + /** + * @return int[] The ids of the wiki-only BBCodes + */ + public function ids() + { + $value = isset($this->config[self::CONFIG]) ? (string) $this->config[self::CONFIG] : ''; + + return self::parse_ids($value); + } + + /** + * @param string $value A comma-separated list + * @return int[] The positive ids in it, each once + */ + public static function parse_ids($value) + { + $ids = array_filter(array_map('intval', explode(',', $value)), function ($id) { + return $id > 0; + }); + + return array_values(array_unique($ids)); + } + + /** + * Keep a new choice, leaving out ids that are not custom BBCodes. + * + * @param int[] $ids + * @return void + */ + public function save(array $ids) + { + $ids = self::parse_ids(implode(',', $ids)); + $known = array_column($this->custom_bbcodes(), 'bbcode_id'); + $ids = array_values(array_intersect($ids, array_map('intval', $known))); + sort($ids); + + $this->config->set(self::CONFIG, implode(',', $ids)); + $this->tags = null; + } + + /** + * @return array The board's custom BBCodes (bbcode_id, bbcode_tag, bbcode_helpline), by tag + */ + public function custom_bbcodes() + { + $sql = 'SELECT bbcode_id, bbcode_tag, bbcode_helpline + FROM ' . $this->bbcodes_table . ' + ORDER BY bbcode_tag'; + $result = $this->db->sql_query($sql); + $rows = $this->db->sql_fetchrowset($result); + $this->db->sql_freeresult($result); + + return $rows; + } + + /** + * The parser's names for the wiki-only BBCodes. phpBB clears this query's cache whenever + * a BBCode is added, changed or deleted in the ACP. + * + * @return string[] + */ + public function tag_names() + { + if ($this->tags !== null) + { + return $this->tags; + } + + $this->tags = array(); + $ids = $this->ids(); + if (!$ids) + { + return $this->tags; + } + + $sql = 'SELECT bbcode_tag + FROM ' . $this->bbcodes_table . ' + WHERE ' . $this->db->sql_in_set('bbcode_id', $ids); + $result = $this->db->sql_query($sql, 3600); + while ($row = $this->db->sql_fetchrow($result)) + { + $this->tags[] = self::tag_name($row['bbcode_tag']); + } + $this->db->sql_freeresult($result); + + return $this->tags; + } + + /** + * @param string $bbcode_tag As phpBB stores it, "color=" for [color=...] + * @return string The tag's name in the parser + */ + public static function tag_name($bbcode_tag) + { + return strtoupper(rtrim($bbcode_tag, '=')); + } +} From 3e2350a497e8caf8c40df739c607178badc54a32 Mon Sep 17 00:00:00 2001 From: William Jacoby Date: Thu, 15 Oct 2026 01:18:39 -0500 Subject: [PATCH 2/3] Give the wiki-only BBCodes a page of their own Extensions > Wiki > BBCodes, for admins who may manage BBCodes, instead of a section of the Settings page, with plainer wording and a link to phpBB's Posting > BBCodes page. Co-Authored-By: Claude Opus 5.5 --- README.md | 2 +- acp/bbcodes_info.php | 32 ++++++++++++ acp/bbcodes_module.php | 78 ++++++++++++++++++++++++++++ acp/main_module.php | 17 +----- adm/style/acp_wiki_bbcodes.html | 29 +++++++++++ adm/style/acp_wiki_settings.html | 13 ----- docs/TODO/todo-wiki-markup.md | 2 +- language/en/acp_wiki.php | 4 +- language/en/info_acp_wiki.php | 1 + migrations/add_wiki_only_bbcodes.php | 18 ++++--- 10 files changed, 156 insertions(+), 40 deletions(-) create mode 100644 acp/bbcodes_info.php create mode 100644 acp/bbcodes_module.php create mode 100644 adm/style/acp_wiki_bbcodes.html diff --git a/README.md b/README.md index 9baada0..75491e2 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ A wiki for phpBB with version history, side-by-side compare, and a moderation qu - Search: `/wiki/search` and a search box on the overview find articles by their title, description and text, with highlighted snippets. It has its own index, kept current as articles are saved, approved, set offline and deleted, and three backends to choose from in the ACP (native, MySQL fulltext, PostgreSQL fulltext). The board's own search can show the matching articles in a block of their own, with an "Also search the Wiki" option. See [Search](#search). - The Wiki link in the board header shows the Wikipedia icon by default. Under **Extensions > Wiki > Settings** in the ACP the icon can be changed to any [Font Awesome](https://fontawesome.com/v4.7.0/icons/) icon name, or left blank for no icon. - A **Start discussion** button on each article creates its discussion topic in a forum chosen under **Extensions > Wiki > Settings** in the ACP, and links the topic to the article. It shows to members who hold the "Can change the discussion topic for an article" permission and may post in that forum, and stays hidden until a forum is chosen. -- BBCodes the admin added under **Posting > BBCodes** can be made wiki-only under **Extensions > Wiki > Settings**: a ticked one works in wiki articles and nowhere else, and its button shows only in the wiki editor. A forum post, private message or signature using it is refused with phpBB's usual "You cannot use certain BBCodes" message. Text saved before keeps its formatting. +- Custom BBCodes (the ones added on the ACP's **Posting > BBCodes** page) can be made wiki-only under **Extensions > Wiki > BBCodes**: a ticked one works in wiki articles and nowhere else, and its button shows only in the wiki editor. A forum post, private message or signature using it is refused with phpBB's usual "You cannot use certain BBCodes" message. Text saved before keeps its formatting. - Separate permissions for viewing, editing, version history, deleting and moderating. ## Screenshots diff --git a/acp/bbcodes_info.php b/acp/bbcodes_info.php new file mode 100644 index 0000000..c6c3af8 --- /dev/null +++ b/acp/bbcodes_info.php @@ -0,0 +1,32 @@ + '\phpbbmodders\wiki\acp\bbcodes_module', + 'title' => 'ACP_WIKI_BBCODES', + 'modes' => array( + 'settings' => array( + 'title' => 'ACP_WIKI_BBCODES', + 'auth' => 'ext_phpbbmodders/wiki && acl_a_bbcode', + 'cat' => array('ACP_WIKI_TITLE'), + ), + ), + ); + } +} diff --git a/acp/bbcodes_module.php b/acp/bbcodes_module.php new file mode 100644 index 0000000..f2bcb80 --- /dev/null +++ b/acp/bbcodes_module.php @@ -0,0 +1,78 @@ +get('language'); + $request = $phpbb_container->get('request'); + $template = $phpbb_container->get('template'); + $wiki_only_bbcodes = $phpbb_container->get('phpbbmodders.wiki.wiki_only_bbcodes'); + + if (!function_exists('adm_back_link')) + { + include($phpbb_root_path . 'includes/functions_admin.' . $phpEx); + } + + $language->add_lang('acp_wiki', 'phpbbmodders/wiki'); + + $this->tpl_name = 'acp_wiki_bbcodes'; + $this->page_title = $language->lang('ACP_WIKI_BBCODES'); + add_form_key('phpbbmodders_wiki_bbcodes'); + + if ($request->is_set_post('submit')) + { + if (!check_form_key('phpbbmodders_wiki_bbcodes')) + { + trigger_error($language->lang('FORM_INVALID') . adm_back_link($this->u_action), E_USER_WARNING); + } + + $wiki_only_bbcodes->save($request->variable('wiki_only_bbcodes', array(0))); + + trigger_error($language->lang('CONFIG_UPDATED') . adm_back_link($this->u_action)); + } + + $wiki_only = $wiki_only_bbcodes->ids(); + foreach ($wiki_only_bbcodes->custom_bbcodes() as $row) + { + $template->assign_block_vars('wiki_only_bbcodes', array( + 'ID' => (int) $row['bbcode_id'], + 'TAG' => rtrim($row['bbcode_tag'], '='), + 'HELPLINE' => $language->is_set($row['bbcode_helpline']) ? $language->lang($row['bbcode_helpline']) : $row['bbcode_helpline'], + 'S_CHECKED' => in_array((int) $row['bbcode_id'], $wiki_only, true), + )); + } + + // The explanations link to phpBB's own BBCodes page + $u_bbcodes = append_sid("{$phpbb_admin_path}index.$phpEx", 'i=acp_bbcodes&mode=bbcodes'); + $template->assign_vars(array( + 'WIKI_ONLY_BBCODES_EXPLAIN' => $language->lang('WIKI_ONLY_BBCODES_EXPLAIN', $u_bbcodes), + 'WIKI_ONLY_BBCODES_NONE' => $language->lang('WIKI_ONLY_BBCODES_NONE', $u_bbcodes), + 'U_ACTION' => $this->u_action, + )); + } +} diff --git a/acp/main_module.php b/acp/main_module.php index a1ca519..ef8e08e 100644 --- a/acp/main_module.php +++ b/acp/main_module.php @@ -11,8 +11,7 @@ namespace phpbbmodders\wiki\acp; /** - * The Wiki settings page: the header link's icon, edit conflicts, the feed, which forum "Start discussion" - * creates topics in, and which of the admin's own BBCodes work only in the wiki. + * The Wiki settings page: the header link's icon, and which forum "Start discussion" creates topics in. */ class main_module { @@ -40,7 +39,6 @@ public function main($id, $mode) } $language->add_lang('acp_wiki', 'phpbbmodders/wiki'); - $wiki_only_bbcodes = $phpbb_container->get('phpbbmodders.wiki.wiki_only_bbcodes'); $this->tpl_name = 'acp_wiki_settings'; $this->page_title = $language->lang('ACP_WIKI_SETTINGS'); @@ -59,7 +57,6 @@ public function main($id, $mode) $auto_watch = $request->variable('wiki_auto_watch', 0) ? 1 : 0; $edit_conflict = $request->variable('wiki_edit_conflict', ''); $lock_minutes = $request->variable('wiki_edit_lock_minutes', 0); - $wiki_only = $request->variable('wiki_only_bbcodes', array(0)); if (!\phpbbmodders\wiki\wiki\edit_lock::valid_mode($edit_conflict)) { @@ -103,7 +100,6 @@ public function main($id, $mode) $config->set('wiki_auto_watch', $auto_watch); $config->set('wiki_edit_conflict', $edit_conflict); $config->set('wiki_edit_lock_minutes', $lock_minutes); - $wiki_only_bbcodes->save($wiki_only); trigger_error($language->lang('CONFIG_UPDATED') . adm_back_link($this->u_action)); } @@ -122,17 +118,6 @@ public function main($id, $mode) $edit_conflict_options .= ''; } - $wiki_only = $wiki_only_bbcodes->ids(); - foreach ($wiki_only_bbcodes->custom_bbcodes() as $row) - { - $template->assign_block_vars('wiki_only_bbcodes', array( - 'ID' => (int) $row['bbcode_id'], - 'TAG' => rtrim($row['bbcode_tag'], '='), - 'HELPLINE' => $language->is_set($row['bbcode_helpline']) ? $language->lang($row['bbcode_helpline']) : $row['bbcode_helpline'], - 'S_CHECKED' => in_array((int) $row['bbcode_id'], $wiki_only, true), - )); - } - $template->assign_vars(array( 'S_WIKI_EDIT_CONFLICT_OPTIONS' => $edit_conflict_options, 'WIKI_EDIT_LOCK_MINUTES' => $edit_lock->minutes(), diff --git a/adm/style/acp_wiki_bbcodes.html b/adm/style/acp_wiki_bbcodes.html new file mode 100644 index 0000000..aa33783 --- /dev/null +++ b/adm/style/acp_wiki_bbcodes.html @@ -0,0 +1,29 @@ + + + +

{L_ACP_WIKI_BBCODES}

+ +

{WIKI_ONLY_BBCODES_EXPLAIN}

+ +
+
+ {L_WIKI_ONLY_BBCODES} + +
+

{wiki_only_bbcodes.HELPLINE}
+
+
+ +

{WIKI_ONLY_BBCODES_NONE}

+ +
+ +
+ {L_SUBMIT} + + + {S_FORM_TOKEN} +
+
+ + diff --git a/adm/style/acp_wiki_settings.html b/adm/style/acp_wiki_settings.html index 7164280..4846926 100644 --- a/adm/style/acp_wiki_settings.html +++ b/adm/style/acp_wiki_settings.html @@ -37,19 +37,6 @@

{L_ACP_WIKI_SETTINGS}

-
- {L_WIKI_ONLY_BBCODES} -

{L_WIKI_ONLY_BBCODES_EXPLAIN}

- -
-

{wiki_only_bbcodes.HELPLINE}
-
-
- -

{L_WIKI_ONLY_BBCODES_NONE}

- -
-
{L_SUBMIT} diff --git a/docs/TODO/todo-wiki-markup.md b/docs/TODO/todo-wiki-markup.md index 757afe5..27b19bb 100644 --- a/docs/TODO/todo-wiki-markup.md +++ b/docs/TODO/todo-wiki-markup.md @@ -58,7 +58,7 @@ Limits: Built, in a slightly different form: the wiki-only tags are switched on in `core.text_formatter_s9e_parse_before` only while an article is saved or previewed (see "Built so far"). Admins' own BBCodes are ticked under -**Extensions > Wiki > Settings** and kept by id, so renaming one keeps the +**Extensions > Wiki > BBCodes** and kept by id, so renaming one keeps the choice (see `wiki/wiki_only_bbcodes.php`). Their buttons are left off every editor but the wiki's, and a forum post that uses one is refused with phpBB's own "You cannot use certain BBCodes" message rather than shown as diff --git a/language/en/acp_wiki.php b/language/en/acp_wiki.php index 6b6d25a..4b929fa 100644 --- a/language/en/acp_wiki.php +++ b/language/en/acp_wiki.php @@ -59,9 +59,9 @@ 'WIKI_EDIT_LOCK_MINUTES_EXPLAIN' => 'How long the notice names an editor, or the lock lasts, after their last sign of work. It is extended every few minutes while their edit form is open, and when they preview, so it only runs out once they have left.', 'WIKI_ONLY_BBCODES' => 'BBCodes only for the wiki', - 'WIKI_ONLY_BBCODES_EXPLAIN' => 'BBCodes you have added under Posting, BBCodes. A ticked one works only in wiki articles: it is turned off in posts, private messages and signatures, and its button shows only in the wiki editor. Text already saved with it stays as it is until it is edited.', + 'WIKI_ONLY_BBCODES_EXPLAIN' => 'Tick a custom BBCode to use it only in wiki articles. It then stops working in posts, private messages and signatures, and its button shows only in the wiki editor. Text saved before you tick it keeps its formatting until it is edited. Custom BBCodes are the ones added on the Posting » BBCodes page of the ACP.', 'WIKI_ONLY_BBCODE' => 'Only in wiki articles', - 'WIKI_ONLY_BBCODES_NONE' => 'This board has no BBCodes of its own yet.', + 'WIKI_ONLY_BBCODES_NONE' => 'This board has no custom BBCodes yet. Add them on the Posting » BBCodes page of the ACP.', 'WIKI_EDIT_LOCK_MINUTES_INVALID' => 'Minutes an editor holds an article must be a number from %1$d to %2$d.', 'ACP_WIKI_STARTER_TEMPLATES_EXPLAIN' => 'Starter templates are ready-made templates for the wiki, adapted from Wikipedia and other wikis, from the phpbbmodders/wiki-templates repository. They are shared under the CC BY-SA 4.0 licence; each one says where it comes from at the top of its page. Get the templates first, then choose which to install. Nothing is installed until you press Install.', diff --git a/language/en/info_acp_wiki.php b/language/en/info_acp_wiki.php index 0b2eb6a..a8f3e1a 100644 --- a/language/en/info_acp_wiki.php +++ b/language/en/info_acp_wiki.php @@ -23,6 +23,7 @@ 'ACP_WIKI_SETTINGS' => 'Settings', 'ACP_WIKI_SEARCH' => 'Search', 'ACP_WIKI_STARTER_TEMPLATES' => 'Starter templates', + 'ACP_WIKI_BBCODES' => 'BBCodes', 'LOG_WIKI_STARTER_CHECK_FAILED' => 'Could not check the wiki starter templates repository for new templates
» GitHub could not be reached, or did not answer as expected.', 'LOG_WIKI_STARTER_INSTALLED' => 'Installed wiki starter templates
» %s', )); diff --git a/migrations/add_wiki_only_bbcodes.php b/migrations/add_wiki_only_bbcodes.php index 2ce4033..3af4120 100644 --- a/migrations/add_wiki_only_bbcodes.php +++ b/migrations/add_wiki_only_bbcodes.php @@ -11,16 +11,11 @@ namespace phpbbmodders\wiki\migrations; /** - * The custom BBCodes an admin has made wiki-only (see wiki\wiki_only_bbcodes). None to start - * with, so every BBCode keeps working where it did. + * The custom BBCodes an admin has made wiki-only (see wiki\wiki_only_bbcodes), and the ACP page + * choosing them. None to start with, so every BBCode keeps working where it did. */ class add_wiki_only_bbcodes extends \phpbb\db\migration\migration { - public function effectively_installed() - { - return isset($this->config['wiki_only_bbcodes']); - } - public static function depends_on() { return array( @@ -32,6 +27,15 @@ public function update_data() { return array( array('config.add', array('wiki_only_bbcodes', '')), + + array('module.add', array( + 'acp', + 'ACP_WIKI_TITLE', + array( + 'module_basename' => '\phpbbmodders\wiki\acp\bbcodes_module', + 'modes' => array('settings'), + ), + )), ); } } From 321bc0a7f53e0d59923f150859f501b8eafd45a1 Mon Sep 17 00:00:00 2001 From: William Jacoby Date: Thu, 15 Oct 2026 01:23:22 -0500 Subject: [PATCH 3/3] Screenshot the wiki BBCodes page Co-Authored-By: Claude Opus 5.5 --- docs/images/wiki-acp-bbcodes.png | Bin 0 -> 81787 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/wiki-acp-bbcodes.png diff --git a/docs/images/wiki-acp-bbcodes.png b/docs/images/wiki-acp-bbcodes.png new file mode 100644 index 0000000000000000000000000000000000000000..ef631998e21d4a3506e90b96c2e8152e43547266 GIT binary patch literal 81787 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 D7PcO< literal 0 HcmV?d00001