mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-07 20:08:53 +00:00
[ticket/13713] Avoid same attributes for different types of IDs
PHPBB3-13713
This commit is contained in:
parent
9905e54013
commit
e2c50eae68
3 changed files with 24 additions and 27 deletions
|
@ -85,8 +85,10 @@ class factory implements \phpbb\textformatter\cache_interface
|
|||
'list' => '[LIST type={HASHMAP=1:decimal,a:lower-alpha,A:upper-alpha,i:lower-roman,I:upper-roman;optional;postFilter=#simpletext} #createChild=LI]{TEXT}[/LIST]',
|
||||
'li' => '[* $tagName=LI]{TEXT}[/*]',
|
||||
'mention' =>
|
||||
"[MENTION={PARSE=/^(?<type>[ug]):(?<id>\d+)$/}
|
||||
"[MENTION={PARSE=/^g:(?'group_id'\d+)|u:(?'user_id'\d+)$/}
|
||||
group_id={UINT;optional}
|
||||
profile_url={URL;optional;postFilter=#false}
|
||||
user_id={UINT;optional}
|
||||
]{TEXT}[/MENTION]",
|
||||
'quote' =>
|
||||
"[QUOTE
|
||||
|
|
|
@ -33,12 +33,12 @@ class mention_helper
|
|||
protected $user;
|
||||
|
||||
/**
|
||||
* @var string Base URL for a user profile link, uses {ID} as placeholder
|
||||
* @var string Base URL for a user profile link, uses {USER_ID} as placeholder
|
||||
*/
|
||||
protected $user_profile_url;
|
||||
|
||||
/**
|
||||
* @var string Base URL for a group profile link, uses {ID} as placeholder
|
||||
* @var string Base URL for a group profile link, uses {GROUP_ID} as placeholder
|
||||
*/
|
||||
protected $group_profile_url;
|
||||
|
||||
|
@ -61,8 +61,8 @@ class mention_helper
|
|||
$this->db = $db;
|
||||
$this->auth = $auth;
|
||||
$this->user = $user;
|
||||
$this->user_profile_url = append_sid($root_path . 'memberlist.' . $php_ext, 'mode=viewprofile&u={ID}', false);
|
||||
$this->group_profile_url = append_sid($root_path . 'memberlist.' . $php_ext, 'mode=group&g={ID}', false);
|
||||
$this->user_profile_url = append_sid($root_path . 'memberlist.' . $php_ext, 'mode=viewprofile&u={USER_ID}', false);
|
||||
$this->group_profile_url = append_sid($root_path . 'memberlist.' . $php_ext, 'mode=group&g={GROUP_ID}', false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -83,12 +83,13 @@ class mention_helper
|
|||
'MENTION',
|
||||
function ($attributes) use ($profile_urls)
|
||||
{
|
||||
if (isset($attributes['type']) && isset($attributes['id']))
|
||||
if (isset($attributes['user_id']))
|
||||
{
|
||||
$type = $attributes['type'];
|
||||
$id = $attributes['id'];
|
||||
|
||||
$attributes['profile_url'] = str_replace('{ID}', $id, $profile_urls[$type]);
|
||||
$attributes['profile_url'] = str_replace('{USER_ID}', $attributes['user_id'], $profile_urls['u']);
|
||||
}
|
||||
else if (isset($attributes['group_id']))
|
||||
{
|
||||
$attributes['profile_url'] = str_replace('{GROUP_ID}', $attributes['group_id'], $profile_urls['g']);
|
||||
}
|
||||
|
||||
return $attributes;
|
||||
|
@ -186,21 +187,15 @@ class mention_helper
|
|||
return $ids;
|
||||
}
|
||||
|
||||
$dom = new \DOMDocument;
|
||||
$dom->loadXML($xml);
|
||||
$xpath = new \DOMXPath($dom);
|
||||
// Add IDs of users mentioned directly
|
||||
$user_ids = TextFormatterUtils::getAttributeValues($xml, 'MENTION', 'user_id');
|
||||
$ids = array_merge($ids, array_map('intval', $user_ids));
|
||||
|
||||
/** @var \DOMElement $mention */
|
||||
foreach ($xpath->query('//MENTION') as $mention)
|
||||
// Add IDs of users mentioned as group members
|
||||
$group_ids = TextFormatterUtils::getAttributeValues($xml, 'MENTION', 'group_id');
|
||||
foreach ($group_ids as $group_id)
|
||||
{
|
||||
if ($mention->getAttribute('type') === 'u')
|
||||
{
|
||||
$ids[] = (int) $mention->getAttribute('id');
|
||||
}
|
||||
else if ($mention->getAttribute('type') === 'g')
|
||||
{
|
||||
$this->get_user_ids_for_group($ids, (int) $mention->getAttribute('id'));
|
||||
}
|
||||
$this->get_user_ids_for_group($ids, (int) $group_id);
|
||||
}
|
||||
|
||||
return $ids;
|
||||
|
|
|
@ -80,11 +80,11 @@ class mention_helper_test extends phpbb_database_test_case
|
|||
{
|
||||
return [
|
||||
[
|
||||
'<r><MENTION id="3" type="u"><s>[mention=u:3]</s>test<e>[/mention]</e></MENTION></r>',
|
||||
'<r><MENTION user_id="3"><s>[mention=u:3]</s>test<e>[/mention]</e></MENTION></r>',
|
||||
'mode=viewprofile&u=3',
|
||||
],
|
||||
[
|
||||
'<r><MENTION id="3" type="g"><s>[mention=g:3]</s>test<e>[/mention]</e></MENTION></r>',
|
||||
'<r><MENTION group_id="3"><s>[mention=g:3]</s>test<e>[/mention]</e></MENTION></r>',
|
||||
'mode=group&g=3',
|
||||
],
|
||||
];
|
||||
|
@ -103,11 +103,11 @@ class mention_helper_test extends phpbb_database_test_case
|
|||
{
|
||||
return [
|
||||
[
|
||||
'<r><MENTION id="3" type="u"><s>[mention=u:3]</s>test<e>[/mention]</e></MENTION><MENTION id="4" type="u"><s>[mention=u:4]</s>test<e>[/mention]</e></MENTION><MENTION id="5" type="u"><s>[mention=u:5]</s>test<e>[/mention]</e></MENTION></r>',
|
||||
'<r><MENTION user_id="3"><s>[mention=u:3]</s>test<e>[/mention]</e></MENTION><MENTION user_id="4"><s>[mention=u:4]</s>test<e>[/mention]</e></MENTION><MENTION user_id="5"><s>[mention=u:5]</s>test<e>[/mention]</e></MENTION></r>',
|
||||
[3, 4, 5],
|
||||
],
|
||||
[
|
||||
'<r><MENTION id="1" type="g"><s>[mention=g:1]</s>test<e>[/mention]</e></MENTION><MENTION id="2" type="g"><s>[mention=g:2]</s>test<e>[/mention]</e></MENTION><MENTION id="3" type="g"><s>[mention=g:3]</s>test<e>[/mention]</e></MENTION></r>',
|
||||
'<r><MENTION group_id="1"><s>[mention=g:1]</s>test<e>[/mention]</e></MENTION><MENTION group_id="2"><s>[mention=g:2]</s>test<e>[/mention]</e></MENTION><MENTION group_id="3"><s>[mention=g:3]</s>test<e>[/mention]</e></MENTION></r>',
|
||||
[4, 2, 6],
|
||||
],
|
||||
];
|
||||
|
|
Loading…
Add table
Reference in a new issue