コード例 #1
0
 public function display($forum)
 {
     $params = $forum->get_link_params_array();
     if ($forum->get_group_mode()) {
         $params['group'] = mod_forumng::get_activity_group($forum->get_course_module());
     }
     return parent::get_button($forum, get_string('markallread', 'forumngfeature_markallread'), 'markread.php', true, $params);
 }
コード例 #2
0
 public function get_form($discussion, $all, $selected = array())
 {
     global $CFG, $PAGE;
     foreach ($selected as $postid) {
         $params['selectd' . $postid] = $postid;
     }
     $params['id'] = $discussion->get_course_module_id();
     $params['group'] = mod_forumng::get_activity_group($discussion->get_course_module());
     $params['clone'] = optional_param('clone', 0, PARAM_INT);
     $params['fromselect'] = true;
     $customdata = array('params' => $params, 'isdiscussion' => false, 'edit' => false, 'ispost' => true, 'islock' => true, 'post' => null, 'isroot' => true, 'forum' => $discussion);
     return new mod_forumng_editpost_form('lockall.php', $customdata);
 }
コード例 #3
0
 public function get_form($forum, $all, $selected = array())
 {
     global $CFG, $PAGE;
     foreach ($selected as $discussionid) {
         $params['selectd' . $discussionid] = $discussionid;
     }
     $params['id'] = $forum->get_course_module_id();
     $params['clone'] = optional_param('clone', 0, PARAM_INT);
     $group = mod_forumng::get_activity_group($forum->get_course_module());
     if (empty($group)) {
         $group = 0;
     }
     $params['group'] = $group;
     $params['multigroups'] = optional_param('multigroups', 0, PARAM_INT);
     $customdata = array('params' => $params, 'forum' => $forum);
     return new mod_forumng_moveall_form('movealltogroups.php', $customdata);
 }
コード例 #4
0
 */
