123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- <?php
- // This file is part of Moodle - http://moodle.org/
- //
- // Moodle is free software: you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation, either version 3 of the License, or
- // (at your option) any later version.
- //
- // Moodle is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- // GNU General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
- /**
- * Competence Graph
- *
- * Competence graph format allows the visualization of courses with competencies in a graph.
- * In the course structure, teacher associates activities to competencies. Each course module
- * can have restrictions between them, so a module is opened only when the student accomplish
- * its requirements. In student visualization, the structure of the course is presented as a
- * graph. In such graph, each node is a resource available to the student that can be handled.
- * Subgraphs in the main graph represent competences. As students can have different paths in
- * the course, the plugin registers all the steps that a student produces.
- *
- * @package course/format
- * @subpackage competencegraph
- * @version 0.1
- * @author Laboratório de Informática na Educação <http://www.usp.br/line>
- * @link http://www.usp.br/line/competencegraph
- * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
- */
- defined('MOODLE_INTERNAL') || die();
- require_once($CFG->dirroot . '/course/format/lib.php'); // For format_base.
- class format_competencegraph extends format_base {
- // Used to determine the type of view URL to generate - parameter or anchor.
- private $coursedisplay = COURSE_DISPLAY_SINGLEPAGE;
- private $settings;
- public function __construct($format, $courseid) {
- if ($courseid === 0 || !is_numeric($courseid)) {
- global $COURSE;
- $courseid = $COURSE->id;
- }
- parent::__construct($format, $courseid);
- $section = optional_param('section', 0, PARAM_INT);
- if ($section) {
- $this->coursedisplay = COURSE_DISPLAY_MULTIPAGE;
- }
- }
- /**
- * Returns the format's settings and gets them if they do not exist.
- * @return type The settings as an array.
- */
- public function get_settings() {
- if (empty($this->settings) == true) {
- $this->settings = $this->get_format_options();
- }
- return $this->settings;
- }
- /**
- * Indicates this format uses sections.
- *
- * @return bool Returns false
- */
- public function uses_sections() {
- return false;
- }
- /**
- * The URL to use for the specified course (with section)
- *
- * @param int|stdClass $section Section object from database or just field course_sections.section
- * if omitted the course view page is returned
- * @param array $options options for view URL. At the moment core uses:
- * 'navigation' (bool) if true and section has no separate page, the function returns null
- * 'sr' (int) used by multipage formats to specify to which section to return
- * @return null|moodle_url
- */
- public function get_view_url($section, $options = array()) {
- $course = $this->get_course();
- $url = new moodle_url('/course/view.php', array('id' => $course->id));
- $sr = null;
- if (array_key_exists('sr', $options)) {
- $sr = $options['sr'];
- }
- if (is_object($section)) {
- $sectionno = $section->section;
- } else {
- $sectionno = $section;
- }
- if ($sectionno !== null) {
- if ($sr !== null) {
- if ($sr) {
- $usercoursedisplay = COURSE_DISPLAY_MULTIPAGE;
- $sectionno = $sr;
- } else {
- $usercoursedisplay = COURSE_DISPLAY_SINGLEPAGE;
- }
- } else {
- $usercoursedisplay = $this->coursedisplay;
- }
- if ($sectionno != 0 && $usercoursedisplay == COURSE_DISPLAY_MULTIPAGE) {
- $url->param('section', $sectionno);
- } else {
- global $CFG;
- if (empty($CFG->linkcoursesections) && !empty($options['navigation'])) { // MDL-57412.
- return null;
- }
- $url->set_anchor('section-' . $sectionno);
- }
- }
- return $url;
- }
- /**
- * Returns the information about the ajax support in the given source format
- *
- * The returned object's property (boolean)capable indicates that
- * the course format supports Moodle course ajax features.
- * The property (array)testedbrowsers can be used as a parameter for {@link ajaxenabled()}.
- *
- * @return stdClass
- */
- public function supports_ajax() {
- $ajaxsupport = new stdClass();
- $ajaxsupport->capable = true;
- return $ajaxsupport;
- }
- /**
- * Returns the list of blocks to be automatically added for the newly created course
- *
- * @return array of default blocks, must contain two keys BLOCK_POS_LEFT and BLOCK_POS_RIGHT
- * each of values is an array of block names (for left and right side columns)
- */
- public function get_default_blocks() {
- return array(
- BLOCK_POS_LEFT => array(),
- BLOCK_POS_RIGHT => array('search_forums', 'news_items', 'calendar_upcoming', 'recent_activity')
- );
- }
- private function get_context() {
- global $SITE;
- if ($SITE->id == $this->courseid) {
- // Use the context of the page which should be the course category.
- global $PAGE;
- return $PAGE->context;
- } else {
- return context_course::instance($this->courseid);
- }
- }
- /**
- * Indicates whether the course format supports the creation of a news forum.
- *
- * @return bool
- */
- public function supports_news() {
- return true;
- }
- /**
- * Returns whether this course format allows the activity to
- * have "triple visibility state" - visible always, hidden on course page but available, hidden.
- *
- * @param stdClass|cm_info $cm course module (may be null if we are displaying a form for adding a module)
- * @param stdClass|section_info $section section where this module is located or will be added to
- * @return bool
- */
- public function allow_stealth_module_visibility($cm, $section) {
- // Allow the third visibility state inside visible sections or in section 0, not allow in orphaned sections.
- return !$section->section || ($section->visible && $section->section <= $this->get_course()->numsections);
- }
- }
|