* @package oublog */ require_once "../../config.php"; require_once "locallib.php"; $postid = required_param('post', PARAM_INT); // Post id. // Support redirects across systems - find post by username and time created. $username = optional_param('u', '', PARAM_USERNAME); $time = optional_param('time', 0, PARAM_INT); if ($postid == 0 && !empty($username) && $time != 0) { // Search DB for an existing post (Personal blog only). $redirectto = new moodle_url('/mod/oublog/view.php', array('u' => $username)); if (!($user = $DB->get_record('user', array('username' => $username), 'id'))) { print_error('invaliduser'); } if (!(list($oublog, $oubloginstance) = oublog_get_personal_blog($user->id))) { // We redirect on error as system can create blog on access. redirect($redirectto); } // Get any posts matching user and time (If more than one just get first record). if (!($post = $DB->get_record('oublog_posts', array('oubloginstancesid' => $oubloginstance->id, 'timeposted' => $time), 'id', IGNORE_MULTIPLE))) { // Go to their blog home page if no post found. redirect($redirectto); } $postid = $post->id; } // This query based on the post id is so that we can get the blog etc to // check permissions before calling oublog_get_post. if (!($oublog = oublog_get_blog_from_postid($postid))) { print_error('invalidpost', 'oublog'); }
public function test_oublog_tags() { global $USER, $DB, $SITE; $this->resetAfterTest(true); $this->setAdminUser(); $course = $this->get_new_course(); $stud1 = $this->get_new_user('student', $course->id); $group1 = $this->get_new_group($course->id); $group2 = $this->get_new_group($course->id); $this->get_new_group_member($group1->id, $stud1->id); // Whole course blog. $oublog = $this->get_new_oublog($course->id); $cm = get_coursemodule_from_id('oublog', $oublog->cmid); $post = $this->get_post_stub($oublog->id); $post->tags = array('1', 'new', 'new', 'new2', 'a space'); $postid = oublog_add_post($post, $cm, $oublog, $course); $this->assertEquals(21, strlen(oublog_get_tags_csv($postid))); $tags = oublog_get_tags($oublog, 0, $cm, null, -1); $this->assertCount(4, $tags); foreach ($tags as $tag) { $this->assertEquals(1, $tag->count); $this->assertContains($tag->tag, $post->tags); } // Individual blog. $oublog = $this->get_new_oublog($course->id, array('individual' => OUBLOG_VISIBLE_INDIVIDUAL_BLOGS)); $cm = get_coursemodule_from_id('oublog', $oublog->cmid); $post = $this->get_post_stub($oublog->id); $post->tags = array('1', 'new', 'new', 'new2', 'a space'); $postid = oublog_add_post($post, $cm, $oublog, $course); $tags = oublog_get_tags($oublog, 0, $cm, null, $USER->id); $this->assertCount(4, $tags); $tags = oublog_get_tags($oublog, 0, $cm, null, $stud1->id); $this->assertEmpty($tags); // Group blog. $oublog = $this->get_new_oublog($course->id, array('groupmode' => VISIBLEGROUPS)); $cm = get_coursemodule_from_id('oublog', $oublog->cmid); $post = $this->get_post_stub($oublog->id); $post->groupid = $group1->id; $post->tags = array('1', 'new', 'new', 'new2', 'a space'); $postid = oublog_add_post($post, $cm, $oublog, $course); $tags = oublog_get_tags($oublog, $group1->id, $cm); $this->assertCount(4, $tags); $tags = oublog_get_tags($oublog, $group2->id, $cm); $this->assertEmpty($tags); // Personal blog. if (!($oublog = $DB->get_record('oublog', array('global' => 1)))) { $oublog = $this->get_new_oublog($SITE->id, array('global' => 1, 'maxvisibility' => OUBLOG_VISIBILITY_PUBLIC)); } $cm = get_coursemodule_from_instance('oublog', $oublog->id); list($oublog, $bloginstance) = oublog_get_personal_blog($stud1->id); $post1stub = $this->get_post_stub($oublog->id); $post1stub->userid = $stud1->id; $post1stub->visibility = OUBLOG_VISIBILITY_COURSEUSER; // Private. $post1stub->tags = array('private'); oublog_add_post($post1stub, $cm, $oublog, $SITE); $post2stub = $this->get_post_stub($oublog->id); $post2stub->userid = $stud1->id; $post2stub->visibility = OUBLOG_VISIBILITY_LOGGEDINUSER; // User must be logged in. $post2stub->tags = array('loggedin'); oublog_add_post($post2stub, $cm, $oublog, $SITE); $post3stub = $this->get_post_stub($oublog->id); $post3stub->userid = $stud1->id; $post3stub->visibility = OUBLOG_VISIBILITY_PUBLIC; // Any user. $post3stub->tags = array('public'); oublog_add_post($post3stub, $cm, $oublog, $SITE); $tags = oublog_get_tags($oublog, 0, $cm, $bloginstance->id); $this->assertCount(2, $tags); $this->setUser($stud1); $tags = oublog_get_tags($oublog, 0, $cm, $bloginstance->id); $this->assertCount(3, $tags); $this->setGuestUser(); $tags = oublog_get_tags($oublog, 0, $cm, $bloginstance->id); $this->assertCount(1, $tags); $this->setUser($stud1); $post4stub = $this->get_post_stub($oublog->id); $post4stub->userid = $stud1->id; $post4stub->visibility = OUBLOG_VISIBILITY_PUBLIC; // Any user. // Add unordered alphabetic tags. $post4stub->tags = array('toad', 'newt', 'private', 'crock', 'loggedin', 'frog', 'public', 'dino'); $postid = oublog_add_post($post4stub, $cm, $oublog, $course); $this->assertEquals(56, strlen(oublog_get_tags_csv($postid))); $post5stub = $this->get_post_stub($oublog->id); $post5stub->userid = $stud1->id; $post5stub->visibility = OUBLOG_VISIBILITY_PUBLIC; // Any user. // Add unordered alphabetic tags. $post5stub->tags = array('toad', 'private', 'crock', 'loggedin', 'frog', 'public', 'dino'); $postid = oublog_add_post($post5stub, $cm, $oublog, $course); $this->assertEquals(50, strlen(oublog_get_tags_csv($postid))); // Recover tags with default ordering ie Alphabetic. $tags = oublog_get_tags($oublog, 0, $cm, null, -1); $this->assertCount(8, $tags); foreach ($tags as $tag) { $this->assertContains($tag->tag, $post4stub->tags); } $this->assertEquals('toad', $tag->tag); // Last in default, Alphabetical order. // Recover tags in Use order. $tags = oublog_get_tags($oublog, 0, $cm, null, -1, 'use'); $this->assertCount(8, $tags); $lasttag = end($tags); $this->assertEquals('newt', $lasttag->tag); // Last when Use order specified. // Recover tags in Alphabetical order. $tags = oublog_get_tags($oublog, 0, $cm, null, -1, 'alpha'); $this->assertCount(8, $tags); $lasttag = end($tags); $this->assertEquals('toad', $lasttag->tag); // Last when Alphabetic order specified. // Testing the create update of a blog instance with predefined tags. // set and also testing oublog_get_tag_list(). // Whole course blog created with predefined tag set. $oublog = $this->get_new_oublog($course->id, array('tags' => 'blogtag01')); $cm = get_coursemodule_from_id('oublog', $oublog->cmid); // Check that the predefined tag is inserted to the oublog_tags table. $blogtags = oublog_clarify_tags($oublog->tags); foreach ($blogtags as $tag) { $predefinedtags[] = $DB->get_record('oublog_tags', array('tag' => $tag)); } // Confirm finding one predefined tag in the oublog_tags table. $this->assertCount(1, $predefinedtags); // Change the predefined tags on the blog. $oublog->tags = 'blogtag01, blogtag02'; $oublog->instance = $oublog->id; oublog_update_instance($oublog); // Check that the changed tags are inserted to the oublog_tags table. $blogtags = oublog_clarify_tags($oublog->tags); foreach ($blogtags as $tag) { $changedtags[] = $DB->get_record('oublog_tags', array('tag' => $tag)); } // Confirm finding predefined tags in the oublog_tags table. $this->assertCount(2, $changedtags); // Create post with 1 pre-defined and 1 user tag. $post = $this->get_post_stub($oublog->id); $post->tags = array('antelope', 'blogtag01'); $postid = oublog_add_post($post, $cm, $oublog, $course); $this->assertEquals(19, strlen(oublog_get_tags_csv($postid))); // Recover post tags in default order. $tags = oublog_get_tags($oublog, 0, $cm, null, -1); foreach ($tags as $tag) { $this->assertEquals(1, $tag->count); $this->assertContains($tag->tag, $post->tags); } $this->assertNotEquals('antelope', $tag->tag); $this->assertEquals('blogtag01', $tag->tag); // Last in Alphabetical order. // Testing 'Set' tag only restrictions. // No restriction, recover full list of blog 'Set' and post tags. $oublog->restricttags = 0; $taglist = oublog_get_tag_list($oublog, 0, $cm, null, -1); $this->assertCount(3, $taglist); foreach ($taglist as $tag) { $fulltaglist[] = $tag->tag; if (isset($tag->label)) { // It should be an 'Official' ie. 'Set' predefined blog tag. $this->assertContains($tag->tag, $oublog->tags); $this->assertNotEmpty($tag->label); $this->assertGreaterThanOrEqual(0, $tag->count); } if (!isset($tag->label)) { // It should be the user post tag. $this->assertContains($tag->tag, $post->tags); $this->assertEquals('antelope', $tag->tag); $this->assertEquals(1, $tag->count); } } $this->assertContains('antelope', $fulltaglist); $this->assertContains('blogtag01', $fulltaglist); $this->assertContains('blogtag02', end($fulltaglist)); // Last in full list. // Restriction applied, get restricted list of blog 'Set' tags. $oublog->restricttags = 1; $taglist = oublog_get_tag_list($oublog, 0, $cm, null, -1); $this->assertCount(2, $taglist); foreach ($taglist as $tag) { $restrictedtaglist[] = $tag->tag; if (isset($tag->label)) { // It should be an 'Official' ie. 'Set' predefined blog tag. $this->assertContains($tag->tag, $oublog->tags); $this->assertNotEmpty($tag->label); $this->assertGreaterThanOrEqual(0, $tag->count); } if (!isset($tag->label)) { $this->assertEmpty($tag->id); $this->assertEmpty($tag->weight); $this->assertEquals(0, $tag->count); } } $this->assertNotContains('antelope', $restrictedtaglist); $this->assertContains('blogtag01', $restrictedtaglist); $this->assertContains('blogtag02', end($restrictedtaglist)); // Last in restricted list. }
$buttontext .= update_module_button($cm->id, $course->id, $stroublog); $PAGEWILLCALLSKIPMAINDESTINATION = true; // OU accessibility feature $navigation = build_navigation($navlinks); print_header_simple(format_string($oublog->name), "", $navigation, "", oublog_get_meta_tags($oublog, 'all', '', $cm), true, $buttontext, navmenu($course, $cm)); print '<div class="oublog-topofpage"></div>'; // The left column ... if ($hasleft = !empty($CFG->showblocksonmodpages) && blocks_have_content($pageblocks, BLOCK_POS_LEFT)) { print '<div id="left-column">'; blocks_print_group($PAGE, $pageblocks, BLOCK_POS_LEFT); print '</div>'; } // The right column, BEFORE the middle-column. print '<div id="right-column">'; if (isloggedin() and !isguestuser()) { list($oublog, $oubloginstance) = oublog_get_personal_blog($USER->id); $blogeditlink = "<br /><a href=\"view.php\" class=\"oublog-links\">{$oubloginstance->name}</a>"; print_side_block(format_string($oublog->name), $blogeditlink, NULL, NULL, NULL, array('id' => 'oublog-summary'), get_string('bloginfo', 'oublog')); } if ($feeds = oublog_get_feedblock($oublog, 'all', '', false, $cm)) { print_side_block($strfeeds, $feeds, NULL, NULL, NULL, array('id' => 'oublog-feeds'), $strfeeds); } print '</div>'; // Start main column $classes = ''; $classes .= $hasleft ? 'has-left-column ' : ''; $classes .= 'has-right-column '; $classes = trim($classes); if ($classes) { print '<div id="middle-column" class="' . $classes . '">'; } else {
/** * Print a single blog post * * @param object $oublog Blog object * @param object $post Structure containing all post info and comments * @param string $baseurl Base URL of current page * @param string $blogtype Blog level ie course or above * @param bool $canmanageposts Has capability toggle * @param bool $canaudit Has capability toggle * @param bool $cancomment Has capability toggle * @param bool $forexport Export output rendering toggle * @param bool $email Email output rendering toggle * @return bool */ public function render_post($cm, $oublog, $post, $baseurl, $blogtype, $canmanageposts = false, $canaudit = false, $commentcount = true, $forexport = false, $format = false, $email = false) { global $CFG, $USER, $OUTPUT; $output = ''; $modcontext = context_module::instance($cm->id); $referurl = $baseurl; // Get rid of any existing tag from the URL as we only support one at a time. $baseurl = preg_replace('~&tag=[^&]*~', '', $baseurl); $strcomment = get_string('comment', 'oublog'); $strtags = get_string('tags', 'oublog'); $stredit = get_string('edit', 'oublog'); $strdelete = get_string('delete', 'oublog'); $strpermalink = get_string('permalink', 'oublog'); $row = ''; if (isset($post->row)) { $row = $post->row % 2 ? 'oublog-odd' : 'oublog-even'; } $extraclasses = $post->deletedby ? ' oublog-deleted' : ''; $extraclasses .= ' oublog-hasuserpic'; $extraclasses .= ' ' . $row; $output .= html_writer::start_tag('div', array('class' => 'oublog-post' . $extraclasses)); $output .= html_writer::start_tag('div', array('class' => 'oublog-post-top')); $output .= html_writer::start_tag('div', array('class' => 'oublog-social-container')); $fs = get_file_storage(); if ($files = $fs->get_area_files($modcontext->id, 'mod_oublog', 'attachment', $post->id, "timemodified", false)) { $output .= html_writer::start_tag('div', array('class' => 'oublog-post-attachments')); $output .= get_string('attachments', 'mod_oublog') . ': '; foreach ($files as $file) { if (!$forexport && !$email) { $filename = $file->get_filename(); $mimetype = $file->get_mimetype(); $iconimage = html_writer::empty_tag('img', array('src' => $this->output->pix_url(file_mimetype_icon($mimetype)), 'alt' => $mimetype, 'class' => 'icon')); if ($post->visibility == OUBLOG_VISIBILITY_PUBLIC) { $fileurlbase = '/mod/oublog/pluginfile.php'; } else { $fileurlbase = '/pluginfile.php'; } $filepath = '/' . $modcontext->id . '/mod_oublog/attachment/' . $post->id . '/' . $filename; $path = moodle_url::make_file_url($fileurlbase, $filepath, true); $output .= html_writer::start_tag('div', array('class' => 'oublog-post-attachment')); $output .= html_writer::tag('a', $iconimage, array('href' => $path)); $output .= html_writer::tag('a', s($filename), array('href' => $path)); $output .= html_writer::end_tag('div'); } else { $filename = $file->get_filename(); if (is_object($format)) { $output .= $format->file_output($file) . ' '; } else { $output .= $filename . ' '; } } } $output .= html_writer::end_tag('div'); } // Only show widgets if blog is global ect. if ($oublog->global && $oublog->maxvisibility == OUBLOG_VISIBILITY_PUBLIC) { if ($post->visibility == OUBLOG_VISIBILITY_PUBLIC && !$forexport && !$email) { list($oublog, $oubloginstance) = oublog_get_personal_blog($post->userid); $oubloginstancename = $oubloginstance->name; $linktext = get_string('tweet', 'oublog'); $purl = new moodle_url('/mod/oublog/viewpost.php', array('post' => $post->id)); $postname = !empty($post->title) ? $post->title : get_string('untitledpost', 'oublog'); $output .= html_writer::start_tag('div', array('class' => 'oublog-post-socialshares')); $output .= get_string('share', 'oublog'); $output .= html_writer::start_tag('div', array('class' => 'oublog-post-share')); // Show tweet link. $output .= html_writer::start_tag('div', array('class' => 'share-button')); $params = array('url' => $purl, 'dnt' => true, 'count' => 'none', 'text' => $postname . " " . $oubloginstance->name, 'class' => 'twitter-share-button'); $turl = new moodle_url('https://twitter.com/share', $params); $output .= html_writer::link($turl, $linktext, $params); $output .= html_writer::end_tag('div'); // Show facebook link. $output .= html_writer::start_tag('div', array('class' => 'share-button')); $output .= html_writer::start_tag('div', array('class' => 'fb-share-button', 'data-href' => $purl, 'data-colorscheme' => 'dark')); $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); // Show googleplus link. $output .= html_writer::start_tag('div', array('class' => 'share-button')); $output .= html_writer::start_tag('div', array('class' => 'g-plus', 'data-href' => $purl, 'data-action' => 'share', 'data-height' => 20, 'data-annotation' => 'none')); $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); // With JS enabled show social widget buttons. self::render_twitter_js(); $output .= self::render_facebook_js(); $output .= self::render_googleplus_js(); } } $output .= html_writer::end_tag('div'); $output .= html_writer::start_tag('div', array('class' => 'oublog-post-top-content')); if (!$forexport) { $output .= html_writer::start_tag('div', array('class' => 'oublog-userpic')); $postuser = new object(); $postuser->id = $post->userid; $postuser->firstname = $post->firstname; $postuser->lastname = $post->lastname; $postuser->email = $post->email; $postuser->imagealt = $post->imagealt; $postuser->picture = $post->picture; $postuser->firstnamephonetic = $post->firstnamephonetic; $postuser->lastnamephonetic = $post->lastnamephonetic; $postuser->middlename = $post->middlename; $postuser->alternatename = $post->alternatename; $output .= $this->output->user_picture($postuser, array('courseid' => $oublog->course, 'size' => 70)); $output .= html_writer::end_tag('div'); } $output .= html_writer::start_tag('div', array('class' => 'oublog-post-top-details')); $formattedtitle = format_string($post->title); if (trim($formattedtitle) !== '') { $output .= html_writer::tag('h2', format_string($post->title), array('class' => 'oublog-title')); } else { if (!$forexport) { $posttitle = get_accesshide(get_string('newpost', 'mod_oublog', oublog_get_displayname($oublog))); $output .= html_writer::tag('h2', $posttitle, array('class' => 'oublog-title')); } } if ($post->deletedby) { $deluser = new stdClass(); // Get user name fields. $delusernamefields = get_all_user_name_fields(false, null, 'del'); foreach ($delusernamefields as $namefield => $retnamefield) { $deluser->{$namefield} = $post->{$retnamefield}; } $a = new stdClass(); $a->fullname = html_writer::tag('a', fullname($deluser), array('href' => $CFG->wwwroot . '/user/view.php?id=' . $post->deletedby)); $a->timedeleted = oublog_date($post->timedeleted); $output .= html_writer::tag('div', get_string('deletedby', 'oublog', $a), array('class' => 'oublog-post-deletedby')); } $output .= html_writer::start_tag('div', array('class' => 'oublog-post-date')); $output .= oublog_date($post->timeposted); $output .= html_writer::empty_tag('br', array()); $output .= ' '; if ($blogtype == 'course' || strpos($_SERVER['REQUEST_URI'], 'allposts.php') != 0) { $output .= html_writer::start_tag('div', array('class' => 'oublog-postedby')); if (!$forexport) { $output .= get_string('postedby', 'oublog', '<a href="' . $CFG->wwwroot . '/user/view.php?id=' . $post->userid . '&course=' . $oublog->course . '">' . fullname($post) . '</a>'); } else { $output .= get_string('postedby', 'oublog', fullname($post)); } $output .= html_writer::end_tag('div'); } $output .= html_writer::end_tag('div'); if (!$oublog->individual) { $output .= html_writer::start_tag('div', array('class' => 'oublog-post-visibility')); $output .= oublog_get_visibility_string($post->visibility, $blogtype == 'personal'); $output .= html_writer::end_tag('div'); } if (isset($post->edits) && ($canaudit || $post->userid == $USER->id)) { $output .= html_writer::start_tag('div', array('class' => 'oublog-post-editsummary')); foreach ($post->edits as $edit) { $a = new stdClass(); $a->editby = fullname($edit); $a->editdate = oublog_date($edit->timeupdated); if (!$forexport && !$email) { if ($edit->userid == $post->userid) { $output .= '- ' . html_writer::tag('a', get_string('editsummary', 'oublog', $a), array('href' => $CFG->wwwroot . '/mod/oublog/viewedit.php?edit=' . $edit->id)); } else { $output .= '- ' . html_writer::tag('a', get_string('editonsummary', 'oublog', $a), array('href' => $CFG->wwwroot . '/mod/oublog/viewedit.php?edit=' . $edit->id)); } } else { if ($edit->userid == $post->userid) { $output .= '- ' . get_string('editsummary', 'oublog', $a); } else { $output .= '- ' . get_string('editonsummary', 'oublog', $a); } } $output .= html_writer::empty_tag('br', array()); } $output .= html_writer::end_tag('div'); } else { if ($post->lasteditedby) { $edit = new StdClass(); // Get user name fields. $editusernamefields = get_all_user_name_fields(false, null, 'ed'); foreach ($editusernamefields as $namefield => $retnamefield) { $edit->{$namefield} = $post->{$retnamefield}; } $a = new stdClass(); $a->editby = fullname($edit); $a->editdate = oublog_date($post->timeupdated); $output .= html_writer::tag('div', get_string('editsummary', 'oublog', $a), array('class' => 'oublog-post-editsummary')); } } $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); $output .= html_writer::start_tag('div', array('class' => 'oublog-post-content')); if (!$forexport) { if ($post->visibility == OUBLOG_VISIBILITY_PUBLIC || $email) { $fileurlbase = 'mod/oublog/pluginfile.php'; } else { $fileurlbase = 'pluginfile.php'; } $post->message = file_rewrite_pluginfile_urls($post->message, $fileurlbase, $modcontext->id, 'mod_oublog', 'message', $post->id); } else { require_once $CFG->libdir . '/portfoliolib.php'; $post->message = portfolio_rewrite_pluginfile_urls($post->message, $modcontext->id, 'mod_oublog', 'message', $post->id, $format); } $posttextoptions = new stdClass(); if (trusttext_active() && has_capability('moodle/site:trustcontent', $modcontext, $post->userid)) { // Support trusted text when initial author is safe (post editors are not checked!). $posttextoptions->trusted = true; $posttextoptions->context = $modcontext; } $output .= format_text($post->message, FORMAT_HTML, $posttextoptions); $output .= html_writer::end_tag('div'); $output .= html_writer::start_tag('div', array('class' => 'oublog-post-bottom')); if (isset($post->tags)) { $output .= html_writer::start_tag('div', array('class' => 'oublog-post-tags')) . $strtags . ': '; $tagcounter = 1; // Get rid of page from the URL we dont want it in tags. $pagelessurl = preg_replace('/&page=[^&]*/', '', $baseurl); foreach ($post->tags as $taglink) { $taglinktext = $taglink; if ($tagcounter < count($post->tags)) { $taglinktext .= ','; } if (!$forexport && !$email) { $output .= html_writer::tag('a', $taglinktext, array('href' => $pagelessurl . '&tag=' . urlencode($taglink))) . ' '; } else { $output .= $taglinktext . ' '; } $tagcounter++; } $output .= html_writer::end_tag('div'); } if (!$forexport && !$email) { // Output ratings. if (!empty($post->rating)) { $output .= html_writer::div($OUTPUT->render($post->rating), 'oublog-post-rating'); } } $output .= html_writer::start_tag('div', array('class' => 'oublog-post-links')); if (!$forexport && !$email) { $output .= html_writer::tag('a', $strpermalink, array('href' => $CFG->wwwroot . '/mod/oublog/viewpost.php?post=' . $post->id)) . ' '; } if (!$post->deletedby) { if ($post->userid == $USER->id || $canmanageposts) { if (!$forexport && !$email) { $output .= html_writer::tag('a', $stredit, array('href' => $CFG->wwwroot . '/mod/oublog/editpost.php?blog=' . $post->oublogid . '&post=' . $post->id . '&referurl=' . urlencode($referurl))) . ' '; if ($post->userid !== $USER->id) { // Add email and 'oublog_deleteandemail' to delete link. $output .= html_writer::tag('a', $strdelete, array('href' => $CFG->wwwroot . '/mod/oublog/deletepost.php?blog=' . $post->oublogid . '&post=' . $post->id . '&delete=1' . '&referurl=' . urlencode($referurl), 'class' => 'oublog_deleteandemail_' . $post->id)); self::render_oublog_print_delete_dialog($cm->id, $post->id); } else { $output .= html_writer::tag('a', $strdelete, array('href' => $CFG->wwwroot . '/mod/oublog/deletepost.php?blog=' . $post->oublogid . '&post=' . $post->id . '&delete=1' . '&referurl=' . urlencode($referurl))); } } } // Show portfolio export link. if (!empty($CFG->enableportfolios) && (has_capability('mod/oublog:exportpost', $modcontext) || $post->userid == $USER->id && has_capability('mod/oublog:exportownpost', $modcontext))) { if (!$forexport && !$email) { require_once $CFG->libdir . '/portfoliolib.php'; $button = new portfolio_add_button(); $button->set_callback_options('oublog_portfolio_caller', array('postid' => $post->id), 'mod_oublog'); if (empty($files)) { $button->set_formats(PORTFOLIO_FORMAT_PLAINHTML); } else { $button->set_formats(PORTFOLIO_FORMAT_RICHHTML); } $output .= $button->to_html(PORTFOLIO_ADD_TEXT_LINK) . ' '; } } // Show OU Alerts reporting link. if (isloggedin() && oublog_oualerts_enabled() && oublog_get_reportingemail($oublog) && !($post->userid == $USER->id) && !$post->deletedby) { $itemnurl = new moodle_url('/mod/oublog/viewpost.php', array('post' => $post->id)); $reportlink = oualerts_generate_alert_form_url('oublog', $modcontext->id, 'post', $post->id, $itemnurl, $itemnurl, '', false, true); if ($reportlink != '' && !$forexport && !$email) { $output .= html_writer::tag('a', get_string('postalert', 'oublog'), array('href' => $reportlink)); } } // Show comments. if ($post->allowcomments) { // If this is the current user's post, show pending comments too. $showpendingcomments = $post->userid == $USER->id && !empty($post->pendingcomments); if ((isset($post->comments) || $showpendingcomments) && $commentcount) { // Show number of comments. if (isset($post->comments)) { $linktext = get_string(count($post->comments) == 1 ? 'onecomment' : 'ncomments', 'oublog', count($post->comments)); } // Show number of pending comments. if (isset($post->pendingcomments)) { // Use different string if we already have normal comments too. if (isset($post->comments)) { $linktext .= get_string($post->pendingcomments == 1 ? 'onependingafter' : 'npendingafter', 'oublog', $post->pendingcomments); } else { $linktext = get_string($post->pendingcomments == 1 ? 'onepending' : 'npending', 'oublog', $post->pendingcomments); } } if (!$forexport) { // Display link. $output .= html_writer::tag('a', $linktext, array('href' => $CFG->wwwroot . '/mod/oublog/viewpost.php?post=' . $post->id . '#oublogcomments')); } else { $output .= $linktext; } // Display information about most recent comment. if (isset($post->comments)) { $last = array_pop($post->comments); array_push($post->comments, $last); $a = new stdClass(); if ($last->userid) { $a->fullname = fullname($last); } else { $a->fullname = s($last->authorname); } $a->timeposted = oublog_date($last->timeposted, true); $output .= ' ' . get_string('lastcomment', 'oublog', $a); } } else { if (oublog_can_comment($cm, $oublog, $post)) { if (!$forexport && !$email) { $output .= html_writer::tag('a', $strcomment, array('href' => $CFG->wwwroot . '/mod/oublog/editcomment.php?blog=' . $post->oublogid . '&post=' . $post->id)); } } } } } $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); $output .= html_writer::end_tag('div'); return $output; }