require_once '../../../../config.php';
require_once $CFG->dirroot . '/mod/forumng/mod_forumng.php';
require_once $CFG->dirroot . '/mod/forumng/feature/usage/locallib.php';
$cmid = required_param('id', PARAM_INT);
$cloneid = optional_param('clone', 0, PARAM_INT);
$ratings = optional_param('ratings', 0, PARAM_INT);
$pageparams = array('id' => $cmid);
if ($cloneid) {
    $pageparams['clone'] = $cloneid;
}
$forum = mod_forumng::get_from_cmid($cmid, $cloneid);
$course = $forum->get_course();
$cm = $forum->get_course_module();
$context = $forum->get_context();
$groupid = mod_forumng::get_activity_group($cm, true);
if ($groupid != mod_forumng::NO_GROUPS && $groupid != mod_forumng::ALL_GROUPS) {
    $pageparams['group'] = $groupid;
    $groupwhere = 'AND (fd.groupid = ? OR fd.groupid IS NULL)';
    $groupparams = array($groupid);
} else {
    $groupwhere = '';
    $groupparams = array();
}
$ajaxparams = $pageparams;
// Check access.
$forum->require_view($groupid);
require_capability('forumngfeature/usage:view', $forum->get_context());
// Print page header.
$thisurl = new moodle_url('/mod/forumng/feature/usage/usage.php', $pageparams);
$mainrenderer = $forum->init_page($thisurl, get_string('title', 'forumngfeature_usage'));
コード例 #5
0
    redirect('../../view.php?' . $forum->get_link_params(mod_forumng::PARAM_PLAIN));
}
$targetgroup = optional_param('group', 0, PARAM_INT);
$target = optional_param('forum', 0, PARAM_INT);
if ($target == 0) {
    $target = required_param('target', PARAM_INT);
}
$targetforum = mod_forumng::get_from_cmid($target, mod_forumng::CLONE_DIRECT);
// Sets up chosen target group.
$chosentargetgroup = optional_param('chosengroup', 0, PARAM_INT);
if (!$targetgroup) {
    $targetgroup = $chosentargetgroup;
}
if (!$targetgroup) {
    $cm = $forum->get_course_module();
    $targetgroup = mod_forumng::get_activity_group($cm, false);
}
// Security check against user and their capabilities.
$forum->require_view($targetgroup);
check_move_permissions($forum, $targetforum);
// If it is a clone, find the original.
$targetforum = $targetforum->get_real_forum();
$targetgroupmode = $targetforum->get_group_mode();
// Get selected ids.
$selectedids = array();
foreach ($_POST as $field => $value) {
    $matches = array();
    if (!is_array($value) && (string) $value !== '0' && preg_match('~^selectd([0-9]+)$~', $field, $matches)) {
        $selectedids[] = $matches[1];
    }
}
コード例 #6
0
 /**
  * Display subscribe options.
  * @param mod_forumng $forum Forum
  * @param string $text Textual note
  * @param int $subscribed
  * @param bool $button True if subscribe/unsubscribe button should be shown
  * @param bool $viewlink True if 'view subscribers' link should be shown
  * @return string HTML code for this area
  */
 public function render_subscribe_options($forum, $text, $subscribed, $button, $viewlink)
 {
     $out = '<div class="forumng-subscribe-options">' . '<h3>' . get_string('subscription', 'forumng') . '</h3>' . '<p>' . $text . '</p>';
     $cm = $forum->get_course_module();
     if ($button) {
         $outsubmit = '';
         $currentgroupid = mod_forumng::get_activity_group($cm, true);
         if ($currentgroupid == mod_forumng::NO_GROUPS) {
             $currentgroupid = 0;
         }
         if ($subscribed == mod_forumng::FULLY_SUBSCRIBED || $subscribed == mod_forumng::FULLY_SUBSCRIBED_GROUPMODE) {
             $outsubmit .= '<input type="submit" name="submitunsubscribe" value="' . get_string('unsubscribeshort', 'forumng') . '" />';
         } else {
             if ($subscribed == mod_forumng::PARTIALLY_SUBSCRIBED) {
                 // Print both subscribe button and unsubscribe button.
                 $outsubmit .= '<input type="submit" name="submitsubscribe" value="' . get_string('subscribelong', 'forumng') . '" />' . '<input type="submit" name="submitunsubscribe" value="' . get_string('unsubscribelong', 'forumng') . '" />';
             } else {
                 if ($subscribed == mod_forumng::NOT_SUBSCRIBED) {
                     // Default unsubscribed, print subscribe button.
                     $outsubmit .= '<input type="submit" name="submitsubscribe" value="' . get_string('subscribeshort', 'forumng') . '" />';
                 } else {
                     if ($subscribed == mod_forumng::THIS_GROUP_PARTIALLY_SUBSCRIBED) {
                         $outsubmit .= '<input type="submit" name="submitsubscribe_thisgroup" value="' . get_string('subscribegroup', 'forumng') . '" />' . '<input type="submit" name="submitunsubscribe_thisgroup" value="' . get_string('unsubscribegroup_partial', 'forumng') . '" />' . '<input type="hidden" name="g" value="' . $currentgroupid . '" />';
                     } else {
                         if ($subscribed == mod_forumng::THIS_GROUP_SUBSCRIBED) {
                             $outsubmit .= '<input type="submit" name="submitunsubscribe_thisgroup" value="' . get_string('unsubscribegroup', 'forumng') . '" />' . '<input type="hidden" name="g" value="' . $currentgroupid . '" />';
                         } else {
                             if ($subscribed == mod_forumng::THIS_GROUP_NOT_SUBSCRIBED) {
                                 $outsubmit .= '<input type="submit" name="submitsubscribe_thisgroup" value="' . get_string('subscribegroup', 'forumng') . '" />' . '<input type="hidden" name="g" value="' . $currentgroupid . '" />';
                             }
                         }
                     }
                 }
             }
         }
         $out .= '&nbsp;<form action="subscribe.php" method="post"><div>' . $forum->get_link_params(mod_forumng::PARAM_FORM) . '<input type="hidden" name="back" value="view" />' . $outsubmit . '</div></form>';
     }
     if ($subscribed != mod_forumng::NOT_SUBSCRIBED) {
         $out .= $this->render_subscribe_info($forum->get_context());
     }
     if ($viewlink) {
         $out .= ' <div class="forumng-subscribe-admin">' . '<a href="subscribers.php?' . $forum->get_link_params(mod_forumng::PARAM_HTML) . '">' . get_string('viewsubscribers', 'forumng') . '</a></div>';
     }
     $out .= '</div>';
     return $out;
 }
