1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 namespace mod_forum\output; 18 19 use renderable; 20 use renderer_base; 21 use templatable; 22 use moodle_url; 23 use help_icon; 24 use mod_forum\local\entities\forum as forum_entity; 25 26 /** 27 * Render activity page for tertiary nav 28 * 29 * Render elements search forum, add new discussion button and subscribe all 30 * to the page action. 31 * 32 * @package mod_forum 33 * @copyright 2021 Sujith Haridasan <sujith@moodle.com> 34 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 35 */ 36 class forum_actionbar implements renderable, templatable { 37 /** 38 * @var forum_entity $forum 39 */ 40 private $forum; 41 42 /** 43 * @var \stdClass $course 44 */ 45 private $course; 46 47 /** 48 * @var mixed $groupid 49 */ 50 private $groupid; 51 52 /** 53 * @var string $search 54 */ 55 private $search; 56 57 /** 58 * forum_actionbar constructor. 59 * 60 * @param forum_entity $forum The forum object. 61 * @param \stdClass $course The course object. 62 * @param int|null $groupid The group id. 63 * @param string $search The search string. 64 */ 65 public function __construct(forum_entity $forum, \stdClass $course, ?int $groupid, string $search) { 66 $this->forum = $forum; 67 $this->course = $course; 68 $this->groupid = $groupid; 69 $this->search = $search; 70 } 71 72 /** 73 * Render the new discussion button. 74 * 75 * @return string HTML button 76 */ 77 private function get_new_discussion_topic_button(): string { 78 global $USER; 79 $renderfactory = \mod_forum\local\container::get_renderer_factory(); 80 $discussionrenderer = $renderfactory->get_discussion_list_renderer($this->forum); 81 return $discussionrenderer->render_new_discussion($USER, $this->groupid); 82 } 83 84 /** 85 * Data for the template. 86 * 87 * @param renderer_base $output The render_base object. 88 * @return array data for the template 89 */ 90 public function export_for_template(renderer_base $output): array { 91 global $USER; 92 $actionurl = (new moodle_url('/mod/forum/search.php'))->out(false); 93 $helpicon = new help_icon('search', 'core'); 94 $hiddenfields = [ 95 (object) ['name' => 'id', 'value' => $this->course->id], 96 ]; 97 $shownewdiscussionbtn = ''; 98 if ($this->forum->get_type() !== 'single') { 99 $shownewdiscussionbtn = $this->get_new_discussion_topic_button(); 100 } 101 $data = [ 102 'action' => $actionurl, 103 'hiddenfields' => $hiddenfields, 104 'query' => $this->search, 105 'helpicon' => $helpicon->export_for_template($output), 106 'inputname' => 'search', 107 'searchstring' => get_string('searchforums', 'mod_forum'), 108 'newdiscussionbtn' => $shownewdiscussionbtn, 109 ]; 110 111 $legacydatamapperfactory = \mod_forum\local\container::get_legacy_data_mapper_factory(); 112 $forumobject = $legacydatamapperfactory->get_forum_data_mapper()->to_legacy_object($this->forum); 113 $context = $this->forum->get_context(); 114 $activeenrolled = is_enrolled($context, $USER, '', true); 115 $canmanage = has_capability('mod/forum:managesubscriptions', $context); 116 $cansubscribe = $activeenrolled && !($this->forum->get_subscription_mode() === FORUM_FORCESUBSCRIBE) && 117 (!($this->forum->get_subscription_mode() === FORUM_DISALLOWSUBSCRIBE) || $canmanage); 118 if ($cansubscribe) { 119 $returnurl = 120 (new moodle_url('/mod/forum/view.php', ['id' => $this->forum->get_course_module_record()->id]))->out(false); 121 if (!\mod_forum\subscriptions::is_subscribed($USER->id, $forumobject, null, $this->forum->get_course_module_record())) { 122 $data['subscribetoforum'] = (new moodle_url( 123 '/mod/forum/subscribe.php', 124 ['id' => $forumobject->id, 'sesskey' => sesskey(), 'returnurl' => $returnurl] 125 ))->out(false); 126 } else { 127 $data['unsubscribefromforum'] = (new moodle_url( 128 '/mod/forum/subscribe.php', 129 ['id' => $forumobject->id, 'sesskey' => sesskey(), 'returnurl' => $returnurl] 130 ))->out(false); 131 } 132 } 133 return $data; 134 } 135 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body