Пример #1
0
/**
 * Moves a section within a course, from a position to another.
 * Be very careful: $section and $destination refer to section number,
 * not id!.
 *
 * @param object $course
 * @param int $section Section number (not id!!!)
 * @param int $destination
 * @return boolean Result
 */
function move_section_to($course, $section, $destination)
{
    /// Moves a whole course section up and down within the course
    global $USER, $DB;
    if (!$destination && $destination != 0) {
        return true;
    }
    if ($destination > $course->numsections) {
        return false;
    }
    // Get all sections for this course and re-order them (2 of them should now share the same section number)
    if (!($sections = $DB->get_records_menu('course_sections', array('course' => $course->id), 'section ASC, id ASC', 'id, section'))) {
        return false;
    }
    $movedsections = reorder_sections($sections, $section, $destination);
    // Update all sections. Do this in 2 steps to avoid breaking database
    // uniqueness constraint
    $transaction = $DB->start_delegated_transaction();
    foreach ($movedsections as $id => $position) {
        if ($sections[$id] !== $position) {
            $DB->set_field('course_sections', 'section', -$position, array('id' => $id));
        }
    }
    foreach ($movedsections as $id => $position) {
        if ($sections[$id] !== $position) {
            $DB->set_field('course_sections', 'section', $position, array('id' => $id));
        }
    }
    // Adjust destination to reflect the actual section
    $moveup = false;
    if ($section > $destination) {
        $destination++;
        $moveup = true;
    }
    // If we move the highlighted section itself, then just highlight the destination.
    // Adjust the higlighted section location if we move something over it either direction.
    if ($section == $course->marker) {
        course_set_marker($course, $destination);
    } elseif ($moveup && $section > $course->marker && $course->marker >= $destination) {
        course_set_marker($course, $course->marker + 1);
    } elseif (!$moveup && $section < $course->marker && $course->marker <= $destination) {
        course_set_marker($course, $course->marker - 1);
    }
    // if the focus is on the section that is being moved, then move the focus along
    if (course_get_display($course->id) == $section) {
        course_set_display($course->id, $destination);
    }
    $transaction->allow_commit();
    return true;
}
Пример #2
0
 /**
  * Generically loads the course sections into the course's navigation.
  *
  * @param stdClass $course
  * @param navigation_node $coursenode
  * @param string $courseformat The course format
  * @return array An array of course section nodes
  */
 public function load_generic_course_sections(stdClass $course, navigation_node $coursenode, $courseformat = 'unknown')
 {
     global $CFG, $DB, $USER;
     require_once $CFG->dirroot . '/course/lib.php';
     list($sections, $activities) = $this->generate_sections_and_activities($course);
     $namingfunction = 'callback_' . $courseformat . '_get_section_name';
     $namingfunctionexists = function_exists($namingfunction);
     $viewhiddensections = has_capability('moodle/course:viewhiddensections', $this->page->context);
     $urlfunction = 'callback_' . $courseformat . '_get_section_url';
     if (empty($CFG->navlinkcoursesections) || !function_exists($urlfunction)) {
         $urlfunction = null;
     }
     $keyfunction = 'callback_' . $courseformat . '_request_key';
     $key = course_get_display($course->id);
     if (defined('AJAX_SCRIPT') && AJAX_SCRIPT == '0' && function_exists($keyfunction) && $this->page->url->compare(new moodle_url('/course/view.php'), URL_MATCH_BASE)) {
         $key = optional_param($keyfunction(), $key, PARAM_INT);
     }
     $navigationsections = array();
     foreach ($sections as $sectionid => $section) {
         $section = clone $section;
         if ($course->id == SITEID) {
             $this->load_section_activities($coursenode, $section->section, $activities);
         } else {
             if (!$viewhiddensections && !$section->visible || !$this->showemptysections && !$section->hasactivites) {
                 continue;
             }
             if ($namingfunctionexists) {
                 $sectionname = $namingfunction($course, $section, $sections);
             } else {
                 $sectionname = get_string('section') . ' ' . $section->section;
             }
             $url = null;
             if (!empty($urlfunction)) {
                 $url = $urlfunction($course->id, $section->section);
             }
             $sectionnode = $coursenode->add($sectionname, $url, navigation_node::TYPE_SECTION, null, $section->id);
             $sectionnode->nodetype = navigation_node::NODETYPE_BRANCH;
             $sectionnode->hidden = !$section->visible;
             if ($key != '0' && $section->section != '0' && $section->section == $key && $this->page->context->contextlevel != CONTEXT_MODULE && $section->hasactivites) {
                 $sectionnode->make_active();
                 $this->load_section_activities($sectionnode, $section->section, $activities);
             }
             $section->sectionnode = $sectionnode;
             $navigationsections[$sectionid] = $section;
         }
     }
     return $navigationsections;
 }
