public function media()
{
if ($this->media === null) {
$controller = Gdn::controller();
$commentIDList = [];
$comments = $controller->data('Comments');
$discussionID = $controller->data('Discussion.DiscussionID');
$mediaArray = [];
// If we have comments, iterate through them and build an array of their IDs.
if ($comments instanceof Gdn_DataSet && $comments->numRows()) {
$comments->dataSeek(-1);
while ($comment = $comments->nextRow()) {
$commentIDList[] = $comment->CommentID;
}
} elseif (isset($controller->Discussion) && $controller->Discussion) {
$commentIDList[] = $controller->DiscussionID = $controller->Discussion->DiscussionID;
}
if (isset($controller->Comment) && isset($controller->Comment->CommentID)) {
$commentIDList[] = $controller->Comment->CommentID;
}
$this->fireEvent('BeforePreloadDiscussionMedia');
$mediaQuery = Gdn::sql()->select('m.*')->from('Media m')->beginWhereGroup()->where('m.ForeignID', $discussionID)->where('m.ForeignTable', 'discussion')->endWhereGroup();
if (count($commentIDList)) {
$mediaQuery->orOp()->beginWhereGroup()->whereIn('m.ForeignID', $commentIDList)->where('m.ForeignTable', 'comment')->endWhereGroup();
}
$mediaResult = $mediaQuery->get()->result();
if ($mediaResult) {
foreach ($mediaResult as $media) {
$mediaArray[$media->MediaID] = $media;
}
}
$this->media = $mediaArray;
}
return $this->media;
}