mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-10 13:28:55 +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]',
|
'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}[/*]',
|
'li' => '[* $tagName=LI]{TEXT}[/*]',
|
||||||
'mention' =>
|
'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}
|
profile_url={URL;optional;postFilter=#false}
|
||||||
|
user_id={UINT;optional}
|
||||||
]{TEXT}[/MENTION]",
|
]{TEXT}[/MENTION]",
|
||||||
'quote' =>
|
'quote' =>
|
||||||
"[QUOTE
|
"[QUOTE
|
||||||
|
|
|
@ -33,12 +33,12 @@ class mention_helper
|
||||||
protected $user;
|
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;
|
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;
|
protected $group_profile_url;
|
||||||
|
|
||||||
|
@ -61,8 +61,8 @@ class mention_helper
|
||||||
$this->db = $db;
|
$this->db = $db;
|
||||||
$this->auth = $auth;
|
$this->auth = $auth;
|
||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
$this->user_profile_url = append_sid($root_path . 'memberlist.' . $php_ext, 'mode=viewprofile&u={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={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',
|
'MENTION',
|
||||||
function ($attributes) use ($profile_urls)
|
function ($attributes) use ($profile_urls)
|
||||||
{
|
{
|
||||||
if (isset($attributes['type']) && isset($attributes['id']))
|
if (isset($attributes['user_id']))
|
||||||
{
|
{
|
||||||
$type = $attributes['type'];
|
$attributes['profile_url'] = str_replace('{USER_ID}', $attributes['user_id'], $profile_urls['u']);
|
||||||
$id = $attributes['id'];
|
}
|
||||||
|
else if (isset($attributes['group_id']))
|
||||||
$attributes['profile_url'] = str_replace('{ID}', $id, $profile_urls[$type]);
|
{
|
||||||
|
$attributes['profile_url'] = str_replace('{GROUP_ID}', $attributes['group_id'], $profile_urls['g']);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $attributes;
|
return $attributes;
|
||||||
|
@ -186,21 +187,15 @@ class mention_helper
|
||||||
return $ids;
|
return $ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
$dom = new \DOMDocument;
|
// Add IDs of users mentioned directly
|
||||||
$dom->loadXML($xml);
|
$user_ids = TextFormatterUtils::getAttributeValues($xml, 'MENTION', 'user_id');
|
||||||
$xpath = new \DOMXPath($dom);
|
$ids = array_merge($ids, array_map('intval', $user_ids));
|
||||||
|
|
||||||
/** @var \DOMElement $mention */
|
// Add IDs of users mentioned as group members
|
||||||
foreach ($xpath->query('//MENTION') as $mention)
|
$group_ids = TextFormatterUtils::getAttributeValues($xml, 'MENTION', 'group_id');
|
||||||
|
foreach ($group_ids as $group_id)
|
||||||
{
|
{
|
||||||
if ($mention->getAttribute('type') === 'u')
|
$this->get_user_ids_for_group($ids, (int) $group_id);
|
||||||
{
|
|
||||||
$ids[] = (int) $mention->getAttribute('id');
|
|
||||||
}
|
|
||||||
else if ($mention->getAttribute('type') === 'g')
|
|
||||||
{
|
|
||||||
$this->get_user_ids_for_group($ids, (int) $mention->getAttribute('id'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $ids;
|
return $ids;
|
||||||
|
|
|
@ -80,11 +80,11 @@ class mention_helper_test extends phpbb_database_test_case
|
||||||
{
|
{
|
||||||
return [
|
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',
|
'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',
|
'mode=group&g=3',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
@ -103,11 +103,11 @@ class mention_helper_test extends phpbb_database_test_case
|
||||||
{
|
{
|
||||||
return [
|
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],
|
[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],
|
[4, 2, 6],
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
Loading…
Add table
Reference in a new issue