Пример #3
0
/**
 * Moves a section within a course, from a position to another.
 * Be very careful: $section and $destination refer to section number,
 * not id!.
 *
 * @param object $course
 * @param int $section Section number (not id!!!)
 * @param int $destination
 * @return boolean Result
 */
function move_section_to($course, $section, $destination)
{
    /// Moves a whole course section up and down within the course
    global $USER, $DB;
    if (!$destination && $destination != 0) {
        return true;
    }
    if ($destination > $course->numsections) {
        return false;
    }
    // Get all sections for this course and re-order them (2 of them should now share the same section number)
    if (!($sections = $DB->get_records_menu('course_sections', array('course' => $course->id), 'section ASC, id ASC', 'id, section'))) {
        return false;
    }
    $sections = reorder_sections($sections, $section, $destination);
    // Update all sections
    foreach ($sections as $id => $position) {
        $DB->set_field('course_sections', 'section', $position, array('id' => $id));
    }
    // if the focus is on the section that is being moved, then move the focus along
    if (course_get_display($course->id) == $section) {
        course_set_display($course->id, $destination);
    }
    return true;
}
Пример #4
0
    /**
     * Generically loads the course sections into the course's navigation.
     *
     * @param stdClass $course
     * @param navigation_node $coursenode
     * @param string $name The string that identifies each section. e.g Topic, or Week
     * @param string $activeparam The url used to identify the active section
     * @return array An array of course section nodes
     */
    public function load_generic_course_sections(stdClass $course, navigation_node $coursenode, $courseformat='unknown') {
        global $CFG, $DB, $USER;

        require_once($CFG->dirroot.'/course/lib.php');

        if (!$this->cache->cached('modinfo'.$course->id)) {
            $this->cache->set('modinfo'.$course->id, get_fast_modinfo($course));
        }
        $modinfo = $this->cache->{'modinfo'.$course->id};

        if (!$this->cache->cached('coursesections'.$course->id)) {
            $this->cache->set('coursesections'.$course->id, array_slice(get_all_sections($course->id), 0, $course->numsections+1, true));
        }
        $sections = $this->cache->{'coursesections'.$course->id};

        $viewhiddensections = has_capability('moodle/course:viewhiddensections', $this->page->context);

        $activesection = course_get_display($course->id);

        $namingfunction = 'callback_'.$courseformat.'_get_section_name';
        $namingfunctionexists = (function_exists($namingfunction));

        $activeparamfunction = 'callback_'.$courseformat.'_request_key';
        if (function_exists($activeparamfunction)) {
            $activeparam = $activeparamfunction();
        } else {
            $activeparam = 'section';
        }
        $navigationsections = array();
        foreach ($sections as $sectionid=>$section) {
            $section = clone($section);
            if ($course->id == SITEID) {
                $this->load_section_activities($coursenode, $section->section, $modinfo);
            } else {
                if ((!$viewhiddensections && !$section->visible) || (!$this->showemptysections && !array_key_exists($section->section, $modinfo->sections))) {
                    continue;
                }
                if ($namingfunctionexists) {
                    $sectionname = $namingfunction($course, $section, $sections);
                } else {
                    $sectionname = get_string('section').' '.$section->section;
                }
                //$url = new moodle_url('/course/view.php', array('id'=>$course->id));
                $url = null;
                $sectionnode = $coursenode->add($sectionname, $url, navigation_node::TYPE_SECTION, null, $section->id);
                $sectionnode->nodetype = navigation_node::NODETYPE_BRANCH;
                $sectionnode->hidden = (!$section->visible);
                if ($this->page->context->contextlevel != CONTEXT_MODULE && ($sectionnode->isactive || ($activesection && $section->section == $activesection))) {
                    $sectionnode->force_open();
                    $this->load_section_activities($sectionnode, $section->section, $modinfo);
                }
                $section->sectionnode = $sectionnode;
                $navigationsections[$sectionid] = $section;
            }
        }
        return $navigationsections;
    }
 * http://www.maxdesign.com.au/presentation/em/ Ideal length for content.
 * http://www.svendtofte.com/code/max_width_in_ie/ Max width in IE.
 *
 * @copyright &copy; 2006 The Open University
 * @author N.D.Freear@open.ac.uk, and others.
 * @license http://www.gnu.org/copyleft/gpl.html GNU Public License
 * @package
 */