コード例 #7
0
                $canunsubscribesomething = true;
                $submitbutton = "<input type='submit' name='submitunsubscribe'\n                        value='{$strunsubscribe}'/>";
            } else {
                $cansubscribesomething = true;
                $submitbutton = "<input type='submit' name='submitsubscribe'\n                        value='{$strsubscribe}'/>";
            }
            $subscribetext .= "&nbsp;" . "<form method='post' action='subscribe.php'><div>" . $forum->get_link_params(mod_forumng::PARAM_FORM) . "<input type='hidden' name='back' value='index' />" . $submitbutton . "</div></form>";
        }
        $subscribetext .= '</div>';
        $row[] = $subscribetext;
    }
    // If this forum has RSS/Atom feeds, show link
    if ($showrss) {
        if ($type = $forum->get_effective_feed_option()) {
            // Get group (may end up being none)
            $groupid = mod_forumng::get_activity_group($forum->get_course_module(), false);
            $row[] = $forum->display_feed_links($groupid);
        } else {
            $row[] = '&nbsp;';
        }
    }
    $table->data[] = $row;
}
print html_writer::table($table);
// 'Subscribe all' links
if ($canmaybesubscribe) {
    print '<div class="forumng-allsubscribe">';
    $subscribedisabled = $cansubscribesomething ? '' : 'disabled="disabled"';
    $unsubscribedisabled = $canunsubscribesomething ? '' : 'disabled="disabled"';
    print "<form method='post' action='subscribe.php'><div>" . "<input type='hidden' name='course' value='{$course->id}' />" . "<input type='hidden' name='back' value='index' />" . "<input type='submit' name='submitsubscribe' value='" . get_string('allsubscribe', 'forumng') . "' {$subscribedisabled}/>" . "<input type='submit' name='submitunsubscribe' value='" . get_string('allunsubscribe', 'forumng') . "' {$unsubscribedisabled}/>" . "</div></form> ";
    print '</div>';
コード例 #8
0
 /**
  * Checks forum object created in test_get_forum()
  * In function so same tests can be carried out on multiple forum setups
  * @param object $forum
  * @param object $course
  * @param object $cm
  */
 private function check_forum_settings(mod_forumng $forum, $course, $cm)
 {
     $this->assertEquals('TEST', $forum->get_name());
     $this->assertEquals('abc123', $forum->get_intro());
     $this->assertEquals('abc123', $forum->get_intro(true));
     // Pick up errors in abbreviation.
     $this->assertEquals(FORMAT_MOODLE, $forum->get_intro_format());
     $this->assertEquals($cm->instance, $forum->get_id());
     $this->assertEquals($course->id, $forum->get_course_id());
     $this->assertEquals($course->id, $forum->get_course()->id);
     $this->assertEquals($cm->id, $forum->get_course_module_id());
     $this->assertEquals(mod_forumng::NO_GROUPS, $forum->get_activity_group($cm));
     $context = context_module::instance($cm->id);
     $this->assertEquals($context->id, $forum->get_context()->id);
     $this->assertInstanceOf('forumngtype', $forum->get_type());
 }
コード例 #9
0
 public function load_data()
 {
     global $DB, $COURSE;
     // Load base data
     $this->load_base_data($this->forumngid);
     // Get all files used in the discussions.
     if ($this->discussionids == '') {
         // Fallback in case nothing sent - get every discussion in forum!
         $this->discussionids = array();
         $groupid = mod_forumng::get_activity_group($this->cm, true);
         if ($groupid == -1) {
             $groupid = null;
         }
         $discussions = $DB->get_records('forumng_discussions', array('forumngid' => $this->cm->instance, 'groupid' => $groupid), '', 'id, postid');
         foreach ($discussions as $discussionrec) {
             if (!$discussionrec->postid) {
                 continue;
             }
             $discussion = mod_forumng_discussion::get_from_id($discussionrec->id, $this->cloneid);
             if ($discussion->can_view()) {
                 $this->discussionids[] = $discussion->get_id();
             }
         }
     } else {
         $this->posts = $this->discussionids;
         // Set so decode works.
         $this->discussionids = $this->decode_string_to_array();
         $this->posts = '';
     }
     if (empty($this->discussionids)) {
         throw new moodle_exception('exportallnodisc', 'forumngfeature_export', $this->get_return_url());
     }
     foreach ($this->discussionids as $discussionid) {
         $this->discussionid = $discussionid;
         $this->add_files();
     }
 }
 /**
  * This function handles all aspects of page processing and then calls
  * methods in $selector at the appropriate moments.
  * @param post_selector $selector Object that extends this base class
  */
 public static function go($selector)
 {
     global $PAGE, $FULLME, $SESSION;
     $id = required_param('id', PARAM_INT);
     $cloneid = optional_param('clone', 0, PARAM_INT);
     $fromselect = optional_param('fromselect', 0, PARAM_INT);
     $all = optional_param('all', '', PARAM_RAW);
     $select = optional_param('select', '', PARAM_RAW);
     $isform = optional_param('postselectform', 0, PARAM_INT);
     $PAGE->set_url($FULLME);
     // Get basic objects.
     $forum = mod_forumng::get_from_cmid($id, $cloneid);
     $forumngid = $forum->get_id();
     $params = array_merge($_REQUEST, $forum->get_link_params_array());
     if (optional_param('cancel', '', PARAM_RAW)) {
         // CALL TYPE 6.
         redirect('../../view.php?' . $forum->get_link_params(mod_forumng::PARAM_PLAIN));
     }
     $cm = $forum->get_course_module();
     $course = $forum->get_course();
     $groupid = mod_forumng::get_activity_group($cm, true);
     // Page name and permissions.
     $pagename = $selector->get_page_name();
     $buttonname = $selector->get_button_name();
     $forum->require_view($groupid);
     $selector->require_capability($forum->get_context(), $forum);
     if (!($fromselect || $isform || $all)) {
         // Either an initial request (non-JS) to display the 'dialog' box,
         // or a request to show the list of posts with checkboxes for selection.
         // Both types share same navigation.
         $out = $forum->init_page(new moodle_url('/mod/forumng/view.php', $forum->get_link_params_array()));
         print $out->header();
         if (!$select) {
             // Show initial dialog.
             print $out->box_start();
             print html_writer::tag('h2', $buttonname);
             print html_writer::start_tag('form', array('action' => $_SERVER['PHP_SELF'], 'method' => 'get', 'id' => 'discsel'));
             print html_writer::start_tag('div');
             foreach ($params as $param => $paramval) {
                 print html_writer::empty_tag('input', array('name' => $param, 'type' => 'hidden', 'value' => $paramval));
             }
             print html_writer::tag('p', get_string('selectordiscall', 'forumng'));
             print html_writer::start_tag('div', array('class' => 'forumng-buttons'));
             print html_writer::empty_tag('input', array('name' => 'all', 'type' => 'submit', 'value' => get_string('selectoralldisc', 'forumng')));
             print html_writer::empty_tag('input', array('name' => 'select', 'type' => 'submit', 'value' => get_string('selectorselecteddisc', 'forumng')));
             print html_writer::empty_tag('input', array('name' => 'cancel', 'type' => 'submit', 'value' => get_string('cancel')));
             print html_writer::end_tag('div');
             print html_writer::end_tag('div');
             print html_writer::end_tag('form');
             print $out->box_end();
         } else {
             // Show list of posts to select.
             print html_writer::start_tag('div', array('class' => 'forumng-selectintro'));
             print html_writer::tag('p', get_string('selectdiscintro', 'forumng'));
             print html_writer::end_tag('div');
             print html_writer::start_tag('form', array('action' => $_SERVER['PHP_SELF'], 'method' => 'post', 'id' => 'discsel'));
             print html_writer::start_tag('div');
             print $forum->get_link_params(mod_forumng::PARAM_FORM);
             print html_writer::empty_tag('input', array('type' => 'hidden', 'name' => 'fromselect', 'value' => '1'));
             foreach ($params as $param => $paramval) {
                 print html_writer::empty_tag('input', array('name' => $param, 'type' => 'hidden', 'value' => $paramval));
             }
             // Now show discussions, allow for override at type level if following is no good.
             if (method_exists($forum->get_type(), 'print_select_page')) {
                 print $forum->get_type()->print_select_page($forum, $groupid);
             } else {
                 // Use default processing, get view and hack in selectors.
                 ob_start();
                 $forum->get_type()->print_view_page($forum, $groupid);
                 $discussionhtml = ob_get_contents();
                 ob_end_clean();
                 // Try and hack into the discussion list - must be xhtml...
                 $doc = new DOMDocument('1.0', 'utf-8');
                 @$doc->loadHTML($discussionhtml);
                 $docnew = new DOMDocument('1.0', 'utf-8');
                 $xpath = new DOMXPath($doc);
                 $lists = $xpath->query("//table[contains(concat(' ',normalize-space(@class),' '),' forumng-discussionlist ')]");
                 // Remove all links.
                 foreach ($lists as $list) {
                     $links = $xpath->query("//a|//form", $list);
                     foreach ($links as $node) {
                         if ($node->nodeName == 'a') {
                             // Disable links.
                             $node->removeAttribute('href');
                         } else {
                             // Remove any forms.
                             $node->parentNode->removeChild($node);
                         }
                     }
                     // Add in discussion select.
                     $rows = $xpath->query("//table[@class='generaltable forumng-discussionlist']\n                                //tr[not(@class) or @class!='forumng-divider']", $list);
                     for ($a = 0, $len = $rows->length; $a < $len; $a++) {
                         // Add in select options for each row, checking types.
                         $row = $rows->item($a);
                         if ($a == 0) {
                             $newcell = $doc->createElement('th', get_string('selectorselectdisc', 'mod_forumng'));
                             $newcell->setAttribute('class', 'header');
                             $newcell->setAttribute('scope', 'col');
                             $row->appendChild($newcell);
                         } else {
                             $id = $row->getAttribute('id');
                             if (strpos($id, 'discrow') === false) {
                                 continue;
                             }
                             // Get discussion id from row id as added by renderer.
                             $id = str_replace('discrow_', '', $id);
                             // Check if we include checkbox or not.
                             $classar = explode(' ', $row->getAttribute('class'));
                             $includematches = array_intersect($selector->only_discussion_types(), $classar);
                             $excludematches = array_intersect($selector->exclude_discussion_types(), $classar);
                             if ((count($selector->only_discussion_types()) == 0 || count($includematches) > 0) && count($excludematches) == 0) {
                                 // OK to include, add checkbox and label.
                                 $select = $doc->createElement('input');
                                 $select->setAttribute('type', 'checkbox');
                                 $select->setAttribute('name', "selectd{$id}");
                                 $select->setAttribute('id', "selectd{$id}");
                                 $label = $doc->createElement('label', get_string('selectorselectdisc', 'mod_forumng'));
                                 $label->setAttribute('for', "selectd{$id}");
                                 $label->setAttribute('class', 'accesshide');
                                 $newcell = $doc->createElement('td');
                                 $newcell->setAttribute('class', 'dselect');
                                 $newcell->appendChild($select);
                                 $newcell->appendChild($label);
                                 $row->appendChild($newcell);
                             } else {
                                 $newcell = $doc->createElement('td', '&nbsp;');
                                 $row->appendChild($newcell);
                             }
                         }
                     }
                     // Keep only discussion list by moving to new xml doc.
                     $newnode = $docnew->importNode($list, true);
                     $docnew->appendChild($newnode);
                 }
                 print $docnew->saveHTML();
             }
             print html_writer::start_tag('div', array('class' => 'forumng-selectoutro'));
             print html_writer::empty_tag('input', array('type' => 'submit', 'value' => get_string('confirmselection', 'forumng')));
             print html_writer::empty_tag('input', array('type' => 'submit', 'name' => 'cancel', 'value' => get_string('cancel')));
             print html_writer::end_tag('div');
             print html_writer::end_tag('div');
             print html_writer::end_tag('form');
         }
         // Display footer.
         print $out->footer();
     } else {
         // Call types 3, 4, and 5 use the form (and may include list of postids).
         $postids = array();
         $selectedids = array();
         foreach ($_POST as $field => $value) {
             $matches = array();
             if (!is_array($value) && (string) $value !== '0' && preg_match('~^selectd([0-9]+)$~', $field, $matches)) {
                 $selectedids[] = $matches[1];
             }
         }
         if (!empty($selectedids)) {
             // Check access.
             foreach ($selectedids as $id) {
                 $discuss = mod_forumng_discussion::get_from_id($id, $cloneid);
                 if ($forum->get_type()->can_view_discussion($discuss)) {
                     $postids[] = $id;
                 }
             }
         } else {
             if (!$all) {
                 // No slections made.
                 redirect('../../view.php?' . $forum->get_link_params(mod_forumng::PARAM_PLAIN));
             }
             // Work out discussion list for this page (e.g. selected All).
             $sortorder = optional_param('sort', 'd', PARAM_ALPHA);
             if (isset($SESSION->forumng_discussionlist[$forumngid]->sort)) {
                 $sortorder = $SESSION->forumng_discussionlist[$forumngid]->sort;
             }
             $page = optional_param('page', 1, PARAM_INT);
             if (isset($SESSION->forumng_discussionlist[$forumngid]->page)) {
                 $page = $SESSION->forumng_discussionlist[$forumngid]->page;
             }
             $sortchar = substr($sortorder, 0, 1);
             if (strlen($sortorder) == 2) {
                 $sortreverse = substr($sortorder, 1, 1) == 'r' ? true : false;
             } else {
                 $sortreverse = false;
             }
             $sort = mod_forumng::get_sort_code($sortchar);
             $list = $forum->get_discussion_list($groupid, $forum->can_view_hidden(), $page, $sort, $sortreverse);
             $discussionsarr = array_merge($list->get_sticky_discussions(), $list->get_normal_discussions());
             // Double check ID is valid and user can view.
             for ($a = 0; $a < count($discussionsarr); $a++) {
                 if ($forum->get_type()->can_view_discussion($discussionsarr[$a])) {
                     $postids[] = $discussionsarr[$a]->get_id();
                 }
             }
         }
         $out = $forum->init_page(new moodle_url('/mod/forumng/view.php', $forum->get_link_params_array()), $pagename);
         // Get form to use.
         $mform = $selector->get_form($forum, $all, $postids);
         if (!$mform) {
             // Some options do not need a confirmation form; in that case,
             // just apply the action immediately.
             $selector->apply($forum, $all, $postids, null);
             exit;
         }
         // Check cancel.
         if ($mform->is_cancelled()) {
             redirect('../../view.php?' . $forum->get_link_params(mod_forumng::PARAM_PLAIN));
         }
         if ($fromform = $mform->get_data()) {
             // User submitted form to confirm process, which should now be
             // applied by selector.
             $selector->apply($forum, $all, $postids, $fromform);
             exit;
         } else {
             print $out->header();
             // User requested form either via JavaScript or the other way, and
             // either with all messages or the whole discussion.
             // Print form.
             print $mform->display();
             // Print optional content that goes after form.
             print $selector->get_content_after_form($forum, $all, $postids, $fromform);
             // Display footer.
             print $out->footer();
         }
     }
 }