Only pass valid subject parameters when commenting

Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
Julius Härtl
2018-12-20 10:36:56 +01:00
parent cf41665c0a
commit 5c0455ec56
3 changed files with 16 additions and 6 deletions

View File

@@ -51,7 +51,8 @@ class ActivityService {
for (let index in this.toEnhanceWithComments) { for (let index in this.toEnhanceWithComments) {
if (this.toEnhanceWithComments.hasOwnProperty(index)) { if (this.toEnhanceWithComments.hasOwnProperty(index)) {
let item = this.toEnhanceWithComments[index]; let item = this.toEnhanceWithComments[index];
item.commentModel = this.commentCollection.get(item.subject_rich[1].comment); let commentId = Array.isArray(item.subject_rich[1].comment) ? item.subject_rich[1].comment.id : item.subject_rich[1].comment;
item.commentModel = this.commentCollection.get(commentId);
if (typeof item.commentModel !== 'undefined') { if (typeof item.commentModel !== 'undefined') {
this.toEnhanceWithComments = this.toEnhanceWithComments.filter((entry) => entry.activity_id !== item.activity_id); this.toEnhanceWithComments = this.toEnhanceWithComments.filter((entry) => entry.activity_id !== item.activity_id);
} }

View File

@@ -158,18 +158,19 @@ class DeckProvider implements IProvider {
* @param array $parameters * @param array $parameters
*/ */
protected function setSubjects(IEvent $event, $subject, array $parameters) { protected function setSubjects(IEvent $event, $subject, array $parameters) {
$placeholders = $replacements = []; $placeholders = $replacements = $richParameters = [];
foreach ($parameters as $placeholder => $parameter) { foreach ($parameters as $placeholder => $parameter) {
$placeholders[] = '{' . $placeholder . '}'; $placeholders[] = '{' . $placeholder . '}';
if (is_array($parameter) && array_key_exists('name', $parameter)) { if (is_array($parameter) && array_key_exists('name', $parameter)) {
$replacements[] = $parameter['name']; $replacements[] = $parameter['name'];
$richParameters[$placeholder] = $parameter;
} else { } else {
$replacements[] = ''; $replacements[] = '';
} }
} }
$event->setParsedSubject(str_replace($placeholders, $replacements, $subject)) $event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
->setRichSubject($subject, $parameters); ->setRichSubject($subject, $richParameters);
$event->setSubject($subject, $parameters); $event->setSubject($subject, $parameters);
} }
@@ -284,7 +285,11 @@ class DeckProvider implements IProvider {
$event->setParsedMessage($comment->getMessage()); $event->setParsedMessage($comment->getMessage());
} catch (NotFoundException $e) { } catch (NotFoundException $e) {
} }
$params['comment'] = $subjectParams['comment']; $params['comment'] =[
'type' => 'highlight',
'id' => $subjectParams['comment'],
'name' => $comment->getMessage()
];
} }
return $params; return $params;
} }

View File

@@ -465,7 +465,7 @@ class DeckProviderTest extends TestCase {
public function testParseParamForComment() { public function testParseParamForComment() {
$comment = $this->createMock(IComment::class); $comment = $this->createMock(IComment::class);
$comment->expects($this->once()) $comment->expects($this->any())
->method('getMessage') ->method('getMessage')
->willReturn('Comment content'); ->willReturn('Comment content');
$this->commentsManager->expects($this->once()) $this->commentsManager->expects($this->once())
@@ -481,7 +481,11 @@ class DeckProviderTest extends TestCase {
'comment' => 123 'comment' => 123
]; ];
$expected = [ $expected = [
'comment' => 123, 'comment' => [
'type' => 'highlight',
'id' => 123,
'name' => 'Comment content'
]
]; ];
$actual = $this->invokePrivate($this->provider, 'parseParamForComment', [$subjectParams, $params, $event]); $actual = $this->invokePrivate($this->provider, 'parseParamForComment', [$subjectParams, $params, $event]);
$this->assertEquals($expected, $actual); $this->assertEquals($expected, $actual);