defined('MOODLE_INTERNAL') || die;
require_once $CFG->libdir . '/filelib.php';
require_once $CFG->libdir . '/completionlib.php';
$topic = optional_param('topic', -1, PARAM_INT);
if ($topic != -1) {
    $displaysection = course_set_display($course->id, $topic);
} else {
    $displaysection = course_get_display($course->id);
}
$context = get_context_instance(CONTEXT_COURSE, $course->id);
if ($marker >= 0 && has_capability('moodle/course:setcurrentsection', $context) && confirm_sesskey()) {
    $course->marker = $marker;
    $DB->set_field("course", "marker", $marker, array("id" => $course->id));
}
$streditsummary = get_string('editsummary');
$stradd = get_string('add');
$stractivities = get_string('activities');
$strshowalltopics = get_string('showalltopics');
$strtopic = get_string('topic');
$strgroups = get_string('groups');
$strgroupmy = get_string('groupmy');
$editing = $PAGE->user_is_editing();
if ($editing) {
Пример #6
0
 /**
  * Generically loads the course sections into the course's navigation.
  *
  * @param stdClass $course
  * @param navigation_node $coursenode
  * @param string $courseformat The course format
  * @return array An array of course section nodes
  */
 public function load_generic_course_sections(stdClass $course, navigation_node $coursenode, $courseformat = 'unknown')
 {
     global $CFG, $DB, $USER;
     require_once $CFG->dirroot . '/course/lib.php';
     list($sections, $activities) = $this->generate_sections_and_activities($course);
     $namingfunction = 'callback_' . $courseformat . '_get_section_name';
     $namingfunctionexists = function_exists($namingfunction);
     $activesection = course_get_display($course->id);
     $viewhiddensections = has_capability('moodle/course:viewhiddensections', $this->page->context);
     $navigationsections = array();
     foreach ($sections as $sectionid => $section) {
         $section = clone $section;
         if ($course->id == SITEID) {
             $this->load_section_activities($coursenode, $section->section, $activities);
         } else {
             if (!$viewhiddensections && !$section->visible || !$this->showemptysections && !$section->hasactivites) {
                 continue;
             }
             if ($namingfunctionexists) {
                 $sectionname = $namingfunction($course, $section, $sections);
             } else {
                 $sectionname = get_string('section') . ' ' . $section->section;
             }
             //$url = new moodle_url('/course/view.php', array('id'=>$course->id));
             $url = null;
             $sectionnode = $coursenode->add($sectionname, $url, navigation_node::TYPE_SECTION, null, $section->id);
             $sectionnode->nodetype = navigation_node::NODETYPE_BRANCH;
             $sectionnode->hidden = !$section->visible;
             if ($this->page->context->contextlevel != CONTEXT_MODULE && $section->hasactivites && ($sectionnode->isactive || $activesection && $section->section == $activesection)) {
                 $sectionnode->force_open();
                 $this->load_section_activities($sectionnode, $section->section, $activities);
             }
             $section->sectionnode = $sectionnode;
             $navigationsections[$sectionid] = $section;
         }
     }
     return $navigationsections;
 }
 /**
  * specialization
  */
 function specialization()
 {
     global $COURSE, $DB, $USER, $displaysection, $section;
     // set default config values
     $defaults = array('title' => get_string('defaulttitle', 'block_taskchain_navigation'), 'showcourse' => 0, 'coursenamefield' => 'shortname', 'coursenametext' => '', 'coursegradeposition' => 0, 'minimumdepth' => 0, 'maximumdepth' => 0, 'categoryskipempty' => 0, 'categoryskiphidden' => 0, 'categoryskipzeroweighted' => 0, 'categorycollapse' => 0, 'categoryshortnames' => 0, 'categoryshowweighting' => 0, 'categoryignorechars' => '', 'categoryprefixlength' => 0, 'categoryprefixchars' => '', 'categoryprefixlong' => 0, 'categoryprefixkeep' => 0, 'categorysuffixlength' => 0, 'categorysuffixchars' => '', 'categorysuffixlong' => 0, 'categorysuffixkeep' => 0, 'sectionshowhidden' => 2, 'sectionshowburied' => 0, 'sectionshowungraded' => 0, 'sectionshowzeroweighted' => 0, 'sectionshowuncategorized' => 0, 'sectiontitletags' => '', 'sectionshorttitles' => 0, 'sectionignorecase' => 0, 'sectionignorechars' => '', 'sectionprefixlength' => 0, 'sectionprefixchars' => '', 'sectionprefixlong' => 0, 'sectionprefixkeep' => 0, 'sectionsuffixlength' => 0, 'sectionsuffixchars' => '', 'sectionsuffixlong' => 0, 'sectionsuffixkeep' => 0, 'gradedisplay' => 1, 'showaverages' => 1, 'highgrade' => 90, 'mediumgrade' => 60, 'lowgrade' => 0, 'showactivitygrades' => '', 'sectionjumpmenu' => 1, 'sectionnumbers' => 1, 'singlesection' => 1, 'defaultsection' => 1, 'arrowup' => '', 'arrowdown' => '', 'gradebooklink' => 0, 'accesscontrol' => 0, 'hiddensections' => 0, 'hiddensectionstitle' => 0, 'hiddensectionsstyle' => 0, 'namelength' => 28, 'headlength' => 10, 'taillength' => 10, 'currentsection' => 0, 'groupsmenu' => 0, 'groupslabel' => 0, 'groupscountusers' => 0, 'groupssort' => 0, 'loginasmenu' => 0, 'loginassort' => 1, 'moodlecss' => 2, 'externalcss' => '', 'internalcss' => '');
     if (!isset($this->config)) {
         $this->config = new stdClass();
     }
     foreach ($defaults as $name => $value) {
         if (!isset($this->config->{$name})) {
             $this->config->{$name} = $value;
         }
     }
     // load user-defined title (may be empty)
     $this->title = $this->config->title;
     if (empty($COURSE->context)) {
         $COURSE->context = self::context(CONTEXT_COURSE, $COURSE->id);
     }
     $this->config->numsections = self::get_numsections($COURSE);
     // make sure user is only shown one course section at a time
     if (isset($USER->id) && isset($COURSE->id) && $this->config->singlesection) {
         $update = false;
         if (function_exists('course_get_display')) {
             // Moodle <= 2.2
             $displaysection = course_get_display($COURSE->id);
         } else {
             // Moodle >= 2.3
             $name = get_class($this) . '_course' . $COURSE->id;
             $displaysection = get_user_preferences($name, 0);
             if ($section == 0) {
                 $section = $displaysection;
             } else {
                 if ($displaysection == $section) {
                     // do nothing
                 } else {
                     $displaysection = $section;
                     $update = true;
                 }
             }
         }
         if ($displaysection == 0) {
             // no course section is currently selected for this user
             if ($displaysection = $this->config->defaultsection) {
                 // use default display section
             } else {
                 if ($displaysection = $COURSE->marker) {
                     // use highlighted section
                 } else {
                     // use first visible section
                     $select = 'course = ? AND section > ? AND visible = ?';
                     $params = array($COURSE->id, 0, 1);
                     $displaysection = $DB->get_field_select('course_sections', 'MIN(section)', $select, $params);
                 }
             }
             $update = true;
         }
         if ($update) {
             if (function_exists('course_set_display')) {
                 // Moodle <= 2.2
                 course_set_display($COURSE->id, $displaysection);
             } else {
                 // Moodle >= 2.3
                 $name = get_class($this) . '_course' . $COURSE->id;
                 set_user_preference($name, $displaysection);
             }
         }
     }
     // disable up/down arrows on Moodle >= 2.3
     if (function_exists('course_get_format')) {
         $this->config->arrowup = '';
         $this->config->arrowdown = '';
     }
     // disable hiddensections functionality, if the block is in the right column
     if (isset($this->instance->region) && $this->instance->region == BLOCK_POS_RIGHT) {
         $this->config->hiddensections = 0;
     }
     if (has_capability('moodle/course:manageactivities', $COURSE->context)) {
         $this->fix_course_format();
         $this->fix_section_visibility();
         $this->fix_course_marker();
     }
     $this->config->displaysection = $displaysection;
     $this->config->courseformat = $this->get_course_format($COURSE);
     $this->config->sectiontype = $this->get_section_type();
     $this->config->coursestartdate = $COURSE->startdate;
 }