Skip to content

Commit

Permalink
Add textformatter events and code
Browse files Browse the repository at this point in the history
  • Loading branch information
iMattPro committed Nov 26, 2015
1 parent fb641b5 commit 6f5e59c
Show file tree
Hide file tree
Showing 6 changed files with 125 additions and 0 deletions.
23 changes: 23 additions & 0 deletions core/acp_manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,29 @@ public function get_bbcode_group_data($bbcode_id)
return explode(',', $row['bbcode_group']);
}

/**
* Get the bbcode_group data from the database,
* for every BBCode that has groups assigned
*
* @return array Custom BBCode user group ids for each BBCode, by name
* @access public
*/
public function get_bbcode_groups_data()
{
$sql = 'SELECT bbcode_tag, bbcode_group
FROM ' . BBCODES_TABLE . "
WHERE bbcode_group > ''";
$result = $this->db->sql_query($sql);
$groups = array();
while ($row = $this->db->sql_fetchrow($result))
{
$groups[$row['bbcode_tag']] = $row['bbcode_group'];
}
$this->db->sql_freeresult($result);

return $groups;
}

/**
* Generate a select box containing user groups
*
Expand Down
20 changes: 20 additions & 0 deletions event/acp_listener.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ static public function getSubscribedEvents()
'core.acp_bbcodes_display_bbcodes' => 'acp_bbcodes_custom_sorting_buttons',
'core.acp_bbcodes_modify_create' => 'acp_bbcodes_modify_create',
'core.acp_bbcodes_edit_add' => 'acp_bbcodes_group_select_box',

// text_formatter events (for phpBB 3.2.x)
'core.text_formatter_s9e_configure_after' => 's9e_store_bbcode_groups',
);
}

Expand Down Expand Up @@ -150,4 +153,21 @@ public function acp_bbcodes_modify_create($event)
$hidden_fields['bbcode_group'] = $bbcode_group;
$event['hidden_fields'] = $hidden_fields;
}

/**
* Store BBCode groups in a s9e\TextFormatter variable
*
* @param object $event The event object
* @return null
* @access public
*/
public function s9e_store_bbcode_groups($event)
{
$configurator = $event['configurator'];
$bbcode_groups = $this->acp_manager->get_bbcode_groups_data();

// Save BBCode groups in a registered variable in the configurator. That variable will be
// copied in the parser's configuration and be available during parser setup.
$configurator->registeredVars['abbc3.bbcode_groups'] = $bbcode_groups;
}
}
25 changes: 25 additions & 0 deletions event/listener.php
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ static public function getSubscribedEvents()
// message_parser events
'core.modify_format_display_text_after' => 'parse_bbcodes_after',
'core.modify_bbcode_init' => 'allow_custom_bbcodes',

// text_formatter events (for phpBB 3.2.x)
'core.text_formatter_s9e_parser_setup' => 's9e_allow_custom_bbcodes',
);
}

Expand Down Expand Up @@ -191,4 +194,26 @@ public function allow_custom_bbcodes($event)
{
$event['bbcodes'] = $this->bbcodes_display->allow_custom_bbcodes($event['bbcodes'], $event['rowset']);
}

/**
* Toggle custom BBCodes in the s9e\TextFormatter parser based on user's group memberships
*
* @param object $event The event object
* @return null
* @access public
*/
public function s9e_allow_custom_bbcodes($event)
{
/** @var $service \phpbb\textformatter\s9e\parser object from the text_formatter.parser service */
$service = $event['parser'];
$parser = $service->get_parser();
foreach ($parser->registeredVars['abbc3.bbcode_groups'] as $bbcode_name => $groups)
{
if (!$this->bbcodes_display->user_in_bbcode_group($groups))
{
$bbcode_name = rtrim($bbcode_name, '=');
$service->disable_bbcode($bbcode_name);
}
}
}
}
1 change: 1 addition & 0 deletions tests/event/acp_listener_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public function test_getSubscribedEvents()
'core.acp_bbcodes_display_bbcodes',
'core.acp_bbcodes_modify_create',
'core.acp_bbcodes_edit_add',
'core.text_formatter_s9e_configure_after',
), array_keys(\vse\abbc3\event\acp_listener::getSubscribedEvents()));
}
}
55 changes: 55 additions & 0 deletions tests/event/event_custom_bbcodes_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,59 @@ public function test_allow_custom_bbcodes($bbcodes, $rowset)

$this->assertEquals($bbcodes, $result['bbcodes']);
}

/**
* Data set for test_s9e_allow_custom_bbcodes
*
* @return array
*/
public function s9e_allow_custom_bbcodes_data()
{
return array(
array('FOO', '4,5', true), // data for a disabled bbcode
array('BAR', '', false), // data for an allowed bbcode
);
}

/**
* Test the s9e_allow_custom_bbcodes event is calling disable_bbcode()
* on registered bbcodes for users not in a group allowed to use it.
*
* @dataProvider s9e_allow_custom_bbcodes_data
*/
public function test_s9e_allow_custom_bbcodes($bbcode, $groups, $disable)
{
$this->markTestSkipped('This test must be run in phpBB >= 3.2.x');

$this->set_listener();

// Mock the text_formatter.parser service
$parser = $this->getMockBuilder('\phpbb\textformatter\s9e\parser')
->disableOriginalConstructor()
->getMock();
$parser->expects($this->once())
->method('get_parser')
->will($this->returnSelf());
$parser->registeredVars['abbc3.bbcode_groups'] = array(
$bbcode => $groups,
);

// Mock whether the user is allowed or not to use a bbcode
$this->bbcodes->expects($this->once())
->method('user_in_bbcode_group')
->with($groups)
->will($this->returnValue(!$disable));

// Test if disable_bbcode is called as expected
$parser->expects(($disable) ? $this->once() : $this->never())
->method('disable_bbcode')
->with($bbcode);

$dispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher();
$dispatcher->addListener('core.text_formatter_s9e_parser_setup', array($this->listener, 's9e_allow_custom_bbcodes'));

$event_data = array('parser');
$event = new \phpbb\event\data(compact($event_data));
$dispatcher->dispatch('core.text_formatter_s9e_parser_setup', $event);
}
}
1 change: 1 addition & 0 deletions tests/event/event_listener_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public function test_getSubscribedEvents()
'core.display_custom_bbcodes_modify_row',
'core.modify_format_display_text_after',
'core.modify_bbcode_init',
'core.text_formatter_s9e_parser_setup',
), array_keys(\vse\abbc3\event\listener::getSubscribedEvents()));
}
}

0 comments on commit 6f5e59c

Please sign in to comment.