/** * Displays a short version (suitable for including in discussion list) * of this discussion including a link to view the discussion and to * mark it read (if enabled). * @param forum_discussion $discussion Discussion * @param int $groupid Group ID for display; may be NO_GROUPS or ALL_GROUPS * @param bool $last True if this is the last item in the list * @return string HTML code to print out for this discussion */ public function display_discussion_list_item($discussion, $groupid, $last) { global $CFG; $showgroups = $groupid == forum::ALL_GROUPS; // Work out CSS classes to use for discussion $classes = ''; $alts = array(); $icons = array(); if ($discussion->is_deleted()) { $classes .= ' forumng-deleted'; $alts[] = get_string('alt_discussion_deleted', 'forumng'); $icons[] = ''; // No icon, text will be output on its own } if (!$discussion->is_within_time_period()) { $classes .= ' forumng-timeout'; $icon = 'timeout'; $alts[] = get_string('alt_discussion_timeout', 'forumng'); $icons[] = $CFG->modpixpath . '/forumng/timeout.png'; } if ($discussion->is_sticky()) { $classes .= ' forumng-sticky'; $alts[] = get_string('alt_discussion_sticky', 'forumng'); $icons[] = $CFG->modpixpath . '/forumng/sticky.png'; } if ($discussion->is_locked()) { $classes .= ' forumng-locked'; $alts[] = get_string('alt_discussion_locked', 'forumng'); $icons[] = $CFG->pixpath . '/i/unlock.gif'; } // Classes for Moodle table styles static $rownum = 0; $classes .= ' r' . $rownum; $rownum = 1 - $rownum; if ($last) { $classes .= ' lastrow'; } $courseid = $discussion->get_forum()->get_course_id(); // Start row $result = "<tr class='forumng-discussion-short{$classes}'>"; // Subject, with icons $result .= "<td class='forumng-subject cell c0'>"; foreach ($icons as $index => $icon) { $alt = $alts[$index]; if ($icon) { $result .= "<img src='{$icon}' alt='{$alt}' title='{$alt}' /> "; } else { $result .= "<span class='accesshide'>{$alt}:</span> "; } } $result .= "<a href='discuss.php?" . $discussion->get_link_params(forum::PARAM_HTML) . "'>" . format_string($discussion->get_subject(), true, $courseid) . "</a></td>"; // Author $poster = $discussion->get_poster(); $result .= "<td class='forumng-startedby cell c1'>" . print_user_picture($poster, $courseid, null, 0, true) . $discussion->get_forum()->display_user_link($poster) . "</td>"; $num = 2; // Group if ($showgroups) { $result .= '<td class="cell c' . $num . '">' . $discussion->get_group_name() . '</td>'; $num++; } // Number of posts $result .= '<td class="cell c' . $num . '">' . $discussion->get_num_posts(); if (!class_exists('ouflags') || !ou_get_is_mobile()) { $result .= '</td>'; } $num++; // Number of unread posts if ($discussion->get_forum()->can_mark_read()) { $unreadposts = $discussion->get_num_unread_posts(); if (!class_exists('ouflags') || !ou_get_is_mobile()) { $result .= '<td class="cell forumng-unreadcount c3">'; } else { $result .= ' ('; } if ($unreadposts) { $result .= '<a href="discuss.php?' . $discussion->get_link_params(forum::PARAM_HTML) . '#firstunread">' . $unreadposts . '</a>' . '<form method="post" action="markread.php"><div> ' . $discussion->get_link_params(forum::PARAM_FORM) . '<input type="hidden" name="back" value="view" />' . '<input type="image" title="' . get_string('markdiscussionread', 'forumng') . '" src="' . $CFG->pixpath . '/t/clear.gif" ' . 'class="iconsmall" alt="' . get_string('markdiscussionread', 'forumng') . '" /></div></form>'; } else { $result .= $unreadposts; } if (class_exists('ouflags') && ou_get_is_mobile()) { $result .= ')'; } $result .= '</td>'; $num = 4; } // Last post $last = $discussion->get_last_post_user(); $result .= '<td class="cell c' . $num . ' lastcol forumng-lastpost">' . forum_utils::display_date($discussion->get_time_modified()) . "<br/>" . "<a href='{$CFG->wwwroot}/user/view.php?id={$last->id}&" . "course={$courseid}'>" . fullname($last, has_capability('moodle/site:viewfullnames', $discussion->get_forum()->get_context())) . "</a></td>"; $result .= "</tr>"; return $result; }
/** * Updates the in-memory digest records to add a new post to the given * user's digests. * @param object $user User object (must include special ->emailtype, etc) * @param array $userdigests Array of user id => digest information object * @param forum_post $post Post object * @param forum_post $inreplyto Parent post * @param forum_discussion $discussion Discus * @param forum $forum * @param object $cm * @param object $course * @param object $context */ private static function digest_add_post_for_user(&$user, &$userdigests, &$post, &$inreplyto, &$discussion, &$forum, &$cm, &$course, &$context) { global $CFG; // Set up digest for user if required if (!array_key_exists($user->id, $userdigests)) { $userdigests[$user->id] = new StdClass(); $userdigests[$user->id]->discussionid = -1; // So we do header next $userdigests[$user->id]->user = $user; $userdigests[$user->id]->forumid = -1; // Get header text $headerdata = new object(); $headerdata->sitename = format_string($course->fullname, true); $headerdata->userprefs = $CFG->wwwroot . '/user/edit.php?id=' . $user->id . '&course=' . $course->id; $userdigests[$user->id]->text = get_string('digestmailheader', 'forumng', $headerdata) . "\n\n"; // Get header HTML $html = "<head>"; foreach ($CFG->stylesheets as $stylesheet) { $html .= '<link rel="stylesheet" type="text/css" href="' . $stylesheet . '" />' . "\n"; } $html .= "</head>\n<body id='forumng-email'>\n"; $headerdata->userprefs = '<a target="_blank" href="' . $headerdata->userprefs . '">' . get_string('digestmailprefs', 'forumng') . '</a>'; $html .= '<div class="forumng-emailheader"><p>' . get_string('digestmailheader', 'forumng', $headerdata) . '</p></div><hr size="1" noshade="noshade" />'; $userdigests[$user->id]->html = $html; // Get email subject $userdigests[$user->id]->subject = get_string('digestmailsubject', 'forumng', format_string($course->shortname, true)); } // New forum? if ($userdigests[$user->id]->forumid != $forum->get_id()) { $userdigests[$user->id]->forumid = $forum->get_id(); } // Is this a new discussion? if ($userdigests[$user->id]->discussionid != $discussion->get_id()) { $strforums = get_string('forums', 'forumng'); // Per-discussion header (text mode) $text = "\n \n"; $text .= '====================================================================='; $text .= "\n \n"; $text .= "{$course->shortname} -> {$strforums} -> " . format_string($forum->get_name(), true); if ($discussion->get_subject(false) !== $forum->get_name()) { $text .= " -> " . format_string($discussion->get_subject(false), true); } $text .= "\n"; // HTML mode $html = '<hr size="1" noshade="noshade" />'; $html .= "<div class='forumng-breadcrumbs'>" . "<a target='_blank' href='{$CFG->wwwroot}/course/view.php?id={$course->id}'>{$course->shortname}</a> -> " . "<a target='_blank' href='{$CFG->wwwroot}/mod/forumng/index.php?id={$course->id}'>{$strforums}</a> -> " . "<a target='_blank' href='{$CFG->wwwroot}/mod/forumng/view.php?" . $forum->get_link_params(forum::PARAM_HTML) . "'>" . format_string($forum->get_name(), true) . "</a>"; if ($discussion->get_subject(false) !== $forum->get_name()) { $html .= " -> <a target='_blank' href='{$CFG->wwwroot}/mod/forumng/discuss.php?" . $discussion->get_link_params(forum::PARAM_HTML) . "'>" . format_string($discussion->get_subject(false), true) . "</a>"; } $html .= '</div>'; $userdigests[$user->id]->text .= $text; $userdigests[$user->id]->html .= $html; $userdigests[$user->id]->discussionid = $discussion->get_id(); } // Get both plaintext and html versions (and subject). // The html version will be blank if set to // plain text mode. $post->build_email($inreplyto, $subject, $text, $html, $user->emailtype & 1, $user->emailtype & 2, $user->emailtype & 4, $user->lang, $user->timezone, true); $userdigests[$user->id]->text .= $text; $userdigests[$user->id]->html .= $html; }